@@ -19,7 +19,7 @@ export const languages = [
1919 types : [ ] ,
2020 document : null ,
2121 default_file : "main.blp" ,
22- language_server : [ "blueprint-compiler" , "lsp" ] ,
22+ language_server : [ [ "blueprint-compiler" , "lsp" ] ] ,
2323 formatting_options : {
2424 ...formatting_options ,
2525 tabSize : 2 ,
@@ -44,12 +44,14 @@ export const languages = [
4444 default_file : "main.js" ,
4545 index : 0 ,
4646 language_server : [
47- "biome" ,
48- "lsp-proxy" ,
49- // src/meson.build installs biome.json there
50- GLib . getenv ( "FLATPAK_ID" )
51- ? `--config-path=${ pkg . pkgdatadir } `
52- : `--config-path=src/langs/javascript` ,
47+ [
48+ "biome" ,
49+ "lsp-proxy" ,
50+ // src/meson.build installs biome.json there
51+ GLib . getenv ( "FLATPAK_ID" )
52+ ? `--config-path=${ pkg . pkgdatadir } `
53+ : `--config-path=src/langs/javascript` ,
54+ ] ,
5355 ] ,
5456 formatting_options : {
5557 ...formatting_options ,
@@ -64,7 +66,7 @@ export const languages = [
6466 types : [ "text/css" ] ,
6567 document : null ,
6668 default_file : "main.css" ,
67- language_server : [ "gtkcsslanguageserver" ] ,
69+ language_server : [ [ "gtkcsslanguageserver" ] ] ,
6870 formatting_options : {
6971 ...formatting_options ,
7072 tabSize : 2 ,
@@ -79,7 +81,7 @@ export const languages = [
7981 document : null ,
8082 default_file : "main.vala" ,
8183 index : 1 ,
82- language_server : [ "vala-language-server" ] ,
84+ language_server : [ [ "vala-language-server" ] ] ,
8385 formatting_options : {
8486 ...formatting_options ,
8587 tabSize : 4 ,
@@ -94,7 +96,7 @@ export const languages = [
9496 document : null ,
9597 default_file : "code.rs" ,
9698 index : 2 ,
97- language_server : [ "rust-analyzer" ] ,
99+ language_server : [ [ "rust-analyzer" ] ] ,
98100 formatting_options : {
99101 ...formatting_options ,
100102 tabSize : 4 ,
@@ -109,7 +111,17 @@ export const languages = [
109111 document : null ,
110112 default_file : "main.py" ,
111113 index : 3 ,
112- language_server : [ "pylsp" , "-v" ] ,
114+ language_server : [
115+ [ "pylsp" , "-v" ] ,
116+ {
117+ argv : [ "ruff-lsp" ] ,
118+ initializationOptions : {
119+ settings : {
120+ args : [ "--config" , `${ pkg . pkgdatadir } /ruff.toml` ] ,
121+ } ,
122+ } ,
123+ } ,
124+ ] ,
113125 formatting_options : {
114126 ...formatting_options ,
115127 tabSize : 4 ,
@@ -123,27 +135,52 @@ export function getLanguage(id) {
123135 ) ;
124136}
125137
138+ /**
139+ * Returns a LSPClient for the given langauge.
140+ * If multiple are defined, returns an array of LSPClients instead.
141+ */
126142export function createLSPClient ( { lang, root_uri, quiet = true } ) {
127143 const language_id = lang . id ;
128144
129- const lspc = new LSPClient ( lang . language_server , {
130- rootUri : root_uri ,
131- languageId : language_id ,
132- quiet,
133- } ) ;
134- lspc . connect ( "exit" , ( ) => {
135- console . debug ( `${ language_id } language server exit` ) ;
136- } ) ;
137- lspc . connect ( "output" , ( _self , message ) => {
138- console . debug (
139- `${ language_id } language server OUT:\n${ JSON . stringify ( message ) } ` ,
140- ) ;
141- } ) ;
142- lspc . connect ( "input" , ( _self , message ) => {
143- console . debug (
144- `${ language_id } language server IN:\n${ JSON . stringify ( message ) } ` ,
145- ) ;
146- } ) ;
145+ const lspcs = [ ] ;
146+
147+ for ( const language_server of lang . language_server ) {
148+ // language_server is either an array (then it's just argv) or an object with more info.
149+ let argv ,
150+ initializationOptions = undefined ;
151+
152+ if ( Array . isArray ( language_server ) ) {
153+ argv = language_server ;
154+ } else {
155+ argv = language_server . argv ;
156+ initializationOptions = language_server . initializationOptions ;
157+ }
158+
159+ const lspc = new LSPClient ( argv , {
160+ rootUri : root_uri ,
161+ languageId : language_id ,
162+ quiet,
163+ initializationOptions,
164+ } ) ;
165+ lspc . connect ( "exit" , ( ) => {
166+ console . debug ( `${ language_id } language server exit` ) ;
167+ } ) ;
168+ lspc . connect ( "output" , ( _self , message ) => {
169+ console . debug (
170+ `${ language_id } language server OUT:\n${ JSON . stringify ( message ) } ` ,
171+ ) ;
172+ } ) ;
173+ lspc . connect ( "input" , ( _self , message ) => {
174+ console . debug (
175+ `${ language_id } language server IN:\n${ JSON . stringify ( message ) } ` ,
176+ ) ;
177+ } ) ;
178+ lspcs . push ( lspc ) ;
179+ }
147180
148- return lspc ;
181+ // If the language has only one language server, return it
182+ if ( lspcs . length === 1 ) {
183+ return lspcs [ 0 ] ;
184+ }
185+ return lspcs ;
149186}
0 commit comments