2016-10-11 17:05:12 -04:00
|
|
|
# Asynchronous Lint Engine [![Build Status](https://travis-ci.org/w0rp/ale.svg?branch=master)](https://travis-ci.org/w0rp/ale)
|
2016-10-11 16:55:26 -04:00
|
|
|
|
|
|
|
![ALE Logo by Mark Grealish - https://www.bhalash.com/](img/logo.jpg?raw=true)
|
2016-09-08 19:23:26 -04:00
|
|
|
|
|
|
|
ALE (Asynchronous Lint Engine) is a plugin for providing linting in NeoVim
|
|
|
|
and Vim 8 while you edit your text files.
|
|
|
|
|
2016-10-07 12:48:47 -04:00
|
|
|
![linting example](img/example.gif?raw=true)
|
2016-10-04 17:38:43 -04:00
|
|
|
|
2016-09-08 19:23:26 -04:00
|
|
|
ALE makes use of NeoVim and Vim 8 job control functions and timers to
|
|
|
|
run linters on the contents of text buffers and return errors as
|
|
|
|
text is changed in Vim. This allows for displaying warnings and
|
2016-09-13 18:18:52 -04:00
|
|
|
errors in files being edited in Vim before files have been saved
|
|
|
|
back to a filesystem.
|
|
|
|
|
|
|
|
In other words, this plugin allows you to lint while you type.
|
2016-09-08 19:23:26 -04:00
|
|
|
|
2017-05-20 14:01:12 -04:00
|
|
|
ALE also supports fixing problems with files by running commands in the
|
|
|
|
background with a command `ALEFix`.
|
|
|
|
|
2016-10-25 05:39:06 -04:00
|
|
|
## Table of Contents
|
|
|
|
|
2016-10-25 05:44:50 -04:00
|
|
|
1. [Supported Languages and Tools](#supported-languages)
|
|
|
|
2. [Usage](#usage)
|
|
|
|
3. [Installation](#installation)
|
2017-07-19 08:36:30 -04:00
|
|
|
1. [Installation with Vim package management](#standard-installation)
|
|
|
|
2. [Installation with Pathogen](#installation-with-pathogen)
|
|
|
|
3. [Installation with Vundle](#installation-with-vundle)
|
2017-02-23 17:51:08 -05:00
|
|
|
4. [Contributing](#contributing)
|
|
|
|
5. [FAQ](#faq)
|
2017-04-12 16:22:56 -04:00
|
|
|
1. [How do I disable particular linters?](#faq-disable-linters)
|
2017-04-12 16:53:20 -04:00
|
|
|
2. [How can I keep the sign gutter open?](#faq-keep-signs)
|
2017-04-12 16:22:56 -04:00
|
|
|
3. [How can I change the signs ALE uses?](#faq-change-signs)
|
|
|
|
4. [How can I show errors or warnings in my statusline?](#faq-statusline)
|
|
|
|
5. [How can I change the format for echo messages?](#faq-echo-format)
|
|
|
|
6. [How can I execute some code when ALE stops linting?](#faq-autocmd)
|
|
|
|
7. [How can I navigate between errors quickly?](#faq-navigation)
|
|
|
|
8. [How can I run linters only when I save files?](#faq-lint-on-save)
|
|
|
|
9. [How can I use the quickfix list instead of the loclist?](#faq-quickfix)
|
|
|
|
10. [How can I check JSX files with both stylelint and eslint?](#faq-jsx-stylelint-eslint)
|
|
|
|
11. [Will this plugin eat all of my laptop battery power?](#faq-my-battery-is-sad)
|
2016-10-25 05:39:06 -04:00
|
|
|
|
|
|
|
<a name="supported-languages"></a>
|
|
|
|
|
|
|
|
## 1. Supported Languages and Tools
|
2016-09-19 17:19:21 -04:00
|
|
|
|
|
|
|
This plugin supports the following languages and tools. All available
|
|
|
|
tools will be run in combination, so they can be complementary.
|
|
|
|
|
|
|
|
<!--
|
|
|
|
Keep the table rows sorted alphabetically by the language name,
|
|
|
|
and the tools in the tools column sorted alphabetically by the tool
|
|
|
|
name. That seems to be the fairest way to arrange this table.
|
|
|
|
-->
|
|
|
|
|
|
|
|
| Language | Tools |
|
|
|
|
| -------- | ----- |
|
2017-03-25 19:02:59 -04:00
|
|
|
| ASM | [gcc](https://gcc.gnu.org) |
|
2016-10-20 10:26:56 -04:00
|
|
|
| Ansible | [ansible-lint](https://github.com/willthames/ansible-lint) |
|
2017-03-01 19:06:09 -05:00
|
|
|
| AsciiDoc | [proselint](http://proselint.com/)|
|
2017-06-08 13:26:21 -04:00
|
|
|
| Awk | [gawk](https://www.gnu.org/software/gawk/)|
|
2016-10-03 18:43:54 -04:00
|
|
|
| Bash | [-n flag](https://www.gnu.org/software/bash/manual/bash.html#index-set), [shellcheck](https://www.shellcheck.net/) |
|
2016-10-03 08:18:27 -04:00
|
|
|
| Bourne Shell | [-n flag](http://linux.die.net/man/1/sh), [shellcheck](https://www.shellcheck.net/) |
|
2016-10-31 01:32:39 -04:00
|
|
|
| C | [cppcheck](http://cppcheck.sourceforge.net), [gcc](https://gcc.gnu.org/), [clang](http://clang.llvm.org/)|
|
2017-06-24 11:10:04 -04:00
|
|
|
| C++ (filetype cpp) | [clang](http://clang.llvm.org/), [clangcheck](http://clang.llvm.org/docs/ClangCheck.html), [clangtidy](http://clang.llvm.org/extra/clang-tidy/), [cppcheck](http://cppcheck.sourceforge.net), [cpplint](https://github.com/google/styleguide/tree/gh-pages/cpplint), [gcc](https://gcc.gnu.org/)|
|
2017-01-15 07:42:17 -05:00
|
|
|
| C# | [mcs](http://www.mono-project.com/docs/about-mono/languages/csharp/) |
|
2016-10-30 14:23:32 -04:00
|
|
|
| Chef | [foodcritic](http://www.foodcritic.io/) |
|
2017-02-25 12:27:03 -05:00
|
|
|
| CMake | [cmakelint](https://github.com/richq/cmake-lint) |
|
2016-10-08 11:52:23 -04:00
|
|
|
| CoffeeScript | [coffee](http://coffeescript.org/), [coffeelint](https://www.npmjs.com/package/coffeelint) |
|
2017-04-13 21:19:53 -04:00
|
|
|
| Crystal | [crystal](https://crystal-lang.org/) |
|
2016-12-06 08:26:06 -05:00
|
|
|
| CSS | [csslint](http://csslint.net/), [stylelint](https://github.com/stylelint/stylelint) |
|
2016-10-07 16:33:16 -04:00
|
|
|
| Cython (pyrex filetype) | [cython](http://cython.org/) |
|
2017-02-08 17:25:08 -05:00
|
|
|
| D | [dmd](https://dlang.org/dmd-linux.html) |
|
2017-07-18 18:57:33 -04:00
|
|
|
| Dart | [dartanalyzer](https://github.com/dart-lang/sdk/tree/master/pkg/analyzer_cli) |
|
2017-01-30 10:27:26 -05:00
|
|
|
| Dockerfile | [hadolint](https://github.com/lukasmartinelli/hadolint) |
|
2017-03-27 08:02:25 -04:00
|
|
|
| Elixir | [credo](https://github.com/rrrene/credo), [dogma](https://github.com/lpil/dogma) |
|
2016-12-13 04:06:04 -05:00
|
|
|
| Elm | [elm-make](https://github.com/elm-lang/elm-make) |
|
2017-04-25 20:53:37 -04:00
|
|
|
| Erb | [erb](https://github.com/jeremyevans/erubi) |
|
2017-07-16 07:35:43 -04:00
|
|
|
| Erlang | [erlc](http://erlang.org/doc/man/erlc.html), [SyntaxErl](https://github.com/ten0s/syntaxerl) |
|
2016-09-19 17:19:21 -04:00
|
|
|
| Fortran | [gcc](https://gcc.gnu.org/) |
|
2017-06-14 04:35:11 -04:00
|
|
|
| FusionScript | [fusion-lint](https://github.com/RyanSquared/fusionscript) |
|
2017-04-13 05:27:09 -04:00
|
|
|
| Go | [gofmt -e](https://golang.org/cmd/gofmt/), [go vet](https://golang.org/cmd/vet/), [golint](https://godoc.org/github.com/golang/lint), [gometalinter](https://github.com/alecthomas/gometalinter), [go build](https://golang.org/cmd/go/), [gosimple](https://github.com/dominikh/go-tools/tree/master/cmd/gosimple), [staticcheck](https://github.com/dominikh/go-tools/tree/master/cmd/staticcheck) |
|
2017-03-03 15:27:07 -05:00
|
|
|
| Haml | [haml-lint](https://github.com/brigade/haml-lint)
|
2017-04-07 10:38:50 -04:00
|
|
|
| Handlebars | [ember-template-lint](https://github.com/rwjblue/ember-template-lint) |
|
2017-07-09 17:39:33 -04:00
|
|
|
| Haskell | [ghc](https://www.haskell.org/ghc/), [stack-ghc](https://haskellstack.org/), [stack-build](https://haskellstack.org/), [ghc-mod](https://github.com/DanielG/ghc-mod), [stack-ghc-mod](https://github.com/DanielG/ghc-mod), [hlint](https://hackage.haskell.org/package/hlint), [hdevtools](https://hackage.haskell.org/package/hdevtools) |
|
2017-03-01 19:06:09 -05:00
|
|
|
| HTML | [HTMLHint](http://htmlhint.com/), [proselint](http://proselint.com/), [tidy](http://www.html-tidy.org/) |
|
2017-05-12 09:42:32 -04:00
|
|
|
| Java | [checkstyle](http://checkstyle.sourceforge.net), [javac](http://www.oracle.com/technetwork/java/javase/downloads/index.html) |
|
2017-06-28 11:35:19 -04:00
|
|
|
| JavaScript | [eslint](http://eslint.org/), [jscs](http://jscs.info/), [jshint](http://jshint.com/), [flow](https://flowtype.org/), [standard](http://standardjs.com/), [prettier](https://github.com/prettier/prettier) (and `prettier-eslint`, `prettier-standard`), [xo](https://github.com/sindresorhus/xo)
|
2016-10-03 18:36:19 -04:00
|
|
|
| JSON | [jsonlint](http://zaa.ch/jsonlint/) |
|
2017-06-02 14:41:46 -04:00
|
|
|
| Kotlin | [kotlinc](https://kotlinlang.org), [ktlint](https://ktlint.github.io) see `:help ale-integration-kotlin` for configuration instructions
|
2017-05-03 18:35:33 -04:00
|
|
|
| LaTeX | [chktex](http://www.nongnu.org/chktex/), [lacheck](https://www.ctan.org/pkg/lacheck), [proselint](http://proselint.com/) |
|
2016-10-12 10:44:53 -04:00
|
|
|
| Lua | [luacheck](https://github.com/mpeterv/luacheck) |
|
2017-05-01 11:06:04 -04:00
|
|
|
| Markdown | [mdl](https://github.com/mivok/markdownlint), [proselint](http://proselint.com/), [vale](https://github.com/ValeLint/vale) |
|
2016-10-24 15:32:52 -04:00
|
|
|
| MATLAB | [mlint](https://www.mathworks.com/help/matlab/ref/mlint.html) |
|
2017-03-18 12:33:26 -04:00
|
|
|
| Nim | [nim](https://nim-lang.org/docs/nimc.html) |
|
2017-03-03 16:45:48 -05:00
|
|
|
| nix | [nix-instantiate](http://nixos.org/nix/manual/#sec-nix-instantiate) |
|
2017-03-01 19:06:09 -05:00
|
|
|
| nroff | [proselint](http://proselint.com/)|
|
2017-05-19 12:41:57 -04:00
|
|
|
| Objective-C | [clang](http://clang.llvm.org/) |
|
|
|
|
| Objective-C++ | [clang](http://clang.llvm.org/) |
|
2016-11-23 10:19:36 -05:00
|
|
|
| OCaml | [merlin](https://github.com/the-lambda-church/merlin) see `:help ale-integration-ocaml-merlin` for configuration instructions
|
2016-10-09 11:31:03 -04:00
|
|
|
| Perl | [perl -c](https://perl.org/), [perl-critic](https://metacpan.org/pod/Perl::Critic) |
|
2017-07-16 10:04:25 -04:00
|
|
|
| PHP | [hack](http://hacklang.org/), [php -l](https://secure.php.net/), [phpcs](https://github.com/squizlabs/PHP_CodeSniffer), [phpmd](https://phpmd.org), [phpstan](https://github.com/phpstan/phpstan) |
|
2017-03-01 19:06:09 -05:00
|
|
|
| Pod | [proselint](http://proselint.com/)|
|
2016-10-07 17:16:29 -04:00
|
|
|
| Pug | [pug-lint](https://github.com/pugjs/pug-lint) |
|
2016-11-25 07:00:07 -05:00
|
|
|
| Puppet | [puppet](https://puppet.com), [puppet-lint](https://puppet-lint.com) |
|
2017-06-18 06:03:31 -04:00
|
|
|
| Python | [autopep8](https://github.com/hhatto/autopep8), [flake8](http://flake8.pycqa.org/en/latest/), [isort](https://github.com/timothycrosley/isort), [mypy](http://mypy-lang.org/), [pylint](https://www.pylint.org/), [yapf](https://github.com/google/yapf) |
|
2017-07-03 17:34:22 -04:00
|
|
|
| R | [lintr](https://github.com/jimhester/lintr) |
|
2017-04-26 05:25:25 -04:00
|
|
|
| ReasonML | [merlin](https://github.com/the-lambda-church/merlin) see `:help ale-integration-reason-merlin` for configuration instructions
|
2017-03-01 19:06:09 -05:00
|
|
|
| reStructuredText | [proselint](http://proselint.com/)|
|
2017-04-20 11:55:20 -04:00
|
|
|
| RPM spec | [rpmlint](https://github.com/rpm-software-management/rpmlint) (disabled by default; see `:help ale-integration-spec`) |
|
2017-07-12 05:43:47 -04:00
|
|
|
| Ruby | [brakeman](http://brakemanscanner.org/), [rails_best_practices](https://github.com/flyerhzm/rails_best_practices), [reek](https://github.com/troessner/reek), [rubocop](https://github.com/bbatsov/rubocop), [ruby](https://www.ruby-lang.org) |
|
2017-01-19 15:21:54 -05:00
|
|
|
| Rust | [rustc](https://www.rust-lang.org/), cargo (see `:help ale-integration-rust` for configuration instructions) |
|
2016-12-06 08:26:06 -05:00
|
|
|
| SASS | [sass-lint](https://www.npmjs.com/package/sass-lint), [stylelint](https://github.com/stylelint/stylelint) |
|
|
|
|
| SCSS | [sass-lint](https://www.npmjs.com/package/sass-lint), [scss-lint](https://github.com/brigade/scss-lint), [stylelint](https://github.com/stylelint/stylelint) |
|
2017-07-13 18:41:01 -04:00
|
|
|
| Scala | [scalac](http://scala-lang.org), [scalastyle](http://www.scalastyle.org) |
|
2017-03-13 19:21:59 -04:00
|
|
|
| Slim | [slim-lint](https://github.com/sds/slim-lint)
|
2017-02-17 21:05:33 -05:00
|
|
|
| SML | [smlnj](http://www.smlnj.org/) |
|
2017-07-03 11:57:39 -04:00
|
|
|
| Stylus | [stylelint](https://github.com/stylelint/stylelint) |
|
2017-04-15 06:24:05 -04:00
|
|
|
| SQL | [sqlint](https://github.com/purcell/sqlint) |
|
2016-12-13 10:28:20 -05:00
|
|
|
| Swift | [swiftlint](https://swift.org/) |
|
2017-03-01 19:06:09 -05:00
|
|
|
| Texinfo | [proselint](http://proselint.com/)|
|
2017-05-01 11:06:04 -04:00
|
|
|
| Text^ | [proselint](http://proselint.com/), [vale](https://github.com/ValeLint/vale) |
|
2017-06-20 05:50:38 -04:00
|
|
|
| TypeScript | [eslint](http://eslint.org/), [tslint](https://github.com/palantir/tslint), tsserver, typecheck |
|
2016-10-08 08:38:31 -04:00
|
|
|
| Verilog | [iverilog](https://github.com/steveicarus/iverilog), [verilator](http://www.veripool.org/projects/verilator/wiki/Intro) |
|
2016-10-07 16:33:16 -04:00
|
|
|
| Vim | [vint](https://github.com/Kuniwak/vint) |
|
2017-03-01 19:06:09 -05:00
|
|
|
| Vim help^ | [proselint](http://proselint.com/)|
|
|
|
|
| XHTML | [proselint](http://proselint.com/)|
|
2017-05-18 04:31:12 -04:00
|
|
|
| XML | [xmllint](http://xmlsoft.org/xmllint.html/)|
|
2017-07-17 15:28:21 -04:00
|
|
|
| YAML | [swaglint](https://github.com/byCedric/swaglint), [yamllint](https://yamllint.readthedocs.io/) |
|
2016-09-19 17:19:21 -04:00
|
|
|
|
2017-03-01 19:06:09 -05:00
|
|
|
* *^ No linters for text or Vim help filetypes are enabled by default.*
|
2016-09-19 17:19:21 -04:00
|
|
|
|
2016-10-25 05:39:06 -04:00
|
|
|
<a name="usage"></a>
|
|
|
|
|
|
|
|
## 2. Usage
|
2016-09-19 17:19:21 -04:00
|
|
|
|
|
|
|
Once this plugin is installed, while editing your files in supported
|
|
|
|
languages and tools which have been correctly installed,
|
|
|
|
this plugin will send the contents of your text buffers to a variety of
|
|
|
|
programs for checking the syntax and semantics of your programs. By default,
|
|
|
|
linters will be re-run in the background to check your syntax when you open
|
|
|
|
new buffers or as you make edits to your files.
|
|
|
|
|
2016-10-25 05:39:06 -04:00
|
|
|
The behaviour of linting can be configured with a variety of options,
|
|
|
|
documented in [the Vim help file](doc/ale.txt). For more information on the
|
|
|
|
options ALE offers, consult `:help ale-options` for global options and `:help
|
|
|
|
ale-linter-options` for options specified to particular linters.
|
|
|
|
|
2017-05-20 14:01:12 -04:00
|
|
|
ALE can fix files with the `ALEFix` command. Functions need to be configured
|
|
|
|
for different filetypes with the `g:ale_fixers` variable. See `:help ale-fix`.
|
|
|
|
|
2016-10-25 05:39:06 -04:00
|
|
|
<a name="installation"></a>
|
|
|
|
|
|
|
|
## 3. Installation
|
|
|
|
|
|
|
|
To install this plugin, you should use one of the following methods.
|
|
|
|
For Windows users, replace usage of the Unix `~/.vim` directory with
|
2017-07-19 08:36:30 -04:00
|
|
|
`%USERPROFILE%\vimfiles`, or another directory if you have configured
|
2016-10-25 05:39:06 -04:00
|
|
|
Vim differently. On Windows, your `~/.vimrc` file will be similarly
|
|
|
|
stored in `%USERPROFILE%\_vimrc`.
|
|
|
|
|
2017-07-19 08:36:30 -04:00
|
|
|
<a name="standard-installation"></a>
|
2016-10-25 05:39:06 -04:00
|
|
|
|
2017-07-19 08:36:30 -04:00
|
|
|
### 3.i. Installation with Vim package management
|
2016-10-25 05:39:06 -04:00
|
|
|
|
2017-07-19 08:36:30 -04:00
|
|
|
In Vim 8 and NeoVim, you can install plugins easily without needing to use
|
|
|
|
any other tools. Simply clone the plugin into your `pack` directory.
|
|
|
|
|
2017-07-19 08:37:40 -04:00
|
|
|
#### Vim 8 on Unix
|
2016-10-25 05:39:06 -04:00
|
|
|
|
|
|
|
```bash
|
2017-07-19 08:36:30 -04:00
|
|
|
mkdir -p ~/.vim/pack/git-plugins/start
|
|
|
|
git clone https://github.com/w0rp/ale.git ~/.vim/pack/git-plugins/start/ale
|
2016-10-25 05:39:06 -04:00
|
|
|
```
|
|
|
|
|
2017-07-19 08:37:40 -04:00
|
|
|
#### NeoVim on Unix
|
2016-10-25 05:39:06 -04:00
|
|
|
|
2017-07-19 08:36:30 -04:00
|
|
|
```bash
|
|
|
|
mkdir -p ~/.local/share/nvim/site/pack/git-plugins/start
|
|
|
|
git clone https://github.com/w0rp/ale.git ~/.local/share/nvim/site/pack/git-plugins/start/ale
|
|
|
|
```
|
2016-10-25 05:39:06 -04:00
|
|
|
|
2017-07-19 08:37:40 -04:00
|
|
|
#### Vim 8 on Windows
|
2016-10-25 05:39:06 -04:00
|
|
|
|
2017-07-19 08:36:30 -04:00
|
|
|
```bash
|
|
|
|
# Run these commands in the "Git for Windows" Bash terminal
|
|
|
|
mkdir -p ~/vimfiles/pack/git-plugins/start
|
|
|
|
git clone https://github.com/w0rp/ale.git ~/vimfiles/pack/git-plugins/start/ale
|
2016-10-25 05:39:06 -04:00
|
|
|
```
|
|
|
|
|
2017-07-19 08:37:40 -04:00
|
|
|
#### Generating documentation
|
2016-10-25 05:39:06 -04:00
|
|
|
|
2017-07-19 08:36:30 -04:00
|
|
|
You can add the following line to your vimrc files to generate documentation
|
|
|
|
tags automatically, if you don't have something similar already, so you can use
|
|
|
|
the `:help` command to consult ALE's online documentation:
|
2016-10-25 05:39:06 -04:00
|
|
|
|
2017-07-19 08:36:30 -04:00
|
|
|
```vim
|
|
|
|
silent! helptags ALL
|
|
|
|
```
|
|
|
|
|
|
|
|
<a name="installation-with-pathogen"></a>
|
2016-10-25 05:39:06 -04:00
|
|
|
|
2017-07-19 08:36:30 -04:00
|
|
|
### 3.ii. Installation with Pathogen
|
|
|
|
|
|
|
|
To install this module with [Pathogen](https://github.com/tpope/vim-pathogen),
|
|
|
|
you should clone this repository to your bundle directory, and ensure
|
|
|
|
you have the line `execute pathogen#infect()` in your `~/.vimrc` file.
|
|
|
|
You can run the following commands in your terminal to do so:
|
2016-10-25 05:39:06 -04:00
|
|
|
|
|
|
|
```bash
|
|
|
|
cd ~/.vim/bundle
|
|
|
|
git clone https://github.com/w0rp/ale.git
|
|
|
|
```
|
|
|
|
|
2017-07-19 08:36:30 -04:00
|
|
|
<a name="installation-with-vundle"></a>
|
2016-10-25 05:39:06 -04:00
|
|
|
|
2017-07-19 08:36:30 -04:00
|
|
|
### 3.iii. Installation with Vundle
|
2016-10-25 05:39:06 -04:00
|
|
|
|
2017-07-19 08:36:30 -04:00
|
|
|
You can install this plugin using [Vundle](https://github.com/VundleVim/Vundle.vim)
|
|
|
|
by using the path on GitHub for this repository.
|
2016-10-25 05:39:06 -04:00
|
|
|
|
|
|
|
```vim
|
2017-07-19 08:36:30 -04:00
|
|
|
Plugin 'w0rp/ale'
|
2016-10-25 05:39:06 -04:00
|
|
|
```
|
|
|
|
|
2017-07-19 08:36:30 -04:00
|
|
|
See the Vundle documentation for more information.
|
2016-10-25 05:39:06 -04:00
|
|
|
|
2017-02-23 17:51:08 -05:00
|
|
|
<a name="contributing"></a>
|
|
|
|
|
|
|
|
## 4. Contributing
|
|
|
|
|
|
|
|
If you would like to see support for more languages and tools, please
|
|
|
|
[create an issue](https://github.com/w0rp/ale/issues)
|
|
|
|
or [create a pull request](https://github.com/w0rp/ale/pulls).
|
|
|
|
If your tool can read from stdin or you have code to suggest which is good,
|
|
|
|
support can be happily added for it.
|
|
|
|
|
|
|
|
If you are interested in the general direction of the project, check out the
|
|
|
|
[wiki home page](https://github.com/w0rp/ale/wiki). The wiki includes a
|
|
|
|
Roadmap for the future, and more.
|
|
|
|
|
2017-04-20 11:02:51 -04:00
|
|
|
If you'd liked to discuss the project more directly, check out the `#vim-ale` channel
|
|
|
|
on Freenode. Web chat is available [here](https://webchat.freenode.net/?channels=vim-ale).
|
|
|
|
|
2016-10-25 05:39:06 -04:00
|
|
|
<a name="faq"></a>
|
|
|
|
|
2017-02-23 17:51:08 -05:00
|
|
|
## 5. FAQ
|
2016-10-25 05:39:06 -04:00
|
|
|
|
|
|
|
<a name="faq-disable-linters"></a>
|
|
|
|
|
2017-02-23 17:51:08 -05:00
|
|
|
### 5.i. How do I disable particular linters?
|
2016-09-19 17:19:21 -04:00
|
|
|
|
|
|
|
By default, all available tools for all supported languages will be run.
|
|
|
|
If you want to only select a subset of the tools, simply create a
|
|
|
|
`g:ale_linters` dictionary in your vimrc file mapping filetypes
|
|
|
|
to lists of linters to run.
|
|
|
|
|
|
|
|
```vim
|
|
|
|
let g:ale_linters = {
|
|
|
|
\ 'javascript': ['eslint'],
|
|
|
|
\}
|
|
|
|
```
|
|
|
|
|
|
|
|
For all languages unspecified in the dictionary, all possible linters will
|
|
|
|
be run for those languages, just as when the dictionary is not defined.
|
|
|
|
Running many linters should not typically obstruct editing in Vim,
|
|
|
|
as they will all be executed in separate processes simultaneously.
|
|
|
|
|
|
|
|
This plugin will look for linters in the [`ale_linters`](ale_linters) directory.
|
|
|
|
Each directory within corresponds to a particular filetype in Vim, and each file
|
|
|
|
in each directory corresponds to the name of a particular linter.
|
|
|
|
|
2016-10-25 05:39:06 -04:00
|
|
|
<a name="faq-keep-signs"></a>
|
2016-10-02 04:22:24 -04:00
|
|
|
|
2017-02-23 17:51:08 -05:00
|
|
|
### 5.ii. How can I keep the sign gutter open?
|
2016-10-25 05:39:06 -04:00
|
|
|
|
|
|
|
You can keep the sign gutter open at all times by setting the
|
|
|
|
`g:ale_sign_column_always` to 1
|
2016-09-26 10:55:26 -04:00
|
|
|
|
|
|
|
```vim
|
|
|
|
let g:ale_sign_column_always = 1
|
|
|
|
```
|
|
|
|
|
2016-10-25 05:39:06 -04:00
|
|
|
<a name="faq-change-signs"></a>
|
|
|
|
|
2017-02-23 17:51:08 -05:00
|
|
|
### 5.iii. How can I change the signs ALE uses?
|
2016-10-02 04:22:24 -04:00
|
|
|
|
|
|
|
Use these options to specify what text should be used for signs:
|
|
|
|
|
|
|
|
```vim
|
|
|
|
let g:ale_sign_error = '>>'
|
|
|
|
let g:ale_sign_warning = '--'
|
|
|
|
```
|
|
|
|
|
2017-01-30 10:22:14 -05:00
|
|
|
ALE sets some background colors automatically for warnings and errors
|
|
|
|
in the sign gutter, with the names `ALEErrorSign` and `ALEWarningSign`.
|
|
|
|
These colors can be customised, or even removed completely:
|
|
|
|
|
|
|
|
```vim
|
|
|
|
highlight clear ALEErrorSign
|
|
|
|
highlight clear ALEWarningSign
|
|
|
|
```
|
|
|
|
|
2016-10-25 05:39:06 -04:00
|
|
|
<a name="faq-statusline"></a>
|
|
|
|
|
2017-02-23 17:51:08 -05:00
|
|
|
### 5.iv. How can I show errors or warnings in my statusline?
|
2016-10-07 12:48:47 -04:00
|
|
|
|
2017-06-25 15:01:46 -04:00
|
|
|
[vim-airline](https://github.com/vim-airline/vim-airline) integrates with ALE
|
|
|
|
for displaying error information in the status bar. If you want to see the
|
|
|
|
status for ALE in a nice format, it is recommended to use vim-airline with ALE.
|
|
|
|
The airline extension can be enabled by adding the following to your vimrc:
|
|
|
|
|
|
|
|
```vim
|
|
|
|
" Set this. Airline will handle the rest.
|
|
|
|
let g:airline#extensions#ale#enabled = 1
|
|
|
|
```
|
|
|
|
|
|
|
|
If you don't want to use vim-airline, you can implement your own statusline
|
|
|
|
function without adding any other plugins. ALE provides a function for counting
|
|
|
|
the number of problems for this purpose, named `ale#statusline#Count`.
|
2016-10-07 12:48:47 -04:00
|
|
|
|
2017-05-24 05:38:20 -04:00
|
|
|
Say you want to display all errors as one figure, and all non-errors as another
|
|
|
|
figure. You can do the following:
|
2016-10-07 12:48:47 -04:00
|
|
|
|
2017-05-24 05:38:20 -04:00
|
|
|
```vim
|
|
|
|
function! LinterStatus() abort
|
2017-05-25 08:33:29 -04:00
|
|
|
let l:counts = ale#statusline#Count(bufnr(''))
|
2016-10-07 12:48:47 -04:00
|
|
|
|
2017-05-24 05:38:20 -04:00
|
|
|
let l:all_errors = l:counts.error + l:counts.style_error
|
|
|
|
let l:all_non_errors = l:counts.total - l:all_errors
|
2016-10-07 12:48:47 -04:00
|
|
|
|
2017-05-24 05:38:20 -04:00
|
|
|
return l:counts.total == 0 ? 'OK' : printf(
|
|
|
|
\ '%dW %dE',
|
|
|
|
\ all_non_errors,
|
|
|
|
\ all_errors
|
|
|
|
\)
|
|
|
|
endfunction
|
|
|
|
|
|
|
|
set statusline=%{LinterStatus()}
|
2016-10-07 12:48:47 -04:00
|
|
|
```
|
|
|
|
|
2017-05-24 05:38:20 -04:00
|
|
|
See `:help ale#statusline#Count()` for more information.
|
2016-10-07 12:48:47 -04:00
|
|
|
|
2016-10-25 05:39:06 -04:00
|
|
|
<a name="faq-echo-format"></a>
|
2016-10-10 07:53:54 -04:00
|
|
|
|
2017-02-23 17:51:08 -05:00
|
|
|
### 5.v. How can I change the format for echo messages?
|
2016-10-10 07:53:54 -04:00
|
|
|
|
|
|
|
There are 3 global options that allow customizing the echoed message.
|
|
|
|
|
|
|
|
- `g:ale_echo_msg_format` where:
|
2017-04-12 16:22:56 -04:00
|
|
|
* `%s` is the error message itself
|
|
|
|
* `%linter%` is the linter name
|
|
|
|
* `%severity` is the severity type
|
2016-10-10 07:53:54 -04:00
|
|
|
- `g:ale_echo_msg_error_str` is the string used for error severity.
|
|
|
|
- `g:ale_echo_msg_warning_str` is the string used for warning severity.
|
|
|
|
|
|
|
|
So for example this:
|
|
|
|
|
|
|
|
```vim
|
|
|
|
let g:ale_echo_msg_error_str = 'E'
|
2016-10-10 10:53:09 -04:00
|
|
|
let g:ale_echo_msg_warning_str = 'W'
|
|
|
|
let g:ale_echo_msg_format = '[%linter%] %s [%severity%]'
|
2016-10-10 07:53:54 -04:00
|
|
|
```
|
|
|
|
|
|
|
|
Will give you:
|
|
|
|
|
|
|
|
![Echoed message](img/echo.png)
|
|
|
|
|
2016-10-25 05:39:06 -04:00
|
|
|
<a name="faq-autocmd"></a>
|
2016-09-19 17:04:11 -04:00
|
|
|
|
2017-02-23 17:51:08 -05:00
|
|
|
### 5.vi. How can I execute some code when ALE stops linting?
|
2016-09-19 17:04:11 -04:00
|
|
|
|
2016-10-25 05:39:06 -04:00
|
|
|
ALE runs its own [autocmd](http://vimdoc.sourceforge.net/htmldoc/autocmd.html)
|
|
|
|
event whenever has a linter has been successfully executed and processed. This
|
|
|
|
autocmd event can be used to call arbitrary functions after ALE stops linting.
|
2016-09-19 17:04:11 -04:00
|
|
|
|
|
|
|
```vim
|
2016-10-25 05:39:06 -04:00
|
|
|
augroup YourGroup
|
|
|
|
autocmd!
|
2016-10-25 10:46:18 -04:00
|
|
|
autocmd User ALELint call YourFunction()
|
2016-10-25 05:39:06 -04:00
|
|
|
augroup END
|
2016-09-19 17:04:11 -04:00
|
|
|
```
|
2016-10-24 17:09:41 -04:00
|
|
|
|
|
|
|
<a name="faq-navigation"></a>
|
|
|
|
|
2017-02-23 17:51:08 -05:00
|
|
|
### 5.vii. How can I navigate between errors quickly?
|
2016-10-24 17:09:41 -04:00
|
|
|
|
|
|
|
ALE offers some commands with `<Plug>` keybinds for moving between warnings and
|
|
|
|
errors quickly. You can map the keys Ctrl+j and Ctrl+k to moving between errors
|
|
|
|
for example:
|
|
|
|
|
|
|
|
```vim
|
|
|
|
nmap <silent> <C-k> <Plug>(ale_previous_wrap)
|
|
|
|
nmap <silent> <C-j> <Plug>(ale_next_wrap)
|
|
|
|
```
|
|
|
|
|
|
|
|
For more information, consult the online documentation with
|
|
|
|
`:help ale-navigation-commands`.
|
2016-12-01 04:52:43 -05:00
|
|
|
|
|
|
|
<a name="faq-lint-on-save"></a>
|
|
|
|
|
2017-02-23 17:51:08 -05:00
|
|
|
### 5.viii. How can I run linters only when I save files?
|
2016-12-01 04:52:43 -05:00
|
|
|
|
|
|
|
ALE offers an option `g:ale_lint_on_save` for enabling running the linters
|
2017-03-27 15:36:35 -04:00
|
|
|
when files are saved. This option is enabled by default. If you only
|
|
|
|
wish to run linters when files are saved, you can turn the other
|
|
|
|
options off.
|
2016-12-01 04:52:43 -05:00
|
|
|
|
|
|
|
```vim
|
|
|
|
" Write this in your vimrc file
|
2017-03-30 18:21:37 -04:00
|
|
|
let g:ale_lint_on_text_changed = 'never'
|
2016-12-01 04:52:43 -05:00
|
|
|
" You can disable this option too
|
|
|
|
" if you don't want linters to run on opening a file
|
|
|
|
let g:ale_lint_on_enter = 0
|
|
|
|
```
|
2017-02-05 10:34:35 -05:00
|
|
|
|
2017-03-27 15:36:35 -04:00
|
|
|
If for whatever reason you don't wish to run linters again when you save
|
|
|
|
files, you can set `g:ale_lint_on_save` to `0`.
|
|
|
|
|
2017-02-05 10:34:35 -05:00
|
|
|
<a name="faq-quickfix"></a>
|
|
|
|
|
2017-02-23 17:51:08 -05:00
|
|
|
### 5.ix. How can I use the quickfix list instead of the loclist?
|
2017-02-05 10:34:35 -05:00
|
|
|
|
|
|
|
The quickfix list can be enabled by turning the `g:ale_set_quickfix`
|
|
|
|
option on. If you wish to also disable the loclist, you can disable
|
|
|
|
the `g:ale_set_loclist` option.
|
|
|
|
|
|
|
|
```vim
|
|
|
|
" Write this in your vimrc file
|
|
|
|
let g:ale_set_loclist = 0
|
|
|
|
let g:ale_set_quickfix = 1
|
|
|
|
```
|
|
|
|
|
|
|
|
If you wish to show Vim windows for the loclist or quickfix items
|
|
|
|
when a file contains warnings or errors, `g:ale_open_list` can be
|
|
|
|
set to `1`. `g:ale_keep_list_window_open` can be set to `1`
|
|
|
|
if you wish to keep the window open even after errors disappear.
|
|
|
|
|
|
|
|
```vim
|
|
|
|
let g:ale_open_list = 1
|
|
|
|
" Set this if you want to.
|
|
|
|
" This can be useful if you are combining ALE with
|
|
|
|
" some other plugin which sets quickfix errors, etc.
|
|
|
|
let g:ale_keep_list_window_open = 1
|
|
|
|
```
|
2017-02-11 16:18:24 -05:00
|
|
|
|
|
|
|
<a name="faq-jsx-stylelint-eslint"></a>
|
|
|
|
|
2017-02-23 17:51:08 -05:00
|
|
|
### 5.x. How can I check JSX files with both stylelint and eslint?
|
2017-02-11 16:18:24 -05:00
|
|
|
|
|
|
|
If you configure ALE options correctly in your vimrc file, and install
|
|
|
|
the right tools, you can check JSX files with stylelint and eslint.
|
|
|
|
|
|
|
|
First, install eslint and install stylelint with
|
2017-06-02 07:54:38 -04:00
|
|
|
[stylelint-processor-styled-components](https://github.com/styled-components/stylelint-processor-styled-components).
|
2017-02-11 16:18:24 -05:00
|
|
|
|
|
|
|
Supposing you have installed both tools correctly, configure your .jsx files so
|
|
|
|
`jsx` is included in the filetype. You can use an `autocmd` for this.
|
|
|
|
|
|
|
|
```vim
|
|
|
|
augroup FiletypeGroup
|
|
|
|
autocmd!
|
|
|
|
au BufNewFile,BufRead *.jsx set filetype=javascript.jsx
|
|
|
|
augroup END
|
|
|
|
```
|
|
|
|
|
|
|
|
Supposing the filetype has been set correctly, you can set the following
|
|
|
|
options in your vimrc file:
|
|
|
|
|
|
|
|
```vim
|
|
|
|
let g:ale_linters = {'jsx': ['stylelint', 'eslint']}
|
|
|
|
let g:ale_linter_aliases = {'jsx': 'css'}
|
|
|
|
```
|
|
|
|
|
|
|
|
ALE will alias the `jsx` filetype so it uses the `css` filetype linters, and
|
|
|
|
use the original Array of selected linters for `jsx` from the `g:ale_linters`
|
|
|
|
object. All available linters will be used for the filetype `javascript`, and
|
|
|
|
no linter will be run twice for the same file.
|
2017-02-16 15:59:29 -05:00
|
|
|
|
|
|
|
<a name="faq-my-battery-is-sad"></a>
|
|
|
|
|
2017-02-23 17:51:08 -05:00
|
|
|
### 5.xi. Will this plugin eat all of my laptop battery power?
|
2017-02-16 15:59:29 -05:00
|
|
|
|
|
|
|
ALE takes advantage of the power of various tools to check your code. This of
|
|
|
|
course means that CPU time will be used to continuously check your code. If you
|
|
|
|
are concerned about the CPU time ALE will spend, which will of course imply
|
|
|
|
some cost to battery life, you can adjust your settings to make your CPU do
|
|
|
|
less work.
|
|
|
|
|
|
|
|
First, consider increasing the delay before which ALE will run any linters
|
|
|
|
while you type. ALE uses a timeout which is cancelled and reset every time you
|
|
|
|
type, and this delay can be increased so linters are run less often. See
|
|
|
|
`:help g:ale_lint_delay` for more information.
|
|
|
|
|
|
|
|
If you don't wish to run linters while you type, you can disable that
|
2017-03-30 18:21:37 -04:00
|
|
|
behaviour. Set `g:ale_lint_on_text_changed` to `never` or `normal`. You won't
|
|
|
|
get as frequent error checking, but ALE shouldn't block your ability to edit a
|
|
|
|
document after you save a file, so the asynchronous nature of the plugin will
|
|
|
|
still be an advantage.
|
2017-02-16 15:59:29 -05:00
|
|
|
|
|
|
|
If you are still concerned, you can turn the automatic linting off altogether,
|
|
|
|
including the option `g:ale_lint_on_enter`, and you can run ALE manually with
|
2017-06-02 10:08:54 -04:00
|
|
|
`:ALELint`.
|