Fix codefix crash on circular aliases (#59215)

This commit is contained in:
Andrew Branch 2024-07-10 15:37:12 -07:00 коммит произвёл GitHub
Родитель 972e9a70c6
Коммит 64f89e7961
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: B5690EEEBB952194
3 изменённых файлов: 354 добавлений и 0 удалений

Просмотреть файл

@ -580,6 +580,7 @@ function isImportableSymbol(symbol: Symbol, checker: TypeChecker) {
export function forEachNameOfDefaultExport<T>(defaultExport: Symbol, checker: TypeChecker, compilerOptions: CompilerOptions, preferCapitalizedNames: boolean, cb: (name: string) => T | undefined): T | undefined {
let chain: Symbol[] | undefined;
let current: Symbol | undefined = defaultExport;
const seen = new Map<Symbol, true>();
while (current) {
// The predecessor to this function also looked for a name on the `localSymbol`
@ -597,6 +598,7 @@ export function forEachNameOfDefaultExport<T>(defaultExport: Symbol, checker: Ty
}
chain = append(chain, current);
if (!addToSeen(seen, current)) break;
current = current.flags & SymbolFlags.Alias ? checker.getImmediateAliasedSymbol(current) : undefined;
}

Просмотреть файл

@ -0,0 +1,333 @@
currentDirectory:: / useCaseSensitiveFileNames: false
Info seq [hh:mm:ss:mss] Provided types map file "/typesMap.json" doesn't exist
//// [/index.ts]
my
//// [/lib.d.ts]
lib.d.ts-Text
//// [/lib.decorators.d.ts]
lib.decorators.d.ts-Text
//// [/lib.decorators.legacy.d.ts]
lib.decorators.legacy.d.ts-Text
//// [/tsconfig.json]
{
"compilerOptions": {
"module": "preserve"
}
}
//// [/types.d.ts]
declare module "mymod" {
import mymod from "mymod";
export default mymod;
}
Info seq [hh:mm:ss:mss] request:
{
"seq": 0,
"type": "request",
"arguments": {
"file": "/tsconfig.json"
},
"command": "open"
}
Info seq [hh:mm:ss:mss] getConfigFileNameForFile:: File: /tsconfig.json ProjectRootPath: undefined:: Result: /tsconfig.json
Info seq [hh:mm:ss:mss] Creating configuration project /tsconfig.json
Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /tsconfig.json 2000 undefined Project: /tsconfig.json WatchType: Config file
Info seq [hh:mm:ss:mss] event:
{
"seq": 0,
"type": "event",
"event": "projectLoadingStart",
"body": {
"projectName": "/tsconfig.json",
"reason": "Creating possible configured project for /tsconfig.json to open"
}
}
Info seq [hh:mm:ss:mss] Config: /tsconfig.json : {
"rootNames": [
"/index.ts",
"/lib.d.ts",
"/lib.decorators.d.ts",
"/lib.decorators.legacy.d.ts",
"/types.d.ts"
],
"options": {
"module": 200,
"configFilePath": "/tsconfig.json"
}
}
Info seq [hh:mm:ss:mss] DirectoryWatcher:: Added:: WatchInfo: 1 undefined Config: /tsconfig.json WatchType: Wild card directory
Info seq [hh:mm:ss:mss] Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: 1 undefined Config: /tsconfig.json WatchType: Wild card directory
Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /index.ts 500 undefined WatchType: Closed Script info
Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /lib.d.ts 500 undefined WatchType: Closed Script info
Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /lib.decorators.d.ts 500 undefined WatchType: Closed Script info
Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /lib.decorators.legacy.d.ts 500 undefined WatchType: Closed Script info
Info seq [hh:mm:ss:mss] FileWatcher:: Added:: WatchInfo: /types.d.ts 500 undefined WatchType: Closed Script info
Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /tsconfig.json
Info seq [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /tsconfig.json projectStateVersion: 1 projectProgramVersion: 0 structureChanged: true structureIsReused:: Not Elapsed:: *ms
Info seq [hh:mm:ss:mss] Project '/tsconfig.json' (Configured)
Info seq [hh:mm:ss:mss] Files (5)
/lib.decorators.d.ts Text-1 lib.decorators.d.ts-Text
/lib.decorators.legacy.d.ts Text-1 lib.decorators.legacy.d.ts-Text
/index.ts Text-1 "my"
/lib.d.ts Text-1 lib.d.ts-Text
/types.d.ts Text-1 "declare module \"mymod\" {\n import mymod from \"mymod\";\n export default mymod;\n}"
lib.decorators.d.ts
Library referenced via 'decorators' from file 'lib.d.ts'
Matched by default include pattern '**/*'
lib.decorators.legacy.d.ts
Library referenced via 'decorators.legacy' from file 'lib.d.ts'
Matched by default include pattern '**/*'
index.ts
Matched by default include pattern '**/*'
lib.d.ts
Matched by default include pattern '**/*'
types.d.ts
Matched by default include pattern '**/*'
Info seq [hh:mm:ss:mss] -----------------------------------------------
Info seq [hh:mm:ss:mss] event:
{
"seq": 0,
"type": "event",
"event": "projectLoadingFinish",
"body": {
"projectName": "/tsconfig.json"
}
}
Info seq [hh:mm:ss:mss] event:
{
"seq": 0,
"type": "event",
"event": "configFileDiag",
"body": {
"triggerFile": "/tsconfig.json",
"configFile": "/tsconfig.json",
"diagnostics": []
}
}
Info seq [hh:mm:ss:mss] getConfigFileNameForFile:: File: /tsconfig.json ProjectRootPath: undefined:: Result: undefined
Info seq [hh:mm:ss:mss] Starting updateGraphWorker: Project: /dev/null/inferredProject1*
Info seq [hh:mm:ss:mss] Finishing updateGraphWorker: Project: /dev/null/inferredProject1* projectStateVersion: 1 projectProgramVersion: 0 structureChanged: true structureIsReused:: Not Elapsed:: *ms
Info seq [hh:mm:ss:mss] Project '/dev/null/inferredProject1*' (Inferred)
Info seq [hh:mm:ss:mss] Files (4)
/lib.d.ts Text-1 lib.d.ts-Text
/lib.decorators.d.ts Text-1 lib.decorators.d.ts-Text
/lib.decorators.legacy.d.ts Text-1 lib.decorators.legacy.d.ts-Text
/tsconfig.json SVC-1-0 "{\n \"compilerOptions\": {\n \"module\": \"preserve\"\n }\n}"
lib.d.ts
Default library for target 'es5'
lib.decorators.d.ts
Library referenced via 'decorators' from file 'lib.d.ts'
lib.decorators.legacy.d.ts
Library referenced via 'decorators.legacy' from file 'lib.d.ts'
tsconfig.json
Root file specified for compilation
Info seq [hh:mm:ss:mss] -----------------------------------------------
Info seq [hh:mm:ss:mss] Project '/tsconfig.json' (Configured)
Info seq [hh:mm:ss:mss] Files (5)
Info seq [hh:mm:ss:mss] -----------------------------------------------
Info seq [hh:mm:ss:mss] Project '/dev/null/inferredProject1*' (Inferred)
Info seq [hh:mm:ss:mss] Files (4)
Info seq [hh:mm:ss:mss] -----------------------------------------------
Info seq [hh:mm:ss:mss] Open files:
Info seq [hh:mm:ss:mss] FileName: /tsconfig.json ProjectRootPath: undefined
Info seq [hh:mm:ss:mss] Projects: /dev/null/inferredProject1*
Info seq [hh:mm:ss:mss] response:
{
"seq": 0,
"type": "response",
"command": "open",
"request_seq": 0,
"success": true,
"performanceData": {
"updateGraphDurationMs": *
}
}
After Request
watchedFiles::
/index.ts: *new*
{"pollingInterval":500}
/lib.d.ts: *new*
{"pollingInterval":500}
/lib.decorators.d.ts: *new*
{"pollingInterval":500}
/lib.decorators.legacy.d.ts: *new*
{"pollingInterval":500}
/tsconfig.json: *new*
{"pollingInterval":2000}
/types.d.ts: *new*
{"pollingInterval":500}
watchedDirectoriesRecursive::
: *new*
{}
Projects::
/dev/null/inferredProject1* (Inferred) *new*
projectStateVersion: 1
projectProgramVersion: 1
/tsconfig.json (Configured) *new*
projectStateVersion: 1
projectProgramVersion: 1
noOpenRef: true
ScriptInfos::
/index.ts *new*
version: Text-1
containingProjects: 1
/tsconfig.json
/lib.d.ts *new*
version: Text-1
containingProjects: 2
/tsconfig.json
/dev/null/inferredProject1*
/lib.decorators.d.ts *new*
version: Text-1
containingProjects: 2
/tsconfig.json
/dev/null/inferredProject1*
/lib.decorators.legacy.d.ts *new*
version: Text-1
containingProjects: 2
/tsconfig.json
/dev/null/inferredProject1*
/tsconfig.json (Open) *new*
version: SVC-1-0
containingProjects: 1
/dev/null/inferredProject1* *default*
/types.d.ts *new*
version: Text-1
containingProjects: 1
/tsconfig.json
Info seq [hh:mm:ss:mss] request:
{
"seq": 1,
"type": "request",
"arguments": {
"preferences": {
"includeCompletionsForModuleExports": true,
"includeCompletionsWithInsertText": true
}
},
"command": "configure"
}
Info seq [hh:mm:ss:mss] response:
{
"seq": 0,
"type": "response",
"command": "configure",
"request_seq": 1,
"success": true
}
Info seq [hh:mm:ss:mss] request:
{
"seq": 2,
"type": "request",
"arguments": {
"file": "/index.ts",
"includeLinePosition": true
},
"command": "syntacticDiagnosticsSync"
}
Info seq [hh:mm:ss:mss] response:
{
"seq": 0,
"type": "response",
"command": "syntacticDiagnosticsSync",
"request_seq": 2,
"success": true,
"body": []
}
Info seq [hh:mm:ss:mss] request:
{
"seq": 3,
"type": "request",
"arguments": {
"file": "/index.ts",
"includeLinePosition": true
},
"command": "semanticDiagnosticsSync"
}
Info seq [hh:mm:ss:mss] response:
{
"seq": 0,
"type": "response",
"command": "semanticDiagnosticsSync",
"request_seq": 3,
"success": true,
"body": [
{
"message": "Cannot find name 'my'.",
"start": 0,
"length": 2,
"category": "error",
"code": 2304,
"startLocation": {
"line": 1,
"offset": 1
},
"endLocation": {
"line": 1,
"offset": 3
}
}
]
}
Info seq [hh:mm:ss:mss] request:
{
"seq": 4,
"type": "request",
"arguments": {
"file": "/index.ts",
"includeLinePosition": true
},
"command": "suggestionDiagnosticsSync"
}
Info seq [hh:mm:ss:mss] response:
{
"seq": 0,
"type": "response",
"command": "suggestionDiagnosticsSync",
"request_seq": 4,
"success": true,
"body": []
}
Info seq [hh:mm:ss:mss] request:
{
"seq": 5,
"type": "request",
"arguments": {
"file": "/index.ts",
"startLine": 1,
"startOffset": 1,
"endLine": 1,
"endOffset": 3,
"errorCodes": [
2304
]
},
"command": "getCodeFixes"
}
Info seq [hh:mm:ss:mss] response:
{
"seq": 0,
"type": "response",
"command": "getCodeFixes",
"request_seq": 5,
"success": true,
"body": []
}

Просмотреть файл

@ -0,0 +1,19 @@
/// <reference path="../fourslash.ts" />
// @Filename: /tsconfig.json
//// {
//// "compilerOptions": {
//// "module": "preserve"
//// }
//// }
// @Filename: /types.d.ts
//// declare module "mymod" {
//// import mymod from "mymod";
//// export default mymod;
//// }
// @Filename: /index.ts
//// my/**/
verify.importFixModuleSpecifiers("", []);