Skip to content

Commit dc10709

Browse files
committed
Add a status bar for the extension
1 parent 0e50297 commit dc10709

File tree

6 files changed

+250
-78
lines changed

6 files changed

+250
-78
lines changed

README.md

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -139,8 +139,11 @@ This extension contributes the following settings:
139139
140140
## Commands
141141
142-
* `shader-validator.restartServer`: Restart the server if you have any issue
142+
* `shader-validator.startServer`: Start the server if it was stopped or crashed.
143+
* `shader-validator.stopServer`: Stop the server.
144+
* `shader-validator.restartServer`: Restart the server if you have any issue.
143145
* `shader-validator.addCurrentFileVariant`: Add a variant to the current file.
146+
* `shader-validator.showLogs`: Open the extension log window.
144147
* `shader-validator.dumpDependency`: Print dependency tree in logs. mostly for debug.
145148
* `shader-validator.dumpAst`: Print internal ast in logs. mostly for debug.
146149

package.json

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -295,11 +295,29 @@
295295
}
296296
],
297297
"commands": [
298+
{
299+
"command": "shader-validator.showLogs",
300+
"title": "Show logs",
301+
"category": "Shader validator",
302+
"icon": "$(terminal)"
303+
},
304+
{
305+
"command": "shader-validator.startServer",
306+
"title": "Start server",
307+
"category": "Shader validator",
308+
"icon": "$(debug-start)"
309+
},
310+
{
311+
"command": "shader-validator.stopServer",
312+
"title": "Stop server",
313+
"category": "Shader validator",
314+
"icon": "$(debug-stop)"
315+
},
298316
{
299317
"command": "shader-validator.restartServer",
300318
"title": "Restart server",
301319
"category": "Shader validator",
302-
"icon": "$(check)"
320+
"icon": "$(debug-restart)"
303321
},
304322
{
305323
"command": "shader-validator.validateFile",

src/extension.ts

Lines changed: 43 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,11 @@
22
// Import the module and reference it with the alias vscode in your code below
33
import * as vscode from 'vscode';
44

5-
import { createLanguageClient, getServerPlatform, ServerPlatform, ShaderLanguageClient } from './validator';
5+
import { createLanguageClient, getServerPlatform, ServerPlatform, ServerStatus, ShaderLanguageClient } from './validator';
66
import { dumpAstRequest, dumpDependencyRequest } from './request';
77
import { ShaderVariantTreeDataProvider } from './shaderVariant';
8-
import { DidChangeConfigurationNotification, LanguageClient } from 'vscode-languageclient';
8+
import { DidChangeConfigurationNotification, LanguageClient, Trace } from 'vscode-languageclient';
9+
import { ShaderStatusBar } from './view/shaderStatusBar';
910

1011
export let sidebar: ShaderVariantTreeDataProvider;
1112

@@ -41,34 +42,56 @@ export async function activate(context: vscode.ExtensionContext)
4142
}
4243

4344
// Create language client
44-
const server = new ShaderLanguageClient;
45+
const server = new ShaderLanguageClient(context);
4546
context.subscriptions.push(server);
46-
const isInitialized = await server.start(context);
47-
if (!isInitialized) {
48-
console.error("Failed to launch shader-validator language server.");
49-
return;
50-
}
51-
let supportedLangId = ["hlsl", "glsl", "wgsl"];
47+
const serverStatus = await server.start(context);
5248

5349
// Create sidebar
5450
sidebar = new ShaderVariantTreeDataProvider(context, server);
51+
context.subscriptions.push(sidebar);
52+
53+
// Create status bar
54+
let statusBar = new ShaderStatusBar(context, server);
55+
context.subscriptions.push(statusBar);
5556

5657
// Subscribe commands
5758
context.subscriptions.push(vscode.commands.registerCommand("shader-validator.validateFile", (uri: vscode.Uri) => {
5859
//client.sendRequest()
5960
vscode.window.showInformationMessage("Cannot validate file manually for now");
6061
}));
61-
context.subscriptions.push(vscode.commands.registerCommand("shader-validator.restartServer", (uri: vscode.Uri) => {
62-
server.restart(context);
62+
context.subscriptions.push(vscode.commands.registerCommand("shader-validator.startServer", async () => {
63+
await server.start(context);
64+
statusBar.updateStatusBar();
65+
}));
66+
context.subscriptions.push(vscode.commands.registerCommand("shader-validator.stopServer", async () => {
67+
await server.stop();
68+
statusBar.updateStatusBar();
69+
}));
70+
context.subscriptions.push(vscode.commands.registerCommand("shader-validator.restartServer", async () => {
71+
await server.restart(context);
72+
statusBar.updateStatusBar();
73+
}));
74+
context.subscriptions.push(vscode.commands.registerCommand("shader-validator.showLogs", () => {
75+
const level = ShaderLanguageClient.getTraceLevel();
76+
if (level == Trace.Off) {
77+
vscode.window.showWarningMessage("Server trace is set to off. Set setting shader-validator.trace.server to messages or verbose to view logs.");
78+
} else {
79+
server.showLogs();
80+
}
6381
}));
6482
context.subscriptions.push(vscode.commands.registerCommand("shader-validator.dumpAst", () => {
6583
let activeTextEditor = vscode.window.activeTextEditor;
66-
if (activeTextEditor && activeTextEditor.document.uri.scheme === 'file' && supportedLangId.includes(activeTextEditor.document.languageId)) {
84+
if (activeTextEditor && activeTextEditor.document.uri.scheme === 'file' && ShaderLanguageClient.isSupportedLangId(activeTextEditor.document.languageId)) {
6785
server.sendRequest(dumpAstRequest, {
6886
uri: server.uriAsString(activeTextEditor.document.uri)
6987
}).then((value: string | null) => {
7088
console.info(value);
71-
server.log(value || "No AST to dump");
89+
if (value) {
90+
server.log(value);
91+
server.showLogs();
92+
} else {
93+
server.log("No AST to dump");
94+
}
7295
}, (reason: any) => {
7396
server.log("Failed to get ast: " + reason);
7497
});
@@ -78,12 +101,17 @@ export async function activate(context: vscode.ExtensionContext)
78101
}));
79102
context.subscriptions.push(vscode.commands.registerCommand("shader-validator.dumpDependency", () => {
80103
let activeTextEditor = vscode.window.activeTextEditor;
81-
if (activeTextEditor && activeTextEditor.document.uri.scheme === 'file' && supportedLangId.includes(activeTextEditor.document.languageId)) {
104+
if (activeTextEditor && activeTextEditor.document.uri.scheme === 'file' && ShaderLanguageClient.isSupportedLangId(activeTextEditor.document.languageId)) {
82105
server.sendRequest(dumpDependencyRequest, {
83106
uri: server.uriAsString(activeTextEditor.document.uri)
84107
}).then((value: string | null) => {
85108
console.info(value);
86-
server.log(value || "No deps tree to dump");
109+
if (value) {
110+
server.log(value);
111+
server.showLogs();
112+
} else {
113+
server.log("No deps tree to dump");
114+
}
87115
}, (reason: any) => {
88116
server.log("Failed to get deps tree: " + reason);
89117
});

src/shaderVariant.ts

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -202,15 +202,13 @@ export class ShaderVariantTreeDataProvider implements vscode.TreeDataProvider<Sh
202202
borderStyle: 'solid',
203203
});
204204
context.subscriptions.push(vscode.commands.registerCommand("shader-validator.addCurrentFile", (): void => {
205-
let supportedLangId = ["hlsl", "glsl", "wgsl"];
206-
if (vscode.window.activeTextEditor && supportedLangId.includes(vscode.window.activeTextEditor.document.languageId)) {
205+
if (vscode.window.activeTextEditor && ShaderLanguageClient.isSupportedLangId(vscode.window.activeTextEditor.document.languageId)) {
207206
this.open(vscode.window.activeTextEditor.document.uri);
208207
}
209208
this.save();
210209
}));
211210
context.subscriptions.push(vscode.commands.registerCommand("shader-validator.addCurrentFileVariant", async () => {
212-
let supportedLangId = ["hlsl", "glsl", "wgsl"];
213-
if (vscode.window.activeTextEditor && supportedLangId.includes(vscode.window.activeTextEditor.document.languageId)) {
211+
if (vscode.window.activeTextEditor && ShaderLanguageClient.isSupportedLangId(vscode.window.activeTextEditor.document.languageId)) {
214212
let entryPoint = await this.promptEntryPoint();
215213
if (entryPoint) {
216214
let stage = await this.promptShaderStage();
@@ -302,6 +300,9 @@ export class ShaderVariantTreeDataProvider implements vscode.TreeDataProvider<Sh
302300
}
303301
}));
304302
this.updateDependencies();
303+
}
304+
dispose() {
305+
305306
}
306307
private getActiveVariant() : ShaderVariant | null {
307308
for (const file of this.files.values()) {

0 commit comments

Comments
 (0)