microsoft / microsoft/TypeScript
Find all references doesn't find all results and crashes tsserver if `type S = import().S` syntax is used
Dieses Issue hat noch niemand übernommen.
- Vorherrschende Sprache
- Go
- Sterne
- 111k
- Forks
- 14.3k
- Ø Merge
- 1 T. 19 Std.
- Gemergte PRs (30 T.)
- 117
Beschreibung
TypeScript Version: 3.9.0-dev.20200223, 3.8.2
Search Terms: Find all references crash tsserver reexport
Code
file1.ts
export class Foo {}
export class Bar {}
file2.ts
import * as f1 from './file1';
export class Container {
readonly classes = f1;
}
declare const c: Container;
c.classes.Foo;
// Uncommenting this line make 'Find all references' work again
// export { f1 };
file3.ts
import { Container } from './file2';
declare const c: Container;
// 'Go to definition' works from here but 'Find all references' doesn't show this line
c.classes.Foo;
Expected behavior:
All three references to Foo are shown, in file1.ts, file2.ts and file3.ts.
Actual behavior:
Reference in file3.ts is not shown.
Workaround?:
Uncommenting // export { f1 }; in file2.ts makes all references to be found, even if no other file imports f1.
EDITED (2020-02-23): I tested this section with TS 3.8.2 and doesn't crash tsserver anymore
In the same repo, but another branch it is shown that with a new file:
file4.ts
type S = import('./file3').S;
find all references on Foo crashes tsserver. Changing file4 to:
import { S } from './file3';
avoid the crash. The tsserver.log shows:
{"seq":11,"type":"request","command":"references","arguments":{"file":"/tmp/find-references-ts-bug/file3.ts","line":5,"offset":12}}
Err 109 [19:9:26.28] Exception on executing command {"seq":11,"type":"request","command":"references","arguments":{"file":"/tmp/find-references-ts-bug/file3.ts","line":5,"offset":12}}:
Debug Failure. False expression.
Error: Debug Failure. False expression.
at getSourceFileLikeForImportDeclaration (/tmp/find-references-ts-bug/node_modules/typescript/lib/tsserver.js:109406:22)
at addIndirectUsers (/tmp/find-references-ts-bug/node_modules/typescript/lib/tsserver.js:108990:42)
at addIndirectUsers (/tmp/find-references-ts-bug/node_modules/typescript/lib/tsserver.js:108990:25)
at handleNamespaceImport (/tmp/find-references-ts-bug/node_modules/typescript/lib/tsserver.js:108964:25)
at handleDirectImports (/tmp/find-references-ts-bug/node_modules/typescript/lib/tsserver.js:108929:37)
at getImportersForExport (/tmp/find-references-ts-bug/node_modules/typescript/lib/tsserver.js:108878:13)
at State.importTracker (/tmp/find-references-ts-bug/node_modules/typescript/lib/tsserver.js:108854:26)
at State.getImportSearches (/tmp/find-references-ts-bug/node_modules/typescript/lib/tsserver.js:110199:33)
at searchForImportsOfExport (/tmp/find-references-ts-bug/node_modules/typescript/lib/tsserver.js:110248:32)
at getImportOrExportReferences (/tmp/find-references-ts-bug/node_modules/typescript/lib/tsserver.js:110672:21)
at getReferencesAtLocation (/tmp/find-references-ts-bug/node_modules/typescript/lib/tsserver.js:110592:17)
at getReferencesInContainer (/tmp/find-references-ts-bug/node_modules/typescript/lib/tsserver.js:110536:21)
at getReferencesInContainerOrFiles (/tmp/find-references-ts-bug/node_modules/typescript/lib/tsserver.js:110095:21)
at getReferencedSymbolsForSymbol (/tmp/find-references-ts-bug/node_modules/typescript/lib/tsserver.js:110086:21)
at Object.getReferencedSymbolsForNode (/tmp/find-references-ts-bug/node_modules/typescript/lib/tsserver.js:109889:34)
at Object.findReferencedSymbols (/tmp/find-references-ts-bug/node_modules/typescript/lib/tsserver.js:109567:60)
at Proxy.findReferences (/tmp/find-references-ts-bug/node_modules/typescript/lib/tsserver.js:130935:41)
at /tmp/find-references-ts-bug/node_modules/typescript/lib/tsserver.js:139099:68
at callbackProjectAndLocation (/tmp/find-references-ts-bug/node_modules/typescript/lib/tsserver.js:139180:13)
at /tmp/find-references-ts-bug/node_modules/typescript/lib/tsserver.js:139127:24
at forEachProjectInProjects (/tmp/find-references-ts-bug/node_modules/typescript/lib/tsserver.js:139109:17)
at combineProjectOutputWorker (/tmp/find-references-ts-bug/node_modules/typescript/lib/tsserver.js:139124:13)
at combineProjectOutputForReferences (/tmp/find-references-ts-bug/node_modules/typescript/lib/tsserver.js:139080:13)
at IOSession.Session.getReferences (/tmp/find-references-ts-bug/node_modules/typescript/lib/tsserver.js:140208:34)
at Session.handlers.ts.createMapFromTemplate._a.(anonymous function) (/tmp/find-references-ts-bug/node_modules/typescript/lib/tsserver.js:139339:61)
at /tmp/find-references-ts-bug/node_modules/typescript/lib/tsserver.js:140942:88
at IOSession.Session.executeWithRequestId (/tmp/find-references-ts-bug/node_modules/typescript/lib/tsserver.js:140933:28)
at IOSession.Session.executeCommand (/tmp/find-references-ts-bug/node_modules/typescript/lib/tsserver.js:140942:33)
at IOSession.Session.onMessage (/tmp/find-references-ts-bug/node_modules/typescript/lib/tsserver.js:140965:35)
at Interface.<anonymous> (/tmp/find-references-ts-bug/node_modules/typescript/lib/tsserver.js:142280:27)
at Interface.emit (events.js:182:13)
at Interface._onLine (readline.js:290:10)
at Interface._normalWrite (readline.js:433:12)
at Socket.ondata (readline.js:149:10)
at Socket.emit (events.js:182:13)
at addChunk (_stream_readable.js:283:12)
at readableAddChunk (_stream_readable.js:264:11)
at Socket.Readable.push (_stream_readable.js:219:10)
at Pipe.onStreamRead [as onread] (internal/stream_base_commons.js:94:17)
File text of /tmp/find-references-ts-bug/file3.ts:
import { Container } from './file2';
declare const c: Container;
// 'Go to definition' works from here but 'Find all references' doesn't
c.classes.Foo;
export type S = {};
Related Issues:
Maybe #28680
Beitragsleitfaden
Erste Schritte
- Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
- Forke das Repository und arbeite in einem Branch.
- Öffne einen Pull Request, der die Issue-Nummer nennt.
Rechercherichtung
Reproduziere das Problem aus dem verknüpften Repository find-references-ts-bug mithilfe der Beispiele file1.ts bis file4.ts und untersuche anschließend den tsserver references-Befehl sowie das bereitgestellte tsserver.log. Als erledigt gilt die Aufgabe, wenn Find all references die Verwendungen von Foo in file1.ts, file2.ts und file3.ts findet, ohne abzustürzen, wenn type S = import('./file3').S vorhanden ist.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- typescript
- Bereich
- developer-experience, tooling
- Issue-Typ
- Bug
- Schwierigkeit
- 4/5
- Geschätzter Aufwand
- 3-5 Tage
- Aktivitätsstatus
- Veraltet
- Klarheit
- Größtenteils klar
- Anfängerfreundlichkeit
- 35/100