Compare commits

...

924 commits

Author SHA1 Message Date
80ef6ef6a7
Find executable for shellcheck
Wanted to be able to use `shellcheck` that was installed in node_modules.
2018-03-06 23:27:59 -06:00
w0rp
0a0535546f Add a command for stopping all LSP clients 2018-03-06 10:23:55 +00:00
w0rp
b7363bef7d
Update the licence year. 2018-03-04 11:50:39 +00:00
w0rp
193a4b9336
Satisfy my own checks 2018-03-03 18:13:57 +00:00
w0rp
f476c28b29
Add deprecation warnings for old NeoVim versions and old functions 2018-03-03 17:50:09 +00:00
w0rp
08cfd5f90c
Close #1379 - Increment b:ale_linted when a buffer is checked 2018-03-03 16:22:56 +00:00
w0rp
565ffa0dc5 Use the configured mdl executable, escape it in the command, and add test for it 2018-03-03 13:27:19 +00:00
w0rp
857723e7d5
Merge pull request #1377 from joshleeb/markdown-mdl-options
Add options for markdown_mdl linter
2018-03-03 13:16:27 +00:00
Olaf Alders
8a77290553 [WIP] Begin to distinguish between Perl warnings and errors (#933)
* If a Perl script compiles, there are only warnings and no errors

* Let the first Perl error or warning win.

Take the following example:

***

sub foo {
    my $thing;

***

This might have the following messages when we compile it:

Missing right curly or square bracket at warning.pl line 7, at end of
line
syntax error at warning.pl line 7, at EOF
warning.pl had compilation errors.

With the current behaviour, we just get a "syntax error" message, which
isn't all that helpful.  With this patch we get "Missing right curly or
square bracket".

* Fix variable scope and pattern matching syntax

* Use named variable to enhance clarity when matching Perl output

* Add more tests for Perl linter

* Remove unnecessary parens

* Simplify check for pattern match
2018-03-02 21:04:52 +00:00
w0rp
b6bf6ecdbc Try to fix it again 2018-03-02 20:57:55 +00:00
w0rp
540952ca8e Try to fix a test which is failing on Windows 2018-03-02 20:47:21 +00:00
w0rp
ad7ffe2875
Merge pull request #1390 from jdeniau/jd-feat-phpCsFixer
add php-cs-fixer to list of fixers
2018-03-02 20:40:31 +00:00
w0rp
2c2c7ceb1d Fix #1384 - Handle warnings and suggestions for tsserver 2018-03-02 20:33:45 +00:00
Andrew Crites
acbe527e15 Option to open lists vertically (#1381)
* Add configuration option to open lists vertically

* Add tests, clean up vertical list config

* Vertical list option cleanup

* Use is# for tests
* Order properties in documentation alphabetically
2018-03-02 20:22:29 +00:00
w0rp
2096562899 Make updating linter results slightly faster when the list is empty 2018-03-02 12:10:27 +00:00
Julien Deniau
fbbb8c17d9 add php-cs-fixer to list of fixers 2018-03-01 15:48:47 +01:00
w0rp
1d0690f6d7
Merge pull request #1387 from oalders/oalders-perl-docs
Explain in more detail why perl checks are disabled by default
2018-02-28 15:42:04 +00:00
Olaf Alders
aea5de282e Explain in more detail why perl checks are disabled by default 2018-02-28 10:26:44 -05:00
w0rp
f64db199f1 Fix a typo in the documentation 2018-02-26 17:04:54 +00:00
Josh Leeb-du Toit
7e20d9c639 Add options for markdown_mdl linter 2018-02-26 20:10:55 +11:00
w0rp
7ec684206c
Merge pull request #1376 from zchee/doc-cpp-duplicate-tag
doc/cpp: fix duplicate ale_cpp_flawfinder_executable help tag
2018-02-25 15:09:52 +00:00
Koichi Shiraishi
b15706d9a9
doc/cpp: fix duplicate ale_cpp_flawfinder_executable help tag
both of 'g:' prefix.
2018-02-26 00:04:56 +09:00
w0rp
d86371cd29
Merge pull request #1375 from zchee/doc-c-duplicate-tag
doc/c: fix duplicate ale_c_flawfinder_executable help tag
2018-02-25 14:39:49 +00:00
Koichi Shiraishi
cfa3e6a924
doc/c: fix duplicate ale_c_flawfinder_executable help tag 2018-02-25 23:31:38 +09:00
Christian-Gibbons
82f8a04e18 New linter: Flawfinder (#1361)
* Flawfinder support added for C and C++

A minor modification to gcc handler was made to support flawfinder's
single-line output format that does not have a space following the
colon denoting the warning level.  gcc handler still passes its
Vader tests after this modification.

* Documentation fixes

* Revert documentation regression

* Added Flawfinder to table of contents

* Removed trailing whitespace

* Follow ALE conventions better

Added additional documentation and Vader tests
2018-02-25 14:11:04 +00:00
w0rp
478a2883a6 #1363 Make ale#engine#IsCheckingBuffer part of the public API 2018-02-25 12:57:54 +00:00
w0rp
0ddf16194d Fix #1306 - Tell users how to automatically close the loclist window in the documentation 2018-02-25 12:43:20 +00:00
w0rp
0292e5a458
Merge pull request #1371 from idbrii/fix-unity-example
Add Unity project path to Unity example in docs
2018-02-25 12:22:58 +00:00
w0rp
b6ccd60dd0
Merge pull request #1351 from svanharmelen/f-issue-936
This fixes issue #936 by linting the whole package
2018-02-25 11:54:05 +00:00
w0rp
b5209d31e8 go vet can only check files now 2018-02-25 11:53:36 +00:00
John Eikenberry
4941bd8d0e Fix #1358, fix #1369 - Lint the package on save for go vet instead 2018-02-25 11:39:45 +00:00
David Briscoe
8b304f77b7 Add Unity project path to Unity example in docs
For Ale to recognize the symbols in your project, you need to point it
at where Unity builds your assemblies. Add this path to the example.
2018-02-23 14:52:25 -08:00
Sander van Harmelen
ab5257c344 This fixes issue #936 by linting the whole package 2018-02-20 16:11:35 +01:00
w0rp
89f8d3e456 Fix #1336 - Print a friendly message when using invalid function names for fixers 2018-02-18 10:13:30 +00:00
w0rp
5915a0ee39 Escape the ponyc executable 2018-02-18 10:06:40 +00:00
w0rp
608b6dafd4
Merge pull request #1343 from kevinkjt2000/ponyc
Add Support for Ponylang
2018-02-18 09:48:35 +00:00
w0rp
5972b97223 #476 Make F401 a warning and E112 a syntax error 2018-02-18 09:44:04 +00:00
w0rp
fcb7932d7d
Merge pull request #1345 from dfalling/fix-reason-help-title
Fix Reason help title in README.md
2018-02-13 18:51:33 +00:00
Dennis Falling
f979da54d4 Fix reason help reference
`ale-integration-reason-merlin` doesn't exist, changed to
`ale-reasonml-ols`
2018-02-12 22:52:39 -05:00
Kevin Tindall
716b46e10d
functional pony linter 2018-02-10 13:17:53 -06:00
w0rp
a3329ef3fc
Merge pull request #1333 from fennerm/master
Fix the lintr::lint_package command
2018-02-06 09:46:22 +00:00
Fenner Macrae
c2ab885384 Removed trailing whitespaces 2018-02-05 11:33:23 -08:00
Fenner Macrae
5dc884b24d Fixed lintr::lint_package command 2018-02-05 09:54:15 -08:00
w0rp
91b7a75afb
Merge pull request #1332 from fennerm/master
Add lint_package support to lintr
2018-02-05 09:15:48 +00:00
Fenner Macrae
dda132c1a2 Add lint_package support to lintr 2018-02-04 10:57:52 -08:00
w0rp
33b3331b04 #1206 Add support for setting options for gobuild, and escape paths better 2018-02-04 13:55:09 +00:00
w0rp
0f822b063c Fix #1330 - Find isort configs better by changing the working directory 2018-02-04 13:16:44 +00:00
w0rp
31e0f48d62
Merge pull request #1326 from michaelquinn32/patch-1
Call lintr library before linting
2018-02-04 11:38:05 +00:00
w0rp
7c4decf804
Merge pull request #1329 from blyoa/prettier-vue
Add prettier fixer support to vue
2018-02-02 13:23:42 +00:00
Michael Quinn
b13f290390 Update formatting and tests. 2018-01-31 18:06:35 -08:00
blyoa
23db293bdf Add prettier fixer support to vue 2018-02-01 02:30:02 +09:00
w0rp
52fe924a13
Merge pull request #1308 from lorenzo/patch-1
Improving hadolint checker
2018-01-30 16:04:44 +00:00
Michael Quinn
bb095df25e
Call lintr library before linting
This solves namespace issues related to the objects used to set linting options.
2018-01-29 20:18:14 -08:00
Jose Lorenzo Rodriguez
4df87eaadd
Added tests for hadolint 2018-01-29 22:21:50 +01:00
w0rp
c589e3d57d
Merge pull request #1322 from datanoise/master
fixed rust errors parsing
2018-01-29 13:54:50 +00:00
Kent Sibilev
863fb60695 updated rust handler test case 2018-01-28 18:35:46 -05:00
w0rp
1832240cff
Merge pull request #1321 from butlerx/feature/po
add po support with proselint, writegood, msgfmt and alex
2018-01-28 12:49:18 +00:00
w0rp
65fc5d11c7 Fix #1038 - Automatically detect and use htmlhint configuration files 2018-01-28 12:44:42 +00:00
w0rp
7ef55a8615 #1303 jq isn't a Node program 2018-01-28 11:51:20 +00:00
Kent Sibilev
ea60fcea39 fixed rust errors parsing
use correct column values instead of absolute byte positions
2018-01-27 16:15:29 -05:00
butlerx
9dad25778f
add po support with proselint, writegood, msgfmt and alex 2018-01-27 12:17:15 +00:00
w0rp
bc63325881
Merge pull request #1311 from butlerx/update/prettier-md
add prettier support for graphql
2018-01-26 17:30:00 +00:00
w0rp
34e6368610 #1316 Mention that the quickfix list option shouldn't be used with :cfdo 2018-01-25 14:54:39 +00:00
w0rp
dffc162dd6
Merge pull request #1313 from rhysd/fixjson-local-install
fixjson: Add support for local installation
2018-01-25 10:29:51 +00:00
rhysd
ef898fa303 fixjson: Add support for local installation 2018-01-25 07:21:25 +09:00
butlerx
be47e37bbc
add prettier support for graphql 2018-01-24 15:25:25 +00:00
w0rp
9849c79ff7
Merge pull request #1157 from elebow/eruby-add-erubi-linter
[eruby] Add erubi linter
2018-01-24 10:40:57 +00:00
rhysd
b28a6ddbe4 Support fixing JSON files with fixjson 2018-01-24 10:36:31 +00:00
Rafael Rinaldi
d562d53102 Add jq as a JSON fixer 2018-01-24 10:12:29 +00:00
José Lorenzo Rodríguez
dd413a4732
Improving hadolint checker
- Displaying dockerfile parse errors instead of silently failing
- Adding error detail with link to the docs
2018-01-23 22:46:59 +01:00
Fran Casas
038789f0ed Add Elixir linter for dialyxir (#1257)
* Add Elixir linter for dialyxir

* Update doc/ale.txt with dialyxir

* Keep elixir tools alphabetically ordered in README

* Add a missing entry for dialyxir to the main documentation file.
2018-01-22 12:21:07 +00:00
w0rp
acf9c92ab4
Merge pull request #1301 from dezza/patch-2
Fix #1246 - Newer ESLint outputs to stderr
2018-01-20 14:41:09 +00:00
Christoffer Aasted
7cd25181b2
Fix #1246 - Newer ESLint outputs to stderr
I think Vader test still applies for this one.
2018-01-20 03:20:13 +01:00
w0rp
1d3b542031
Merge pull request #1266 from sharils/patch-1
Work around hot-reloading issue
2018-01-19 17:18:49 +00:00
w0rp
8675bfc4ab
Merge pull request #1287 from rhysd/prettier-markdown
Enable prettier to format markdown files
2018-01-19 17:16:00 +00:00
w0rp
7b50b3ec82
Merge pull request #1272 from Codezerker/master
Add a luac linter for Lua
2018-01-19 17:10:29 +00:00
w0rp
a5ec4143d2 Fix the didSave tests so they work in NeoVim 0.1.7, and do not send the message for tsserver 2018-01-19 16:50:04 +00:00
Rafael Lerm
042dec059a Send didSave message to LSP-based linters (#1295)
* Also send didSave to LSP linters.
* Add tests for messages sent to LSP linters.
2018-01-19 16:40:55 +00:00
w0rp
eddda2f8b5 Fix a command wrapper test on Windows 2018-01-17 18:11:20 +00:00
w0rp
045c92ed65 Fix #1298 - Escape commands for PowerShell 2018-01-17 18:08:17 +00:00
Eddie Lebow
aa29c91cdc [eruby] Add erubi linter
Erubi is yet another parser for eRuby. This is the default parser in
Rails as of version 5.1. It supports some additional syntax with similar
behavior to Rails' extensions to the language, though incompatible.
Rails currently still recommends their own syntax, so GetCommand still
has to do the translation introduced in
https://github.com/w0rp/ale/pull/1114 .

Erubi does not supply an executable—It is intended to be invoked only
from within a Ruby program. In this case, a one-liner on the command
line.
2018-01-16 00:38:35 -05:00
rhysd
13c839cf16 Enable prettier to format markdown files 2018-01-15 11:28:56 +09:00
w0rp
f6af75aac4
Merge pull request #1268 from bbannier/master
Make it possible to inject flags of protoc invocation.
2018-01-12 20:43:43 +00:00
w0rp
e18aba1d7e
Merge pull request #1270 from kevinkjt2000/test-ghc-options
test for ghc options
2018-01-12 12:11:33 +00:00
w0rp
5005871644
Merge pull request #1256 from jonatanolofsson/master
Fix #1255: Move extra clang-check args to before user options
2018-01-12 12:09:30 +00:00
w0rp
65fa901ef0
Merge pull request #1275 from ipetkov/cargo-features
Teach ALE about cargo features and add some configuration options
2018-01-12 12:04:26 +00:00
w0rp
ba1540a545 Show only the master status for AppVeyor 2018-01-12 08:55:31 +00:00
Ivan Petkov
2ef45ab745
Teach ALE about cargo features and add some configuration options
* When working on rust/cargo projects of varying sizes, it may be useful
to either build all possible features (i.e. lint all possible
conditionally compiled code), or even turn off other features for a
quicker edit-lint cycle (e.g. for large projects with large build times)
* Added a g:ale_rust_cargo_default_feature_behavior flag for instructing
cargo to not build any features at all (via `--no-default-features`),
building default features (via no extra flags), or building all possible
features (via `--all-features`)
* Also added a g:ale_rust_cargo_include_features flag for including
arbitrary features to be checked by cargo. When coupled with
g:ale_rust_cargo_default_feature_behavior this allows for full
customization of what features are checked and which ones are ignored
2018-01-11 19:24:44 -08:00
w0rp
adba2bd919 Allow syntax errors for mypy to be ignored 2018-01-11 16:43:10 +00:00
sharils
29acafdaf4
Work around hot-reloading issue
See https://github.com/phoenixframework/phoenix/issues/1165 for more detail
2018-01-10 20:53:02 +08:00
jiangzhi.xie
547716eabb Fix the doc style for ale-lua 2018-01-08 23:39:04 +08:00
jiangzhi.xie
112fcf7dd5 Add a luac linter for Lua 2018-01-08 23:32:02 +08:00
w0rp
68d4a2216c
Fix a syntax error in a test 2018-01-08 13:28:01 +00:00
Kevin Tindall
ff388bbcd5
test for ghc options 2018-01-07 11:41:06 -06:00
Benjamin Bannier
b5a5cdf920 Make it possible to inject flags of protoc invocation.
Typically proto files depend on and make use of proto definitions in
other files. When invoking protoc user can supply paths to inspect for
dependencies.

This patch makes it possible to configure flags passed to protoc. This
makes it e.g., possible to change include paths of the linter's protoc
invocation.
2018-01-07 17:56:56 +01:00
Benjamin Bannier
eecbacb742 Removed unneeded SetDirectory call in proto handler test.
The test already handled arbitrary paths reasonably well, but setting
the directory interfered via leakage with others tests for some reason.

This patch removes the call to `SetDirectory` in the fixture setup and
the subsequent cleanup in the teardown as they are not required.
2018-01-07 17:54:21 +01:00
w0rp
f1747901cc
Merge pull request #1262 from rhysd/avoid-old-tidy
html: Avoid old tidy on macOS
2018-01-07 16:02:49 +00:00
Jelte Fennema
b6d1c41925 Go: Add gotype support (#1099) 2018-01-07 12:11:01 +00:00
w0rp
c9d66b861b Show more ALE variables in ALEInfo 2018-01-07 12:01:20 +00:00
rhysd
7a1a534305 Explain /usr/bin/tidy is ignored on macOS and how to install the latest tidy 2018-01-06 20:00:36 +09:00
rhysd
401b964e9c html: Avoid old tidy on macOS
On macOS, Apple's command line toolchain installs very old `tidy`
command (It was released on 31 Oct 2006). It does not consider new specs
such as HTML5 so we should avoid it.
2018-01-03 01:50:31 +09:00
Jonatan Olofsson
ff8d4c5286 Fix #1255: Move extra clang-check args to before user options 2018-01-02 16:09:38 +01:00
w0rp
5285b0b332
Merge pull request #1260 from kevinkjt2000/add-ghc-options
haskell_ghc_options are now added to the ghc command
2018-01-02 14:05:40 +00:00
w0rp
e98a3899da
Merge pull request #1254 from bkhl/master
Don't use temporary file for rustfmt fixer
2018-01-02 13:36:20 +00:00
w0rp
80342b119a
Merge pull request #1252 from nthapaliya/fish-shell-linter
Fish shell linter
2018-01-02 13:32:59 +00:00
w0rp
d9a3722e06 Merge branch 'add-fountain-proselint-support' 2018-01-02 13:23:00 +00:00
w0rp
1e34210f9a Fix some bad indentation 2018-01-02 13:22:40 +00:00
Kevin Tindall
681c35169f
add ghc entry to the ToC 2018-01-01 22:33:43 -06:00
Kevin Tindall
d8f71c46da
haskell_ghc_options are now added to the ghc command 2018-01-01 22:21:21 -06:00
Björn Lindström
b0eaddadc9 Don't use temporary file for rustfmt fixer
rustfmt normally acts on a file in place, and applies configuration
from rustfmt.toml files according to the path of the file.

Using a temporary file for rustfmt breaks this functionality, so
removing the '%t' from the rustfmt command.
2017-12-27 23:12:57 +07:00
Niraj Thapaliya
3b0c67e42c Add handler test 2017-12-26 14:10:28 -06:00
Niraj Thapaliya
c90b45c559 Edit README and help 2017-12-26 14:10:28 -06:00
Niraj Thapaliya
e2d3dca486 Support for fish file linting 2017-12-26 12:25:17 -06:00
w0rp
c165c7c5d1 Fix #1251 - Handle an empty list in the line callback when NeoVim crashes 2017-12-26 18:15:59 +00:00
w0rp
48cae6afc4
Merge pull request #1250 from yaryabu/patch-1
Fix c# documentation variable typo
2017-12-26 18:09:38 +00:00
Yaroslav Ryabukha
0548cf9177
Fix c# documentation variable typo 2017-12-25 16:40:25 +03:00
Jansen Mitchell
4d4d2d8122 Add four spaces, not tabs. 2017-12-20 22:53:03 -06:00
Jansen Mitchell
2c9c5dec1e Add Fountain with proselint info to ale.txt. Add Fountain online documentation. 2017-12-20 12:39:10 -06:00
w0rp
e43e7065da Fix #1115 - Add support for wrapping all commands with an option 2017-12-20 12:20:38 +00:00
w0rp
2495744fc3 Fix the gitlint test 2017-12-20 10:49:23 +00:00
w0rp
87ffc9b55c Make the error codes configurable for gitlint 2017-12-20 10:46:08 +00:00
Nick Diego Yamane
d4b43d23f4 Add support for linting git commit message files (#1233) 2017-12-20 10:10:07 +00:00
Jansen Mitchell
537d162ee7 Add Fountain and linter support information to README. 2017-12-19 21:57:25 -06:00
Jansen Mitchell
4b56b91ac8 Add support for Fountain with proselint. 2017-12-19 20:27:12 -06:00
w0rp
1568bf8128 Fix the mscs tests on Windows, and use the improved Simplify for all tests instead. 2017-12-19 18:23:09 +00:00
w0rp
73f61514c9 Fix #1031 - Make the rust flags configurable 2017-12-19 18:10:29 +00:00
w0rp
cc8e5502c8 Fix #1240 - Parse line and column numbers for fatal embertemplatelint errors 2017-12-19 17:42:51 +00:00
w0rp
0ad2547997 Fix mcsc paths and escaping for Windows 2017-12-19 17:34:34 +00:00
w0rp
647c798eb7 Fix #1226 - Update the mcsc documentation to make it clearer how to use it 2017-12-19 16:54:46 +00:00
w0rp
f74e22b938 Clean up ALE linter buffer data when buffers are deleted, not unloaded 2017-12-19 15:35:57 +00:00
w0rp
d2bea5c310 Allow the cursor messages to be disabled while Vim is running 2017-12-19 14:43:24 +00:00
w0rp
a7d51afda5
Merge pull request #1221 from JelteF/patch-1
Fix erb linter for puppet style erb templates
2017-12-19 14:09:00 +00:00
Jelte Fennema
532594839c erb: fix tests 2017-12-19 13:21:30 +01:00
w0rp
2cacba5758 Fix #1228 - Reset the cursor if echoing a message moves it 2017-12-19 12:06:08 +00:00
w0rp
91090f1af8
Merge pull request #1239 from languitar/vale-suggestion
Missing warning level 'suggestion' for vale
2017-12-18 23:36:13 +00:00
Johannes Wienke
79aaec5a99 Missing warning level 'suggestion' for vale
Vale can also, optionally, raise suggestions. These weren't covered yet.
2017-12-18 17:10:57 +01:00
w0rp
5577d567d1
Merge pull request #1238 from languitar/alex-from-file
Make alex a file linter
2017-12-18 15:28:27 +00:00
Johannes Wienke
1e574ed5f7 Make alex a file linter
alex does not find its configuration file when using temporary files for
input.
2017-12-18 15:26:52 +01:00
w0rp
fdaac9bd78 Fix #1210 - Fix a Windows path issue which broke TSLint 2017-12-18 13:27:59 +00:00
w0rp
31241e9ed8 Get the TSLint tempname test running on Windows 2017-12-18 12:01:05 +00:00
w0rp
e0c3cbd16f Remove some now redundant echo code 2017-12-18 11:22:24 +00:00
w0rp
8afd9a70a6 #1212 Fix some echo cursor flashing by only echoing once all linters are finished. 2017-12-18 11:14:10 +00:00
w0rp
e4821c7f2f Indicate that 4.2.0 is no longer strictly required for prettier-eslint, and add links for prettier-eslint and prettier-standard 2017-12-18 10:37:21 +00:00
w0rp
af7eb2b979 Sort the list of supported tools and add vale to more languages 2017-12-18 10:28:49 +00:00
Johannes Wienke
1626fce1c9 Enable the vale linter also for further markup languages (#1230)
* Enable the vale linter also for LaTeX
* Enable the vale linter for rst files
2017-12-18 10:15:00 +00:00
w0rp
fdde8af894
Merge pull request #1232 from languitar/vale-json
Use JSON output with vale
2017-12-18 10:11:57 +00:00
w0rp
30c5bb3772
Merge pull request #1237 from danpker/add-python-venv-folder
Add python venv folder
2017-12-18 09:54:32 +00:00
Daniel Parker
938c150880 Update docs 2017-12-18 09:44:02 +00:00
Daniel Parker
d3cf02ecda Add support for Vritual Env folder called venv 2017-12-18 09:33:11 +00:00
w0rp
65a99c1615
Merge pull request #1235 from nickdiego/master
Fix typos in flake8 test messages
2017-12-17 21:51:21 +00:00
Nick Diego Yamane
ad1aee0b89 Fix typos in flake8 test messages
Signed-off-by: Nick Diego Yamane <nick.diego@gmail.com>
2017-12-17 16:45:57 -04:00
Johannes Wienke
96b90b45db Use JSON output with vale
Switches all vale instances to JSON output and provides an appropriate
handler for that. Without JSON, no end_col is provided and text
highlighting only catches the first character of every result.
2017-12-17 16:49:57 +01:00
w0rp
c4956657dc
Merge pull request #1220 from languitar/linter-alex
Add a linter for alex
2017-12-17 13:11:49 +00:00
w0rp
fc151d7b30
Merge pull request #1222 from srathbone/master
Fix PHP linter to support PHP 7.2 lint output
2017-12-17 12:41:28 +00:00
w0rp
55e09a4a2d Look for mypy.ini to find Python project roots too 2017-12-17 12:38:50 +00:00
w0rp
7e793c9d71 Fix a typo 2017-12-17 12:36:07 +00:00
w0rp
09d3ecc49b Clean up some doc formatting 2017-12-17 12:11:30 +00:00
w0rp
7284270120 Fix some right margin alignment 2017-12-17 12:10:07 +00:00
w0rp
c8ee402cce
Merge pull request #1203 from Carpetsmoker/autocmd-start
Add ALEStartLint autocmd
2017-12-17 12:06:57 +00:00
w0rp
a22def45b9
Merge pull request #1209 from butlerx/java-fixer
add google-java-format fixer
2017-12-17 12:00:52 +00:00
w0rp
e06f2ded9d
Update ale.txt 2017-12-17 11:58:05 +00:00
Stephen Rathbone
78d1f5f5df Fix PHP linter to support PHP 7.2 lint output 2017-12-13 21:23:18 +00:00
Jelte Fennema
e7eb272714
Fix erb linter for puppet style erb scripts 2017-12-13 14:59:59 +01:00
Johannes Wienke
0d046f5f01 Add a vader test for the message handler 2017-12-13 14:37:49 +01:00
Johannes Wienke
55ca96bd83 Add a linter for alex
https://github.com/wooorm/alex

Enabled for text-like file formats and documented in README and doc.
2017-12-13 14:37:42 +01:00
w0rp
d2a6d9a915 Fix #1216 - Suppress trailing whitespace warings for ansible-lint when the option is set 2017-12-13 11:14:31 +00:00
Martin Tournoij
4825cce1cc
Run before lint cycle, rename autocmds 2017-12-10 13:10:52 +00:00
w0rp
7a88a3605c Disable a test on Windows for now, because Windows is stupid 2017-12-10 10:12:26 +00:00
w0rp
9152effa9f Get the new test to pass on Windows 2017-12-10 10:07:04 +00:00
w0rp
cebe7c3918 Fix #1210 - Do not report this file as a temporary file in the quickfix list for TSLint 2017-12-10 09:58:33 +00:00
butlerx
0700c2d900
add google-java-format fixer 2017-12-09 14:25:35 +00:00
w0rp
fcfd1025cc
Merge pull request #1198 from Carpetsmoker/goimports
goimports fixer doesn't work for vendored libraries
2017-12-08 13:09:22 +00:00
w0rp
2d3d6d3a10 Ask for the first two lines for :version in the issue template 2017-12-08 13:07:32 +00:00
Martin Tournoij
92f20b0e51
goimports fixer doesn't work for vendored libraries
In Go you can "vendor" packages by putting them in the `vendor/`
directory for a project. Adding the `-srcdir` argument makes `goimports`
pick up these packages, in addition to what you have in GOPATH.

Without this, `goimports` is not very useful, since most projects vendor
their packages.
2017-12-08 12:49:02 +00:00
w0rp
7d932a239c Fix #1205 Do not add line highlights if the groups do not exist 2017-12-07 23:25:17 +00:00
w0rp
b6efb5649e Run tests in parallel 2017-12-07 20:07:45 +00:00
w0rp
7a71186d62
Merge pull request #1174 from eborden/eborden/add-brittany-for-haskell-formatting
Add brittany for Haskell formatting
2017-12-07 19:15:33 +00:00
w0rp
fbc8ac9553
Update ale.txt 2017-12-07 19:01:13 +00:00
w0rp
c6fc9cdb7b
Merge pull request #1192 from fvictorio/add-solhint-support
Add solhint support
2017-12-07 18:50:33 +00:00
w0rp
63ecc8341d Fix #1202 - Do not use --all-targets by default, because it doesn't work some of the time. 2017-12-07 18:47:01 +00:00
Martin Tournoij
d6bf13502a
Add ALEStartLint autocmd
This grew out of my work in #1193; to ensure the statusline was being
updated I had to add:

    fun! s:redraw(timer)
        redrawstatus
    endfun

    augroup ALEProgress
        autocmd!
        autocmd BufWritePost * call timer_start(100, function('s:redraw'))
        autocmd User ALELint redrawstatus
    augroup end

Which kind of works, but is ugly. With this, I can replace the
`BufWritePost` with:

    autocmd User ALEStartLint redrawstatus

Which is much better, IMHO.

Actually, this patch actually replaces adding a function, since you can
do:

    augroup ALEProgress
        autocmd!
        autocmd User ALEStartLint hi Statusline ctermfg=darkgrey
        autocmd User ALELint      hi Statusline ctermfg=NONE
    augroup end

or:

    let s:ale_running = 0
    let l:stl .= '%{s:ale_running ? "[linting]" : ""}'
    augroup ALEProgress
        autocmd!
        autocmd User ALEStartLint let s:ale_running = 1 | redrawstatus
        autocmd User ALELint      let s:ale_running = 0 | redrawstatus
    augroup end

Both seem to work very well in my testing.

No need to `ale#Statusline#IsRunning()` anymore, I think?
2017-12-07 16:14:20 +00:00
w0rp
0e57ca3df3 Include the operating system in the issue template 2017-12-07 13:24:23 +00:00
w0rp
440ef30b79 Update the issue template 2017-12-07 13:23:17 +00:00
Evan Rutledge Borden
f66837818a Update doc/ale.txt to include brittany. 2017-12-05 15:04:02 -05:00
Franco Victorio
85e0bd3314 Extract error code from message 2017-12-05 16:02:15 -03:00
Jeff Willette
e2a8f759d8 Added option for gometalinter to lint package (#1156)
* Added option for `gometalinter` to lint package
* added tests for the `gometalinter` command
* changed gometalinter commands to use BufferCdString
2017-12-04 18:42:36 +00:00
Franco Victorio
57e1b03435 Add test for solhint handler 2017-12-04 14:23:46 -03:00
Franco Victorio
3e1bd8d922 Update documentation 2017-12-04 14:23:34 -03:00
Franco Victorio
0d627d4613 Add solhint support 2017-12-04 14:23:23 -03:00
w0rp
159733c459
Merge pull request #1191 from deltaskelta/add-importjs-fixer
added importjs fixer
2017-12-04 16:14:20 +00:00
Jeff Willette
fba3c57872 added importjs fixer
- added tests for fixer functions
- added docs
2017-12-05 00:37:31 +09:00
w0rp
2f9869de44 Escape the perl executable, and cover the callbacks with tests 2017-12-02 20:47:01 +00:00
w0rp
a4f8506227 Fix #1186 - Disable checking code with perl by default 2017-12-02 20:43:47 +00:00
w0rp
acd1260339 Revert "Fix #1186 - Use -w by default for Perl, which does not execute code"
This reverts commit f5fc746d00.
2017-12-02 20:38:28 +00:00
Dave Wongillies
2bd966c5cc Puppet: allow for when parser doesn't supply column for errors (#1182)
* puppet: add test for puppet parser validate

* puppet: handle where parser validate doesn't supply the column

* puppet: add test for when parser validate doesn't supply column

* Fix puppet regex to handle Windows paths
2017-12-02 12:29:17 +00:00
w0rp
f5fc746d00 Fix #1186 - Use -w by default for Perl, which does not execute code 2017-12-02 12:26:44 +00:00
w0rp
83760a0952
Merge pull request #1188 from ejsexton82/master
Fixed Command String for phpcbf Fixer
2017-12-02 12:25:13 +00:00
E.J. Sexton
122fdfd329 Fixed command string for phpcbf fixer 2017-12-02 09:27:18 +01:00
w0rp
6650c9a901 Break up the rest of the test script code into smaller files 2017-12-01 18:06:09 +00:00
w0rp
499c154272 Move the Bash code for running Vader tests to its own file 2017-12-01 17:50:24 +00:00
Sven-Hendrik Haase
51b127a4fd Add glslls (#1179)
* Add glslls-based LSP linter
* Make logfile configureable
2017-12-01 17:36:44 +00:00
w0rp
6053f764bd Make toggling work when pattern options are enabled 2017-12-01 17:12:19 +00:00
Carlos Coêlho
daee4a4722 Add prospector for checking Python code (#1183) 2017-12-01 17:04:30 +00:00
E.J. Sexton
6b3927820b Fixed command string for phpcbf fixer 2017-12-01 14:55:34 +01:00
w0rp
948035e13d
Merge pull request #1185 from svenstaro/patch-1
Delete unnecessary unlets
2017-12-01 09:19:57 +00:00
Sven-Hendrik Haase
0406af4484
Delete unnecessary unlets
I'm not even sure why these were here.
2017-12-01 03:03:10 +01:00
w0rp
a990188e27 Fix #1176 - Add an option for caching failing executable checks 2017-11-30 10:34:51 +00:00
w0rp
fd261264d7 Escape the filename for finddir 2017-11-30 10:25:32 +00:00
w0rp
c977bb2d05
Merge pull request #1181 from lgalke/tsserver-in-cygwin
[WIP] Finding tsserver inside cygwin
2017-11-30 09:46:24 +00:00
Lukas Galke
5d65980c42 fnameescape when searching nearest file 2017-11-30 00:33:13 +01:00
w0rp
6503b85d3d Fix #1178 - Don't use the output from eslint_d for fixing files when the output is an error message 2017-11-29 10:08:54 +00:00
Evan Rutledge Borden
edb3a0c5e4 Add brittany for Haskell formatting
`brittany` is one of the options for Haskell source formatting. This
adds the necessary fixer files and documentation to support `brittany`
in `ALE`.
2017-11-28 17:58:13 -05:00
w0rp
a43ada93e4 Allow warnings about trailing whitespace to be disabled for pycodestyle, and cover the flake8 code with tests 2017-11-28 10:12:49 +00:00
w0rp
0ab689db0a Allow warnings about trailing blank lines to be hidden for flake8 and pycodestyle 2017-11-28 10:08:34 +00:00
w0rp
4e821e64c7 Fix #1168 - Make the ruby linter executable configurable 2017-11-28 09:48:35 +00:00
w0rp
bba6b4c23c
Merge pull request #1169 from benjie/master
Add support for linting GraphQL with ESLint
2017-11-27 18:20:39 +00:00
Benjie Gillam
b0114deabc Reference the JS ESLint options 2017-11-27 15:57:17 +00:00
Benjie Gillam
09f9c21f1b Fix typo 2017-11-27 15:55:57 +00:00
Benjie Gillam
e84ee4332f Add support for linting GraphQL with ESLint 2017-11-27 14:41:49 +00:00
w0rp
d4ea0423a2 Fix go to definition tests on Windows 2017-11-26 23:20:21 +00:00
w0rp
f311a46f79 Add go to definition to the README 2017-11-26 23:12:13 +00:00
w0rp
17f93b16ab Test go to definition tests on Windows 2017-11-26 23:08:38 +00:00
w0rp
17574e2fe1 Document go to definition support and put that and completion in an LSP section 2017-11-26 23:02:51 +00:00
w0rp
21b460bb1d Implement go to defintion for LSP linters 2017-11-26 22:27:08 +00:00
w0rp
01318b6930 Compress one line 2017-11-26 21:30:26 +00:00
w0rp
c07b3b9bfc Fix #1166 - Add an option for the rls toolchain 2017-11-26 18:47:30 +00:00
w0rp
ae7cd2c090 Fix #918 - Save prettier details for Haskell linters 2017-11-26 18:24:10 +00:00
w0rp
8254e507d6 #1162 Get LSP completions working reasonably well 2017-11-26 13:01:01 +00:00
w0rp
b1a6abdda6 #1162 Add unfinished experimental code for supporting LSP completion, clean up the tests, and make the completion cancelling better 2017-11-26 12:24:18 +00:00
w0rp
2e50aadd56
Merge pull request #1165 from Carpetsmoker/blackhole
Delete to black hole register in fixer
2017-11-25 11:42:12 +00:00
Martin Tournoij
7dfe690b0b
Delete to black hole register in fixer
Otherwise it'll be in "" and "0, which is an unexpected side-effect
IMHO.
2017-11-25 03:36:36 +00:00
w0rp
f99b027cc6 Fix the JSON fixer post-processor test harder on Windows 2017-11-22 23:45:51 +00:00
w0rp
5160f814d9 Fix #988 - Support --fix-dry-run for ESLint by processing the JSON output 2017-11-22 23:23:14 +00:00
w0rp
6318a08e08 Fix a fixer test on Windows 2017-11-22 22:50:27 +00:00
w0rp
8dd542bed0 Fix lambda and funcref chain values 2017-11-22 22:39:43 +00:00
w0rp
d07b5b71a4 Add support for post-processing fixer output 2017-11-22 22:32:53 +00:00
w0rp
fbfde6968a Fix a typo 2017-11-22 17:44:21 +00:00
w0rp
9857e0a4b7 Fix the eslint_d fixer tests for Windows 2017-11-22 17:25:37 +00:00
w0rp
6e65998ca7 #988 Take --fix-dry-run away again, because it is dumb 2017-11-22 17:01:50 +00:00
w0rp
b5ec1a5fd0 Fix #988 - Support --fix-dry-run for ESLint where available, and --fix-to-stdout for eslint_d 2017-11-22 16:51:04 +00:00
w0rp
91fe749d03 Fix a bug with resetting pattern options when ALE is enabled again 2017-11-22 16:39:05 +00:00
w0rp
5d2ab192cf Support fixer aliases, and make prettier-eslint and prettier-standard just work 2017-11-22 15:31:39 +00:00
w0rp
5ed6f66f77 Reorganise the ALEFix tests 2017-11-22 14:55:08 +00:00
w0rp
4b4762697c #1095 Use --stdin-filepath where available for prettier-eslint 2017-11-22 14:46:14 +00:00
w0rp
382cb4d538 Fix a fixer test on Windows 2017-11-22 14:06:37 +00:00
w0rp
520541cd2d #1095 - Use --stdin-filepath for prettier, where available 2017-11-22 13:46:11 +00:00
w0rp
3f70f1cbf1 Disable piping buffer data into commands for fixing files where needed 2017-11-22 13:01:13 +00:00
w0rp
e7865d2f94 Fix the empty echo fixer test on Windows 2017-11-22 12:41:16 +00:00
w0rp
074a011b08 Make fixing ignore empty output better 2017-11-22 12:01:21 +00:00
w0rp
796fb651d6 Fix the Windows tests for pyls 2017-11-22 00:42:39 +00:00
w0rp
52f3ad7c75 Escape the pyls executable in the command, and support running virtualenv pyls executables 2017-11-21 23:51:18 +00:00
w0rp
e6fb32b792 Remove a Unicode character Vint complains about 2017-11-21 16:39:05 +00:00
w0rp
8be85c2997 Use some default regex for completion support in other filetypes 2017-11-21 16:18:08 +00:00
w0rp
3ef98f42bd Fix #783 - Do not run Flow with home directory configuration files by default 2017-11-21 14:37:01 +00:00
w0rp
ac7f69063d #1151 - Overhaul the foodcritic linter for checking files on disk 2017-11-21 13:38:33 +00:00
w0rp
ce2986cfa5
Merge pull request #1158 from rhysd/redpen-error-code
redpen: Use 'code' key to show validator
2017-11-21 12:33:19 +00:00
rhysd
d465b71362 redpen: use 'code' key to show validator
instead of embedding it into text
2017-11-21 15:49:04 +09:00
w0rp
7ea3aba5e5 Quietly add go to definition support for tsserver 2017-11-21 00:21:45 +00:00
w0rp
5a3a695586
Merge pull request #1154 from deltaskelta/add-filename-key-for-gobuild
Added filename key for `go build` linter
2017-11-20 20:58:43 +00:00
w0rp
c9e203e620 Fix #859 Include test and jaxb Java source paths when available 2017-11-20 18:54:57 +00:00
Jeff Willette
b9f02ffb27 Added filename key for go build linter
- Re: f224ce8a37

- The issues that prompted the above commit which reverted changes made to `go build` and
`gometalinter` seemed to suggest that the main issue was with gometalinter and that
changes should be put into different commits so they are independent of each other

- This commit reinstates the changes to the `go build` linter which seem to be uncontested
and it also seems absolutely necessary to show errors from all files in the package which
may have caused a build failure.
2017-11-20 23:50:14 +09:00
Shogo NAMEKI
f20e5a4cf0 Add drafter for checking API Blueprint files (#1152) 2017-11-20 10:57:13 +00:00
w0rp
f224ce8a37 Revert "Show problems from other files for gobuild and gometalinter"
This reverts commit e721f851b4.
2017-11-20 10:43:45 +00:00
w0rp
9420c411bd #1149 Fix conversion from URIs to filenames on Windows 2017-11-20 00:02:33 +00:00
w0rp
597507e519 Make the message formats configurable with buffer local variables 2017-11-19 23:44:09 +00:00
w0rp
0cb8130d0e Stop the completion tests from failing randomly 2017-11-19 23:09:20 +00:00
w0rp
cc04a7aaa0 Make the iverilog tests match the other tests 2017-11-19 23:06:12 +00:00
RedBug312
1afe2992e2 Make options configurable for iverilog (#1143) 2017-11-19 22:59:17 +00:00
w0rp
344add6a28 Fix a typo 2017-11-19 13:57:04 +00:00
w0rp
151f9f857c Add an FAQ entry explaining how to configure ALE for different buffers. 2017-11-19 13:56:09 +00:00
w0rp
62904d39ee #852 - Capture error codes for tflint 2017-11-19 13:37:56 +00:00
w0rp
fa7f0e2b85 #852 - Capture error codes for swiftlint 2017-11-19 13:33:20 +00:00
w0rp
b16c82f2f1 #852 - Capture error codes for swaglint 2017-11-19 12:46:06 +00:00
w0rp
d7a60ade77 #852 - Capture error codes for stylelint 2017-11-19 12:30:20 +00:00
w0rp
01b2971d04 #852 - Capture error codes for slim-lint 2017-11-19 01:08:20 +00:00
w0rp
7123f7236b #852 - Capture error codes for reek 2017-11-19 00:54:09 +00:00
w0rp
c012563984 #852 - Capture error codes for nimcheck 2017-11-19 00:38:00 +00:00
w0rp
3c8f3221df #852 - Capture error codes for mcs and mcsc 2017-11-19 00:19:09 +00:00
w0rp
40e26f0bc2 #852 - Capture error codes for luacheck 2017-11-19 00:02:35 +00:00
w0rp
41cb174f3a #852 - Capture error codes for jscs 2017-11-18 23:55:47 +00:00
w0rp
cefc5dc5b8 #852 - Capture error codes for csslint 2017-11-18 23:15:23 +00:00
w0rp
2b50e68c7e Add an FAQ entry explaining how to configure C or C++ projects 2017-11-18 18:59:03 +00:00
w0rp
7455e2e97d #852 - Capture error codes for checkstyle 2017-11-18 18:29:12 +00:00
w0rp
49ccfb1a00 Fix #516 - Add support for pyflakes for Python 2017-11-17 18:11:28 +00:00
w0rp
0e96d4576a
Merge pull request #1142 from rhysd/redpen-ext
* redpen support for asciidoc, reST, LaTeX and Re:VIEW
* redpen: fix start column
* add redpen as text linter
2017-11-17 16:34:01 +00:00
w0rp
5635b3c864 Fix #741 - Set highlights for entire lines when signs are disabled 2017-11-17 14:29:57 +00:00
Thomas van der Burgt
22ec81e1de add ale_asm_gcc_executable option (#1138)
* add ale_asm_gcc_executable option
* add Vader tests for asm gcc linter command callbacks
2017-11-17 10:02:30 +00:00
w0rp
a139b387c8
Merge pull request #1141 from elebow/eruby-fix-command-file-redir
erb, erubis: Redirect file into first command.
2017-11-17 09:27:40 +00:00
rhysd
79f15b0e30 add redpen as text linter 2017-11-17 16:43:16 +09:00
rhysd
ca345ffb62 redpen: fix start column 2017-11-17 15:34:07 +09:00
rhysd
44cd07d39c redpen support for asciidoc, reST, LaTeX and Re:VIEW 2017-11-17 15:34:07 +09:00
Eddie Lebow
b390c69642 erb, erubis: Redirect file into first command.
The previous version relied on a zsh-specific behavior where
`<filename` after a pipe could redirect to the first command. This
is the standard way to do it.
2017-11-16 23:10:25 -05:00
w0rp
1f4f19cbd4
Merge pull request #1133 from nicwest/linter-clj-joker
add joker handler for clojure
2017-11-16 11:06:27 +00:00
w0rp
3ddb858881
Merge pull request #1137 from rhysd/redpen
Add Redpen support
2017-11-16 10:44:52 +00:00
rhysd
e232ea07c2 redpen: fix trailing comma in test data 2017-11-16 19:42:51 +09:00
rhysd
f1314b285c redpen: support end_lnum and end_col if possible 2017-11-16 19:28:30 +09:00
w0rp
f90a2d5474
Merge pull request #1114 from elebow/eruby-strip-rails-flavoring
Strip Rails flavoring from eRuby when in a Rails project. Fixes #580.
2017-11-16 10:19:32 +00:00
w0rp
ee07be5f59
Merge pull request #1135 from aurieh/master
Capture error codes for checkmake
2017-11-16 10:15:37 +00:00
rhysd
c9c52ef370 add tests and doc for redpen support 2017-11-16 18:40:10 +09:00
w0rp
71d34fc0c6 Fix #1132 - Parse react error codes again for ESLint 2017-11-16 09:34:24 +00:00
rhysd
981cb95d80 add redpen support 2017-11-16 18:12:08 +09:00
aurieh
7565a45b6f Modify vader tests for d585123 2017-11-16 01:01:59 +02:00
aurieh
d585123d64 #852 Capture error codes for checkmake 2017-11-16 00:58:33 +02:00
Nic West
eda20d0585 add joker handler for clojure
Adds new linter for clojure using joker

https://github.com/candid82/joker

fixes #975
ref #544 #1040
2017-11-15 22:23:46 +00:00
w0rp
1d65e5692f #852 Capture error codes for pycodestyle, and consider every code except E999 to be style errors or warnings 2017-11-15 17:47:24 +00:00
w0rp
cf538c3a58 #852 Capture error codes for pylint, throw away the msgid values 2017-11-15 17:35:34 +00:00
w0rp
08f4f8f0fc #852 Capture error codes for shellcheck 2017-11-15 17:26:52 +00:00
w0rp
b14377915b Clean up tests to stop people copy and pasting the wrong examples 2017-11-15 17:21:17 +00:00
Jeff Willette
e721f851b4 Show problems from other files for gobuild and gometalinter
* Added filename keys to gobuild and gometalinter
* Removed skipping files not in current package
* Removed `--include` for gometalinter
* Fixed the tests
2017-11-15 16:34:30 +00:00
w0rp
290ed4885b Fix #1131 - Capture both output streams for golint 2017-11-15 16:24:29 +00:00
w0rp
e12e5c912c Complain about stray echo lines in the codebase 2017-11-15 12:00:13 +00:00
w0rp
38bc489604
Merge pull request #1130 from deltaskelta/patch-1
fix goimports typo in registry
2017-11-15 11:35:51 +00:00
w0rp
8f80708da6 #852 - Capture error codes for cpplint 2017-11-15 11:28:16 +00:00
w0rp
ff5c6b0509 #852 - Capture error codes for ansible-lint 2017-11-15 10:11:32 +00:00
w0rp
37f2f70439 Update the documentation for GetLoclist 2017-11-15 09:16:36 +00:00
Jeff Willette
a36129eab0
fix goimports typo in registry 2017-11-15 09:40:40 +09:00
w0rp
48be035da8 Update the documentation for :ALEDetail 2017-11-14 23:29:48 +00:00
w0rp
d48506f9c1 Fix #757 - Show :ALEDetail messages in a window 2017-11-14 23:25:01 +00:00
w0rp
6b2c61a5cc Fix #1128 - Add g:ale_linters_explicit for only enabling linters explicitly 2017-11-14 19:55:46 +00:00
w0rp
2e9cd978a2
Merge pull request #1129 from aliou/rubocop-cop-as-error-code
#852 - Capture error codes for Rubocop
2017-11-14 18:16:22 +00:00
w0rp
48eb362fca Add tests for the goimports fixer commands 2017-11-14 17:46:40 +00:00
Jeff Willette
20a01404f3 Added support for goimports fixer (#1123)
* Added support for goimports fixer
* added test and executable check
* fixed test assertions to reflect executable check
2017-11-14 17:37:22 +00:00
Aliou Diallo
425482116e
#852 - Capture error codes for Rubocop 2017-11-14 17:50:15 +01:00
w0rp
16e7dc2371 Fix #1069 Support formatting the loclist messages with g:ale_loclist_msg_format 2017-11-14 10:28:36 +00:00
w0rp
d8f9aef84a #852 - Capture error codes for flake8 2017-11-14 09:41:29 +00:00
w0rp
037aaae593 #852 - Capture error codes for TSLint 2017-11-13 23:36:15 +00:00
w0rp
fea708cff3 #852 Pass on error codes in the loclist corrections 2017-11-13 23:34:00 +00:00
w0rp
8a3a2da87e #852 Capture error codes for ESLint 2017-11-13 23:23:06 +00:00
w0rp
764a33b1c9 Fix #1124 - Handle stack-build errors with leading spaces 2017-11-13 22:47:19 +00:00
w0rp
6c112dd1cc Fix #1122 - Handle notes for shellcheck errors again, and use type 'I' for notes 2017-11-13 16:08:09 +00:00
w0rp
a5f7f51c9a #1121 Tell people how to lint when leaving insert mode with Ctrl+C 2017-11-13 10:27:25 +00:00
Eddie Lebow
ad7ea36307 [eruby] Add GetCommand to erubis linter
GetCommand conditionally adds a filter (implemented as inline Ruby code
in the command line) to transform some of the problematic
Rails-specific eRuby syntax. Specifically, <%= tags are replaced with
<%.

This does not reduce the effectiveness of the linter, because the
transformed code is still evaluated.

This solution was suggested by @rgo at
https://github.com/w0rp/ale/issues/580#issuecomment-337676607.
2017-11-12 23:33:34 -05:00
Eddie Lebow
ea7f68226e [eruby] Add GetCommand to erb linter
GetCommand conditionally adds a filter (implemented as inline Ruby code
in the command line) to transform some of the problematic
Rails-specific eRuby syntax. Specifically, <%= tags are replaced with
<%.

This does not reduce the effectiveness of the linter, because the
transformed code is still evaluated.

This solution was suggested by @rgo at
https://github.com/w0rp/ale/issues/580#issuecomment-337676607.
2017-11-12 23:33:30 -05:00
Eddie Lebow
e9e29e003c [eruby] Rename erubylinterb to match tool name 2017-11-12 23:33:22 -05:00
w0rp
584e0bc7f2 #852 Support formatting echo messages with error codes. No linters set the code key yet 2017-11-13 00:47:34 +00:00
w0rp
70623ca8a7 Add support for showing Info severities in echoed messages 2017-11-12 23:19:26 +00:00
w0rp
7d056b0839 Update the documentation for the echo message format, so it makes more sense 2017-11-12 23:01:11 +00:00
w0rp
e7b9befaa6 Sort some linter entries alphabetically 2017-11-12 12:11:15 +00:00
w0rp
3c34848e02 Fix #510 Support checking LESS files with stylelint 2017-11-12 12:09:19 +00:00
w0rp
5b3094558b Merge branch 'zanona-less-lessc-linter' 2017-11-12 11:35:14 +00:00
w0rp
7edcb2210b Show problems from other files for lessc 2017-11-12 11:35:01 +00:00
w0rp
cd5da50531 Add tests for the command and executable callbacks, and make them use local node_modulse esxecutables like other linters 2017-11-12 11:25:24 +00:00
Michael Jungo
3aff1df961 Add tests for ocaml-language-server callbacks 2017-11-12 10:56:53 +00:00
w0rp
d20e3bc71c #1108 Support setting b:ale_linter_aliases to a List 2017-11-12 10:56:53 +00:00
w0rp
b98387d0fa #1108 Support using Lists and 'all' for b:ale_linters 2017-11-12 10:56:53 +00:00
w0rp
099df0af52 #1108 Support selecting fixers with Lists 2017-11-12 10:56:53 +00:00
Eddie Lebow
365d023d0e perlcritic: all issues are warnings
Perlcritic is a style checker, not a syntax validator.

This change was originally proposed by @RsrchBoy in
https://github.com/w0rp/ale/pull/784.
2017-11-12 10:56:53 +00:00
Michael Jungo
5df6ce6bb8 Remove id from LSP notifications 2017-11-12 10:56:53 +00:00
Michael Jungo
39107a48b9 Add ocaml-language-server for OCaml and ReasonML 2017-11-12 10:56:53 +00:00
w0rp
8e0d1f57c6 Fix a typo 2017-11-12 10:56:53 +00:00
w0rp
555743a2ba #1095 Cache the sorting of patterns for g:ale_pattern_options 2017-11-12 10:56:53 +00:00
w0rp
8cd1ccff84 #1095 Apply all patterns for g:ale_pattern_options, instead of just the first match 2017-11-12 10:56:53 +00:00
jnduli
6c60ca24c1 Add rstcheck linter to check for errors in restructured text (#1090) 2017-11-12 10:56:53 +00:00
Florian Beeres
52b6024997 Handle flow extra errors (#946)
Show more information for Flow errors with :ALEDetail
2017-11-12 10:56:53 +00:00
w0rp
4952e2f143 #1098 Add protoc-gen-lint to the list of supported tools 2017-11-12 10:56:53 +00:00
Jeff Willette
8bc44ed585 Added support for linting of proto files (#1098)
* Added support for linting of proto files
* Added function to get the proper protoc command
2017-11-12 10:56:53 +00:00
w0rp
a8c5e0f4dc Simplfy semver handling and share the semver version cache across everything 2017-11-12 10:56:53 +00:00
wuqiong4945
911b6d8f71 add 'output_stream': 'stderr', let golint work 2017-11-12 10:56:53 +00:00
w0rp
0741612db7
Merge pull request #1113 from jungomi/ols-tests
Add tests for ocaml-language-server callbacks
2017-11-12 10:26:36 +00:00
Michael Jungo
cb3a25f276 Add tests for ocaml-language-server callbacks 2017-11-12 02:06:28 +01:00
w0rp
27e2f53ac9 #1108 Support setting b:ale_linter_aliases to a List 2017-11-12 00:11:50 +00:00
w0rp
ae08f80ead #1108 Support using Lists and 'all' for b:ale_linters 2017-11-11 23:55:11 +00:00
w0rp
3111c6c1ca
Merge pull request #1111 from elebow/perlcritic-only-warnings
Perlcritic: All issues are warnings
2017-11-11 23:47:11 +00:00
w0rp
f6ac8a9eb9 #1108 Support selecting fixers with Lists 2017-11-11 23:04:08 +00:00
Eddie Lebow
4d44996af6 perlcritic: all issues are warnings
Perlcritic is a style checker, not a syntax validator.

This change was originally proposed by @RsrchBoy in
https://github.com/w0rp/ale/pull/784.
2017-11-11 17:46:21 -05:00
w0rp
b789b9eaad
Merge pull request #1110 from jungomi/ocaml-language-server
* Add ocaml-language-server for OCaml and ReasonML
* Remove id from LSP notifications
2017-11-11 22:13:09 +00:00
Michael Jungo
fb00acf734 Remove id from LSP notifications 2017-11-11 19:28:24 +01:00
Michael Jungo
f8fec369e5 Add ocaml-language-server for OCaml and ReasonML 2017-11-11 19:27:41 +01:00
w0rp
9e7c493e7e Fix a typo 2017-11-11 14:27:53 +00:00
w0rp
bac02c9d81 #1095 Cache the sorting of patterns for g:ale_pattern_options 2017-11-11 14:26:54 +00:00
w0rp
8c1d6eda81 #1095 Apply all patterns for g:ale_pattern_options, instead of just the first match 2017-11-11 13:44:12 +00:00
jnduli
6c014a25e8 Add rstcheck linter to check for errors in restructured text (#1090) 2017-11-11 12:10:17 +00:00
Florian Beeres
1ddc3eec6d Handle flow extra errors (#946)
Show more information for Flow errors with :ALEDetail
2017-11-11 12:07:08 +00:00
w0rp
bb271859ef #1098 Add protoc-gen-lint to the list of supported tools 2017-11-10 09:45:07 +00:00
Jeff Willette
27780cbb23 Added support for linting of proto files (#1098)
* Added support for linting of proto files
* Added function to get the proper protoc command
2017-11-10 09:37:23 +00:00
w0rp
d425b8a18a Simplfy semver handling and share the semver version cache across everything 2017-11-09 23:42:54 +00:00
Marcus Zanona
1ad7d5e6ca Remove unnecessary cat command from less#lessc 2017-11-09 19:52:08 -02:00
Marcus Zanona
4bc31fcd18 Fix imported files path lookup on less#lessc linter
Ale saves a temporary file (%t) which does not share the same path as
the original file, breaking import statements with relative URLs.
This fix sends content to `lessc` over stdin and adds
the current file (%s) as one of the included paths, so statements like
`@import '../utils' will correctly resolve based on the current file path.
2017-11-09 13:46:03 -02:00
Marcus Zanona
7ed82ab712 Adjust author info on less#lessc linter 2017-11-09 13:40:24 -02:00
Marcus Zanona
decf8188bc Adjust formatting on less#lessc linter 2017-11-09 13:39:38 -02:00
w0rp
c1fa88e78c
Merge pull request #1105 from wuqiong4945/master
add 'output_stream': 'stderr', let golint work
2017-11-09 13:33:10 +00:00
wuqiong4945
bcc215c4e0
add 'output_stream': 'stderr', let golint work 2017-11-09 21:14:29 +08:00
Marcus Zanona
732d8e3ed6 Add support for linting less files with lessc 2017-11-09 10:39:39 -02:00
w0rp
8ef8a35462 Fix #1101 - Ignore no-implicit-dependencies errors until TSLint supports checking via stdin properly 2017-11-09 10:32:41 +00:00
Auri
8a4cf923a8 Add PyLS linter (#1097)
* Support PyLS (python language server)
* Replace pyls#GetProjectRoot and add more config types to ale#python#FindProjectRoot
2017-11-08 17:58:56 +00:00
w0rp
86e8074017
Merge pull request #1093 from ttaylorr/master
ale_linters: add 'dafny' linter
2017-11-08 17:36:22 +00:00
Taylor Blau
da8012971a ale_linters/dafny: lint only saved files 2017-11-08 09:28:24 -08:00
Taylor Blau
105251c1de README: denote that 'Dafny' linter checks files 2017-11-07 22:18:49 -08:00
Taylor Blau
248a5eb2f6 ale_linters: add 'dafny' linter 2017-11-07 22:11:49 -08:00
w0rp
1bf894f48c Fix #1086 - Implement command chaining for fixers 2017-11-07 23:20:14 +00:00
w0rp
d97924b698 Tell users when a fixer does not exist, and make the no fixers message softer 2017-11-07 19:47:20 +00:00
w0rp
e4cd371621
Merge pull request #1063 from aurieh/master
Add dart LSP (resolves #1006)
2017-11-07 11:54:00 +00:00
aurieh
3a57e4d151 Update doc and README for Dart LSP 2017-11-07 10:55:43 +02:00
aurieh
b5254e9760 Add dart LSP (resolves #1006) 2017-11-07 10:55:43 +02:00
w0rp
8e71f82f8f #1006 Fix raw message handling for LSP support in NeoVim 2017-11-06 22:46:32 +00:00
w0rp
3cbf716d72
Merge pull request #1087 from duleorlovic/master
Add example for changing highlight color
2017-11-06 21:15:12 +00:00
Dusan Orlovic
89832884c9
Add example for changing highlight color
Added example on how to actually change the color.
Related to #1077
2017-11-06 14:17:38 +01:00
w0rp
fa7d041c26 Fix #1085 - Add a final newline character to tsserver and LSP messages 2017-11-05 21:41:53 +00:00
w0rp
3c8e6ed51c Modify the shmft tests so they won't mess with your settings 2017-11-05 21:31:41 +00:00
Simon Bugert
716b22d524 Add shfmt fixer for sh files (#1083)
* Add shfmt fixer for sh files
* Add tests for shfmt fixer
2017-11-05 21:24:41 +00:00
David Sierra DiazGranados
7086586b17 Add executable option for phpmd linter (resolves #1076) (#1078)
* Add executable option for phpmd linter (resolves #1076)
* Add test for phpmd executable option
2017-11-05 18:53:12 +00:00
w0rp
7b5108d934 Fix #626 - Automatically use cargo check and cargo check --all-targets for cargo versions that are new enough 2017-11-05 18:37:44 +00:00
w0rp
caed406e16 Fix #1062 - Use <nomodeline> for the ALELint autocmd, so we don not mess with folds, etc. 2017-11-05 17:34:36 +00:00
w0rp
34674e088d Fix #1061 - Handle the filenames returned by javac 2017-11-05 15:33:31 +00:00
w0rp
d851f399c0 Fix #1058 - Ignore all errors with bad calls to jobstop() in NeoVim 2017-11-04 10:54:28 +00:00
w0rp
9c0a5635df #1081 Remove the ale#python#IsExecutable function 2017-11-04 10:46:19 +00:00
w0rp
9010458581 #1081 Use executable() for Python executables on Windows, and rename the test files to .exe so they will pass the executable() check 2017-11-04 10:41:08 +00:00
w0rp
c26e5e277e Fix #491 - Only set -x for shellcheck for versions which support the option 2017-11-03 22:08:26 +00:00
Antoine Reilles
54f44c2d0f windows compatible warning match pattern for erlc (#1071)
* windows compatible warning match pattern for erlc
2017-11-03 18:56:34 +00:00
w0rp
1752ad9ad1 #1074 #1077 Add highlight configuration to the FAQ 2017-11-02 10:39:40 +00:00
w0rp
a09db595f1
Merge pull request #1072 from drrcknlsn/master
Prevent logging of errors in the php linter.
2017-11-01 20:56:10 +00:00
Derrick Nelson
a786e01127 Prevent logging of errors in the php linter. 2017-10-31 20:02:59 -04:00
w0rp
3115d2025a
Merge pull request #1068 from maximbaz/patch-1
Put info about lightline-ale in README.md (fixes #1065)
2017-10-31 13:03:02 +00:00
w0rp
9cd0d75c4f Fix #936 - Check the actual files for gosimple and staticcheck 2017-10-31 13:01:01 +00:00
Maxim Baz
0ed639a116
Put info about lightline-ale in README.md (fixes #1065) 2017-10-31 13:26:12 +01:00
w0rp
50f7ad3552 #857 - Add b:ale_fix_on_save for controlling fixing on save for specific buffers 2017-10-30 22:19:57 +00:00
w0rp
1575b3d7dd
Merge pull request #1059 from ahmedelgabri/reason-refmt
refmt fixer for ReasonML
2017-10-30 11:30:13 +00:00
Ahmed El Gabri
634eb1920c
refmt fixer for ReasonML 2017-10-29 21:48:28 +01:00
w0rp
daecbad543 Fix #719 - Add ALEReset and ALEResetBuffer for removing problems for all buffers or one buffer 2017-10-29 17:03:29 +00:00
w0rp
1aa737cdc9 #817 - Document the buffer toggling options, and define plug mappings for everything 2017-10-29 10:55:02 +00:00
w0rp
5fc2b98b73 #817 Add commands for toggling ALE for only the current buffer 2017-10-28 19:36:16 +01:00
w0rp
ea3a8e3c62 #817 Move code for toggling ALE to its own file 2017-10-28 15:41:14 +01:00
w0rp
6e681d9066 Fix #971 - Add an option for turning errors about missing eslint config files off. 2017-10-28 12:11:33 +01:00
w0rp
0e848b608c
Merge pull request #1053 from SamHowie/hackfmt
Add hackfmt fixer
2017-10-27 23:36:16 +01:00
Sam Howie
36898436b5 Add hackfmt fixer 2017-10-27 13:42:55 -07:00
w0rp
73b8181ce6 #1054 - Prevent ALE from adding the after directory to runtimepath too much 2017-10-27 11:38:01 +01:00
w0rp
d4d939bea9 Fix #1039 - Only check the file on disk for dartanalyzer 2017-10-26 23:31:07 +01:00
w0rp
6490d3a5e6 Fix #1041 - Do not request completions shortly after CompleteDone 2017-10-26 23:18:12 +01:00
w0rp
33c2c20e66 Fix #1051 - Support ash and dash for shellcheck and the sh linter 2017-10-26 21:21:42 +01:00
w0rp
3ac92ea529 Fix #1048 - Do not lint files named "." 2017-10-26 20:29:33 +01:00
w0rp
3ab069c9bd Merge pull request #1052 from natw/tflint-no-stdin
don't use stdin with tflint
2017-10-26 20:25:55 +01:00
Nathaniel Williams
22e8050639 don't use stdin with tflint 2017-10-26 14:14:28 -05:00
Nathaniel Williams
e4456a4e0e Add tflint fot Terraform 2017-10-26 19:37:04 +01:00
w0rp
6ed456f99c Merge pull request #1009 from sirbrillig/add/phpcs-include-code-option
phpcs: include sniff code in message
2017-10-26 17:49:46 +01:00
Payton Swick
40f5e54198 Add test for phpcs error code 2017-10-26 12:22:34 -04:00
Payton Swick
aca66a54a5 Include sniff code in message 2017-10-26 12:22:08 -04:00
w0rp
f15c8f4127 #1049 Do not modify runtimepath if the conflict warnings are disabled 2017-10-26 12:26:16 +01:00
w0rp
0702cb59b7 Fix #1045 - Handle both output streams for Cargo 2017-10-26 10:03:10 +01:00
w0rp
5917de565d Fix #491 - Use -x for shellcheck for checking files with sourced files 2017-10-26 00:48:51 +01:00
w0rp
2f5b94e07d Remove redundant code for the GCC handler, and fix bugs with errors for - not being parsed 2017-10-26 00:09:26 +01:00
w0rp
da365134b5 Fix an exception with notes with no previous message 2017-10-25 23:43:09 +01:00
w0rp
7eb16836d0 Fix indentation for the haml-lint file 2017-10-25 23:07:38 +01:00
w0rp
f38ced1e4c Merge pull request #1047 from thenoseman/linter-hamllint_autodetect_config
[PR: hamllint] auto-detect .rubocop.yml and .haml-lint.yml when using haml-lint
2017-10-25 23:01:49 +01:00
w0rp
4af7219078 Make one of the sign tests work in all locales 2017-10-25 22:35:21 +01:00
Gerry Agbobada
25d2af0b25 Handle multiple files localtion lists with gcc handler (#1034)
Handle multiple files in the GCC handler.
2017-10-25 22:29:36 +01:00
Frank Schumacher
b0b91ba897 force add test fixtures for hamllint 2017-10-25 21:35:24 +02:00
Frank Schumacher
45ed37a5d9 auto-detect .rubocop.yml and .haml-lint.yml
Based on path to current file
2017-10-25 20:46:16 +02:00
w0rp
960ae62aaa Make the sign placement test pass more often by using another shell 2017-10-25 01:11:46 +01:00
w0rp
680672117f Make the highlight placement test pass more often by using another shell 2017-10-25 01:05:48 +01:00
w0rp
5029078df3 Set better highlights for write-good 2017-10-25 00:58:16 +01:00
w0rp
94bdabb8c3 Merge pull request #1044 from sumnerevans/mail-linters
#955 Add vale linter for mail files
2017-10-25 00:40:59 +01:00
w0rp
eec529ad9d Fix the write-good tests on Windows 2017-10-25 00:39:23 +01:00
Sumner Evans
7ac07a30b8 Fix #643 - Add support for write-good for many languages 2017-10-25 00:28:06 +01:00
Sumner Evans
780844ad73
#955 add documentation 2017-10-24 17:14:42 -06:00
Sumner Evans
db769fb060
#995 add vale linter for mail files 2017-10-24 17:01:40 -06:00
w0rp
1a5ef969a5 Merge branch 'aurieh-master' 2017-10-24 22:45:30 +01:00
Su Shangjun
d644dc797f example for 'rcfile' on ale_python_pylint_options
Two hyphens instead of one will enable the option `rcfile`.
2017-10-24 22:43:54 +01:00
aurieh
b401772d23 Add Vader tests 2017-10-25 00:39:54 +03:00
Christopher Swingley
1c56bebd7c proselint for mail files (#1037)
Add proselint for mail files
2017-10-24 22:34:38 +01:00
w0rp
fe729dab58 Merge pull request #1030 from grddev/run-tests-osx
Update test scripts to work on OS X
2017-10-24 22:30:42 +01:00
Zack Kourouma
07dad64acb adds fixer support for hfmt (#1027)
Add support for fixing Haskell with hfmt
2017-10-24 22:29:04 +01:00
Diego Oliveira
b172cd8b17 Add phan as a linter for php files (#1026)
Add phan for checking PHP code
2017-10-24 22:25:02 +01:00
w0rp
c248885e57 Merge pull request #1025 from kfox/add-rustfmt-fixer
add rustfmt fixer
2017-10-24 22:20:03 +01:00
w0rp
0e4dd95e5d Merge pull request #1017 from carakan/elixir_format
`mix format` new fixer for elixir lang
2017-10-24 22:13:04 +01:00
w0rp
5a91f7e19f Merge pull request #1043 from fengdasuk19/fengdasuk19-pylint-rcfile
example for 'rcfile' on ale_python_pylint_options
2017-10-24 22:06:38 +01:00
Su Shangjun
c96e7402ba example for 'rcfile' on ale_python_pylint_options
Two hyphens instead of one will enable the option `rcfile`.
2017-10-24 08:11:56 -05:00
aurieh
f0a0aef33d Update doc/ale.txt & README.md 2017-10-24 15:09:56 +03:00
aurieh
4884e33f8b Add checkmake (resolves #866) 2017-10-24 15:03:47 +03:00
w0rp
be5c7a09ce Add a badge for AppVeyor, and remove some trailing spaces from the README 2017-10-23 23:21:50 +01:00
w0rp
b952dda386 Get all tests to pass on Windows 2017-10-23 23:09:40 +01:00
w0rp
231398dddc Get more of the tests to pass on Windows 2017-10-23 01:26:31 +01:00
Carlos Ramos
be1377f6d7 add basic documentation for elixir mix 2017-10-22 19:44:44 -04:00
Carlos Ramos
3212278c91 fix test's and delete unused code 2017-10-22 19:20:38 -04:00
Carlos Ramos
43653ef548 new fixer elixir mix format
(only available in elixir > 1.6)
2017-10-22 19:20:38 -04:00
w0rp
c4579e1809 Merge pull request #1032 from diegoholiveira/tests_phpmd
Fix the regex of phpmd
2017-10-22 18:02:44 +01:00
Diego Oliveira
5b986ce5d3 Fix the regex of phpmd 2017-10-22 14:56:09 -02:00
w0rp
0b0cbfa80a Merge pull request #1022 from 0x6a62/fix-typos
Fix typo
2017-10-22 17:00:16 +01:00
Gustav Munkby
ed93cd1494 Update test scripts to work on OS X
There were a couple of issues
 - `paste` requires a file argument
 - `mktemp` requires a pattern argument
 - `sort` doesn't support `-h`, but `-n` is enough for sorting on numbers, and `-s` was introduced to perform a stable sort instead.

The main issues were that BSD `sed` does not support:
 - Alternation (`\|`) - solved by splitting to multiple patterns
 - Bound shortcuts (`x\+`, `x\?`) - solved by replacing with `xx*` and `x\{0,1\}` respectively
 - Lower-casing (`\L`) - solved by piping through `tr` instead (this will lowercase everything and not only the integration names, but I assumed that wasn't too much of an issue, as a portable alternative for the selective downcasing would be much more involved).
2017-10-22 10:42:36 +02:00
Kelly Fox
35031a0b8a add rustfmt fixer 2017-10-21 12:31:49 -05:00
jb
841acf725c Fix typo 2017-10-21 08:16:59 -04:00
w0rp
3878be9977 Merge pull request #1018 from zkourouma/master
Pretter fixer support for Less filetype
2017-10-21 11:31:15 +01:00
Zack Kourouma
b43ed6baf5 add doc file for less 2017-10-20 18:30:34 -07:00
Zack Kourouma
e023e7a2fe add prettier fixer support for 'less' filetype 2017-10-20 18:29:57 -07:00
w0rp
346c91fb6b Merge pull request #1012 from gosukiwi/patch-1
Add instructions for setting up Lightline
2017-10-20 00:13:02 +01:00
Federico Ramirez
a97afd3380 Add instructions for setting up Lightline 2017-10-19 13:39:49 -03:00
w0rp
658ec4b10e Merge pull request #1010 from rhysd/markdown-remark-lint
add support for remark-lint
2017-10-19 11:27:25 +01:00
rhysd
4339af2bb6 add support for remark-lint 2017-10-19 18:17:04 +09:00
w0rp
5292d2f349 Get more tests to pass on Windows 2017-10-18 23:42:51 +01:00
w0rp
81d993086e #904 - Allow linting to run on save a second after :q fails 2017-10-17 00:37:29 +01:00
w0rp
5946a128c3 Merge pull request #1001 from carakan/tslint_fixer
new tslint fixer for typescript
2017-10-16 23:42:28 +01:00
Carlos Ramos
8a8879a28f fix test't 2017-10-16 12:08:10 -04:00
Carlos Ramos
07ebfbeef0 Add new fixer tslint for typescript, fixes #932 2017-10-16 00:53:17 -04:00
w0rp
a790077136 Merge pull request #998 from svanharmelen/b-fix-734
Fix #734 - Use the correct buffer for the filetype blacklist and such
2017-10-15 10:57:21 +01:00
Sander van Harmelen
090f8a8f38 Fix issue #734
Fixes #734

The main issue was not consitently using the correct buffer.
2017-10-15 11:35:33 +02:00
w0rp
90d4fb139c #977 Complain about the lack of configuration files for scalastyle in such a way that users will be directed towards getting it to work 2017-10-15 00:20:43 +01:00
w0rp
515dcdef29 Fix some Scala documentation grammar and spacing 2017-10-14 23:47:47 +01:00
w0rp
d090dec8b4 Rename the Scala documentation file 2017-10-14 23:41:05 +01:00
w0rp
ef495ba32d #904 Do not run linters on :wq or :x 2017-10-14 23:22:13 +01:00
w0rp
010ebc2459 Fix a spelling mistake 2017-10-14 22:00:53 +01:00
w0rp
b2e6d0dff8 Rename the autocmd test file, as I can never remember the old name 2017-10-14 21:31:44 +01:00
w0rp
69d6ff6020 #904 Do less processing when newer NeoVim versions are exiting 2017-10-14 19:22:19 +01:00
w0rp
40e69794eb Make the getcmdwintype() check ever-so-slightly faster 2017-10-14 17:31:58 +01:00
w0rp
d8ea83e344 Clean up the test variable 2017-10-14 17:27:05 +01:00
w0rp
8eb41dc94c Fix the test for doing nothing for CtrlPFunky buffers 2017-10-14 17:24:29 +01:00
w0rp
6fd10f80de Cut down on the time for the CtrlPFunky check, by first checking if the command exists 2017-10-14 17:11:30 +01:00
w0rp
5204f2dbc2 Break up ShouldDoNothing checks into separate lines, so it's possible to profile them 2017-10-14 16:51:12 +01:00
Jay Thomas
618074a053 Add editorconfig (#997)
Add editorconfig
2017-10-14 15:55:33 +01:00
w0rp
663fe75d0f #965 - Make the cursor echo delay configurable 2017-10-12 23:25:41 +01:00
w0rp
e71c4a8bea #965 - Support limiting the number of signs ALE will set 2017-10-12 23:04:54 +01:00
w0rp
dded246aba Merge pull request #968 from adriaanzon/luacheck-whitespace
Luacheck: Respect warn_about_trailing_whitespace option
2017-10-12 22:06:48 +01:00
Adriaan Zonnenberg
221cb0f8cf Add some extra tests for luacheck whitespace warnings 2017-10-12 22:59:45 +02:00
w0rp
3ddbe48d84 Merge pull request #993 from butlerx/patch-1
Fix xmllint link
2017-10-12 19:06:00 +01:00
Cian Butler
d8a638f38a Fix xmllint link
fix link to xmllint
2017-10-12 10:49:15 +01:00
Carlos Ramos
844354cfed Add new fixer: TrimWhitespace (#991)
add a new fixer: trim_whitespace
2017-10-12 09:27:24 +01:00
w0rp
02c8793c53 #965 Check ale#ShouldDoNothing() less and such often, for better performance 2017-10-11 23:51:41 +01:00
w0rp
be547a0111 Merge pull request #990 from monokrome/master
Use $VIRTUAL_ENV environment variable when present.
2017-10-11 22:18:22 +01:00
Bailey Stoner
620ec32da1
Add a test to ensure $VIRTUAL_ENV is respected. 2017-10-11 13:42:38 -07:00
Bailey Stoner
3859ac0c9b
Use $VIRTUAL_ENV environment variable when present. 2017-10-10 14:21:04 -07:00
Linda_pp
70177480ba Add llc integration for LLVM IR (#979)
Check LLVM IR with llc
2017-10-10 10:13:09 +01:00
w0rp
a809c4fa3a Get more random tests to pass on Windows 2017-10-08 23:26:50 +01:00
w0rp
65aa88a7d5 Merge pull request #981 from Kazark/fix-elm-win32
Fix Elm linter for Windows (resolves #980)
2017-10-08 15:33:34 +01:00
Keith Pinson
f21f52343d Fix Elm linter for Windows (resolves #980)
Looks like elm-make only respects /dev/null, even on Windows. The person
who wrote this linter maybe did not test it on Windows, and wrote the
code in the way you would expect to be solid by using NUL on Windows.
However it seems elm-make is not actually making use of /dev/null but
rather using it as a form of flag. Ironically this seems to be what is
already described in the comments; I added some clarification.
2017-10-06 17:26:50 -04:00
w0rp
47577564a2 Get more command callback tests to pass on Windows 2017-10-05 22:31:09 +01:00
w0rp
25045641fb Merge pull request #974 from odinuge/prettier_config
Add all possible config files for prettier
2017-10-04 11:38:28 +01:00
Odin Ugedal
a300014396
Add all possible config files for prettier
Prettier uses cosmiconfig, and therefore it is possible to add different
extensions to the config file. More information can be found here:
https://github.com/prettier/prettier#configuration-file.
2017-10-04 12:30:42 +02:00
aliou
e376f0ae44 gofmt fixer for Go (#970)
Add a gofmt fixer for golang.
2017-10-03 18:54:35 +01:00
w0rp
3ab414de1a Fix #964 - Remove signs when multiple signs end up on a single line 2017-10-03 10:00:16 +01:00
w0rp
7392f808c0 Merge pull request #972 from rhysd/fix-typo
Fix typos
2017-10-03 07:41:44 +01:00
rhysd
753592ca66 Fix typos 2017-10-03 01:11:54 +09:00
w0rp
e0bd490ed9 Get tslint and xmllint command callback tests to pass in Windows 2017-10-01 21:23:42 +01:00
w0rp
54a08c5f8c Add a Scripts dir for tests on Windows 2017-10-01 20:26:18 +01:00
w0rp
5091e2de45 Get fixer tests to work on Windows 2017-10-01 20:23:41 +01:00
w0rp
638ca42082 Use local versions of yapf on Windows, and get the callback tests to pass 2017-10-01 18:47:54 +01:00
w0rp
4634b1be93 Fix Flow and Idris tests for Windows 2017-10-01 18:41:41 +01:00
w0rp
5731616cd2 Get the mcsc handler tests to pass on Windows 2017-10-01 17:36:47 +01:00
w0rp
c76f721b59 Merge pull request #969 from rosmanov/master
Added g:ale_php_phpstan_configuration option
2017-09-30 18:05:43 +01:00
Ruslan Osmanov
a640d3b022 Added g:ale_php_phpstan_configuration option 2017-09-30 23:36:10 +07:00
Adriaan Zonnenberg
1d1b5155e6 Luacheck: Respect warn_about_trailing_whitespace option
See http://luacheck.readthedocs.io/en/stable/warnings.html, warnings
611 to 614.
2017-09-30 16:38:10 +02:00
w0rp
c989ef0fc6 Fix an issue with the check-supported-tools-tables script 2017-09-28 13:32:02 +01:00
w0rp
9fc01bd246 Merge pull request #952 from hernot/master
Add mcsc for checking C# code.
2017-09-28 13:29:55 +01:00
Xristoph Hintermüller
8f6044b8b6 Implemented review recommendations
Implements suggestions and recommendations suggested by the first review
of the "Advance C# linter based on mcs -t:module (#952)" pull request.

- Clarifies and simplifies description of linters and options
- Added links to help file and marked the mcsc linter as to be run only
  when file in buffer is saved or loaded.
- Added comments to the mcsc.vim file to clarify code
- removed type checks considered not necessary be reviewer.
- addresses findings by vader
- removed call to getcwd and cd in vim script
- handler expands file names relative to route of source tree into
  absolute pathes. Fixes errors not being marked when vim is started
  from subdirectory of source tree.
- implements tests for mcs.vim and mcsc.vim linter
2017-09-27 13:21:05 +02:00
w0rp
49b6805b09 Merge pull request #951 from rzane/eslint-fix-config-option
ESLint --config option causes it to not detect node_modules?
2017-09-25 21:38:55 +01:00
Xristoph Hintermüller
0be77c60c5 Added advanced c-sharp linter
The existing c-charp linter used the --syntax check mode of the mono mcs
compiler only. The new mcsc linter tries to compile the files located in
a directory tree located bejond the specified source directory or the
current one if no source is explicitly specified. The resulting module
target is placed in a temporary file managed by ale.
2017-09-25 13:13:21 +02:00
Xristoph Hintermüller
cde50f1091 Added advanced c-sharp linter
The existing c-charp linter used the --syntax check mode of the mono mcs
compiler only. The new mcsc linter tries to compile the files located in
a directory tree located bejond the specified source directory or the
current one if no source is explicitly specified. The resulting module
target is placed in a temporary file managed by ale.
2017-09-25 12:54:50 +02:00
Ray Zane
cb56cbb714 There seems to be a bug in eslint that causes the --config option to
not detect node_modules correctly. The `-c` option, however, works fine.
2017-09-24 13:57:18 -04:00
w0rp
2bd352370f Merge pull request #949 from TheLocehiliosan/shellcheck-option-order
Move dialect setting before user options (shellcheck)
2017-09-23 12:01:33 +01:00
Tim Byrne
3910b025b2
Move dialect setting before user options (shellcheck) 2017-09-22 17:04:00 -05:00
w0rp
70fdeb7c22 Merge pull request #942 from doits/fix_slim_typo
fix typo `RUBUCOP` --> `RUBOCOP` for slim lint
2017-09-18 15:52:13 +01:00
Markus Doits
5a1ebdb633
fix typo RUBUCOP --> RUBOCOP for slim lint
this actually makes 6ebd8f355c work
2017-09-18 12:29:20 +02:00
w0rp
8bc66cff39 Merge pull request #903 from doits/slimlint_directory
Pass the rubocop configuration file to slim-lint.
2017-09-16 17:28:00 +01:00
Markus Doits
6ebd8f355c
slimlint: Search for .rubocop.yml and use it
This fixes slim-lint not honoring a `.rubocop.yml` in the file's or
parent directory. Due to the way slim-lint calls rubocop, it requires
the special `SLIM_LINT_RUBUCOP_CONF` env var to pick up the
`.rubocop.yml` if it is not run on the real file (which is the case
here).

See https://github.com/sds/slim-lint/blob/master/lib/slim_lint/linter/README.md#rubocop
2017-09-15 18:56:59 +02:00
w0rp
a59d1ddbf3 Make temporary file detection work on just about all platforms 2017-09-14 00:11:17 +01:00
w0rp
71c2e65d64 Fix a mistake in the flow tests 2017-09-14 00:10:47 +01:00
w0rp
52c933cd72 Report problems in other files for brakeman, and get the tests to pass on Windows 2017-09-13 23:33:13 +01:00
w0rp
3d2bddf4af Get some more random tests to pass on Windows 2017-09-13 23:30:39 +01:00
w0rp
677263f115 Merge pull request #929 from jdsutherland/solium-solidity-linter
Add solidity linter: solium
2017-09-13 20:32:28 +01:00
Jeff Sutherland
7302bedc5e Add solidity linter: solium 2017-09-14 01:59:22 +07:00
w0rp
91df9ba2c0 Fix #924 - Make changing the sign column color work again 2017-09-12 21:17:54 +01:00
w0rp
4e9420d1f5 Fix #921 - Capture both output streams for gosimple and staticcheck 2017-09-12 19:53:23 +01:00
w0rp
e2271b769c Ban getcwd() from the codebase, as it causes problems 2017-09-12 09:36:16 +01:00
w0rp
7f42aedaec Use the same function for finding the ESLint config for eslint --fix and prettier-eslint 2017-09-12 09:20:31 +01:00
w0rp
661ed6e40b Fix #923 Use package.json as a last resort for eslint --fix 2017-09-12 09:10:37 +01:00
w0rp
a7614d9502 Get more tests to pass on Windows 2017-09-11 22:25:15 +01:00
w0rp
8eb99c3cec Fix #922 - Prefer nearer ESLint configuration files with lower precedence filenames for eslint --fix 2017-09-11 21:53:45 +01:00
w0rp
b6a487ccf9 Fix some random test issues for Windows 2017-09-11 00:47:27 +01:00
w0rp
cb8a140141 Require function! to be used instead of function 2017-09-11 00:47:10 +01:00
w0rp
e19a81cb09 Fix #920 - Shut up about E776 2017-09-10 20:13:35 +01:00
w0rp
65e6e50bf8 Explain the table of contents script better, and simplify it a bit 2017-09-10 19:52:01 +01:00
w0rp
9d24cc4047 Fix numerous issues with integration documentation tags and the table of contents, and add a script to check for theses issues 2017-09-10 19:42:45 +01:00
w0rp
c4ad92e458 Move scripts for tests into the test directory, and do not export the Batch script for running tests 2017-09-10 13:19:08 +01:00
Clément DOUIN
18a7d32c4c Elm local install support (#915)
* Add Elm support for npm local installation
2017-09-10 12:58:42 +01:00
w0rp
c11d2ae375 Fix an SML variable init bug, and get the SML cm file tests to pass on Windows 2017-09-10 00:20:05 +01:00
w0rp
1a52a2b880 Get the TSLint handler tests to pass on Windows 2017-09-10 00:06:31 +01:00
w0rp
18f4d5a6da Simplify some Rust handler code, and get the Rust handler tests passing on Windows 2017-09-10 00:06:31 +01:00
Clément DOUIN
f3da8f45c1 Add elm-format as a new fixer (#916)
* Add elm-format as a new fixer
2017-09-09 21:30:20 +01:00
w0rp
b3a9a0e3e8 Fix some path issues, and get lsp dir tests passing on Windows 2017-09-09 18:39:56 +01:00
w0rp
8055a03067 execute the set encoding test setting to get Vint to shut up 2017-09-09 18:22:59 +01:00
w0rp
f238e15f10 Fix more random Windows test issues 2017-09-09 18:03:34 +01:00
w0rp
574cb11594 #917 Cover the old _args option for flake8 with a test, just in case 2017-09-09 13:28:46 +01:00
w0rp
d9bdbd5a58 Add a Batch script for running tests on Windows 2017-09-08 22:15:39 +01:00
w0rp
a33b3f189d Switch the AppVeyor clone directory to C:\testplugin 2017-09-08 21:54:43 +01:00
w0rp
26195efa0b Get some more random tests to work on Windows 2017-09-08 21:51:49 +01:00
w0rp
1c5253b928 Fix the smoke_test.vader file on Windows 2017-09-08 21:38:51 +01:00
w0rp
89cc8ca314 Fix #912 - Close lists automatically when g:ale_open_list is set to 'on_save' again 2017-09-08 20:10:11 +01:00
Sven-Hendrik Haase
ff28836616 Add GLSL linter using glslang (#914)
* Add a glslang linter for GLSL
2017-09-08 11:06:47 +01:00
BlahGeek
73d031d7ea Add cuda nvcc linter (#874)
* add cuda nvcc linter
2017-09-07 19:23:58 +01:00
w0rp
555d23c035 Now remove the version command and the dummy file 2017-09-07 00:00:00 +01:00
w0rp
8198c2b63c Add a blank file for testing AppVeyor 2017-09-06 23:57:01 +01:00
w0rp
b8963f21bf Now try to cache Vim and Vader for AppVeyor CI 2017-09-06 23:55:58 +01:00
w0rp
9474a9d319 Fix some PowerShell stderr BS 2017-09-06 23:52:57 +01:00
w0rp
963e16870b Try and set up Vader only if needed too 2017-09-06 23:47:51 +01:00
w0rp
02aad45aa6 Fix some PowerShell syntax errors 2017-09-06 23:45:12 +01:00
w0rp
59fd98b8b2 Try and set up AppVeyor so it will only download Vim if the directory is not there 2017-09-06 23:43:49 +01:00
w0rp
fbc846b4ba Try and get AppVeyor to run a single test 2017-09-06 23:28:39 +01:00
w0rp
dd77b6eac5 Set up Vim runtime files in AppVeyor too 2017-09-06 22:53:39 +01:00
w0rp
e951056e7b Try and set up Vader in AppVeyor 2017-09-06 20:03:37 +01:00
w0rp
2be39d3e1c Try again 2017-09-06 19:56:56 +01:00
w0rp
2b34cf098a Try different things for the Vim executable path 2017-09-06 19:55:45 +01:00
w0rp
9821b2c414 Disable builds for AppVeyor 2017-09-06 19:53:53 +01:00
w0rp
6661ff9794 Use absolute paths for the unzipping part in AppVeyor 2017-09-06 19:50:51 +01:00
w0rp
a9823cbfd5 Try to download and unpack a Vim console binary for AppVeyor 2017-09-06 19:47:11 +01:00
Peter Renström
03f1c1e81b Add 'prettier' fixer support to TypeScript, CSS, SCSS and JSON (#910)
* Add prettier fixer support for typescript

* Add prettier fixer support for css and scss

* Add prettier fixer support for json

* Use getbufvar() to get &filetype
2017-09-06 15:21:26 +01:00
w0rp
c277cdef8c Add an option for ignoring the output of TSLint if a file contains a single blank line 2017-09-06 11:17:21 +01:00
w0rp
ad1bd424fa Run installation steps in install instead for AppVeyor 2017-09-06 10:14:25 +01:00
w0rp
a170cc806a Do not mess with newlines for git config 2017-09-05 23:13:33 +01:00
w0rp
22a0cd6e05 Try and get appveyor to clone the repo by using a clone depth 2017-09-05 23:00:42 +01:00
w0rp
a21a75c19e Fix the .mak file name 2017-09-05 22:34:31 +01:00
w0rp
8595fcdeb9 Try and get nmake to work in AppVeyor 2017-09-05 22:32:34 +01:00
w0rp
5239ef9c83 Try and set up appveyor for building Vim 2017-09-05 22:26:14 +01:00
ode79
edfe65a22c Fix OCaml helptag name to match readme. (#909)
* Fix an OCaml help tag in the README
2017-09-05 13:50:03 +01:00
w0rp
e53debe000 Fix #907 - Stop LSP integration breaking with empty string keys in NeoVim 2017-09-04 00:15:13 +01:00
w0rp
c2f547b6e3 Merge branch 'support-lintr-options' 2017-09-03 23:37:04 +01:00
w0rp
984c4f0658 Document the new lintr option 2017-09-03 23:36:58 +01:00
w0rp
1ea5400e8d Test lintr options configuration 2017-09-03 23:29:12 +01:00
Alex Axthelm
b60a7224ab allow options to be set for lintr 2017-09-03 23:14:26 +01:00
Alex Axthelm
29ffd5134f Allow for lintr options 2017-09-03 23:14:26 +01:00
w0rp
6833e01f23 #894 - Replace ugly temporary filenames for Haskell problems with the buffer's basename 2017-09-03 21:53:48 +01:00
w0rp
0aa8640d07 Fix a typo 2017-09-03 20:14:42 +01:00
w0rp
e235e5a6a5 Make the grammar a little better for the g:ale_type_map option 2017-09-03 20:12:54 +01:00
Jake Zimmerman
63e8946fc8 Detect and use CM files for smlnj (#884)
* Detect and use CM files for smlnj

* Split into two checkers

- one for CM projects
- one for single SML files

* Fix some typos

* Fix error caught by writing tests

We want to actually use `glob` to search in paths upwards from us.
(Previously we were just searching in the current directory every time!)

* Fix errors from former test run

* Write tests for GetCmFile and GetExecutableSmlnj

* Typo in 'smlnj/' fixture filenames
2017-09-03 19:56:14 +01:00
w0rp
c7fbcb3c02 Fix #899 - Make the quickfix and loclist windows close again 2017-09-03 19:44:00 +01:00
w0rp
d482b8e3b7 Fix #891 - Do not check ctrlp-funky windows 2017-09-03 18:24:43 +01:00
w0rp
f9b43a566c #505 - Do not lint files on enter if the option for linting when the filetype changed is on 2017-09-02 16:57:01 +01:00
w0rp
52eff3bd83 Log commands that are run for ALEFix for ALEInfo 2017-08-31 16:46:40 +01:00
w0rp
7c2a5052a8 Fix #895 - Run Node.js scripts with node.exe instead of node on Windows 2017-08-31 13:12:24 +01:00
w0rp
1d86a724f2 Merge branch 'fix-prettier-eslint-fixer' 2017-08-30 22:49:55 +01:00
w0rp
f36f38c960 Cover the prettier-eslint changes with tests, and fix some problems 2017-08-30 22:49:46 +01:00
w0rp
301d30229b Fix doc tag alignment 2017-08-30 22:23:59 +01:00
Pavel Pertsev
05ce86ea33 Add prettier-eslint legacy option 2017-08-30 22:21:45 +01:00
Pavel Pertsev
6e423a94cd Fix docs for prettier-eslint ver 2017-08-30 22:20:35 +01:00
Pavel Pertsev
c09f8f5764 Passthrough eslint config to prettier-eslint 2017-08-30 22:17:16 +01:00
w0rp
33278f0fce Merge branch 'c-clang-tidy' 2017-08-30 22:11:51 +01:00
w0rp
9958a8d32e Add tests for the c version of clang-tidy 2017-08-30 22:11:04 +01:00
w0rp
ed9cdca127 Merge remote-tracking branch 'randrej/master' into c-clang-tidy 2017-08-30 22:08:41 +01:00
w0rp
fca77266bd Complain about badly aligned documentation on Travis CI, and fix some existing problems 2017-08-30 21:56:43 +01:00
w0rp
688212130d Fix the tag alignment for the tslint documentation 2017-08-30 21:29:19 +01:00
w0rp
3bde390c58 Merge branch 'tslint-rules' 2017-08-30 21:27:34 +01:00
w0rp
0cdb653c9c Cover the tslint rules option with a test 2017-08-30 21:27:28 +01:00
w0rp
40dca63891 Merge remote-tracking branch 'jclem/master' into tslint-rules 2017-08-30 21:21:03 +01:00
w0rp
b8f5a4923c Merge pull request #892 from jparise/thrift
Add a linter for Apache Thrift IDL files
2017-08-30 19:46:17 +01:00
Jon Parise
f4c5d29c64 Add a linter for Apache Thrift IDL files
This linter works by invoking the `thrift` compiler with the buffer
contents and reporting any parser and code generation issues.

The handler rolls its own output-matching loop because we have the
(unfortunate) requirement of handling error output that spans multiple
lines.

Unit tests cover both the command callback and handler, and there is
initial documentation for all of the option variables.
2017-08-30 11:08:06 -07:00
w0rp
c7536fb4fd Merge pull request #889 from bb010g/patch-1
Gradle support for javac
2017-08-30 10:26:27 +01:00
w0rp
3152e5c207 Fix #888 - Disable pycodestyle by default 2017-08-30 09:13:49 +01:00
Brayden Banks
d08d2dac79 Gradle support for javac
Based off of #745.
2017-08-29 15:39:23 -07:00
w0rp
8264e265a8 Make the check-supported-tools-tables script work on more machines 2017-08-29 17:00:09 +01:00
w0rp
ec178b0b3b Add a missing scriptencoding line 2017-08-29 16:57:08 +01:00
aliou
b36882e72e Add support for prettier configuration file. (#886)
* Add support for prettier configuration file.

As of version 1.6.0, prettier allows passing a `--config` argument with
a path to a configuration file.

* Add test prettier configuration file.

* Add option to use local prettier configuration.

* Add description for new prettier option.

* Also check if the config is present before using it.
2017-08-29 16:05:19 +01:00
w0rp
87fb72346a Merge pull request #885 from morhetz/add-prettier-d-fixer
Add prettier_d fixer path
2017-08-29 11:12:23 +01:00
Pavel Pertsev
2a238fda9e Add prettier_d fixer path 2017-08-29 11:46:53 +03:00
w0rp
54900d5216 Do not export the check-supported-tools-tables script 2017-08-28 22:17:03 +01:00
w0rp
22db934db9 Do not bother using hyperlinks for the table notes, which looks better 2017-08-28 22:12:41 +01:00
w0rp
4a0735a195 Add spaces before exclamation mark markers, which reads better 2017-08-28 22:10:33 +01:00
w0rp
0827cb5483 Use two exclamation marks for marking lint file linters, which are easier to see and click 2017-08-28 22:08:55 +01:00
w0rp
8e3c1dbd11 Fix - #883 Document linting behavior better, sync up the lists of supported tools, andautomatically demand that they stay in sync 2017-08-28 22:05:12 +01:00
w0rp
b031531e79 #869 - Detect the shell dialect from the hashbang for shellcheck 2017-08-28 19:16:23 +01:00
w0rp
73ec83d055 Handle jobstart() returning -1 in the NeoVim 0.2.0, just in case 2017-08-28 15:25:18 +01:00
w0rp
908e94622e #868 - Prefer cmd.js files for executing standard 2017-08-26 18:11:27 +01:00
w0rp
b9cf450684 Set the end column for some Vint problems 2017-08-26 17:23:20 +01:00
w0rp
e13651c16d Fix #825 - Downgrade signs when problems change 2017-08-26 16:38:27 +01:00
w0rp
cdd1ddffdb Fix #876 - Save history in a separate buffer variable so history works when linting is disabled 2017-08-25 22:22:26 +01:00
Michael
8f8d015dae Add pycodestyle Python linter support (#872)
Add a pycodestyle linter
2017-08-25 12:46:56 +01:00
Peter Renström
4bea50b82f Add clang-format fixer for C/C++ (#873)
* Add clang-format fixer for C/C++

* Document clang-format options

* Refer ale-cpp-clangformat to ale-c-clangformat
2017-08-24 22:49:43 +01:00
w0rp
623fdf212c Include executable checks in ALEInfo 2017-08-23 21:41:29 +01:00
w0rp
0507503aa7 #653 Set loclists better when taking data from previous buffers 2017-08-22 22:45:55 +01:00
w0rp
80c7fbcefe Remove some redundant eslint test code 2017-08-22 21:40:00 +01:00
Eric Stern
2f19cf874b Suppress warning about .eslintignore'd file (#836)
* Suppress warning about .eslintignore'd file

* Fix slightly ironic lint error

* Lock error suppression behind a variable; add docs and tests
2017-08-22 21:35:09 +01:00
w0rp
1a524ca63e #653 - Always set loclist or quickfix in a timer callback, which prevents errors E924, E925, and E926 2017-08-22 21:19:36 +01:00
w0rp
47a8ebc8b9 Prevent .swp files from causing the tests to hang in Vim 8 2017-08-22 21:08:32 +01:00
w0rp
9d3bda4441 Merge pull request #865 from jez/erubis-linter
Add erubis linter
2017-08-22 10:33:08 +01:00
Jake Zimmerman
b356d56448 Add erubis linter
This linter works largely the same as the existing `erubylint` linter,
except it works with `erubis` instead of `erb` as the driving command.
2017-08-21 13:51:42 -07:00
w0rp
a3299bf03a Fix #864 - Use the user's configured executable for phpstan for executable() checks 2017-08-21 18:42:18 +01:00
w0rp
cc02eb8a5a #653 Show errors from other files for mypy 2017-08-20 17:43:42 +01:00
w0rp
456378cb53 #653 - Jump to the position which Vim does not jump to for moving from quickfix/loclist items to other buffers 2017-08-20 15:59:27 +01:00
w0rp
47e681529b Merge pull request #862 from notomo/add-phpcbf-fixer
add phpcbf fixer
2017-08-20 13:42:03 +01:00
w0rp
4c6b58f70c Fix some indentation 2017-08-20 13:37:21 +01:00
Michiel Westerbeek
d646ebda72 Added new linter for GraphQL: gqlint (#863)
* Added new linter for GraphQL: GQLint

* added help-files
2017-08-20 13:36:46 +01:00
w0rp
c7193e775e #653 Document the automatic error prompt closing behaviour 2017-08-20 13:35:27 +01:00
w0rp
753cf5da95 #653 - Automatically accept annoying loclist and quickfix errors from Vim 2017-08-20 13:27:18 +01:00
tmn-o3
5a9a365aed add phpcbf fixer 2017-08-20 05:47:21 +00:00
w0rp
e5d0a17694 #653 - Explain the new filename key support in the documentation 2017-08-20 00:16:28 +01:00
w0rp
7112776d1b #653 Update tslint to set the filename key for problems in other files 2017-08-20 00:05:15 +01:00
w0rp
fb0adc602e #653 Treat temporary filenames as being for the current buffer 2017-08-19 21:18:27 +01:00
w0rp
9d6883561c #653 Set problems from other buffers when buffers are first checked 2017-08-19 20:15:46 +01:00
Dmitri Vereshchagin
b2d3764a18 Syntaxerl linter feature check (#861)
* Add feature check for SyntaxErl linter

* Escape SyntaxErl executable path in commands
2017-08-19 18:54:23 +01:00
w0rp
20e64fbae0 #860 Only enable the new option for setting the original filename for SyntaxErl if an option is on in ALE 2017-08-19 15:48:29 +01:00
w0rp
f8de08faf0 Merge pull request #860 from dmitrivereshchagin/update-syntaxerl-linter
Add original filename to SyntaxErl command
2017-08-19 15:37:06 +01:00
Dmitri Vereshchagin
18cb9a725d Add original filename to SyntaxErl command 2017-08-19 17:18:48 +03:00
Dmitri Vereshchagin
e9e1bec772 Update SyntaxErl linter tests 2017-08-19 17:18:48 +03:00
w0rp
fb0c931b2d Update the documentation to mention the new behaviour for quickfix 2017-08-19 14:35:01 +01:00
w0rp
5c839c4825 #653 Collect items for quickfix from all buffers, and de-duplicate them. Set filename items in quickfix and loclist. 2017-08-19 14:28:51 +01:00
w0rp
9c6e25d8d8 Stress the need for tests even further 2017-08-19 13:14:53 +01:00
w0rp
be4347084e Increase the default maximum completion suggestions to a more useful but safe level, and filter before requesting details, which is faster 2017-08-18 22:34:18 +01:00
w0rp
8cc7cd3aa1 Change the completeopt setting just before showing suggestions too, which works better 2017-08-18 21:06:21 +01:00
w0rp
41c4f3431c Fix #858 - Fix the stack ghc-mod command 2017-08-18 19:33:23 +01:00
w0rp
2560cdd56e Update the summary in the README for fixing and completion support 2017-08-18 00:13:08 +01:00
w0rp
2365fd2948 Document completion support for ALE, and expand the fixer documentation a little 2017-08-18 00:08:58 +01:00
w0rp
0a282eb76a Automatically adjust the completion options when using completion while you type 2017-08-17 23:06:02 +01:00
w0rp
342e83db60 Include the ruleName for errors in tslint problems 2017-08-16 10:37:36 +01:00
w0rp
17a76a7403 Cover completion with more tests 2017-08-16 00:45:46 +01:00
w0rp
797b03b35e Change the help file heading for clarification 2017-08-14 23:52:13 +01:00
w0rp
5af82312fb Set up one BufEnter event used for everything, and add tests for linting when the filetype changes 2017-08-14 23:31:54 +01:00
w0rp
1680f7af63 Fix a bug where the sign column was not closed some of the time, etc. 2017-08-14 10:00:46 +01:00
w0rp
79701f6f20 #653 Skip filetype keys in g:ale_buffer_info during cleanup 2017-08-13 22:27:01 +01:00
w0rp
2d02de33d4 #653 - Filter items based on the buffer number for signs 2017-08-13 16:30:46 +01:00
w0rp
ea124c49d0 Cover filtering out items from other buffers for highlights 2017-08-13 16:04:17 +01:00
w0rp
a5d7bb449b Merge pull request #846 from voanhduy1512/ghc-mod
Make ghc-mod linter check current buffer
2017-08-13 15:30:46 +01:00
Vo Anh Duy
626568d66d Make ghc-mod be awared of cabal file
Right now ghc-mod linter check temp file instead of current buffer,
which cause the problem that it can't detect cabal file and raise
missing package error.

To fix that we need to run ghc-mod check with actual path of the current
file and with ghc-mod option `--map-file` to redirect temp file source
code to actual one
2017-08-13 20:49:26 +08:00
w0rp
ae6cecabb6 #653 Filter items based on the buffer number for problem counts 2017-08-13 13:24:10 +01:00
w0rp
f67fc43d9b Simplify the loclist jumping code a little 2017-08-13 13:06:22 +01:00
w0rp
c6d11f4281 #653 - Filter out other buffers for loclist jumping 2017-08-13 13:02:59 +01:00
w0rp
b6f0b17eaf Merge pull request #848 from ilex/master
Fix bug with ALEPrevious for blank lines.
2017-08-13 11:02:55 +01:00
ilex
bc548b2ef9 Fix bug with ALEPrevious for blank lines.
ALEPrevious (as well as ALEPreviousWrap) does not work if there is an
error in empty line like 'W391: blank line at end of file' in python.
2017-08-13 11:56:41 +03:00
w0rp
e6b6146731 #653 - Fix loclist jumping so it works with buffer numbers 2017-08-12 14:49:02 +01:00
w0rp
b300b0646d Fix a failing test 2017-08-12 14:45:22 +01:00
w0rp
c14886e479 #653 - Include the buffer number in sorting of items 2017-08-12 14:37:56 +01:00
w0rp
c52a4910bf #653 - Update the loclist binary search to work with buffer numbers, to filter out items for other buffers 2017-08-12 14:27:47 +01:00
w0rp
7614560a6e #468 - Do not try to echo things for a while if something goes wrong 2017-08-12 10:47:06 +01:00
w0rp
8e9130d66e Use a shorter default completion delay, which works better 2017-08-11 10:50:59 +01:00
w0rp
78b9ae0f1c Add a fix function for breaking up long Python lines, which is hidden for now 2017-08-11 10:31:25 +01:00
w0rp
d5ae3201a4 Ban !=# and !=? from the codebase 2017-08-11 00:31:42 +01:00
w0rp
b1462ac66c #653 - Pass on filenames for loclist items 2017-08-10 23:08:40 +01:00
Scott Bonds
322910dc0b Add linter for Idris (#838)
* Add linter for Idris

* Fix parsing warnings and column ranges in Idris linter

* Make Idris linter configurable. Fix help tag.
2017-08-10 21:09:58 +01:00
w0rp
dcf7cbe366 Merge pull request #842 from gfontenot/gf-swiftformat
Add support for SwiftFormat as a fixer
2017-08-10 21:06:55 +01:00
w0rp
34aa3437e0 Pass extra rubocop options in the middle instead, and fix the Vader test so it can be run multiple times in Vim 2017-08-10 14:57:30 +01:00
Miguel Palhas
0c26e8945c Rubocop fixer now uses g:ale_ruby_rubocop_options (#841)
* Rubocop fixer now uses g:ale_ruby_rubocop_options

* Adds spec
2017-08-10 14:52:54 +01:00
w0rp
9ae2df1958 Automatically check for invalid help tag references, and fix some existing documentation issues 2017-08-10 10:45:12 +01:00
w0rp
7dee9da0f2 Fix documentation for the PHP langserver options 2017-08-10 10:28:42 +01:00
w0rp
2dcd2ee4da Fix some broken tag links 2017-08-10 10:14:42 +01:00
w0rp
b9f31621e4 Move --format=default in the flake8 command to the return value, and remove extra spaces in the tests 2017-08-10 09:58:32 +01:00
w0rp
abcf2909e6 Merge pull request #837 from matthewgrossman/master
Default flake8 to --format=default
2017-08-10 09:56:39 +01:00
Gordon Fontenot
4709e67627
Add support for SwiftFormat as a fixer
SwiftFormat is a tool that can be used to format Swift files. This commit adds
support for using SwiftFormat as a fixer from ALE. It looks for executables in
the Pods directory, then the Pods directory for a React Native project, then
finally falls back to the globally installed instance if neither of those were
found.

https://github.com/nicklockwood/SwiftFormat
2017-08-09 12:41:21 -05:00
Gordon Fontenot
2b546a50dc
Fix link for SwiftLint 2017-08-09 12:26:13 -05:00
Matthew Grossman
fe95fcd357 Default flake8 to --format=default 2017-08-09 10:05:56 -07:00
w0rp
670858f774 Fix #468 - Add a cool down period for when things go wrong 2017-08-09 00:05:55 +01:00
w0rp
ac8cc6d991 Document the extra optional argument for ale#Queue 2017-08-08 23:52:28 +01:00
w0rp
16772298ab Simplify some comparisons 2017-08-08 08:43:51 +01:00
w0rp
a535d07f28 Ban use of ==# or ==? in the codebase, and prefer is# or is? instead 2017-08-08 08:39:13 +01:00
w0rp
5010ddc28f Fix #833 - Do not open windows on save when the option is off 2017-08-08 07:29:10 +01:00
w0rp
16cfedf04a Fix #271 - Add the ability to open the quickfix or loclist windows only after saving a file 2017-08-08 00:46:42 +01:00
w0rp
2edea15358 Fix the resetting of selections and annotate it 2017-08-07 22:08:35 +01:00
Adrian Kocis
c18451fba9 added missing visual reselection after quick/location list update (#788)
Reset visual selection after opening loclist or quickfix windows
2017-08-07 21:57:59 +01:00
w0rp
2c4700ab7f #517 - Document arguments for defining LSP linters 2017-08-07 13:31:29 +01:00
w0rp
39ebb431b6 Document the PHP langserver integration 2017-08-07 13:08:51 +01:00
w0rp
f7d7abe5b2 Document the rls linter 2017-08-07 13:00:17 +01:00
w0rp
2d608b9329 The default for ale_rust_cargo_use_check was wrong in the documentation 2017-08-07 09:41:52 +01:00
Andrej Radovic
e4a6da936d Fixed helptag alignment. 2017-08-06 13:15:02 +02:00
Andrej Radovic
70cd1d5a57 Fixed the comments, left only the doc URL 2017-08-06 13:14:09 +02:00
w0rp
593cafa18b Fix #823 - Write Windows files with CRLF 2017-08-05 20:17:25 +01:00
w0rp
747d4fe80b Stop writing a test file in real world usage in some cases 2017-08-05 19:51:38 +01:00
Andrej Radovic
a767578d44 Added clang-tidy for C, too.
A limited number of clang-tidy checks can be used with C, too. I pretty much
copied and refactored the C++ clang-tidy linter, and added some documentation
about C-compatible checks.
2017-08-05 16:42:28 +02:00
w0rp
666cfc6ee2 Fix the completion start position regex matching being off by one 2017-08-04 16:15:48 +01:00
w0rp
9ac74c44fe Tell Vim omnicompletion that tsserver matches are case-insensitive 2017-08-04 13:35:02 +01:00
w0rp
d1023e9c2c Merge pull request #821 from verbitan/nagelfar
Add Tcl nagelfar linter
2017-08-03 23:40:09 +01:00
w0rp
09d50ebe31 Cover the Rust LSP with tests, allow LSP linters to be named anything, and rename the Rust LSP linter to rls 2017-08-02 23:21:30 +01:00
Nick James
a3d2fb5688 Add Tcl nagelfar linter 2017-08-02 23:05:19 +01:00
w0rp
617582c5d3 Use g: for the PHP Vader tests 2017-08-02 22:36:53 +01:00
w0rp
6e07cf5b12 Cover the PHP language server functions with Vader tests 2017-08-02 22:34:09 +01:00
w0rp
1356cf8e01 #517 Enable the PHP language server 2017-08-02 19:44:00 +01:00
w0rp
db531171ac Merge pull request #820 from junegunn/rubocop-cop-name
Rubocop: Show cop name
2017-08-02 18:37:31 +01:00
w0rp
d6557b2c5c Fix indentation and a typo in the gometalinter documentation 2017-08-02 18:36:53 +01:00
w0rp
ad4c7f92cf Merge pull request #819 from deltaskelta/doc-#816
added gometalinter docs - Fix for #816
2017-08-02 18:34:56 +01:00
Junegunn Choi
bc1cf285c2
Rubocop: Show cop name 2017-08-02 13:55:54 +09:00
Jeff Willette
7eb84242ee added gometalinter docs - Fix for #816 2017-08-02 13:34:24 +09:00
w0rp
35913d9ce7 Cover the SaveEvent function with a test 2017-08-01 00:42:22 +01:00
w0rp
a4ffd2f37c #734 - Use the buffer number from the events for entering buffers and saving buffers for checking buffers 2017-08-01 00:03:24 +01:00
w0rp
ec82530247 #734 - Do not clear file linter results when no buffers are run 2017-07-31 22:36:30 +01:00
w0rp
7c32ef104b Merge pull request #813 from mahmost/stylelint-fixer
Add stylelint fixer
2017-07-31 12:30:18 +01:00
Mahmoud Mostafa
eaeb71993f Add stylelint fixer 2017-07-31 02:54:59 +02:00
w0rp
79d4935ccf Cover special LSP initialize response handling with Vader tests 2017-07-30 23:53:46 +01:00
w0rp
2c252c0f12 #517 - Get the Rust language server working in a basic way 2017-07-30 23:34:58 +01:00
w0rp
6000d956f0 When servers never send an initialize response, but instead just publish diagnostics straight away, handle that as an initialize response 2017-07-30 22:18:19 +01:00
w0rp
5810d7faa0 Add some error message handling for LSP, for test purposes 2017-07-30 22:17:29 +01:00
w0rp
84af543907 Fix some bugs so the PHP language server will show errors at least once 2017-07-30 14:42:00 +01:00
w0rp
63b9d9e9df Fix #798 - Handle syntax errors for tsserver 2017-07-27 13:24:32 +01:00
w0rp
fa33faad9e #810 - Handle output which is not JSON in many linters 2017-07-27 00:45:25 +01:00
w0rp
db4d68eae7 Add a fuzzy JSON decoding function for ignoring json_decode errors for linters 2017-07-27 00:06:15 +01:00
w0rp
ded1bc14df #810 Ignore output which isn't JSON for brakeman 2017-07-26 23:17:46 +01:00
w0rp
810e884dbe Remove channel logging 2017-07-26 10:45:21 +01:00
w0rp
fbf59fd4ce Check the active_linter_list only for running linters 2017-07-26 10:44:27 +01:00
w0rp
cfdb41f4d2 Remove a redundant check for tsserver 2017-07-26 10:44:07 +01:00
w0rp
e6f527f954 Merge branch 'lsp-stdio-support' 2017-07-26 10:37:50 +01:00
w0rp
cd860e3e8d #517 Add more code LSP support which makes the tssserver linter behave more like the LSP linters 2017-07-26 10:37:37 +01:00
w0rp
86297a7c65 Fix #804 - Do not run scalac for sbt files 2017-07-26 10:29:46 +01:00
w0rp
e45c16d9bb Fix #796 - Ignore errors for closing the last window 2017-07-24 09:30:41 +01:00
w0rp
e0c014ab8c Disable completion in the Vader test if we temporarily enable it 2017-07-24 09:23:53 +01:00
w0rp
b4d23d700b Set the g:ale_completion_enabled option when completion is enabled or disabled 2017-07-24 09:22:29 +01:00
w0rp
d1424de1f9 Merge pull request #799 from takano-akio/hdevtools-options
Make executable and options configurable for hdevtools
2017-07-24 09:15:16 +01:00
Takano Akio
8ab632e6f2 Make executable and options configurable for hdevtools 2017-07-24 05:50:09 +00:00
w0rp
a0059cfe03 Fix #795 - Handle GCC errors without column numbers 2017-07-23 00:39:59 +01:00
w0rp
12217480f9 Merge pull request #781 from sumnerevans/standard-fixer
Added fixer for Standard linter
2017-07-22 19:33:42 +01:00
w0rp
c1998b170c Update the PR template to stress the need for tests even more. 2017-07-22 19:31:48 +01:00
w0rp
78e37dabb7 Fix #794 - Filter out any preceding lines of Flow output which aren't JSON 2017-07-22 19:21:30 +01:00
Jonathan Clem
6d732b9fb4 Remove trailing whitespace in tslint.vim 2017-07-21 16:09:45 -04:00
Jonathan Clem
710c3ee3d2 Use the tslint_rules_option variable 2017-07-21 15:59:16 -04:00
Jonathan Clem
3bb75a6fde Document g:ale_typescript_tslint_rules_dir 2017-07-21 15:55:55 -04:00
Jonathan Clem
8ea9044667 Add myself to authors for tslint.vim 2017-07-21 15:54:28 -04:00
Jonathan Clem
cddb26558f Add tslint support for rules directory option 2017-07-21 15:52:51 -04:00
Sumner Evans
f3fec6685e
added tests for Standard.js 2017-07-21 11:47:41 -06:00
w0rp
ee6dabcc4e Don't mess with compleopt for each completion, as it doesn't work 2017-07-21 14:55:32 +01:00
w0rp
af6830a722 Merge pull request #789 from tmsc4zht/fix_typo_in_doc_ale-go
fix typo in doc/ale-go
2017-07-21 09:33:27 +01:00
Rei MOCHIZUKI
ce845e51f2 fix typo in doc/ale-go 2017-07-21 09:36:40 +09:00
w0rp
87616c5e91 #782 - Do not set the build directory for clang-tidy for header files, which does not work 2017-07-20 14:52:24 +01:00
w0rp
7d1fde292d Update the installation notes for the standard package management sysytem so helptag generation will actually work 2017-07-20 13:45:28 +01:00
w0rp
a5f754a5e0 Fix #786 - Only set --no-local-style for yapf if a configuration file is detected 2017-07-20 11:07:07 +01:00
Sumner Evans
ca83f11bee
added fixer for Standard 2017-07-19 14:50:33 -06:00
w0rp
f133ce96f8 Fix heading levels 2017-07-19 13:37:40 +01:00
w0rp
cbdf10a129 Fix #573 - Update the README to recommend installing via the built-in package system 2017-07-19 13:36:30 +01:00
w0rp
0b50ebb0f0 Fix #779 - Handle empty output for tslint 2017-07-19 10:26:03 +01:00
w0rp
235fc90e22 Fix #308 - Check Dart files with dartanalyzer 2017-07-18 23:57:33 +01:00
w0rp
aa94d0902a Fix #710 - Show hlint suggestions as info items, and include end line and column numbers 2017-07-18 13:14:02 +01:00
w0rp
5a6ffc2804 Add a missing test file 2017-07-18 12:34:22 +01:00
w0rp
0931e99ea4 Fix #775 - Run eslint.js via node on Windows for eslint --fix 2017-07-18 12:28:20 +01:00
w0rp
a8a4df05e6 Fix #776 - Do not add ; echo for Windows for Flow 2017-07-18 11:46:59 +01:00
Matthew Turland
da410caff8 Add yaml swaglint linter (#771)
* Add yaml swaglint linter
2017-07-17 20:28:21 +01:00
w0rp
a6cc492a99 Limit the suggestions only after filtering them 2017-07-17 17:39:11 +01:00
w0rp
27feab7e3a Filter the completion results by the prefix we used 2017-07-17 15:31:32 +01:00
w0rp
eab77b7072 #703 Add arguments to avoid generating plist files if no build directory is detected for clang-check 2017-07-17 10:19:08 +01:00
w0rp
3b1bc2bd13 Fix another executable callback typo 2017-07-17 00:19:33 +01:00
w0rp
92918fd841 Fix an executable_callback typo 2017-07-17 00:18:43 +01:00
w0rp
23ea62d40a #711 - Make the cpplint executable configurable 2017-07-17 00:17:59 +01:00
w0rp
3352a6c9df #711 - Make the clangtidy executable configurable 2017-07-17 00:07:18 +01:00
w0rp
fe70742bb9 #711 - Make the clangcheck executable configurable 2017-07-16 23:35:10 +01:00
w0rp
9e83878900 #711 - Make the gcc executables configurable 2017-07-16 22:41:15 +01:00
w0rp
58717e05a3 #711 - Make the cppcheck executables configurable 2017-07-16 22:11:43 +01:00
w0rp
54ff573174 #711 - Make the clang executables configurable 2017-07-16 21:37:10 +01:00
w0rp
bd5ff5b1e5 Merge pull request #774 from dmitrivereshchagin/syntaxerl-linter
Add SyntaxErl linter
2017-07-16 15:06:55 +01:00
Ardis
7d174b0056 Added phpstan linter for php. (#772)
* Added phpstan linter for php.
2017-07-16 15:04:25 +01:00
Dmitri Vereshchagin
1aea6a34ff Add SyntaxErl linter
These changes add [SyntaxErl][1] integration.  SyntaxErl is a syntax
checker tool for Erlang.

[1]: https://github.com/ten0s/syntaxerl
2017-07-16 15:35:21 +03:00
w0rp
4fa66ab627 Fix #560 #763 - Silence errors for setting signs, and do nothing for dirvish 2017-07-16 01:15:07 +01:00
w0rp
15c48650e7 #739 - Document the end_col and end_lnum keys for the loclist format 2017-07-16 00:40:20 +01:00
w0rp
cad9fc19c6 Fix #773 - Do not clear the loclist when closing the loclist window 2017-07-15 18:44:45 +01:00
w0rp
507e32e91c #764 - Update the documentation to mention how to echo messages with the ALELint autocmd 2017-07-14 00:33:12 +01:00
w0rp
5afbc9b701 Simplify the tests for the ALELint autocmd command 2017-07-14 00:33:12 +01:00
Kevin Kays
4c50aec79c Add scalastyle linter (#766)
* Add support for scalastyle

* Add scalastyle docs

* scalastyle support for column numbers

* off by one column

* Add tests for scalastyle command and handler

* update readme for scalastyle

* allow full scalastyle options instead of just config file

* fix indentation

* allow scalastyle config file in parent directories by a couple names.

* check for missing match args with empty

* remove echo

* use a for loop
2017-07-13 23:41:01 +01:00
w0rp
4c6c5bf84f #697 - Remove highlights more thoroughly 2017-07-13 23:27:02 +01:00
w0rp
b50ae96413 #769 Ignore stderr output and output without JSON we can read for rubocop 2017-07-13 22:47:43 +01:00
w0rp
f7f6f6541d Make tsserver completion more reliable, but not quite ready for documentation yet 2017-07-13 11:59:33 +01:00
w0rp
bc97735b6d Merge pull request #767 from elebow/rubocop-handle-empty-files-output
Rubocop: handle empty 'files' array in output
2017-07-13 09:41:36 +01:00
Eddie Lebow
dcbb0ffee5 Rubocop: handle empty 'files' array in output
The handler previously assumed there would be at least one entry in the
'files' array in the output JSON. It looks like this in the normal case:

  "files":[{"path":"app/models/image.rb","offenses":[]}]

But if RuboCop's config excludes the specified input files, causing no
files to be linted, the output is emptier:

  "files":[]

This change causes the handler to treat that case correctly, and also
exit early if the reported offense_count is zero.
2017-07-12 19:53:58 -04:00
w0rp
5885954197 Fix #760 - Report problems with configuration files for rubocop 2017-07-12 22:41:06 +01:00
Eddie Lebow
bc32e24203 Add rails_best_practices handler (resolves #655) (#751)
* Move FindRailsRoot() to more general location

* Add rails_best_practices handler (resolves #655)

* Update documentation for rails_best_practices

Also add brakeman to *ale* documentation.

* rails_best_practices: allow overriding the executable

* rails_best_practices: format help correctly

* rails_best_practices: capture tool output on Windows
2017-07-12 10:43:47 +01:00
w0rp
400580e4e8 Merge pull request #762 from bugant/fix-function-doc-for-FindProjectRoot
Fix docs for FindProjectRoot function
2017-07-12 09:23:14 +01:00
w0rp
9e0d7a9d8c Merge pull request #761 from svanharmelen/f-improve-regex
Fixup #756 (gometalinter)
2017-07-12 09:22:34 +01:00
Matteo Centenaro
ff80b23ee1 Fix docs for FindProjectRoot function 2017-07-12 10:00:42 +02:00
Sander van Harmelen
b2be833744 Fixup #756
The real fix was not using absolute paths anymore (so not expanding with the `:p` option). The regex was correct and should at least include the `^` character to make sure the string starts with the given path/filename and not references the path/filename in some error description.
2017-07-12 09:51:44 +02:00
w0rp
340c0bbac5 #756 Escape the paths used for the --include parameter for gometalinter, which uses RE2 2017-07-11 23:47:21 +01:00
w0rp
d12e990f73 Merge pull request #759 from julianandrews/docs-typo-fix
Fix documentation typo
2017-07-11 23:18:48 +01:00
Julian Andrews
bbabdd0043 Fix documentation typo 2017-07-11 16:14:18 -06:00
w0rp
a96cc92edf Merge pull request #756 from svanharmelen/b-gometalinter
Make gometalinter work again
2017-07-11 23:13:28 +01:00
w0rp
7b73204f25 Fix #747 - Lint and fix files after they have been been written to disk, not during writing them 2017-07-11 22:19:26 +01:00
Matteo Centenaro
505d114a68 Look for ini file to spot python project root (#755)
* Look for ini file to spot project root

When looking for the project root folder it would be better
to check for some well-known init file instead of __init__.py.
Indeed, with python3 it is now possible to have namespace modules
where intermediate dirs are not required to include the __init__.py file.

* Break if statement conditions over several lines

* Add blank lines for the if block

* Add test for FindProjectRoot

* Typo: missing / for MANIFEST.in

* Fix test for non-namespace package

* Add more test cases
2017-07-11 21:57:37 +01:00
Sander van Harmelen
5c7b55edec Make gometalinter work again
They changed their logic to use related paths instead of absoluut paths (see [here](a04df08be5 (diff-04424ed7c660c10495a54e8d11be89eaR253)))

This fixes the linter by also using relative paths…
2017-07-11 17:13:04 +02:00
Jake Zimmerman
768f761017 Prefer --fast for stack-build (#754)
* Vim scripts shouldn't have hyphens

Especially not ones that will be autoloaded. You can't have a hyphen in
a function name, so autoloading functions based on filename will fail.

* Add g:haskell_stack_build_options, default: --fast

If we're going to use the --fast option, we may as well go the whole 9
yards and let the user configure the 'stack build' flags.

* Create documentation for stack-build options
2017-07-11 13:05:13 +01:00
w0rp
05d3bb12dd Merge pull request #752 from elebow/brakeman-cleanup-unused-cache-var
Brakeman: Remove unused cache var from tests
2017-07-11 11:36:50 +01:00
Eddie Lebow
78e0029488 Fix comment typo 2017-07-11 01:30:28 -04:00
Eddie Lebow
eb79b52a9a Brakeman: Remove unused cache var from tests 2017-07-11 01:30:06 -04:00
Michael Pardo
d787050fa8 Kotlin and general Gradle support. (#745) 2017-07-10 23:03:36 +01:00
w0rp
29d0a20dc3 Fix the flow command tests so they will run on my machine 2017-07-10 21:44:51 +01:00
w0rp
751d965265 Fix #749 - Use /bin/sh when the shell is fish 2017-07-10 21:35:35 +01:00
w0rp
b44f6053d1 Fix #730 - Lint files on save even when nothing was fixed 2017-07-10 13:40:22 +01:00
w0rp
82dd80c692 Fix #746 - Keep highlights from other plugins when buffers are hidden 2017-07-10 00:02:49 +01:00
w0rp
6a84605c57 Make every test set filenames and switch directories in the same way, and fix some missing escaping for the rubocop linter 2017-07-09 22:43:31 +01:00
Jake Zimmerman
b50a7318fb Add new Haskell linter (#742)
* Add stack-build linter for Haskell

The stack-build linter works better than the other two linters when
you're working with an entire Haskell project. It builds the project
entirely and reports any errors.

The other two Haskell GHC linters only work on single files, which can
result in spurious errors (for example, not being able to find imports).

* Document all available Haskell linters

* Split GHC checkers into separate files
2017-07-09 22:39:33 +01:00
w0rp
47ff514878 Fix some indentation 2017-07-09 15:50:36 +01:00
w0rp
025f3407d6 Simplify ale_linters#ruby#rubocop#GetType 2017-07-09 15:50:12 +01:00
Eddie Lebow
ab0e76dbd5 Use rubocop's JSON output format (resolves #339) (#738)
* Use rubocop's JSON output format (resolves #339)

Rubocop's emacs formatter seems to have changed format in some
not-so-ancient version. The JSON formatter should provide a more stable
interface than parsing lines with a regex.

The JSON formatter was introduced in mid-2013, so it should be safe to
assume available in any reasonably-modern environment. The oldest
currently-supported version of ruby (according to ruby-lang.org) was
not supported by rubocop until 2014.

* Rubocop: Use global function for GetType

* Rubocop: Use scope prefix in GetType

* Rubocop: Update command_callback test

* Rubocop: add end_col to Handle
2017-07-09 15:48:04 +01:00
w0rp
836a2cfe3b Fix issues with running individual tests, and get the Vim tests to run on certain machines again 2017-07-09 14:58:21 +01:00
w0rp
c67d3b7e60 Merge pull request #743 from jez/fix-ghc-mod
Correctly resolve temp files on macOS
2017-07-09 13:56:21 +01:00
Jacob Zimmerman
a70591fa76
Correctly resolve temp files on macOS
On macOS, the `$TMPDIR` is in `/var`. However, `/var -> /private/var`.
This means that fully resolved temp filenames weren't always getting
checked against the proper prefix.

This was affecting some of the Haskell plugins, though I'm sure it could
have affected any program that resolved past the generated `$TMPDIR/foo`
and wound up at a different filename.
2017-07-09 02:16:46 -05:00
w0rp
ab47011ef2 Support setting settings with g:ale_pattern_options 2017-07-09 00:10:28 +01:00
w0rp
1b55e5edab Fix a syntax error in an example 2017-07-08 22:52:34 +01:00
Andrew Vimmer
4fd5bf81be Added missing statement about <Plug>(ale_toggle) mapping to the documentation (#740)
* Added missing statement about a `<Plug>` mapping.

* Fixed logical mistake related to "option calling".

* Rectified article usage according to a request.
2017-07-08 22:10:23 +01:00
Jonathan Boudreau
7def00d5a9 Use different reporter to support older versions of jscs (#737)
* Use different reporter to support older versions of jscs

* Add test and make more consistent with other code

* Add documentation for jscs

* Add more test coverage
2017-07-08 18:37:21 +01:00
w0rp
dd5806662a Document how to install yamllint 2017-07-08 14:42:39 +01:00
w0rp
996732d5a6 Document the virtualenv directories variable in the main file instead 2017-07-08 14:30:12 +01:00
w0rp
fdc7166c3c Use equal signs for language documentation sections 2017-07-08 14:17:26 +01:00
w0rp
f9aa7d3b9a Update the license year 2017-07-08 13:50:10 +01:00
w0rp
8eb4f95766 #697 - Clear all highlights every time items are set again, and refactor most things. Clear errors when linters are removed 2017-07-07 23:47:41 +01:00
daa84
46225f3bb1 Fix windows path check on rust linter (#736)
* Fix rust linter on windows

* Add windows path test

* Use ale#path#IsBufferPath to compare paths

* Fix errors
2017-07-07 17:03:17 +01:00
w0rp
d9a7364dae #710 - Fix a parsing bug caused by the last fix 2017-07-07 10:59:00 +01:00
w0rp
7ce960ae51 Fix #735 - Support old versions of Flow by only adding --respect-pragma for supported versions 2017-07-07 10:47:09 +01:00
w0rp
130928590b #710 - Show warnings as warnings for ghc 2017-07-07 00:28:22 +01:00
w0rp
8315c0e337 Make the executable for gometalinter configurable 2017-07-07 00:10:30 +01:00
w0rp
854066e849 #732 - Use the configuration files when fixing files with rubocop 2017-07-06 22:58:14 +01:00
w0rp
b43413916d Initialize rubocop variables in one place 2017-07-06 22:47:07 +01:00
w0rp
5859050d29 Fix some bad indentation 2017-07-06 10:51:05 +01:00
Gregory Einfrank
af02fb5183 Add ale_fix_on_save and ale_fixers to debug output (#731)
* Add ale_fix_on_save and ale_fixers to debug output

* Fix test by adding new ale-fix vars
2017-07-06 09:27:09 +01:00
w0rp
871ce1c8f5 Correct a comment 2017-07-05 15:52:39 +01:00
w0rp
1bd9b0fbe2 #729 - Use a wrapper for simplify to fix // problems on Windows 2017-07-05 15:51:31 +01:00
w0rp
a04e73ddbc #729 - Support running Python programs from virtualenv for Windows 2017-07-05 13:07:55 +01:00
w0rp
1b8450e7a0 #729 Fix // in virtualenv paths 2017-07-05 12:56:08 +01:00
w0rp
35093e8f0d Merge pull request #727 from andrew-vimmer/broken-links
Fixed broken link in the CONTRIBUTING.md
2017-07-05 10:15:25 +01:00
Wil Thomason
6ab92af181 Correctly pass options to cpplint (#728)
* Fix option passing to cpplint
2017-07-05 10:14:43 +01:00
User
e134eca694 Updated the link to handlers.vim file after it was broken into several
files with a03121f5b0.
2017-07-04 22:11:49 +03:00
w0rp
18fef18ab1 Remove the issue template note about the log_output option, now it's on by default. 2017-07-04 00:19:43 +01:00
w0rp
7b7a275902 Store the output of commands by default so I don't have to ask people to turn it on any more. 2017-07-04 00:17:13 +01:00
w0rp
bb293b297c Fix #216 - Filter out errors for other files for ansible-lint 2017-07-03 23:16:39 +01:00
w0rp
a1cf7f67a1 Fix #182 - Add support for lintr 2017-07-03 22:34:30 +01:00
w0rp
638eb1f000 Merge pull request #722 from RsrchBoy/travis-against-all-branches
Drop "only master branch" travis restriction
2017-07-03 20:33:43 +01:00
w0rp
84b280b881 Fix #178 - Check Stylus files with stylelint 2017-07-03 16:57:39 +01:00
Chris Weyl
def4466671
Drop "only master branch" travis restriction 2017-07-03 10:54:47 -05:00
w0rp
160b9548ee Add a function for fixing the alignment of Vim help tags 2017-07-03 16:51:34 +01:00
w0rp
fd6f05c9ea Report exceptions thrown for stylelint 2017-07-03 16:13:10 +01:00
Chris Weyl
5a3cfbbdf5 Allow hadolint linter to run via docker image (#720)
* Add documentation for hadolint (doc/ale-hadolint.txt)

* Allow `hadolint` linter to run via docker image

These changes enable the `hadolint` linter to run via the author's
docker image, if present.   Three modes are supported:

 * never use docker;
 * always use docker; and
 * use docker as a failback.
2017-07-03 15:37:32 +01:00
w0rp
51f256e897 Remove the need for pointless callbacks for LSP linters 2017-07-02 13:25:36 +01:00
w0rp
857ca941d2 Support an 'stdio' type for linter defintions, and require a command for LSP connections via programs 2017-07-02 13:17:24 +01:00
w0rp
b731bd77ab Get automatic completion with tsserver to work 2017-07-02 10:58:18 +01:00
w0rp
5b731f761f Refactor LSP jobs to use a uniform ID value 2017-07-02 10:58:18 +01:00
w0rp
9f21e45156 Add some experimental completion code for tsserver 2017-07-02 10:58:18 +01:00
w0rp
0d8be55c51 Merge pull request #712 from RsrchBoy/perlcritic/more-explicit-profiles-doc
Be more explicit about the effect of `g:..._perlcritic_profile = ''`
2017-07-02 00:47:18 +01:00
Ryan
2330837747 Adjust output of luacheck linter to include error code (#717)
* linters/lua/luacheck: Show error code in message
2017-07-02 00:20:59 +01:00
w0rp
b2e730fb5e Merge pull request #716 from sobrinho/master
Fix brakeman handler when there is no output
2017-07-01 15:43:04 +01:00
Gabriel Sobrinho
29746d492e
Fix brakeman handler when there is no output 2017-07-01 11:18:21 -03:00
Chris Weyl
64c6cbee48 Be more explicit about the effect of g:..._perlcritic_profile = ''
Just to prevent any confusion, the documentation now explicitly states
that setting `g:ale_perl_perlcritic_profile` to an empty string merely
disables passing an explicit profile to `perlcritic` and does not cause
`--no-profile` to be set.
2017-06-30 10:14:17 -05:00
Chris Weyl
3f1cab3e7e Add profile, other options to the perlcritic linter (#675)
* Add profile, other options to the perlcritic linter
2017-06-29 13:08:51 +01:00
w0rp
411c6b5e9f Fix #707 - Fix some duplicate tags, and add some code to check for them 2017-06-29 12:55:00 +01:00
w0rp
518f99b480 Fix #706 - Skip fixers with jobs that return empty output, in case they have failed 2017-06-29 12:00:32 +01:00
w0rp
79e8e063af Make pug-lint detect node_modules executables, and add options for pug-lint like the other linters 2017-06-29 11:40:03 +01:00
Tarik Graba
01ecf2a75f Adds an option to pass additional arguments to the verilog/verilator … (#698)
* Adds an option to pass additional arguments to the verilog/verilator linter

The new otion is g:ale_verilog_verilator_options
+ doc

* Spell check verilog linter doc file

* Add entries to the verilog linters in the doc table of content

* Vader test for verilog/verilator linter args option verilog_verilator_options
2017-06-29 09:15:52 +01:00
Adam Stankiewicz
7eec1f2efc Add prettier-standard support (#702)
* Add prettier-standard support

* Update ale-javascript.txt

Remove a duplicated header line.
2017-06-28 16:35:19 +01:00
w0rp
8846a8860f Use a new window for the ALEFixSuggest command, and document it better 2017-06-28 16:20:05 +01:00
Alexander "Ace" Olofsson
f883d4d4fd Add puppet-lint fixer (#701)
* Add puppet-lint fixer

* Add vader test for puppetlint fixer

* Ensure puppetlint variables are initialized
2017-06-28 15:27:02 +01:00
w0rp
f984c5fb83 Merge pull request #699 from jwoudenberg/master
Elm linter shows full error ranges
2017-06-27 22:24:48 +01:00
Jasper Woudenberg
72161b82ef Elm linter shows full error ranges 2017-06-27 20:16:29 +02:00
792 changed files with 28416 additions and 4563 deletions

40
.appveyor.yml Normal file
View file

@ -0,0 +1,40 @@
---
# Disabling building for AppVeyor. We are just testing things.
build: false
clone_depth: 10
# Use the directory C:\testplugin so test directories will mostly work.
clone_folder: C:\testplugin
# Cache the vim and vader directories between builds.
cache:
- C:\vim -> .appveyor.yml
- C:\vader -> .appveyor.yml
init:
# Stop git from changing newlines
- git config --global core.autocrlf input
install:
# Download and unpack Vim
- ps: >-
if (!(Test-Path -Path C:\vim)){
Add-Type -A System.IO.Compression.FileSystem
Invoke-WebRequest ftp://ftp.vim.org/pub/vim/pc/vim80-586w32.zip `
-OutFile C:\vim.zip
[IO.Compression.ZipFile]::ExtractToDirectory('C:\vim.zip', 'C:\vim')
Invoke-WebRequest ftp://ftp.vim.org/pub/vim/pc/vim80-586rt.zip `
-OutFile C:\rt.zip
[IO.Compression.ZipFile]::ExtractToDirectory('C:\rt.zip', 'C:\vim')
}
# Clone Vader and check out the commit we want
- ps: >-
if (!(Test-Path -Path C:\vader)){
git clone https://github.com/junegunn/vader.vim C:\vader 2> $null
cd C:\vader
git checkout -qf c6243dd81c98350df4dec608fa972df98fa2a3af 2> $null
}
test_script:
- cd C:\testplugin
- 'C:\vim\vim\vim80\vim.exe -u test\vimrc "+Vader!
test/*.vader test/*/*.vader test/*/*/*.vader test/*/*/*.vader"'

14
.editorconfig Normal file
View file

@ -0,0 +1,14 @@
# EditorConfig is awesome: http://EditorConfig.org
# Top-most EditorConfig file
root = true
# Match and apply these rules for all file
# types you open in your code editor
[*]
# Unix-style newlines
end_of_line = lf
insert_final_newline = true
indent_style = space
indent_size = 4
trim_trailing_whitespace = true

2
.gitattributes vendored
View file

@ -6,7 +6,7 @@
/Makefile export-ignore
/PULL_REQUEST_TEMPLATE.md export-ignore
/README.md export-ignore
/custom-checks export-ignore
/img export-ignore
/run-tests export-ignore
/run-tests.bat export-ignore
/test export-ignore

1
.gitignore vendored
View file

@ -1,5 +1,6 @@
/init.vim
/doc/tags
.*
!.editorconfig
*.obj
tags

View file

@ -2,9 +2,6 @@
sudo: required
services:
- docker
branches:
only:
- master
language: python
script: |
./run-tests

View file

@ -74,10 +74,10 @@ If you want to credit multiple authors, you can comma separate them.
### 3.i. Adding a New Linter
If you add a new linter, look for existing handlers first in the
[handlers.vim](autoload/ale/handlers.vim) file. One of the handlers there may
[handlers](autoload/ale/handlers) directory. One of the handlers there may
already be able to handle your lines of output. If you find that your new
linter replicates an existing error handler, consider pulling it up into the
[handlers.vim](autoload/ale/handlers.vim) file, and use the generic handler in
[handlers](autoload/ale/handlers) directory, and use the generic handler in
both places.
When you add a linter, make sure the language for the linter and the linter
@ -129,7 +129,7 @@ giving some unfair preference to any particular tool or language.
The "online documentation" file used for this project lives in `doc/ale.txt`.
This is the file used for generating `:help` text inside Vim itself. There are
some guidlines to follow for this file.
some guidelines to follow for this file.
1. Keep all text within a column size of 79 characters, inclusive.
2. Open a section with 79 `=` or `-` characters, for headings and subheadings.
@ -160,7 +160,7 @@ to look up the default value easily by typing `:echo g:ale_...`.
Should the principal author of the ALE project and all collaborators with the
required access needed to properly administrate the project on GitHub or any
other website either perish or disappear, whether by tragic traffic accident
or government adduction, etc., action should be taken to ensure that the
or government abduction, etc., action should be taken to ensure that the
project continues. If no one is left to administer the project where it is
hosted, please fork the project and nominate someone capable to administer it.
Preferably, in such an event, a single fork of the project will replace the

View file

@ -1,12 +1,28 @@
<!--
READ THIS FIRST: If you are experiencing any bug whatsoever dealing with
the output of linters, please use `let g:ale_history_log_output = 1` before
pasting output. It will capture the output of commands that are run.
For bugs, paste output from your clipboard after running :ALEInfoToClipboard
here. If that doesn't work for some reason, try running :ALEInfo and copying
the output from that here instead. If everything is broken, run around in
circles and scream.
Whatever the case, describe the your issue here.
This is a template for bug reports. If you want to request a new feature,
you can clear this entire form field and write a short description of what
you want.
-->
## Information
**VIM version**
PASTE JUST THE FIRST TWO LINES OF `:version` HERE.
Operating System: WHAT OS WERE YOU USING?
### :ALEInfo
PASTE OUTPUT OF `:ALEInfo` HERE. YOU CAN TRY `:ALEInfoToClipboard`.
## What went wrong
WRITE WHAT WENT WRONG HERE.
## Reproducing the bug
Steps for repeating the bug:
1. Write a list of steps.
2. Otherwise nobody will fix the bug.

View file

@ -1,4 +1,4 @@
Copyright (c) 2016, w0rp <devw0rp@gmail.com>
Copyright (c) 2016-2018, w0rp <devw0rp@gmail.com>
All rights reserved.
Redistribution and use in source and binary forms, with or without

View file

@ -1,6 +1,10 @@
<!--
When creating new pull requests, please consider the following.
READ THIS: Before creating a pull request, please consider the following first.
* The most important thing you can do is write tests. Code without tests
probably doesn't work, and will almost certainly stop working later on. Pull
requests without tests probably won't be accepted, although there are some
exceptions.
* Read the Contributing guide linked above first.
* If you are adding a new linter, remember to update the README.md file and
doc/ale.txt first.

426
README.md
View file

@ -1,4 +1,5 @@
# Asynchronous Lint Engine [![Build Status](https://travis-ci.org/w0rp/ale.svg?branch=master)](https://travis-ci.org/w0rp/ale)
# Asynchronous Lint Engine [![Travis CI Build Status](https://travis-ci.org/w0rp/ale.svg?branch=master)](https://travis-ci.org/w0rp/ale) [![AppVeyor Build Status](https://ci.appveyor.com/api/projects/status/r0ef1xu8xjmik58d/branch/master?svg=true)](https://ci.appveyor.com/project/w0rp/ale)
![ALE Logo by Mark Grealish - https://www.bhalash.com/](img/logo.jpg?raw=true)
@ -15,30 +16,38 @@ back to a filesystem.
In other words, this plugin allows you to lint while you type.
ALE also supports fixing problems with files by running commands in the
background with a command `ALEFix`.
In addition to linting support, ALE offers some support for fixing code with
formatting tools, and some Language Server Protocol and `tsserver` features.
## Table of Contents
1. [Supported Languages and Tools](#supported-languages)
2. [Usage](#usage)
1. [Linting](#usage-linting)
2. [Fixing](#usage-fixing)
3. [Completion](#usage-completion)
4. [Go To Definition](#usage-go-to-definition)
3. [Installation](#installation)
1. [Installation with Pathogen](#installation-with-pathogen)
2. [Installation with Vundle](#installation-with-vundle)
3. [Manual Installation](#manual-installation)
1. [Installation with Vim package management](#standard-installation)
2. [Installation with Pathogen](#installation-with-pathogen)
3. [Installation with Vundle](#installation-with-vundle)
4. [Contributing](#contributing)
5. [FAQ](#faq)
1. [How do I disable particular linters?](#faq-disable-linters)
2. [How can I keep the sign gutter open?](#faq-keep-signs)
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)
4. [How can I change or disable the highlights ALE uses?](#faq-change-highlights)
5. [How can I show errors or warnings in my statusline?](#faq-statusline)
6. [How can I show errors or warnings in my lightline?](#faq-lightline)
7. [How can I change the format for echo messages?](#faq-echo-format)
8. [How can I execute some code when ALE starts or stops linting?](#faq-autocmd)
9. [How can I navigate between errors quickly?](#faq-navigation)
10. [How can I run linters only when I save files?](#faq-lint-on-save)
11. [How can I use the quickfix list instead of the loclist?](#faq-quickfix)
12. [How can I check JSX files with both stylelint and eslint?](#faq-jsx-stylelint-eslint)
13. [Will this plugin eat all of my laptop battery power?](#faq-my-battery-is-sad)
14. [How can I configure my C or C++ project?](#faq-c-configuration)
15. [How can I configure ALE differently for different buffers?](#faq-buffer-configuration)
<a name="supported-languages"></a>
@ -51,86 +60,122 @@ 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.
Remember to also update doc/ale.txt, which has a similar list with different
formatting.
-->
**Notes:**
* *^ No linters for text or Vim help filetypes are enabled by default.*
* *!! These linters check only files on disk. See `:help ale-lint-file-linters`*
| Language | Tools |
| -------- | ----- |
| ASM | [gcc](https://gcc.gnu.org) |
| Ansible | [ansible-lint](https://github.com/willthames/ansible-lint) |
| AsciiDoc | [proselint](http://proselint.com/)|
| API Blueprint | [drafter](https://github.com/apiaryio/drafter) |
| AsciiDoc | [alex](https://github.com/wooorm/alex) !!, [proselint](http://proselint.com/), [redpen](http://redpen.cc/), [write-good](https://github.com/btford/write-good) |
| Awk | [gawk](https://www.gnu.org/software/gawk/)|
| Bash | [-n flag](https://www.gnu.org/software/bash/manual/bash.html#index-set), [shellcheck](https://www.shellcheck.net/) |
| Bourne Shell | [-n flag](http://linux.die.net/man/1/sh), [shellcheck](https://www.shellcheck.net/) |
| C | [cppcheck](http://cppcheck.sourceforge.net), [gcc](https://gcc.gnu.org/), [clang](http://clang.llvm.org/)|
| 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/)|
| C# | [mcs](http://www.mono-project.com/docs/about-mono/languages/csharp/) |
| Bash | shell [-n flag](https://www.gnu.org/software/bash/manual/bash.html#index-set), [shellcheck](https://www.shellcheck.net/), [shfmt](https://github.com/mvdan/sh) |
| Bourne Shell | shell [-n flag](http://linux.die.net/man/1/sh), [shellcheck](https://www.shellcheck.net/), [shfmt](https://github.com/mvdan/sh) |
| C | [cppcheck](http://cppcheck.sourceforge.net), [cpplint](https://github.com/google/styleguide/tree/gh-pages/cpplint), [clang](http://clang.llvm.org/), [clangtidy](http://clang.llvm.org/extra/clang-tidy/) !!, [clang-format](https://clang.llvm.org/docs/ClangFormat.html), [flawfinder](https://www.dwheeler.com/flawfinder/), [gcc](https://gcc.gnu.org/) |
| C++ (filetype cpp) | [clang](http://clang.llvm.org/), [clangcheck](http://clang.llvm.org/docs/ClangCheck.html) !!, [clangtidy](http://clang.llvm.org/extra/clang-tidy/) !!, [clang-format](https://clang.llvm.org/docs/ClangFormat.html), [cppcheck](http://cppcheck.sourceforge.net), [cpplint](https://github.com/google/styleguide/tree/gh-pages/cpplint) !!, [flawfinder](https://www.dwheeler.com/flawfinder/), [gcc](https://gcc.gnu.org/) |
| CUDA | [nvcc](http://docs.nvidia.com/cuda/cuda-compiler-driver-nvcc/index.html) |
| C# | [mcs](http://www.mono-project.com/docs/about-mono/languages/csharp/) see:`help ale-cs-mcs` for details, [mcsc](http://www.mono-project.com/docs/about-mono/languages/csharp/) !! see:`help ale-cs-mcsc` for details and configuration|
| Chef | [foodcritic](http://www.foodcritic.io/) |
| Clojure | [joker](https://github.com/candid82/joker) |
| CMake | [cmakelint](https://github.com/richq/cmake-lint) |
| CoffeeScript | [coffee](http://coffeescript.org/), [coffeelint](https://www.npmjs.com/package/coffeelint) |
| Crystal | [crystal](https://crystal-lang.org/) |
| CSS | [csslint](http://csslint.net/), [stylelint](https://github.com/stylelint/stylelint) |
| Crystal | [crystal](https://crystal-lang.org/) !! |
| CSS | [csslint](http://csslint.net/), [prettier](https://github.com/prettier/prettier), [stylelint](https://github.com/stylelint/stylelint) |
| Cython (pyrex filetype) | [cython](http://cython.org/) |
| D | [dmd](https://dlang.org/dmd-linux.html) |
| Dockerfile | [hadolint](https://github.com/lukasmartinelli/hadolint) |
| Elixir | [credo](https://github.com/rrrene/credo), [dogma](https://github.com/lpil/dogma) |
| Elm | [elm-make](https://github.com/elm-lang/elm-make) |
| Erb | [erb](https://github.com/jeremyevans/erubi) |
| Erlang | [erlc](http://erlang.org/doc/man/erlc.html) |
| Dafny | [dafny](https://rise4fun.com/Dafny) !! |
| Dart | [dartanalyzer](https://github.com/dart-lang/sdk/tree/master/pkg/analyzer_cli) !!, [language_server](https://github.com/natebosch/dart_language_server) |
| Dockerfile | [hadolint](https://github.com/hadolint/hadolint) |
| Elixir | [credo](https://github.com/rrrene/credo), [dialyxir](https://github.com/jeremyjh/dialyxir), [dogma](https://github.com/lpil/dogma) !!|
| Elm | [elm-format](https://github.com/avh4/elm-format), [elm-make](https://github.com/elm-lang/elm-make) |
| Erb | [erb](https://apidock.com/ruby/ERB), [erubi](https://github.com/jeremyevans/erubi), [erubis](https://github.com/kwatch/erubis) |
| Erlang | [erlc](http://erlang.org/doc/man/erlc.html), [SyntaxErl](https://github.com/ten0s/syntaxerl) |
| Fish | fish [-n flag](https://linux.die.net/man/1/fish)
| Fortran | [gcc](https://gcc.gnu.org/) |
| Fountain | [proselint](http://proselint.com/) |
| FusionScript | [fusion-lint](https://github.com/RyanSquared/fusionscript) |
| 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) |
| Haml | [haml-lint](https://github.com/brigade/haml-lint)
| Git Commit Messages | [gitlint](https://github.com/jorisroovers/gitlint) |
| GLSL | [glslang](https://github.com/KhronosGroup/glslang), [glslls](https://github.com/svenstaro/glsl-language-server) |
| Go | [gofmt](https://golang.org/cmd/gofmt/), [goimports](https://godoc.org/golang.org/x/tools/cmd/goimports), [go vet](https://golang.org/cmd/vet/) !!, [golint](https://godoc.org/github.com/golang/lint), [gotype](https://godoc.org/golang.org/x/tools/cmd/gotype), [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) !! |
| GraphQL | [eslint](http://eslint.org/), [gqlint](https://github.com/happylinks/gqlint), [prettier](https://github.com/prettier/prettier) |
| Haml | [haml-lint](https://github.com/brigade/haml-lint) |
| Handlebars | [ember-template-lint](https://github.com/rwjblue/ember-template-lint) |
| Haskell | [ghc](https://www.haskell.org/ghc/), [ghc-mod](https://github.com/DanielG/ghc-mod), [hlint](https://hackage.haskell.org/package/hlint), [hdevtools](https://hackage.haskell.org/package/hdevtools) |
| HTML | [HTMLHint](http://htmlhint.com/), [proselint](http://proselint.com/), [tidy](http://www.html-tidy.org/) |
| Java | [checkstyle](http://checkstyle.sourceforge.net), [javac](http://www.oracle.com/technetwork/java/javase/downloads/index.html) |
| 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`), [xo](https://github.com/sindresorhus/xo)
| JSON | [jsonlint](http://zaa.ch/jsonlint/) |
| Kotlin | [kotlinc](https://kotlinlang.org), [ktlint](https://ktlint.github.io) see `:help ale-integration-kotlin` for configuration instructions
| LaTeX | [chktex](http://www.nongnu.org/chktex/), [lacheck](https://www.ctan.org/pkg/lacheck), [proselint](http://proselint.com/) |
| Lua | [luacheck](https://github.com/mpeterv/luacheck) |
| Markdown | [mdl](https://github.com/mivok/markdownlint), [proselint](http://proselint.com/), [vale](https://github.com/ValeLint/vale) |
| Haskell | [brittany](https://github.com/lspitzner/brittany), [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), [hfmt](https://github.com/danstiner/hfmt) |
| HTML | [alex](https://github.com/wooorm/alex) !!, [HTMLHint](http://htmlhint.com/), [proselint](http://proselint.com/), [tidy](http://www.html-tidy.org/), [write-good](https://github.com/btford/write-good) |
| Idris | [idris](http://www.idris-lang.org/) |
| Java | [checkstyle](http://checkstyle.sourceforge.net), [javac](http://www.oracle.com/technetwork/java/javase/downloads/index.html), [google-java-format](https://github.com/google/google-java-format) |
| JavaScript | [eslint](http://eslint.org/), [flow](https://flowtype.org/), [jscs](http://jscs.info/), [jshint](http://jshint.com/), [prettier](https://github.com/prettier/prettier), [prettier-eslint](https://github.com/prettier/prettier-eslint), [prettier-standard](https://github.com/sheerun/prettier-standard), [standard](http://standardjs.com/), [xo](https://github.com/sindresorhus/xo)
| JSON | [fixjson](https://github.com/rhysd/fixjson), [jsonlint](http://zaa.ch/jsonlint/), [jq](https://stedolan.github.io/jq/), [prettier](https://github.com/prettier/prettier) |
| Kotlin | [kotlinc](https://kotlinlang.org) !!, [ktlint](https://ktlint.github.io) !! see `:help ale-integration-kotlin` for configuration instructions |
| LaTeX | [alex](https://github.com/wooorm/alex) !!, [chktex](http://www.nongnu.org/chktex/), [lacheck](https://www.ctan.org/pkg/lacheck), [proselint](http://proselint.com/), [redpen](http://redpen.cc/), [vale](https://github.com/ValeLint/vale), [write-good](https://github.com/btford/write-good) |
| Less | [lessc](https://www.npmjs.com/package/less), [prettier](https://github.com/prettier/prettier), [stylelint](https://github.com/stylelint/stylelint) |
| LLVM | [llc](https://llvm.org/docs/CommandGuide/llc.html) |
| Lua | [luac](https://www.lua.org/manual/5.1/luac.html), [luacheck](https://github.com/mpeterv/luacheck) |
| Mail | [alex](https://github.com/wooorm/alex) !!, [proselint](http://proselint.com/), [vale](https://github.com/ValeLint/vale) |
| Make | [checkmake](https://github.com/mrtazz/checkmake) |
| Markdown | [alex](https://github.com/wooorm/alex) !!, [mdl](https://github.com/mivok/markdownlint), [prettier](https://github.com/prettier/prettier), [proselint](http://proselint.com/), [redpen](http://redpen.cc/), [remark-lint](https://github.com/wooorm/remark-lint) !!, [vale](https://github.com/ValeLint/vale), [write-good](https://github.com/btford/write-good) |
| MATLAB | [mlint](https://www.mathworks.com/help/matlab/ref/mlint.html) |
| Nim | [nim](https://nim-lang.org/docs/nimc.html) |
| Nim | [nim check](https://nim-lang.org/docs/nimc.html) !! |
| nix | [nix-instantiate](http://nixos.org/nix/manual/#sec-nix-instantiate) |
| nroff | [proselint](http://proselint.com/)|
| nroff | [alex](https://github.com/wooorm/alex) !!, [proselint](http://proselint.com/), [write-good](https://github.com/btford/write-good)|
| Objective-C | [clang](http://clang.llvm.org/) |
| Objective-C++ | [clang](http://clang.llvm.org/) |
| OCaml | [merlin](https://github.com/the-lambda-church/merlin) see `:help ale-integration-ocaml-merlin` for configuration instructions
| OCaml | [merlin](https://github.com/the-lambda-church/merlin) see `:help ale-ocaml-merlin` for configuration instructions, [ols](https://github.com/freebroccolo/ocaml-language-server) |
| Perl | [perl -c](https://perl.org/), [perl-critic](https://metacpan.org/pod/Perl::Critic) |
| PHP | [hack](http://hacklang.org/), [php -l](https://secure.php.net/), [phpcs](https://github.com/squizlabs/PHP_CodeSniffer), [phpmd](https://phpmd.org) |
| Pod | [proselint](http://proselint.com/)|
| PHP | [hack](http://hacklang.org/), [hackfmt](https://github.com/facebook/flow/tree/master/hack/hackfmt), [langserver](https://github.com/felixfbecker/php-language-server), [phan](https://github.com/phan/phan) see `:help ale-php-phan` to instructions, [php -l](https://secure.php.net/), [phpcs](https://github.com/squizlabs/PHP_CodeSniffer), [phpmd](https://phpmd.org), [phpstan](https://github.com/phpstan/phpstan), [phpcbf](https://github.com/squizlabs/PHP_CodeSniffer), [php-cs-fixer](http://cs.sensiolabs.org/) |
| PO | [alex](https://github.com/wooorm/alex) !!, [msgfmt](https://www.gnu.org/software/gettext/manual/html_node/msgfmt-Invocation.html), [proselint](http://proselint.com/), [write-good](https://github.com/btford/write-good) |
| Pod | [alex](https://github.com/wooorm/alex) !!, [proselint](http://proselint.com/), [write-good](https://github.com/btford/write-good) |
| Pony | [ponyc](https://github.com/ponylang/ponyc) |
| proto | [protoc-gen-lint](https://github.com/ckaznocha/protoc-gen-lint) |
| Pug | [pug-lint](https://github.com/pugjs/pug-lint) |
| Puppet | [puppet](https://puppet.com), [puppet-lint](https://puppet-lint.com) |
| 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) |
| ReasonML | [merlin](https://github.com/the-lambda-church/merlin) see `:help ale-integration-reason-merlin` for configuration instructions
| reStructuredText | [proselint](http://proselint.com/)|
| 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/), [prospector](http://github.com/landscapeio/prospector), [pycodestyle](https://github.com/PyCQA/pycodestyle), [pyls](https://github.com/palantir/python-language-server), [pylint](https://www.pylint.org/) !!, [yapf](https://github.com/google/yapf) |
| R | [lintr](https://github.com/jimhester/lintr) |
| ReasonML | [merlin](https://github.com/the-lambda-church/merlin) see `:help ale-reasonml-ols` for configuration instructions, [ols](https://github.com/freebroccolo/ocaml-language-server), [refmt](https://github.com/reasonml/reason-cli) |
| reStructuredText | [alex](https://github.com/wooorm/alex) !!, [proselint](http://proselint.com/), [redpen](http://redpen.cc/), [rstcheck](https://github.com/myint/rstcheck), [vale](https://github.com/ValeLint/vale), [write-good](https://github.com/btford/write-good) |
| Re:VIEW | [redpen](http://redpen.cc/) |
| RPM spec | [rpmlint](https://github.com/rpm-software-management/rpmlint) (disabled by default; see `:help ale-integration-spec`) |
| Ruby | [brakeman](http://brakemanscanner.org/), [reek](https://github.com/troessner/reek), [rubocop](https://github.com/bbatsov/rubocop), [ruby](https://www.ruby-lang.org) |
| Rust | [rustc](https://www.rust-lang.org/), cargo (see `:help ale-integration-rust` for configuration instructions) |
| 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) |
| Rust | cargo !! (see `:help ale-integration-rust` for configuration instructions), [rls](https://github.com/rust-lang-nursery/rls), [rustc](https://www.rust-lang.org/), [rustfmt](https://github.com/rust-lang-nursery/rustfmt) |
| 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) |
| Scala | [scalac](http://scala-lang.org) |
| Slim | [slim-lint](https://github.com/sds/slim-lint)
| SCSS | [prettier](https://github.com/prettier/prettier), [sass-lint](https://www.npmjs.com/package/sass-lint), [scss-lint](https://github.com/brigade/scss-lint), [stylelint](https://github.com/stylelint/stylelint) |
| Scala | [scalac](http://scala-lang.org), [scalastyle](http://www.scalastyle.org) |
| Slim | [slim-lint](https://github.com/sds/slim-lint) |
| SML | [smlnj](http://www.smlnj.org/) |
| Solidity | [solhint](https://github.com/protofire/solhint), [solium](https://github.com/duaraghav8/Solium) |
| Stylus | [stylelint](https://github.com/stylelint/stylelint) |
| SQL | [sqlint](https://github.com/purcell/sqlint) |
| Swift | [swiftlint](https://swift.org/) |
| Texinfo | [proselint](http://proselint.com/)|
| Text^ | [proselint](http://proselint.com/), [vale](https://github.com/ValeLint/vale) |
| TypeScript | [eslint](http://eslint.org/), [tslint](https://github.com/palantir/tslint), tsserver, typecheck |
| Swift | [swiftlint](https://github.com/realm/SwiftLint), [swiftformat](https://github.com/nicklockwood/SwiftFormat) |
| Tcl | [nagelfar](http://nagelfar.sourceforge.net) !! |
| Terraform | [tflint](https://github.com/wata727/tflint) |
| Texinfo | [alex](https://github.com/wooorm/alex) !!, [proselint](http://proselint.com/), [write-good](https://github.com/btford/write-good)|
| Text^ | [alex](https://github.com/wooorm/alex) !!, [proselint](http://proselint.com/), [vale](https://github.com/ValeLint/vale), [write-good](https://github.com/btford/write-good), [redpen](http://redpen.cc/) |
| Thrift | [thrift](http://thrift.apache.org/) |
| TypeScript | [eslint](http://eslint.org/), [prettier](https://github.com/prettier/prettier), [tslint](https://github.com/palantir/tslint), tsserver, typecheck |
| Verilog | [iverilog](https://github.com/steveicarus/iverilog), [verilator](http://www.veripool.org/projects/verilator/wiki/Intro) |
| Vim | [vint](https://github.com/Kuniwak/vint) |
| Vim help^ | [proselint](http://proselint.com/)|
| XHTML | [proselint](http://proselint.com/)|
| XML | [xmllint](http://xmlsoft.org/xmllint.html/)|
| YAML | [yamllint](https://yamllint.readthedocs.io/) |
* *^ No linters for text or Vim help filetypes are enabled by default.*
| Vim help^ | [alex](https://github.com/wooorm/alex) !!, [proselint](http://proselint.com/), [write-good](https://github.com/btford/write-good) |
| Vue | [prettier](https://github.com/prettier/prettier) |
| XHTML | [alex](https://github.com/wooorm/alex) !!, [proselint](http://proselint.com/), [write-good](https://github.com/btford/write-good) |
| XML | [xmllint](http://xmlsoft.org/xmllint.html) |
| YAML | [swaglint](https://github.com/byCedric/swaglint), [yamllint](https://yamllint.readthedocs.io/) |
<a name="usage"></a>
## 2. Usage
<a name="usage-linting"></a>
### 2.i Linting
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
@ -143,8 +188,55 @@ 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.
<a name="usage-fixing"></a>
### 2.ii Fixing
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`.
for different filetypes with the `g:ale_fixers` variable. For example, the
following code can be used to fix JavaScript code with ESLint:
```vim
" Put this in vimrc or a plugin file of your own.
" After this is configured, :ALEFix will try and fix your JS code with ESLint.
let g:ale_fixers = {
\ 'javascript': ['eslint'],
\}
" Set this setting in vimrc if you want to fix files automatically on save.
" This is off by default.
let g:ale_fix_on_save = 1
```
The `:ALEFixSuggest` command will suggest some supported tools for fixing code,
but fixers can be also implemented with functions, including lambda functions
too. See `:help ale-fix` for detailed information.
<a name="usage-completion"></a>
### 2.iii Completion
ALE offers some support for completion via hijacking of omnicompletion while you
type. All of ALE's completion information must come from Language Server
Protocol linters, or similar protocols. At the moment, completion is only
supported for TypeScript code with `tsserver`, when `tsserver` is enabled. You
can enable completion like so:
```vim
" Enable completion where available.
let g:ale_completion_enabled = 1
```
See `:help ale-completion` for more information.
<a name="usage-go-to-definition"></a>
### 2.iv Go To Definition
ALE supports jumping to the definition of words under your cursor with the
`:ALEGoToDefinition` command using any enabled LSP linters and `tsserver`.
See `:help ale-go-to-definition` for more information.
<a name="installation"></a>
@ -152,13 +244,59 @@ for different filetypes with the `g:ale_fixers` variable. See `:help ale-fix`.
To install this plugin, you should use one of the following methods.
For Windows users, replace usage of the Unix `~/.vim` directory with
`%USERPROFILE%\_vim`, or another directory if you have configured
`%USERPROFILE%\vimfiles`, or another directory if you have configured
Vim differently. On Windows, your `~/.vimrc` file will be similarly
stored in `%USERPROFILE%\_vimrc`.
<a name="standard-installation"></a>
### 3.i. Installation with Vim package management
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.
#### Vim 8 on Unix
```bash
mkdir -p ~/.vim/pack/git-plugins/start
git clone https://github.com/w0rp/ale.git ~/.vim/pack/git-plugins/start/ale
```
#### NeoVim on Unix
```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
```
#### Vim 8 on Windows
```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
```
#### Generating Vim help files
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:
```vim
" Put these lines at the very end of your vimrc file.
" Load all plugins now.
" Plugins need to be added to runtimepath before helptags can be generated.
packloadall
" Load all of the helptags now, after plugins have been loaded.
" All messages and errors will be ignored.
silent! helptags ALL
```
<a name="installation-with-pathogen"></a>
### 3.i. Installation with Pathogen
### 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
@ -172,7 +310,7 @@ git clone https://github.com/w0rp/ale.git
<a name="installation-with-vundle"></a>
### 3.ii. Installation with Vundle
### 3.iii. Installation with Vundle
You can install this plugin using [Vundle](https://github.com/VundleVim/Vundle.vim)
by using the path on GitHub for this repository.
@ -183,41 +321,6 @@ Plugin 'w0rp/ale'
See the Vundle documentation for more information.
<a name="manual-installation"></a>
### 3.iii. Manual Installation
For installation without a package manager, you can clone this git repository
into a bundle directory as with pathogen, and add the repository to your
runtime path yourself. First clone the repository.
```bash
cd ~/.vim/bundle
git clone https://github.com/w0rp/ale.git
```
Then, modify your `~/.vimrc` file to add this plugin to your runtime path.
```vim
set nocompatible
filetype off
let &runtimepath.=',~/.vim/bundle/ale'
filetype plugin on
```
You can add the following line 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:
```vim
silent! helptags ALL
```
Because the author of this plugin is a weird nerd, this is his preferred
installation method.
<a name="contributing"></a>
## 4. Contributing
@ -294,9 +397,35 @@ highlight clear ALEErrorSign
highlight clear ALEWarningSign
```
<a name="faq-change-highlights"></a>
### 5.iv. How can I change or disable the highlights ALE uses?
ALE's highlights problems with highlight groups which link to `SpellBad`,
`SpellCap`, `error`, and `todo` groups by default. The characters that are
highlighted depend on the linters being used, and the information provided to
ALE.
Highlighting can be disabled completely by setting `g:ale_set_highlights` to
`0`.
```vim
" Set this in your vimrc file to disabling highlighting
let g:ale_set_highlights = 0
```
You can control all of the highlights ALE uses, say if you are using a different
color scheme which produces ugly highlights. For example:
```vim
highlight ALEWarning ctermbg=DarkMagenta
```
See `:help ale-highlights` for more information.
<a name="faq-statusline"></a>
### 5.iv. How can I show errors or warnings in my statusline?
### 5.v. How can I show errors or warnings in my statusline?
[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
@ -334,9 +463,18 @@ set statusline=%{LinterStatus()}
See `:help ale#statusline#Count()` for more information.
<a name="faq-lightline"></a>
### 5.vi. How can I show errors or warnings in my lightline?
[lightline](https://github.com/itchyny/lightline.vim) does not have built-in
support for ALE, nevertheless there is a plugin that adds this functionality: [maximbaz/lightline-ale](https://github.com/maximbaz/lightline-ale).
For more information, check out the sources of that plugin, `:help ale#statusline#Count()` and [lightline documentation](https://github.com/itchyny/lightline.vim#advanced-configuration).
<a name="faq-echo-format"></a>
### 5.v. How can I change the format for echo messages?
### 5.vii. How can I change the format for echo messages?
There are 3 global options that allow customizing the echoed message.
@ -361,22 +499,24 @@ Will give you:
<a name="faq-autocmd"></a>
### 5.vi. How can I execute some code when ALE stops linting?
### 5.viii. How can I execute some code when ALE starts or stops linting?
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.
events whenever has a linter is started and has been successfully executed and
processed. These events can be used to call arbitrary functions before and after
ALE stops linting.
```vim
augroup YourGroup
autocmd!
autocmd User ALELint call YourFunction()
autocmd User ALELintPre call YourFunction()
autocmd User ALELintPost call YourFunction()
augroup END
```
<a name="faq-navigation"></a>
### 5.vii. How can I navigate between errors quickly?
### 5.ix. How can I navigate between errors quickly?
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
@ -392,7 +532,7 @@ For more information, consult the online documentation with
<a name="faq-lint-on-save"></a>
### 5.viii. How can I run linters only when I save files?
### 5.x. How can I run linters only when I save files?
ALE offers an option `g:ale_lint_on_save` for enabling running the linters
when files are saved. This option is enabled by default. If you only
@ -412,7 +552,7 @@ files, you can set `g:ale_lint_on_save` to `0`.
<a name="faq-quickfix"></a>
### 5.ix. How can I use the quickfix list instead of the loclist?
### 5.xi. How can I use the quickfix list instead of the loclist?
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
@ -437,9 +577,12 @@ let g:ale_open_list = 1
let g:ale_keep_list_window_open = 1
```
You can also set `let g:ale_list_vertical = 1` to open the windows vertically
instead of the default horizontally.
<a name="faq-jsx-stylelint-eslint"></a>
### 5.x. How can I check JSX files with both stylelint and eslint?
### 5.xii. How can I check JSX files with both stylelint and eslint?
If you configure ALE options correctly in your vimrc file, and install
the right tools, you can check JSX files with stylelint and eslint.
@ -472,7 +615,7 @@ no linter will be run twice for the same file.
<a name="faq-my-battery-is-sad"></a>
### 5.xi. Will this plugin eat all of my laptop battery power?
### 5.xiii. Will this plugin eat all of my laptop battery power?
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
@ -494,3 +637,64 @@ still be an advantage.
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
`:ALELint`.
<a name="faq-c-configuration"></a>
### 5.xiv. How can I configure my C or C++ project?
The structure of C and C++ projects varies wildly from project to project, with
many different build tools being used for building them, and many different
formats for project configuration files. ALE can run compilers easily, but
ALE cannot easily detect which compiler flags to use.
Some tools and build configurations can generate
[compile_commands.json](https://clang.llvm.org/docs/JSONCompilationDatabase.html)
files. The `cppcheck`, `clangcheck` and `clangtidy` linters can read these
files for automatically determining the appropriate compiler flags to use.
For linting with compilers like `gcc` and `clang`, and with other tools, you
will need to tell ALE which compiler flags to use yourself. You can use
different options for different projects with the `g:ale_pattern_options`
setting. Consult the documentation for that setting for more information.
`b:ale_linters` can be used to select which tools you want to run, say if you
want to use only `gcc` for one project, and only `clang` for another.
You may also configure buffer-local settings for linters with project-specific
vimrc files. [local_vimrc](https://github.com/LucHermitte/local_vimrc) can be
used for executing local vimrc files which can be shared in your project.
<a name="faq-buffer-configuration"></a>
### 5.xv. How can I configure ALE differently for different buffers?
ALE offers various ways to configure which linters or fixers are run, and
other settings. For the majority of ALE's settings, they can either be
configured globally with a `g:` variable prefix, or for a specific buffer
with a `b:` variable prefix. For example, you can configure a Python ftplugin
file like so.
```vim
" In ~/.vim/ftplugin/python.vim
" Check Python files with flake8 and pylint.
let b:ale_linters = ['flake8', 'pylint']
" Fix Python files with autopep8 and yapf.
let b:ale_fixers = ['autopep8', 'yapf']
" Disable warnings about trailing whitespace for Python files.
let b:ale_warn_about_trailing_whitespace = 0
```
For configuring files based on regular expression patterns matched against the
absolute path to a file, you can use `g:ale_pattern_options`.
```vim
" Do not lint or fix minified files.
let g:ale_pattern_options = {
\ '\.min\.js$': {'ale_linters': [], 'ale_fixers': []},
\ '\.min\.css$': {'ale_linters': [], 'ale_fixers': []},
\}
" If you configure g:ale_pattern_options outside of vimrc, you need this.
let g:ale_pattern_options_enabled = 1
```
Buffer-local variables for settings always override the global settings.

View file

@ -15,26 +15,27 @@ function! ale_linters#ansible#ansible_lint#Handle(buffer, lines) abort
" Matches patterns line the following:
"
" test.yml:35: [EANSIBLE0002] Trailing whitespace
let l:pattern = '\v^[a-zA-Z]?:?[^:]+:(\d+):?(\d+)?: \[?([[:alnum:]]+)\]? (.*)$'
let l:pattern = '\v^([a-zA-Z]?:?[^:]+):(\d+):?(\d+)?: \[?([[:alnum:]]+)\]? (.*)$'
let l:output = []
for l:match in ale#util#GetMatches(a:lines, l:pattern)
let l:code = l:match[3]
let l:code = l:match[4]
if (l:code ==# 'EANSIBLE002')
\ && !ale#Var(a:buffer, 'warn_about_trailing_whitespace')
if l:code is# 'EANSIBLE0002'
\&& !ale#Var(a:buffer, 'warn_about_trailing_whitespace')
" Skip warnings for trailing whitespace if the option is off.
continue
endif
let l:item = {
\ 'lnum': l:match[1] + 0,
\ 'col': l:match[2] + 0,
\ 'text': l:code . ': ' . l:match[4],
\ 'type': l:code[:0] ==# 'E' ? 'E' : 'W',
\}
call add(l:output, l:item)
if ale#path#IsBufferPath(a:buffer, l:match[1])
call add(l:output, {
\ 'lnum': l:match[2] + 0,
\ 'col': l:match[3] + 0,
\ 'text': l:match[5],
\ 'code': l:code,
\ 'type': l:code[:0] is# 'E' ? 'E' : 'W',
\})
endif
endfor
return l:output

View file

@ -0,0 +1,36 @@
" Author: nametake https://nametake.github.io
" Description: apiblueprint parser
function! ale_linters#apiblueprint#drafter#HandleErrors(buffer, lines) abort
" Matches patterns line the following:
"
" warning: (3) unable to parse response signature, expected 'response [<HTTP status code>] [(<media type>)]'; line 4, column 3k - line 4, column 22
" warning: (10) message-body asset is expected to be a pre-formatted code block, separate it by a newline and indent every of its line by 12 spaces or 3 tabs; line 30, column 5 - line 30, column 9; line 31, column 9 - line 31, column 14; line 32, column 9 - line 32, column 14
let l:pattern = '\(^.*\): (\d\+) \(.\{-\}\); line \(\d\+\), column \(\d\+\) - line \d\+, column \d\+\(.*; line \d\+, column \d\+ - line \(\d\+\), column \(\d\+\)\)\{-\}$'
let l:output = []
for l:match in ale#util#GetMatches(a:lines[2:], l:pattern)
let l:item = {
\ 'type': l:match[1] is# 'warning' ? 'W' : 'E',
\ 'text': l:match[2],
\ 'lnum': l:match[3] + 0,
\ 'col': l:match[4] + 0,
\}
if l:match[5] isnot# ''
let l:item.end_lnum = l:match[6] + 0
let l:item.end_col = l:match[7] + 0
endif
call add(l:output, l:item)
endfor
return l:output
endfunction
call ale#linter#Define('apiblueprint', {
\ 'name': 'drafter',
\ 'output_stream': 'stderr',
\ 'executable': 'drafter',
\ 'command': 'drafter --use-line-num --validate %t',
\ 'callback': 'ale_linters#apiblueprint#drafter#HandleErrors',
\})

View file

@ -0,0 +1,11 @@
" Author: Johannes Wienke <languitar@semipol.de>
" Description: alex for asciidoc files
call ale#linter#Define('help', {
\ 'name': 'alex',
\ 'executable': 'alex',
\ 'command': 'alex %s -t',
\ 'output_stream': 'stderr',
\ 'callback': 'ale#handlers#alex#Handle',
\ 'lint_file': 1,
\})

View file

@ -0,0 +1,9 @@
" Author: rhysd https://rhysd.github.io
" Description: Redpen, a proofreading tool (http://redpen.cc)
call ale#linter#Define('asciidoc', {
\ 'name': 'redpen',
\ 'executable': 'redpen',
\ 'command': 'redpen -f asciidoc -r json %t',
\ 'callback': 'ale#handlers#redpen#HandleRedpenOutput',
\})

View file

@ -0,0 +1,9 @@
" Author: Sumner Evans <sumner.evans98@gmail.com>
" Description: write-good for AsciiDoc files
call ale#linter#Define('asciidoc', {
\ 'name': 'write-good',
\ 'executable_callback': 'ale#handlers#writegood#GetExecutable',
\ 'command_callback': 'ale#handlers#writegood#GetCommand',
\ 'callback': 'ale#handlers#writegood#Handle',
\})

View file

@ -1,10 +1,16 @@
" Author: Lucas Kolstad <lkolstad@uw.edu>
" Description: gcc linter for asm files
let g:ale_asm_gcc_options = get(g:, 'ale_asm_gcc_options', '-Wall')
call ale#Set('asm_gcc_executable', 'gcc')
call ale#Set('asm_gcc_options', '-Wall')
function! ale_linters#asm#gcc#GetExecutable(buffer) abort
return ale#Var(a:buffer, 'asm_gcc_executable')
endfunction
function! ale_linters#asm#gcc#GetCommand(buffer) abort
return 'gcc -x assembler -fsyntax-only '
return ale#Escape(ale_linters#asm#gcc#GetExecutable(a:buffer))
\ . ' -x assembler -fsyntax-only '
\ . '-iquote ' . ale#Escape(fnamemodify(bufname(a:buffer), ':p:h'))
\ . ' ' . ale#Var(a:buffer, 'asm_gcc_options') . ' -'
endfunction
@ -27,7 +33,7 @@ endfunction
call ale#linter#Define('asm', {
\ 'name': 'gcc',
\ 'output_stream': 'stderr',
\ 'executable': 'gcc',
\ 'executable_callback': 'ale_linters#asm#gcc#GetExecutable',
\ 'command_callback': 'ale_linters#asm#gcc#GetCommand',
\ 'callback': 'ale_linters#asm#gcc#Handle',
\})

View file

@ -1,20 +1,20 @@
" Author: Masahiro H https://github.com/mshr-h
" Description: clang linter for c files
" Set this option to change the Clang options for warnings for C.
if !exists('g:ale_c_clang_options')
" let g:ale_c_clang_options = '-Wall'
" let g:ale_c_clang_options = '-std=c99 -Wall'
" c11 compatible
let g:ale_c_clang_options = '-std=c11 -Wall'
endif
call ale#Set('c_clang_executable', 'clang')
call ale#Set('c_clang_options', '-std=c11 -Wall')
function! ale_linters#c#clang#GetExecutable(buffer) abort
return ale#Var(a:buffer, 'c_clang_executable')
endfunction
function! ale_linters#c#clang#GetCommand(buffer) abort
let l:paths = ale#c#FindLocalHeaderPaths(a:buffer)
" -iquote with the directory the file is in makes #include work for
" headers in the same directory.
return 'clang -S -x c -fsyntax-only '
return ale#Escape(ale_linters#c#clang#GetExecutable(a:buffer))
\ . ' -S -x c -fsyntax-only '
\ . '-iquote ' . ale#Escape(fnamemodify(bufname(a:buffer), ':p:h')) . ' '
\ . ale#c#IncludeOptions(l:paths)
\ . ale#Var(a:buffer, 'c_clang_options') . ' -'
@ -23,7 +23,7 @@ endfunction
call ale#linter#Define('c', {
\ 'name': 'clang',
\ 'output_stream': 'stderr',
\ 'executable': 'clang',
\ 'executable_callback': 'ale_linters#c#clang#GetExecutable',
\ 'command_callback': 'ale_linters#c#clang#GetCommand',
\ 'callback': 'ale#handlers#gcc#HandleGCCFormat',
\})

View file

@ -0,0 +1,64 @@
" Author: vdeurzen <tim@kompiler.org>, w0rp <devw0rp@gmail.com>,
" gagbo <gagbobada@gmail.com>, Andrej Radovic <r.andrej@gmail.com>
" Description: clang-tidy linter for c files
call ale#Set('c_clangtidy_executable', 'clang-tidy')
" Set this option to check the checks clang-tidy will apply.
" The number of checks that can be applied to C files is limited in contrast to
" C++
"
" Consult the check list in clang-tidy's documentation:
" http://clang.llvm.org/extra/clang-tidy/checks/list.html
call ale#Set('c_clangtidy_checks', ['*'])
" Set this option to manually set some options for clang-tidy.
" This will disable compile_commands.json detection.
call ale#Set('c_clangtidy_options', '')
call ale#Set('c_build_dir', '')
function! ale_linters#c#clangtidy#GetExecutable(buffer) abort
return ale#Var(a:buffer, 'c_clangtidy_executable')
endfunction
function! s:GetBuildDirectory(buffer) abort
" Don't include build directory for header files, as compile_commands.json
" files don't consider headers to be translation units, and provide no
" commands for compiling header files.
if expand('#' . a:buffer) =~# '\v\.(h|hpp)$'
return ''
endif
let l:build_dir = ale#Var(a:buffer, 'c_build_dir')
" c_build_dir has the priority if defined
if !empty(l:build_dir)
return l:build_dir
endif
return ale#c#FindCompileCommands(a:buffer)
endfunction
function! ale_linters#c#clangtidy#GetCommand(buffer) abort
let l:checks = join(ale#Var(a:buffer, 'c_clangtidy_checks'), ',')
let l:build_dir = s:GetBuildDirectory(a:buffer)
" Get the extra options if we couldn't find a build directory.
let l:options = empty(l:build_dir)
\ ? ale#Var(a:buffer, 'c_clangtidy_options')
\ : ''
return ale#Escape(ale_linters#c#clangtidy#GetExecutable(a:buffer))
\ . (!empty(l:checks) ? ' -checks=' . ale#Escape(l:checks) : '')
\ . ' %s'
\ . (!empty(l:build_dir) ? ' -p ' . ale#Escape(l:build_dir) : '')
\ . (!empty(l:options) ? ' -- ' . l:options : '')
endfunction
call ale#linter#Define('c', {
\ 'name': 'clangtidy',
\ 'output_stream': 'stdout',
\ 'executable_callback': 'ale_linters#c#clangtidy#GetExecutable',
\ 'command_callback': 'ale_linters#c#clangtidy#GetCommand',
\ 'callback': 'ale#handlers#gcc#HandleGCCFormat',
\ 'lint_file': 1,
\})

View file

@ -1,8 +1,12 @@
" Author: Bart Libert <bart.libert@gmail.com>
" Description: cppcheck linter for c files
" Set this option to change the cppcheck options
let g:ale_c_cppcheck_options = get(g:, 'ale_c_cppcheck_options', '--enable=style')
call ale#Set('c_cppcheck_executable', 'cppcheck')
call ale#Set('c_cppcheck_options', '--enable=style')
function! ale_linters#c#cppcheck#GetExecutable(buffer) abort
return ale#Var(a:buffer, 'c_cppcheck_executable')
endfunction
function! ale_linters#c#cppcheck#GetCommand(buffer) abort
" Search upwards from the file for compile_commands.json.
@ -19,7 +23,8 @@ function! ale_linters#c#cppcheck#GetCommand(buffer) abort
\ : ''
return l:cd_command
\ . 'cppcheck -q --language=c '
\ . ale#Escape(ale_linters#c#cppcheck#GetExecutable(a:buffer))
\ . ' -q --language=c '
\ . l:compile_commands_option
\ . ale#Var(a:buffer, 'c_cppcheck_options')
\ . ' %t'
@ -28,7 +33,7 @@ endfunction
call ale#linter#Define('c', {
\ 'name': 'cppcheck',
\ 'output_stream': 'both',
\ 'executable': 'cppcheck',
\ 'executable_callback': 'ale_linters#c#cppcheck#GetExecutable',
\ 'command_callback': 'ale_linters#c#cppcheck#GetCommand',
\ 'callback': 'ale#handlers#cppcheck#HandleCppCheckFormat',
\})

View file

@ -0,0 +1,30 @@
" Author: Christian Gibbons <cgibbons@gmu.edu>
" Description: flawfinder linter for c files
call ale#Set('c_flawfinder_executable', 'flawfinder')
call ale#Set('c_flawfinder_options', '')
call ale#Set('c_flawfinder_minlevel', 1)
function! ale_linters#c#flawfinder#GetExecutable(buffer) abort
return ale#Var(a:buffer, 'c_flawfinder_executable')
endfunction
function! ale_linters#c#flawfinder#GetCommand(buffer) abort
" Set the minimum vulnerability level for flawfinder to bother with
let l:minlevel = ' --minlevel=' . ale#Var(a:buffer, 'c_flawfinder_minlevel')
return ale#Escape(ale_linters#c#flawfinder#GetExecutable(a:buffer))
\ . ' -CDQS'
\ . ale#Var(a:buffer, 'c_flawfinder_options')
\ . l:minlevel
\ . ' %t'
endfunction
call ale#linter#Define('c', {
\ 'name': 'flawfinder',
\ 'output_stream': 'stdout',
\ 'executable_callback': 'ale_linters#c#flawfinder#GetExecutable',
\ 'command_callback': 'ale_linters#c#flawfinder#GetCommand',
\ 'callback': 'ale#handlers#gcc#HandleGCCFormat',
\})

View file

@ -1,20 +1,20 @@
" Author: w0rp <devw0rp@gmail.com>
" Description: gcc linter for c files
" Set this option to change the GCC options for warnings for C.
if !exists('g:ale_c_gcc_options')
" let g:ale_c_gcc_options = '-Wall'
" let g:ale_c_gcc_options = '-std=c99 -Wall'
" c11 compatible
let g:ale_c_gcc_options = '-std=c11 -Wall'
endif
call ale#Set('c_gcc_executable', 'gcc')
call ale#Set('c_gcc_options', '-std=c11 -Wall')
function! ale_linters#c#gcc#GetExecutable(buffer) abort
return ale#Var(a:buffer, 'c_gcc_executable')
endfunction
function! ale_linters#c#gcc#GetCommand(buffer) abort
let l:paths = ale#c#FindLocalHeaderPaths(a:buffer)
" -iquote with the directory the file is in makes #include work for
" headers in the same directory.
return 'gcc -S -x c -fsyntax-only '
return ale#Escape(ale_linters#c#gcc#GetExecutable(a:buffer))
\ . ' -S -x c -fsyntax-only '
\ . '-iquote ' . ale#Escape(fnamemodify(bufname(a:buffer), ':p:h')) . ' '
\ . ale#c#IncludeOptions(l:paths)
\ . ale#Var(a:buffer, 'c_gcc_options') . ' -'
@ -23,7 +23,7 @@ endfunction
call ale#linter#Define('c', {
\ 'name': 'gcc',
\ 'output_stream': 'stderr',
\ 'executable': 'gcc',
\ 'executable_callback': 'ale_linters#c#gcc#GetExecutable',
\ 'command_callback': 'ale_linters#c#gcc#GetCommand',
\ 'callback': 'ale#handlers#gcc#HandleGCCFormat',
\})

View file

@ -1,24 +1,37 @@
" Author: Edward Larkey <edwlarkey@mac.com>
" Author: Jose Junior <jose.junior@gmail.com>
" Author: w0rp <devw0rp@gmail.com>
" Description: This file adds the foodcritic linter for Chef files.
" Support options!
let g:ale_chef_foodcritic_options = get(g:, 'ale_chef_foodcritic_options', '')
let g:ale_chef_foodcritic_executable = get(g:, 'ale_chef_foodcritic_executable', 'foodcritic')
call ale#Set('chef_foodcritic_executable', 'foodcritic')
call ale#Set('chef_foodcritic_options', '')
function! ale_linters#chef#foodcritic#GetExecutable(buffer) abort
return ale#Var(a:buffer, 'chef_foodcritic_executable')
endfunction
function! ale_linters#chef#foodcritic#GetCommand(buffer) abort
let l:executable = ale_linters#chef#foodcritic#GetExecutable(a:buffer)
let l:options = ale#Var(a:buffer, 'chef_foodcritic_options')
return ale#Escape(l:executable)
\ . (!empty(l:options) ? ' ' . escape(l:options, '~') : '')
\ . ' %s'
endfunction
function! ale_linters#chef#foodcritic#Handle(buffer, lines) abort
" Matches patterns line the following:
"
" FC002: Avoid string interpolation where not required: httpd.rb:13
let l:pattern = '^\(.\+:\s.\+\):\s\(.\+\):\(\d\+\)$'
let l:pattern = '\v([^:]+): (.+): ([a-zA-Z]?:?[^:]+):(\d+)$'
let l:output = []
for l:match in ale#util#GetMatches(a:lines, l:pattern)
let l:text = l:match[1]
call add(l:output, {
\ 'lnum': l:match[3] + 0,
\ 'text': l:text,
\ 'code': l:match[1],
\ 'text': l:match[2],
\ 'filename': l:match[3],
\ 'lnum': l:match[4] + 0,
\ 'type': 'W',
\})
endfor
@ -26,17 +39,10 @@ function! ale_linters#chef#foodcritic#Handle(buffer, lines) abort
return l:output
endfunction
function! ale_linters#chef#foodcritic#GetCommand(buffer) abort
return printf('%s %s %%t',
\ ale#Var(a:buffer, 'chef_foodcritic_executable'),
\ escape(ale#Var(a:buffer, 'chef_foodcritic_options'), '~')
\)
endfunction
call ale#linter#Define('chef', {
\ 'name': 'foodcritic',
\ 'executable': 'foodcritic',
\ 'executable_callback': 'ale_linters#chef#foodcritic#GetExecutable',
\ 'command_callback': 'ale_linters#chef#foodcritic#GetCommand',
\ 'callback': 'ale_linters#chef#foodcritic#Handle',
\ 'lint_file': 1,
\})

View file

@ -0,0 +1,32 @@
" Author: Nic West <nicwest@mailbox.org>
" Description: linter for clojure using joker https://github.com/candid82/joker
function! ale_linters#clojure#joker#HandleJokerFormat(buffer, lines) abort
" output format
" <filename>:<line>:<column>: <issue type>: <message>
let l:pattern = '\v^[a-zA-Z]?:?[^:]+:(\d+):(\d+):? ((Read error|Parse error|Parse warning|Exception): ?(.+))$'
let l:output = []
for l:match in ale#util#GetMatches(a:lines, l:pattern)
let l:type = 'E'
if l:match[4] is? 'Parse warning'
let l:type = 'W'
endif
call add(l:output, {
\ 'lnum': l:match[1] + 0,
\ 'col': l:match[2] + 0,
\ 'text': l:match[3],
\ 'type': l:type,
\})
endfor
return l:output
endfunction
call ale#linter#Define('clojure', {
\ 'name': 'joker',
\ 'output_stream': 'stderr',
\ 'executable': 'joker',
\ 'command': 'joker --lint %t',
\ 'callback': 'ale_linters#clojure#joker#HandleJokerFormat',
\})

View file

@ -27,7 +27,7 @@ function! ale_linters#coffee#coffeelint#Handle(buffer, lines) abort
for l:match in ale#util#GetMatches(a:lines, l:pattern)
call add(l:output, {
\ 'lnum': str2nr(l:match[1]),
\ 'type': l:match[3] ==# 'error' ? 'E' : 'W',
\ 'type': l:match[3] is# 'error' ? 'E' : 'W',
\ 'text': l:match[4],
\})
endfor

View file

@ -1,17 +1,20 @@
" Author: Tomota Nakamura <https://github.com/tomotanakamura>
" Description: clang linter for cpp files
" Set this option to change the Clang options for warnings for CPP.
if !exists('g:ale_cpp_clang_options')
let g:ale_cpp_clang_options = '-std=c++14 -Wall'
endif
call ale#Set('cpp_clang_executable', 'clang++')
call ale#Set('cpp_clang_options', '-std=c++14 -Wall')
function! ale_linters#cpp#clang#GetExecutable(buffer) abort
return ale#Var(a:buffer, 'cpp_clang_executable')
endfunction
function! ale_linters#cpp#clang#GetCommand(buffer) abort
let l:paths = ale#c#FindLocalHeaderPaths(a:buffer)
" -iquote with the directory the file is in makes #include work for
" headers in the same directory.
return 'clang++ -S -x c++ -fsyntax-only '
return ale#Escape(ale_linters#cpp#clang#GetExecutable(a:buffer))
\ . ' -S -x c++ -fsyntax-only '
\ . '-iquote ' . ale#Escape(fnamemodify(bufname(a:buffer), ':p:h')) . ' '
\ . ale#c#IncludeOptions(l:paths)
\ . ale#Var(a:buffer, 'cpp_clang_options') . ' -'
@ -20,7 +23,7 @@ endfunction
call ale#linter#Define('cpp', {
\ 'name': 'clang',
\ 'output_stream': 'stderr',
\ 'executable': 'clang++',
\ 'executable_callback': 'ale_linters#cpp#clang#GetExecutable',
\ 'command_callback': 'ale_linters#cpp#clang#GetCommand',
\ 'callback': 'ale#handlers#gcc#HandleGCCFormat',
\})

View file

@ -1,36 +1,38 @@
" Author: gagbo <gagbobada@gmail.com>
" Description: clang-check linter for cpp files
" Set this option to manually set some options for clang-check.
let g:ale_cpp_clangcheck_options = get(g:, 'ale_cpp_clangcheck_options', '')
call ale#Set('cpp_clangcheck_executable', 'clang-check')
call ale#Set('cpp_clangcheck_options', '')
call ale#Set('c_build_dir', '')
" Set this option to manually point to the build directory for clang-tidy.
" This will disable all the other clangtidy_options, since compilation
" flags are contained in the json
let g:ale_c_build_dir = get(g:, 'ale_c_build_dir', '')
function! ale_linters#cpp#clangcheck#GetExecutable(buffer) abort
return ale#Var(a:buffer, 'cpp_clangcheck_executable')
endfunction
function! ale_linters#cpp#clangcheck#GetCommand(buffer) abort
let l:user_options = ale#Var(a:buffer, 'cpp_clangcheck_options')
let l:extra_options = !empty(l:user_options)
\ ? l:user_options
\ : ''
" Try to find compilation database to link automatically
let l:user_build_dir = ale#Var(a:buffer, 'c_build_dir')
if empty(l:user_build_dir)
let l:user_build_dir = ale#c#FindCompileCommands(a:buffer)
endif
let l:build_options = !empty(l:user_build_dir)
\ ? ' -p ' . ale#Escape(l:user_build_dir)
\ : ''
let l:build_dir = ale#Var(a:buffer, 'c_build_dir')
return 'clang-check -analyze ' . '%s' . l:extra_options . l:build_options
if empty(l:build_dir)
let l:build_dir = ale#c#FindCompileCommands(a:buffer)
endif
" The extra arguments in the command are used to prevent .plist files from
" being generated. These are only added if no build directory can be
" detected.
return ale#Escape(ale_linters#cpp#clangcheck#GetExecutable(a:buffer))
\ . ' -analyze %s'
\ . (empty(l:build_dir) ? ' -extra-arg -Xclang -extra-arg -analyzer-output=text' : '')
\ . (!empty(l:user_options) ? ' ' . l:user_options : '')
\ . (!empty(l:build_dir) ? ' -p ' . ale#Escape(l:build_dir) : '')
endfunction
call ale#linter#Define('cpp', {
\ 'name': 'clangcheck',
\ 'output_stream': 'stderr',
\ 'executable': 'clang-check',
\ 'executable_callback': 'ale_linters#cpp#clangcheck#GetExecutable',
\ 'command_callback': 'ale_linters#cpp#clangcheck#GetCommand',
\ 'callback': 'ale#handlers#gcc#HandleGCCFormat',
\ 'lint_file': 1,

View file

@ -2,51 +2,56 @@
" gagbo <gagbobada@gmail.com>
" Description: clang-tidy linter for cpp files
call ale#Set('cpp_clangtidy_executable', 'clang-tidy')
" Set this option to check the checks clang-tidy will apply.
let g:ale_cpp_clangtidy_checks = get(g:, 'ale_cpp_clangtidy_checks', ['*'])
call ale#Set('cpp_clangtidy_checks', ['*'])
" Set this option to manually set some options for clang-tidy.
" This will disable compile_commands.json detection.
let g:ale_cpp_clangtidy_options = get(g:, 'ale_cpp_clangtidy_options', '')
call ale#Set('cpp_clangtidy_options', '')
call ale#Set('c_build_dir', '')
" Set this option to manually point to the build directory for clang-tidy.
" This will disable all the other clangtidy_options, since compilation
" flags are contained in the json
let g:ale_c_build_dir = get(g:, 'ale_c_build_dir', '')
function! ale_linters#cpp#clangtidy#GetExecutable(buffer) abort
return ale#Var(a:buffer, 'cpp_clangtidy_executable')
endfunction
function! s:GetBuildDirectory(buffer) abort
" Don't include build directory for header files, as compile_commands.json
" files don't consider headers to be translation units, and provide no
" commands for compiling header files.
if expand('#' . a:buffer) =~# '\v\.(h|hpp)$'
return ''
endif
function! ale_linters#cpp#clangtidy#GetCommand(buffer) abort
let l:check_list = ale#Var(a:buffer, 'cpp_clangtidy_checks')
let l:check_option = !empty(l:check_list)
\ ? '-checks=' . ale#Escape(join(l:check_list, ',')) . ' '
\ : ''
let l:user_options = ale#Var(a:buffer, 'cpp_clangtidy_options')
let l:user_build_dir = ale#Var(a:buffer, 'c_build_dir')
let l:build_dir = ale#Var(a:buffer, 'c_build_dir')
" c_build_dir has the priority if defined
if empty(l:user_build_dir)
let l:user_build_dir = ale#c#FindCompileCommands(a:buffer)
if !empty(l:build_dir)
return l:build_dir
endif
" We check again if user_builddir stayed empty after the
" c_build_dir_names check
" If we found the compilation database we override the value of
" l:extra_options
if empty(l:user_build_dir)
let l:extra_options = !empty(l:user_options)
\ ? ' -- ' . l:user_options
\ : ''
else
let l:extra_options = ' -p ' . ale#Escape(l:user_build_dir)
endif
return ale#c#FindCompileCommands(a:buffer)
endfunction
return 'clang-tidy ' . l:check_option . '%s' . l:extra_options
function! ale_linters#cpp#clangtidy#GetCommand(buffer) abort
let l:checks = join(ale#Var(a:buffer, 'cpp_clangtidy_checks'), ',')
let l:build_dir = s:GetBuildDirectory(a:buffer)
" Get the extra options if we couldn't find a build directory.
let l:options = empty(l:build_dir)
\ ? ale#Var(a:buffer, 'cpp_clangtidy_options')
\ : ''
return ale#Escape(ale_linters#cpp#clangtidy#GetExecutable(a:buffer))
\ . (!empty(l:checks) ? ' -checks=' . ale#Escape(l:checks) : '')
\ . ' %s'
\ . (!empty(l:build_dir) ? ' -p ' . ale#Escape(l:build_dir) : '')
\ . (!empty(l:options) ? ' -- ' . l:options : '')
endfunction
call ale#linter#Define('cpp', {
\ 'name': 'clangtidy',
\ 'output_stream': 'stdout',
\ 'executable': 'clang-tidy',
\ 'executable_callback': 'ale_linters#cpp#clangtidy#GetExecutable',
\ 'command_callback': 'ale_linters#cpp#clangtidy#GetCommand',
\ 'callback': 'ale#handlers#gcc#HandleGCCFormat',
\ 'lint_file': 1,

View file

@ -1,8 +1,12 @@
" Author: Bart Libert <bart.libert@gmail.com>
" Description: cppcheck linter for cpp files
" Set this option to change the cppcheck options
let g:ale_cpp_cppcheck_options = get(g:, 'ale_cpp_cppcheck_options', '--enable=style')
call ale#Set('cpp_cppcheck_executable', 'cppcheck')
call ale#Set('cpp_cppcheck_options', '--enable=style')
function! ale_linters#cpp#cppcheck#GetExecutable(buffer) abort
return ale#Var(a:buffer, 'cpp_cppcheck_executable')
endfunction
function! ale_linters#cpp#cppcheck#GetCommand(buffer) abort
" Search upwards from the file for compile_commands.json.
@ -19,7 +23,8 @@ function! ale_linters#cpp#cppcheck#GetCommand(buffer) abort
\ : ''
return l:cd_command
\ . 'cppcheck -q --language=c++ '
\ . ale#Escape(ale_linters#cpp#cppcheck#GetExecutable(a:buffer))
\ . ' -q --language=c++ '
\ . l:compile_commands_option
\ . ale#Var(a:buffer, 'cpp_cppcheck_options')
\ . ' %t'
@ -28,7 +33,7 @@ endfunction
call ale#linter#Define('cpp', {
\ 'name': 'cppcheck',
\ 'output_stream': 'both',
\ 'executable': 'cppcheck',
\ 'executable_callback': 'ale_linters#cpp#cppcheck#GetExecutable',
\ 'command_callback': 'ale_linters#cpp#cppcheck#GetCommand',
\ 'callback': 'ale#handlers#cppcheck#HandleCppCheckFormat',
\})

View file

@ -1,15 +1,26 @@
" Author: Dawid Kurek https://github.com/dawikur
" Description: cpplint for cpp files
if !exists('g:ale_cpp_cpplint_options')
let g:ale_cpp_cpplint_options = ''
endif
call ale#Set('cpp_cpplint_executable', 'cpplint')
call ale#Set('cpp_cpplint_options', '')
function! ale_linters#cpp#cpplint#GetExecutable(buffer) abort
return ale#Var(a:buffer, 'cpp_cpplint_executable')
endfunction
function! ale_linters#cpp#cpplint#GetCommand(buffer) abort
let l:options = ale#Var(a:buffer, 'cpp_cpplint_options')
return ale#Escape(ale_linters#cpp#cpplint#GetExecutable(a:buffer))
\ . (!empty(l:options) ? ' ' . l:options : '')
\ . ' %s'
endfunction
call ale#linter#Define('cpp', {
\ 'name': 'cpplint',
\ 'output_stream': 'stderr',
\ 'executable': 'cpplint',
\ 'command': 'cpplint %s',
\ 'executable_callback': 'ale_linters#cpp#cpplint#GetExecutable',
\ 'command_callback': 'ale_linters#cpp#cpplint#GetCommand',
\ 'callback': 'ale#handlers#cpplint#HandleCppLintFormat',
\ 'lint_file': 1,
\})

View file

@ -0,0 +1,30 @@
" Author: Christian Gibbons <cgibbons@gmu.edu>
" Description: flawfinder linter for c++ files
call ale#Set('cpp_flawfinder_executable', 'flawfinder')
call ale#Set('cpp_flawfinder_options', '')
call ale#Set('cpp_flawfinder_minlevel', 1)
function! ale_linters#cpp#flawfinder#GetExecutable(buffer) abort
return ale#Var(a:buffer, 'cpp_flawfinder_executable')
endfunction
function! ale_linters#cpp#flawfinder#GetCommand(buffer) abort
" Set the minimum vulnerability level for flawfinder to bother with
let l:minlevel = ' --minlevel=' . ale#Var(a:buffer, 'cpp_flawfinder_minlevel')
return ale#Escape(ale_linters#cpp#flawfinder#GetExecutable(a:buffer))
\ . ' -CDQS'
\ . ale#Var(a:buffer, 'cpp_flawfinder_options')
\ . l:minlevel
\ . ' %t'
endfunction
call ale#linter#Define('cpp', {
\ 'name': 'flawfinder',
\ 'output_stream': 'stdout',
\ 'executable_callback': 'ale_linters#cpp#flawfinder#GetExecutable',
\ 'command_callback': 'ale_linters#cpp#flawfinder#GetCommand',
\ 'callback': 'ale#handlers#gcc#HandleGCCFormat',
\})

View file

@ -1,27 +1,20 @@
" Author: geam <mdelage@student.42.fr>
" Description: gcc linter for cpp files
"
call ale#Set('cpp_gcc_executable', 'gcc')
call ale#Set('cpp_gcc_options', '-std=c++14 -Wall')
" Set this option to change the GCC options for warnings for C.
if !exists('g:ale_cpp_gcc_options')
let s:version = ale#handlers#gcc#ParseGCCVersion(systemlist('gcc --version'))
if !empty(s:version) && ale#semver#GreaterOrEqual(s:version, [4, 9, 0])
" Use c++14 support in 4.9 and above.
let g:ale_cpp_gcc_options = '-std=c++14 -Wall'
else
" Use c++1y in older versions.
let g:ale_cpp_gcc_options = '-std=c++1y -Wall'
endif
unlet! s:version
endif
function! ale_linters#cpp#gcc#GetExecutable(buffer) abort
return ale#Var(a:buffer, 'cpp_gcc_executable')
endfunction
function! ale_linters#cpp#gcc#GetCommand(buffer) abort
let l:paths = ale#c#FindLocalHeaderPaths(a:buffer)
" -iquote with the directory the file is in makes #include work for
" headers in the same directory.
return 'gcc -S -x c++ -fsyntax-only '
return ale#Escape(ale_linters#cpp#gcc#GetExecutable(a:buffer))
\ . ' -S -x c++ -fsyntax-only '
\ . '-iquote ' . ale#Escape(fnamemodify(bufname(a:buffer), ':p:h')) . ' '
\ . ale#c#IncludeOptions(l:paths)
\ . ale#Var(a:buffer, 'cpp_gcc_options') . ' -'
@ -30,7 +23,7 @@ endfunction
call ale#linter#Define('cpp', {
\ 'name': 'g++',
\ 'output_stream': 'stderr',
\ 'executable': 'g++',
\ 'executable_callback': 'ale_linters#cpp#gcc#GetExecutable',
\ 'command_callback': 'ale_linters#cpp#gcc#GetCommand',
\ 'callback': 'ale#handlers#gcc#HandleGCCFormat',
\})

View file

@ -4,31 +4,21 @@
function! ale_linters#crystal#crystal#Handle(buffer, lines) abort
let l:output = []
let l:lines = join(a:lines, '')
if !empty(l:lines)
let l:errors = json_decode(l:lines)
for l:error in l:errors
call add(l:output, {
\ 'bufnr': a:buffer,
\ 'lnum': l:error.line + 0,
\ 'col': l:error.column + 0,
\ 'text': l:error.message,
\ 'type': 'E',
\})
endfor
endif
for l:error in ale#util#FuzzyJSONDecode(a:lines, [])
call add(l:output, {
\ 'lnum': l:error.line + 0,
\ 'col': l:error.column + 0,
\ 'text': l:error.message,
\})
endfor
return l:output
endfunction
function! ale_linters#crystal#crystal#GetCommand(buffer) abort
let l:crystal_cmd = 'crystal build -f json --no-codegen --no-color -o '
let l:crystal_cmd .= ale#Escape(g:ale#util#nul_file)
let l:crystal_cmd .= ' %s'
return l:crystal_cmd
return 'crystal build -f json --no-codegen --no-color -o '
\ . ale#Escape(g:ale#util#nul_file)
\ . ' %s'
endfunction
call ale#linter#Define('crystal', {

View file

@ -8,15 +8,16 @@ function! ale_linters#cs#mcs#Handle(buffer, lines) abort
" Look for lines like the following.
"
" Tests.cs(12,29): error CSXXXX: ; expected
let l:pattern = '^.\+.cs(\(\d\+\),\(\d\+\)): \(.\+\): \(.\+\)'
let l:pattern = '^\v(.+\.cs)\((\d+),(\d+)\)\: ([^ ]+) ([^ ]+): (.+)$'
let l:output = []
for l:match in ale#util#GetMatches(a:lines, l:pattern)
call add(l:output, {
\ 'lnum': l:match[1] + 0,
\ 'col': l:match[2] + 0,
\ 'text': l:match[3] . ': ' . l:match[4],
\ 'type': l:match[3] =~# '^error' ? 'E' : 'W',
\ 'lnum': l:match[2] + 0,
\ 'col': l:match[3] + 0,
\ 'type': l:match[4] is# 'error' ? 'E' : 'W',
\ 'code': l:match[5],
\ 'text': l:match[6],
\})
endfor

81
ale_linters/cs/mcsc.vim Normal file
View file

@ -0,0 +1,81 @@
call ale#Set('cs_mcsc_options', '')
call ale#Set('cs_mcsc_source', '')
call ale#Set('cs_mcsc_assembly_path', [])
call ale#Set('cs_mcsc_assemblies', [])
function! s:GetWorkingDirectory(buffer) abort
let l:working_directory = ale#Var(a:buffer, 'cs_mcsc_source')
if !empty(l:working_directory)
return l:working_directory
endif
return expand('#' . a:buffer . ':p:h')
endfunction
function! ale_linters#cs#mcsc#GetCommand(buffer) abort
" Pass assembly paths via the -lib: parameter.
let l:path_list = ale#Var(a:buffer, 'cs_mcsc_assembly_path')
let l:lib_option = !empty(l:path_list)
\ ? '-lib:' . join(map(copy(l:path_list), 'ale#Escape(v:val)'), ',')
\ : ''
" Pass paths to DLL files via the -r: parameter.
let l:assembly_list = ale#Var(a:buffer, 'cs_mcsc_assemblies')
let l:r_option = !empty(l:assembly_list)
\ ? '-r:' . join(map(copy(l:assembly_list), 'ale#Escape(v:val)'), ',')
\ : ''
" register temporary module target file with ale
let l:out = tempname()
call ale#engine#ManageFile(a:buffer, l:out)
" The code is compiled as a module and the output is redirected to a
" temporary file.
return ale#path#CdString(s:GetWorkingDirectory(a:buffer))
\ . 'mcs -unsafe'
\ . ' ' . ale#Var(a:buffer, 'cs_mcsc_options')
\ . ' ' . l:lib_option
\ . ' ' . l:r_option
\ . ' -out:' . l:out
\ . ' -t:module'
\ . ' -recurse:' . ale#Escape('*.cs')
endfunction
function! ale_linters#cs#mcsc#Handle(buffer, lines) abort
" Look for lines like the following.
"
" Tests.cs(12,29): error CSXXXX: ; expected
"
" NOTE: pattern also captures file name as linter compiles all
" files within the source tree rooted at the specified source
" path and not just the file loaded in the buffer
let l:pattern = '^\v(.+\.cs)\((\d+),(\d+)\)\: ([^ ]+) ([^ ]+): (.+)$'
let l:output = []
let l:dir = s:GetWorkingDirectory(a:buffer)
for l:match in ale#util#GetMatches(a:lines, l:pattern)
call add(l:output, {
\ 'filename': ale#path#GetAbsPath(l:dir, l:match[1]),
\ 'lnum': l:match[2] + 0,
\ 'col': l:match[3] + 0,
\ 'type': l:match[4] is# 'error' ? 'E' : 'W',
\ 'code': l:match[5],
\ 'text': l:match[6],
\})
endfor
return l:output
endfunction
call ale#linter#Define('cs',{
\ 'name': 'mcsc',
\ 'output_stream': 'stderr',
\ 'executable': 'mcs',
\ 'command_callback': 'ale_linters#cs#mcsc#GetCommand',
\ 'callback': 'ale_linters#cs#mcsc#Handle',
\ 'lint_file': 1
\})

56
ale_linters/cuda/nvcc.vim Normal file
View file

@ -0,0 +1,56 @@
" Author: blahgeek <i@blahgeek.com>
" Description: NVCC linter for cuda files
call ale#Set('cuda_nvcc_executable', 'nvcc')
call ale#Set('cuda_nvcc_options', '-std=c++11')
function! ale_linters#cuda#nvcc#GetExecutable(buffer) abort
return ale#Var(a:buffer, 'cuda_nvcc_executable')
endfunction
function! ale_linters#cuda#nvcc#GetCommand(buffer) abort
" Unused: use ale#util#nul_file
" let l:output_file = tempname() . '.ii'
" call ale#engine#ManageFile(a:buffer, l:output_file)
return ale#Escape(ale_linters#cuda#nvcc#GetExecutable(a:buffer))
\ . ' -cuda '
\ . ale#c#IncludeOptions(ale#c#FindLocalHeaderPaths(a:buffer))
\ . ale#Var(a:buffer, 'cuda_nvcc_options') . ' %s'
\ . ' -o ' . g:ale#util#nul_file
endfunction
function! ale_linters#cuda#nvcc#HandleNVCCFormat(buffer, lines) abort
" Look for lines like the following.
"
" test.cu(8): error: argument of type "void *" is incompatible with parameter of type "int *"
let l:pattern = '\v^([^:\(\)]+):?\(?(\d+)\)?:(\d+)?:?\s*\w*\s*(error|warning): (.+)$'
let l:output = []
for l:match in ale#util#GetMatches(a:lines, l:pattern)
let l:item = {
\ 'lnum': str2nr(l:match[2]),
\ 'type': l:match[4] =~# 'error' ? 'E' : 'W',
\ 'text': l:match[5],
\ 'filename': fnamemodify(l:match[1], ':p'),
\}
if !empty(l:match[3])
let l:item.col = str2nr(l:match[3])
endif
call add(l:output, l:item)
endfor
return l:output
endfunction
call ale#linter#Define('cuda', {
\ 'name': 'nvcc',
\ 'output_stream': 'stderr',
\ 'executable_callback': 'ale_linters#cuda#nvcc#GetExecutable',
\ 'command_callback': 'ale_linters#cuda#nvcc#GetCommand',
\ 'callback': 'ale_linters#cuda#nvcc#HandleNVCCFormat',
\ 'lint_file': 1,
\})

View file

@ -60,7 +60,7 @@ function! ale_linters#d#dmd#Handle(buffer, lines) abort
call add(l:output, {
\ 'lnum': l:match[1],
\ 'col': l:match[2],
\ 'type': l:match[3] ==# 'Warning' ? 'W' : 'E',
\ 'type': l:match[3] is# 'Warning' ? 'W' : 'E',
\ 'text': l:match[4],
\})
endfor

View file

@ -0,0 +1,25 @@
" Author: Taylor Blau <me@ttaylorr.com>
function! ale_linters#dafny#dafny#Handle(buffer, lines) abort
let l:pattern = '\v(.*)\((\d+),(\d+)\): (.*): (.*)'
let l:output = []
for l:match in ale#util#GetMatches(a:lines, l:pattern)
call add(l:output, {
\ 'bufnr': a:buffer,
\ 'col': l:match[3] + 0,
\ 'lnum': l:match[2] + 0,
\ 'text': l:match[5],
\ 'type': l:match[4] =~# '^Error' ? 'E' : 'W'
\ })
endfor
return l:output
endfunction
call ale#linter#Define('dafny', {
\ 'name': 'dafny',
\ 'executable': 'dafny',
\ 'command': 'dafny %s /compile:0',
\ 'callback': 'ale_linters#dafny#dafny#Handle',
\ 'lint_file': 1,
\ })

View file

@ -0,0 +1,41 @@
" Author: w0rp <devw0rp@gmail.com>
" Description: Check Dart files with dartanalyzer
call ale#Set('dart_dartanalyzer_executable', 'dartanalyzer')
function! ale_linters#dart#dartanalyzer#GetExecutable(buffer) abort
return ale#Var(a:buffer, 'dart_dartanalyzer_executable')
endfunction
function! ale_linters#dart#dartanalyzer#GetCommand(buffer) abort
let l:executable = ale_linters#dart#dartanalyzer#GetExecutable(a:buffer)
let l:path = ale#path#FindNearestFile(a:buffer, '.packages')
return ale#Escape(l:executable)
\ . (!empty(l:path) ? ' --packages ' . ale#Escape(l:path) : '')
\ . ' %s'
endfunction
function! ale_linters#dart#dartanalyzer#Handle(buffer, lines) abort
let l:pattern = '\v^ ([a-z]+) . (.+) at (.+):(\d+):(\d+) . (.+)$'
let l:output = []
for l:match in ale#util#GetMatches(a:lines, l:pattern)
call add(l:output, {
\ 'type': l:match[1] is# 'error' ? 'E' : 'W',
\ 'text': l:match[6] . ': ' . l:match[2],
\ 'lnum': str2nr(l:match[4]),
\ 'col': str2nr(l:match[5]),
\})
endfor
return l:output
endfunction
call ale#linter#Define('dart', {
\ 'name': 'dartanalyzer',
\ 'executable_callback': 'ale_linters#dart#dartanalyzer#GetExecutable',
\ 'command_callback': 'ale_linters#dart#dartanalyzer#GetCommand',
\ 'callback': 'ale_linters#dart#dartanalyzer#Handle',
\ 'lint_file': 1,
\})

View file

@ -0,0 +1,30 @@
" Author: aurieh <me@aurieh.me>
" Description: A language server for dart
call ale#Set('dart_language_server_executable', 'dart_language_server')
function! ale_linters#dart#language_server#GetExecutable(buffer) abort
return ale#Var(a:buffer, 'dart_language_server_executable')
endfunction
function! ale_linters#dart#language_server#GetLanguage(buffer) abort
return 'dart'
endfunction
function! ale_linters#dart#language_server#GetProjectRoot(buffer) abort
" Note: pub only looks for pubspec.yaml, there's no point in adding
" support for pubspec.yml
let l:pubspec = ale#path#FindNearestFile(a:buffer, 'pubspec.yaml')
return !empty(l:pubspec) ? fnamemodify(l:pubspec, ':h:h') : ''
endfunction
call ale#linter#Define('dart', {
\ 'name': 'language_server',
\ 'lsp': 'stdio',
\ 'executable_callback': 'ale_linters#dart#language_server#GetExecutable',
\ 'command_callback': 'ale_linters#dart#language_server#GetExecutable',
\ 'language_callback': 'ale_linters#dart#language_server#GetLanguage',
\ 'project_root_callback': 'ale_linters#dart#language_server#GetProjectRoot',
\})

View file

@ -1,37 +1,97 @@
" Author: hauleth - https://github.com/hauleth
" always, yes, never
call ale#Set('dockerfile_hadolint_use_docker', 'never')
call ale#Set('dockerfile_hadolint_docker_image', 'hadolint/hadolint')
function! ale_linters#dockerfile#hadolint#Handle(buffer, lines) abort
" Matches patterns line the following:
"
" stdin:19: F: Pipe chain should start with a raw value.
let l:pattern = '\v^/dev/stdin:?(\d+)? (\S+) (.+)$'
" /dev/stdin:19 DL3001 Pipe chain should start with a raw value.
" /dev/stdin:19:3 unexpected thing
let l:pattern = '\v^/dev/stdin:(\d+):?(\d+)? ((DL|SC)(\d+) )?(.+)$'
let l:output = []
for l:match in ale#util#GetMatches(a:lines, l:pattern)
let l:lnum = 0
let l:colnum = 0
if l:match[1] !=# ''
if l:match[1] isnot# ''
let l:lnum = l:match[1] + 0
endif
if l:match[2] isnot# ''
let l:colnum = l:match[2] + 0
endif
let l:type = 'W'
let l:text = l:match[3]
let l:text = l:match[6]
let l:detail = l:match[6]
let l:domain = 'https://github.com/hadolint/hadolint/wiki/'
if l:match[4] is# 'SC'
let l:domain = 'https://github.com/koalaman/shellcheck/wiki/'
endif
if l:match[5] isnot# ''
let l:code = l:match[4] . l:match[5]
let l:link = ' ( ' . l:domain . l:code . ' )'
let l:detail = l:code . l:link . "\n\n" . l:detail
else
let l:type = 'E'
endif
call add(l:output, {
\ 'lnum': l:lnum,
\ 'col': 0,
\ 'col': l:colnum,
\ 'type': l:type,
\ 'text': l:text,
\ 'nr': l:match[2],
\ 'detail': l:detail
\})
endfor
return l:output
endfunction
" This is a little different than the typical 'executable' callback. We want
" to afford the user the chance to say always use docker, never use docker,
" and use docker if the hadolint executable is not present on the system.
"
" In the case of neither docker nor hadolint executables being present, it
" really doesn't matter which we return -- either will have the effect of
" 'nope, can't use this linter!'.
function! ale_linters#dockerfile#hadolint#GetExecutable(buffer) abort
let l:use_docker = ale#Var(a:buffer, 'dockerfile_hadolint_use_docker')
" check for mandatory directives
if l:use_docker is# 'never'
return 'hadolint'
elseif l:use_docker is# 'always'
return 'docker'
endif
" if we reach here, we want to use 'hadolint' if present...
if executable('hadolint')
return 'hadolint'
endif
"... and 'docker' as a fallback.
return 'docker'
endfunction
function! ale_linters#dockerfile#hadolint#GetCommand(buffer) abort
let l:command = ale_linters#dockerfile#hadolint#GetExecutable(a:buffer)
if l:command is# 'docker'
return 'docker run --rm -i ' . ale#Var(a:buffer, 'dockerfile_hadolint_docker_image')
endif
return 'hadolint -'
endfunction
call ale#linter#Define('dockerfile', {
\ 'name': 'hadolint',
\ 'executable': 'hadolint',
\ 'command': 'hadolint -',
\ 'executable_callback': 'ale_linters#dockerfile#hadolint#GetExecutable',
\ 'command_callback': 'ale_linters#dockerfile#hadolint#GetCommand',
\ 'callback': 'ale_linters#dockerfile#hadolint#Handle',
\})

View file

@ -11,9 +11,9 @@ function! ale_linters#elixir#credo#Handle(buffer, lines) abort
let l:type = l:match[3]
let l:text = l:match[4]
if l:type ==# 'C'
if l:type is# 'C'
let l:type = 'E'
elseif l:type ==# 'R'
elseif l:type is# 'R'
let l:type = 'W'
endif
@ -32,6 +32,6 @@ endfunction
call ale#linter#Define('elixir', {
\ 'name': 'credo',
\ 'executable': 'mix',
\ 'command': 'mix credo suggest --format=flycheck --read-from-stdin %s',
\ 'command': 'mix help credo && mix credo suggest --format=flycheck --read-from-stdin %s',
\ 'callback': 'ale_linters#elixir#credo#Handle',
\})

View file

@ -0,0 +1,34 @@
" Author: Fran C. - https://github.com/franciscoj
" Description: Add dialyzer support for elixir through dialyxir
" https://github.com/jeremyjh/dialyxir
function! ale_linters#elixir#dialyxir#Handle(buffer, lines) abort
" Matches patterns line the following:
"
" lib/filename.ex:19: Function fname/1 has no local return
let l:pattern = '\v(.+):(\d+): (.+)$'
let l:output = []
let l:type = 'W'
for l:match in ale#util#GetMatches(a:lines, l:pattern)
if bufname(a:buffer) == l:match[1]
call add(l:output, {
\ 'bufnr': a:buffer,
\ 'lnum': l:match[2] + 0,
\ 'col': 0,
\ 'type': l:type,
\ 'text': l:match[3],
\})
endif
endfor
return l:output
endfunction
call ale#linter#Define('elixir', {
\ 'name': 'dialyxir',
\ 'executable': 'mix',
\ 'command': 'mix dialyzer',
\ 'callback': 'ale_linters#elixir#dialyxir#Handle',
\})

View file

@ -11,9 +11,9 @@ function! ale_linters#elixir#dogma#Handle(buffer, lines) abort
let l:type = l:match[3]
let l:text = l:match[4]
if l:type ==# 'C'
if l:type is# 'C'
let l:type = 'E'
elseif l:type ==# 'R'
elseif l:type is# 'R'
let l:type = 'W'
endif
@ -32,7 +32,7 @@ endfunction
call ale#linter#Define('elixir', {
\ 'name': 'dogma',
\ 'executable': 'mix',
\ 'command': 'mix dogma %s --format=flycheck',
\ 'command': 'mix help dogma && mix dogma %s --format=flycheck',
\ 'lint_file': 1,
\ 'callback': 'ale_linters#elixir#dogma#Handle',
\})

View file

@ -1,35 +1,46 @@
" Author: buffalocoder - https://github.com/buffalocoder
" Author: buffalocoder - https://github.com/buffalocoder, soywod - https://github.com/soywod
" Description: Elm linting in Ale. Closely follows the Syntastic checker in https://github.com/ElmCast/elm-vim.
call ale#Set('elm_make_executable', 'elm-make')
call ale#Set('elm_make_use_global', 0)
function! ale_linters#elm#make#GetExecutable(buffer) abort
return ale#node#FindExecutable(a:buffer, 'elm_make', [
\ 'node_modules/.bin/elm-make',
\])
endfunction
function! ale_linters#elm#make#Handle(buffer, lines) abort
let l:output = []
let l:is_windows = has('win32')
let l:temp_dir = l:is_windows ? $TMP : $TMPDIR
let l:unparsed_lines = []
for l:line in a:lines
if l:line[0] ==# '['
if l:line[0] is# '['
let l:errors = json_decode(l:line)
for l:error in l:errors
" Check if file is from the temp directory.
" Filters out any errors not related to the buffer.
if l:is_windows
let l:file_is_buffer = l:error.file[0:len(l:temp_dir) - 1] ==? l:temp_dir
let l:file_is_buffer = l:error.file[0:len(l:temp_dir) - 1] is? l:temp_dir
else
let l:file_is_buffer = l:error.file[0:len(l:temp_dir) - 1] ==# l:temp_dir
let l:file_is_buffer = l:error.file[0:len(l:temp_dir) - 1] is# l:temp_dir
endif
if l:file_is_buffer
call add(l:output, {
\ 'lnum': l:error.region.start.line,
\ 'col': l:error.region.start.column,
\ 'type': (l:error.type ==? 'error') ? 'E' : 'W',
\ 'end_lnum': l:error.region.end.line,
\ 'end_col': l:error.region.end.column,
\ 'type': (l:error.type is? 'error') ? 'E' : 'W',
\ 'text': l:error.overview,
\ 'detail': l:error.overview . "\n\n" . l:error.details
\})
endif
endfor
elseif l:line !=# 'Successfully generated /dev/null'
elseif l:line isnot# 'Successfully generated /dev/null'
call add(l:unparsed_lines, l:line)
endif
endfor
@ -50,6 +61,7 @@ endfunction
" If it doesn't, then this will fail when imports are needed.
function! ale_linters#elm#make#GetCommand(buffer) abort
let l:elm_package = ale#path#FindNearestFile(a:buffer, 'elm-package.json')
let l:elm_exe = ale_linters#elm#make#GetExecutable(a:buffer)
if empty(l:elm_package)
let l:dir_set_cmd = ''
else
@ -59,16 +71,18 @@ function! ale_linters#elm#make#GetCommand(buffer) abort
" The elm-make compiler, at the time of this writing, uses '/dev/null' as
" a sort of flag to tell the compiler not to generate an output file,
" which is why this is hard coded here.
" which is why this is hard coded here. It does not use NUL on Windows.
" Source: https://github.com/elm-lang/elm-make/blob/master/src/Flags.hs
let l:elm_cmd = 'elm-make --report=json --output='.ale#Escape('/dev/null')
let l:elm_cmd = ale#Escape(l:elm_exe)
\ . ' --report=json'
\ . ' --output=/dev/null'
return l:dir_set_cmd . ' ' . l:elm_cmd . ' %t'
endfunction
call ale#linter#Define('elm', {
\ 'name': 'make',
\ 'executable': 'elm-make',
\ 'executable_callback': 'ale_linters#elm#make#GetExecutable',
\ 'output_stream': 'both',
\ 'command_callback': 'ale_linters#elm#make#GetCommand',
\ 'callback': 'ale_linters#elm#make#Handle'

View file

@ -17,7 +17,7 @@ function! ale_linters#erlang#erlc#Handle(buffer, lines) abort
" error.erl:4: variable 'B' is unbound
" error.erl:3: Warning: function main/0 is unused
" error.erl:4: Warning: variable 'A' is unused
let l:pattern = '\v^([^:]+):(\d+): (Warning: )?(.+)$'
let l:pattern = '\v^([a-zA-Z]?:?[^:]+):(\d+): (Warning: )?(.+)$'
" parse_transforms are a special case. The error message does not indicate a location:
" error.erl: undefined parse transform 'some_parse_transform'
@ -27,7 +27,7 @@ function! ale_linters#erlang#erlc#Handle(buffer, lines) abort
let l:pattern_no_module_definition = '\v(no module definition)$'
let l:pattern_unused = '\v(.* is unused)$'
let l:is_hrl = fnamemodify(bufname(a:buffer), ':e') ==# 'hrl'
let l:is_hrl = fnamemodify(bufname(a:buffer), ':e') is# 'hrl'
for l:line in a:lines
let l:match = matchlist(l:line, l:pattern)

View file

@ -0,0 +1,53 @@
" Author: Dmitri Vereshchagin <dmitri.vereshchagin@gmail.com>
" Description: SyntaxErl linter for Erlang files
call ale#Set('erlang_syntaxerl_executable', 'syntaxerl')
function! ale_linters#erlang#syntaxerl#GetExecutable(buffer) abort
return ale#Var(a:buffer, 'erlang_syntaxerl_executable')
endfunction
function! ale_linters#erlang#syntaxerl#FeatureCheck(buffer) abort
return s:GetEscapedExecutable(a:buffer) . ' -h'
endfunction
function! ale_linters#erlang#syntaxerl#GetCommand(buffer, output) abort
let l:use_b_option = match(a:output, '\C\V-b, --base\>') > -1
return s:GetEscapedExecutable(a:buffer) . (l:use_b_option ? ' -b %s %t' : ' %t')
endfunction
function! ale_linters#erlang#syntaxerl#Handle(buffer, lines) abort
let l:pattern = '\v\C:(\d+):( warning:)? (.+)'
let l:loclist = []
for l:match in ale#util#GetMatches(a:lines, l:pattern)
call add(l:loclist, {
\ 'lnum': l:match[1] + 0,
\ 'text': l:match[3],
\ 'type': empty(l:match[2]) ? 'E' : 'W',
\})
endfor
return l:loclist
endfunction
function! s:GetEscapedExecutable(buffer) abort
return ale#Escape(ale_linters#erlang#syntaxerl#GetExecutable(a:buffer))
endfunction
call ale#linter#Define('erlang', {
\ 'name': 'syntaxerl',
\ 'executable_callback': 'ale_linters#erlang#syntaxerl#GetExecutable',
\ 'command_chain': [
\ {'callback': 'ale_linters#erlang#syntaxerl#FeatureCheck'},
\ {'callback': 'ale_linters#erlang#syntaxerl#GetCommand'},
\ ],
\ 'callback': 'ale_linters#erlang#syntaxerl#Handle',
\})

25
ale_linters/eruby/erb.vim Normal file
View file

@ -0,0 +1,25 @@
" Author: Matthias Guenther - https://wikimatze.de, Eddie Lebow https://github.com/elebow
" Description: ERB from the Ruby standard library, for eruby/erb files
function! ale_linters#eruby#erb#GetCommand(buffer) abort
let l:rails_root = ale#ruby#FindRailsRoot(a:buffer)
if empty(l:rails_root)
return 'erb -P -T - -x %t | ruby -c'
endif
" Rails-flavored eRuby does not comply with the standard as understood by
" ERB, so we'll have to do some substitution. This does not reduce the
" effectiveness of the linter—the translated code is still evaluated.
return 'ruby -r erb -e ' . ale#Escape('puts ERB.new($stdin.read.gsub(%{<%=},%{<%}), nil, %{-}).src') . '< %t | ruby -c'
endfunction
call ale#linter#Define('eruby', {
\ 'name': 'erb',
\ 'aliases': ['erubylint'],
\ 'executable': 'erb',
\ 'output_stream': 'stderr',
\ 'command_callback': 'ale_linters#eruby#erb#GetCommand',
\ 'callback': 'ale#handlers#ruby#HandleSyntaxErrors',
\})

View file

@ -0,0 +1,35 @@
" Author: Eddie Lebow https://github.com/elebow
" Description: eruby checker using `erubi`
function! ale_linters#eruby#erubi#CheckErubi(buffer) abort
return 'ruby -r erubi/capture_end -e ' . ale#Escape('""')
endfunction
function! ale_linters#eruby#erubi#GetCommand(buffer, check_erubi_output) abort
let l:rails_root = ale#ruby#FindRailsRoot(a:buffer)
if (!empty(a:check_erubi_output))
" The empty command in CheckErubi returns nothing if erubi runs and
" emits an error if erubi is not present
return ''
endif
if empty(l:rails_root)
return 'ruby -r erubi/capture_end -e ' . ale#Escape('puts Erubi::CaptureEndEngine.new($stdin.read).src') . '< %t | ruby -c'
endif
" Rails-flavored eRuby does not comply with the standard as understood by
" Erubi, so we'll have to do some substitution. This does not reduce the
" effectiveness of the linter---the translated code is still evaluated.
return 'ruby -r erubi/capture_end -e ' . ale#Escape('puts Erubi::CaptureEndEngine.new($stdin.read.gsub(%{<%=},%{<%}), nil, %{-}).src') . '< %t | ruby -c'
endfunction
call ale#linter#Define('eruby', {
\ 'name': 'erubi',
\ 'executable': 'ruby',
\ 'command_chain': [
\ {'callback': 'ale_linters#eruby#erubi#CheckErubi'},
\ {'callback': 'ale_linters#eruby#erubi#GetCommand', 'output_stream': 'stderr'},
\ ],
\ 'callback': 'ale#handlers#ruby#HandleSyntaxErrors',
\})

View file

@ -0,0 +1,23 @@
" Author: Jake Zimmerman <jake@zimmerman.io>, Eddie Lebow https://github.com/elebow
" Description: eruby checker using `erubis`, instead of `erb`
function! ale_linters#eruby#erubis#GetCommand(buffer) abort
let l:rails_root = ale#ruby#FindRailsRoot(a:buffer)
if empty(l:rails_root)
return 'erubis -x %t | ruby -c'
endif
" Rails-flavored eRuby does not comply with the standard as understood by
" Erubis, so we'll have to do some substitution. This does not reduce the
" effectiveness of the linter - the translated code is still evaluated.
return 'ruby -r erubis -e ' . ale#Escape('puts Erubis::Eruby.new($stdin.read.gsub(%{<%=},%{<%})).src') . '< %t | ruby -c'
endfunction
call ale#linter#Define('eruby', {
\ 'name': 'erubis',
\ 'executable': 'erubis',
\ 'output_stream': 'stderr',
\ 'command_callback': 'ale_linters#eruby#erubis#GetCommand',
\ 'callback': 'ale#handlers#ruby#HandleSyntaxErrors',
\})

View file

@ -1,11 +0,0 @@
" Author: Matthias Guenther - https://wikimatze.de
" Description: erb-lint for eruby/erb files
call ale#linter#Define('eruby', {
\ 'name': 'erubylint',
\ 'executable': 'erb',
\ 'output_stream': 'stderr',
\ 'command': 'erb -P -x %t | ruby -c',
\ 'callback': 'ale#handlers#ruby#HandleSyntaxErrors',
\})

36
ale_linters/fish/fish.vim Normal file
View file

@ -0,0 +1,36 @@
" Author: Niraj Thapaliya - https://github.com/nthapaliya
" Description: Lints fish files using fish -n
function! ale_linters#fish#fish#Handle(buffer, lines) abort
" Matches patterns such as:
"
" home/.config/fish/functions/foo.fish (line 1): Missing end to balance this function definition
" function foo
" ^
" <W> fish: Error while reading file .config/fish/functions/foo.fish
let l:pattern = '^.* (line \(\d\+\)): \(.*\)$'
let l:output = []
let l:i = 0
while l:i < len(a:lines)
let l:match = matchlist(a:lines[l:i], l:pattern)
if len(l:match) && len(l:match[2])
call add(l:output, {
\ 'col': len(a:lines[l:i + 2]),
\ 'lnum': str2nr(l:match[1]),
\ 'text': l:match[2],
\})
endif
let l:i += 1
endwhile
return l:output
endfunction
call ale#linter#Define('fish', {
\ 'name': 'fish',
\ 'output_stream': 'stderr',
\ 'executable': 'fish',
\ 'command': 'fish -n %t',
\ 'callback': 'ale_linters#fish#fish#Handle',
\})

View file

@ -44,7 +44,7 @@ function! ale_linters#fortran#gcc#Handle(buffer, lines) abort
" Now we have the text, we can set it and add the error.
let l:last_loclist_obj.text = l:match[2]
let l:last_loclist_obj.type = l:match[1] ==# 'Warning' ? 'W' : 'E'
let l:last_loclist_obj.type = l:match[1] is# 'Warning' ? 'W' : 'E'
call add(l:output, l:last_loclist_obj)
else
let l:last_loclist_obj = {

View file

@ -0,0 +1,9 @@
" Author: Jansen Mitchell https://github.com/JansenMitchell
" Description: proselint for Fountain files
call ale#linter#Define('fountain', {
\ 'name': 'proselint',
\ 'executable': 'proselint',
\ 'command': 'proselint %t',
\ 'callback': 'ale#handlers#unix#HandleAsWarning',
\})

View file

@ -0,0 +1,52 @@
" Author: Nick Yamane <nick.diego@gmail.com>
" Description: gitlint for git commit message files
let g:ale_gitcommit_gitlint_executable =
\ get(g:, 'ale_gitcommit_gitlint_executable', 'gitlint')
let g:ale_gitcommit_gitlint_options = get(g:, 'ale_gitcommit_gitlint_options', '')
let g:ale_gitcommit_gitlint_use_global = get(g:, 'ale_gitcommit_gitlint_use_global', 0)
function! ale_linters#gitcommit#gitlint#GetExecutable(buffer) abort
return ale#python#FindExecutable(a:buffer, 'gitcommit_gitlint', ['gitlint'])
endfunction
function! ale_linters#gitcommit#gitlint#GetCommand(buffer) abort
let l:options = ale#Var(a:buffer, 'gitcommit_gitlint_options')
let l:executable = ale_linters#gitcommit#gitlint#GetExecutable(a:buffer)
return ale#Escape(l:executable)
\ . (!empty(l:options) ? ' ' . l:options : '')
\ . ' lint'
endfunction
function! ale_linters#gitcommit#gitlint#Handle(buffer, lines) abort
" Matches patterns line the following:
let l:pattern = '\v^(\d+): (\w+) (.*)$'
let l:output = []
for l:match in ale#util#GetMatches(a:lines, l:pattern)
let l:code = l:match[2]
let l:item = {
\ 'lnum': l:match[1] + 0,
\ 'text': l:match[3],
\ 'code': l:code,
\ 'type': 'E',
\}
call add(l:output, l:item)
endfor
return l:output
endfunction
call ale#linter#Define('gitcommit', {
\ 'name': 'gitlint',
\ 'output_stream': 'stderr',
\ 'executable_callback': 'ale_linters#gitcommit#gitlint#GetExecutable',
\ 'command_callback': 'ale_linters#gitcommit#gitlint#GetCommand',
\ 'callback': 'ale_linters#gitcommit#gitlint#Handle',
\})

View file

@ -0,0 +1,46 @@
" Author: Sven-Hendrik Haase <svenstaro@gmail.com>
" Description: glslang-based linter for glsl files
"
" TODO: Once https://github.com/KhronosGroup/glslang/pull/1047 is accepted,
" we can use stdin.
let g:ale_glsl_glslang_executable =
\ get(g:, 'ale_glsl_glslang_executable', 'glslangValidator')
let g:ale_glsl_glslang_options = get(g:, 'ale_glsl_glslang_options', '')
function! ale_linters#glsl#glslang#GetExecutable(buffer) abort
return ale#Var(a:buffer, 'glsl_glslang_executable')
endfunction
function! ale_linters#glsl#glslang#GetCommand(buffer) abort
return ale_linters#glsl#glslang#GetExecutable(a:buffer)
\ . ' ' . ale#Var(a:buffer, 'glsl_glslang_options')
\ . ' ' . '-C %t'
endfunction
function! ale_linters#glsl#glslang#Handle(buffer, lines) abort
" Matches patterns like the following:
"
" ERROR: 0:5: 'foo' : undeclared identifier
let l:pattern = '^\(.\+\): \(\d\+\):\(\d\+\): \(.\+\)'
let l:output = []
for l:match in ale#util#GetMatches(a:lines, l:pattern)
call add(l:output, {
\ 'lnum': str2nr(l:match[3]),
\ 'col': str2nr(l:match[2]),
\ 'text': l:match[4],
\ 'type': l:match[1] is# 'ERROR' ? 'E' : 'W',
\})
endfor
return l:output
endfunction
call ale#linter#Define('glsl', {
\ 'name': 'glslang',
\ 'executable_callback': 'ale_linters#glsl#glslang#GetExecutable',
\ 'command_callback': 'ale_linters#glsl#glslang#GetCommand',
\ 'callback': 'ale_linters#glsl#glslang#Handle',
\})

View file

@ -0,0 +1,38 @@
" Author: Sven-Hendrik Haase <svenstaro@gmail.com>
" Description: A language server for glsl
call ale#Set('glsl_glslls_executable', 'glslls')
call ale#Set('glsl_glslls_logfile', '')
function! ale_linters#glsl#glslls#GetExecutable(buffer) abort
return ale#Var(a:buffer, 'glsl_glslls_executable')
endfunction
function! ale_linters#glsl#glslls#GetCommand(buffer) abort
let l:executable = ale_linters#glsl#glslls#GetExecutable(a:buffer)
let l:logfile = ale#Var(a:buffer, 'glsl_glslls_logfile')
let l:logfile_args = ''
if l:logfile isnot# ''
let l:logfile_args = ' --verbose -l ' . l:logfile
endif
return ale#Escape(l:executable) . l:logfile_args . ' --stdin'
endfunction
function! ale_linters#glsl#glslls#GetLanguage(buffer) abort
return 'glsl'
endfunction
function! ale_linters#glsl#glslls#GetProjectRoot(buffer) abort
let l:project_root = ale#c#FindProjectRoot(a:buffer)
return !empty(l:project_root) ? fnamemodify(l:project_root, ':h:h') : ''
endfunction
call ale#linter#Define('glsl', {
\ 'name': 'glslls',
\ 'lsp': 'stdio',
\ 'executable_callback': 'ale_linters#glsl#glslls#GetExecutable',
\ 'command_callback': 'ale_linters#glsl#glslls#GetCommand',
\ 'language_callback': 'ale_linters#glsl#glslls#GetLanguage',
\ 'project_root_callback': 'ale_linters#glsl#glslls#GetProjectRoot',
\})

View file

@ -1,8 +1,14 @@
" Author: Joshua Rubin <joshua@rubixconsulting.com>, Ben Reedy <https://github.com/breed808>
" Author: Joshua Rubin <joshua@rubixconsulting.com>, Ben Reedy <https://github.com/breed808>,
" Jeff Willette <jrwillette88@gmail.com>
" Description: go build for Go files
" inspired by work from dzhou121 <dzhou121@gmail.com>
call ale#Set('go_gobuild_options', '')
function! ale_linters#go#gobuild#ResetEnv() abort
unlet! s:go_env
endfunction
function! ale_linters#go#gobuild#GoEnv(buffer) abort
if exists('s:go_env')
return ''
@ -12,6 +18,8 @@ function! ale_linters#go#gobuild#GoEnv(buffer) abort
endfunction
function! ale_linters#go#gobuild#GetCommand(buffer, goenv_output) abort
let l:options = ale#Var(a:buffer, 'go_gobuild_options')
if !exists('s:go_env')
let s:go_env = {
\ 'GOPATH': a:goenv_output[0],
@ -19,10 +27,16 @@ function! ale_linters#go#gobuild#GetCommand(buffer, goenv_output) abort
\}
endif
let l:gopath_env_command = has('win32')
\ ? 'set GOPATH=' . ale#Escape(s:go_env.GOPATH) . ' && '
\ : 'GOPATH=' . ale#Escape(s:go_env.GOPATH) . ' '
" Run go test in local directory with relative path
return 'GOPATH=' . s:go_env.GOPATH
\ . ' cd ' . fnamemodify(bufname(a:buffer), ':.:h')
\ . ' && go test -c -o /dev/null ./'
return l:gopath_env_command
\ . ale#path#BufferCdString(a:buffer)
\ . 'go test'
\ . (!empty(l:options) ? ' ' . l:options : '')
\ . ' -c -o /dev/null ./'
endfunction
function! ale_linters#go#gobuild#GetMatches(lines) abort
@ -39,15 +53,12 @@ function! ale_linters#go#gobuild#GetMatches(lines) abort
endfunction
function! ale_linters#go#gobuild#Handler(buffer, lines) abort
let l:dir = expand('#' . a:buffer . ':p:h')
let l:output = []
for l:match in ale_linters#go#gobuild#GetMatches(a:lines)
" Omit errors from imported go packages
if !ale#path#IsBufferPath(a:buffer, l:match[1])
continue
endif
call add(l:output, {
\ 'filename': ale#path#GetAbsPath(l:dir, l:match[1]),
\ 'lnum': l:match[2] + 0,
\ 'col': l:match[3] + 0,
\ 'text': l:match[4],

View file

@ -3,6 +3,7 @@
call ale#linter#Define('go', {
\ 'name': 'golint',
\ 'output_stream': 'both',
\ 'executable': 'golint',
\ 'command': 'golint %t',
\ 'callback': 'ale#handlers#unix#HandleAsWarning',

View file

@ -1,16 +1,32 @@
" Author: Ben Reedy <https://github.com/breed808>
" Author: Ben Reedy <https://github.com/breed808>, Jeff Willette <jrwillette88@gmail.com>
" Description: Adds support for the gometalinter suite for Go files
if !exists('g:ale_go_gometalinter_options')
let g:ale_go_gometalinter_options = ''
endif
call ale#Set('go_gometalinter_options', '')
call ale#Set('go_gometalinter_executable', 'gometalinter')
call ale#Set('go_gometalinter_lint_package', 0)
function! ale_linters#go#gometalinter#GetExecutable(buffer) abort
return ale#Var(a:buffer, 'go_gometalinter_executable')
endfunction
function! ale_linters#go#gometalinter#GetCommand(buffer) abort
let l:filename = expand('#' . a:buffer . ':p')
let l:executable = ale_linters#go#gometalinter#GetExecutable(a:buffer)
let l:filename = expand('#' . a:buffer . ':t')
let l:options = ale#Var(a:buffer, 'go_gometalinter_options')
let l:lint_package = ale#Var(a:buffer, 'go_gometalinter_lint_package')
return 'gometalinter --include=''^' . l:filename . '.*$'' '
\ . ale#Var(a:buffer, 'go_gometalinter_options')
\ . ' ' . ale#Escape(fnamemodify(bufname(a:buffer), ':p:h'))
" BufferCdString is used so that we can be sure the paths output from gometalinter can
" be calculated to absolute paths in the Handler
if l:lint_package
return ale#path#BufferCdString(a:buffer)
\ . ale#Escape(l:executable)
\ . (!empty(l:options) ? ' ' . l:options : '') . ' .'
endif
return ale#path#BufferCdString(a:buffer)
\ . ale#Escape(l:executable)
\ . ' --include=' . ale#Escape(ale#util#EscapePCRE(l:filename))
\ . (!empty(l:options) ? ' ' . l:options : '') . ' .'
endfunction
function! ale_linters#go#gometalinter#GetMatches(lines) abort
@ -20,13 +36,16 @@ function! ale_linters#go#gometalinter#GetMatches(lines) abort
endfunction
function! ale_linters#go#gometalinter#Handler(buffer, lines) abort
let l:dir = expand('#' . a:buffer . ':p:h')
let l:output = []
for l:match in ale_linters#go#gometalinter#GetMatches(a:lines)
" l:match[1] will already be an absolute path, output from gometalinter
call add(l:output, {
\ 'filename': ale#path#GetAbsPath(l:dir, l:match[1]),
\ 'lnum': l:match[2] + 0,
\ 'col': l:match[3] + 0,
\ 'type': tolower(l:match[4]) ==# 'warning' ? 'W' : 'E',
\ 'type': tolower(l:match[4]) is# 'warning' ? 'W' : 'E',
\ 'text': l:match[5],
\})
endfor
@ -36,7 +55,7 @@ endfunction
call ale#linter#Define('go', {
\ 'name': 'gometalinter',
\ 'executable': 'gometalinter',
\ 'executable_callback': 'ale_linters#go#gometalinter#GetExecutable',
\ 'command_callback': 'ale_linters#go#gometalinter#GetCommand',
\ 'callback': 'ale_linters#go#gometalinter#Handler',
\ 'lint_file': 1,

View file

@ -4,6 +4,8 @@
call ale#linter#Define('go', {
\ 'name': 'gosimple',
\ 'executable': 'gosimple',
\ 'command': 'gosimple %t',
\ 'command': 'gosimple %s',
\ 'callback': 'ale#handlers#unix#HandleAsWarning',
\ 'output_stream': 'both',
\ 'lint_file': 1,
\})

23
ale_linters/go/gotype.vim Normal file
View file

@ -0,0 +1,23 @@
" Author: Jelte Fennema <github-public@jeltef.nl>
" Description: gotype for Go files
call ale#linter#Define('go', {
\ 'name': 'gotype',
\ 'output_stream': 'stderr',
\ 'executable': 'gotype',
\ 'command_callback': 'ale_linters#go#gotype#GetCommand',
\ 'callback': 'ale#handlers#unix#HandleAsError',
\})
"\ 'command':
function! ale_linters#go#gotype#GetCommand(buffer) abort
let l:cur_file = expand('#' . a:buffer . ':p')
if l:cur_file =~# '_test\.go$'
return
endif
let l:module_files = globpath(expand('#' . a:buffer . ':p:h'), '*.go', 0, 1)
let l:other_module_files = filter(l:module_files, 'v:val isnot# ' . ale#util#EscapeVim(l:cur_file) . ' && v:val !~# "_test\.go$"')
return 'gotype %t ' . join(map(l:other_module_files, 'ale#Escape(v:val)'))
endfunction

View file

@ -1,10 +1,35 @@
" Author: neersighted <bjorn@neersighted.com>
" Description: go vet for Go files
"
" Author: John Eikenberry <jae@zhar.net>
" Description: updated to work with go1.10
function! ale_linters#go#govet#GetCommand(buffer) abort
return ale#path#BufferCdString(a:buffer) . ' go vet .'
endfunction
function! ale_linters#go#govet#Handler(buffer, lines) abort
let l:pattern = '\v^([a-zA-Z]?:?[^:]+):(\d+):?(\d+)?:? ?(.+)$'
let l:output = []
let l:dir = expand('#' . a:buffer . ':p:h')
for l:match in ale#util#GetMatches(a:lines, l:pattern)
call add(l:output, {
\ 'filename': ale#path#GetAbsPath(l:dir, l:match[1]),
\ 'lnum': l:match[2] + 0,
\ 'col': l:match[3] + 0,
\ 'text': l:match[4],
\ 'type': 'E',
\})
endfor
return l:output
endfunction
call ale#linter#Define('go', {
\ 'name': 'go vet',
\ 'output_stream': 'stderr',
\ 'executable': 'go',
\ 'command': 'go vet %t',
\ 'callback': 'ale#handlers#unix#HandleAsError',
\ 'command_callback': 'ale_linters#go#govet#GetCommand',
\ 'callback': 'ale_linters#go#govet#Handler',
\ 'lint_file': 1,
\})

View file

@ -1,9 +1,33 @@
" Author: Ben Reedy <https://github.com/breed808>
" Description: staticcheck for Go files
call ale#Set('go_staticcheck_options', '')
call ale#Set('go_staticcheck_lint_package', 0)
function! ale_linters#go#staticcheck#GetCommand(buffer) abort
let l:filename = expand('#' . a:buffer . ':t')
let l:options = ale#Var(a:buffer, 'go_staticcheck_options')
let l:lint_package = ale#Var(a:buffer, 'go_staticcheck_lint_package')
" BufferCdString is used so that we can be sure the paths output from
" staticcheck can be calculated to absolute paths in the Handler
if l:lint_package
return ale#path#BufferCdString(a:buffer)
\ . 'staticcheck'
\ . (!empty(l:options) ? ' ' . l:options : '') . ' .'
endif
return ale#path#BufferCdString(a:buffer)
\ . 'staticcheck'
\ . (!empty(l:options) ? ' ' . l:options : '')
\ . ' ' . ale#Escape(l:filename)
endfunction
call ale#linter#Define('go', {
\ 'name': 'staticcheck',
\ 'executable': 'staticcheck',
\ 'command': 'staticcheck %t',
\ 'command_callback': 'ale_linters#go#staticcheck#GetCommand',
\ 'callback': 'ale#handlers#unix#HandleAsWarning',
\ 'output_stream': 'both',
\ 'lint_file': 1,
\})

View file

@ -0,0 +1,9 @@
" Author: Benjie Gillam <code@benjiegillam.com>
" Description: eslint for GraphQL files
call ale#linter#Define('graphql', {
\ 'name': 'eslint',
\ 'executable_callback': 'ale#handlers#eslint#GetExecutable',
\ 'command_callback': 'ale#handlers#eslint#GetCommand',
\ 'callback': 'ale#handlers#eslint#Handle',
\})

View file

@ -0,0 +1,9 @@
" Author: Michiel Westerbeek <happylinks@gmail.com>
" Description: Linter for GraphQL Schemas
call ale#linter#Define('graphql', {
\ 'name': 'gqlint',
\ 'executable': 'gqlint',
\ 'command': 'gqlint --reporter=simple %t',
\ 'callback': 'ale#handlers#unix#HandleAsWarning',
\})

View file

@ -1,6 +1,31 @@
" Author: Patrick Lewis - https://github.com/patricklewis
" Author: Patrick Lewis - https://github.com/patricklewis, thenoseman - https://github.com/thenoseman
" Description: haml-lint for Haml files
function! ale_linters#haml#hamllint#GetCommand(buffer) abort
let l:prefix = ''
let l:rubocop_config_file_path = ale#path#FindNearestFile(a:buffer, '.rubocop.yml')
let l:hamllint_config_file_path = ale#path#FindNearestFile(a:buffer, '.haml-lint.yml')
" Set HAML_LINT_RUBOCOP_CONF variable as it is needed for haml-lint to
" pick up the rubocop config.
"
" See https://github.com/brigade/haml-lint/blob/master/lib/haml_lint/linter/rubocop.rb#L89
" HamlLint::Linter::RuboCop#rubocop_flags
if !empty(l:rubocop_config_file_path)
if ale#Has('win32')
let l:prefix = 'set HAML_LINT_RUBOCOP_CONF=' . ale#Escape(l:rubocop_config_file_path) . ' &&'
else
let l:prefix = 'HAML_LINT_RUBOCOP_CONF=' . ale#Escape(l:rubocop_config_file_path)
endif
endif
return (!empty(l:prefix) ? l:prefix . ' ' : '')
\ . 'haml-lint'
\ . (!empty(l:hamllint_config_file_path) ? ' --config ' . ale#Escape(l:hamllint_config_file_path) : '')
\ . ' %t'
endfunction
function! ale_linters#haml#hamllint#Handle(buffer, lines) abort
" Matches patterns like the following:
" <path>:51 [W] RuboCop: Use the new Ruby 1.9 hash syntax.
@ -21,6 +46,6 @@ endfunction
call ale#linter#Define('haml', {
\ 'name': 'hamllint',
\ 'executable': 'haml-lint',
\ 'command': 'haml-lint %t',
\ 'command_callback': 'ale_linters#haml#hamllint#GetCommand',
\ 'callback': 'ale_linters#haml#hamllint#Handle'
\})

View file

@ -16,27 +16,19 @@ function! ale_linters#handlebars#embertemplatelint#GetCommand(buffer) abort
endfunction
function! ale_linters#handlebars#embertemplatelint#Handle(buffer, lines) abort
if len(a:lines) == 0
return []
endif
let l:output = []
let l:json = ale#util#FuzzyJSONDecode(a:lines, {})
let l:input_json = json_decode(join(a:lines, ''))
let l:file_errors = values(l:input_json)[0]
for l:error in l:file_errors
for l:error in get(values(l:json), 0, [])
if has_key(l:error, 'fatal')
call add(l:output, {
\ 'bufnr': a:buffer,
\ 'lnum': 1,
\ 'col': 1,
\ 'lnum': get(l:error, 'line', 1),
\ 'col': get(l:error, 'column', 1),
\ 'text': l:error.message,
\ 'type': l:error.severity == 1 ? 'W' : 'E',
\})
else
call add(l:output, {
\ 'bufnr': a:buffer,
\ 'lnum': l:error.line,
\ 'col': l:error.column,
\ 'text': l:error.rule . ': ' . l:error.message,

View file

@ -4,13 +4,13 @@
call ale#linter#Define('haskell', {
\ 'name': 'ghc-mod',
\ 'executable': 'ghc-mod',
\ 'command': 'ghc-mod check %t',
\ 'command': 'ghc-mod --map-file %s=%t check %s',
\ 'callback': 'ale#handlers#haskell#HandleGHCFormat',
\})
call ale#linter#Define('haskell', {
\ 'name': 'stack-ghc-mod',
\ 'executable': 'stack',
\ 'command': 'stack exec ghc-mod check %t',
\ 'command': 'stack exec ghc-mod -- --map-file %s=%t check %s',
\ 'callback': 'ale#handlers#haskell#HandleGHCFormat',
\})

View file

@ -1,18 +1,18 @@
" Author: w0rp <devw0rp@gmail.com>
" Description: ghc for Haskell files
call ale#Set('haskell_ghc_options', '-fno-code -v0')
function! ale_linters#haskell#ghc#GetCommand(buffer) abort
return 'ghc '
\ . ale#Var(a:buffer, 'haskell_ghc_options')
\ . ' %t'
endfunction
call ale#linter#Define('haskell', {
\ 'name': 'ghc',
\ 'output_stream': 'stderr',
\ 'executable': 'ghc',
\ 'command': 'ghc -fno-code -v0 %t',
\ 'callback': 'ale#handlers#haskell#HandleGHCFormat',
\})
call ale#linter#Define('haskell', {
\ 'name': 'stack-ghc',
\ 'output_stream': 'stderr',
\ 'executable': 'stack',
\ 'command': 'stack ghc -- -fno-code -v0 %t',
\ 'command_callback': 'ale_linters#haskell#ghc#GetCommand',
\ 'callback': 'ale#handlers#haskell#HandleGHCFormat',
\})

View file

@ -1,9 +1,22 @@
" Author: rob-b
" Author: rob-b, Takano Akio <tak@anoak.io>
" Description: hdevtools for Haskell files
call ale#Set('haskell_hdevtools_executable', 'hdevtools')
call ale#Set('haskell_hdevtools_options', '-g -Wall')
function! ale_linters#haskell#hdevtools#GetExecutable(buffer) abort
return ale#Var(a:buffer, 'haskell_hdevtools_executable')
endfunction
function! ale_linters#haskell#hdevtools#GetCommand(buffer) abort
return ale#Escape(ale_linters#haskell#hdevtools#GetExecutable(a:buffer))
\ . ' check ' . ale#Var(a:buffer, 'haskell_hdevtools_options')
\ . ' -p %s %t'
endfunction
call ale#linter#Define('haskell', {
\ 'name': 'hdevtools',
\ 'executable': 'hdevtools',
\ 'command': 'hdevtools check -g -Wall -p %s %t',
\ 'executable_callback': 'ale_linters#haskell#hdevtools#GetExecutable',
\ 'command_callback': 'ale_linters#haskell#hdevtools#GetCommand',
\ 'callback': 'ale#handlers#haskell#HandleGHCFormat',
\})

View file

@ -2,17 +2,24 @@
" Description: hlint for Haskell files
function! ale_linters#haskell#hlint#Handle(buffer, lines) abort
let l:errors = json_decode(join(a:lines, ''))
let l:output = []
for l:error in l:errors
for l:error in ale#util#FuzzyJSONDecode(a:lines, [])
if l:error.severity is# 'Error'
let l:type = 'E'
elseif l:error.severity is# 'Suggestion'
let l:type = 'I'
else
let l:type = 'W'
endif
call add(l:output, {
\ 'bufnr': a:buffer,
\ 'lnum': l:error.startLine + 0,
\ 'col': l:error.startColumn + 0,
\ 'lnum': str2nr(l:error.startLine),
\ 'col': str2nr(l:error.startColumn),
\ 'end_lnum': str2nr(l:error.endLine),
\ 'end_col': str2nr(l:error.endColumn),
\ 'text': l:error.severity . ': ' . l:error.hint . '. Found: ' . l:error.from . ' Why not: ' . l:error.to,
\ 'type': l:error.severity ==# 'Error' ? 'E' : 'W',
\ 'type': l:type,
\})
endfor

View file

@ -0,0 +1,22 @@
" Author: Jake Zimmerman <jake@zimmerman.io>
" Description: Like stack-ghc, but for entire projects
"
" Note: Ideally, this would *only* typecheck. Right now, it also does codegen.
" See <https://github.com/commercialhaskell/stack/issues/977>.
call ale#Set('haskell_stack_build_options', '--fast')
function! ale_linters#haskell#stack_build#GetCommand(buffer) abort
let l:flags = ale#Var(a:buffer, 'haskell_stack_build_options')
return 'stack build ' . l:flags
endfunction
call ale#linter#Define('haskell', {
\ 'name': 'stack-build',
\ 'output_stream': 'stderr',
\ 'executable': 'stack',
\ 'command_callback': 'ale_linters#haskell#stack_build#GetCommand',
\ 'lint_file': 1,
\ 'callback': 'ale#handlers#haskell#HandleGHCFormat',
\})

View file

@ -0,0 +1,10 @@
" Author: w0rp <devw0rp@gmail.com>
" Description: ghc for Haskell files, using Stack
call ale#linter#Define('haskell', {
\ 'name': 'stack-ghc',
\ 'output_stream': 'stderr',
\ 'executable': 'stack',
\ 'command': 'stack ghc -- -fno-code -v0 %t',
\ 'callback': 'ale#handlers#haskell#HandleGHCFormat',
\})

11
ale_linters/help/alex.vim Normal file
View file

@ -0,0 +1,11 @@
" Author: Johannes Wienke <languitar@semipol.de>
" Description: alex for help files
call ale#linter#Define('help', {
\ 'name': 'alex',
\ 'executable': 'alex',
\ 'command': 'alex %s -t',
\ 'output_stream': 'stderr',
\ 'callback': 'ale#handlers#alex#Handle',
\ 'lint_file': 1,
\})

View file

@ -0,0 +1,9 @@
" Author: Sumner Evans <sumner.evans98@gmail.com>
" Description: write-good for vim Help files
call ale#linter#Define('help', {
\ 'name': 'write-good',
\ 'executable_callback': 'ale#handlers#writegood#GetExecutable',
\ 'command_callback': 'ale#handlers#writegood#GetCommand',
\ 'callback': 'ale#handlers#writegood#Handle',
\})

11
ale_linters/html/alex.vim Normal file
View file

@ -0,0 +1,11 @@
" Author: Johannes Wienke <languitar@semipol.de>
" Description: alex for HTML files
call ale#linter#Define('html', {
\ 'name': 'alex',
\ 'executable': 'alex',
\ 'command': 'alex %s -t',
\ 'output_stream': 'stderr',
\ 'callback': 'ale#handlers#alex#Handle',
\ 'lint_file': 1,
\})

View file

@ -1,7 +1,7 @@
" Author: KabbAmine <amine.kabb@gmail.com>, deathmaz <00maz1987@gmail.com>, diartyz <diartyz@gmail.com>
" Description: HTMLHint for checking html files
call ale#Set('html_htmlhint_options', '--format=unix')
call ale#Set('html_htmlhint_options', '')
call ale#Set('html_htmlhint_executable', 'htmlhint')
call ale#Set('html_htmlhint_use_global', 0)
@ -12,9 +12,22 @@ function! ale_linters#html#htmlhint#GetExecutable(buffer) abort
endfunction
function! ale_linters#html#htmlhint#GetCommand(buffer) abort
return ale_linters#html#htmlhint#GetExecutable(a:buffer)
\ . ' ' . ale#Var(a:buffer, 'html_htmlhint_options')
\ . ' %t'
let l:options = ale#Var(a:buffer, 'html_htmlhint_options')
let l:config = l:options !~# '--config'
\ ? ale#path#FindNearestFile(a:buffer, '.htmlhintrc')
\ : ''
if !empty(l:config)
let l:options .= ' --config ' . ale#Escape(l:config)
endif
if !empty(l:options)
let l:options = substitute(l:options, '--format=unix', '', '')
endif
return ale#Escape(ale_linters#html#htmlhint#GetExecutable(a:buffer))
\ . (!empty(l:options) ? ' ' . l:options : '')
\ . ' --format=unix %t'
endfunction
call ale#linter#Define('html', {

View file

@ -25,8 +25,16 @@ function! ale_linters#html#tidy#GetCommand(buffer) abort
\ 'utf-8': '-utf8',
\ }, &fileencoding, '-utf8')
" On macOS, old tidy (released on 31 Oct 2006) is installed. It does not
" consider HTML5 so we should avoid it.
let l:executable = ale#Var(a:buffer, 'html_tidy_executable')
if has('mac') && l:executable is# 'tidy' && exists('*exepath')
\ && exepath(l:executable) is# '/usr/bin/tidy'
return ''
endif
return printf('%s %s %s -',
\ ale#Var(a:buffer, 'html_tidy_executable'),
\ l:executable,
\ ale#Var(a:buffer, 'html_tidy_options'),
\ l:file_encoding
\)
@ -46,7 +54,7 @@ function! ale_linters#html#tidy#Handle(buffer, lines) abort
for l:match in ale#util#GetMatches(a:lines, l:pattern)
let l:line = l:match[1] + 0
let l:col = l:match[2] + 0
let l:type = l:match[3] ==# 'Error' ? 'E' : 'W'
let l:type = l:match[3] is# 'Error' ? 'E' : 'W'
let l:text = l:match[4]
call add(l:output, {

View file

@ -0,0 +1,9 @@
" Author: Sumner Evans <sumner.evans98@gmail.com>
" Description: write-good for nroff files
call ale#linter#Define('html', {
\ 'name': 'write-good',
\ 'executable_callback': 'ale#handlers#writegood#GetExecutable',
\ 'command_callback': 'ale#handlers#writegood#GetCommand',
\ 'callback': 'ale#handlers#writegood#Handle',
\})

View file

@ -0,0 +1,87 @@
" Author: Scott Bonds <scott@ggr.com>
" Description: default Idris compiler
call ale#Set('idris_idris_executable', 'idris')
call ale#Set('idris_idris_options', '--total --warnpartial --warnreach --warnipkg')
function! ale_linters#idris#idris#GetExecutable(buffer) abort
return ale#Var(a:buffer, 'idris_idris_executable')
endfunction
function! ale_linters#idris#idris#GetCommand(buffer) abort
let l:options = ale#Var(a:buffer, 'idris_idris_options')
return ale#Escape(ale_linters#idris#idris#GetExecutable(a:buffer))
\ . (!empty(l:options) ? ' ' . l:options : '')
\ . ' --check %s'
endfunction
function! ale_linters#idris#idris#Handle(buffer, lines) abort
" This was copied almost verbatim from ale#handlers#haskell#HandleGHCFormat
" Look for lines like the following:
" foo.idr:2:6:When checking right hand side of main with expected type
" bar.idr:11:11-13:
let l:pattern = '\v^([a-zA-Z]?:?[^:]+):(\d+):(\d+)(-\d+)?:(.*)?$'
let l:output = []
let l:corrected_lines = []
for l:line in a:lines
if len(matchlist(l:line, l:pattern)) > 0
call add(l:corrected_lines, l:line)
elseif len(l:corrected_lines) > 0
if l:line is# ''
let l:corrected_lines[-1] .= ' ' " turn a blank line into a space
else
let l:corrected_lines[-1] .= l:line
endif
let l:corrected_lines[-1] = substitute(l:corrected_lines[-1], '\s\+', ' ', 'g')
endif
endfor
for l:line in l:corrected_lines
let l:match = matchlist(l:line, l:pattern)
if len(l:match) == 0
continue
endif
if !ale#path#IsBufferPath(a:buffer, l:match[1])
continue
endif
let l:errors = matchlist(l:match[5], '\v([wW]arning|[eE]rror) - ?(.*)')
if len(l:errors) > 0
let l:ghc_type = l:errors[1]
let l:text = l:errors[2]
else
let l:ghc_type = ''
let l:text = l:match[5][:0] is# ' ' ? l:match[5][1:] : l:match[5]
endif
if l:ghc_type is? 'Warning'
let l:type = 'W'
else
let l:type = 'E'
endif
call add(l:output, {
\ 'lnum': l:match[2] + 0,
\ 'col': l:match[3] + 0,
\ 'text': l:text,
\ 'type': l:type,
\})
endfor
return l:output
endfunction
call ale#linter#Define('idris', {
\ 'name': 'idris',
\ 'executable_callback': 'ale_linters#idris#idris#GetExecutable',
\ 'command_callback': 'ale_linters#idris#idris#GetCommand',
\ 'callback': 'ale_linters#idris#idris#Handle',
\})

View file

@ -2,27 +2,17 @@
" Description: checkstyle for Java files
function! ale_linters#java#checkstyle#Handle(buffer, lines) abort
let l:patterns = [
\ '\v\[(WARN|ERROR)\] .*:(\d+):(\d+): (.*)',
\ '\v\[(WARN|ERROR)\] .*:(\d+): (.*)',
\]
let l:pattern = '\v\[(WARN|ERROR)\] [a-zA-Z]?:?[^:]+:(\d+):(\d+)?:? (.*) \[(.+)\]$'
let l:output = []
for l:match in ale#util#GetMatches(a:lines, l:patterns)
let l:args = {
for l:match in ale#util#GetMatches(a:lines, l:pattern)
call add(l:output, {
\ 'type': l:match[1] is? 'WARN' ? 'W' : 'E',
\ 'lnum': l:match[2] + 0,
\ 'type': l:match[1] =~? 'WARN' ? 'W' : 'E'
\ }
let l:col = l:match[3] + 0
if l:col > 0
let l:args['col'] = l:col
let l:args['text'] = l:match[4]
else
let l:args['text'] = l:match[3]
endif
call add(l:output, l:args)
\ 'col': l:match[3] + 0,
\ 'text': l:match[4],
\ 'code': l:match[5],
\})
endfor
return l:output

View file

@ -14,6 +14,11 @@ function! ale_linters#java#javac#GetImportPaths(buffer) abort
\ . 'mvn dependency:build-classpath'
endif
let l:classpath_command = ale#gradle#BuildClasspathCommand(a:buffer)
if !empty(l:classpath_command)
return l:classpath_command
endif
return ''
endfunction
@ -36,15 +41,42 @@ function! ale_linters#java#javac#GetCommand(buffer, import_paths) abort
" Find the src directory, for files in this project.
let l:src_dir = ale#path#FindNearestDirectory(a:buffer, 'src/main/java')
let l:sp_dirs = []
if !empty(l:src_dir)
let l:sp_option = '-sourcepath ' . ale#Escape(l:src_dir)
call add(l:sp_dirs, l:src_dir)
" Automatically include the jaxb directory too, if it's there.
let l:jaxb_dir = fnamemodify(l:src_dir, ':h:h')
\ . (has('win32') ? '\jaxb\' : '/jaxb/')
if isdirectory(l:jaxb_dir)
call add(l:sp_dirs, l:jaxb_dir)
endif
" Automatically include the test directory, but only for test code.
if expand('#' . a:buffer . ':p') =~? '\vsrc[/\\]test[/\\]java'
let l:test_dir = fnamemodify(l:src_dir, ':h:h:h')
\ . (has('win32') ? '\test\java\' : '/test/java/')
if isdirectory(l:test_dir)
call add(l:sp_dirs, l:test_dir)
endif
endif
endif
if !empty(l:sp_dirs)
let l:sp_option = '-sourcepath '
\ . ale#Escape(join(l:sp_dirs, s:classpath_sep))
endif
" Create .class files in a temporary directory, which we will delete later.
let l:class_file_directory = ale#engine#CreateDirectory(a:buffer)
return 'javac -Xlint'
" Always run javac from the directory the file is in, so we can resolve
" relative paths correctly.
return ale#path#BufferCdString(a:buffer)
\ . 'javac -Xlint'
\ . ' ' . l:cp_option
\ . ' ' . l:sp_option
\ . ' -d ' . ale#Escape(l:class_file_directory)
@ -58,24 +90,26 @@ function! ale_linters#java#javac#Handle(buffer, lines) abort
" Main.java:13: warning: [deprecation] donaught() in Testclass has been deprecated
" Main.java:16: error: ';' expected
let l:pattern = '\v^.*:(\d+): (.+):(.+)$'
let l:directory = expand('#' . a:buffer . ':p:h')
let l:pattern = '\v^(.*):(\d+): (.+):(.+)$'
let l:col_pattern = '\v^(\s*\^)$'
let l:symbol_pattern = '\v^ +symbol: *(class|method) +([^ ]+)'
let l:output = []
for l:match in ale#util#GetMatches(a:lines, [l:pattern, l:col_pattern, l:symbol_pattern])
if empty(l:match[2]) && empty(l:match[3])
let l:output[-1].col = len(l:match[1])
let l:output[-1].col = len(l:match[1])
elseif empty(l:match[3])
" Add symbols to 'cannot find symbol' errors.
if l:output[-1].text ==# 'error: cannot find symbol'
if l:output[-1].text is# 'error: cannot find symbol'
let l:output[-1].text .= ': ' . l:match[2]
endif
else
call add(l:output, {
\ 'lnum': l:match[1] + 0,
\ 'text': l:match[2] . ':' . l:match[3],
\ 'type': l:match[2] ==# 'error' ? 'E' : 'W',
\ 'filename': ale#path#GetAbsPath(l:directory, l:match[1]),
\ 'lnum': l:match[2] + 0,
\ 'text': l:match[3] . ':' . l:match[4],
\ 'type': l:match[3] is# 'error' ? 'E' : 'W',
\})
endif
endfor

View file

@ -3,6 +3,7 @@
call ale#linter#Define('javascript', {
\ 'name': 'eslint',
\ 'output_stream': 'both',
\ 'executable_callback': 'ale#handlers#eslint#GetExecutable',
\ 'command_callback': 'ale#handlers#eslint#GetCommand',
\ 'callback': 'ale#handlers#eslint#Handle',

131
ale_linters/javascript/flow.vim Normal file → Executable file
View file

@ -1,16 +1,12 @@
" Author: Zach Perrault -- @zperrault
" Author: Florian Beeres <yuuki@protonmail.com>
" Description: FlowType checking for JavaScript files
call ale#Set('javascript_flow_executable', 'flow')
call ale#Set('javascript_flow_use_home_config', 0)
call ale#Set('javascript_flow_use_global', 0)
function! ale_linters#javascript#flow#GetExecutable(buffer) abort
return ale#node#FindExecutable(a:buffer, 'javascript_flow', [
\ 'node_modules/.bin/flow',
\])
endfunction
function! ale_linters#javascript#flow#GetCommand(buffer) abort
let l:flow_config = ale#path#FindNearestFile(a:buffer, '.flowconfig')
if empty(l:flow_config)
@ -18,14 +14,106 @@ function! ale_linters#javascript#flow#GetCommand(buffer) abort
return ''
endif
return ale#Escape(ale_linters#javascript#flow#GetExecutable(a:buffer))
\ . ' check-contents --respect-pragma --json --from ale %s'
" Don't run Flow with a configuration file from the home directory by
" default, which can eat all of your RAM.
if fnamemodify(l:flow_config, ':h') is? $HOME
\&& !ale#Var(a:buffer, 'javascript_flow_use_home_config')
return ''
endif
return ale#node#FindExecutable(a:buffer, 'javascript_flow', [
\ 'node_modules/.bin/flow',
\])
endfunction
function! ale_linters#javascript#flow#VersionCheck(buffer) abort
let l:executable = ale_linters#javascript#flow#GetExecutable(a:buffer)
if empty(l:executable)
return ''
endif
return ale#Escape(l:executable) . ' --version'
endfunction
function! ale_linters#javascript#flow#GetCommand(buffer, version_lines) abort
let l:executable = ale_linters#javascript#flow#GetExecutable(a:buffer)
if empty(l:executable)
return ''
endif
let l:version = ale#semver#GetVersion(l:executable, a:version_lines)
" If we can parse the version number, then only use --respect-pragma
" if the version is >= 0.36.0, which added the argument.
let l:use_respect_pragma = empty(l:version)
\ || ale#semver#GTE(l:version, [0, 36])
return ale#Escape(l:executable)
\ . ' check-contents'
\ . (l:use_respect_pragma ? ' --respect-pragma': '')
\ . ' --json --from ale %s'
endfunction
" Filter lines of flow output until we find the first line where the JSON
" output starts.
function! s:GetJSONLines(lines) abort
let l:start_index = 0
for l:line in a:lines
if l:line[:0] is# '{'
break
endif
let l:start_index += 1
endfor
return a:lines[l:start_index :]
endfunction
function! s:ExtraErrorMsg(current, new) abort
let l:newMsg = ''
if a:current is# ''
" extra messages appear to already have a :
let l:newMsg = a:new
else
let l:newMsg = a:current . ' ' . a:new
endif
return l:newMsg
endfunction
function! s:GetDetails(error) abort
let l:detail = ''
for l:extra_error in a:error.extra
if has_key(l:extra_error, 'message')
for l:extra_message in l:extra_error.message
let l:detail = s:ExtraErrorMsg(l:detail, l:extra_message.descr)
endfor
endif
if has_key(l:extra_error, 'children')
for l:child in l:extra_error.children
for l:child_message in l:child.message
let l:detail = l:detail . ' ' . l:child_message.descr
endfor
endfor
endif
endfor
return l:detail
endfunction
function! ale_linters#javascript#flow#Handle(buffer, lines) abort
let l:str = join(a:lines, '')
let l:str = join(s:GetJSONLines(a:lines), '')
if l:str ==# ''
if empty(l:str)
return []
endif
@ -43,13 +131,13 @@ function! ale_linters#javascript#flow#Handle(buffer, lines) abort
" In certain cases, `l:message.loc.source` points to a different path
" than the buffer one, thus we skip this loc information too.
if has_key(l:message, 'loc')
\&& l:line ==# 0
\&& l:line is# 0
\&& ale#path#IsBufferPath(a:buffer, l:message.loc.source)
let l:line = l:message.loc.start.line + 0
let l:col = l:message.loc.start.column + 0
endif
if l:text ==# ''
if l:text is# ''
let l:text = l:message.descr . ':'
else
let l:text = l:text . ' ' . l:message.descr
@ -60,12 +148,19 @@ function! ale_linters#javascript#flow#Handle(buffer, lines) abort
let l:text = l:text . ' See also: ' . l:error.operation.descr
endif
call add(l:output, {
let l:errorToAdd = {
\ 'lnum': l:line,
\ 'col': l:col,
\ 'text': l:text,
\ 'type': l:error.level ==# 'error' ? 'E' : 'W',
\})
\ 'type': has_key(l:error, 'level') && l:error.level is# 'error' ? 'E' : 'W',
\}
if has_key(l:error, 'extra')
let l:errorToAdd.detail = s:GetDetails(l:error)
endif
call add(l:output, l:errorToAdd)
endfor
return l:output
@ -74,6 +169,10 @@ endfunction
call ale#linter#Define('javascript', {
\ 'name': 'flow',
\ 'executable_callback': 'ale_linters#javascript#flow#GetExecutable',
\ 'command_callback': 'ale_linters#javascript#flow#GetCommand',
\ 'command_chain': [
\ {'callback': 'ale_linters#javascript#flow#VersionCheck'},
\ {'callback': 'ale_linters#javascript#flow#GetCommand'},
\ ],
\ 'callback': 'ale_linters#javascript#flow#Handle',
\ 'add_newline': !has('win32'),
\})

View file

@ -1,9 +1,67 @@
" Author: Chris Kyrouac - https://github.com/fijshion
" Description: jscs for JavaScript files
call ale#Set('javascript_jscs_executable', 'jscs')
call ale#Set('javascript_jscs_use_global', 0)
function! ale_linters#javascript#jscs#GetExecutable(buffer) abort
return ale#node#FindExecutable(a:buffer, 'javascript_jscs', [
\ 'node_modules/.bin/jscs',
\])
endfunction
function! ale_linters#javascript#jscs#GetCommand(buffer) abort
" Search for a local JShint config locaation, and default to a global one.
let l:jscs_config = ale#path#ResolveLocalPath(
\ a:buffer,
\ '.jscsrc',
\ get(g:, 'ale_jscs_config_loc', '')
\)
let l:command = ale#Escape(ale_linters#javascript#jscs#GetExecutable(a:buffer))
let l:command .= ' --reporter inline --no-colors'
if !empty(l:jscs_config)
let l:command .= ' --config ' . ale#Escape(l:jscs_config)
endif
let l:command .= ' -'
return l:command
endfunction
function! ale_linters#javascript#jscs#Handle(buffer, lines) abort
" Matches patterns looking like the following
"
" foobar.js: line 2, col 1, Expected indentation of 1 characters
"
let l:pattern = '\v^.*:\s+line (\d+),\s+col\s+(\d+),\s+(.*)$'
let l:output = []
for l:match in ale#util#GetMatches(a:lines, l:pattern)
let l:obj = {
\ 'lnum': l:match[1] + 0,
\ 'col': l:match[2] + 0,
\ 'text': l:match[3]
\}
let l:code_match = matchlist(l:match[3], '\v([^ :]+): (.+)$')
if !empty(l:code_match)
let l:obj.code = l:code_match[1]
let l:obj.text = l:code_match[2]
endif
call add(l:output, l:obj)
endfor
return l:output
endfunction
call ale#linter#Define('javascript', {
\ 'name': 'jscs',
\ 'executable': 'jscs',
\ 'command': 'jscs -r unix -n -',
\ 'callback': 'ale#handlers#unix#HandleAsError',
\ 'executable_callback': 'ale_linters#javascript#jscs#GetExecutable',
\ 'command_callback': 'ale_linters#javascript#jscs#GetCommand',
\ 'callback': 'ale_linters#javascript#jscs#Handle',
\})

View file

@ -7,13 +7,17 @@ call ale#Set('javascript_standard_options', '')
function! ale_linters#javascript#standard#GetExecutable(buffer) abort
return ale#node#FindExecutable(a:buffer, 'javascript_standard', [
\ 'node_modules/standard/bin/cmd.js',
\ 'node_modules/.bin/standard',
\])
endfunction
function! ale_linters#javascript#standard#GetCommand(buffer) abort
return ale#Escape(ale_linters#javascript#standard#GetExecutable(a:buffer))
\ . ' ' . ale#Var(a:buffer, 'javascript_standard_options')
let l:executable = ale_linters#javascript#standard#GetExecutable(a:buffer)
let l:options = ale#Var(a:buffer, 'javascript_standard_options')
return ale#node#Executable(a:buffer, l:executable)
\ . (!empty(l:options) ? ' ' . l:options : '')
\ . ' --stdin %s'
endfunction

View file

@ -12,17 +12,21 @@ let g:ale_kotlin_kotlinc_module_filename = get(g:, 'ale_kotlin_kotlinc_module_fi
let s:classpath_sep = has('unix') ? ':' : ';'
function! ale_linters#kotlin#kotlinc#GetImportPaths(buffer) abort
" exec maven only if classpath is not set
if ale#Var(a:buffer, 'kotlin_kotlinc_classpath') !=# ''
" exec maven/gradle only if classpath is not set
if ale#Var(a:buffer, 'kotlin_kotlinc_classpath') isnot# ''
return ''
else
let l:pom_path = ale#path#FindNearestFile(a:buffer, 'pom.xml')
if !empty(l:pom_path) && executable('mvn')
return ale#path#CdString(fnamemodify(l:pom_path, ':h'))
\ . 'mvn dependency:build-classpath'
endif
let l:classpath_command = ale#gradle#BuildClasspathCommand(a:buffer)
if !empty(l:classpath_command)
return l:classpath_command
endif
return ''
endif
endfunction
@ -66,19 +70,27 @@ function! ale_linters#kotlin#kotlinc#GetCommand(buffer, import_paths) abort
endif
" We only get here if not using module or the module file not readable
if ale#Var(a:buffer, 'kotlin_kotlinc_classpath') !=# ''
if ale#Var(a:buffer, 'kotlin_kotlinc_classpath') isnot# ''
let l:kotlinc_opts .= ' -cp ' . ale#Var(a:buffer, 'kotlin_kotlinc_classpath')
else
" get classpath from maven
" get classpath from maven/gradle
let l:kotlinc_opts .= s:BuildClassPathOption(a:buffer, a:import_paths)
endif
let l:fname = ''
if ale#Var(a:buffer, 'kotlin_kotlinc_sourcepath') !=# ''
if ale#Var(a:buffer, 'kotlin_kotlinc_sourcepath') isnot# ''
let l:fname .= expand(ale#Var(a:buffer, 'kotlin_kotlinc_sourcepath'), 1) . ' '
else
" Find the src directory for files in this project.
let l:src_dir = ale#path#FindNearestDirectory(a:buffer, 'src/main/java')
let l:project_root = ale#gradle#FindProjectRoot(a:buffer)
if !empty(l:project_root)
let l:src_dir = l:project_root
else
let l:src_dir = ale#path#FindNearestDirectory(a:buffer, 'src/main/java')
\ . ' ' . ale#path#FindNearestDirectory(a:buffer, 'src/main/kotlin')
endif
let l:fname .= expand(l:src_dir, 1) . ' '
endif
let l:fname .= ale#Escape(expand('#' . a:buffer . ':p'))
@ -109,10 +121,10 @@ function! ale_linters#kotlin#kotlinc#Handle(buffer, lines) abort
let l:curbuf_abspath = expand('#' . a:buffer . ':p')
" Skip if file is not loaded
if l:buf_abspath !=# l:curbuf_abspath
if l:buf_abspath isnot# l:curbuf_abspath
continue
endif
let l:type_marker_str = l:type ==# 'warning' ? 'W' : 'E'
let l:type_marker_str = l:type is# 'warning' ? 'W' : 'E'
call add(l:output, {
\ 'lnum': l:line,
@ -133,7 +145,7 @@ function! ale_linters#kotlin#kotlinc#Handle(buffer, lines) abort
let l:type = l:match[1]
let l:text = l:match[2]
let l:type_marker_str = l:type ==# 'warning' || l:type ==# 'info' ? 'W' : 'E'
let l:type_marker_str = l:type is# 'warning' || l:type is# 'info' ? 'W' : 'E'
call add(l:output, {
\ 'lnum': 1,
@ -155,3 +167,4 @@ call ale#linter#Define('kotlin', {
\ 'callback': 'ale_linters#kotlin#kotlinc#Handle',
\ 'lint_file': 1,
\})

56
ale_linters/less/lessc.vim Executable file
View file

@ -0,0 +1,56 @@
" Author: zanona <https://github.com/zanona>, w0rp <devw0rp@gmail.com>
" Description: This file adds support for checking Less code with lessc.
call ale#Set('less_lessc_executable', 'lessc')
call ale#Set('less_lessc_options', '')
call ale#Set('less_lessc_use_global', 0)
function! ale_linters#less#lessc#GetExecutable(buffer) abort
return ale#node#FindExecutable(a:buffer, 'less_lessc', [
\ 'node_modules/.bin/lessc',
\])
endfunction
function! ale_linters#less#lessc#GetCommand(buffer) abort
let l:executable = ale_linters#less#lessc#GetExecutable(a:buffer)
let l:dir = expand('#' . a:buffer . ':p:h')
let l:options = ale#Var(a:buffer, 'less_lessc_options')
return ale#Escape(l:executable)
\ . ' --no-color --lint'
\ . ' --include-path=' . ale#Escape(l:dir)
\ . (!empty(l:options) ? ' ' . l:options : '')
\ . ' -'
endfunction
function! ale_linters#less#lessc#Handle(buffer, lines) abort
let l:dir = expand('#' . a:buffer . ':p:h')
" Matches patterns like the following:
let l:pattern = '^\(\w\+\): \(.\{-}\) in \(.\{-}\) on line \(\d\+\), column \(\d\+\):$'
let l:output = []
for l:match in ale#util#GetMatches(a:lines, l:pattern)
let l:item = {
\ 'lnum': l:match[4] + 0,
\ 'col': l:match[5] + 0,
\ 'text': l:match[2],
\ 'type': 'E',
\}
if l:match[3] isnot# '-'
let l:item.filename = ale#path#GetAbsPath(l:dir, l:match[3])
endif
call add(l:output, l:item)
endfor
return l:output
endfunction
call ale#linter#Define('less', {
\ 'name': 'lessc',
\ 'executable_callback': 'ale_linters#less#lessc#GetExecutable',
\ 'command_callback': 'ale_linters#less#lessc#GetCommand',
\ 'callback': 'ale_linters#less#lessc#Handle',
\ 'output_stream': 'stderr',
\})

View file

@ -0,0 +1,27 @@
" Author: diartyz <diartyz@gmail.com>, w0rp <devw0rp@gmail.com>
call ale#Set('less_stylelint_executable', 'stylelint')
call ale#Set('less_stylelint_options', '')
call ale#Set('less_stylelint_use_global', 0)
function! ale_linters#less#stylelint#GetExecutable(buffer) abort
return ale#node#FindExecutable(a:buffer, 'less_stylelint', [
\ 'node_modules/.bin/stylelint',
\])
endfunction
function! ale_linters#less#stylelint#GetCommand(buffer) abort
let l:executable = ale_linters#less#stylelint#GetExecutable(a:buffer)
let l:options = ale#Var(a:buffer, 'less_stylelint_options')
return ale#Escape(l:executable)
\ . (!empty(l:options) ? ' ' . l:options : '')
\ . ' --stdin-filename %s'
endfunction
call ale#linter#Define('less', {
\ 'name': 'stylelint',
\ 'executable_callback': 'ale_linters#less#stylelint#GetExecutable',
\ 'command_callback': 'ale_linters#less#stylelint#GetCommand',
\ 'callback': 'ale#handlers#css#HandleStyleLintFormat',
\})

35
ale_linters/llvm/llc.vim Normal file
View file

@ -0,0 +1,35 @@
" Author: rhysd <https://rhysd.github.io>
" Description: Support for checking LLVM IR with llc
call ale#Set('llvm_llc_executable', 'llc')
function! ale_linters#llvm#llc#GetExecutable(buffer) abort
return ale#Var(a:buffer, 'llvm_llc_executable')
endfunction
function! ale_linters#llvm#llc#GetCommand(buffer) abort
return ale#Escape(ale_linters#llvm#llc#GetExecutable(a:buffer))
\ . ' -filetype=null -o='
\ . ale#Escape(g:ale#util#nul_file)
endfunction
function! ale_linters#llvm#llc#HandleErrors(buffer, lines) abort
" Handle '{path}: {file}:{line}:{col}: error: {message}' format
let l:pattern = '\v^[a-zA-Z]?:?[^:]+: [^:]+:(\d+):(\d+): (.+)$'
let l:matches = ale#util#GetMatches(a:lines, l:pattern)
return map(l:matches, "{
\ 'lnum': str2nr(v:val[1]),
\ 'col': str2nr(v:val[2]),
\ 'text': v:val[3],
\ 'type': 'E',
\}")
endfunction
call ale#linter#Define('llvm', {
\ 'name': 'llc',
\ 'executable_callback': 'ale_linters#llvm#llc#GetExecutable',
\ 'output_stream': 'stderr',
\ 'command_callback': 'ale_linters#llvm#llc#GetCommand',
\ 'callback': 'ale_linters#llvm#llc#HandleErrors',
\})

40
ale_linters/lua/luac.vim Normal file
View file

@ -0,0 +1,40 @@
" Author: Jon Xie https://github.com/xiejiangzhi
" Description: luac linter for lua files
call ale#Set('lua_luac_executable', 'luac')
function! ale_linters#lua#luac#GetExecutable(buffer) abort
return ale#Var(a:buffer, 'lua_luac_executable')
endfunction
function! ale_linters#lua#luac#GetCommand(buffer) abort
let l:executable = ale_linters#lua#luac#GetExecutable(a:buffer)
return ale#Escape(l:executable) . ' -p - '
endfunction
function! ale_linters#lua#luac#Handle(buffer, lines) abort
" Matches patterns line the following:
"
" luac: stdin:5: '=' expected near ')'
" luac: stdin:8: ')' expected (to close '(' at line 6) near '123'
let l:pattern = '\v^.*:(\d+): (.+)$'
let l:output = []
for l:match in ale#util#GetMatches(a:lines, l:pattern)
call add(l:output, {
\ 'lnum': l:match[1] + 0,
\ 'type': 'E',
\ 'text': l:match[2],
\})
endfor
return l:output
endfunction
call ale#linter#Define('lua', {
\ 'name': 'luac',
\ 'executable_callback': 'ale_linters#lua#luac#GetExecutable',
\ 'command_callback': 'ale_linters#lua#luac#GetCommand',
\ 'output_stream': 'stderr',
\ 'callback': 'ale_linters#lua#luac#Handle',
\})

View file

@ -22,15 +22,22 @@ function! ale_linters#lua#luacheck#Handle(buffer, lines) abort
"
" artal.lua:159:17: (W111) shadowing definition of loop variable 'i' on line 106
" artal.lua:182:7: (W213) unused loop variable 'i'
let l:pattern = '^.*:\(\d\+\):\(\d\+\): (\([WE]\)\d\+) \(.\+\)$'
let l:pattern = '^.*:\(\d\+\):\(\d\+\): (\([WE]\)\(\d\+\)) \(.\+\)$'
let l:output = []
for l:match in ale#util#GetMatches(a:lines, l:pattern)
if !ale#Var(a:buffer, 'warn_about_trailing_whitespace')
\ && l:match[3] is# 'W'
\ && index(range(611, 614), str2nr(l:match[4])) >= 0
continue
endif
call add(l:output, {
\ 'lnum': l:match[1] + 0,
\ 'col': l:match[2] + 0,
\ 'text': l:match[4],
\ 'type': l:match[3],
\ 'code': l:match[3] . l:match[4],
\ 'text': l:match[5],
\})
endfor

11
ale_linters/mail/alex.vim Normal file
View file

@ -0,0 +1,11 @@
" Author: Johannes Wienke <languitar@semipol.de>
" Description: alex for HTML files
call ale#linter#Define('mail', {
\ 'name': 'alex',
\ 'executable': 'alex',
\ 'command': 'alex %s -t',
\ 'output_stream': 'stderr',
\ 'callback': 'ale#handlers#alex#Handle',
\ 'lint_file': 1,
\})

View file

@ -0,0 +1,9 @@
" Author: Daniel M. Capella https://github.com/polyzen
" Description: proselint for mail files
call ale#linter#Define('mail', {
\ 'name': 'proselint',
\ 'executable': 'proselint',
\ 'command': 'proselint %t',
\ 'callback': 'ale#handlers#unix#HandleAsWarning',
\})

View file

@ -0,0 +1,9 @@
" Author: chew-z https://github.com/chew-z
" Description: vale for Markdown files
call ale#linter#Define('mail', {
\ 'name': 'vale',
\ 'executable': 'vale',
\ 'command': 'vale --output=JSON %t',
\ 'callback': 'ale#handlers#vale#Handle',
\})

View file

@ -0,0 +1,24 @@
" Author: aurieh - https://github.com/aurieh
function! ale_linters#make#checkmake#Handle(buffer, lines) abort
let l:pattern = '\v^(\d+):(.+):(.+)$'
let l:output = []
for l:match in ale#util#GetMatches(a:lines, l:pattern)
call add(l:output, {
\ 'bufnr': a:buffer,
\ 'lnum': l:match[1] + 0,
\ 'type': 'E',
\ 'code': l:match[2],
\ 'text': l:match[3],
\})
endfor
return l:output
endfunction
call ale#linter#Define('make', {
\ 'name': 'checkmake',
\ 'executable': 'checkmake',
\ 'command': 'checkmake %s --format="{{.LineNumber}}:{{.Rule}}:{{.Violation}}"',
\ 'callback': 'ale_linters#make#checkmake#Handle',
\})

View file

@ -0,0 +1,11 @@
" Author: Johannes Wienke <languitar@semipol.de>
" Description: alex for markdown files
call ale#linter#Define('markdown', {
\ 'name': 'alex',
\ 'executable': 'alex',
\ 'command': 'alex %s -t',
\ 'output_stream': 'stderr',
\ 'callback': 'ale#handlers#alex#Handle',
\ 'lint_file': 1,
\})

View file

@ -1,5 +1,20 @@
" Author: Steve Dignam <steve@dignam.xyz>
" Description: Support for mdl, a markdown linter
" Author: Steve Dignam <steve@dignam.xyz>, Josh Leeb-du Toit <joshleeb.com>
" Description: Support for mdl, a markdown linter.
call ale#Set('markdown_mdl_executable', 'mdl')
call ale#Set('markdown_mdl_options', '')
function! ale_linters#markdown#mdl#GetExecutable(buffer) abort
return ale#Var(a:buffer, 'markdown_mdl_executable')
endfunction
function! ale_linters#markdown#mdl#GetCommand(buffer) abort
let l:executable = ale_linters#markdown#mdl#GetExecutable(a:buffer)
let l:options = ale#Var(a:buffer, 'markdown_mdl_options')
return ale#Escape(l:executable)
\ . (!empty(l:options) ? ' ' . l:options : '')
endfunction
function! ale_linters#markdown#mdl#Handle(buffer, lines) abort
" matches: '(stdin):173: MD004 Unordered list style'
@ -19,7 +34,7 @@ endfunction
call ale#linter#Define('markdown', {
\ 'name': 'mdl',
\ 'executable': 'mdl',
\ 'command': 'mdl',
\ 'executable_callback': 'ale_linters#markdown#mdl#GetExecutable',
\ 'command_callback': 'ale_linters#markdown#mdl#GetCommand',
\ 'callback': 'ale_linters#markdown#mdl#Handle'
\})

View file

@ -0,0 +1,9 @@
" Author: rhysd https://rhysd.github.io
" Description: Redpen, a proofreading tool (http://redpen.cc)
call ale#linter#Define('markdown', {
\ 'name': 'redpen',
\ 'executable': 'redpen',
\ 'command': 'redpen -f markdown -r json %t',
\ 'callback': 'ale#handlers#redpen#HandleRedpenOutput',
\})

View file

@ -0,0 +1,28 @@
" Author rhysd https://rhysd.github.io/
" Description: remark-lint for Markdown files
function! ale_linters#markdown#remark_lint#Handle(buffer, lines) abort
" matches: ' 1:4 warning Incorrect list-item indent: add 1 space list-item-indent remark-lint'
let l:pattern = '^ \+\(\d\+\):\(\d\+\) \(warning\|error\) \(.\+\)$'
let l:output = []
for l:match in ale#util#GetMatches(a:lines, l:pattern)
call add(l:output, {
\ 'lnum': l:match[1] + 0,
\ 'col': l:match[2] + 0,
\ 'type': l:match[3] is# 'error' ? 'E' : 'W',
\ 'text': l:match[4],
\})
endfor
return l:output
endfunction
call ale#linter#Define('markdown', {
\ 'name': 'remark-lint',
\ 'executable': 'remark',
\ 'command': 'remark --no-stdout --no-color %s',
\ 'callback': 'ale_linters#markdown#remark_lint#Handle',
\ 'lint_file': 1,
\ 'output_stream': 'stderr',
\})

Some files were not shown because too many files have changed in this diff Show more