doomemacs/modules/tools/lsp
Henrik Lissner cf2663ab7b
Bump *
bbatsov/projectile@bbcf781 -> bbatsov/projectile@46d2010
domtronn/all-the-icons.el@ed8e44d -> domtronn/all-the-icons.el@8c02280
emacsmirror/straight@fc077dd -> emacsmirror/straight@0c7c757
justbur/emacs-which-key@3642c11 -> justbur/emacs-which-key@e48e190
jwiegley/use-package@7d92536 -> jwiegley/use-package@4fb1f9a
purcell/ns-auto-titlebar@1efc30d -> purcell/ns-auto-titlebar@60273e7

+ :app
  - :app calendar
    kidd/org-gcal.el@7445058 -> kidd/org-gcal.el@2cad2d8
  - :app irc
    jorgenschaefer/circe@e5bf5f8 -> jorgenschaefer/circe@89aac22
  - :app rss
    skeeto/elfeed@d0405e6 -> skeeto/elfeed@8fb09ad
  - :app twitter
    abo-abo/avy@509471b -> abo-abo/avy@bbf1e73
+ :completion
  - :completion company
    company-mode/company-mode@5eb7d86 -> company-mode/company-mode@54f60ef
    sebastiencs/company-box@889d723 -> sebastiencs/company-box@20384f0
  - :completion helm
    emacs-helm/helm@5d224cb -> emacs-helm/helm@e9a1e53
    tumashu/posframe@922e4d2 -> tumashu/posframe@7b92a54
  - :completion ivy
    abo-abo/swiper@c6b60d3 -> abo-abo/swiper@9bb6841
    raxod502/prescient.el@b11d79b -> raxod502/prescient.el@cc289ba
    snyball/ivy-posframe@4474956 -> snyball/ivy-posframe@82a63ae
+ :checkers
  - :checkers syntax
    alexmurray/flycheck-posframe@2b3e94c -> alexmurray/flycheck-posframe@c928b5b
+ :editor
  - :editor evil
    emacs-evil/evil@2bc6ca3 -> emacs-evil/evil@1e7aa5b
    emacs-evil/evil-collection@3e62b6b -> emacs-evil/evil-collection@c136589
  - :editor fold
    seregaxvm/vimish-fold@6368523 -> seregaxvm/vimish-fold@9d12e39
  - :editor god
    emacsorphanage/god-mode@1eb6ef3 -> emacsorphanage/god-mode@ad2e674
  - :editor lispy
    abo-abo/lispy@cdaa9c7 -> abo-abo/lispy@0a9dcfd
    noctuid/lispyville@25a7012 -> noctuid/lispyville@0f13f26
  - :editor objed
    clemera/objed@e89d8da -> clemera/objed@dea5a64
  - :editor snippets
    joaotavora/yasnippet@5b1217a -> joaotavora/yasnippet@5cbdbf0
    hlissner/doom-snippets@21b7c8d -> hlissner/doom-snippets@60c57d6
  - :editor word-wrap
    emacs-straight/adaptive-wrap@1810c0e -> emacs-straight/adaptive-wrap@319db64
+ :emacs
  - :emacs dired
    purcell/diredfl@83567d0 -> purcell/diredfl@cd052df
  - :emacs ibuffer
    purcell/ibuffer-projectile@504b0ed -> purcell/ibuffer-projectile@ecbe482
    purcell/ibuffer-vc@1249c1e -> purcell/ibuffer-vc@5fa6aea
  - :emacs undo
    emacs-straight/undo-tree@5b6df03 -> emacs-straight/undo-tree@7523823
    ideasman42/emacs-undo-fu@46de023 -> ideasman42/emacs-undo-fu@c0806c1
  - :emacs vc
    magit/magit@d459e52 -> magit/magit@321214c
    pidu/git-timemachine@391eb61 -> pidu/git-timemachine@8d67575
+ :email
  + :email notmuch
    https://git.notmuchmail.org/git/notmuch@ad9c2e9 -> https://git.notmuchmail.org/git/notmuch@8776faf
    org-mime/org-mime@9f84446 -> org-mime/org-mime@9bb6351
  + :email wanderlust
    wanderlust/semi@57a948c -> wanderlust/semi@10897f0
+ :input
  - :input japanese
    skk-dev/ddskk@fe7f82b -> skk-dev/ddskk@275a831
+ :lang
  - :lang agda
    agda/agda@8eb0d01 -> agda/agda@36738c1
  - :lang cc
    Andersbakken/rtags@080cb0e -> Andersbakken/rtags@b57b360
    MaskRay/emacs-ccls@44f1fb3 -> Sarcasm/irony-mode@5f75fc0
    emacsmirror/cmake-mode@bfe85bc -> emacsmirror/cmake-mode@e58c411
  - :lang common-lisp
    joaotavora/sly@becf7b7 -> joaotavora/sly@155cb06
  - :lang coq
    ProofGeneral/PG@0f0bb2c -> ProofGeneral/PG@03e427a
    cpitclaudel/company-coq@7ec8058 -> cpitclaudel/company-coq@b096cb5
  - :lang dart
    emacs-lsp/lsp-dart@a06fc74 -> emacs-lsp/lsp-dart@437c548
  - :lang elixir
    elixir-editors/emacs-elixir@02a3922 -> elixir-editors/emacs-elixir@01b3324
  - :lang elm
    jcollard/elm-mode@7782be0 -> jcollard/elm-mode@363da4b
  - :lang emacs-lisp
    clojure-emacs/cider@9e117c2 -> clojure-emacs/cider@a89b694
    clojure-emacs/clojure-mode@da9f1ec -> clojure-emacs/clojure-mode@84ed16c
    jorgenschaefer/emacs-buttercup@e71a40f -> jorgenschaefer/emacs-buttercup@0e5eae0
    xuchunyang/elisp-demos@4cd55a3 -> xuchunyang/elisp-demos@8c97481
  - :lang erlang
    erlang/otp@3065fbf -> erlang/otp@d9bc785
  - :lang ess
    emacs-ess/ESS@3c2fb63 -> emacs-ess/ESS@1baf8bf
  - :lang fuel
    factor/factor@497d649 -> factor/factor@3fdb032
  - :lang fsharp
    fsharp/emacs-fsharp-mode@8c86e38 -> fsharp/emacs-fsharp-mode@3e41fe1
  - :lang fstar
    FStarLang/fstar-mode.el@aaaf256 -> FStarLang/fstar-mode.el@bd28cb8
  - :lang haskell
    jyp/dante@7411904 -> jyp/dante@c516bc9
  - :lang hy
    hylang/hy-mode@e2d5fec -> hylang/hy-mode@55e84ca
  - :lang idris
    idris-hackers/idris-mode@acc8835 -> idris-hackers/idris-mode@b77eadd
  - :lang java
    mopemope/meghanada-emacs@e119c7b -> mopemope/meghanada-emacs@1e41f7f
  - :lang javascript
    ananthakumaran/tide@13e7af7 -> ananthakumaran/tide@f0b6dac
    emacs-typescript/typescript.el@0fc7297 -> emacs-typescript/typescript.el@42a60e5
    mooz/js2-mode@5049e54 -> mooz/js2-mode@40aab27
  - :lang julia
    JuliaEditorSupport/julia-emacs@1c122f1 -> JuliaEditorSupport/julia-emacs@b5f5983
    tpapp/julia-repl@5fa04de -> tpapp/julia-repl@d073acb
  - :lang kotlin
    Emacs-Kotlin-Mode-Maintainers/kotlin-mode@ab61099 -> Emacs-Kotlin-Mode-Maintainers/kotlin-mode@8e6dd57
  - :lang latex
    emacs-straight/adaptive-wrap@1810c0e -> emacs-straight/adaptive-wrap@319db64
    emacs-straight/auctex@6abf890 -> emacs-straight/auctex@59e251c
    iyefrat/evil-tex@bb01576 -> iyefrat/evil-tex@06234c9
  - :lang lean
    leanprover/lean-mode@65b55b1 -> leanprover/lean-mode@6b43776
  - :lang ledger
    ledger/ledger-mode@7d78645 -> ledger/ledger-mode@805507f
  - :lang markdown
    Fanael/edit-indirect@935ded3 -> Fanael/edit-indirect@bdc8f54
    jrblevin/markdown-mode@fa9fa20 -> jrblevin/markdown-mode@ef2cb4d
    seagle0128/grip-mode@52768a0 -> seagle0128/grip-mode@281ada2
  - :lang nix
    NixOS/nix-mode@a00b3f7 -> NixOS/nix-mode@0cf1ea1
  - :lang ocaml
    ocaml-ppx/ocamlformat@27a49cc -> ocaml-ppx/ocamlformat@cd0eaa8
    ocaml/dune@66cfb3a -> ocaml/dune@daea74e
  - :lang org
    abo-abo/org-download@768716b -> abo-abo/org-download@67b3c74
    bastibe/org-journal@a6378dc -> bastibe/org-journal@a2728e2
    dzop/emacs-jupyter@785edbb -> dzop/emacs-jupyter@360cae2
    emacs-straight/org-mode@a1e5bee -> emacs-straight/org-mode@220f2b0
    hniksic/emacs-htmlize@86f22f2 -> hniksic/emacs-htmlize@4920510
    integral-dw/org-superstar-mode@1748185 -> integral-dw/org-superstar-mode@94f35c2
    oer/org-re-reveal@c548e23 -> oer/org-re-reveal@7fe39d5
    org-roam/company-org-roam@5d7ccd9 -> org-roam/company-org-roam@1132663
    org-roam/org-roam@0aa0a7c -> org-roam/org-roam@c33867e
  - :lang php
    emacs-php/php-mode@4345dfd -> emacs-php/php-mode@f4c7c69
    jwiegley/emacs-async@86aef2c -> jwiegley/emacs-async@36a1015
  - :lang plantuml
    skuro/plantuml-mode@ea45a13 -> skuro/plantuml-mode@5889166
  - :lang python
    cython/cython@0208bf2 -> cython/cython@fcfd16c
    emacs-lsp/lsp-pyright@3cf2e8f -> emacs-lsp/lsp-pyright@9603dda
    emacs-lsp/lsp-python-ms@7a502e6 -> emacs-lsp/lsp-python-ms@a884a9a
    necaris/conda.el@9d02130 -> necaris/conda.el@9f7eea1
    wbolster/emacs-python-pytest@6a3b4e5 -> wbolster/emacs-python-pytest@fc056fa
  - :lang racket
    greghendershott/racket-mode@29afd25 -> greghendershott/racket-mode@c55fd70
  - :lang rest
    pashky/restclient.el@e8ca809 -> pashky/restclient.el@ac8aad6
  - :lang ruby
    nonsequitur/inf-ruby@f3c927c -> nonsequitur/inf-ruby@9f0f79f
  - :lang rust
    brotzeit/rustic@0ec0688 -> brotzeit/rustic@75b9920
  - :lang scala
    emacs-lsp/lsp-metals@3d4d4b7 -> emacs-lsp/lsp-metals@039aa72
    hvesalai/emacs-sbt-mode@633a315 -> hvesalai/emacs-sbt-mode@4358ed8
    hvesalai/emacs-scala-mode@46bb948 -> hvesalai/emacs-scala-mode@1d08e88
  - :lang scheme
    flatwhatson/flycheck-guile@f37b614 -> flatwhatson/flycheck-guile@2940f16
    jaor/geiser@0c86289 -> jaor/geiser@adc5c4a
  - :lang solidity
    ethereum/emacs-solidity@022b315 -> ethereum/emacs-solidity@d166a86
  - :lang swift
    emacs-lsp/lsp-sourcekit@04d75b6 -> emacs-lsp/lsp-sourcekit@130f7a8
    swift-emacs/swift-mode@2ab9ea1 -> swift-emacs/swift-mode@d266fbd
  - :lang web
    fxbois/web-mode@a2badd0 -> fxbois/web-mode@60ffd87
  - :lang yaml
    yoshiki/yaml-mode@cecf4b1 -> yoshiki/yaml-mode@68fecb5
+ :term
  - :term term
    manateelazycat/multi-term@7307ddd -> manateelazycat/multi-term@017c77c
+ :tools
  - :tools ansible
    yoshiki/yaml-mode@34648f2 -> yoshiki/yaml-mode@68fecb5
  - :tools debugger
    emacs-lsp/dap-mode@85a6163 -> emacs-lsp/dap-mode@4b18543
    realgud/realgud@5b0ed08 -> realgud/realgud@332d136
    tumashu/posframe@6d604a7 -> tumashu/posframe@7b92a54
  - :tools docker
    Silex/docker.el@d6233bd -> Silex/docker.el@3773112
  - :tools editorconfig
    editorconfig/editorconfig-emacs@9a73ff7 -> editorconfig/editorconfig-emacs@9bc1343
  - :tools ein
    millejoh/emacs-ipython-notebook@ccbed30 -> millejoh/emacs-ipython-notebook@99a4718
  - :tools lookup
    jacktasia/dumb-jump@b815731 -> jacktasia/dumb-jump@0d74b2f
  - :tools lsp
    emacs-lsp/helm-lsp@5c960e7 -> emacs-lsp/helm-lsp@4263c96
    emacs-lsp/lsp-mode@edb8119 -> emacs-lsp/lsp-mode@4145a70
    emacs-lsp/lsp-ui@1f3e970 -> emacs-lsp/lsp-ui@c39ae37
    joaotavora/eglot@fb6b17e -> joaotavora/eglot@5f873d2
  - :tools magit
    magit/forge@2c48746 -> magit/forge@feee7e2
    magit/magit@798aff5 -> magit/magit@321214c
  - :tools pass
    zx2c4/password-store@07b169e -> zx2c4/password-store@06f4999
  - :tools rgb
    emacs-straight/rainbow-mode@f780ddb -> emacs-straight/rainbow-mode@fdff98b
+ :ui
  - :ui doom
    hlissner/emacs-doom-themes@8a5538e -> hlissner/emacs-doom-themes@24023de
  - :ui fill-column
    laishulu/hl-fill-column@43cb3c3 -> laishulu/hl-fill-column@5782a91
  - :ui hl-todo
    tarsius/hl-todo@3bba459 -> tarsius/hl-todo@0598b98
  - :ui hydra
    abo-abo/hydra@87873d7 -> abo-abo/hydra@112e689
  - :ui indent-guides
    DarthFennec/highlight-indent-guides@1b12c7b -> DarthFennec/highlight-indent-guides@a4f7714
  - :ui modeline
    seagle0128/doom-modeline@881e099 -> seagle0128/doom-modeline@ffbaaee
  - :ui tabs
    ema2159/centaur-tabs@9114ef4 -> ema2159/centaur-tabs@7e0332b
  - :ui treemacs
    Alexander-Miller/treemacs@644e940 -> Alexander-Miller/treemacs@027e03b
  - :ui window-select
    abo-abo/ace-window@7003c88 -> abo-abo/ace-window@c7cb315
2020-08-19 16:18:11 -04:00
..
autoload No-op (lsp) if already enabled #3390 2020-08-02 16:27:09 -04:00
+eglot.el Generalize LSP optimizations to include eglot 2020-08-12 00:34:09 -04:00
+lsp.el Generalize LSP optimizations to include eglot 2020-08-12 00:34:09 -04:00
config.el Generalize LSP optimizations to include eglot 2020-08-12 00:34:09 -04:00
doctor.el
packages.el Bump * 2020-08-19 16:18:11 -04:00
README.org

tools/lsp

Description

This module integrates language servers into Doom Emacs. They provide features you'd expect from IDEs, like code completion, realtime linting, language-aware imenu/xref integration, jump-to-definition/references support, and more.

To get LSP working, you'll need to do three things:

  1. Enable this module,
  2. Install a language server appropriate for your targeted language(s) (you'll find a table mapping languages to available servers in the lsp-mode project README).
  3. Enable the +lsp flag on the :lang modules you want to enable LSP support for. If your language's module doesn't have LSP support, and you know it can (or should), please let us know! In the meantime, you must configure it yourself (described in the Configuration section).

As of this writing, this is the state of LSP support in Doom Emacs:

Module Major modes Default language server
:lang cc c-mode, c++-mode, objc-mode ccls
:lang clojure clojure-mode clojure-lsp
:lang csharp csharp-mode omnisharp
:lang elixir elixir-mode elixir-ls
:lang fsharp fsharp-mode Mono, .NET core
:lang go go-mode go-langserver
:lang haskell haskell-mode haskell-ide-engine
:lang java java-mode lsp-java
:lang javascript js2-mode, rjsx-mode, typescript-mode typescript-language-server
:lang ocaml tuareg-mode ocaml-language-server
:lang php php-mode php-language-server
:lang python python-mode lsp-python-ms
:lang ruby ruby-mode solargraph
:lang rust rust-mode rls
:lang scala scala-mode metals
:lang sh sh-mode bash-language-server
:lang swift swift-mode sourcekit
:lang web web-mode, css-mode, scss-mode, sass-mode, less-css-mode vscode-css-languageserver-bin, vscode-html-languageserver-bin
:lang purescript purescript-mode purescript-language-server

Module Flags

  • +peek Use lsp-ui-peek when looking up definitions and references with functionality from the :tools lookup module.
  • +eglot Use Eglot instead of LSP-mode to implement the LSP client in Emacs.

Hacks

  • lsp-mode has been modified not to automatically install missing LSP servers. This is done to adhere to our "Your system, your rules" mantra, which insist that it is better etiquette to let the user decide when their development environment is modified. Use M-x lsp-install-server to install LSP servers manually.

Prerequisites

This module has no direct prerequisites, but major-modes require you to install language servers.

You'll find a table that lists available language servers and how to install them in the lsp-mode project README. The documentation of the module for your targeted language will contain brief instructions as well.

For eglot users, you can see the list of default servers supported in the README. There is also instructions to add another server easily.

TODO Features

LSP-powered project search

Without the +eglot flag, and when :completion ivy or :completion helm is active, LSP is used to search a symbol indexed by the LSP server :

Keybind Description
SPC c j Jump to symbol in current workspace
SPC c J Jump to symbol in any workspace

Differences between eglot and lsp-mode

Entering the debate about which one to use would be useless. Doom provides an easy way to switch out lsp client implementations so you can test for yourself which one you prefer.

Mainly, from a code point of view, lsp-mode has a lot of custom code for UI (lsp-ui-peek, lsp-ui-sideline, …), while eglot is more barebones with a closer integration with "more basic" emacs packages (eldoc, xref, …).

TODO Configuration

TODO Troubleshooting

My language server is not found

Check the entry in the FAQ about "Doom can't find my executables/doesn't inherit the correct PATH"

LSP/Eglot is not started automatically in my buffer

Make sure that you added the +lsp flag to the language you're using too in your init.el :

:lang
-python
+(python +lsp)