#+title: Emacs as an IDE
#+date: "2021-05-09 17:28:23 +08:00"
#+date_modified: "2021-05-09 17:28:51 +08:00"
#+language: en


The development of Visual Studio Code has led to several improvements that benefitted all editors for implementing IDE-like features: [[https://github.com/Microsoft/debug-adapter-protocol][Debug Adapter Protocol]] (DAP) and [[https://microsoft.github.io/language-server-protocol/][Language Server Protocol]] (LSP).


* Language server protocol

The community of Emacs was able to [[https://emacs-lsp.github.io/lsp-mode/][integrate the protocol]] enabling IDE features to be possible (e.g., autocompletion, Intellisense).
Setting up LSP consists of installing the [[https://microsoft.github.io/language-server-protocol/implementors/servers/][language server for a specific language]] and hoping for the best if a community member has implemented LSP support for that language and the editor of choice.

On Emacs, you simply have to do these things:

- Install ~lsp-mode~ (or enable [[https://github.com/hlissner/doom-emacs/tree/develop/modules/tools/lsp][~tools/lsp~]] built-in module if you're using Doom Emacs).
- Install the language server of the language/tool before enabling ~lsp-mode~.
- If the support for the LSP support package for a specific language, enable it (or configure it in your module).

While certain language servers can be automatically installed with ~lsp-mode~, it is better to be explicitly installed from the environment.
Nix/Guix environments should be a good application here.

If you're enabling ~lsp-mode~, there is a chance of encountering an error telling that the current project is not a workspace or something similar.
You can bypass it by either setting the folder as a workspace with ~lsp-workspace-folders-add~ or running ~lsp~ which will run on a single file [fn:: If running ~lsp~ does not work, then you have to add the residing folder in the workspace list.].




* Debug Adapter Protocol

The same community of ~lsp-mode~ has gathered together to implement DAP as well.

Setting up DAP is mostly similar to setting up LSP: installing a [[https://microsoft.github.io/debug-adapter-protocol/implementors/adapters/][debug adapter server for a language]] and hoping for the best if a community member has implemented DAP support for that language and the editor of choice.

On Emacs, you have to do the following:

- Install ~dap-mode~ (or add a ~+dap~ feature to ~tools/lsp~ if you're using Doom Emacs).
- Install the language server of the language/tool before starting up DAP on Emacs.
- Create a debugging template with ~dap-debug~ or ~dap-debug-edit-template~ which will let you edit the template before running.
- Do the usual debugging stuff (e.g., adding a breakpoint).
- Celebrate in joy as you're one step closer to an Emacs IDE-lite.
