Skip to content

Commit e664c7a

Browse files
committed
Add a way to enable only certain languages if not all are required to avoid some language specific crash.
1 parent 3b04559 commit e664c7a

File tree

3 files changed

+67
-8
lines changed

3 files changed

+67
-8
lines changed

package.json

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -174,6 +174,11 @@
174174
{
175175
"title": "Hlsl",
176176
"properties": {
177+
"shader-validator.hlsl.enabled": {
178+
"description": "Enable HLSL support for language server.",
179+
"type": "boolean",
180+
"default": true
181+
},
177182
"shader-validator.hlsl.shaderModel": {
178183
"type": "string",
179184
"description": "Shader model targeted for DXC HLSL (DXC only support up to sm 6.0).",
@@ -233,6 +238,11 @@
233238
{
234239
"title": "Glsl",
235240
"properties": {
241+
"shader-validator.glsl.enabled": {
242+
"description": "Enable GLSL support for language server.",
243+
"type": "boolean",
244+
"default": true
245+
},
236246
"shader-validator.glsl.targetClient": {
237247
"type": "string",
238248
"description": "Shader client for GLSL.",
@@ -277,6 +287,16 @@
277287
}
278288
}
279289
},
290+
{
291+
"title": "Wgsl",
292+
"properties": {
293+
"shader-validator.wgsl.enabled": {
294+
"description": "Enable WGSL support for language server.",
295+
"type": "boolean",
296+
"default": true
297+
}
298+
}
299+
},
280300
{
281301
"title": "Debug",
282302
"properties": {

src/client.ts

Lines changed: 32 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -368,13 +368,23 @@ export class ShaderLanguageClient {
368368
}
369369
}
370370
private getClientOption() {
371+
// Pass languages that should be enabled to server.
372+
let hlslSupported = vscode.workspace.getConfiguration("shader-validator").get<boolean>("hlsl.enabled")!;
373+
let glslSupported = vscode.workspace.getConfiguration("shader-validator").get<boolean>("glsl.enabled")!;
374+
let wgslSupported = vscode.workspace.getConfiguration("shader-validator").get<boolean>("wgsl.enabled")!;
375+
let documentSelector = [];
376+
if (hlslSupported) {
377+
documentSelector.push({ scheme: 'file', language: 'hlsl' });
378+
}
379+
if (glslSupported) {
380+
documentSelector.push({ scheme: 'file', language: 'glsl' });
381+
}
382+
if (wgslSupported) {
383+
documentSelector.push({ scheme: 'file', language: 'wgsl' });
384+
}
371385
const clientOptions: LanguageClientOptions = {
372386
// Register the server for shader documents
373-
documentSelector: [
374-
{ scheme: 'file', language: 'hlsl' },
375-
{ scheme: 'file', language: 'glsl' },
376-
{ scheme: 'file', language: 'wgsl' },
377-
],
387+
documentSelector: documentSelector,
378388
outputChannel: this.channel ? this.channel : undefined,
379389
traceOutputChannel: this.channel ? this.channel : undefined,
380390
middleware: getMiddleware(),
@@ -384,10 +394,26 @@ export class ShaderLanguageClient {
384394
return clientOptions;
385395
}
386396
private getServerArg(): string[] {
387-
return [
397+
let hlslSupported = vscode.workspace.getConfiguration("shader-validator").get<boolean>("hlsl.enabled")!;
398+
let glslSupported = vscode.workspace.getConfiguration("shader-validator").get<boolean>("glsl.enabled")!;
399+
let wgslSupported = vscode.workspace.getConfiguration("shader-validator").get<boolean>("wgsl.enabled")!;
400+
let commonArgs = [
388401
"--config",
389402
getConfigurationAsString()
390403
];
404+
if (hlslSupported) {
405+
commonArgs.push("--hlsl");
406+
}
407+
if (glslSupported) {
408+
commonArgs.push("--glsl");
409+
}
410+
if (wgslSupported) {
411+
commonArgs.push("--wgsl");
412+
}
413+
if (!hlslSupported && !glslSupported && !wgslSupported) {
414+
vscode.window.showWarningMessage("No language enabled for shader-language-server. Server will still start.");
415+
}
416+
return commonArgs;
391417
}
392418
private getServerEnv() {
393419
const trace = vscode.workspace.getConfiguration("shader-validator").get<string>("trace.server");

src/extension.ts

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -139,8 +139,21 @@ export async function activate(context: vscode.ExtensionContext)
139139
context.subscriptions.push(
140140
vscode.workspace.onDidChangeConfiguration(async (event : vscode.ConfigurationChangeEvent) => {
141141
if (event.affectsConfiguration("shader-validator")) {
142-
if (event.affectsConfiguration("shader-validator.trace.server") ||
143-
event.affectsConfiguration("shader-validator.serverPath")) {
142+
let configurationRequiringAServerRestart = [
143+
"shader-validator.trace.server",
144+
"shader-validator.serverPath",
145+
"shader-validator.hlsl.enabled",
146+
"shader-validator.glsl.enabled",
147+
"shader-validator.wgsl.enabled",
148+
];
149+
let requiresRestart = false;
150+
for (let configuration of configurationRequiringAServerRestart) {
151+
if (event.affectsConfiguration(configuration)) {
152+
requiresRestart = true;
153+
break;
154+
}
155+
}
156+
if (requiresRestart) {
144157
server.restart(context);
145158
} else {
146159
await server.sendNotification(DidChangeConfigurationNotification.type, {

0 commit comments

Comments
 (0)