This repository has been archived on 2024-10-22. You can view files and clone it, but cannot push or open issues or pull requests.
spacemacs/layers/+lang/erlang/README.org
Carlos Ferney Clavijo Rendón a99b527056
[erlang] add DAP support through erlang_ls-dap (#14996)
* [erlang] add DAP support through erlang_ls-dap
2021-08-20 03:15:41 +00:00

140 lines
4.8 KiB
Org Mode

#+TITLE: Erlang layer
#+TAGS: general|layer|multi-paradigm|programming
[[file:img/erlang.png]]
* Table of Contents :TOC_5_gh:noexport:
- [[#description][Description]]
- [[#features][Features:]]
- [[#install][Install]]
- [[#layer][Layer]]
- [[#choosing-a-backend][Choosing a backend]]
- [[#configuration][Configuration]]
- [[#erlang-mode][erlang-mode]]
- [[#lsp][LSP]]
- [[#debugger][Debugger]]
- [[#key-bindings][Key bindings]]
- [[#erlang-mode-1][erlang-mode]]
- [[#lsp-1][LSP]]
- [[#dap][DAP]]
* Description
This layer adds support for [[https://erlang.org/][Erlang]].
Enabling [[https://github.com/emacs-lsp/lsp-mode][Lsp-mode]] brings IDE like
features following =Language Server Protocol=, through [[https://erlang-ls.github.io/][erlang_ls]]
** Features:
- Syntax highlighting
- Syntax checking via =Flycheck= integration
- Auto-completion via =Company= integration
- Code Completion
- Go To Definition
- Go To Implementation for OTP Behaviours
- Signature Suggestions
- Compiler Diagnostics
- [[https://erlang.org/doc/man/dialyzer.html][Dialyzer]] Diagnostics
- [[https://github.com/inaka/elvis][Elvis]] Diagnostics
- [[http://erlang.org/doc/apps/edoc/chapter.html][Edoc]]
- Navigation for Included Files
- Find/Peek References
- Outline
- Workspace Symbols
- Code Folding
- Interactive debugger using [[https://github.com/emacs-lsp/dap-mode][dap-mode]]
* Install
** Layer
To use this configuration layer, add it to your =~/.spacemacs=. You will need to
add =erlang= to the existing =dotspacemacs-configuration-layers= list in this
file.
** Choosing a backend
=company-erlang= uses gtags to provide a very basic working environment, it is
the default backend.
You can improve the IDE-like experience by choosing the =lsp= backend, to do so,
first add the =lsp= layer to =dotspacemacs-configuration-layers=, then, set the
layer variable =erlang-backend=:
#+BEGIN_SRC elisp
(erlang :variables erlang-backend 'lsp)
#+END_SRC
Alternatively the =lsp= backend will be automatically chosen if the layer =lsp=
is used and you did not specify any value for =erlang-backend=.
* Configuration
** erlang-mode
To find the manual page for the function under the cursor you can either set
=erlang-man-root-dir= to erlang man root directory path in the layer definition:
#+BEGIN_SRC elisp
(erlang :variables erlang-man-root-dir "*path_to_folder*/otp_22/lib/erlang/man")
#+END_SRC
or let =erlang-mode= download it by executing ~M-x erlang-man-download-ask~.
** LSP
The =lsp= backend uses [[https://erlang-ls.github.io/][erlang_ls]] as its language server implementation.
Clone the project to your system and compile it:
#+BEGIN_SRC bash
make
#+END_SRC
*Note:* Ensure you have =erlang_ls= in your =PATH=...
You can install it:
#+BEGIN_SRC bash
make install
#+END_SRC
** Debugger
The =dap= backend uses [[https://erlang-ls.github.io/][erlang_ls-dap]] implementation. Information about configuring
a project to use the debugger can be found [[https://erlang-ls.github.io/articles/tutorial-debugger/][here]].
If you are using =erlang_ls= backend, probably you have =els_dap= already
installed, otherwise, follow the instructions.
Clone the project to your system and compile it to produce the =els_dap= escript:
#+BEGIN_SRC bash
rebar3 as dap escriptize
#+END_SRC
or
#+BEGIN_SRC bash
make
#+END_SRC
=els_dap= will be found at "erlang_ls/_build/dap/bin/"
*Note:* Ensure you have =els_dap= in your =PATH=...
* Key bindings
** erlang-mode
| Key binding | Description |
|-------------+-----------------------------------------------------------------|
| ~C-c C-a~ | Align arrows ("->") |
| ~C-c C-c~ | Comment region |
| ~C-c C-d~ | Display function manual at point |
| ~C-c C-j~ | Generate a new clause |
| ~C-c C-q~ | Indent function |
| ~C-c C-u~ | Uncomment region |
| ~C-c C-y~ | Insert, at the point, the argument list of the previous clause. |
| ~C-c C-z~ | Display the erlang-shell or start a new |
| ~C-c M-a~ | Move backward to previous start of clause. |
| ~C-c M-e~ | Move to the end of the current clause. |
| ~C-c M-h~ | Put mark at end of clause, point at beginning. |
** LSP
You will find an overview of all the key bindings on the [[https://github.com/syl20bnr/spacemacs/tree/develop/layers/%2Btools/lsp#key-bindings][lsp layer description]].
** DAP
You will find an overview of all the key bindings on the [[https://github.com/syl20bnr/spacemacs/tree/develop/layers/%2Btools/dap#key-bindings][dap layer description]].