@@ -1,6 +1,143 @@
11# Language support configuration.
22# See the languages documentation: https://docs.helix-editor.com/master/languages.html
33
4+[language-server]
5+
6+awk-language-server = { command = "awk-language-server" }
7+bash-language-server = { command = "bash-language-server", args = ["start"] }
8+bass = { command = "bass", args = ["--lsp"] }
9+bicep-langserver = { command = "bicep-langserver" }
10+cl-lsp = { command = "cl-lsp", args = [ "stdio" ] }
11+clangd = { command = "clangd" }
12+clojure-lsp = { command = "clojure-lsp" }
13+cmake-language-server = { command = "cmake-language-server" }
14+crystalline = { command = "crystalline", args = ["--stdio"] }
15+cs = { command = "cs", args = ["launch", "--contrib", "smithy-language-server", "--", "0"] }
16+cuelsp = { command = "cuelsp" }
17+dart = { command = "dart", args = ["language-server", "--client-id=helix"] }
18+dhall-lsp-server = { command = "dhall-lsp-server" }
19+docker-langserver = { command = "docker-langserver", args = ["--stdio"] }
20+dot-language-server = { command = "dot-language-server", args = ["--stdio"] }
21+elixir-ls = { command = "elixir-ls", config = { elixirLS.dialyzerEnabled = false } }
22+elm-language-server = { command = "elm-language-server" }
23+elvish = { command = "elvish", args = ["-lsp"] }
24+erlang-ls = { command = "erlang_ls" }
25+forc = { command = "forc", args = ["lsp"] }
26+fortls = { command = "fortls", args = ["--lowercase_intrinsics"] }
27+gleam = { command = "gleam", args = ["lsp"] }
28+haskell-language-server = { command = "haskell-language-server-wrapper", args = ["--lsp"] }
29+idris2-lsp = { command = "idris2-lsp" }
30+intelephense = { command = "intelephense", args = ["--stdio"] }
31+jdtls = { command = "jdtls" }
32+jsonnet-language-server = { command = "jsonnet-language-server", args= ["-t", "--lint"] }
33+julia = { command = "julia", timeout = 60, args = [ "--startup-file=no", "--history-file=no", "--quiet", "-e", "using LanguageServer; runserver()", ] }
34+kotlin-language-server = { command = "kotlin-language-server" }
35+lean = { command = "lean", args = [ "--server" ] }
36+markdoc-ls = { command = "markdoc-ls", args = ["--stdio"] }
37+marksman = { command = "marksman", args = ["server"] }
38+metals = { command = "metals", config = { "isHttpEnabled" = true } }
39+mint = { command = "mint", args = ["ls"] }
40+nil = { command = "nil" }
41+nimlangserver = { command = "nimlangserver" }
42+nls = { command = "nls" }
43+ocamllsp = { command = "ocamllsp" }
44+ols = { command = "ols", args = [] }
45+omnisharp = { command = "OmniSharp", args = [ "--languageserver" ] }
46+openscad-lsp = { command = "openscad-lsp", args = ["--stdio"] }
47+pasls = { command = "pasls", args = [] }
48+perlnavigator = { command = "perlnavigator", args= ["--stdio"] }
49+prisma-language-server = { command = "prisma-language-server", args = ["--stdio"] }
50+purescript-language-server = { command = "purescript-language-server", args = ["--stdio"] }
51+pylsp = { command = "pylsp" }
52+qmlls = { command = "qmlls" }
53+r = { command = "R", args = ["--no-echo", "-e", "languageserver::run()"] }
54+racket = { command = "racket", args = ["-l", "racket-langserver"] }
55+regols = { command = "regols" }
56+rescript-language-server = { command = "rescript-language-server", args = ["--stdio"] }
57+robotframework_ls = { command = "robotframework_ls" }
58+serve-d = { command = "serve-d" }
59+slint-lsp = { command = "slint-lsp", args = [] }
60+solargraph = { command = "solargraph", args = ["stdio"] }
61+solc = { command = "solc", args = ["--lsp"] }
62+sourcekit-lsp = { command = "sourcekit-lsp" }
63+svelteserver = { command = "svelteserver", args = ["--stdio"] }
64+svlangserver = { command = "svlangserver", args = [] }
65+swipl = { command = "swipl", args = [ "-g", "use_module(library(lsp_server))", "-g", "lsp_server:main", "-t", "halt", "--", "stdio" ] }
66+taplo = { command = "taplo", args = ["lsp", "stdio"] }
67+terraform-ls = { command = "terraform-ls", args = ["serve"] }
68+texlab = { command = "texlab" }
69+vala-language-server = { command = "vala-language-server" }
70+vhdl_ls = { command = "vhdl_ls", args = [] }
71+vlang-language-server = { command = "v", args = ["ls"] }
72+vscode-css-language-server = { command = "vscode-css-language-server", args = ["--stdio"], config = { "provideFormatter" = true }}
73+vscode-html-language-server = { command = "vscode-html-language-server", args = ["--stdio"], config = { provideFormatter = true } }
74+vscode-json-language-server = { command = "vscode-json-language-server", args = ["--stdio"], config = { provideFormatter = true } }
75+vuels = { command = "vls" }
76+wgsl_analyzer = { command = "wgsl_analyzer" }
77+yaml-language-server = { command = "yaml-language-server", args = ["--stdio"] }
78+zls = { command = "zls" }
79+
80+
81+[language-server.lua-language-server]
82+command = "lua-language-server"
83+
84+[language-server.lua-language-server.config.Lua.hint]
85+enable = true
86+arrayIndex = "Enable"
87+setType = true
88+paramName = "All"
89+paramType = true
90+await = true
91+
92+
93+[language-server.gopls]
94+command = "gopls"
95+
96+[language-server.gopls.config.hints]
97+assignVariableTypes = true
98+compositeLiteralFields = true
99+constantValues = true
100+functionTypeParameters = true
101+parameterNames = true
102+rangeVariableTypes = true
103+
104+
105+[language-server.rust-analyzer]
106+command = "rust-analyzer"
107+
108+[language-server.rust-analyzer.config]
109+inlayHints.bindingModeHints.enable = false
110+inlayHints.closingBraceHints.minLines = 10
111+inlayHints.closureReturnTypeHints.enable = "with_block"
112+inlayHints.discriminantHints.enable = "fieldless"
113+inlayHints.lifetimeElisionHints.enable = "skip_trivial"
114+inlayHints.typeHints.hideClosureInitialization = false
115+
116+
117+[language-server.typescript-language-server]
118+command = "typescript-language-server"
119+args = ["--stdio"]
120+config.hostInfo = "helix"
121+
122+[language-server.typescript-language-server.config.typescript.inlayHints]
123+includeInlayEnumMemberValueHints = true
124+includeInlayFunctionLikeReturnTypeHints = true
125+includeInlayFunctionParameterTypeHints = true
126+includeInlayParameterNameHints = "all"
127+includeInlayParameterNameHintsWhenArgumentMatchesName = true
128+includeInlayPropertyDeclarationTypeHints = true
129+includeInlayVariableTypeHints = true
130+
131+[language-server.typescript-language-server.config.javascript.inlayHints]
132+includeInlayEnumMemberValueHints = true
133+includeInlayFunctionLikeReturnTypeHints = true
134+includeInlayFunctionParameterTypeHints = true
135+includeInlayParameterNameHints = "all"
136+includeInlayParameterNameHintsWhenArgumentMatchesName = true
137+includeInlayPropertyDeclarationTypeHints = true
138+includeInlayVariableTypeHints = true
139+
140+
4141[[language]]
5142name = "rust"
6143scope = "source.rust"
@@ -9,7 +146,7 @@ file-types = ["rs"]
9146roots = ["Cargo.toml", "Cargo.lock"]
10147auto-format = true
11148comment-token = "//"
12−language-server = { command = "rust-analyzer" }
149+language-servers = [ "rust-analyzer" ]
13150indent = { tab-width = 4, unit = " " }
14151
15152[language.auto-pairs]
@@ -19,14 +156,6 @@ indent = { tab-width = 4, unit = " " }
19156'"' = '"'
20157'`' = '`'
21158
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−
30159[language.debugger]
31160name = "lldb-vscode"
32161transport = "stdio"
@@ -65,7 +194,7 @@ name = "sway"
65194scope = "source.sway"
66195injection-regex = "sway"
67196file-types = ["sw"]
68−language-server = { command = "forc", args = ["lsp"] }
197+language-servers = [ "forc" ]
69198roots = ["Forc.toml", "Forc.lock"]
70199indent = { tab-width = 4, unit = " " }
71200comment-token = "//"
@@ -81,7 +210,7 @@ injection-regex = "toml"
81210file-types = ["toml", "poetry.lock"]
82211roots = []
83212comment-token = "#"
84−language-server = { command = "taplo", args = ["lsp", "stdio"] }
213+language-servers = [ "taplo" ]
85214indent = { tab-width = 2, unit = " " }
86215
87216[[grammar]]
@@ -95,7 +224,7 @@ injection-regex = "awk"
95224file-types = ["awk", "gawk", "nawk", "mawk"]
96225roots = []
97226comment-token = "#"
98−language-server = { command = "awk-language-server" }
227+language-servers = [ "awk-language-server" ]
99228indent = { tab-width = 2, unit = " " }
100229
101230[[grammar]]
@@ -123,8 +252,7 @@ file-types = ["ex", "exs", "mix.lock"]
123252shebangs = ["elixir"]
124253roots = ["mix.exs", "mix.lock"]
125254comment-token = "#"
126−language-server = { command = "elixir-ls" }
127−config = { elixirLS.dialyzerEnabled = false }
255+language-servers = [ "elixir-ls" ]
128256indent = { tab-width = 2, unit = " " }
129257
130258[[grammar]]
@@ -153,7 +281,7 @@ file-types = ["mint"]
153281shebangs = []
154282roots = []
155283comment-token = "//"
156−language-server = { command = "mint", args = ["ls"] }
284+language-servers = [ "mint" ]
157285indent = { tab-width = 2, unit = " " }
158286
159287[[language]]
@@ -162,9 +290,8 @@ scope = "source.json"
162290injection-regex = "json"
163291file-types = ["json", "jsonc", "arb", "ipynb", "geojson"]
164292roots = []
165−language-server = { command = "vscode-json-language-server", args = ["--stdio"] }
293+language-servers = [ "vscode-json-language-server" ]
166294auto-format = true
167−config = { "provideFormatter" = true }
168295indent = { tab-width = 2, unit = " " }
169296
170297[[grammar]]
@@ -178,7 +305,7 @@ injection-regex = "c"
178305file-types = ["c"] # TODO: ["h"]
179306roots = []
180307comment-token = "//"
181−language-server = { command = "clangd" }
308+language-servers = [ "clangd" ]
182309indent = { tab-width = 2, unit = " " }
183310
184311[language.debugger]
@@ -215,7 +342,7 @@ injection-regex = "cpp"
215342file-types = ["cc", "hh", "c++", "cpp", "hpp", "h", "ipp", "tpp", "cxx", "hxx", "ixx", "txx", "ino", "C", "H", "cu", "cuh"]
216343roots = []
217344comment-token = "//"
218−language-server = { command = "clangd" }
345+language-servers = [ "clangd" ]
219346indent = { tab-width = 2, unit = " " }
220347
221348[language.debugger]
@@ -253,7 +380,7 @@ roots = ["shard.yml", "shard.lock"]
253380comment-token = "#"
254381indent = { tab-width = 2, unit = " " }
255382grammar = "ruby"
256−language-server = { command = "crystalline", args = ["--stdio"] }
383+language-servers = [ "crystalline" ]
257384
258385[[language]]
259386name = "c-sharp"
@@ -263,7 +390,7 @@ file-types = ["cs"]
263390roots = ["sln", "csproj"]
264391comment-token = "//"
265392indent = { tab-width = 4, unit = "\t" }
266−language-server = { command = "OmniSharp", args = [ "--languageserver" ] }
393+language-servers = [ "omnisharp" ]
267394
268395[language.debugger]
269396name = "netcoredbg"
@@ -296,18 +423,10 @@ file-types = ["go"]
296423roots = ["go.work", "go.mod"]
297424auto-format = true
298425comment-token = "//"
299−language-server = { command = "gopls" }
426+language-servers = [ "gopls" ]
300427# TODO: gopls needs utf-8 offsets?
301428indent = { tab-width = 4, unit = "\t" }
302429
303−[language.config.hints]
304−assignVariableTypes = true
305−compositeLiteralFields = true
306−constantValues = true
307−functionTypeParameters = true
308−parameterNames = true
309−rangeVariableTypes = true
310−
311430[language.debugger]
312431name = "go"
313432transport = "tcp"
@@ -351,7 +470,7 @@ file-types = ["go.mod"]
351470roots = []
352471auto-format = true
353472comment-token = "//"
354−language-server = { command = "gopls" }
473+language-servers = [ "gopls" ]
355474indent = { tab-width = 4, unit = "\t" }
356475
357476[[grammar]]
@@ -365,7 +484,7 @@ injection-regex = "gotmpl"
365484file-types = ["gotmpl"]
366485roots = []
367486comment-token = "//"
368−language-server = { command = "gopls" }
487+language-servers = [ "gopls" ]
369488indent = { tab-width = 2, unit = " " }
370489
371490[[grammar]]
@@ -380,7 +499,7 @@ file-types = ["go.work"]
380499roots = []
381500auto-format = true
382501comment-token = "//"
383−language-server = { command = "gopls" }
502+language-servers = [ "gopls" ]
384503indent = { tab-width = 4, unit = "\t" }
385504
386505[[grammar]]
@@ -391,26 +510,15 @@ source = { git = "https://github.com/omertuc/tree-sitter-go-work", rev = "6dd9dd
391510name = "javascript"
392511scope = "source.js"
393512injection-regex = "(js|javascript)"
513+language-id = "javascript"
394514file-types = ["js", "mjs", "cjs"]
395515shebangs = ["node"]
396516roots = []
397517comment-token = "//"
398518# TODO: highlights-params
399−language-server = { command = "typescript-language-server", args = ["--stdio"], language-id = "javascript" }
519+language-servers = [ "typescript-language-server" ]
400520indent = { tab-width = 2, unit = " " }
401521
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−
414522[language.debugger]
415523name = "node-debug2"
416524transport = "stdio"
@@ -431,48 +539,26 @@ source = { git = "https://github.com/tree-sitter/tree-sitter-javascript", rev =
431539name = "jsx"
432540scope = "source.jsx"
433541injection-regex = "jsx"
542+language-id = "javascriptreact"
434543file-types = ["jsx"]
435544roots = []
436545comment-token = "//"
437−language-server = { command = "typescript-language-server", args = ["--stdio"], language-id = "javascriptreact" }
546+language-servers = [ "typescript-language-server" ]
438547indent = { tab-width = 2, unit = " " }
439548grammar = "javascript"
440549
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−
453550[[language]]
454551name = "typescript"
455552scope = "source.ts"
456553injection-regex = "(ts|typescript)"
457554file-types = ["ts", "mts", "cts"]
555+language-id = "typescript"
458556shebangs = []
459557roots = []
460558# TODO: highlights-params
461−language-server = { command = "typescript-language-server", args = ["--stdio"], language-id = "typescript"}
559+language-servers = [ "typescript-language-server" ]
462560indent = { tab-width = 2, unit = " " }
463561
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−
476562[[grammar]]
477563name = "typescript"
478564source = { git = "https://github.com/tree-sitter/tree-sitter-typescript", rev = "6aac031ad88dd6317f02ac0bb27d099a553a7d8c", subpath = "typescript" }
@@ -481,24 +567,13 @@ source = { git = "https://github.com/tree-sitter/tree-sitter-typescript", rev =
481567name = "tsx"
482568scope = "source.tsx"
483569injection-regex = "(tsx)" # |typescript
570+language-id = "typescriptreact"
484571file-types = ["tsx"]
485572roots = []
486573# TODO: highlights-params
487−language-server = { command = "typescript-language-server", args = ["--stdio"], language-id = "typescriptreact" }
574+language-servers = [ "typescript-language-server" ]
488575indent = { tab-width = 2, unit = " " }
489576
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−
502577[[grammar]]
503578name = "tsx"
504579source = { git = "https://github.com/tree-sitter/tree-sitter-typescript", rev = "6aac031ad88dd6317f02ac0bb27d099a553a7d8c", subpath = "tsx" }
@@ -509,9 +584,8 @@ scope = "source.css"
509584injection-regex = "css"
510585file-types = ["css", "scss"]
511586roots = []
512−language-server = { command = "vscode-css-language-server", args = ["--stdio"] }
587+language-servers = [ "vscode-css-language-server" ]
513588auto-format = true
514−config = { "provideFormatter" = true }
515589indent = { tab-width = 2, unit = " " }
516590
517591[[grammar]]
@@ -524,9 +598,8 @@ scope = "source.scss"
524598injection-regex = "scss"
525599file-types = ["scss"]
526600roots = []
527−language-server = { command = "vscode-css-language-server", args = ["--stdio"] }
601+language-servers = [ "vscode-css-language-server" ]
528602auto-format = true
529−config = { "provideFormatter" = true }
530603indent = { tab-width = 2, unit = " " }
531604
532605[[grammar]]
@@ -539,9 +612,8 @@ scope = "text.html.basic"
539612injection-regex = "html"
540613file-types = ["html"]
541614roots = []
542−language-server = { command = "vscode-html-language-server", args = ["--stdio"] }
615+language-servers = [ "vscode-html-language-server" ]
543616auto-format = true
544−config = { "provideFormatter" = true }
545617indent = { tab-width = 2, unit = " " }
546618
547619[[grammar]]
@@ -556,7 +628,7 @@ file-types = ["py","pyi","py3","pyw","ptl",".pythonstartup",".pythonrc","SConstr
556628shebangs = ["python"]
557629roots = []
558630comment-token = "#"
559−language-server = { command = "pylsp" }
631+language-servers = [ "pylsp" ]
560632# TODO: pyls needs utf-8 offsets
561633indent = { tab-width = 4, unit = " " }
562634
@@ -572,7 +644,7 @@ file-types = ["ncl"]
572644shebangs = []
573645roots = []
574646comment-token = "#"
575−language-server = { command = "nls" }
647+language-servers = [ "nls" ]
576648indent = { tab-width = 2, unit = " " }
577649
578650[[grammar]]
@@ -587,7 +659,7 @@ file-types = ["nix"]
587659shebangs = []
588660roots = []
589661comment-token = "#"
590−language-server = { command = "nil" }
662+language-servers = [ "nil" ]
591663indent = { tab-width = 2, unit = " " }
592664
593665[[grammar]]
@@ -602,7 +674,7 @@ file-types = ["rb", "rake", "rakefile", "irb", "gemfile", "gemspec", "Rakefile",
602674shebangs = ["ruby"]
603675roots = []
604676comment-token = "#"
605−language-server = { command = "solargraph", args = ["stdio"] }
677+language-servers = [ "solargraph" ]
606678indent = { tab-width = 2, unit = " " }
607679
608680[[grammar]]
@@ -617,7 +689,7 @@ file-types = ["sh", "bash", "zsh", ".bash_login", ".bash_logout", ".bash_profile
617689shebangs = ["sh", "bash", "dash", "zsh"]
618690roots = []
619691comment-token = "#"
620−language-server = { command = "bash-language-server", args = ["start"] }
692+language-servers = [ "bash-language-server" ]
621693indent = { tab-width = 2, unit = " " }
622694
623695[[grammar]]
@@ -631,7 +703,7 @@ injection-regex = "php"
631703file-types = ["php", "inc"]
632704shebangs = ["php"]
633705roots = ["composer.json", "index.php"]
634−language-server = { command = "intelephense", args = ["--stdio"] }
706+language-servers = [ "intelephense" ]
635707indent = { tab-width = 4, unit = " " }
636708
637709[[grammar]]
@@ -657,7 +729,7 @@ injection-regex = "tex"
657729file-types = ["tex", "sty", "cls"]
658730roots = []
659731comment-token = "%"
660−language-server = { command = "texlab" }
732+language-servers = [ "texlab" ]
661733indent = { tab-width = 4, unit = "\t" }
662734
663735[[grammar]]
@@ -671,7 +743,7 @@ injection-regex = "bib"
671743file-types = ["bib"]
672744roots = []
673745comment-token = "%"
674−language-server = { command = "texlab" }
746+language-servers = [ "texlab" ]
675747indent = { tab-width = 4, unit = "\t" }
676748auto-format = true
677749
@@ -699,7 +771,7 @@ injection-regex = "lean"
699771file-types = ["lean"]
700772roots = [ "lakefile.lean" ]
701773comment-token = "--"
702−language-server = { command = "lean", args = [ "--server" ] }
774+language-servers = [ "lean" ]
703775indent = { tab-width = 2, unit = " " }
704776
705777[[grammar]]
@@ -713,13 +785,7 @@ injection-regex = "julia"
713785file-types = ["jl"]
714786roots = ["Manifest.toml", "Project.toml"]
715787comment-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− ] }
788+language-servers = [ "julia" ]
723789indent = { tab-width = 4, unit = " " }
724790
725791[[grammar]]
@@ -732,7 +798,7 @@ scope = "source.java"
732798injection-regex = "java"
733799file-types = ["java"]
734800roots = ["pom.xml", "build.gradle", "build.gradle.kts"]
735−language-server = { command = "jdtls" }
801+language-servers = [ "jdtls" ]
736802indent = { tab-width = 4, unit = " " }
737803
738804[[grammar]]
@@ -773,7 +839,7 @@ file-types = ["ml"]
773839shebangs = []
774840roots = []
775841comment-token = "(**)"
776−language-server = { command = "ocamllsp" }
842+language-servers = [ "ocamllsp" ]
777843indent = { tab-width = 2, unit = " " }
778844
779845[language.auto-pairs]
@@ -794,7 +860,7 @@ file-types = ["mli"]
794860shebangs = []
795861roots = []
796862comment-token = "(**)"
797−language-server = { command = "ocamllsp" }
863+language-servers = [ "ocamllsp" ]
798864indent = { tab-width = 2, unit = " " }
799865
800866[language.auto-pairs]
@@ -817,15 +883,7 @@ shebangs = ["lua"]
817883roots = [".luarc.json", ".luacheckrc", ".stylua.toml", "selene.toml", ".git"]
818884comment-token = "--"
819885indent = { 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
886+language-servers = [ "lua-language-server" ]
829887
830888[[grammar]]
831889name = "lua"
@@ -838,7 +896,7 @@ injection-regex = "svelte"
838896file-types = ["svelte"]
839897roots = []
840898indent = { tab-width = 2, unit = " " }
841−language-server = { command = "svelteserver", args = ["--stdio"] }
899+language-servers = [ "svelteserver" ]
842900
843901[[grammar]]
844902name = "svelte"
@@ -851,7 +909,7 @@ injection-regex = "vue"
851909file-types = ["vue"]
852910roots = ["package.json", "vue.config.js"]
853911indent = { tab-width = 2, unit = " " }
854−language-server = { command = "vls" }
912+language-servers = [ "vuels" ]
855913
856914[[grammar]]
857915name = "vue"
@@ -864,7 +922,7 @@ file-types = ["yml", "yaml"]
864922roots = []
865923comment-token = "#"
866924indent = { tab-width = 2, unit = " " }
867−language-server = { command = "yaml-language-server", args = ["--stdio"] }
925+language-servers = [ "yaml-language-server" ]
868926injection-regex = "yml|yaml"
869927
870928[[grammar]]
@@ -878,7 +936,7 @@ injection-regex = "haskell"
878936file-types = ["hs", "hs-boot"]
879937roots = ["Setup.hs", "stack.yaml", "cabal.project"]
880938comment-token = "--"
881−language-server = { command = "haskell-language-server-wrapper", args = ["--lsp"] }
939+language-servers = [ "haskell-language-server" ]
882940indent = { tab-width = 2, unit = " " }
883941
884942[[grammar]]
@@ -892,7 +950,7 @@ injection-regex = "purescript"
892950file-types = ["purs"]
893951roots = ["spago.dhall", "bower.json"]
894952comment-token = "--"
895−language-server = { command = "purescript-language-server", args = ["--stdio"] }
953+language-servers = [ "purescript-language-server" ]
896954indent = { tab-width = 2, unit = " " }
897955auto-format = true
898956formatter = { command = "purs-tidy", args = ["format"] }
@@ -906,7 +964,7 @@ file-types = ["zig"]
906964roots = ["build.zig"]
907965auto-format = true
908966comment-token = "//"
909−language-server = { command = "zls" }
967+language-servers = [ "zls" ]
910968indent = { tab-width = 4, unit = " " }
911969formatter = { command = "zig" , args = ["fmt", "--stdin"] }
912970
@@ -944,10 +1002,7 @@ roots = []
9441002file-types = ["pl", "prolog"]
9451003shebangs = ["swipl"]
9461004comment-token = "%"
947−language-server = { command = "swipl", args = [
948− "-g", "use_module(library(lsp_server))",
949− "-g", "lsp_server:main",
950− "-t", "halt", "--", "stdio"] }
1005+language-servers = [ "swipl" ]
9511006
9521007[[language]]
9531008name = "tsq"
@@ -969,7 +1024,7 @@ file-types = ["cmake", "CMakeLists.txt"]
9691024roots = []
9701025comment-token = "#"
9711026indent = { tab-width = 2, unit = " " }
972−language-server = { command = "cmake-language-server" }
1027+language-servers = [ "cmake-language-server" ]
9731028injection-regex = "cmake"
9741029
9751030[[grammar]]
@@ -1009,7 +1064,7 @@ file-types = ["pl", "pm", "t"]
10091064shebangs = ["perl"]
10101065roots = []
10111066comment-token = "#"
1012−language-server = { command = "perlnavigator", args= ["--stdio"] }
1067+language-servers = [ "perlnavigator" ]
10131068indent = { tab-width = 2, unit = " " }
10141069
10151070[[grammar]]
@@ -1023,7 +1078,7 @@ roots = []
10231078file-types = ["rkt", "rktd", "rktl", "scrbl"]
10241079shebangs = ["racket"]
10251080comment-token = ";"
1026−language-server = { command = "racket", args = ["-l", "racket-langserver"] }
1081+language-servers = [ "racket" ]
10271082grammar = "scheme"
10281083
10291084[[language]]
@@ -1034,7 +1089,7 @@ file-types = ["lisp", "asd", "cl", "l", "lsp", "ny", "podsl", "sexp"]
10341089shebangs = ["lisp", "sbcl", "ccl", "clisp", "ecl"]
10351090comment-token = ";"
10361091indent = { tab-width = 2, unit = " " }
1037−language-server = { command = "cl-lsp", args = [ "stdio" ] }
1092+language-servers = [ "cl-lsp" ]
10381093grammar = "scheme"
10391094
10401095[language.auto-pairs]
@@ -1060,7 +1115,7 @@ scope = "source.wgsl"
10601115file-types = ["wgsl"]
10611116roots = []
10621117comment-token = "//"
1063−language-server = { command = "wgsl_analyzer" }
1118+language-servers = [ "wgsl_analyzer" ]
10641119indent = { tab-width = 4, unit = " " }
10651120
10661121[[grammar]]
@@ -1123,7 +1178,7 @@ scope = "source.md"
11231178injection-regex = "md|markdown"
11241179file-types = ["md", "markdown", "PULLREQ_EDITMSG"]
11251180roots = [".marksman.toml"]
1126−language-server = { command = "marksman", args=["server"] }
1181+language-servers = [ "marksman" ]
11271182indent = { tab-width = 2, unit = " " }
11281183
11291184[[grammar]]
@@ -1149,7 +1204,7 @@ file-types = ["dart"]
11491204roots = ["pubspec.yaml"]
11501205auto-format = true
11511206comment-token = "//"
1152−language-server = { command = "dart", args = ["language-server", "--client-id=helix"] }
1207+language-servers = [ "dart" ]
11531208indent = { tab-width = 2, unit = " " }
11541209
11551210[[grammar]]
@@ -1163,8 +1218,7 @@ roots = ["build.sbt", "build.sc", "build.gradle", "build.gradle.kts", "pom.xml",
11631218file-types = ["scala", "sbt", "sc"]
11641219comment-token = "//"
11651220indent = { tab-width = 2, unit = " " }
1166−language-server = { command = "metals" }
1167−config = { "isHttpEnabled" = true }
1221+language-servers = [ "metals" ]
11681222
11691223[[grammar]]
11701224name = "scala"
@@ -1178,7 +1232,7 @@ roots = ["Dockerfile", "Containerfile"]
11781232file-types = ["Dockerfile", "dockerfile", "Containerfile", "containerfile"]
11791233comment-token = "#"
11801234indent = { tab-width = 2, unit = " " }
1181−language-server = { command = "docker-langserver", args = ["--stdio"] }
1235+language-servers = [ "docker-langserver" ]
11821236
11831237[[grammar]]
11841238name = "dockerfile"
@@ -1218,7 +1272,7 @@ roots = []
12181272file-types = ["git-rebase-todo"]
12191273injection-regex = "git-rebase"
12201274comment-token = "#"
1221−indent = { tab-width = 2, unit = " " }
1275+indent = { tab-width = 2, unit = "y" }
12221276
12231277[[grammar]]
12241278name = "git-rebase"
@@ -1294,7 +1348,7 @@ file-types = ["elm"]
12941348roots = ["elm.json"]
12951349auto-format = true
12961350comment-token = "--"
1297−language-server = { command = "elm-language-server" }
1351+language-servers = [ "elm-language-server" ]
12981352indent = { tab-width = 4, unit = " " }
12991353
13001354[[grammar]]
@@ -1320,7 +1374,7 @@ file-types = ["res"]
13201374roots = ["bsconfig.json"]
13211375auto-format = true
13221376comment-token = "//"
1323−language-server = { command = "rescript-language-server", args = ["--stdio"] }
1377+language-servers = [ "rescript-language-server" ]
13241378indent = { tab-width = 2, unit = " " }
13251379
13261380[[grammar]]
@@ -1336,7 +1390,7 @@ roots = ["rebar.config"]
13361390shebangs = ["escript"]
13371391comment-token = "%%"
13381392indent = { tab-width = 4, unit = " " }
1339−language-server = { command = "erlang_ls" }
1393+language-servers = [ "erlang-ls" ]
13401394
13411395[language.auto-pairs]
13421396'(' = ')'
@@ -1357,7 +1411,7 @@ file-types = ["kt", "kts"]
13571411roots = ["settings.gradle", "settings.gradle.kts"]
13581412comment-token = "//"
13591413indent = { tab-width = 4, unit = " " }
1360−language-server = { command = "kotlin-language-server" }
1414+language-servers = [ "kotlin-language-server" ]
13611415
13621416[[grammar]]
13631417name = "kotlin"
@@ -1367,11 +1421,12 @@ source = { git = "https://github.com/fwcd/tree-sitter-kotlin", rev = "a4f71eb9b8
13671421name = "hcl"
13681422scope = "source.hcl"
13691423injection-regex = "(hcl|tf|nomad)"
1424+language-id = "terraform"
13701425file-types = ["hcl", "tf", "nomad"]
13711426roots = []
13721427comment-token = "#"
13731428indent = { tab-width = 2, unit = " " }
1374−language-server = { command = "terraform-ls", args = ["serve"], language-id = "terraform" }
1429+language-servers = [ "terraform-ls" ]
13751430auto-format = true
13761431
13771432[[grammar]]
@@ -1381,11 +1436,12 @@ source = { git = "https://github.com/MichaHoffmann/tree-sitter-hcl", rev = "3cb7
13811436[[language]]
13821437name = "tfvars"
13831438scope = "source.tfvars"
1439+language-id = "terraform-vars"
13841440file-types = ["tfvars"]
13851441roots = []
13861442comment-token = "#"
13871443indent = { tab-width = 2, unit = " " }
1388−language-server = { command = "terraform-ls", args = ["serve"], language-id = "terraform-vars" }
1444+language-servers = [ "terraform-ls" ]
13891445auto-format = true
13901446grammar = "hcl"
13911447
@@ -1409,7 +1465,7 @@ file-types = ["sol"]
14091465roots = []
14101466comment-token = "//"
14111467indent = { tab-width = 4, unit = " " }
1412−language-server = { command = "solc", args = ["--lsp"] }
1468+language-servers = [ "solc" ]
14131469
14141470[[grammar]]
14151471name = "solidity"
@@ -1423,7 +1479,7 @@ file-types = ["gleam"]
14231479roots = ["gleam.toml"]
14241480comment-token = "//"
14251481indent = { tab-width = 2, unit = " " }
1426−language-server = { command = "gleam", args = ["lsp"] }
1482+language-servers = [ "gleam" ]
14271483
14281484[[grammar]]
14291485name = "gleam"
@@ -1447,7 +1503,7 @@ file-types = ["robot", "resource"]
14471503comment-token = "#"
14481504roots = []
14491505indent = { tab-width = 4, unit = " " }
1450−language-server = { command = "robotframework_ls" }
1506+language-servers = [ "robotframework_ls" ]
14511507
14521508[[grammar]]
14531509name = "robot"
@@ -1462,7 +1518,7 @@ shebangs = ["r", "R"]
14621518roots = []
14631519comment-token = "#"
14641520indent = { tab-width = 2, unit = " " }
1465−language-server = { command = "R", args = ["--no-echo", "-e", "languageserver::run()"] }
1521+language-servers = [ "r" ]
14661522
14671523[[grammar]]
14681524name = "r"
@@ -1476,7 +1532,7 @@ file-types = ["rmd", "Rmd"]
14761532roots = []
14771533indent = { tab-width = 2, unit = " " }
14781534grammar = "markdown"
1479−language-server = { command = "R", args = ["--slave", "-e", "languageserver::run()"] }
1535+language-servers = [ "r" ]
14801536
14811537[[language]]
14821538name = "swift"
@@ -1486,7 +1542,7 @@ file-types = ["swift"]
14861542roots = [ "Package.swift" ]
14871543comment-token = "//"
14881544auto-format = true
1489−language-server = { command = "sourcekit-lsp" }
1545+language-servers = [ "sourcekit-lsp" ]
14901546
14911547[[grammar]]
14921548name = "swift"
@@ -1533,8 +1589,7 @@ injection-regex = "heex"
15331589file-types = ["heex"]
15341590roots = ["mix.exs", "mix.lock"]
15351591indent = { tab-width = 2, unit = " " }
1536−language-server = { command = "elixir-ls" }
1537−config = { elixirLS.dialyzerEnabled = false }
1592+language-servers = [ "elixir-ls" ]
15381593
15391594[[grammar]]
15401595name = "heex"
@@ -1605,7 +1660,7 @@ file-types = ["vala", "vapi"]
16051660roots = []
16061661comment-token = "//"
16071662indent = { tab-width = 2, unit = " " }
1608−language-server = { command = "vala-language-server" }
1663+language-servers = [ "vala-language-server" ]
16091664
16101665[[grammar]]
16111666name = "vala"
@@ -1670,7 +1725,7 @@ auto-format = false
16701725scope = "source.odin"
16711726file-types = ["odin"]
16721727roots = ["ols.json"]
1673−language-server = { command = "ols", args = [] }
1728+language-servers = [ "ols" ]
16741729comment-token = "//"
16751730indent = { tab-width = 4, unit = "\t" }
16761731
@@ -1721,7 +1776,7 @@ scope = "source.v"
17211776file-types = ["v", "vv", "vsh"]
17221777shebangs = ["v run"]
17231778roots = ["v.mod"]
1724−language-server = { command = "v", args = ["ls"] }
1779+language-servers = [ "vlang-language-server" ]
17251780auto-format = true
17261781comment-token = "//"
17271782indent = { tab-width = 4, unit = "\t" }
@@ -1736,7 +1791,7 @@ scope = "source.verilog"
17361791file-types = ["v", "vh", "sv", "svh"]
17371792roots = []
17381793comment-token = "//"
1739−language-server = { command = "svlangserver", args = [] }
1794+language-servers = [ "svlangserver" ]
17401795indent = { tab-width = 2, unit = " " }
17411796injection-regex = "verilog"
17421797
@@ -1775,7 +1830,7 @@ injection-regex = "openscad"
17751830file-types = ["scad"]
17761831roots = []
17771832comment-token = "//"
1778−language-server = { command = "openscad-lsp", args = ["--stdio"] }
1833+language-servers = [ "openscad-lsp" ]
17791834indent = { tab-width = 2, unit = "\t" }
17801835
17811836[[grammar]]
@@ -1789,7 +1844,7 @@ injection-regex = "prisma"
17891844file-types = ["prisma"]
17901845roots = ["package.json"]
17911846comment-token = "//"
1792−language-server = { command = "prisma-language-server", args = ["--stdio"] }
1847+language-servers = [ "prisma-language-server" ]
17931848indent = { tab-width = 2, unit = " " }
17941849
17951850[[grammar]]
@@ -1803,7 +1858,7 @@ injection-regex = "(clojure|clj|edn|boot)"
18031858file-types = ["clj", "cljs", "cljc", "clje", "cljr", "cljx", "edn", "boot"]
18041859roots = ["project.clj", "build.boot", "deps.edn", "shadow-cljs.edn"]
18051860comment-token = ";"
1806−language-server = { command = "clojure-lsp" }
1861+language-servers = [ "clojure-lsp" ]
18071862indent = { tab-width = 2, unit = " " }
18081863
18091864[[grammar]]
@@ -1827,7 +1882,7 @@ file-types = ["elv"]
18271882roots = []
18281883comment-token = "#"
18291884indent = { tab-width = 2, unit = " " }
1830−language-server = { command = "elvish", args = ["-lsp"] }
1885+language-servers = [ "elvish" ]
18311886grammar = "elvish"
18321887
18331888[[grammar]]
@@ -1843,7 +1898,7 @@ shebangs = []
18431898roots = []
18441899comment-token = "--"
18451900indent = { tab-width = 2, unit = " " }
1846−language-server = { command = "idris2-lsp" }
1901+language-servers = [ "idris2-lsp" ]
18471902
18481903[[language]]
18491904name = "fortran"
@@ -1853,7 +1908,7 @@ file-types = ["f", "for", "f90", "f95", "f03"]
18531908roots = ["fpm.toml"]
18541909comment-token = "!"
18551910indent = { tab-width = 4, unit = " "}
1856−language-server = { command = "fortls", args = ["--lowercase_intrinsics"] }
1911+language-servers = [ "fortls" ]
18571912
18581913[[grammar]]
18591914name = "fortran"
@@ -1880,7 +1935,7 @@ file-types = ["dot"]
18801935roots = []
18811936comment-token = "//"
18821937indent = { tab-width = 4, unit = " " }
1883−language-server = { command = "dot-language-server", args = ["--stdio"] }
1938+language-servers = [ "dot-language-server" ]
18841939
18851940[[grammar]]
18861941name = "dot"
@@ -1894,7 +1949,7 @@ file-types = ["cue"]
18941949roots = ["cue.mod"]
18951950auto-format = true
18961951comment-token = "//"
1897−language-server = { command = "cuelsp" }
1952+language-servers = [ "cuelsp" ]
18981953indent = { tab-width = 4, unit = "\t" }
18991954formatter = { command = "cue", args = ["fmt", "-"] }
19001955
@@ -1910,7 +1965,7 @@ file-types = ["slint"]
19101965roots = []
19111966comment-token = "//"
19121967indent = { tab-width = 4, unit = " " }
1913−language-server = { command = "slint-lsp", args = [] }
1968+language-servers = [ "slint-lsp" ]
19141969
19151970[[grammar]]
19161971name = "slint"
@@ -1962,7 +2017,7 @@ file-types = ["pas", "pp", "inc", "lpr", "lfm"]
19622017roots = []
19632018comment-token = "//"
19642019indent = { tab-width = 2, unit = " " }
1965−language-server = { command = "pasls", args = [] }
2020+language-servers = [ "pasls" ]
19662021
19672022[[grammar]]
19682023name = "pascal"
@@ -1987,7 +2042,7 @@ file-types = ["libsonnet", "jsonnet"]
19872042roots = ["jsonnetfile.json"]
19882043comment-token = "//"
19892044indent = { tab-width = 2, unit = " " }
1990−language-server = { command = "jsonnet-language-server", args= ["-t", "--lint"] }
2045+language-servers = [ "jsonnet-language-server" ]
19912046
19922047[[grammar]]
19932048name = "jsonnet"
@@ -2013,7 +2068,7 @@ file-types = ["bass"]
20132068roots = []
20142069comment-token = ";"
20152070indent = { tab-width = 2, unit = " " }
2016−language-server = { command = "bass", args = ["--lsp"] }
2071+language-servers = [ "bass" ]
20172072
20182073[[grammar]]
20192074name = "bass"
@@ -2049,7 +2104,7 @@ roots = []
20492104comment-token = "//"
20502105injection-regex = "d"
20512106indent = { tab-width = 4, unit = " "}
2052−language-server = { command = "serve-d" }
2107+language-servers = [ "serve-d" ]
20532108formatter = { command = "dfmt" }
20542109
20552110[[grammar]]
@@ -2173,7 +2228,7 @@ roots = []
21732228auto-format = true
21742229comment-token = "//"
21752230indent = { tab-width = 2, unit = " "}
2176−language-server = { command = "bicep-langserver" }
2231+language-servers = [ "bicep-langserver" ]
21772232
21782233[[grammar]]
21792234name = "bicep"
@@ -2184,7 +2239,7 @@ name = "qml"
21842239scope = "source.qml"
21852240file-types = ["qml"]
21862241roots = []
2187−language-server = { command = "qmlls" }
2242+language-servers = [ "qmlls" ]
21882243indent = { tab-width = 4, unit = " " }
21892244grammar = "qmljs"
21902245
@@ -2239,7 +2294,7 @@ file-types = ["dhall"]
22392294roots = []
22402295comment-token = "--"
22412296indent = { tab-width = 2, unit = " " }
2242−language-server = { command = "dhall-lsp-server" }
2297+language-servers = [ "dhall-lsp-server" ]
22432298formatter = { command = "dhall" , args = ["format"] }
22442299
22452300[[grammar]]
@@ -2401,7 +2456,7 @@ file-types = ["smithy"]
24012456roots = ["smithy-build.json"]
24022457comment-token = "//"
24032458indent = { tab-width = 4, unit = " " }
2404−language-server = { command = "cs", args = ["launch", "--contrib", "smithy-language-server", "--", "0"] }
2459+language-servers = [ "cs" ]
24052460
24062461[[grammar]]
24072462name = "smithy"
@@ -2413,7 +2468,7 @@ scope = "source.vhdl"
24132468file-types = ["vhd", "vhdl"]
24142469roots = []
24152470comment-token = "--"
2416−language-server = { command = "vhdl_ls", args = [] }
2471+language-servers = [ "vhdl_ls" ]
24172472indent = { tab-width = 2, unit = " " }
24182473injection-regex = "vhdl"
24192474
@@ -2429,7 +2484,7 @@ injection-regex = "rego"
24292484file-types = ["rego"]
24302485auto-format = true
24312486comment-token = "#"
2432−language-server = { command = "regols" }
2487+language-servers = [ "regols" ]
24332488grammar = "rego"
24342489
24352490[[grammar]]
@@ -2445,7 +2500,7 @@ shebangs = []
24452500roots = []
24462501comment-token = "#"
24472502indent = { tab-width = 2, unit = " " }
2448−language-server = { command = "nimlangserver" }
2503+language-servers = [ "nimlangserver" ]
24492504
24502505[language.auto-pairs]
24512506'(' = ')'
@@ -2485,7 +2540,7 @@ name = "markdoc"
24852540scope = "text.markdoc"
24862541roots = []
24872542file-types = ["mdoc"]
2488−language-server = { command = "markdoc-ls", args = ["--stdio"] }
2543+language-servers = [ "markdoc-ls" ]
24892544
24902545[[grammar]]
24912546name = "markdoc"
@@ -2498,7 +2553,7 @@ injection-regex = "(cl|opencl)"
24982553file-types = ["cl"]
24992554roots = []
25002555comment-token = "//"
2501−language-server = { command = "clangd" }
2556+language-servers = [ "clangd" ]
25022557
25032558[[grammar]]
25042559name = "opencl"