Cosa stiamo costruendo nel 2020

Mar 10 2020
Il nostro piano per il 2020 copre tre aree: Flow fornisce un server della lingua per fornire funzionalità avanzate di modifica e esplorazione del codice come diagnostica nell'editor (errori di tipo), completamento automatico e "vai alla definizione". Sebbene il nostro obiettivo sia fornire la migliore esperienza in VS Code, qualsiasi editor che utilizza LSP può trarre vantaggio dal server del linguaggio di Flow.
Foto di Aksonsat Uanthoeng da Pexels

Il nostro piano per il 2020 copre tre aree:

  • Migliora le capacità e la reattività della nostra esperienza di navigazione e modifica del codice VS.
  • Rendi il nostro sistema di tipi più semplice, espressivo e corretto
  • Riduci il nostro utilizzo massimo della memoria mantenendo la linea sul ricontrollare le prestazioni

Flow fornisce un server della lingua per fornire funzionalità avanzate di modifica e esplorazione del codice come diagnostica nell'editor (errori di tipo), completamento automatico e "vai alla definizione". Sebbene il nostro obiettivo sia fornire la migliore esperienza in VS Code, qualsiasi editor che utilizza LSP può trarre vantaggio dal server del linguaggio di Flow.

Nel 2020 ci concentreremo su due tipi di investimenti nella nostra esperienza di editing e navigazione. Innanzitutto, continueremo a migliorare l'affidabilità e la reattività delle nostre funzionalità IDE. In secondo luogo, aggiungeremo il supporto per alcune funzionalità di IntelliSense più richieste.

Il server del linguaggio Flow non risponde sempre immediatamente perché deve essere inizializzato al primo avvio e talvolta deve essere riavviato dopo eventi come rebase di grandi dimensioni. La maggior parte delle funzionalità della lingua richiede che il server Flow sia in esecuzione continuamente durante la modifica del codice. Ove possibile, convertiremo le nostre richieste di modifica e navigazione per renderle possibile completarle senza richiedere il server. Continueremo anche a ridurre le situazioni in cui il server Flow deve riavviarsi.

Una seconda serie di investimenti deriva dall'aggiunta del supporto per le funzionalità IntelliSense più richieste : informazioni sui parametri, informazioni rapide e correzioni rapide.

  • Le informazioni sui parametri includono la guida alla firma, il numero e i tipi di parametri previsti, visualizzati durante la digitazione della chiamata alla funzione. Mostreremo anche la documentazione sul parametro estratto dai commenti JSDoc nel codice.
  • Le informazioni rapide mostrano la dichiarazione quando passi il mouse su un identificatore nel tuo codice. Flow mostra già le firme delle funzioni. Miglioreremo la formattazione per le informazioni rapide e aggiungeremo commenti alla documentazione simili alle informazioni sui parametri.
  • Abbiamo appena aggiunto la nostra prima funzione di correzione rapida: "Intendevi?" che suggerisce correzioni al codice durante la digitazione. Ad esempio, se scrivi foo.barsu un oggetto fooche non ha un campo denominato barma ha un campo denominato baz, la soluzione rapida applicherà quel suggerimento. Stiamo anche studiando l'aggiunta di soppressioni degli errori di flusso e la generazione automatica di importistruzioni statiche .

Riteniamo che un sistema di tipi progettato con cura, semplice, espressivo e corretto possa fornire un'esperienza migliore agli sviluppatori.

  • Semplice: gli sviluppatori possono prevedere come si comporterebbe Flow sul loro codice?
  • Espressivo: gli sviluppatori possono fare quello che devono fare senza essere bloccati da Flow?
  • Corretto: gli sviluppatori possono fare affidamento su Flow per aiutarli a evitare costosi errori comuni?
  • L'uso di thisfunzioni e metodi in spesso porta a codice non controllato, perché può essere digitato implicitamente come any. L'utilizzo anynon è sicuro e impedisce a Flow di segnalare errori. L'implementazione della digitazione per thisconsentirà a Flow di controllare il codice che utilizza this.
  • I tipi di oggetto non sigillati vengono utilizzati per modellare proprietà e valori letterali di oggetti vuoti sulle funzioni. Gli oggetti non sigillati consentono di scrivere nuove proprietà in qualsiasi momento. Sono utili per scenari come l'abilitazione dell'inizializzazione di oggetti su più istruzioni. Ma Flow non controlla le letture da oggetti non sigillati senza scritture corrispondenti . Lavoreremo per risolvere questo inconveniente, monitorando attentamente i modelli di inizializzazione comuni.
  • Molti dei tipi di utilità di Flow , come $ObjMape $PropertyType, non riflettono la semantica delle operazioni di runtime corrispondenti. Creeremo design di prima classe per questi tipi.
  • Le soppressioni degli errori di flusso sono molto grossolane. L'aggiunta di una $FlowFixMeriga di codice sopra una riga per sopprimere un tipo di errore in realtà sopprime tutti gli errori introdotti da quel codice, mascherando potenzialmente errori futuri. Stiamo progettando codici di errore che ti consentiranno di eliminare errori specifici senza nascondere un altro errore sulla stessa riga di codice. Inoltre, sposteremo le soppressioni nella posizione principale di un errore, impedendo a una soppressione allegata a una definizione di nascondere gli errori nel punto in cui viene utilizzata quella definizione.
  • I tipi e le funzioni generiche hanno attualmente un comportamento imprevedibile, con parametri di tipo generico in grado di sfuggire al loro ambito e chiamate a funzioni generiche in grado di accumulare nuovi limiti lontano dal sito di chiamata. Stiamo progettando un nuovo comportamento per i generici, incluso un rilevamento più affidabile degli errori nelle funzioni generiche, un test per prevenire parametri di tipo con escape e un controllo per garantire che le chiamate di funzione siano adeguatamente vincolate.

Il team Flow ha apportato enormi miglioramenti delle prestazioni lo scorso anno , riducendo i tempi di ricontrollo del 70%. Abbiamo ricevuto un enorme feedback positivo dagli sviluppatori di Facebook sui nostri miglioramenti delle prestazioni. Miriamo a mantenere la linea sulle prestazioni, anche se i nostri codebase JavaScript crescono. Stiamo anche lavorando per ridurre l'utilizzo della memoria del flusso in tutte le situazioni.

In chiusura

Nel 2020, il team di Flow offrirà un'esperienza di sviluppo alla pari con gli standard di affidabilità, completezza delle funzionalità e piacere del settore. Come parte di questa esperienza di sviluppo, continueremo a migliorare i fondamentali: utilizzo della memoria e affidabilità. Forniremo le funzionalità di modifica e navigazione IDE più richieste. E miglioreremo il sistema di tipi di Flow per rendere più facile per gli sviluppatori scrivere codice sicuro e corretto.

Ci terremo in contatto con te su questo blog, su GitHub e sul nostro canale Flowtype Discord .