diff options
| -rw-r--r-- | lisp/progmodes/eglot.el | 187 |
1 files changed, 99 insertions, 88 deletions
diff --git a/lisp/progmodes/eglot.el b/lisp/progmodes/eglot.el index f341428cac3..afe3281361d 100644 --- a/lisp/progmodes/eglot.el +++ b/lisp/progmodes/eglot.el | |||
| @@ -226,94 +226,105 @@ automatically)." | |||
| 226 | when probe return (cons probe args) | 226 | when probe return (cons probe args) |
| 227 | finally (funcall err))))))) | 227 | finally (funcall err))))))) |
| 228 | 228 | ||
| 229 | (defvar eglot-server-programs `(((rust-ts-mode rust-mode) . ("rust-analyzer")) | 229 | (defvar eglot-server-programs |
| 230 | ((cmake-mode cmake-ts-mode) . ("cmake-language-server")) | 230 | ;; FIXME: Maybe this info should be distributed into the major modes |
| 231 | (vimrc-mode . ("vim-language-server" "--stdio")) | 231 | ;; themselves where they could set a buffer-local `eglot-server-program' |
| 232 | ((python-mode python-ts-mode) | 232 | ;; instead of keeping this database centralized. |
| 233 | . ,(eglot-alternatives | 233 | ;; FIXME: With `derived-mode-add-parents' in Emacsā„30, some of |
| 234 | '("pylsp" "pyls" ("pyright-langserver" "--stdio") "jedi-language-server" "ruff-lsp"))) | 234 | ;; those entries can be simplified, but we keep them for when |
| 235 | ((js-json-mode json-mode json-ts-mode) | 235 | ;; `eglot.el' is installed via GNU ELPA in an older Emacs. |
| 236 | . ,(eglot-alternatives '(("vscode-json-language-server" "--stdio") | 236 | `(((rust-ts-mode rust-mode) . ("rust-analyzer")) |
| 237 | ("vscode-json-languageserver" "--stdio") | 237 | ((cmake-mode cmake-ts-mode) . ("cmake-language-server")) |
| 238 | ("json-languageserver" "--stdio")))) | 238 | (vimrc-mode . ("vim-language-server" "--stdio")) |
| 239 | (((js-mode :language-id "javascript") | 239 | ((python-mode python-ts-mode) |
| 240 | (js-ts-mode :language-id "javascript") | 240 | . ,(eglot-alternatives |
| 241 | (tsx-ts-mode :language-id "typescriptreact") | 241 | '("pylsp" "pyls" ("pyright-langserver" "--stdio") |
| 242 | (typescript-ts-mode :language-id "typescript") | 242 | "jedi-language-server" "ruff-lsp"))) |
| 243 | (typescript-mode :language-id "typescript")) | 243 | ((js-json-mode json-mode json-ts-mode) |
| 244 | . ("typescript-language-server" "--stdio")) | 244 | . ,(eglot-alternatives '(("vscode-json-language-server" "--stdio") |
| 245 | ((bash-ts-mode sh-mode) . ("bash-language-server" "start")) | 245 | ("vscode-json-languageserver" "--stdio") |
| 246 | ((php-mode phps-mode php-ts-mode) | 246 | ("json-languageserver" "--stdio")))) |
| 247 | . ,(eglot-alternatives | 247 | (((js-mode :language-id "javascript") |
| 248 | '(("phpactor" "language-server") | 248 | (js-ts-mode :language-id "javascript") |
| 249 | ("php" "vendor/felixfbecker/language-server/bin/php-language-server.php")))) | 249 | (tsx-ts-mode :language-id "typescriptreact") |
| 250 | ((c-mode c-ts-mode c++-mode c++-ts-mode objc-mode) | 250 | (typescript-ts-mode :language-id "typescript") |
| 251 | . ,(eglot-alternatives | 251 | (typescript-mode :language-id "typescript")) |
| 252 | '("clangd" "ccls"))) | 252 | . ("typescript-language-server" "--stdio")) |
| 253 | (((caml-mode :language-id "ocaml") | 253 | ((bash-ts-mode sh-mode) . ("bash-language-server" "start")) |
| 254 | (tuareg-mode :language-id "ocaml") reason-mode) | 254 | ((php-mode phps-mode php-ts-mode) |
| 255 | . ("ocamllsp")) | 255 | . ,(eglot-alternatives |
| 256 | ((ruby-mode ruby-ts-mode) | 256 | '(("phpactor" "language-server") |
| 257 | . ("solargraph" "socket" "--port" :autoport)) | 257 | ("php" "vendor/felixfbecker/language-server/bin/php-language-server.php")))) |
| 258 | (haskell-mode | 258 | ((c-mode c-ts-mode c++-mode c++-ts-mode objc-mode) |
| 259 | . ("haskell-language-server-wrapper" "--lsp")) | 259 | . ,(eglot-alternatives |
| 260 | (elm-mode . ("elm-language-server")) | 260 | '("clangd" "ccls"))) |
| 261 | (mint-mode . ("mint" "ls")) | 261 | (((caml-mode :language-id "ocaml") |
| 262 | ((kotlin-mode kotlin-ts-mode) . ("kotlin-language-server")) | 262 | (tuareg-mode :language-id "ocaml") reason-mode) |
| 263 | ((go-mode go-dot-mod-mode go-dot-work-mode go-ts-mode go-mod-ts-mode) | 263 | . ("ocamllsp")) |
| 264 | . ("gopls")) | 264 | ((ruby-mode ruby-ts-mode) |
| 265 | ((R-mode ess-r-mode) . ("R" "--slave" "-e" | 265 | . ("solargraph" "socket" "--port" :autoport)) |
| 266 | "languageserver::run()")) | 266 | (haskell-mode |
| 267 | ((java-mode java-ts-mode) . ("jdtls")) | 267 | . ("haskell-language-server-wrapper" "--lsp")) |
| 268 | ((dart-mode dart-ts-mode) | 268 | (elm-mode . ("elm-language-server")) |
| 269 | . ("dart" "language-server" | 269 | (mint-mode . ("mint" "ls")) |
| 270 | "--client-id" "emacs.eglot-dart")) | 270 | ((kotlin-mode kotlin-ts-mode) . ("kotlin-language-server")) |
| 271 | ((elixir-mode elixir-ts-mode heex-ts-mode) | 271 | ((go-mode go-dot-mod-mode go-dot-work-mode go-ts-mode go-mod-ts-mode) |
| 272 | . ,(if (and (fboundp 'w32-shell-dos-semantics) | 272 | . ("gopls")) |
| 273 | (w32-shell-dos-semantics)) | 273 | ((R-mode ess-r-mode) . ("R" "--slave" "-e" |
| 274 | '("language_server.bat") | 274 | "languageserver::run()")) |
| 275 | (eglot-alternatives | 275 | ((java-mode java-ts-mode) . ("jdtls")) |
| 276 | '("language_server.sh" "start_lexical.sh")))) | 276 | ((dart-mode dart-ts-mode) |
| 277 | (ada-mode . ("ada_language_server")) | 277 | . ("dart" "language-server" |
| 278 | (scala-mode . ,(eglot-alternatives | 278 | "--client-id" "emacs.eglot-dart")) |
| 279 | '("metals" "metals-emacs"))) | 279 | ((elixir-mode elixir-ts-mode heex-ts-mode) |
| 280 | (racket-mode . ("racket" "-l" "racket-langserver")) | 280 | . ,(if (and (fboundp 'w32-shell-dos-semantics) |
| 281 | ((tex-mode context-mode texinfo-mode bibtex-mode) | 281 | (w32-shell-dos-semantics)) |
| 282 | . ,(eglot-alternatives '("digestif" "texlab"))) | 282 | '("language_server.bat") |
| 283 | (erlang-mode . ("erlang_ls" "--transport" "stdio")) | 283 | (eglot-alternatives |
| 284 | ((yaml-ts-mode yaml-mode) . ("yaml-language-server" "--stdio")) | 284 | '("language_server.sh" "start_lexical.sh")))) |
| 285 | (nix-mode . ,(eglot-alternatives '("nil" "rnix-lsp" "nixd"))) | 285 | (ada-mode . ("ada_language_server")) |
| 286 | (nickel-mode . ("nls")) | 286 | (scala-mode . ,(eglot-alternatives |
| 287 | ((nushell-mode nushell-ts-mode) . ("nu" "--lsp")) | 287 | '("metals" "metals-emacs"))) |
| 288 | (gdscript-mode . ("localhost" 6008)) | 288 | (racket-mode . ("racket" "-l" "racket-langserver")) |
| 289 | ((fortran-mode f90-mode) . ("fortls")) | 289 | ((tex-mode context-mode texinfo-mode bibtex-mode) |
| 290 | (futhark-mode . ("futhark" "lsp")) | 290 | . ,(eglot-alternatives '("digestif" "texlab"))) |
| 291 | ((lua-mode lua-ts-mode) . ,(eglot-alternatives | 291 | (erlang-mode . ("erlang_ls" "--transport" "stdio")) |
| 292 | '("lua-language-server" "lua-lsp"))) | 292 | ((yaml-ts-mode yaml-mode) . ("yaml-language-server" "--stdio")) |
| 293 | (zig-mode . ("zls")) | 293 | (nix-mode . ,(eglot-alternatives '("nil" "rnix-lsp" "nixd"))) |
| 294 | ((css-mode css-ts-mode) | 294 | (nickel-mode . ("nls")) |
| 295 | . ,(eglot-alternatives '(("vscode-css-language-server" "--stdio") | 295 | ((nushell-mode nushell-ts-mode) . ("nu" "--lsp")) |
| 296 | ("css-languageserver" "--stdio")))) | 296 | (gdscript-mode . ("localhost" 6008)) |
| 297 | (html-mode . ,(eglot-alternatives '(("vscode-html-language-server" "--stdio") ("html-languageserver" "--stdio")))) | 297 | ((fortran-mode f90-mode) . ("fortls")) |
| 298 | ((dockerfile-mode dockerfile-ts-mode) . ("docker-langserver" "--stdio")) | 298 | (futhark-mode . ("futhark" "lsp")) |
| 299 | ((clojure-mode clojurescript-mode clojurec-mode clojure-ts-mode) | 299 | ((lua-mode lua-ts-mode) . ,(eglot-alternatives |
| 300 | . ("clojure-lsp")) | 300 | '("lua-language-server" "lua-lsp"))) |
| 301 | ((csharp-mode csharp-ts-mode) | 301 | (zig-mode . ("zls")) |
| 302 | . ,(eglot-alternatives | 302 | ((css-mode css-ts-mode) |
| 303 | '(("omnisharp" "-lsp") | 303 | . ,(eglot-alternatives '(("vscode-css-language-server" "--stdio") |
| 304 | ("csharp-ls")))) | 304 | ("css-languageserver" "--stdio")))) |
| 305 | (purescript-mode . ("purescript-language-server" "--stdio")) | 305 | (html-mode . ,(eglot-alternatives |
| 306 | ((perl-mode cperl-mode) . ("perl" "-MPerl::LanguageServer" "-e" "Perl::LanguageServer::run")) | 306 | '(("vscode-html-language-server" "--stdio") |
| 307 | (markdown-mode | 307 | ("html-languageserver" "--stdio")))) |
| 308 | . ,(eglot-alternatives | 308 | ((dockerfile-mode dockerfile-ts-mode) . ("docker-langserver" "--stdio")) |
| 309 | '(("marksman" "server") | 309 | ((clojure-mode clojurescript-mode clojurec-mode clojure-ts-mode) |
| 310 | ("vscode-markdown-language-server" "--stdio")))) | 310 | . ("clojure-lsp")) |
| 311 | (graphviz-dot-mode . ("dot-language-server" "--stdio")) | 311 | ((csharp-mode csharp-ts-mode) |
| 312 | (terraform-mode . ("terraform-ls" "serve")) | 312 | . ,(eglot-alternatives |
| 313 | ((uiua-ts-mode uiua-mode) . ("uiua" "lsp")) | 313 | '(("omnisharp" "-lsp") |
| 314 | (sml-mode | 314 | ("csharp-ls")))) |
| 315 | . ,(lambda (_interactive project) | 315 | (purescript-mode . ("purescript-language-server" "--stdio")) |
| 316 | (list "millet-ls" (project-root project))))) | 316 | ((perl-mode cperl-mode) |
| 317 | . ("perl" "-MPerl::LanguageServer" "-e" "Perl::LanguageServer::run")) | ||
| 318 | (markdown-mode | ||
| 319 | . ,(eglot-alternatives | ||
| 320 | '(("marksman" "server") | ||
| 321 | ("vscode-markdown-language-server" "--stdio")))) | ||
| 322 | (graphviz-dot-mode . ("dot-language-server" "--stdio")) | ||
| 323 | (terraform-mode . ("terraform-ls" "serve")) | ||
| 324 | ((uiua-ts-mode uiua-mode) . ("uiua" "lsp")) | ||
| 325 | (sml-mode | ||
| 326 | . ,(lambda (_interactive project) | ||
| 327 | (list "millet-ls" (project-root project))))) | ||
| 317 | "How the command `eglot' guesses the server to start. | 328 | "How the command `eglot' guesses the server to start. |
| 318 | An association list of (MAJOR-MODE . CONTACT) pairs. MAJOR-MODE | 329 | An association list of (MAJOR-MODE . CONTACT) pairs. MAJOR-MODE |
| 319 | identifies the buffers that are to be managed by a specific | 330 | identifies the buffers that are to be managed by a specific |