#+title:    :lang elixir
#+subtitle: Erlang done right
#+created:  May 24, 2017
#+since:    2.0.3 (#83)

* Description :unfold:
This module provides support for [[https://elixir-lang.org/][Elixir programming language]] via [[https://github.com/elixir-lsp/elixir-ls/][elixir-ls]].

** Maintainers
/This module has no dedicated maintainers./ [[doom-contrib-maintainer:][Become a maintainer?]]

** Module flags
- +lsp ::
  Enable LSP support for ~elixir-mode~. Requires [[doom-module::tools lsp]] and a langserver
  (supports [[https://github.com/elixir-lsp/elixir-ls/][elixir-ls]]).
- +tree-sitter ::
  Leverages tree-sitter for better syntax highlighting and structural text
  editing. Requires [[doom-module::tools tree-sitter]].

** Packages
- [[doom-package:elixir-mode]]
- [[doom-package:exunit]]
- [[doom-package:flycheck-credo]] if [[doom-module::checkers syntax]]

** Hacks
/No hacks documented for this module./

** TODO Changelog
# This section will be machine generated. Don't edit it by hand.
/This module does not have a changelog yet./

* Installation
[[id:01cffea4-3329-45e2-a892-95a384ab2338][Enable this module in your ~doom!~ block.]]

This module requires Elixir. Install it via your distribution's package manager
or a version management tool such as [[https://github.com/asdf-vm/asdf-elixir][asdf]].

To add LSP support, install [[https://github.com/JakeBecker/elixir-ls/][elixir-ls]] and enable [[doom-module::tools lsp]].

To support linting with [[https://github.com/rrrene/credo][credo]], add ~:checkers syntax~ to ~$DOOMDIR/init.el~.

** Install Elixir
(See [[https://elixir-lang.org/install.html]] for other operating systems)

*** With ~asdf~
#+begin_src sh
asdf plugin-add elixir
asdf install elixir 1.9.1
#+end_src

*** Arch Linux
#+begin_src sh
pacman -S elixir
#+end_src

*** Gentoo Linux
#+begin_src sh
emerge -v dev-lang/elixir
#+end_src

*** openSUSE
#+begin_src sh
zypper install elixir
#+end_src

* TODO Usage
#+begin_quote
 󱌣 /This module's usage documentation is incomplete./ [[doom-contrib-module:][Complete it?]]
#+end_quote

- Code completion ([[doom-module::completion company]])
- Documentation lookup ([[doom-module::tools lookup]])
- Mix integration
- Phoenix support
- ~iex~ integration ([[doom-module::tools eval]])
- Syntax checking ([[doom-module::checkers syntax]], using [[doom-package:flycheck-credo]])
- Formatting for elixir files provided by [[doom-module::editor format]].

** exunit-mode
The exunit-mode prefix is [[kbd:][<localleader> t]]. Here is some examples:
| command                                    | key / ex command  | description                                            |
|--------------------------------------------+-------------------+--------------------------------------------------------|
| ~exunit-verify-all~                        | [[kbd:][<localleader> t a]] | Runs exunit on all files                               |
| ~exunit-rerun~                             | [[kbd:][<localleader> t r]] | Re-runs last exunit command                            |
| ~exunit-verify~                            | [[kbd:][<localleader> t v]] | Runs exunit on current file                            |
| ~exunit-verify-single~                     | [[kbd:][<localleader> t s]] | Runs exunit for the item on cursor                     |
| ~exunit-toggle-file-and-test~              | [[kbd:][<localleader> t t]] | Switch between implementation and test                 |
| ~exunit-toggle-file-and-test-other-window~ | [[kbd:][<localleader> t T]] | Switch between implementation and test in other window |

* TODO Configuration
#+begin_quote
 󱌣 This module has no configuration documentation yet. [[doom-contrib-module:][Write some?]]
#+end_quote

* Troubleshooting
/There are no known problems with this module./ [[doom-report:][Report one?]]

* Frequently asked questions
/This module has no FAQs yet./ [[doom-suggest-faq:][Ask one?]]

* TODO Appendix
#+begin_quote
 󱌣 This module has no appendix yet. [[doom-contrib-module:][Write one?]]
#+end_quote
