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/elixir/README.org

188 lines
7.3 KiB
Org Mode
Raw Normal View History

#+TITLE: Elixir layer
2015-06-10 16:44:30 +00:00
[[file:img/elixir.png]] with [[file:img/alchemist.png]]
2016-03-31 02:59:55 +00:00
* Table of Contents :TOC_4_gh:noexport:
- [[#description][Description]]
- [[#install][Install]]
- [[#configuration][Configuration]]
2016-06-01 01:51:49 +00:00
- [[#flycheck][Flycheck]]
- [[#credo][Credo]]
- [[#mix-compile][mix compile]]
2016-03-31 02:59:55 +00:00
- [[#key-bindings][Key bindings]]
- [[#refcard][Refcard]]
- [[#help][Help]]
- [[#mix][Mix]]
- [[#project][Project]]
- [[#evaluation-in-place][Evaluation in place]]
- [[#repl-interactions][REPL interactions]]
- [[#tests][Tests]]
- [[#compile][Compile]]
- [[#execute][Execute]]
- [[#code-definition-jump][Code Definition Jump]]
2015-06-10 16:44:30 +00:00
* Description
This layer adds support for [[http://elixir-lang.org/][Elixir]] .
[[https://github.com/tonini/alchemist.el][Alchemist]] brings the Elixir tooling to Emacs and comes with a bunch of features
like:
2015-06-10 16:44:30 +00:00
- Powerful IEx integration
- Mix integration
- Compile & Execution of Elixir code
- Inline code evaluation
- Documentation lookup
- Definition lookup
- Smart code completion
- Elixir project management
- Integration with [[http://company-mode.github.io/][company-mode]]
- Flycheck support for mix compile
2016-06-01 01:51:49 +00:00
- Flycheck support for [[https://github.com/rrrene/credo][credo]]
- Flycheck support for test results
2015-06-10 16:44:30 +00:00
* Install
To use this configuration layer, add it to your =~/.spacemacs=. You will need to
add =elixir= to the existing =dotspacemacs-configuration-layers= list in this
file.
2015-06-10 16:44:30 +00:00
* Configuration
2016-06-01 01:51:49 +00:00
** Flycheck
2016-06-01 02:23:18 +00:00
*Note:* since flycheck checkers are slow, the checks are enabled only at save
time.
2016-06-01 01:51:49 +00:00
*** Credo
You need to install [[https://github.com/rrrene/credo][credo]] into your project. Fort this, add ={:credo, "~> 0.5",
only: [:dev, :test]}= to dependencies of your project (in file =mix.exs=) and
run:
2016-06-01 01:51:49 +00:00
#+BEGIN_SRC shell
$ mix deps.get
#+END_SRC
For more info about mix [[http://elixir-lang.org/getting-started/mix-otp/introduction-to-mix.html][see]].
You can tell flycheck-credo to call credo with the '--strict' argument.
#+BEGIN_SRC elisp
(setq flycheck-elixir-credo-strict t)
2016-06-01 01:51:49 +00:00
#+END_SRC
*** mix compile
*Important:*
Elixir compiler is based on macros and can execute arbitrary during compilation.
Therefore Spacemacs disable flycheck compilation checker by default.
To enable flycheck support for compilation errors *globally* the variable
=elixir-enable-compilation-checking= can be set explicitly to =t= in your
dotfile but it is not recommended to do so because of the limitation described
above.
Instead you should use directory local variables in order to enable the flycheck
checker only for certain projects. Directory local variables are stored in a
file named =.dir-local.el= usually at the root of a project. To easily add a
directory local variable use the key binding ~SPC f v d~ then choose the
=elixir-mode= and the variable name =elixir-enable-compilation-checking= with a
value of t. The result is a new file =.dir-local.el= with the following
contents:
#+BEGIN_SRC elisp
;;; Directory Local Variables
;;; For more information see (info "(emacs) Directory Variables")
((elixir-mode
(elixir-enable-compilation-checking . t)))
#+END_SRC
Spacemacs marks the variable =elixir-enable-compilation-checking= as safe so
Emacs won't ask you if the variable is safe whenever an elixir file is opened.
Remember that you can verify the flycheck checkers status with ~SPC e v~.
2015-06-10 16:44:30 +00:00
* Key bindings
** Refcard
You find and overview of all the key-bindings on the [[file:alchemist-refcard.pdf][Alchemist-Refcard]].
** Help
| Key Binding | Description |
|-------------+-------------------------------------|
| ~SPC m h :~ | Run custom search for help |
| ~SPC m h h~ | Show help of the current expression |
| ~SPC m h H~ | Toggle through search history |
| ~SPC m h r~ | Show help for current region |
** Mix
| Key Binding | Description |
|-------------+------------------------------------------------------------|
| ~SPC m m :~ | Prompt for a =mix= command |
| ~SPC m m c~ | Compile the whole application |
| ~SPC m m h~ | Show help for a specific =mix= command |
| ~SPC m m x~ | Run the given expression in the Elixir application context |
** Project
| Key Binding | Description |
|-------------+------------------------------------------------------------|
| ~SPC m p t~ | Open project test directory and list all test files. |
| ~SPC m g t~ | Toggle between a file and its tests in the current window. |
| ~SPC m g T~ | Toggle between a file and its tests in other window. |
** Evaluation in place
| Key Binding | Description |
|-------------+-----------------------------------------|
| ~SPC m e b~ | Evaluate buffer |
| ~SPC m e B~ | Evaluate buffer and insert result |
| ~SPC m e l~ | Evaluate current line |
| ~SPC m e L~ | Evaluate current line and insert result |
| ~SPC m e r~ | Evaluate region |
| ~SPC m e R~ | Evaluate region and insert result |
** REPL interactions
| Key Binding | Description |
|-------------+-----------------------------------------------------------------|
| ~SPC m s c~ | Compiles the current buffer in the IEx process. |
2015-06-10 16:44:30 +00:00
| ~SPC m s i~ | Start an =iex= inferior process |
| ~SPC m s I~ | Start an IEx process with mix (=iex -S mix=) |
| ~SPC m s l~ | Send current line to REPL buffer |
| ~SPC m s L~ | Send current line to REPL buffer and focus it in =insert state= |
| ~SPC m s m~ | Reloads the module in the current buffer in your IEx process |
2015-06-10 16:44:30 +00:00
| ~SPC m s r~ | Send region to REPL buffer |
| ~SPC m s R~ | Send region to REPL buffer and focus it in =insert state= |
** Tests
| Key Binding | Description |
|-------------+---------------------------------------|
| ~SPC m g t~ | Open the test file for current buffer |
| ~SPC m t a~ | Run all the tests |
| ~SPC m t b~ | Run all the tests from current buffer |
| ~SPC m t r~ | Rerun the last test |
2015-06-10 16:44:30 +00:00
| ~SPC m t t~ | Run test under point |
** Compile
| Key Binding | Description |
|-------------+----------------------------------------------------|
| ~SPC m c :~ | Run a custom compile command with =elixirc= |
| ~SPC m c b~ | Compile the current buffer with elixirc. =elixirc= |
| ~SPC m c f~ | Compile the given filename with =elixirc= |
** Execute
| Key Binding | Description |
|-------------+--------------------------------------------|
| ~SPC m x :~ | Run a custom execute command with =elixir= |
| ~SPC m x b~ | Run the current buffer through =elixir= |
| ~SPC m x f~ | Run =elixir= with the given filename |
** Code Definition Jump
| Key Binding | Description |
|-------------+----------------------------------------------------|
| ~SPC m g g~ | Jump to the elixir expression definition at point. |
| ~SPC m ,~ | Pop back to where ~SPC m g g~ was last invoked. |