Skip to content

Commit 7ff10b8

Browse files
kyliauKeen Yee Liau
authored andcommitted
fix: Use View Engine LS for projects < v9
`ngcc` does not work correctly for Angular projects < version 9, so automatically switch to View Engine LS when such projects are detected in the workspace.
1 parent 0ed32bf commit 7ff10b8

File tree

1 file changed

+18
-2
lines changed

1 file changed

+18
-2
lines changed

client/src/client.ts

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import * as lsp from 'vscode-languageclient/node';
1414
import {ProjectLoadingFinish, ProjectLoadingStart, SuggestStrictMode, SuggestStrictModeParams} from '../common/notifications';
1515
import {NgccProgress, NgccProgressToken, NgccProgressType} from '../common/progress';
1616
import {GetComponentsWithTemplateFile, GetTcbRequest, IsInAngularProject} from '../common/requests';
17+
import {resolve, Version} from '../common/resolver';
1718

1819
import {isInsideComponentDecorator, isInsideInlineTemplateRegion} from './embedded_support';
1920
import {ProgressReporter} from './progress-reporter';
@@ -388,7 +389,7 @@ function constructArgs(ctx: vscode.ExtensionContext): string[] {
388389
const ngProbeLocations = getProbeLocations(ngdk, ctx.extensionPath);
389390
args.push('--ngProbeLocations', ngProbeLocations.join(','));
390391

391-
const viewEngine: boolean = config.get('angular.view-engine', false);
392+
const viewEngine: boolean = config.get('angular.view-engine', !allProjectsSupportIvy());
392393
if (viewEngine) {
393394
args.push('--viewEngine');
394395
}
@@ -432,4 +433,19 @@ function getServerOptions(ctx: vscode.ExtensionContext, debug: boolean): lsp.Nod
432433
execArgv: debug ? devExecArgv : prodExecArgv,
433434
},
434435
};
435-
}
436+
}
437+
438+
/**
439+
* Returns true if all projects in the workspace support Ivy LS, otherwise
440+
* return false.
441+
*/
442+
function allProjectsSupportIvy() {
443+
const workspaceFolders = vscode.workspace.workspaceFolders || [];
444+
for (const workspaceFolder of workspaceFolders) {
445+
const angularCore = resolve('@angular/core', workspaceFolder.uri.fsPath);
446+
if (angularCore?.version.greaterThanOrEqual(new Version('9')) === false) {
447+
return false;
448+
}
449+
}
450+
return true;
451+
}

0 commit comments

Comments
 (0)