microsoft / microsoft/TypeScript

createProgram calls host.getSourceFile multiple times

Offen
#26,259 1 Kommentar 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

Docs
Vorherrschende Sprache
Go
Sterne
111k
Forks
14.4k
Ø Merge
1 T. 19 Std.
Gemergte PRs (30 T.)
117

Beschreibung

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.

Beitragsleitfaden

Beitragsleitfaden öffnen

Erste Schritte

  1. Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
  3. Forke das Repository und arbeite in einem Branch.
  4. Öffne einen Pull Request, der die Issue-Nummer nennt.

Rechercherichtung

Beginne mit dem createProgram-Repro und verfolge die Aufrufe durch tryReuseStructureFromOldProgram und findSourceFile. Überprüfe das Verhalten mit einem protokollierenden CompilerHost und stelle dann sicher, dass jede fileName genau einmal angefordert wird, wenn ein nicht vollständiges altes Programm wiederverwendet wird, ohne das erwartete SourceFile-Verhalten zu verlieren.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
typescript
Bereich
compilers, performance
Issue-Typ
Bug
Schwierigkeit
4/5
Geschätzter Aufwand
3-5 Tage
Aktivitätsstatus
Veraltet
Klarheit
Klar beschrieben
Anfängerfreundlichkeit
35/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.