diff --git a/src/server/editorServices.ts b/src/server/editorServices.ts index 23f8d844c9856..70d7db4f8781d 100644 --- a/src/server/editorServices.ts +++ b/src/server/editorServices.ts @@ -2935,8 +2935,10 @@ export class ProjectService { this.watchWildcards(configFilename, configFileExistenceInfo, project); } project.enablePluginsWithOptions(compilerOptions); - const filesToAdd = parsedCommandLine.fileNames.concat(project.getExternalFiles(ProgramUpdateLevel.Full)); - this.updateRootAndOptionsOfNonInferredProject(project, filesToAdd, fileNamePropertyReader, compilerOptions, parsedCommandLine.typeAcquisition!, parsedCommandLine.compileOnSave, parsedCommandLine.watchOptions); + if (!project.hasPluginSetExtraFileExtensions) { + const filesToAdd = parsedCommandLine.fileNames.concat(project.getExternalFiles(ProgramUpdateLevel.Full)); + this.updateRootAndOptionsOfNonInferredProject(project, filesToAdd, fileNamePropertyReader, compilerOptions, parsedCommandLine.typeAcquisition!, parsedCommandLine.compileOnSave, parsedCommandLine.watchOptions); + } tracing?.pop(); } diff --git a/src/server/project.ts b/src/server/project.ts index 90205d695015c..879b849873c30 100644 --- a/src/server/project.ts +++ b/src/server/project.ts @@ -375,6 +375,14 @@ export abstract class Project implements LanguageServiceHost, ModuleResolutionHo /** @internal */ protected readonly plugins: PluginModuleWithName[] = []; + /** + * Used to determine whether enabled plugins have modified extra file extensions through ProjectService.setHostConfiguration + * See: https://github.com/microsoft/TypeScript/issues/61302 + * + * @internal + */ + hasPluginSetExtraFileExtensions = false; + /** * This is map from files to unresolved imports in it * Maop does not contain entries for files that do not have unresolved imports @@ -2147,6 +2155,11 @@ export abstract class Project implements LanguageServiceHost, ModuleResolutionHo return; } + if (this.plugins.some(p => p.name === configEntry.name)) { + this.hasPluginSetExtraFileExtensions = true; + return; + } + const info: PluginCreateInfo = { config: configEntry, project: this,