Skip to content

Commit 48041f8

Browse files
committed
fix: Disable block syntax parsing when no project in workspace supports it
This commit adds a check to ensure any project in the workspace supports block syntax. If not, the block syntax parsing in the compiler should be disabled. Note that the language server is shared for all projects in the workspace. If on supports block syntax, we have to enable it. fixes #1958
1 parent 33764db commit 48041f8

File tree

4 files changed

+28
-0
lines changed

4 files changed

+28
-0
lines changed

client/src/client.ts

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -432,6 +432,10 @@ function constructArgs(ctx: vscode.ExtensionContext): string[] {
432432
args.push('--includeCompletionsWithSnippetText');
433433
}
434434

435+
if (!anyProjectSupportsBlockSyntax()) {
436+
args.push('--disableBlockSyntax');
437+
}
438+
435439
const forceStrictTemplates = config.get<boolean>('angular.forceStrictTemplates');
436440
if (forceStrictTemplates) {
437441
args.push('--forceStrictTemplates');
@@ -505,3 +509,20 @@ function extensionVersionCompatibleWithAllProjects(serverModuleLocation: string)
505509
}
506510
return true;
507511
}
512+
513+
/**
514+
* Returns true if any project in the workspace supports block syntax (v17+).
515+
*/
516+
function anyProjectSupportsBlockSyntax() {
517+
const workspaceFolders = vscode.workspace.workspaceFolders || [];
518+
for (const workspaceFolder of workspaceFolders) {
519+
const angularCore = resolve('@angular/core', workspaceFolder.uri.fsPath);
520+
if (angularCore === undefined) {
521+
continue;
522+
}
523+
if (angularCore.version.major >= 17) {
524+
return true;
525+
}
526+
}
527+
return false;
528+
}

server/src/cmdline_utils.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ interface CommandLineOptions {
3636
includeAutomaticOptionalChainCompletions: boolean;
3737
includeCompletionsWithSnippetText: boolean;
3838
forceStrictTemplates: boolean;
39+
disableBlockSyntax: boolean;
3940
}
4041

4142
export function parseCommandLine(argv: string[]): CommandLineOptions {
@@ -50,6 +51,7 @@ export function parseCommandLine(argv: string[]): CommandLineOptions {
5051
hasArgument(argv, '--includeAutomaticOptionalChainCompletions'),
5152
includeCompletionsWithSnippetText: hasArgument(argv, '--includeCompletionsWithSnippetText'),
5253
forceStrictTemplates: hasArgument(argv, '--forceStrictTemplates'),
54+
disableBlockSyntax: hasArgument(argv, '--disableBlockSyntax'),
5355
};
5456
}
5557

server/src/server.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ function main() {
4646
includeAutomaticOptionalChainCompletions: options.includeAutomaticOptionalChainCompletions,
4747
includeCompletionsWithSnippetText: options.includeCompletionsWithSnippetText,
4848
forceStrictTemplates: isG3 || options.forceStrictTemplates,
49+
disableBlockSyntax: options.disableBlockSyntax,
4950
});
5051

5152
// Log initialization info

server/src/session.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ export interface SessionOptions {
3333
includeAutomaticOptionalChainCompletions: boolean;
3434
includeCompletionsWithSnippetText: boolean;
3535
forceStrictTemplates: boolean;
36+
disableBlockSyntax: boolean;
3637
}
3738

3839
enum LanguageId {
@@ -156,6 +157,9 @@ export class Session {
156157
if (options.forceStrictTemplates) {
157158
pluginConfig.forceStrictTemplates = true;
158159
}
160+
if (options.disableBlockSyntax) {
161+
(pluginConfig as any).enableBlockSyntax = false;
162+
}
159163
projSvc.configurePlugin({
160164
pluginName: options.ngPlugin,
161165
configuration: pluginConfig,

0 commit comments

Comments
 (0)