11"use strict" ;
22
3- import { ExtensionContext , commands , window , workspace } from "vscode" ;
3+ import { ConfigurationChangeEvent , ExtensionContext , commands , window , workspace } from "vscode" ;
44import { LanguageClient , ServerOptions } from "vscode-languageclient/node" ;
55import { promisify } from "util" ;
66import { exec } from "child_process" ;
@@ -16,19 +16,42 @@ export function activate(context: ExtensionContext) {
1616 let visualizer : Visualize | null = null ;
1717
1818 context . subscriptions . push (
19+ outputChannel ,
1920 commands . registerCommand ( "syntaxTree.start" , startLanguageServer ) ,
2021 commands . registerCommand ( "syntaxTree.stop" , stopLanguageServer ) ,
2122 commands . registerCommand ( "syntaxTree.restart" , restartLanguageServer ) ,
2223 commands . registerCommand ( "syntaxTree.visualize" , ( ) => visualizer ?. visualize ( ) ) ,
2324 commands . registerCommand ( "syntaxTree.showOutputChannel" , ( ) => outputChannel . show ( ) ) ,
24- outputChannel
25+ workspace . onDidChangeConfiguration ( event =>
26+ event . affectsConfiguration ( "syntaxTree" ) &&
27+ restartLanguageServer ( ) )
2528 ) ;
2629
2730 return startLanguageServer ( ) ;
2831
2932 async function startLanguageServer ( ) {
30- outputChannel . appendLine ( "Starting language server..." ) ;
31- let run : ServerOptions = { command : "stree" , args : [ "lsp" ] } ;
33+ const config = workspace . getConfiguration ( "syntaxTree" ) ;
34+ const addlPlugins = config . get < string [ ] > ( "additionalPlugins" ) || [ ] ;
35+ const singleQuotes = config . get < boolean > ( "singleQuotes" ) ;
36+ const trailingComma = config . get < boolean > ( "trailingComma" ) ;
37+
38+ const args = [ "lsp" ] ;
39+
40+ const plugins = new Set < string > ( ) ;
41+ if ( singleQuotes ) {
42+ plugins . add ( "plugin/single_quotes" ) ;
43+ }
44+ if ( trailingComma ) {
45+ plugins . add ( "plugin/trailing_comma" ) ;
46+ }
47+ addlPlugins . forEach ( plugins . add ) ;
48+
49+ if ( plugins . size ) {
50+ args . push ( `--plugins=${ Array . from ( plugins ) . join ( "," ) } ` ) ;
51+ }
52+
53+ outputChannel . appendLine ( `Starting language server with ${ plugins . size } plugin(s)...` ) ;
54+ let run : ServerOptions = { command : "stree" , args } ;
3255
3356 if ( workspace . workspaceFolders ) {
3457 const cwd = workspace . workspaceFolders ! [ 0 ] . uri . fsPath ;
0 commit comments