22// Import the module and reference it with the alias vscode in your code below
33import * as vscode from 'vscode' ;
44
5- import { createLanguageClient , getServerPlatform , ServerPlatform , ShaderLanguageClient } from './validator' ;
5+ import { createLanguageClient , getServerPlatform , ServerPlatform , ServerStatus , ShaderLanguageClient } from './validator' ;
66import { dumpAstRequest , dumpDependencyRequest } from './request' ;
77import { 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
1011export 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 } ) ;
0 commit comments