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
syl20bnr ebe4c60264 Revert "Defer packages by default using use-package-always-defer"
This reverts commit 29c78ce841 and all other fixes
that have been made afterwards.

The motivation is that use-package is seen by many as a replacement for
`require`. Is use-package always defer the loading of packages then is breaks
this use case, this does not respect POLA so even if it was making Spacemacs
loading faster (up to 3s faster on some startup on my machine) we just cannot
use it, it would be irresponsible. Spacemacs should be easy to use, loading
performance will come with time but it is not a priority.
2018-03-03 23:40:10 -05:00
..
img Use + instead of ! for layer categories 2015-09-11 00:13:51 -04:00
config.el Happy New Year 2018! 2018-01-04 02:00:25 -05:00
funcs.el Happy New Year 2018! 2018-01-04 02:00:25 -05:00
packages.el Revert "Defer packages by default using use-package-always-defer" 2018-03-03 23:40:10 -05:00
README.org add elixir tag to src blocks 2018-01-27 16:57:18 +02:00

Elixir layer

/TakeV/spacemacs/media/commit/bb84c4a3a3ae3c610a6a91179b869120d2288381/layers/+lang/elixir/img/elixir.png with /TakeV/spacemacs/media/commit/bb84c4a3a3ae3c610a6a91179b869120d2288381/layers/+lang/elixir/img/alchemist.png

Description

This layer adds support for Elixir .

Alchemist brings the Elixir tooling to Emacs and comes with a bunch of features.

Features:

  • 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 company-mode
  • Flycheck support for mix compile
  • Flycheck support for credo
  • Flycheck support for test results

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.

Configuration

Flycheck

Note: since flycheck checkers are slow, the checks are enabled only at save time.

Credo

You need to install credo into your project. For this, add the following snippet to dependencies of your project (in file mix.exs):

{:credo, "~> 0.5", only: [:dev, :test]}

Then run in your shell:

$ mix deps.get

For more info about mix see.

You can tell flycheck-credo to call credo with the 'strict' argument.

(setq flycheck-elixir-credo-strict t)

Dogma

In order to lint your code, you also need to install dogma into your project. For this, add the following snippet to the dependencies in your mix.exs file:

{:dogma, "~> 0.1", only: [:dev]}

Then run in your shell:

$ mix deps.get

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-locals.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-locals.el with the following contents:

;;; Directory Local Variables
;;; For more information see (info "(emacs) Directory Variables")

((elixir-mode
  (elixir-enable-compilation-checking . t)))

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.

Key bindings

Refcard

You find and overview of all the key-bindings on the 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.
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
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 B Run all the tests from current file; if test file not found, after confirm, create it
SPC m t f Choose test file to run
SPC m t t Run test under point
SPC m t r Rerun the last test
SPC m t n Jump to next test
SPC m t N Jump to previous test
SPC m t s Run stale tests (mix test --stale)
SPC m t R Toggle test report window

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 . Jump to the elixir expression definition at point.
SPC m g b Pop back to where SPC m g g was last invoked.
SPC m , Pop back to where SPC m g g was last invoked.
SPC m g n Jump to next symbol definition
SPC m g N Jump to previous symbol definition
SPC m g j Choose which symbol definition to jump to

Hex (packages)

Hex is the package manager for Elixir & Erlang ecosystem. See https://hex.pm .

Key Binding Description
SPC m X i Display Hex package information for the package at point
SPC m X r Display Hex package releases for the package at point
SPC m X R Display Hex package releases for a certain package
SPC m X I Display Hex package info for a certain package
SPC m X s Search for Hex packages

Macro expand

Key Binding Description
SPC m o l Macro expand once the Elixir code on the current line
SPC m o L Macro expand once the Elixir code on the current line and insert the result
SPC m o k Macro expand completely the Elixir code on the current line
SPC m o K Macro expand completely the Elixir code on the current line and insert the result
SPC m o i Macro expand once the Elixir code on marked region
SPC m o I Macro expand once the Elixir code on marked region once and insert the result
SPC m o r Macro expand completely the Elixir code on marked region
SPC m o R Macro expand completely the Elixir code on marked region and insert the result