@@ -1,6 +1,153 @@
11# Language support configuration.
22# See the languages documentation: https://docs.helix-editor.com/master/languages.html
33
4+[language-server]
5+
6+taplo = { command = "taplo", args = ["lsp", "stdio"] }
7+elixir-ls = { command = "elixir-ls", config = { elixirLS.dialyzerEnabled = false } }
8+mint = { command = "mint", args = ["ls"] }
9+vscode-json-language-server = { command = "vscode-json-language-server", args = ["--stdio"], config = { provideFormatter = true } }
10+clangd = { command = "clangd" }
11+crystalline = { command = "crystalline", args = ["--stdio"] }
12+omnisharp = { command = "OmniSharp", args = [ "--languageserver" ] }
13+vscode-css-language-server = { command = "vscode-css-language-server", args = ["--stdio"], config = { "provideFormatter" = true }}
14+vscode-html-language-server = { command = "vscode-html-language-server", args = ["--stdio"], config = { provideFormatter = true } }
15+pylsp = { command = "pylsp" }
16+nls = { command = "nls" }
17+nil = { command = "nil" }
18+solargraph = { command = "solargraph", args = ["stdio"] }
19+bash-language-server = { command = "bash-language-server", args = ["start"] }
20+intelephense = { command = "intelephense", args = ["--stdio"] }
21+texlab = { command = "texlab" }
22+lean = { command = "lean", args = [ "--server" ] }
23+julia = { command = "julia", timeout = 60, args = [
24+ "--startup-file=no",
25+ "--history-file=no",
26+ "--quiet",
27+ "-e",
28+ "using LanguageServer; runserver()",
29+] }
30+jdtls = { command = "jdtls" }
31+ocamllsp = { command = "ocamllsp" }
32+
33+svelteserver = { command = "svelteserver", args = ["--stdio"] }
34+vuels = { command = "vls" }
35+yaml-language-server = { command = "yaml-language-server", args = ["--stdio"] }
36+haskell-language-server = { command = "haskell-language-server-wrapper", args = ["--lsp"] }
37+zls = { command = "zls" }
38+swipl = { command = "swipl", args = [
39+ "-g", "use_module(library(lsp_server))",
40+ "-g", "lsp_server:main",
41+ "-t", "halt", "--", "stdio"
42+] }
43+cmake-language-server = { command = "cmake-language-server" }
44+racket = { command = "racket", args = ["-l", "racket-langserver"] }
45+dart = { command = "dart", args = ["language-server", "--client-id=helix"] }
46+metals = { command = "metals", config = { "isHttpEnabled" = true } }
47+docker-langserver = { command = "docker-langserver", args = ["--stdio"] }
48+elm-language-server = { command = "elm-language-server" }
49+rescript-language-server = { command = "rescript-language-server", args = ["--stdio"] }
50+robotframework_ls = { command = "robotframework_ls" }
51+erlang-ls = { command = "erlang_ls" }
52+kotlin-language-server = { command = "kotlin-language-server" }
53+terraform-ls = { command = "terraform-ls", args = ["serve"] }
54+solc = { command = "solc", args = ["--lsp"] }
55+R = { command = "R", args = ["--no-echo", "-e", "languageserver::run()"] }
56+sourcekit-lsp = { command = "sourcekit-lsp" }
57+vala-language-server = { command = "vala-language-server" }
58+svlangserver = { command = "svlangserver", args = [] }
59+vlang-language-server = { command = "v", args = ["ls"] }
60+openscad-lsp = { command = "openscad-lsp", args = ["--stdio"] }
61+perlnavigator = { command = "perlnavigator", args= ["--stdio"] }
62+prisma-language-server = { command = "prisma-language-server", args = ["--stdio"] }
63+clojure-lsp = { command = "clojure-lsp" }
64+wgsl_analyzer = { command = "wgsl_analyzer" }
65+elvish = { command = "elvish", args = ["-lsp"] }
66+idris2-lsp = { command = "idris2-lsp" }
67+fortls = { command = "fortls", args = ["--lowercase_intrinsics"] }
68+gleam = { command = "gleam", args = ["lsp"] }
69+ols = { command = "ols", args = [] }
70+dot-language-server = { command = "dot-language-server", args = ["--stdio"] }
71+cuelsp = { command = "cuelsp" }
72+slint-lsp = { command = "slint-lsp", args = [] }
73+awk-language-server = { command = "awk-language-server" }
74+pasls = { command = "pasls", args = [] }
75+jsonnet-language-server = { command = "jsonnet-language-server", args= ["-t", "--lint"] }
76+marksman = { command = "marksman", args = ["server"] }
77+markdoc-ls = { command = "markdoc-ls", args = ["--stdio"] }
78+bass = { command = "bass", args = ["--lsp"] }
79+purescript-language-server = { command = "purescript-language-server", args = ["--stdio"] }
80+serve-d = { command = "serve-d" }
81+bicep-langserver = { command = "bicep-langserver" }
82+qmlls = { command = "qmlls" }
83+cl-lsp = { command = "cl-lsp", args = [ "stdio" ] }
84+dhall-lsp-server = { command = "dhall-lsp-server" }
85+forc = { command = "forc", args = ["lsp"] }
86+cs = { command = "cs", args = ["launch", "--contrib", "smithy-language-server", "--", "0"] }
87+vhdl_ls = { command = "vhdl_ls", args = [] }
88+regols = { command = "regols" }
89+nimlangserver = { command = "nimlangserver" }
90+
91+[language-server.rust-analyzer]
92+command = "rust-analyzer"
93+
94+[language-server.rust-analyzer.config]
95+inlayHints.bindingModeHints.enable = false
96+inlayHints.closingBraceHints.minLines = 10
97+inlayHints.closureReturnTypeHints.enable = "with_block"
98+inlayHints.discriminantHints.enable = "fieldless"
99+inlayHints.lifetimeElisionHints.enable = "skip_trivial"
100+inlayHints.typeHints.hideClosureInitialization = false
101+
102+
103+[language-server.lua-language-server]
104+command = "lua-language-server"
105+
106+[language-server.lua-language-server.config.Lua.hint]
107+enable = true
108+arrayIndex = "Enable"
109+setType = true
110+paramName = "All"
111+paramType = true
112+await = true
113+
114+
115+[language-server.gopls]
116+command = "gopls"
117+
118+[language-server.gopls.config.hints]
119+assignVariableTypes = true
120+compositeLiteralFields = true
121+constantValues = true
122+functionTypeParameters = true
123+parameterNames = true
124+rangeVariableTypes = true
125+
126+
127+[language-server.typescript-language-server]
128+command = "typescript-language-server"
129+args = ["--stdio"]
130+config.hostInfo = "helix"
131+
132+[language-server.typescript-language-server.config.typescript.inlayHints]
133+includeInlayEnumMemberValueHints = true
134+includeInlayFunctionLikeReturnTypeHints = true
135+includeInlayFunctionParameterTypeHints = true
136+includeInlayParameterNameHints = "all"
137+includeInlayParameterNameHintsWhenArgumentMatchesName = true
138+includeInlayPropertyDeclarationTypeHints = true
139+includeInlayVariableTypeHints = true
140+
141+[language-server.typescript-language-server.config.javascript.inlayHints]
142+includeInlayEnumMemberValueHints = true
143+includeInlayFunctionLikeReturnTypeHints = true
144+includeInlayFunctionParameterTypeHints = true
145+includeInlayParameterNameHints = "all"
146+includeInlayParameterNameHintsWhenArgumentMatchesName = true
147+includeInlayPropertyDeclarationTypeHints = true
148+includeInlayVariableTypeHints = true
149+
150+
4151[[language]]
5152name = "rust"
6153scope = "source.rust"
@@ -9,7 +156,7 @@ file-types = ["rs"]
9156roots = ["Cargo.toml", "Cargo.lock"]
10157auto-format = true
11158comment-token = "//"
12−language-server = { command = "rust-analyzer" }
159+language-servers = [ "rust-analyzer" ]
13160indent = { tab-width = 4, unit = " " }
14161
15162[language.auto-pairs]
@@ -19,14 +166,6 @@ indent = { tab-width = 4, unit = " " }
19166'"' = '"'
20167'`' = '`'
21168
22−[language.config]
23−inlayHints.bindingModeHints.enable = false
24−inlayHints.closingBraceHints.minLines = 10
25−inlayHints.closureReturnTypeHints.enable = "with_block"
26−inlayHints.discriminantHints.enable = "fieldless"
27−inlayHints.lifetimeElisionHints.enable = "skip_trivial"
28−inlayHints.typeHints.hideClosureInitialization = false
29−
30169[language.debugger]
31170name = "lldb-vscode"
32171transport = "stdio"
@@ -65,7 +204,7 @@ name = "sway"
65204scope = "source.sway"
66205injection-regex = "sway"
67206file-types = ["sw"]
68−language-server = { command = "forc", args = ["lsp"] }
207+language-servers = [ "forc" ]
69208roots = ["Forc.toml", "Forc.lock"]
70209indent = { tab-width = 4, unit = " " }
71210comment-token = "//"
@@ -81,7 +220,7 @@ injection-regex = "toml"
81220file-types = ["toml", "poetry.lock"]
82221roots = []
83222comment-token = "#"
84−language-server = { command = "taplo", args = ["lsp", "stdio"] }
223+language-servers = [ "taplo" ]
85224indent = { tab-width = 2, unit = " " }
86225
87226[[grammar]]
@@ -95,7 +234,7 @@ injection-regex = "awk"
95234file-types = ["awk", "gawk", "nawk", "mawk"]
96235roots = []
97236comment-token = "#"
98−language-server = { command = "awk-language-server" }
237+language-servers = [ "awk-language-server" ]
99238indent = { tab-width = 2, unit = " " }
100239
101240[[grammar]]
@@ -123,8 +262,7 @@ file-types = ["ex", "exs", "mix.lock"]
123262shebangs = ["elixir"]
124263roots = ["mix.exs", "mix.lock"]
125264comment-token = "#"
126−language-server = { command = "elixir-ls" }
127−config = { elixirLS.dialyzerEnabled = false }
265+language-servers = [ "elixir-ls" ]
128266indent = { tab-width = 2, unit = " " }
129267
130268[[grammar]]
@@ -153,7 +291,7 @@ file-types = ["mint"]
153291shebangs = []
154292roots = []
155293comment-token = "//"
156−language-server = { command = "mint", args = ["ls"] }
294+language-servers = [ "mint" ]
157295indent = { tab-width = 2, unit = " " }
158296
159297[[language]]
@@ -162,9 +300,8 @@ scope = "source.json"
162300injection-regex = "json"
163301file-types = ["json", "jsonc", "arb", "ipynb", "geojson"]
164302roots = []
165−language-server = { command = "vscode-json-language-server", args = ["--stdio"] }
303+language-servers = [ "vscode-json-language-server" ]
166304auto-format = true
167−config = { "provideFormatter" = true }
168305indent = { tab-width = 2, unit = " " }
169306
170307[[grammar]]
@@ -178,7 +315,7 @@ injection-regex = "c"
178315file-types = ["c"] # TODO: ["h"]
179316roots = []
180317comment-token = "//"
181−language-server = { command = "clangd" }
318+language-servers = [ "clangd" ]
182319indent = { tab-width = 2, unit = " " }
183320
184321[language.debugger]
@@ -215,7 +352,7 @@ injection-regex = "cpp"
215352file-types = ["cc", "hh", "c++", "cpp", "hpp", "h", "ipp", "tpp", "cxx", "hxx", "ixx", "txx", "ino", "C", "H", "cu", "cuh"]
216353roots = []
217354comment-token = "//"
218−language-server = { command = "clangd" }
355+language-servers = [ "clangd" ]
219356indent = { tab-width = 2, unit = " " }
220357
221358[language.debugger]
@@ -253,7 +390,7 @@ roots = ["shard.yml", "shard.lock"]
253390comment-token = "#"
254391indent = { tab-width = 2, unit = " " }
255392grammar = "ruby"
256−language-server = { command = "crystalline", args = ["--stdio"] }
393+language-servers = [ "crystalline" ]
257394
258395[[language]]
259396name = "c-sharp"
@@ -263,7 +400,7 @@ file-types = ["cs"]
263400roots = ["sln", "csproj"]
264401comment-token = "//"
265402indent = { tab-width = 4, unit = "\t" }
266−language-server = { command = "OmniSharp", args = [ "--languageserver" ] }
403+language-servers = [ "omnisharp" ]
267404
268405[language.debugger]
269406name = "netcoredbg"
@@ -296,18 +433,10 @@ file-types = ["go"]
296433roots = ["go.work", "go.mod"]
297434auto-format = true
298435comment-token = "//"
299−language-server = { command = "gopls" }
436+language-servers = [ "gopls" ]
300437# TODO: gopls needs utf-8 offsets?
301438indent = { tab-width = 4, unit = "\t" }
302439
303−[language.config.hints]
304−assignVariableTypes = true
305−compositeLiteralFields = true
306−constantValues = true
307−functionTypeParameters = true
308−parameterNames = true
309−rangeVariableTypes = true
310−
311440[language.debugger]
312441name = "go"
313442transport = "tcp"
@@ -351,7 +480,7 @@ file-types = ["go.mod"]
351480roots = []
352481auto-format = true
353482comment-token = "//"
354−language-server = { command = "gopls" }
483+language-servers = [ "gopls" ]
355484indent = { tab-width = 4, unit = "\t" }
356485
357486[[grammar]]
@@ -365,7 +494,7 @@ injection-regex = "gotmpl"
365494file-types = ["gotmpl"]
366495roots = []
367496comment-token = "//"
368−language-server = { command = "gopls" }
497+language-servers = [ "gopls" ]
369498indent = { tab-width = 2, unit = " " }
370499
371500[[grammar]]
@@ -380,7 +509,7 @@ file-types = ["go.work"]
380509roots = []
381510auto-format = true
382511comment-token = "//"
383−language-server = { command = "gopls" }
512+language-servers = [ "gopls" ]
384513indent = { tab-width = 4, unit = "\t" }
385514
386515[[grammar]]
@@ -391,26 +520,15 @@ source = { git = "https://github.com/omertuc/tree-sitter-go-work", rev = "6dd9dd
391520name = "javascript"
392521scope = "source.js"
393522injection-regex = "(js|javascript)"
523+language-id = "javascript"
394524file-types = ["js", "mjs", "cjs"]
395525shebangs = ["node"]
396526roots = []
397527comment-token = "//"
398528# TODO: highlights-params
399−language-server = { command = "typescript-language-server", args = ["--stdio"], language-id = "javascript" }
529+language-servers = [ "typescript-language-server" ]
400530indent = { tab-width = 2, unit = " " }
401531
402−[language.config]
403−hostInfo = "helix"
404−
405−[language.config.javascript.inlayHints]
406−includeInlayEnumMemberValueHints = true
407−includeInlayFunctionLikeReturnTypeHints = true
408−includeInlayFunctionParameterTypeHints = true
409−includeInlayParameterNameHints = "all"
410−includeInlayParameterNameHintsWhenArgumentMatchesName = true
411−includeInlayPropertyDeclarationTypeHints = true
412−includeInlayVariableTypeHints = true
413−
414532[language.debugger]
415533name = "node-debug2"
416534transport = "stdio"
@@ -431,48 +549,26 @@ source = { git = "https://github.com/tree-sitter/tree-sitter-javascript", rev =
431549name = "jsx"
432550scope = "source.jsx"
433551injection-regex = "jsx"
552+language-id = "javascriptreact"
434553file-types = ["jsx"]
435554roots = []
436555comment-token = "//"
437−language-server = { command = "typescript-language-server", args = ["--stdio"], language-id = "javascriptreact" }
556+language-servers = [ "typescript-language-server" ]
438557indent = { tab-width = 2, unit = " " }
439558grammar = "javascript"
440559
441−[language.config]
442−hostInfo = "helix"
443−
444−[language.config.javascript.inlayHints]
445−includeInlayEnumMemberValueHints = true
446−includeInlayFunctionLikeReturnTypeHints = true
447−includeInlayFunctionParameterTypeHints = true
448−includeInlayParameterNameHints = "all"
449−includeInlayParameterNameHintsWhenArgumentMatchesName = true
450−includeInlayPropertyDeclarationTypeHints = true
451−includeInlayVariableTypeHints = true
452−
453560[[language]]
454561name = "typescript"
455562scope = "source.ts"
456563injection-regex = "(ts|typescript)"
457564file-types = ["ts", "mts", "cts"]
565+language-id = "typescript"
458566shebangs = []
459567roots = []
460568# TODO: highlights-params
461−language-server = { command = "typescript-language-server", args = ["--stdio"], language-id = "typescript"}
569+language-servers = [ "typescript-language-server" ]
462570indent = { tab-width = 2, unit = " " }
463571
464−[language.config]
465−hostInfo = "helix"
466−
467−[language.config.typescript.inlayHints]
468−includeInlayEnumMemberValueHints = true
469−includeInlayFunctionLikeReturnTypeHints = true
470−includeInlayFunctionParameterTypeHints = true
471−includeInlayParameterNameHints = "all"
472−includeInlayParameterNameHintsWhenArgumentMatchesName = true
473−includeInlayPropertyDeclarationTypeHints = true
474−includeInlayVariableTypeHints = true
475−
476572[[grammar]]
477573name = "typescript"
478574source = { git = "https://github.com/tree-sitter/tree-sitter-typescript", rev = "6aac031ad88dd6317f02ac0bb27d099a553a7d8c", subpath = "typescript" }
@@ -481,24 +577,13 @@ source = { git = "https://github.com/tree-sitter/tree-sitter-typescript", rev =
481577name = "tsx"
482578scope = "source.tsx"
483579injection-regex = "(tsx)" # |typescript
580+language-id = "typescriptreact"
484581file-types = ["tsx"]
485582roots = []
486583# TODO: highlights-params
487−language-server = { command = "typescript-language-server", args = ["--stdio"], language-id = "typescriptreact" }
584+language-servers = [ "typescript-language-server" ]
488585indent = { tab-width = 2, unit = " " }
489586
490−[language.config]
491−hostInfo = "helix"
492−
493−[language.config.typescript.inlayHints]
494−includeInlayEnumMemberValueHints = true
495−includeInlayFunctionLikeReturnTypeHints = true
496−includeInlayFunctionParameterTypeHints = true
497−includeInlayParameterNameHints = "all"
498−includeInlayParameterNameHintsWhenArgumentMatchesName = true
499−includeInlayPropertyDeclarationTypeHints = true
500−includeInlayVariableTypeHints = true
501−
502587[[grammar]]
503588name = "tsx"
504589source = { git = "https://github.com/tree-sitter/tree-sitter-typescript", rev = "6aac031ad88dd6317f02ac0bb27d099a553a7d8c", subpath = "tsx" }
@@ -509,9 +594,8 @@ scope = "source.css"
509594injection-regex = "css"
510595file-types = ["css", "scss"]
511596roots = []
512−language-server = { command = "vscode-css-language-server", args = ["--stdio"] }
597+language-servers = [ "vscode-css-language-server" ]
513598auto-format = true
514−config = { "provideFormatter" = true }
515599indent = { tab-width = 2, unit = " " }
516600
517601[[grammar]]
@@ -524,9 +608,8 @@ scope = "source.scss"
524608injection-regex = "scss"
525609file-types = ["scss"]
526610roots = []
527−language-server = { command = "vscode-css-language-server", args = ["--stdio"] }
611+language-servers = [ "vscode-css-language-server" ]
528612auto-format = true
529−config = { "provideFormatter" = true }
530613indent = { tab-width = 2, unit = " " }
531614
532615[[grammar]]
@@ -539,9 +622,8 @@ scope = "text.html.basic"
539622injection-regex = "html"
540623file-types = ["html"]
541624roots = []
542−language-server = { command = "vscode-html-language-server", args = ["--stdio"] }
625+language-servers = [ "vscode-html-language-server" ]
543626auto-format = true
544−config = { "provideFormatter" = true }
545627indent = { tab-width = 2, unit = " " }
546628
547629[[grammar]]
@@ -556,7 +638,7 @@ file-types = ["py","pyi","py3","pyw","ptl",".pythonstartup",".pythonrc","SConstr
556638shebangs = ["python"]
557639roots = []
558640comment-token = "#"
559−language-server = { command = "pylsp" }
641+language-servers = [ "pylsp" ]
560642# TODO: pyls needs utf-8 offsets
561643indent = { tab-width = 4, unit = " " }
562644
@@ -572,7 +654,7 @@ file-types = ["ncl"]
572654shebangs = []
573655roots = []
574656comment-token = "#"
575−language-server = { command = "nls" }
657+language-servers = [ "nls" ]
576658indent = { tab-width = 2, unit = " " }
577659
578660[[grammar]]
@@ -587,7 +669,7 @@ file-types = ["nix"]
587669shebangs = []
588670roots = []
589671comment-token = "#"
590−language-server = { command = "nil" }
672+language-servers = [ "nil" ]
591673indent = { tab-width = 2, unit = " " }
592674
593675[[grammar]]
@@ -602,7 +684,7 @@ file-types = ["rb", "rake", "rakefile", "irb", "gemfile", "gemspec", "Rakefile",
602684shebangs = ["ruby"]
603685roots = []
604686comment-token = "#"
605−language-server = { command = "solargraph", args = ["stdio"] }
687+language-servers = [ "solargraph" ]
606688indent = { tab-width = 2, unit = " " }
607689
608690[[grammar]]
@@ -617,7 +699,7 @@ file-types = ["sh", "bash", "zsh", ".bash_login", ".bash_logout", ".bash_profile
617699shebangs = ["sh", "bash", "dash", "zsh"]
618700roots = []
619701comment-token = "#"
620−language-server = { command = "bash-language-server", args = ["start"] }
702+language-servers = [ "bash-language-server" ]
621703indent = { tab-width = 2, unit = " " }
622704
623705[[grammar]]
@@ -631,7 +713,7 @@ injection-regex = "php"
631713file-types = ["php", "inc"]
632714shebangs = ["php"]
633715roots = ["composer.json", "index.php"]
634−language-server = { command = "intelephense", args = ["--stdio"] }
716+language-servers = [ "intelephense" ]
635717indent = { tab-width = 4, unit = " " }
636718
637719[[grammar]]
@@ -657,7 +739,7 @@ injection-regex = "tex"
657739file-types = ["tex", "sty", "cls"]
658740roots = []
659741comment-token = "%"
660−language-server = { command = "texlab" }
742+language-servers = [ "texlab" ]
661743indent = { tab-width = 4, unit = "\t" }
662744
663745[[grammar]]
@@ -671,7 +753,7 @@ injection-regex = "bib"
671753file-types = ["bib"]
672754roots = []
673755comment-token = "%"
674−language-server = { command = "texlab" }
756+language-servers = [ "texlab" ]
675757indent = { tab-width = 4, unit = "\t" }
676758auto-format = true
677759
@@ -699,7 +781,7 @@ injection-regex = "lean"
699781file-types = ["lean"]
700782roots = [ "lakefile.lean" ]
701783comment-token = "--"
702−language-server = { command = "lean", args = [ "--server" ] }
784+language-servers = [ "lean" ]
703785indent = { tab-width = 2, unit = " " }
704786
705787[[grammar]]
@@ -713,13 +795,7 @@ injection-regex = "julia"
713795file-types = ["jl"]
714796roots = ["Manifest.toml", "Project.toml"]
715797comment-token = "#"
716−language-server = { command = "julia", timeout = 60, args = [
717− "--startup-file=no",
718− "--history-file=no",
719− "--quiet",
720− "-e",
721− "using LanguageServer; runserver()",
722− ] }
798+language-servers = [ "julia" ]
723799indent = { tab-width = 4, unit = " " }
724800
725801[[grammar]]
@@ -732,7 +808,7 @@ scope = "source.java"
732808injection-regex = "java"
733809file-types = ["java"]
734810roots = ["pom.xml", "build.gradle", "build.gradle.kts"]
735−language-server = { command = "jdtls" }
811+language-servers = [ "jdtls" ]
736812indent = { tab-width = 4, unit = " " }
737813
738814[[grammar]]
@@ -773,7 +849,7 @@ file-types = ["ml"]
773849shebangs = []
774850roots = []
775851comment-token = "(**)"
776−language-server = { command = "ocamllsp" }
852+language-servers = [ "ocamllsp" ]
777853indent = { tab-width = 2, unit = " " }
778854
779855[language.auto-pairs]
@@ -794,7 +870,7 @@ file-types = ["mli"]
794870shebangs = []
795871roots = []
796872comment-token = "(**)"
797−language-server = { command = "ocamllsp" }
873+language-servers = [ "ocamllsp" ]
798874indent = { tab-width = 2, unit = " " }
799875
800876[language.auto-pairs]
@@ -817,15 +893,7 @@ shebangs = ["lua"]
817893roots = [".luarc.json", ".luacheckrc", ".stylua.toml", "selene.toml", ".git"]
818894comment-token = "--"
819895indent = { tab-width = 2, unit = " " }
820−language-server = { command = "lua-language-server", args = [] }
821−
822−[language.config.Lua.hint]
823−enable = true
824−arrayIndex = "Enable"
825−setType = true
826−paramName = "All"
827−paramType = true
828−await = true
896+language-servers = [ "lua-language-server" ]
829897
830898[[grammar]]
831899name = "lua"
@@ -838,7 +906,7 @@ injection-regex = "svelte"
838906file-types = ["svelte"]
839907roots = []
840908indent = { tab-width = 2, unit = " " }
841−language-server = { command = "svelteserver", args = ["--stdio"] }
909+language-servers = [ "svelteserver" ]
842910
843911[[grammar]]
844912name = "svelte"
@@ -851,7 +919,7 @@ injection-regex = "vue"
851919file-types = ["vue"]
852920roots = ["package.json", "vue.config.js"]
853921indent = { tab-width = 2, unit = " " }
854−language-server = { command = "vls" }
922+language-servers = [ "vuels" ]
855923
856924[[grammar]]
857925name = "vue"
@@ -864,7 +932,7 @@ file-types = ["yml", "yaml"]
864932roots = []
865933comment-token = "#"
866934indent = { tab-width = 2, unit = " " }
867−language-server = { command = "yaml-language-server", args = ["--stdio"] }
935+language-servers = [ "yaml-language-server" ]
868936injection-regex = "yml|yaml"
869937
870938[[grammar]]
@@ -878,7 +946,7 @@ injection-regex = "haskell"
878946file-types = ["hs", "hs-boot"]
879947roots = ["Setup.hs", "stack.yaml", "cabal.project"]
880948comment-token = "--"
881−language-server = { command = "haskell-language-server-wrapper", args = ["--lsp"] }
949+language-servers = [ "haskell-language-server" ]
882950indent = { tab-width = 2, unit = " " }
883951
884952[[grammar]]
@@ -892,7 +960,7 @@ injection-regex = "purescript"
892960file-types = ["purs"]
893961roots = ["spago.dhall", "bower.json"]
894962comment-token = "--"
895−language-server = { command = "purescript-language-server", args = ["--stdio"] }
963+language-servers = [ "purescript-language-server" ]
896964indent = { tab-width = 2, unit = " " }
897965auto-format = true
898966formatter = { command = "purs-tidy", args = ["format"] }
@@ -906,7 +974,7 @@ file-types = ["zig"]
906974roots = ["build.zig"]
907975auto-format = true
908976comment-token = "//"
909−language-server = { command = "zls" }
977+language-servers = [ "zls" ]
910978indent = { tab-width = 4, unit = " " }
911979formatter = { command = "zig" , args = ["fmt", "--stdin"] }
912980
@@ -944,10 +1012,7 @@ roots = []
9441012file-types = ["pl", "prolog"]
9451013shebangs = ["swipl"]
9461014comment-token = "%"
947−language-server = { command = "swipl", args = [
948− "-g", "use_module(library(lsp_server))",
949− "-g", "lsp_server:main",
950− "-t", "halt", "--", "stdio"] }
1015+language-servers = [ "swipl" ]
9511016
9521017[[language]]
9531018name = "tsq"
@@ -969,7 +1034,7 @@ file-types = ["cmake", "CMakeLists.txt"]
9691034roots = []
9701035comment-token = "#"
9711036indent = { tab-width = 2, unit = " " }
972−language-server = { command = "cmake-language-server" }
1037+language-servers = [ "cmake-language-server" ]
9731038injection-regex = "cmake"
9741039
9751040[[grammar]]
@@ -1009,7 +1074,7 @@ file-types = ["pl", "pm", "t"]
10091074shebangs = ["perl"]
10101075roots = []
10111076comment-token = "#"
1012−language-server = { command = "perlnavigator", args= ["--stdio"] }
1077+language-servers = [ "perlnavigator" ]
10131078indent = { tab-width = 2, unit = " " }
10141079
10151080[[grammar]]
@@ -1023,7 +1088,7 @@ roots = []
10231088file-types = ["rkt", "rktd", "rktl", "scrbl"]
10241089shebangs = ["racket"]
10251090comment-token = ";"
1026−language-server = { command = "racket", args = ["-l", "racket-langserver"] }
1091+language-servers = [ "racket" ]
10271092grammar = "scheme"
10281093
10291094[[language]]
@@ -1034,7 +1099,7 @@ file-types = ["lisp", "asd", "cl", "l", "lsp", "ny", "podsl", "sexp"]
10341099shebangs = ["lisp", "sbcl", "ccl", "clisp", "ecl"]
10351100comment-token = ";"
10361101indent = { tab-width = 2, unit = " " }
1037−language-server = { command = "cl-lsp", args = [ "stdio" ] }
1102+language-servers = [ "cl-lsp" ]
10381103grammar = "scheme"
10391104
10401105[language.auto-pairs]
@@ -1060,7 +1125,7 @@ scope = "source.wgsl"
10601125file-types = ["wgsl"]
10611126roots = []
10621127comment-token = "//"
1063−language-server = { command = "wgsl_analyzer" }
1128+language-servers = [ "wgsl_analyzer" ]
10641129indent = { tab-width = 4, unit = " " }
10651130
10661131[[grammar]]
@@ -1123,7 +1188,7 @@ scope = "source.md"
11231188injection-regex = "md|markdown"
11241189file-types = ["md", "markdown", "PULLREQ_EDITMSG"]
11251190roots = [".marksman.toml"]
1126−language-server = { command = "marksman", args=["server"] }
1191+language-servers = [ "marksman" ]
11271192indent = { tab-width = 2, unit = " " }
11281193
11291194[[grammar]]
@@ -1149,7 +1214,7 @@ file-types = ["dart"]
11491214roots = ["pubspec.yaml"]
11501215auto-format = true
11511216comment-token = "//"
1152−language-server = { command = "dart", args = ["language-server", "--client-id=helix"] }
1217+language-servers = [ "dart" ]
11531218indent = { tab-width = 2, unit = " " }
11541219
11551220[[grammar]]
@@ -1163,8 +1228,7 @@ roots = ["build.sbt", "build.sc", "build.gradle", "build.gradle.kts", "pom.xml",
11631228file-types = ["scala", "sbt", "sc"]
11641229comment-token = "//"
11651230indent = { tab-width = 2, unit = " " }
1166−language-server = { command = "metals" }
1167−config = { "isHttpEnabled" = true }
1231+language-servers = [ "metals" ]
11681232
11691233[[grammar]]
11701234name = "scala"
@@ -1178,7 +1242,7 @@ roots = ["Dockerfile", "Containerfile"]
11781242file-types = ["Dockerfile", "dockerfile", "Containerfile", "containerfile"]
11791243comment-token = "#"
11801244indent = { tab-width = 2, unit = " " }
1181−language-server = { command = "docker-langserver", args = ["--stdio"] }
1245+language-servers = [ "docker-langserver" ]
11821246
11831247[[grammar]]
11841248name = "dockerfile"
@@ -1218,7 +1282,7 @@ roots = []
12181282file-types = ["git-rebase-todo"]
12191283injection-regex = "git-rebase"
12201284comment-token = "#"
1221−indent = { tab-width = 2, unit = " " }
1285+indent = { tab-width = 2, unit = "y" }
12221286
12231287[[grammar]]
12241288name = "git-rebase"
@@ -1294,7 +1358,7 @@ file-types = ["elm"]
12941358roots = ["elm.json"]
12951359auto-format = true
12961360comment-token = "--"
1297−language-server = { command = "elm-language-server" }
1361+language-servers = [ "elm-language-server" ]
12981362indent = { tab-width = 4, unit = " " }
12991363
13001364[[grammar]]
@@ -1320,7 +1384,7 @@ file-types = ["res"]
13201384roots = ["bsconfig.json"]
13211385auto-format = true
13221386comment-token = "//"
1323−language-server = { command = "rescript-language-server", args = ["--stdio"] }
1387+language-servers = [ "rescript-language-server" ]
13241388indent = { tab-width = 2, unit = " " }
13251389
13261390[[grammar]]
@@ -1336,7 +1400,7 @@ roots = ["rebar.config"]
13361400shebangs = ["escript"]
13371401comment-token = "%%"
13381402indent = { tab-width = 4, unit = " " }
1339−language-server = { command = "erlang_ls" }
1403+language-servers = [ "erlang-ls" ]
13401404
13411405[language.auto-pairs]
13421406'(' = ')'
@@ -1357,7 +1421,7 @@ file-types = ["kt", "kts"]
13571421roots = ["settings.gradle", "settings.gradle.kts"]
13581422comment-token = "//"
13591423indent = { tab-width = 4, unit = " " }
1360−language-server = { command = "kotlin-language-server" }
1424+language-servers = [ "kotlin-language-server" ]
13611425
13621426[[grammar]]
13631427name = "kotlin"
@@ -1367,11 +1431,12 @@ source = { git = "https://github.com/fwcd/tree-sitter-kotlin", rev = "a4f71eb9b8
13671431name = "hcl"
13681432scope = "source.hcl"
13691433injection-regex = "(hcl|tf|nomad)"
1434+language-id = "terraform"
13701435file-types = ["hcl", "tf", "nomad"]
13711436roots = []
13721437comment-token = "#"
13731438indent = { tab-width = 2, unit = " " }
1374−language-server = { command = "terraform-ls", args = ["serve"], language-id = "terraform" }
1439+language-servers = [ "terraform-ls" ]
13751440auto-format = true
13761441
13771442[[grammar]]
@@ -1381,11 +1446,12 @@ source = { git = "https://github.com/MichaHoffmann/tree-sitter-hcl", rev = "3cb7
13811446[[language]]
13821447name = "tfvars"
13831448scope = "source.tfvars"
1449+language-id = "terraform-vars"
13841450file-types = ["tfvars"]
13851451roots = []
13861452comment-token = "#"
13871453indent = { tab-width = 2, unit = " " }
1388−language-server = { command = "terraform-ls", args = ["serve"], language-id = "terraform-vars" }
1454+language-servers = [ "terraform-ls" ]
13891455auto-format = true
13901456grammar = "hcl"
13911457
@@ -1409,7 +1475,7 @@ file-types = ["sol"]
14091475roots = []
14101476comment-token = "//"
14111477indent = { tab-width = 4, unit = " " }
1412−language-server = { command = "solc", args = ["--lsp"] }
1478+language-servers = [ "solc" ]
14131479
14141480[[grammar]]
14151481name = "solidity"
@@ -1423,7 +1489,7 @@ file-types = ["gleam"]
14231489roots = ["gleam.toml"]
14241490comment-token = "//"
14251491indent = { tab-width = 2, unit = " " }
1426−language-server = { command = "gleam", args = ["lsp"] }
1492+language-servers = [ "gleam" ]
14271493
14281494[[grammar]]
14291495name = "gleam"
@@ -1447,7 +1513,7 @@ file-types = ["robot", "resource"]
14471513comment-token = "#"
14481514roots = []
14491515indent = { tab-width = 4, unit = " " }
1450−language-server = { command = "robotframework_ls" }
1516+language-servers = [ "robotframework_ls" ]
14511517
14521518[[grammar]]
14531519name = "robot"
@@ -1462,7 +1528,7 @@ shebangs = ["r", "R"]
14621528roots = []
14631529comment-token = "#"
14641530indent = { tab-width = 2, unit = " " }
1465−language-server = { command = "R", args = ["--no-echo", "-e", "languageserver::run()"] }
1531+language-servers = [ "R" ]
14661532
14671533[[grammar]]
14681534name = "r"
@@ -1476,7 +1542,7 @@ file-types = ["rmd", "Rmd"]
14761542roots = []
14771543indent = { tab-width = 2, unit = " " }
14781544grammar = "markdown"
1479−language-server = { command = "R", args = ["--slave", "-e", "languageserver::run()"] }
1545+language-servers = [ "R" ]
14801546
14811547[[language]]
14821548name = "swift"
@@ -1486,7 +1552,7 @@ file-types = ["swift"]
14861552roots = [ "Package.swift" ]
14871553comment-token = "//"
14881554auto-format = true
1489−language-server = { command = "sourcekit-lsp" }
1555+language-servers = [ "sourcekit-lsp" ]
14901556
14911557[[grammar]]
14921558name = "swift"
@@ -1533,8 +1599,7 @@ injection-regex = "heex"
15331599file-types = ["heex"]
15341600roots = ["mix.exs", "mix.lock"]
15351601indent = { tab-width = 2, unit = " " }
1536−language-server = { command = "elixir-ls" }
1537−config = { elixirLS.dialyzerEnabled = false }
1602+language-servers = [ "elixir-ls" ]
15381603
15391604[[grammar]]
15401605name = "heex"
@@ -1605,7 +1670,7 @@ file-types = ["vala", "vapi"]
16051670roots = []
16061671comment-token = "//"
16071672indent = { tab-width = 2, unit = " " }
1608−language-server = { command = "vala-language-server" }
1673+language-servers = [ "vala-language-server" ]
16091674
16101675[[grammar]]
16111676name = "vala"
@@ -1670,7 +1735,7 @@ auto-format = false
16701735scope = "source.odin"
16711736file-types = ["odin"]
16721737roots = ["ols.json"]
1673−language-server = { command = "ols", args = [] }
1738+language-servers = [ "ols" ]
16741739comment-token = "//"
16751740indent = { tab-width = 4, unit = "\t" }
16761741
@@ -1721,7 +1786,7 @@ scope = "source.v"
17211786file-types = ["v", "vv", "vsh"]
17221787shebangs = ["v run"]
17231788roots = ["v.mod"]
1724−language-server = { command = "v", args = ["ls"] }
1789+language-servers = [ "vlang-language-server" ]
17251790auto-format = true
17261791comment-token = "//"
17271792indent = { tab-width = 4, unit = "\t" }
@@ -1736,7 +1801,7 @@ scope = "source.verilog"
17361801file-types = ["v", "vh", "sv", "svh"]
17371802roots = []
17381803comment-token = "//"
1739−language-server = { command = "svlangserver", args = [] }
1804+language-servers = [ "svlangserver" ]
17401805indent = { tab-width = 2, unit = " " }
17411806injection-regex = "verilog"
17421807
@@ -1775,7 +1840,7 @@ injection-regex = "openscad"
17751840file-types = ["scad"]
17761841roots = []
17771842comment-token = "//"
1778−language-server = { command = "openscad-lsp", args = ["--stdio"] }
1843+language-servers = [ "openscad-lsp" ]
17791844indent = { tab-width = 2, unit = "\t" }
17801845
17811846[[grammar]]
@@ -1789,7 +1854,7 @@ injection-regex = "prisma"
17891854file-types = ["prisma"]
17901855roots = ["package.json"]
17911856comment-token = "//"
1792−language-server = { command = "prisma-language-server", args = ["--stdio"] }
1857+language-servers = [ "prisma-language-server" ]
17931858indent = { tab-width = 2, unit = " " }
17941859
17951860[[grammar]]
@@ -1803,7 +1868,7 @@ injection-regex = "(clojure|clj|edn|boot)"
18031868file-types = ["clj", "cljs", "cljc", "clje", "cljr", "cljx", "edn", "boot"]
18041869roots = ["project.clj", "build.boot", "deps.edn", "shadow-cljs.edn"]
18051870comment-token = ";"
1806−language-server = { command = "clojure-lsp" }
1871+language-servers = [ "clojure-lsp" ]
18071872indent = { tab-width = 2, unit = " " }
18081873
18091874[[grammar]]
@@ -1827,7 +1892,7 @@ file-types = ["elv"]
18271892roots = []
18281893comment-token = "#"
18291894indent = { tab-width = 2, unit = " " }
1830−language-server = { command = "elvish", args = ["-lsp"] }
1895+language-servers = [ "elvish" ]
18311896grammar = "elvish"
18321897
18331898[[grammar]]
@@ -1843,7 +1908,7 @@ shebangs = []
18431908roots = []
18441909comment-token = "--"
18451910indent = { tab-width = 2, unit = " " }
1846−language-server = { command = "idris2-lsp" }
1911+language-servers = [ "idris2-lsp" ]
18471912
18481913[[language]]
18491914name = "fortran"
@@ -1853,7 +1918,7 @@ file-types = ["f", "for", "f90", "f95", "f03"]
18531918roots = ["fpm.toml"]
18541919comment-token = "!"
18551920indent = { tab-width = 4, unit = " "}
1856−language-server = { command = "fortls", args = ["--lowercase_intrinsics"] }
1921+language-servers = [ "fortls" ]
18571922
18581923[[grammar]]
18591924name = "fortran"
@@ -1880,7 +1945,7 @@ file-types = ["dot"]
18801945roots = []
18811946comment-token = "//"
18821947indent = { tab-width = 4, unit = " " }
1883−language-server = { command = "dot-language-server", args = ["--stdio"] }
1948+language-servers = [ "dot-language-server" ]
18841949
18851950[[grammar]]
18861951name = "dot"
@@ -1894,7 +1959,7 @@ file-types = ["cue"]
18941959roots = ["cue.mod"]
18951960auto-format = true
18961961comment-token = "//"
1897−language-server = { command = "cuelsp" }
1962+language-servers = [ "cuelsp" ]
18981963indent = { tab-width = 4, unit = "\t" }
18991964formatter = { command = "cue", args = ["fmt", "-"] }
19001965
@@ -1910,7 +1975,7 @@ file-types = ["slint"]
19101975roots = []
19111976comment-token = "//"
19121977indent = { tab-width = 4, unit = " " }
1913−language-server = { command = "slint-lsp", args = [] }
1978+language-servers = [ "slint-lsp" ]
19141979
19151980[[grammar]]
19161981name = "slint"
@@ -1962,7 +2027,7 @@ file-types = ["pas", "pp", "inc", "lpr", "lfm"]
19622027roots = []
19632028comment-token = "//"
19642029indent = { tab-width = 2, unit = " " }
1965−language-server = { command = "pasls", args = [] }
2030+language-servers = [ "pasls" ]
19662031
19672032[[grammar]]
19682033name = "pascal"
@@ -1987,7 +2052,7 @@ file-types = ["libsonnet", "jsonnet"]
19872052roots = ["jsonnetfile.json"]
19882053comment-token = "//"
19892054indent = { tab-width = 2, unit = " " }
1990−language-server = { command = "jsonnet-language-server", args= ["-t", "--lint"] }
2055+language-servers = [ "jsonnet-language-server" ]
19912056
19922057[[grammar]]
19932058name = "jsonnet"
@@ -2013,7 +2078,7 @@ file-types = ["bass"]
20132078roots = []
20142079comment-token = ";"
20152080indent = { tab-width = 2, unit = " " }
2016−language-server = { command = "bass", args = ["--lsp"] }
2081+language-servers = [ "bass" ]
20172082
20182083[[grammar]]
20192084name = "bass"
@@ -2049,7 +2114,7 @@ roots = []
20492114comment-token = "//"
20502115injection-regex = "d"
20512116indent = { tab-width = 4, unit = " "}
2052−language-server = { command = "serve-d" }
2117+language-servers = [ "serve-d" ]
20532118formatter = { command = "dfmt" }
20542119
20552120[[grammar]]
@@ -2173,7 +2238,7 @@ roots = []
21732238auto-format = true
21742239comment-token = "//"
21752240indent = { tab-width = 2, unit = " "}
2176−language-server = { command = "bicep-langserver" }
2241+language-servers = [ "bicep-langserver" ]
21772242
21782243[[grammar]]
21792244name = "bicep"
@@ -2184,7 +2249,7 @@ name = "qml"
21842249scope = "source.qml"
21852250file-types = ["qml"]
21862251roots = []
2187−language-server = { command = "qmlls" }
2252+language-servers = [ "qmlls" ]
21882253indent = { tab-width = 4, unit = " " }
21892254grammar = "qmljs"
21902255
@@ -2239,7 +2304,7 @@ file-types = ["dhall"]
22392304roots = []
22402305comment-token = "--"
22412306indent = { tab-width = 2, unit = " " }
2242−language-server = { command = "dhall-lsp-server" }
2307+language-servers = [ "dhall-lsp-server" ]
22432308formatter = { command = "dhall" , args = ["format"] }
22442309
22452310[[grammar]]
@@ -2401,7 +2466,7 @@ file-types = ["smithy"]
24012466roots = ["smithy-build.json"]
24022467comment-token = "//"
24032468indent = { tab-width = 4, unit = " " }
2404−language-server = { command = "cs", args = ["launch", "--contrib", "smithy-language-server", "--", "0"] }
2469+language-servers = [ "cs" ]
24052470
24062471[[grammar]]
24072472name = "smithy"
@@ -2413,7 +2478,7 @@ scope = "source.vhdl"
24132478file-types = ["vhd", "vhdl"]
24142479roots = []
24152480comment-token = "--"
2416−language-server = { command = "vhdl_ls", args = [] }
2481+language-servers = [ "vhdl_ls" ]
24172482indent = { tab-width = 2, unit = " " }
24182483injection-regex = "vhdl"
24192484
@@ -2429,7 +2494,7 @@ injection-regex = "rego"
24292494file-types = ["rego"]
24302495auto-format = true
24312496comment-token = "#"
2432−language-server = { command = "regols" }
2497+language-servers = [ "regols" ]
24332498grammar = "rego"
24342499
24352500[[grammar]]
@@ -2445,7 +2510,7 @@ shebangs = []
24452510roots = []
24462511comment-token = "#"
24472512indent = { tab-width = 2, unit = " " }
2448−language-server = { command = "nimlangserver" }
2513+language-servers = [ "nimlangserver" ]
24492514
24502515[language.auto-pairs]
24512516'(' = ')'
@@ -2485,7 +2550,7 @@ name = "markdoc"
24852550scope = "text.markdoc"
24862551roots = []
24872552file-types = ["mdoc"]
2488−language-server = { command = "markdoc-ls", args = ["--stdio"] }
2553+language-servers = [ "markdoc-ls" ]
24892554
24902555[[grammar]]
24912556name = "markdoc"
@@ -2498,7 +2563,7 @@ injection-regex = "(cl|opencl)"
24982563file-types = ["cl"]
24992564roots = []
25002565comment-token = "//"
2501−language-server = { command = "clangd" }
2566+language-servers = [ "clangd" ]
25022567
25032568[[grammar]]
25042569name = "opencl"