fix(language-service): reinstate overridden compiler option after change (#40364)
Currently the language service has to force `compileNonExportedClasses` to `true` to handle inline NgModules in tests, regardless of the value in user's tsconfig.json. However, the override is not reinstated after the compiler option changes (triggered by a change in tsconfig.json). This commit fixes the bug. PR Close #40364
This commit is contained in:
parent
b36bece17c
commit
811cacc80c
|
@ -32,18 +32,6 @@ export class LanguageService {
|
||||||
constructor(project: ts.server.Project, private readonly tsLS: ts.LanguageService) {
|
constructor(project: ts.server.Project, private readonly tsLS: ts.LanguageService) {
|
||||||
this.parseConfigHost = new LSParseConfigHost(project.projectService.host);
|
this.parseConfigHost = new LSParseConfigHost(project.projectService.host);
|
||||||
this.options = parseNgCompilerOptions(project, this.parseConfigHost);
|
this.options = parseNgCompilerOptions(project, this.parseConfigHost);
|
||||||
|
|
||||||
// Projects loaded into the Language Service often include test files which are not part of the
|
|
||||||
// app's main compilation unit, and these test files often include inline NgModules that declare
|
|
||||||
// components from the app. These declarations conflict with the main declarations of such
|
|
||||||
// components in the app's NgModules. This conflict is not normally present during regular
|
|
||||||
// compilation because the app and the tests are part of separate compilation units.
|
|
||||||
//
|
|
||||||
// As a temporary mitigation of this problem, we instruct the compiler to ignore classes which
|
|
||||||
// are not exported. In many cases, this ensures the test NgModules are ignored by the compiler
|
|
||||||
// and only the real component declaration is used.
|
|
||||||
this.options.compileNonExportedClasses = false;
|
|
||||||
|
|
||||||
this.strategy = createTypeCheckingProgramStrategy(project);
|
this.strategy = createTypeCheckingProgramStrategy(project);
|
||||||
this.adapter = new LanguageServiceAdapter(project);
|
this.adapter = new LanguageServiceAdapter(project);
|
||||||
this.compilerFactory = new CompilerFactory(this.adapter, this.strategy, this.options);
|
this.compilerFactory = new CompilerFactory(this.adapter, this.strategy, this.options);
|
||||||
|
@ -213,6 +201,17 @@ function parseNgCompilerOptions(
|
||||||
project.setProjectErrors(errors);
|
project.setProjectErrors(errors);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Projects loaded into the Language Service often include test files which are not part of the
|
||||||
|
// app's main compilation unit, and these test files often include inline NgModules that declare
|
||||||
|
// components from the app. These declarations conflict with the main declarations of such
|
||||||
|
// components in the app's NgModules. This conflict is not normally present during regular
|
||||||
|
// compilation because the app and the tests are part of separate compilation units.
|
||||||
|
//
|
||||||
|
// As a temporary mitigation of this problem, we instruct the compiler to ignore classes which
|
||||||
|
// are not exported. In many cases, this ensures the test NgModules are ignored by the compiler
|
||||||
|
// and only the real component declaration is used.
|
||||||
|
options.compileNonExportedClasses = false;
|
||||||
|
|
||||||
return options;
|
return options;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue