microsoft / microsoft/TypeScript

createProgram calls host.getSourceFile multiple times

Aperta
#26,259 1 commento 0 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

Docs
Lingua principale
Go
Stelle
111k
Fork
14.3k
Merge medio
1g 19h
PR unite (30g)
117

Descrizione

TypeScript Version: 3.1.0-dev.20180807

Search Terms:

Repro

declare let oldProgram: ts.Program;
const originalHost = ts.createCompilerHost(true);
const host = {
  ... originalHost,
  getSourceFile(fileName, ...args) {
    console.log(fileName);
    return originalHost.getSoruceFile(fileName, ...args);
  }
const newProgram = ts.createProgram(oldProgram.getRootFileNames(), oldProgram.getCompilerOptions(), host, oldProgram);

Expected behavior:

Each fileName is logged once.

Actual behavior:

If structureIsReused !== Completely fileNames are logged twice: one time from tryReuseStructureFromOldProgram and another time from findSourceFile. That means these SourceFiles are requested multiple times. This is especially a problem with the default CompilerHost which has no caching. It therefore reads and parses each file multiple times, but only the last one is actually used.

Guida per i contributori

Apri la guida per i contributori

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Direzione di ricerca

Inizia con il repro di createProgram e traccia le chiamate attraverso tryReuseStructureFromOldProgram e findSourceFile. Verifica il comportamento con un CompilerHost che esegua il logging, quindi assicurati che ogni fileName venga richiesto una sola volta quando si riutilizza un programma precedente non completo, senza perdere il comportamento previsto di SourceFile.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Valutazione

Stack tecnologico
typescript
Ambito
compilers, performance
Tipo di issue
Bug
Difficoltà
4/5
Tempo stimato
3-5 giorni
Stato di attività
Ferma
Chiarezza
Specificata chiaramente
Idoneità per principianti
35/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.