2015-12-02 14:23:39 +00:00
|
|
|
#+TITLE: Elm layer
|
2015-08-02 13:04:12 +00:00
|
|
|
|
2019-05-07 08:53:56 +00:00
|
|
|
#+TAGS: general|layer|programming|pure
|
2019-05-05 17:26:40 +00:00
|
|
|
|
2015-08-02 13:04:12 +00:00
|
|
|
[[file:img/elm.png]]
|
|
|
|
|
2019-05-07 20:05:06 +00:00
|
|
|
* Table of Contents :TOC_5_gh:noexport:
|
2017-05-22 14:16:12 +00:00
|
|
|
- [[#description][Description]]
|
2017-08-06 02:14:10 +00:00
|
|
|
- [[#features][Features:]]
|
2017-05-22 14:16:12 +00:00
|
|
|
- [[#install][Install]]
|
|
|
|
- [[#layer][Layer]]
|
|
|
|
- [[#elm-platform][Elm Platform]]
|
2019-10-13 05:27:17 +00:00
|
|
|
- [[#macos-and-windows-installers][macOS and Windows installers]]
|
2017-05-22 14:16:12 +00:00
|
|
|
- [[#universal-installer-using-npm][Universal installer using npm]]
|
|
|
|
- [[#source-code][Source code]]
|
|
|
|
- [[#elm-oracle][elm-oracle]]
|
|
|
|
- [[#elm-format][elm-format]]
|
|
|
|
- [[#basic-usage-tips][Basic usage tips]]
|
|
|
|
- [[#compilation][Compilation]]
|
|
|
|
- [[#reactor][Reactor]]
|
|
|
|
- [[#on-save-usage][On save usage]]
|
|
|
|
- [[#imports-sort][Imports sort]]
|
|
|
|
- [[#file-format][File format]]
|
|
|
|
- [[#indentation][Indentation]]
|
2018-08-30 13:04:45 +00:00
|
|
|
- [[#test-runner-settings][Test runner settings]]
|
2017-05-22 14:16:12 +00:00
|
|
|
- [[#key-bindings][Key bindings]]
|
|
|
|
- [[#elm-make][elm-make]]
|
|
|
|
- [[#elm-repl][elm-repl]]
|
|
|
|
- [[#elm-reactor][elm-reactor]]
|
2018-08-30 13:04:45 +00:00
|
|
|
- [[#elm-test-runner][elm-test-runner]]
|
2017-05-22 14:16:12 +00:00
|
|
|
- [[#elm-package][elm-package]]
|
|
|
|
- [[#package-list-buffer][package list buffer]]
|
|
|
|
- [[#elm-oracle-1][elm-oracle]]
|
|
|
|
- [[#elm-format-1][elm-format]]
|
|
|
|
- [[#refactoring][Refactoring]]
|
2015-08-02 13:04:12 +00:00
|
|
|
|
|
|
|
* Description
|
|
|
|
This layer adds support for [[http://elm-lang.org][Elm]].
|
|
|
|
|
2017-08-06 02:14:10 +00:00
|
|
|
It relies on [[https://github.com/jcollard/elm-mode][elm-mode]] and [[https://github.com/bsermons/flycheck-elm][flycheck-elm]].
|
|
|
|
|
|
|
|
** Features:
|
2015-08-02 13:04:12 +00:00
|
|
|
- Syntax highlighting.
|
|
|
|
- Intelligent indentation
|
|
|
|
- Auto-completion integration for company (default) or auto-complete modes,
|
|
|
|
with using elm-oracle
|
|
|
|
- Syntax checking support using flycheck
|
|
|
|
- Integration with elm-make
|
|
|
|
- Integration with elm-repl
|
|
|
|
- Integration with elm-reactor
|
|
|
|
- Integration with elm-package
|
|
|
|
|
|
|
|
* Install
|
2016-01-06 05:21:55 +00:00
|
|
|
** Layer
|
|
|
|
To use this configuration layer, add it to your =~/.spacemacs=. You will need to
|
|
|
|
add =elm= to the existing =dotspacemacs-configuration-layers= list in this
|
|
|
|
file.
|
|
|
|
|
2015-08-02 13:04:12 +00:00
|
|
|
** Elm Platform
|
2016-11-22 20:53:50 +00:00
|
|
|
The =elm-platform= is a bundle of tools, including the =elm-compiler=,
|
|
|
|
=elm-make=, =elm-reactor=, =elm-repl= and =elm-package=.
|
2015-08-02 13:04:12 +00:00
|
|
|
|
2016-11-22 20:53:50 +00:00
|
|
|
Depending on the method of installation, the =elm-mode= package would need to be
|
|
|
|
able to access commands such as =elm-reactor= or =elm-make=.
|
2015-08-02 13:04:12 +00:00
|
|
|
|
2019-10-13 05:27:17 +00:00
|
|
|
*** macOS and Windows installers
|
2015-08-02 13:04:12 +00:00
|
|
|
Official installers for these operating systems are available from:
|
2017-04-26 13:50:19 +00:00
|
|
|
[[https://guide.elm-lang.org/install.html][https://guide.elm-lang.org/install.html]]
|
2015-09-07 03:14:31 +00:00
|
|
|
|
2015-08-02 13:04:12 +00:00
|
|
|
*** Universal installer using npm
|
|
|
|
A npm based installer is available to, and provides pre-compiled binaries for
|
|
|
|
certain operating system and architectures.
|
2018-07-10 10:57:25 +00:00
|
|
|
|
2015-08-02 13:04:12 +00:00
|
|
|
#+BEGIN_SRC sh
|
|
|
|
npm install --global elm
|
|
|
|
#+END_SRC
|
2018-07-10 10:57:25 +00:00
|
|
|
|
2016-11-22 20:53:50 +00:00
|
|
|
Also, note that you might need to set the =ELM_HOME= environment variables to
|
2015-08-02 13:04:12 +00:00
|
|
|
the corresponding directory created by the installer.
|
|
|
|
|
2016-11-22 20:53:50 +00:00
|
|
|
If you are facing problems with previewing a buffer with =elm-reactor= ensure
|
2016-07-07 01:59:47 +00:00
|
|
|
that the absolute path of the npm global bin file is on your path within emacs
|
2016-07-03 09:37:38 +00:00
|
|
|
|
2019-10-13 05:27:17 +00:00
|
|
|
MacOS users facing problems with =elm-reactor= failing to properly install or
|
2016-04-13 03:31:38 +00:00
|
|
|
run, see this issue [[https://github.com/kevva/elm-bin/issues/28][https://github.com/kevva/elm-bin/issues/28]].
|
2015-08-02 13:04:12 +00:00
|
|
|
|
2015-09-07 03:14:31 +00:00
|
|
|
*** Source code
|
|
|
|
To build from source, see instructions here:
|
2015-08-02 13:04:12 +00:00
|
|
|
[[https://github.com/elm-lang/elm-platform][https://github.com/elm-lang/elm-platform]]
|
|
|
|
|
|
|
|
** elm-oracle
|
2016-11-22 20:53:50 +00:00
|
|
|
=elm-oracle= can be used to show type signatures and docs for tokens under the
|
2016-07-07 01:59:47 +00:00
|
|
|
cursor and provide support for auto-completion, but it is not part of the
|
|
|
|
standard elm-platform.
|
2015-08-02 13:04:12 +00:00
|
|
|
|
2019-05-26 20:58:52 +00:00
|
|
|
Both the "company" and "auto-complete" backends are supported, but this layer
|
2016-04-13 03:31:38 +00:00
|
|
|
is configured with company.
|
2015-08-02 13:04:12 +00:00
|
|
|
|
2016-11-22 20:53:50 +00:00
|
|
|
To install =elm-oracle=, install =node.js= and =npm=, then
|
2015-08-02 13:04:12 +00:00
|
|
|
run this command:
|
|
|
|
|
|
|
|
#+BEGIN_SRC sh
|
|
|
|
npm install -g elm-oracle
|
|
|
|
#+END_SRC
|
|
|
|
|
2016-07-03 09:37:38 +00:00
|
|
|
** elm-format
|
2016-11-22 20:53:50 +00:00
|
|
|
=elm-format= can be used to format elm code according to a standard set of
|
2016-07-07 01:59:47 +00:00
|
|
|
rules.
|
2016-07-03 09:37:38 +00:00
|
|
|
|
2018-05-24 02:12:30 +00:00
|
|
|
To install =elm-format= follow the instructions for the version of elm
|
2018-09-19 03:54:47 +00:00
|
|
|
installed: [[https://github.com/avh4/elm-format]]
|
2016-07-03 09:37:38 +00:00
|
|
|
|
2016-11-22 20:53:50 +00:00
|
|
|
Also, note that if you use homebrew to install =elm-format= the installed exe
|
2016-07-07 01:59:47 +00:00
|
|
|
has a version suffix, the installed command name can be set in your
|
|
|
|
=~/spacemacs=:
|
2016-07-03 09:37:38 +00:00
|
|
|
|
|
|
|
#+BEGIN_SRC emacs-lisp
|
|
|
|
(elm :variables
|
|
|
|
elm-format-command "elm-format-0.17")
|
|
|
|
#+END_SRC
|
|
|
|
|
2015-08-02 13:04:12 +00:00
|
|
|
* Basic usage tips
|
|
|
|
** Compilation
|
|
|
|
To control the name of the compiled JavaScript file, use ~SPC m c B~ instead of
|
2016-11-22 20:53:50 +00:00
|
|
|
~SPC m c b~. This will overwrite the =--output= parameter of =elm-make= to
|
|
|
|
=[buffer-name].js= instead of the default.
|
2015-08-02 13:04:12 +00:00
|
|
|
|
|
|
|
** Reactor
|
2016-11-22 20:53:50 +00:00
|
|
|
=elm-reactor= is an interactive development tool, used to develop and debug Elm
|
2015-08-02 13:04:12 +00:00
|
|
|
programs. It will automatically compile an Elm program, and run it in the
|
|
|
|
browser, with editor agnostic support for hot-swapping and time-travel
|
|
|
|
debugging.
|
|
|
|
|
2016-11-22 20:53:50 +00:00
|
|
|
To preview =Main.elm=, press ~C-c C-m~ (or ~SPC m R m~).
|
2015-08-02 13:04:12 +00:00
|
|
|
Alternatively, to preview from buffer, press ~C-u C-c C-n~ (or ~SPC m R
|
|
|
|
n~). To preview in debug mode, prefix with ~C-u~ (or ~SPC u~).
|
|
|
|
|
2016-11-22 20:53:50 +00:00
|
|
|
By default, =elm-reactor= with launch with its own generated index.html. To use
|
2019-05-26 20:58:52 +00:00
|
|
|
a custom html, you'd need to load the debuger excplictly and use an http daemon
|
2015-08-02 13:04:12 +00:00
|
|
|
to serve your custom file.
|
|
|
|
|
|
|
|
If needed, default values for host and port used by for the elm-reactor server
|
|
|
|
can be controlled by passing in these variables in your =~/.spacemacs=:
|
|
|
|
|
|
|
|
#+BEGIN_SRC emacs-lisp
|
|
|
|
(elm :variables
|
|
|
|
elm-reactor-port "3000" ; default 8000
|
|
|
|
elm-reactor-address "0.0.0.0") ; default 127.0.0.1
|
|
|
|
#+END_SRC
|
|
|
|
|
2017-02-07 14:41:26 +00:00
|
|
|
** On save usage
|
|
|
|
*** Imports sort
|
2016-11-22 20:53:50 +00:00
|
|
|
Set =elm-sort-imports-on-save= to =t= to sort the imports in the current file on
|
2016-06-06 17:04:12 +00:00
|
|
|
every save.
|
|
|
|
|
|
|
|
#+BEGIN_SRC emacs-lisp
|
|
|
|
(elm :variables elm-sort-imports-on-save t)
|
|
|
|
#+END_SRC
|
|
|
|
|
2017-02-07 14:41:26 +00:00
|
|
|
*** File format
|
2016-11-22 20:53:50 +00:00
|
|
|
Set =elm-format-on-save= to =t= to format current file on every save.
|
2017-02-07 14:41:26 +00:00
|
|
|
|
|
|
|
#+BEGIN_SRC emacs-lisp
|
|
|
|
(elm :variables elm-format-on-save t)
|
|
|
|
#+END_SRC
|
|
|
|
|
2017-01-16 04:26:05 +00:00
|
|
|
** Indentation
|
|
|
|
elm-mode indentation is based on cycling: every time you insert a new line there
|
|
|
|
will be one or more indentation levels available for you to choose from. The
|
|
|
|
exact number is printed in the minibuffer either as Sole indentation or Indent
|
|
|
|
cycle (n)... where n is the number of available indentations to choose from. If
|
|
|
|
the automatic indentation level was not the one you expected simply hit TAB to
|
|
|
|
cycle through the list (note that hitting any other key will cancel the cycle).
|
|
|
|
|
2018-08-30 13:04:45 +00:00
|
|
|
** Test runner settings
|
|
|
|
You may want to customize the default suffix for test files. For example, if you
|
|
|
|
prefer to put your tests in =HelloSpec.elm= instead of =HelloTest.elm=, set the
|
|
|
|
following variable:
|
|
|
|
|
|
|
|
#+BEGIN_SRC emacs-lisp
|
|
|
|
(elm :variables
|
|
|
|
elm-test-runner-preferred-test-suffix "Spec")
|
|
|
|
#+END_SRC
|
|
|
|
|
|
|
|
Take a look [[https://github.com/juanedi/elm-test-runner#customization][here]] for more settings, and remember that this can be set by project
|
|
|
|
using a =dir-locals.el= file.
|
|
|
|
|
2015-08-02 13:04:12 +00:00
|
|
|
* Key bindings
|
|
|
|
** elm-make
|
|
|
|
|
2018-12-05 03:03:03 +00:00
|
|
|
| Key binding | Description |
|
2015-08-02 13:04:12 +00:00
|
|
|
|-------------+----------------------------------------------|
|
|
|
|
| ~SPC m c b~ | elm-compile-buffer |
|
|
|
|
| ~SPC m c B~ | spacemacs/elm-compile-buffer-override-output |
|
|
|
|
| ~SPC m c m~ | elm-compile-main |
|
|
|
|
|
|
|
|
** elm-repl
|
|
|
|
|
2018-12-05 03:03:03 +00:00
|
|
|
| Key binding | Description |
|
2015-09-07 03:14:31 +00:00
|
|
|
|-------------+------------------------------------------------------------|
|
2015-11-09 17:57:22 +00:00
|
|
|
| ~SPC m s i~ | elm-repl-load |
|
2015-09-07 03:14:31 +00:00
|
|
|
| ~SPC m s f~ | send current function to REPL |
|
|
|
|
| ~SPC m s F~ | send current function to REPL and focus it in insert state |
|
|
|
|
| ~SPC m s r~ | send current region to REPL |
|
|
|
|
| ~SPC m s R~ | send current region to REPL and focus it in insert state |
|
2015-08-02 13:04:12 +00:00
|
|
|
|
|
|
|
** elm-reactor
|
|
|
|
|
2018-12-05 03:03:03 +00:00
|
|
|
| Key binding | Description |
|
2015-08-02 13:04:12 +00:00
|
|
|
|-------------+--------------------|
|
|
|
|
| ~SPC m R n~ | elm-preview-buffer |
|
|
|
|
| ~SPC m R m~ | elm-preview-main |
|
|
|
|
|
2018-08-30 13:04:45 +00:00
|
|
|
** elm-test-runner
|
|
|
|
|
2018-12-05 03:03:03 +00:00
|
|
|
| Key binding | Description |
|
2018-08-30 13:04:45 +00:00
|
|
|
|---------------+----------------------------------------|
|
|
|
|
| ~SPC m t b~ | elm-test-runner-run |
|
|
|
|
| ~SPC m t d~ | elm-test-runner-run-directory |
|
|
|
|
| ~SPC m t p~ | elm-test-runner-run-project |
|
|
|
|
| ~SPC m t r~ | elm-test-runner-rerun |
|
|
|
|
| ~SPC m t w~ | elm-test-runner-watch |
|
|
|
|
| ~SPC m t TAB~ | elm-test-runner-toggle-test-and-target |
|
|
|
|
|
2015-08-02 13:04:12 +00:00
|
|
|
** elm-package
|
|
|
|
|
2018-12-05 03:03:03 +00:00
|
|
|
| Key binding | Description |
|
2015-08-02 13:04:12 +00:00
|
|
|
|-------------+--------------------------|
|
|
|
|
| ~SPC m p i~ | elm-import |
|
|
|
|
| ~SPC m p c~ | elm-package-catalog |
|
|
|
|
| ~SPC m p d~ | elm-documentation-lookup |
|
|
|
|
|
|
|
|
*** package list buffer
|
|
|
|
|
2018-12-05 03:03:03 +00:00
|
|
|
| Key binding | Description |
|
2016-06-10 04:09:42 +00:00
|
|
|
|-------------+---------------------|
|
|
|
|
| ~g~ | elm-package-refresh |
|
|
|
|
| ~v~ | elm-package-view |
|
|
|
|
| ~m~ | elm-package-mark |
|
|
|
|
| ~u~ | elm-package-unmark |
|
|
|
|
| ~x~ | elm-package-install |
|
|
|
|
| ~q~ | quit-window |
|
2015-08-02 13:04:12 +00:00
|
|
|
|
|
|
|
** elm-oracle
|
|
|
|
|
2018-12-05 03:03:03 +00:00
|
|
|
| Key binding | Description |
|
2015-08-02 13:04:12 +00:00
|
|
|
|-------------+--------------------------|
|
2016-10-03 02:09:25 +00:00
|
|
|
| ~SPC m h h~ | elm-oracle-doc-at-point |
|
2015-09-07 03:14:31 +00:00
|
|
|
| ~SPC m h t~ | elm-oracle-type-at-point |
|
2015-08-02 13:04:12 +00:00
|
|
|
|
2016-07-07 02:09:25 +00:00
|
|
|
** elm-format
|
|
|
|
|
2018-12-05 03:03:03 +00:00
|
|
|
| Key binding | Description |
|
2017-04-25 15:42:58 +00:00
|
|
|
| ~SPC m = b~ | elm-mode-format-buffer |
|
2016-06-19 04:24:16 +00:00
|
|
|
|
2016-06-06 17:03:40 +00:00
|
|
|
** Refactoring
|
|
|
|
|
2018-12-05 03:03:03 +00:00
|
|
|
| Key binding | Description |
|
2016-06-06 17:03:40 +00:00
|
|
|
|-------------+------------------|
|
|
|
|
| ~SPC m r i~ | elm-sort-imports |
|