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" ;
@@ -27,8 +27,28 @@ export function activate(context: ExtensionContext) {
2727 return startLanguageServer ( ) ;
2828
2929 async function startLanguageServer ( ) {
30- outputChannel . appendLine ( "Starting language server..." ) ;
31- let run : ServerOptions = { command : "stree" , args : [ "lsp" ] } ;
30+ const config = workspace . getConfiguration ( "syntaxTree" ) ;
31+ const addlPlugins = config . get < string [ ] > ( "additionalPlugins" ) || [ ] ;
32+ const singleQuotes = config . get < boolean > ( "singleQuotes" ) ;
33+ const trailingComma = config . get < boolean > ( "trailingComma" ) ;
34+
35+ const args = [ "lsp" ] ;
36+
37+ const plugins = new Set < string > ( ) ;
38+ if ( singleQuotes ) {
39+ plugins . add ( "plugin/single_quotes" ) ;
40+ }
41+ if ( trailingComma ) {
42+ plugins . add ( "plugin/trailing_comma" ) ;
43+ }
44+ addlPlugins . forEach ( plugins . add ) ;
45+
46+ if ( plugins . size ) {
47+ args . push ( `--plugins=${ Array . from ( plugins ) . join ( "," ) } ` ) ;
48+ }
49+
50+ outputChannel . appendLine ( `Starting language server with ${ plugins . size } plugin(s)...` ) ;
51+ let run : ServerOptions = { command : "stree" , args } ;
3252
3353 if ( workspace . workspaceFolders ) {
3454 const cwd = workspace . workspaceFolders ! [ 0 ] . uri . fsPath ;
0 commit comments