Description
When a folder contains a tsconfig.json with an extends
property, and the base tsconfig is missing, synchronizeProjectList
will return malformed data. The response contains a file entry that doesn't have a fileName
property. This breaks the editor.
TS version: Can repro from 3.8 through current (4.1)
Repro steps:
- Clone https://github.com/minestarks/repro-base-tsconfig.git
- Open in Visual Studio using the Open Folder feature
- Open index.ts
- Observe that all language service features are broken
Log contains a synchronizeProjectList
response like the following (the error is expected, the last file entry isn't)
{
"seq": 0,
"type": "response",
"command": "synchronizeProjectList",
"request_seq": 230,
"success": true,
"body": [
{
"info": {
"projectName": "E:/temp/repro_bas_tsconfig/tsconfig.json",
"version": 1,
"isInferred": false,
"options": {
"configFilePath": "E:/temp/repro_bas_tsconfig/tsconfig.json",
"allowNonTsExtensions": true
},
"languageServiceDisabled": false
},
"files": [
{
"fileName": "C:/Program Files (x86)/Microsoft SDKs/TypeScript/4.0/lib.d.ts",
"isSourceOfProjectReferenceRedirect": false
},
{
"fileName": "C:/Program Files (x86)/Microsoft SDKs/TypeScript/4.0/lib.es5.d.ts",
"isSourceOfProjectReferenceRedirect": false
},
{
"fileName": "C:/Program Files (x86)/Microsoft SDKs/TypeScript/4.0/lib.dom.d.ts",
"isSourceOfProjectReferenceRedirect": false
},
{
"fileName": "C:/Program Files (x86)/Microsoft SDKs/TypeScript/4.0/lib.webworker.importscripts.d.ts",
"isSourceOfProjectReferenceRedirect": false
},
{
"fileName": "C:/Program Files (x86)/Microsoft SDKs/TypeScript/4.0/lib.scripthost.d.ts",
"isSourceOfProjectReferenceRedirect": false
},
{
"fileName": "E:/temp/repro_bas_tsconfig/index.ts",
"isSourceOfProjectReferenceRedirect": false
},
{
"fileName": "E:/temp/repro_bas_tsconfig/tsconfig.json",
"isSourceOfProjectReferenceRedirect": false
},
{
"isSourceOfProjectReferenceRedirect": false
}
],
"projectErrors": [
{
"message": "Cannot read file 'E:/temp/repro_bas_tsconfig/tsconfig_base.json'.",
"category": "error",
"code": 5083
}
]
}
]
}
Full log:
Info 50 [12:4:21.336] -----------------------------------------------
Info 51 [12:4:21.338] event:
{"seq":0,"type":"event","event":"projectLoadingFinish","body":{"projectName":"E:/temp/repro_bas_tsconfig/tsconfig.json"}}
Info 52 [12:4:21.340] event:
{"seq":0,"type":"event","event":"telemetry","body":{"telemetryEventName":"projectInfo","payload":{"projectId":"3f502759f642092971bbd228d9008f18ff3e36b61d6fc6b82166662401f61e63","fileStats":{"js":0,"jsSize":0,"jsx":0,"jsxSize":0,"ts":1,"tsSize":24,"tsx":0,"tsxSize":0,"dts":5,"dtsSize":1053382,"deferred":0,"deferredSize":0},"compilerOptions":{},"typeAcquisition":{"enable":false,"include":false,"exclude":false},"extends":true,"files":false,"include":false,"exclude":false,"compileOnSave":false,"configFileName":"tsconfig.json","projectType":"configured","languageServiceEnabled":true,"version":"4.0.1-rc"}}}
Perf 53 [12:4:21.340] 224::openExternalProjects: elapsed time (in milliseconds) 1534.9992
Info 54 [12:4:21.341] response:
{"seq":0,"type":"response","command":"openExternalProjects","request_seq":224,"success":true,"performanceData":{"updateGraphDurationMs":1365},"body":true}
Info 55 [12:4:21.341] request:
{"seq":225,"command":"compilerOptionsForInferredProjects","arguments":{"options":{"noLib":false,"removeComments":false,"noImplicitAny":false,"declaration":false,"sourceMap":true,"noResolve":false,"target":2,"jsx":2,"module":0,"emitBOM":false,"noEmit":false,"noEmitOnError":true,"preserveConstEnums":false,"suppressImplicitAnyIndexErrors":false,"allowNonTsExtensions":true,"isolatedModules":false,"compileOnSave":false,"noEmitHelpers":false,"inlineSourceMap":false,"inlineSources":false,"emitDecoratorMetadata":false,"experimentalDecorators":false,"experimentalAsyncFunctions":false,"suppressExcessPropertyErrors":false,"skipDefaultLibCheck":false,"allowUnusedLabels":false,"noImplicitReturns":false,"noFallthroughCasesInSwitch":false,"allowUnreachableCode":false,"forceConsistentCasingInFileNames":false,"allowSyntheticDefaultImports":false,"allowJs":false,"noImplicitUseStrict":false,"noImplicitThis":false,"skipLibCheck":false,"strictNullChecks":false,"noUnusedLocals":false,"noUnusedParameters":false,"alwaysStrict":false,"importHelpers":false,"stripInternal":false,"checkJs":false,"downlevelIteration":false,"strict":false,"strictFunctionTypes":false,"noStrictGenericChecks":false,"preserveSymlinks":false,"strictPropertyInitialization":false,"esModuleInterop":false,"emitDeclarationOnly":false,"keyofStringsOnly":false,"declarationMap":false,"resolveJsonModule":false,"strictBindCallApply":false}}}
Info 56 [12:4:21.342] Scheduled: ensureProjectForOpenFiles
Perf 57 [12:4:21.342] 225::compilerOptionsForInferredProjects: elapsed time (in milliseconds) 0.7337
Info 58 [12:4:21.342] response:
{"seq":0,"type":"response","command":"compilerOptionsForInferredProjects","request_seq":225,"success":true,"body":true}
Info 59 [12:4:21.343] request:
{"seq":226,"command":"applyChangedToOpenFiles","arguments":{"openFiles":[{"fileName":"E:\temp\repro_bas_tsconfig\index.ts","scriptKind":3,"content":"\r\nconsole.log("foo"); \r\n"}]}}
Info 60 [12:4:21.344] FileWatcher:: Close:: WatchInfo: E:/temp/repro_bas_tsconfig/index.ts 500 undefined Project: WatchType: Closed Script info
Info 61 [12:4:21.344] Search path: E:/temp/repro_bas_tsconfig
Info 62 [12:4:21.345] ConfigFilePresence:: Current Watches: Config file:: File: E:/temp/repro_bas_tsconfig/tsconfig.json Currently impacted open files: RootsOfInferredProjects: OtherOpenFiles: E:/temp/repro_bas_tsconfig/index.ts Status: File added to open files impacted by this config file
Info 63 [12:4:21.345] For info: E:/temp/repro_bas_tsconfig/index.ts :: Config file name: E:/temp/repro_bas_tsconfig/tsconfig.json
Info 64 [12:4:21.346] Project 'E:/temp/repro_bas_tsconfig/tsconfig.json' (Configured)
Info 64 [12:4:21.346] Files (6)
Info 64 [12:4:21.346] -----------------------------------------------
Info 64 [12:4:21.346] Open files:
Info 64 [12:4:21.346] FileName: E:/temp/repro_bas_tsconfig/index.ts ProjectRootPath: undefined
Info 64 [12:4:21.346] Projects: E:/temp/repro_bas_tsconfig/tsconfig.json
Perf 64 [12:4:21.346] 226::applyChangedToOpenFiles: elapsed time (in milliseconds) 3.3272
Info 65 [12:4:21.346] response:
{"seq":0,"type":"response","command":"applyChangedToOpenFiles","request_seq":226,"success":true,"body":true}
Info 66 [12:4:21.347] request:
{"seq":227,"command":"synchronizeProjectList","arguments":{"knownProjects":[],"includeProjectReferenceRedirectInfo":true}}
Perf 67 [12:4:21.348] 227::synchronizeProjectList: elapsed time (in milliseconds) 1.3018
Info 68 [12:4:21.348] response:
{"seq":0,"type":"response","command":"synchronizeProjectList","request_seq":227,"success":true,"body":[{"info":{"projectName":"E:/temp/repro_bas_tsconfig/tsconfig.json","version":1,"isInferred":false,"options":{"configFilePath":"E:/temp/repro_bas_tsconfig/tsconfig.json","allowNonTsExtensions":true},"languageServiceDisabled":false},"files":[{"fileName":"C:/Program Files (x86)/Microsoft SDKs/TypeScript/4.0/lib.d.ts","isSourceOfProjectReferenceRedirect":false},{"fileName":"C:/Program Files (x86)/Microsoft SDKs/TypeScript/4.0/lib.es5.d.ts","isSourceOfProjectReferenceRedirect":false},{"fileName":"C:/Program Files (x86)/Microsoft SDKs/TypeScript/4.0/lib.dom.d.ts","isSourceOfProjectReferenceRedirect":false},{"fileName":"C:/Program Files (x86)/Microsoft SDKs/TypeScript/4.0/lib.webworker.importscripts.d.ts","isSourceOfProjectReferenceRedirect":false},{"fileName":"C:/Program Files (x86)/Microsoft SDKs/TypeScript/4.0/lib.scripthost.d.ts","isSourceOfProjectReferenceRedirect":false},{"fileName":"E:/temp/repro_bas_tsconfig/index.ts","isSourceOfProjectReferenceRedirect":false},{"fileName":"E:/temp/repro_bas_tsconfig/tsconfig.json","isSourceOfProjectReferenceRedirect":false},{"isSourceOfProjectReferenceRedirect":false}],"projectErrors":[{"message":"Cannot read file 'E:/temp/repro_bas_tsconfig/tsconfig_base.json'.","category":"error","code":5083}]}]}
Info 69 [12:4:23.342] request:
{"seq":228,"command":"openExternalProjects","arguments":{"projects":[{"projectFileName":"E:/temp/repro_bas_tsconfig/repro_bas_tsconfig","rootFiles":[{"fileName":"E:\temp\repro_bas_tsconfig\index.ts","scriptKind":3},{"fileName":"E:\temp\repro_bas_tsconfig\tsconfig.json","scriptKind":0}],"options":{"allowJs":false,"allowNonTsExtensions":false,"allowSyntheticDefaultImports":false,"allowUnreachableCode":false,"allowUnusedLabels":false,"alwaysStrict":false,"checkJs":false,"compileOnSave":true,"declaration":false,"declarationMap":false,"downlevelIteration":false,"emitBOM":false,"emitDeclarationOnly":false,"emitDecoratorMetadata":false,"esModuleInterop":false,"experimentalAsyncFunctions":false,"experimentalDecorators":false,"forceConsistentCasingInFileNames":false,"importHelpers":false,"inlineSourceMap":false,"inlineSources":false,"isolatedModules":false,"jsx":2,"keyofStringsOnly":false,"noEmit":false,"noEmitHelpers":false,"noEmitOnError":true,"noFallthroughCasesInSwitch":false,"noImplicitAny":false,"noImplicitReturns":false,"noImplicitThis":false,"noImplicitUseStrict":false,"noLib":false,"noResolve":false,"noStrictGenericChecks":false,"noUnusedLocals":false,"noUnusedParameters":false,"preserveConstEnums":false,"preserveSymlinks":false,"removeComments":false,"resolveJsonModule":false,"skipDefaultLibCheck":false,"skipLibCheck":false,"sourceMap":true,"strict":false,"strictBindCallApply":false,"strictFunctionTypes":false,"strictNullChecks":false,"strictPropertyInitialization":false,"stripInternal":false,"suppressExcessPropertyErrors":false,"suppressImplicitAnyIndexErrors":false,"target":1}}]}}
Perf 70 [12:4:23.343] 228::openExternalProjects: elapsed time (in milliseconds) 0.5764
Info 71 [12:4:23.343] response:
{"seq":0,"type":"response","command":"openExternalProjects","request_seq":228,"success":true,"body":true}
Info 72 [12:4:23.343] request:
{"seq":229,"command":"synchronizeProjectList","arguments":{"knownProjects":[],"includeProjectReferenceRedirectInfo":true}}
Perf 73 [12:4:23.344] 229::synchronizeProjectList: elapsed time (in milliseconds) 0.2643
Info 74 [12:4:23.344] response:
{"seq":0,"type":"response","command":"synchronizeProjectList","request_seq":229,"success":true,"body":[{"info":{"projectName":"E:/temp/repro_bas_tsconfig/tsconfig.json","version":1,"isInferred":false,"options":{"configFilePath":"E:/temp/repro_bas_tsconfig/tsconfig.json","allowNonTsExtensions":true},"languageServiceDisabled":false},"files":[{"fileName":"C:/Program Files (x86)/Microsoft SDKs/TypeScript/4.0/lib.d.ts","isSourceOfProjectReferenceRedirect":false},{"fileName":"C:/Program Files (x86)/Microsoft SDKs/TypeScript/4.0/lib.es5.d.ts","isSourceOfProjectReferenceRedirect":false},{"fileName":"C:/Program Files (x86)/Microsoft SDKs/TypeScript/4.0/lib.dom.d.ts","isSourceOfProjectReferenceRedirect":false},{"fileName":"C:/Program Files (x86)/Microsoft SDKs/TypeScript/4.0/lib.webworker.importscripts.d.ts","isSourceOfProjectReferenceRedirect":false},{"fileName":"C:/Program Files (x86)/Microsoft SDKs/TypeScript/4.0/lib.scripthost.d.ts","isSourceOfProjectReferenceRedirect":false},{"fileName":"E:/temp/repro_bas_tsconfig/index.ts","isSourceOfProjectReferenceRedirect":false},{"fileName":"E:/temp/repro_bas_tsconfig/tsconfig.json","isSourceOfProjectReferenceRedirect":false},{"isSourceOfProjectReferenceRedirect":false}],"projectErrors":[{"message":"Cannot read file 'E:/temp/repro_bas_tsconfig/tsconfig_base.json'.","category":"error","code":5083}]}]}
Info 75 [12:4:23.853] Running: ensureProjectForOpenFiles
Info 76 [12:4:23.853] Before ensureProjectForOpenFiles:
Info 77 [12:4:23.853] Project 'E:/temp/repro_bas_tsconfig/tsconfig.json' (Configured)
Info 77 [12:4:23.853] Files (6)
Info 77 [12:4:23.853] -----------------------------------------------
Info 77 [12:4:23.853] Open files:
Info 77 [12:4:23.853] FileName: E:/temp/repro_bas_tsconfig/index.ts ProjectRootPath: undefined
Info 77 [12:4:23.853] Projects: E:/temp/repro_bas_tsconfig/tsconfig.json
Info 77 [12:4:23.853] After ensureProjectForOpenFiles:
Info 78 [12:4:23.853] Project 'E:/temp/repro_bas_tsconfig/tsconfig.json' (Configured)
Info 78 [12:4:23.853] Files (6)
Info 78 [12:4:23.853] -----------------------------------------------
Info 78 [12:4:23.853] Open files:
Info 78 [12:4:23.853] FileName: E:/temp/repro_bas_tsconfig/index.ts ProjectRootPath: undefined
Info 78 [12:4:23.853] Projects: E:/temp/repro_bas_tsconfig/tsconfig.json
Info 78 [12:4:23.854] got projects updated in background, updating diagnostics for E:/temp/repro_bas_tsconfig/index.ts
Info 79 [12:4:23.854] event:
{"seq":0,"type":"event","event":"projectsUpdatedInBackground","body":{"openFiles":["E:/temp/repro_bas_tsconfig/index.ts"]}}
Info 80 [12:4:25.867] request:
{"seq":230,"command":"synchronizeProjectList","arguments":{"knownProjects":[],"includeProjectReferenceRedirectInfo":true}}
Perf 81 [12:4:25.867] 230::synchronizeProjectList: elapsed time (in milliseconds) 0.3291
Info 82 [12:4:25.867] response:
{"seq":0,"type":"response","command":"synchronizeProjectList","request_seq":230,"success":true,"body":[{"info":{"projectName":"E:/temp/repro_bas_tsconfig/tsconfig.json","version":1,"isInferred":false,"options":{"configFilePath":"E:/temp/repro_bas_tsconfig/tsconfig.json","allowNonTsExtensions":true},"languageServiceDisabled":false},"files":[{"fileName":"C:/Program Files (x86)/Microsoft SDKs/TypeScript/4.0/lib.d.ts","isSourceOfProjectReferenceRedirect":false},{"fileName":"C:/Program Files (x86)/Microsoft SDKs/TypeScript/4.0/lib.es5.d.ts","isSourceOfProjectReferenceRedirect":false},{"fileName":"C:/Program Files (x86)/Microsoft SDKs/TypeScript/4.0/lib.dom.d.ts","isSourceOfProjectReferenceRedirect":false},{"fileName":"C:/Program Files (x86)/Microsoft SDKs/TypeScript/4.0/lib.webworker.importscripts.d.ts","isSourceOfProjectReferenceRedirect":false},{"fileName":"C:/Program Files (x86)/Microsoft SDKs/TypeScript/4.0/lib.scripthost.d.ts","isSourceOfProjectReferenceRedirect":false},{"fileName":"E:/temp/repro_bas_tsconfig/index.ts","isSourceOfProjectReferenceRedirect":false},{"fileName":"E:/temp/repro_bas_tsconfig/tsconfig.json","isSourceOfProjectReferenceRedirect":false},{"isSourceOfProjectReferenceRedirect":false}],"projectErrors":[{"message":"Cannot read file 'E:/temp/repro_bas_tsconfig/tsconfig_base.json'.","category":"error","code":5083}]}]}
Perf 83 [12:4:26.890] GC::before 40667416, after 40391640