Compare commits

...

785 Commits

Author SHA1 Message Date
w0rp
2ee3dcdd62 Fix #1631 - Disable balloon support for terminals by default 2018-07-20 16:11:38 +01:00
w0rp
465db4daa1 Only temporarily replace TMPDIR if it's defined to be an empty string 2018-07-16 08:50:34 +01:00
w0rp
fb8c090971 unlet $TMPDIR too, where we can 2018-07-15 23:05:04 +01:00
w0rp
d29e32d42d Fix #1687 - Parse highlights when verbose > 0 2018-07-15 21:03:49 +01:00
w0rp
ab2b181012 Handle linter callback functions being unknown or deleted 2018-07-13 09:47:40 +01:00
w0rp
033a6c1178 Merge pull request #1720 from MTDL9/fix-error-response-string-data
Fix E712 error in ale#lsp#response#GetErrorMessage when receiving string primitives in the error.data field
2018-07-13 09:38:19 +01:00
w0rp
7d66293bbc Fix #1716 - Replace tempdir() with a wrapper to preserve TMPDIR 2018-07-12 13:06:11 +01:00
w0rp
1fc3a1563b Update the sandbox test now that functions can be defined in the sandbox 2018-07-11 13:38:22 +01:00
w0rp
a31f54d08f Fix how Docker images are pulled for developers 2018-07-04 09:36:55 +01:00
w0rp
db85b931ec Remove deprecated code for the 2.0 release 2018-07-04 08:36:34 +01:00
w0rp
602e7fa00f #1524 Avoid loading cursor code until engine code has been loaded 2018-07-03 21:14:00 +01:00
w0rp
e10e0934ab Automatically retry running Vader tests so Travis CI will fail less 2018-07-03 20:50:56 +01:00
w0rp
1d8b326f62 Revert "Add a failing test to test re-running tests in AppVeyor"
This reverts commit 1565859eae.
2018-07-03 19:59:40 +01:00
w0rp
1565859eae Add a failing test to test re-running tests in AppVeyor 2018-07-03 19:56:37 +01:00
w0rp
7ce919e690 Re-run Windows tests when they fail at least once 2018-07-03 19:53:40 +01:00
w0rp
25a03dcea1 Use the latest Docker image for tests 2018-07-03 19:21:58 +01:00
w0rp
73d3030cf1 Merge pull request #1691 from dsifford/dsifford-python-pyre
add pyre lsp linter to python linters
2018-07-03 08:31:01 +01:00
w0rp
4987946175 Enable verbose test output, to figure out why NeoVim 0.3 randomly fails 2018-07-03 01:52:18 +01:00
w0rp
e46474ac0a Close #830 - Implement LSP connections via TCP sockets 2018-07-03 01:41:46 +01:00
w0rp
5aba55bb86 #830 Make the LSP socket code so far use the new socket API 2018-07-03 00:30:26 +01:00
w0rp
01c68fedd6 #830 Implement a socket wrapper API for use with LSP connections 2018-07-02 23:49:47 +01:00
Derek P Sifford
20ed48352f add dummy pyre binary and executable 2018-07-02 18:49:12 -04:00
Derek P Sifford
09a53fb363 add command_callback test 2018-07-02 18:23:42 -04:00
w0rp
b637b35ea8 Delete misplaced issue template files 2018-07-01 20:51:34 +01:00
w0rp
ce7d648c7c Update issue templates 2018-07-01 20:50:50 +01:00
w0rp
8ac43b1936 Update issue templates 2018-07-01 20:50:29 +01:00
w0rp
1c5c4a4c8e Split the issue template into multiple files 2018-07-01 20:41:52 +01:00
w0rp
059c5cfca4 Fix a false positive linting issue 2018-07-01 20:37:32 +01:00
Derek P Sifford
23394bf4a5 add pyre to table in doc/ale.txt 2018-07-01 15:14:13 -04:00
Derek P Sifford
ea6d720fec add pyre lsp linter to python linters 2018-07-01 14:59:49 -04:00
w0rp
2a78401066 Close #1685 - Move developer documentation to a help file 2018-07-01 19:56:24 +01:00
w0rp
d456ac19ca Fix a typo in the documentation 2018-07-01 19:56:24 +01:00
Govind KP
9d98e6db0c Added dartfmt fixer (#1683)
* Added dartfmt to Fixers
* Added dartfmt specific documentation
2018-07-01 13:55:41 +01:00
w0rp
06f61eeeb8 Respect ale_warn_about_trailing_whitespace for yamllint 2018-07-01 13:49:40 +01:00
w0rp
e5e14de9ae Capture error codes for yamlllint 2018-07-01 13:15:12 +01:00
w0rp
fee5107d43 Add tests for the yamllint handler 2018-07-01 12:50:46 +01:00
w0rp
cd8dd099d8 Switch back to running everything in one build, which is twice as fast 2018-07-01 12:22:29 +01:00
w0rp
857a07f36a Try running tests in parallel again 2018-07-01 12:18:42 +01:00
w0rp
26aa0cf358 Try splitting up the build into separate jobs 2018-07-01 12:07:54 +01:00
w0rp
3c5b6d1825 Run Vint and custom checks together with just --linters-only 2018-07-01 12:06:59 +01:00
w0rp
ccfed164bc Revert "Try adding Docker caching for Travis CI"
This reverts commit 1990efdba7.
2018-07-01 11:55:07 +01:00
w0rp
1487c8daa0 Make highlight tests pass more in Neovim 0.3 2018-07-01 11:52:02 +01:00
w0rp
1990efdba7 Try adding Docker caching for Travis CI 2018-07-01 11:38:07 +01:00
w0rp
b88bf6ecba Fix #1412 - Use --stdin-filename for newer reek versions 2018-07-01 10:21:59 +01:00
w0rp
ee81351a63 Move design goals to online documentation 2018-06-28 16:20:30 +01:00
w0rp
0b7a29d73b Disable non-Vader tests when targeting Vader tests 2018-06-28 14:00:12 +01:00
w0rp
fc041ae090 Make a test which can fail randomly synchronous instead 2018-06-28 13:59:52 +01:00
w0rp
d581fca35e Get tests running and passing with NeoVim 0.2 and 0.3 2018-06-28 13:53:49 +01:00
w0rp
8b407ed0e7 Try NeoVim 0.2.1, as 0.2.0 is way too slow 2018-06-28 12:07:22 +01:00
w0rp
51a14a4ba8 Update Dockerfile to test NeoVim 0.2 and 0.3, with a newer Vint version 2018-06-28 11:29:20 +01:00
Dan Aloni
d9e139ae23 Rust Cargo linter: Improve workspace support (#1679)
* Rust Cargo linter: Improve workspace support

When using Cargo workspaces [1], there is a 'Cargo.toml' directory in a
top level directory, listing all the crates in the project. If we are
currently editing one of the crates, 'cargo build' should execute in
that directory for that crate's separate `Cargo.toml`, otherwise Cargo
may spend more time possibly rebuilding the entire workspace, and maybe
failing on one of the other crates, instead of succeeding on the current.

[1] https://doc.rust-lang.org/book/second-edition/ch14-03-cargo-workspaces.html
2018-06-27 22:36:02 +01:00
w0rp
980aa35566 Merge pull request #1675 from nicopauss/master
Improve pyrex cython linter.
2018-06-27 21:39:36 +01:00
w0rp
b047271051 Merge pull request #1682 from fennerm/fix_prospector_e474
Fix prospector empty string error
2018-06-27 21:34:28 +01:00
Fenner Macrae
1ca2334846 Fix prospector empty string error
Prospector linter is raising error when no warnings are present in file
(#1680). Copied fix from #779.
2018-06-26 16:58:34 -07:00
Nicolas Pauss
4d935ff32a Add test_pyrex_cython_command_callback.vader
Add common callback tests to check if executable and options are well
configurable.
2018-06-25 22:14:43 +02:00
w0rp
66820ed452 Merge pull request #1641 from docwhat/pr/add-bash-lsp
sh: add bash-language-server linter
2018-06-25 17:03:15 +01:00
Nicolas Pauss
d05936a489 Handle cython warning with custom handle and remove '--warning-errors'.
Add a custom handler to support cython warning format.
Remove '--warning-errors' to keep previous behaviour.
2018-06-25 17:33:53 +02:00
Christian Höltje
49d995a521 sh: add bash-language-server linter 2018-06-25 11:21:53 -04:00
Nicolas Pauss
bedd30ee11 Improve pyrex cython linter.
Like many other linters, use variables for the executable and options
used by the linter.
By default, the linter now report every warnings as errors with
`--warning-errors`.
Also add include directory and set working directory to file directory.
2018-06-25 10:28:59 +02:00
w0rp
620951b6d3 Close #1453 #1172 - Add ale_linters_ignore for ignoring linter results 2018-06-24 21:16:45 +01:00
w0rp
755f1a4ccf Merge pull request #1673 from meain/fixer-tidy
Add fixer tidy for HTML
2018-06-23 22:51:30 +01:00
Abin Simon
17c1aefb5b Add fixer tidy for HTML
Add tests for tidy HTML fixer
2018-06-23 22:59:13 +05:30
w0rp
0f377251dd #1674 - Alias verilog_systemverilog to verilog by default 2018-06-23 18:20:39 +01:00
w0rp
935740cf93 Close #1590 - Automatically close previews for hover 2018-06-21 23:02:36 +01:00
w0rp
8bca073763 Fix #1661 - Do not use :edit when jumping inside of a file 2018-06-21 21:20:54 +01:00
w0rp
22533f2c1f Close #1522 - Show suggested fixers in :ALEInfo 2018-06-21 02:26:41 +01:00
w0rp
69eb2fe86a Close #1417 - Support wildcard filetypes for fixers 2018-06-21 01:21:11 +01:00
w0rp
34755eecdd #1398 document the detail key 2018-06-20 23:10:01 +01:00
w0rp
90dfe8e2a4 Merge pull request #1665 from ashemedai/master
Make CloudFormation linter work again with latest version
2018-06-20 22:51:55 +01:00
w0rp
11f303f853 Merge pull request #1618 from colbydehart/master
[new linter] Add mix linter for elixir
2018-06-20 22:47:56 +01:00
w0rp
b8be25adb4 Remove redundant spaces. 2018-06-20 22:44:56 +01:00
w0rp
d7efb13203 Try to fix the tests on Windows 2018-06-20 22:41:19 +01:00
Jeroen Ruigrok van der Werven
f14e3bb109 Update test to match update to linter
Also make lnum and col proper strings, since that is how it is matched
by the regexp, ALE handles the conversion to number.
2018-06-20 15:29:26 +02:00
Jeroen Ruigrok van der Werven
b7db095221 Make CloudFormation linter work again with latest
- Fix regexp
- Get rid of +0 since ALE does a str2nr() on lnum and col
- Put all matches in numerical order for easier maintenance
2018-06-20 14:59:51 +02:00
w0rp
0e1528ec34 Set up most of the autocmd events in one group 2018-06-20 13:35:57 +01:00
w0rp
9674132933 Remove CallWithCooldown functions to save on time 2018-06-20 08:34:42 +01:00
w0rp
82ea36576c Move ClockMilliseconds to events, so fewer files are loaded some times 2018-06-19 20:53:49 +01:00
w0rp
fd261d7a17 Move the initialization of augroups to then events file 2018-06-19 20:31:58 +01:00
w0rp
3a5887df2c Remove a redundant variable in tests 2018-06-19 20:12:49 +01:00
w0rp
e306e5cdb0 Avoid calling ALE cleanup code if ALE never tried to check a buffer 2018-06-19 20:12:33 +01:00
Alvin Chan
b8a1038a41 Set --parser option in Prettier's fixer (#1620)
* Set `--parser` option in Prettier's fixer
* Add expected `--parser` option to tests
* Disable Prettier `--parser` detection if file extension exists
* Manually default Prettier `--parser` to "babylon"
* Add `--parser` test for TypeScript
* Add tests for Prettier `--parser`
* Add JSON5 to the suggested fixer for Prettier
2018-06-18 22:40:57 +01:00
w0rp
43ce8d7610 Merge pull request #1653 from chaucerbao/feature/js-tsserver-support
Add TSServer support for JavaScript files
2018-06-17 22:14:12 +01:00
w0rp
24fe195311 Merge pull request #1650 from yasuhiroki/support-cfn-python-lint
Add linter for AWS CloudFormation template file
2018-06-17 20:39:07 +01:00
w0rp
49a5d657ee Tell people that there's no cost for LSP support if they don't need it 2018-06-15 10:24:09 +01:00
w0rp
bda89506ba Lazy-load LSP linters, and check b:changedtick before notifying about changes 2018-06-15 10:01:28 +01:00
Alvin Chan
bd4da116ee Add TSServer support for JavaScript files 2018-06-13 17:37:20 -07:00
yasuhiroki
eabf5d55d6 Add end_lnum and end_col in cfn_python_lint handler 2018-06-13 09:11:14 +09:00
P M
f1b72218c3 Add support for qmlfmt fixer (#1651)
* Add support for qmlfmt fixer
2018-06-12 19:38:16 +01:00
w0rp
5283faa511 Try speeding up Travis builds with a generic environment 2018-06-12 19:31:44 +01:00
w0rp
87455a2ef4 Add a test for handling missing detail keys for LSP completion 2018-06-12 19:31:08 +01:00
w0rp
d9746a4572 Merge pull request #1638 from ssiegel/use-vanilla-rscript
Use --vanilla switch for Rscript
2018-06-12 19:01:45 +01:00
yasuhiroki
ae25d71fa8 Add linter for AWS CloudFormation template file 2018-06-12 15:11:53 +09:00
w0rp
22a9dcd03e Merge pull request #1640 from docwhat/pr/lsp-handle-missing-details
lsp: handle missing "detail" key
2018-06-11 21:33:49 +01:00
Christian Höltje
fd7456fce0 lsp: handle missing "detail" key 2018-06-07 13:43:08 -04:00
Colby Dehart
864818a385 WIP cd to project path 2018-06-07 11:47:57 -05:00
Colby Dehart
f0f569f14a added test for command callback 2018-06-07 10:09:08 -05:00
Stefan Siegel
42192c1593 Adapt test to also use Rscript --vanilla 2018-06-07 15:56:14 +02:00
Stefan Siegel
252097bee0 Use --vanilla switch for Rscript
This prevents possibly bad interference with the user's R environment,
e.g. by an auto-activating packrat.
2018-06-07 15:06:09 +02:00
w0rp
10a9177b6b Merge pull request #1636 from zed0/master
#1635 - Use the project base rather than its parent for cquery
2018-06-07 07:23:44 +01:00
Ben Falconer
d1be72f438 #1635 - Use the project base rather than its parent for cquery 2018-06-07 00:12:38 +01:00
w0rp
67753de531 Merge pull request #1632 from zed0/master
Add the cquery LSP
2018-06-06 21:31:36 +01:00
Ben Falconer
20db9ab719 Add the cquery LSP #1475 #1594 2018-06-06 17:58:47 +01:00
Ben Falconer
641c0c797b Pass rootUri to LSPs in addition to rootPath 2018-06-06 17:53:36 +01:00
Ben Falconer
1a4b08539b Allow initialization options to be passed to language servers 2018-06-06 17:53:36 +01:00
w0rp
c49ea1a5e3 Merge pull request #1629 from elebow/pipenv-executable-python-tools
Allow all Python linter executables to be set to `pipenv`.
2018-06-05 08:32:45 +01:00
w0rp
3a6a92283e Merge pull request #1628 from rmorabia/patch-1
Readme Typo: TypeSript -> TypeScript
2018-06-05 07:12:53 +01:00
Eddie Lebow
ca88e67af0 Allow all Python linter executables to be set to pipenv.
It appends ` run {linter_name}`, analogously to the Ruby linters when
the executable is set to `bundle`
2018-06-05 00:33:26 -04:00
Radhika Morabia
b3da52d38d Typo: TypeSript -> TypeScript 2018-06-04 20:22:53 -07:00
w0rp
5addd3abef Merge pull request #1627 from budziq/master
Added linting of tests and examples for rust cargo linter
2018-06-04 13:33:08 +01:00
Michał Budzyński
e272207114 Allow linting rust tests and examples with cargo 2018-06-04 11:08:49 +02:00
w0rp
4ec661b305 Merge pull request #1623 from zoonfafer/scalafmt-fixer
Add 'scalafmt' fixer for Scala files
2018-06-03 19:12:09 +01:00
Jeffrey Lau
03d14324ea doc/scalafmt: Remove wrong bits on initial "enabledness" of fixers 2018-06-04 02:05:19 +08:00
w0rp
a8bbf49a31 Merge pull request #1625 from elebow/flake8-pipenv-run
Allow flake8 executable to be set to `pipenv`.
2018-06-03 18:52:15 +01:00
w0rp
0db12702f3 Respect warn_about_trailing_whitespace for gitlint 2018-06-03 10:46:39 +01:00
Eddie Lebow
dd642b117c Allow flake8 executable to be set to pipenv.
It appends ` run flake8`, analogously to the Ruby tools when the
executable is set to `bundle`
2018-06-02 21:49:12 -04:00
Jeffrey Lau
77d0ac58ed Add 'scalafmt' fixer for Scala files
closes https://github.com/w0rp/ale/issues/1299
2018-06-03 04:40:52 +08:00
Colby Dehart
81739be0a0 handled temp file and env variable correctly; added tests 2018-06-02 13:03:56 -04:00
w0rp
786fc0a62f Merge pull request #1617 from luitzifa/master
Fix for puppet version >= 5.4.0
2018-06-02 12:36:24 +01:00
w0rp
014d27c882 #1621 - Tolerate SetOptions calls when ALE is loaded in a weird way 2018-06-01 21:03:22 +01:00
Colby Dehart
d760558007 added mix build path env var to the mix compile 2018-06-01 11:56:47 -04:00
w0rp
fae9167083 Fix LSP message handling when the handler doesn't get strings, somehow 2018-06-01 14:49:13 +01:00
w0rp
201f8519d9 Update the gitcommit documentation with more examples 2018-06-01 14:22:23 +01:00
w0rp
6a7e00d9ac Handle definition responses without files 2018-06-01 14:15:32 +01:00
w0rp
10e1545630 Mention g:ale_linters_explicit in the README 2018-05-30 21:15:00 +01:00
w0rp
970b62756e Fix #1610 - Encourage the use of ftplugin files more 2018-05-30 21:10:37 +01:00
w0rp
db64571b4c Fix #1523 - Document completion_filter 2018-05-30 20:44:09 +01:00
w0rp
c8b77fd4b8 Fix a typo in the LSP linter documentation 2018-05-30 20:23:57 +01:00
w0rp
bd92616e2a Fix #1219 - Mention FindProjectRoot behavior for Python in the documentation 2018-05-30 20:09:33 +01:00
w0rp
f95bc00bd6 Clean up grammar for hover documentation a little 2018-05-30 19:44:01 +01:00
w0rp
106d439f56 Merge pull request #1589 from gagbo/balloon_doc
Documentation : document the mouseover magic
2018-05-30 19:31:41 +01:00
Magnus Ottenklinger
801c12a881 Add mix linter for elixir 2018-05-30 10:38:14 -04:00
Daniel Kraemer
3a1d21e5dd Fix for puppet version 5.4.0
i don't know of any version lower than 5.4.0
2018-05-29 08:55:08 +02:00
w0rp
3014d85325 Encourage people to use NeoVim 0.2.0 or above in the README. 2018-05-28 20:20:05 +01:00
w0rp
f84411f3f1 Remove a test for a deprecated variable that seems to trip up Travis 2018-05-28 20:08:27 +01:00
w0rp
191967cfee #1587 - Add deprecation warnings for old linter options 2018-05-28 19:52:27 +01:00
w0rp
c0a279f967 Indicate things to be removed in version 2.0 2018-05-28 19:39:49 +01:00
w0rp
f2837b5802 #1524 - Define global variables where they are needed 2018-05-28 19:19:20 +01:00
w0rp
cae194d1bd #1524 Replace ale#Set with let in the main file 2018-05-28 17:57:58 +01:00
w0rp
18509195f5 #1524 Do not try to check buffers with empty filetypes 2018-05-28 17:38:14 +01:00
w0rp
ce89d93e1c Remove a now defunct test 2018-05-28 17:11:21 +01:00
w0rp
e49e7d52bc #1524 Remove the plugin conflict warnings 2018-05-28 16:47:32 +01:00
w0rp
8a659b7cc6 Fix #1566 - Add g:ale_python_flake8_change_directory 2018-05-28 16:34:54 +01:00
w0rp
d9717147bf Close #1559 - Report errors from LSP servers in :ALEInfo 2018-05-28 16:24:15 +01:00
w0rp
3c55cb087d Close #1553 - Support some tsserver completion for strings 2018-05-28 15:16:15 +01:00
w0rp
ef1ec5341f Fix #1568 - Filter LSP completion results with the prefixes 2018-05-28 14:45:07 +01:00
w0rp
cd0dc0a227 Fix #1611 - Fix perlcritic escaping on Windows 2018-05-28 12:51:06 +01:00
w0rp
eaf35bc611 Merge pull request #1562 from haginaga/support_phan_client
Add support phan_client for php
2018-05-28 12:41:13 +01:00
haginaga
ae8dd39760 Fix an incorrect argument of ale#Var in ale_linters#php#phan#Handle 2018-05-27 22:45:43 +09:00
haginaga
feab494286 Fix code style issues and refactor to use ale#Var 2018-05-27 22:21:02 +09:00
w0rp
29a9c9a255 Merge pull request #1564 from aliou/ad-alefix-fixer-cmdline-completion
Use the command line to filter ALEFix's command line completion.
2018-05-26 21:34:29 +01:00
w0rp
6fce8ddc5a #1600 Alias vimwiki to markdown 2018-05-26 11:41:52 +01:00
w0rp
b67c9a83b2 Merge pull request #1574 from hecrj/elm-0.19
Support Elm 0.19
2018-05-26 09:19:30 +01:00
Héctor Ramón Jiménez
7fd0fd514b Fix multiline indentation 2018-05-25 22:22:47 +02:00
w0rp
51a063be31 Move the sasslint handlers to one location 2018-05-25 20:59:35 +01:00
w0rp
8d49da1f1c Merge pull request #1573 from zed0/master
Run sass-lint from the target's directory
2018-05-25 20:48:16 +01:00
w0rp
d0f579c5fc Merge pull request #1575 from tsuburin/enable_dmd_warnings
Enable warnings of dmd command
2018-05-25 19:38:40 +01:00
w0rp
d8d13ef264 Do not echo messages to the echo line for mouse movements unless the user says so 2018-05-17 16:23:29 +01:00
Gerry Agbobada
1258b032e6 Documentation : Add mention of mouseover in README 2018-05-17 11:06:37 +02:00
Gerry Agbobada
e5ad9076b3 Documentation : document the mouseover magic
This first try is focused on fitting the information in existing
paragraphs
2018-05-17 10:57:04 +02:00
Gerry Agbobada
3a3c244723 TUI / GUI tooltip with content from ALEHover (#1556)
* Guard the ballooneval settings

* Mark main objectives to do to get nice Hover

* Make tweaks to make the tooltip work - See " XXX: comments

* Guard balloon_show call

* Use return instead of finish for functions

* ale#hover#show : Add optional arguments to specify arbtirary position

This change is requested to be able to call the function with mouse
position to enable hover information in vim's balloon

* ale#ballon#Disable : Remove feature guards

* ale#balloon : Show 'ALEHover' output on balloon if no diagnostic found

* ale#hover#HandleLSPResponse : remove the check for cursor position

This check prevented the 'ALEHover in balloon' feature, since mouse
position is almost never cursor position.

* ale#balloon#MessageForPos : Change the return of balloonexpr

balloonexpr evaluation now works even without balloon_show for basic
diagnostics, leaving the balloon_show call to ale#hover#Show, which can
then feature guard the call to avoid errors

* ale#hover#Response : Feature guard balloon_show calls

* ale#hover : always display 'Hover' information in messages

Also add a small comment to warn readers the different outputs the
ale#hover#Show will write to

* {LSP,TS}Response : use only variables from the Response

It is clearer that we only rely on l:options to get the relevant data to
build the LSP Response string

* hover#ShowDetails : fix an issue where not having focus broke balloons

The issue was caused by not using a buffer-specific version of getline()
to cap the value of the column sent in the message to LSP. Therefore a
cursor on column 10 in an inactive window could send a message with
column=0, if the active window had a buffer with too few lines

* {LSP,TS}Response : Remove redundant checks for balloon_show call

With the upcoming change in ale_set_balloons default value (see Pull
Request w0rp/ale#1565), this check will be useless

* balloonexpr? : Add a flag to separate hover#Show() calls

The goal of this flag is to make `:ALEHover` calls not pop a balloon
under the cursor, since the user has probably no interest in their
cursor while typing the command

The flag is a default argument which is overridden only in ballonexpr
call of ale#hover#Show, and stays set in the hover_map until the
callback for the LSP handles it.

There are no automated tests for this feature right now, and the nature
of the addition (one optional argument in the API) should make it
transparent to existing tests.

Since the differentiation is now possible, the check for moved cursor
has been put back in ale#hover#HandleLSPResponse

* ale#hover#hover_map : Protect accesses to hover_map

Using get() is safer than trying to access directly with ., as the tests
show.

* Raise timeout to try to get Appveyor happy

* Review : Fix comments

* Review : pass the optional argument 'called_from_balloonexpr' in a Dict

This optional dictionary has documentation just before the function
using it, ale#hover#Show, and allows easier extension in the future.
2018-05-16 21:23:48 +01:00
w0rp
c1da7866d0 Fix #1584 - Make duplicate msgfmt messages easier to navigate 2018-05-15 18:01:49 +01:00
Héctor Ramón Jiménez
b071f1a795 Make Elm linter backwards compatible with Elm 0.18 2018-05-15 17:06:52 +02:00
Ben Falconer
8a1099bb59 Run sass-lint from the target's directory 2018-05-15 14:36:31 +01:00
w0rp
c23acb00e2 Merge pull request #1565 from rhysd/improve-balloon-support-detection
Improve g:ale_set_balloons default value
2018-05-15 13:16:33 +01:00
w0rp
4a76cb0dd5 Update the issue template to tell you where to find command callback tests 2018-05-15 13:14:28 +01:00
Héctor Ramón Jiménez
115952fae3 Show Elm.Kernel as location when report.path is null in a general problem 2018-05-12 20:27:33 +02:00
tsuburin
0c472c2244 Added "-wi" to the dmd command to endable warning messages. 2018-05-12 15:03:35 +09:00
Héctor Ramón Jiménez
c3f61c391b Use message as text instead of title
`title` does not contain much information which forces to use :ALEDetail most of the time
2018-05-12 04:16:14 +02:00
Héctor Ramón Jiménez
089a07c6a6 Update ale-elm doc 2018-05-11 20:14:00 +02:00
Héctor Ramón Jiménez
2f40da76e6 Test global problems and imported module errors 2018-05-11 20:07:28 +02:00
Héctor Ramón Jiménez
d40f447931 Upgrade Elm linter to support 0.19 error reports 2018-05-11 19:15:40 +02:00
rhysd
168569b8b0 Fix condition to test a balloon feature 2018-05-11 19:07:16 +09:00
rhysd
57f0454a55 Improve g:ale_set_balloons default value 2018-05-11 17:46:40 +09:00
Aliou Diallo
199fcd48ac Use the command line to filter ALEFix's command line completion. 2018-05-10 16:15:08 +02:00
w0rp
38c66d33fe Merge pull request #1563 from IngoHeimbach/fix/gcc-fatal-error
Fatal GCC errors are handled as errors not warnings
2018-05-09 09:14:38 +01:00
Ingo Heimbach
5fe74c7dc8 Fatal GCC errors are handled as errors not warnings 2018-05-09 09:01:41 +02:00
w0rp
f7ecf3f47a Merge pull request #1555 from BobuSumisu/nasm-linter
Added NASM assembly linter
2018-05-08 19:02:17 +01:00
w0rp
7541a40859 #852 Update the REAME to mention %...code...% 2018-05-08 18:32:18 +01:00
w0rp
9023987fe0 Merge pull request #1552 from a-marquez/master
Add XO fixer
2018-05-08 17:53:12 +01:00
haginaga
230656e678 Fix to follow the Google VimScript Style Guide 2018-05-08 23:47:35 +09:00
haginaga
ffa6fd4bed Fix to follow the Google VimScript Style Guide 2018-05-08 23:35:14 +09:00
haginaga
eb3ab87569 Modify to be able to use phan_client without g:ale_php_phan_executable 2018-05-08 23:25:11 +09:00
haginaga
8cee39c614 (close w0rp/ale#1561) Add support phan_client for php 2018-05-08 14:19:47 +09:00
Øyvind Ingvaldsen
3bc07b482b Fixed handle test for Windows
Needed to add correct separator to test data.
2018-05-04 23:04:45 +02:00
Øyvind Ingvaldsen
df8c45ed55 smallfix 2018-05-04 22:33:08 +02:00
Øyvind Ingvaldsen
27144eee8c Added NASM linter
Added NASM linter (for nasm filetype).
2018-05-04 21:44:32 +02:00
w0rp
726a768464 Merge pull request #1550 from deivid-rodriguez/bundle_option_for_mdl
Add bundle option to mdl
2018-05-03 22:20:39 +01:00
w0rp
7c0219efcc #1503 Call setline() after d, in case there are folds at the end of the file 2018-05-03 22:14:29 +01:00
w0rp
6495fac820 Tell people to install prettier-eslint-cli instead 2018-05-03 19:48:15 +01:00
w0rp
e2c33f2f6c Add g:ale_completion_excluded_words for completion filtering 2018-05-03 11:17:41 +01:00
a-marquez
14dc05f36b Add XO fixer to fixers registry 2018-05-02 18:26:46 -04:00
a-marquez
12d79894a4 Add fixer definition for XO 2018-05-02 18:26:13 -04:00
w0rp
e59cd6b7c0 Make the features ALE supports clearer in the README 2018-05-02 13:38:52 +01:00
David Rodríguez
f11637b62b Add bundle option to mdl 2018-05-01 19:49:45 -03:00
Bjorn Neergaard
ae85695543 Update run-tests to make use of /usr/bin/env (#1548)
* Update run-tests to make use of /usr/bin/env

* Update run-vint

* Update run-vader-tests

* Update custom-linting-rules

* Update custom-checks

* Update check-toc

* Update check-supported-tools-tables
2018-05-01 13:18:03 +01:00
w0rp
3331f6c8f4 Merge pull request #1543 from vancluever/f-add-JobStartedAutoCmd
Add ALEJobStarted User autocommand event
2018-04-29 20:16:59 +01:00
Chris Marchesi
b81bc8d481 A couple of more doc fixes
* Update section 5.viii in the README with ALEJobStarted and re-format
the example.
* Add an extra line after documentation update to ensure consistency
with the rest of the doc.
2018-04-28 15:10:59 -07:00
Chris Marchesi
11780e1d3d Add some tests for IsCheckingBuffer
Adding a couple of tests to demonstrate how IsCheckingBuffer behaves
during specific autocommand hooks:

* At ALELintPre, no linters have actually executed yet, hence
IsCheckingBuffer should be returning false.
* ALEJobStarted, fires as early as reasonably possible after a job has
successfully started, and hence hooking into IsCheckingBuffer here
should return true.

This distinction is important when using these two events during things
like statusline refreshes, namely for "linter running" indicators.
2018-04-28 14:50:20 -07:00
Chris Marchesi
129eb96561 Fix tests by setting proper link tag in doc for ALEJobStarted 2018-04-27 22:32:21 -07:00
Chris Marchesi
9da015f74f Add test for ALEJobStarted 2018-04-27 22:00:50 -07:00
Chris Marchesi
b7996803c9 Add ALEJobStarted User autocommand event
The ALELintPre and ALELintPost autocommand events are currently being
used by lightline-ale to refresh the status line and check the linter
status for a current buffer. One of the plugin's checks looks to see if
linters are currently running, via ale#engine#IsCheckingBuffer(). This
currently only works partially in certain situations. In my particular
case, working with Go files, this only seems to function properly when a
file is initially opened. Saving a file does not correctly update the
status.

This seems to be due to the fact that ALELintPre actually runs before
any jobs are carried out, making it plausible that hooking into
ALELintPre for the purpose of checking to see if there are any currently
running linters for a buffer is unreliable as it would be prone to
pretty obvious race conditions.

This adds a new User autocommand, ALEJobStarted, that gets fired at the
start of every new job that is successfully run. This allows a better
point to hook into checking the linter status of a buffer using
ale#engine#IsCheckingBuffer() by ensuring that at least one job has
started by the time IsCheckingBuffer is run.
2018-04-27 15:40:02 -07:00
w0rp
6ab3fdc4d0 Close #1521 - Allow the language to be set with simple strings for LSP linters 2018-04-27 22:52:11 +01:00
w0rp
d1d705cc84 Merge pull request #1533 from inducer/master
flake8: Move to the buffer's directory before running flake8 command
2018-04-27 21:39:04 +01:00
w0rp
4a63a90d0d Merge pull request #1540 from maximbaz/fix-docs-ale-go
Fix typos in "lint package" options in docs/ale-go
2018-04-27 19:23:34 +01:00
Maxim Baz
04b54f5c17 Fix typos in "lint package" options in docs/ale-go 2018-04-27 19:49:33 +02:00
Andreas Kloeckner
603e61ad71 flake8: Move to the buffer's directory before running flake8 command 2018-04-26 18:53:44 -05:00
w0rp
d8d09c2048 Close #1428 Implement LSP hover-like functionality for tsserver too 2018-04-26 21:54:11 +01:00
w0rp
e6fe2d86b8 Add an American English tag for behaviour too 2018-04-24 21:56:34 +01:00
w0rp
41c0b837ae #1278 Allow linters to be defined pretty much anywhere 2018-04-24 21:48:33 +01:00
w0rp
ebbf7d0353 #1428 Show multiline hover messages, and document the new command 2018-04-24 21:03:06 +01:00
w0rp
93a046a78f #1236 Explain how to use Vim jumps 2018-04-23 21:18:58 +01:00
w0rp
7d6a303592 Move autocmd commands out of the toggle file, to improve load times 2018-04-23 10:16:48 +01:00
w0rp
ef130c4428 #1428 Start implementing LSP hover support 2018-04-22 22:00:25 +01:00
w0rp
0b3ee11546 Fix a typo 2018-04-22 20:32:39 +01:00
w0rp
286abd12d3 Add support for finding references using LSP servers or tsserver 2018-04-22 19:49:30 +01:00
w0rp
5a365e7926 Merge pull request #1517 from kfly8/perltidy-fixer
Added perltidy fixer
2018-04-22 18:02:19 +01:00
w0rp
87ad4dfbe7 Implement a preview window for selecting locations to open 2018-04-22 15:53:01 +01:00
w0rp
d8a673515a Close #1162 - Implement completion support with LSP servers 2018-04-22 12:28:19 +01:00
Kenta, Kobayashi
498be478be add perltidy fixer 2018-04-21 22:09:38 +09:00
w0rp
20241c87ef Merge pull request #1511 from elebow/add-cucumber-checker
Add `cucumber` checker for Cucumber files
2018-04-21 09:23:07 +01:00
Eddie Lebow
1e6651e0a0 Add cucumber checker for cucumber files
For now, it only detects undefined steps. The nearest `features` dir
above the buffer file is loaded, so step definitions should be found
correctly.

Tested only with Cucumber for Ruby, but it should work for any cucumber
that follows a substantially similar directory structure.
2018-04-20 22:54:29 -04:00
w0rp
63bbb38c0c Merge pull request #1510 from fenuks/issue-1471
Support passing fixers names to ALEFix as arguments
2018-04-20 21:38:11 +01:00
fenuks
6f6d35c0bd Add information that ALEFix can now accept arguments 2018-04-18 02:28:17 +02:00
fenuks
f16384f323 Add tests for ALEFix commandline parameters 2018-04-18 02:13:24 +02:00
fenuks
a591b191db Make ALEFix support arguments 2018-04-18 02:13:24 +02:00
w0rp
f9ba3d924f Fix #1507 - Add an option for disabling switching directories for pylint 2018-04-17 13:30:30 +01:00
w0rp
fb720251bf Close #1504 - Add an option for removing --respect-pragma for flow 2018-04-15 12:25:15 +01:00
w0rp
60917c9005 Revert "#1277 Try to get eslint_d to run the right version of eslint"
This reverts commit 56c7957a75.
2018-04-13 21:02:56 +01:00
w0rp
f5f3424fcf #1501 Pass the buffer number from BufWritePost on to ale#fix#Fix 2018-04-13 20:59:05 +01:00
w0rp
56c7957a75 #1277 Try to get eslint_d to run the right version of eslint 2018-04-13 20:49:03 +01:00
w0rp
a0aa9aa9b7 Fix #1495 - Fall back to /bin/sh when shell=pwsh 2018-04-12 21:01:35 +01:00
w0rp
0cd8e8630b #1497 Tolerate important ALE variables being undefined for some reason when viewing buffers like git commits 2018-04-12 20:31:45 +01:00
w0rp
3401a4e8ea Merge pull request #1498 from Eyenseo/master
Fix rust rls linter argument
2018-04-12 20:01:00 +01:00
eyenseo
6c93cded64 Fix rust rls linter toolchain argument
This removes the argument if the specified toolchain is empty.
As far as I can tell there is no +nighly (or similar) option [1] leading to
the termination of the server. But since people needed this option and
have yet to complain about it it stays the default for now.

[1] https://github.com/rust-lang-nursery/rls/blob/master/src/main.rs#L87
2018-04-12 20:42:38 +02:00
w0rp
f064ba48f5 Close #1494 - Prefer displaying higher severity problems for cursor messages, balloons, and highlights 2018-04-10 21:05:22 +01:00
w0rp
3f0e1cd05d Fix #1492 - Make pylint error parsing work on Windows 2018-04-10 15:18:16 +01:00
w0rp
9d00695249 #1486 - Default exit_code to 1, if it isn't set. 2018-04-10 09:57:21 +01:00
w0rp
da9a005c60 Fix #1490 - Rename the g++ linter to gcc, and add an alias for the old name 2018-04-10 09:31:22 +01:00
w0rp
697fd4ac75 Merge pull request #1488 from languitar/pmd
Add support for the java PMD linter
2018-04-09 19:22:14 +01:00
w0rp
719b790574 Close #542 - Add an option for disabling running locally installed executables by default 2018-04-09 19:11:20 +01:00
w0rp
3a47413286 Merge pull request #1487 from rhysd/fix-1472
pylint: Move to the buffer's directory before running pylint command
2018-04-09 18:14:42 +01:00
Johannes Wienke
49c4bfde14 Add support for the java PMD linter 2018-04-09 17:48:00 +02:00
rhysd
4903b966a7 pylint: Move to the buffer's directory before running pylint command (Fix #1472) 2018-04-09 16:43:10 +09:00
w0rp
2f2dcb8444 Close #1476 - Make the javac executable configurable 2018-04-08 20:35:06 +01:00
w0rp
7cf3ddf6c4 Close #1439 - Add an :ALEInfoToFile command 2018-04-08 19:04:07 +01:00
w0rp
1123669839 Close #1315 - Make the vint executable configurable 2018-04-08 18:10:00 +01:00
aspidiets
f9ae58849a Fix #1424 - Make the brittany fixer work 2018-04-08 17:38:43 +01:00
w0rp
91d7e81ebc Fix #605 - Support vcol: 1 for multi-byte character positions 2018-04-08 17:17:46 +01:00
Adriaan Zonnenberg
121e806423 Add g:ale_php_cs_fixer_options variable (#1477)
* Add g:ale_php_cs_fixer_options variable

* Fix test
2018-04-07 23:53:03 +02:00
w0rp
bb775e4e22 Fix #1479 - Respect g:hdevtools_options for hdevtools 2018-04-07 22:50:31 +01:00
Jack Evans
c5d3af04fc Added support for Python black fixer (#1451) 2018-04-06 11:08:25 +02:00
P M
85a2a00826 Integration of qmlfmt linting tool (#1462)
* Add first qmlfmt support

* Add GetCommand() function

- pass --error/-e option

* Add handle unittest

- fix pattern regex
- store col as integer

* Update docs

* Add command callback unit test
2018-04-05 21:09:41 +02:00
Nils Leuzinger
912f632bf5 Add fsc linter for Scala (#1452)
* Add fsc as a Scala linter

* Pull reused code into `autoload/ale/` directory

* Include fsc into the README

* Add unit test for testing the scala handler

* Add unit test for scala's fsc linter

* Rename scala unit tests for clarity

* Fix typo in README

* Fix typos in doc/ale.txt

* Fix author headline

* Put methods for fsc commands back into fsc.vim

* Move command_callback tests to correct location

* Rewrite handler test so it actually tests handler

* Clarify description of test in test_scala_handler
2018-04-05 21:04:11 +02:00
w0rp
a2acdecbc2 Merge pull request #1455 from Christian-Gibbons/flawfinder_cpp_severity_fix
Fix Flawfinder for C++
2018-04-05 15:00:08 +01:00
w0rp
8baab691e9 Merge pull request #1429 from stewy33/master
Add support for Mercury language using mmc as a linter.
2018-04-05 12:34:45 +01:00
christian-gibbons
f1d56a343e Flawfinder for C++:
Fix missing variable causing flawfinder to fail for c++
2018-03-28 14:09:03 +00:00
w0rp
95ec9bb780 #1167 Use the make -n parsing for C++ compilers, and document the new option 2018-03-27 19:24:22 +01:00
w0rp
018831d601 Merge pull request #1434 from roel0/master
Automatically determine build flags by parsing `make -n` output #1167
2018-03-27 09:55:43 +01:00
roel0
dfb3e194d7 Extended unit tests + simplified parsing algoritme #1167 2018-03-27 10:18:24 +02:00
w0rp
27c5faeafe Use the --stdin-filename option for textlint, so configuration files will be discovered better 2018-03-26 10:35:10 +01:00
w0rp
8e9ae59e5e Fix paths for running tests on Windows 2018-03-26 09:58:48 +01:00
w0rp
8b34a4bf6b Fix config and executable issues with the textlint linter 2018-03-26 09:55:18 +01:00
w0rp
45c5fe7f43 Fix a typo in the documentation 2018-03-26 09:19:58 +01:00
Stewy Slocum
8d4852a127 add documentation on mmc linter 2018-03-25 13:43:51 -04:00
Stewy Slocum
84952918cc add support for mercury language using mmc as linter 2018-03-25 13:33:24 -04:00
w0rp
164c711b3d Fix #1404 - Do not show balloons when g:ale_set_balloons is 0. Add b:ale_set_balloons 2018-03-25 12:57:08 +01:00
P M
107516c757 Add basic qmllint support (#1419)
* Add basic qmllint support

* Use temp file, remove superfluous error code key, adjust author info

* Add qmllint handler parse test
2018-03-25 11:55:59 +01:00
w0rp
d14558da32 Merge pull request #1448 from yasuhiroki/support-textlint-plaintext
Support textlint for plaintext
2018-03-24 13:19:38 +00:00
yasuhiroki
562862073f Update document for textlint 2018-03-24 16:04:47 +09:00
yasuhiroki
1d33d2cacf Support textlint for plaintext without textlintrc 2018-03-24 14:40:44 +09:00
w0rp
dbf530e87f Fix #1373 - Fix a bug with Fish errors not being handled on Linux 2018-03-23 12:17:54 +00:00
w0rp
ec5750f57b Merge pull request #1441 from adrigzr/bugfix-1207-remark-lint-ranges
Handle ranges for the remark linter #1207
2018-03-22 15:20:25 +00:00
w0rp
c525f49f09 Fit documentation to the column size in ale-cs.txt 2018-03-22 15:18:41 +00:00
w0rp
722607b866 Merge pull request #1442 from Crysikrend/master
Added the word 'find' as it was missing in docs/ale-cs.txt
2018-03-22 15:17:56 +00:00
Ashley Smith
7a87520ba5 Added the word 'find' as it was missing in docs/ale-cs.txt 2018-03-22 14:20:45 +00:00
Adrián González Rus
87217ae347 fix: Handle ranges for the remark linter #1207 2018-03-22 11:47:16 +01:00
roel0
cf62ef7b07 Fixed windows compatibility unit tests #1167 2018-03-21 20:56:29 +01:00
roel0
69237a7e57 Added additional unit tests + adapted review comments #1167 2018-03-21 20:44:35 +01:00
w0rp
0678eb1f45 Merge pull request #1409 from x1024/patch-1
Add new FAQ item for g:ale_list_window_size
2018-03-21 17:41:55 +00:00
w0rp
b769b67b2f Update the table of content for the new FAQ entry. 2018-03-21 17:41:24 +00:00
w0rp
ca2472a460 Merge pull request #1438 from lepistone/doc-timers
doc: fix misspelled feature name
2018-03-21 17:35:34 +00:00
Leonardo Pistone
f0325d7322 doc: fix misspelled feature name 2018-03-21 17:02:43 +01:00
w0rp
c0279de661 Merge pull request #1436 from bmihelac/fix-1435-msgfmt-output-stdout
fix: po msgfmt output to stdout (#1435)
2018-03-21 10:56:31 +00:00
Bojan Mihelac
763fcb8512 fix: po msgfmt output to stdout (#1435) 2018-03-21 09:21:20 +01:00
roel0
7593e20377 Fix failing unit tests for windows 2018-03-21 07:37:32 +01:00
roel0
18d0aeb1a0 * Shell commands should by called async with the help of a command chain
* The makefile parser unit test should only test the cflag parser itself
#1167
2018-03-20 21:49:31 +01:00
w0rp
64c95d4881 Merge remote-tracking branch 'tylucaskelley/master' 2018-03-20 20:27:50 +00:00
w0rp
57a93cbc04 Merge pull request #1433 from benpaxton-hf/lint-whole-package
Lint whole package for gosimple and gotype
2018-03-20 20:17:43 +00:00
Ben Paxton
6452c5e2f0 Use govet handler for gosimple, gotype, staticcheck 2018-03-20 14:19:48 +00:00
roel0
38953c4626 Clang parser shoud fallback on old method if parsing fails #1167 2018-03-20 12:37:53 +01:00
roel0
3fb7efa2c6 Added some unit tests and fixed some linting errors for automatic makefile parsing in C #1167 2018-03-20 11:56:46 +01:00
roel0
c47b5fd4b8 Automatically determine build flags by parsing 'make -n' output #1167 2018-03-19 21:56:18 +01:00
Ben Paxton
0cb3e36554 Lint whole package for gosimple and gotype
Fixes #936
2018-03-19 15:52:42 +00:00
w0rp
43e8f47e6e #1431 Normalize paths when checking for temporary paths on Windows 2018-03-18 20:39:50 +00:00
INOUE Yosuke
68b9399d4c handle multibyte string when linting text with redpen (#1416)
* handle multibyte string when linting text with redpen

* fix error when no string is provided, fix test's expect value

* remove ambiguious `==` operator
2018-03-18 18:12:47 +00:00
w0rp
434f22e44a Merge pull request #1415 from fohte/fixer-rufo
Add rufo fixer for Ruby files
2018-03-18 17:42:07 +00:00
w0rp
440502dc93 Clean up the mix format command and tests 2018-03-18 17:40:34 +00:00
w0rp
92612a9eab Merge pull request #1410 from fribmendes/frm/mix_format_options
Allow passing options to mix_format
2018-03-18 17:36:33 +00:00
Hideaki Tokida
1b1e53ef61 add textlint support for markdown (#1383) 2018-03-18 17:28:26 +00:00
w0rp
c112ee9dff Fix #1392 - Only check files on disk for gotype 2018-03-18 17:16:13 +00:00
w0rp
bdd8d2399f #416 Escape the tslint command 2018-03-18 16:48:28 +00:00
w0rp
b08fdd16b8 Merge pull request #1248 from Carpetsmoker/autocmd-fixer
Add ALEFixPre and ALEFixPost events
2018-03-18 16:37:16 +00:00
Martin Tournoij
302f69e933 Add ALEFixPre and ALEFixPost events
To run autocmd before and after every fix cycle.

Fixes #623 (`ALELintPre` was added in #1203).
2018-03-17 18:24:38 +00:00
Anthony DeDominic
92e6e4d1ba Fix awk linter and security concerns. (#1411)
* Fixed (g)awk linter

 * Made it secure, albeit less useful.
 * Added gawk handler; the cpplint one was not working?
 * Added gawk handler test.
 * added warning to gawk handler.
 * added gawk command callback test
 * added comment about --source

* added back optional commandline option
2018-03-14 17:46:57 +00:00
Hayato Kawai
7e1a9a9810 Add rufo fixer for ruby files 2018-03-11 13:33:57 +09:00
w0rp
05d39bc1a9 Merge pull request #1395 from gfontenot/gfontenot/fix-elm-format-name
Fix elm-format fixer name
2018-03-10 10:51:27 +00:00
Christian-Gibbons
b586eba4a4 Handle flawfinder severity level (#1400)
* Handle flawfinder severity level
* Reverted code allowing Flawfinder to piggyback off of gcc's format handler
* Gave Flawfinder its own format handler and made requested changes.
2018-03-10 10:44:55 +00:00
Fernando Mendes
6320ce6674 Allow passing options to mix_format 2018-03-08 15:29:10 +00:00
Gordon Fontenot
9258c73680 Fix elm-format fixer name
Support for elm-format as a fixer has existed since Sept 2017, but it's not
easy to discover because the fixer was named `format`. This breaks the
convention of the other fixers that use the full name in the registry.

I've gone ahead and fixed this discrepancy, but I left the existing registry
entry in place. We should move people towards using `elm-format` as the fixer
name, but I'd hate to break existing setups.
2018-03-08 09:19:12 -06:00
x x
1995afa855 Add new FAQ item for g:ale_list_window_size 2018-03-08 12:17:29 +02: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
Ty-Lucas Kelley
32091fb8ad add test for markdownlint hander 2018-03-03 19:32:32 -05:00
Ty-Lucas Kelley
c572cfd2d2 add vim README.md to readme 2018-03-03 19:17:31 -05:00
Ty-Lucas Kelley
2a575ca551 add basic support for markdownlint 2018-03-03 19:16:41 -05: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
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
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
719 changed files with 23571 additions and 4381 deletions

1
.gitattributes vendored
View File

@@ -2,6 +2,7 @@
/CODE_OF_CONDUCT.md export-ignore
/CONTRIBUTING.md export-ignore
/Dockerfile export-ignore
/ISSUE_TEMPLATE export-ignore
/ISSUE_TEMPLATE.md export-ignore
/Makefile export-ignore
/PULL_REQUEST_TEMPLATE.md export-ignore

40
.github/ISSUE_TEMPLATE/report-a-bug.md vendored Normal file
View File

@@ -0,0 +1,40 @@
---
name: Report a bug
about: Report a bug with ALE.
---
<!--
This is the template for reporting ALE bugs. Make sure you try updating ALE
to a more recent version before reporting a bug. Look through existing bug
reports for similar issues before reporting a new one. Don't leave comments
about new bugs in the comment section for old issues.
Make sure to try disabling other plugins and trying to repeat your bug before
reporting it in ALE. Some times problems can arise when two plugins are used
together, but often your issues might be problems with other plugins.
-->
## Information
**VIM version**
<!-- Paste just the first two lines of :version here. -->
Operating System: <!-- Describe your operating system version. -->
### :ALEInfo
<!-- Paste the output of :ALEInfo here. Try :ALEInfoToClipboard -->
<!-- Make sure to run :ALEInfo from the buffer where the bug occurred. -->
## What went wrong
<!-- Describe what went wrong here. -->
## Reproducing the bug
<!-- Write a list of steps below. -->
1. I did this.
2. Then this happened.

View File

@@ -0,0 +1,20 @@
---
name: Suggest a new linter or fixer
about: Suggest a new tool ALE can officially integrate with.
---
<!--
Write "Add support for foobar" as the issue title, or similar.
Fill out the details below.
-->
**Name:** foobar
**URL:** https://foo.bar.com
<!--
Write a description of the tool, and add any other information you think might
be helpful. Consider creating a pull request to add support for the tool
yourself.
-->

View File

@@ -0,0 +1,7 @@
---
name: Suggest an improvement
about: Suggest some way to improve ALE, or add a new feature.
---
<!-- There's no fixed format for feature requests. Just add your thoughts. -->

7
.gitignore vendored
View File

@@ -1,6 +1,7 @@
/init.vim
/doc/tags
.*
!.editorconfig
*.obj
.*
/doc/tags
/init.vim
/test/ale-info-test-file
tags

View File

@@ -2,6 +2,6 @@
sudo: required
services:
- docker
language: python
language: generic
script: |
./run-tests
./run-tests -v

View File

@@ -1,37 +1,11 @@
# Contributing to ALE
1. [Guidelines](#guidelines)
2. [Creating Issues](#issues)
3. [Creating Pull Requests](#pull-requests)
1. [Adding a New Linter](#adding-a-new-linter)
2. [Adding New Options](#adding-new-options)
4. [Writing Documentation](#writing-documentation)
1. [Documenting New Linters](#documenting-new-linters)
2. [Editing the Online Documentation](#editing-online-documentation)
3. [Documenting Linter Options](#documenting-linter-options)
5. [In Case of Busses](#in-case-of-busses)
<a name="guidelines"></a>
## 1. Guidelines
## Guidelines
Have fun, and work on whatever floats your boat. Take It Easy :tm:.
Don't forget to **write documentation** for whatever it is you are doing.
See the ["Writing Documentation"](#writing-documentation) section.
For help with contributing to ALE, see `:help ale-development` in Vim, or view
the help file online [here](/w0rp/ale/blob/master/doc/ale-development.txt).
Remember to write Vader tests for most of the code you write. You can look at
existing Vader tests in the `test` directory for examples.
When writing code, follow the [Google Vimscript Style
Guide](https://google.github.io/styleguide/vimscriptguide.xml), and run `vint
-s` on your files to check for most of what the guide mentions and more. If you
install this plugin (ALE) and install [Vint](https://github.com/Kuniwak/vint), it
will check your code while you type.
<a name="issues"></a>
## 2. Creating Issues
## Creating Issues
Before creating any issues, please look through the current list of issues and
pull requests, and ensure that the issue hasn't already been reported. If an
@@ -49,125 +23,3 @@ operating system, or any other information you think might be helpful.
Please describe your issue in clear, grammatically correct, and easy to
understand English. You are more likely to see an issue resolved if others
can understand you.
<a name="pull-requests"></a>
## 3. Creating Pull Requests
For code you write, make sure to credit yourself at the top of files you add,
and probably those you modify. You can write some comments at the top of your
VIM files.
```vim
" Author: John Smith <john.smith@gmail.com>
" Description: This file adds support for awesomelinter for the best language ever.
```
If you want to credit multiple authors, you can comma separate them.
```vim
" Author: John Smith <john.smith@gmail.com>, Jane Doe <https://jane-doe.info>
```
<a name="adding-a-new-linter"></a>
### 3.i. Adding a New Linter
If you add a new linter, look for existing handlers first in the
[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](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
itself are present in the table in the [README.md](README.md) file and in the
Vim [help file](doc/ale.txt). The programs and linters should be sorted
alphabetically in the table and list.
<a name="adding-new-options"></a>
### 3.ii. Adding New Options
If you add new options to the plugin, make sure to document those new options
in the [README.md](README.md) file, and also in the [help file](doc/ale.txt).
Follow the format of other options in each. Global options should appear in the
README file, and in the relevant section in the help file. Options specific
to a particular linter should appear in the section for that linter.
Linter options for customizing general argument lists should be named
`g:ale_<filetype>_<linter>_options`, so that all linters can have similar
global variable names.
Any options for linters should be set to some default value so it is always
easy to see what the default is with `:echo g:ale...`.
<a name="writing-documentation"></a>
## 4. Writing Documentation
If you are adding new linters, changing the API, adding new options, etc., you
_must_ write some documentation describing it in the `doc/ale.txt` file. New
linters _must_ be added to the `README.md` file too, so other users can get a
quick overview of the supported tools.
<a name="documenting-new-linters"></a>
### 4.i Documenting New Linters
If you add a new linter to the project, edit the table in the `README.md` file,
and edit the list of linters at the top of the `doc/ale.txt` file. The linters
should be sorted vertically in lexicographic (alphabetical) order by the
programming language name or filetype, and the tools for each language should
be sorted in lexicographic order horizontally. Sorting in this manner is a fair
manner of presenting all of the information in an easy to scan way, without
giving some unfair preference to any particular tool or language.
<a name="editing-online-documentation"></a>
### 4.ii Editing the Online Documentation
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 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.
3. Sections should have a _single_ blank line before or after.
4. Between descriptions of variables/functions/commands, use _two_ blank lines.
5. Up-indent the description of a variable/function/command by two spaces.
6. Place tags at the ends of lines, with the final characters on column 79.
All of the tags should line up perfectly on the same column as you scan
down through the document.
7. Keep the table of contents balanced so the longest tag link ends on column
79, and so all links line up perfectly on their first character, on the
left.
<a name="documenting-linter-options"></a>
### 4.iii Documenting Linter Options
For documenting new linter options, please add a new sub-section under the
"Linter Specific Options" section describing all of the global options added
for each linter, and what the default values of the options are. All global
options for linters should be set to some default value. This will allow users
to look up the default value easily by typing `:echo g:ale_...`.
<a name="in-case-of-busses"></a>
## 5. In Case of Busses
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 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
original, and life will go on, except the life of whoever vanished, because
then they will probably be dead.
Should w0rp suddenly disappear, then he was probably killed in a traffic
accident, or the government finally decided to kill him and make it look like
suicide. In the latter event, please subvert said government and restore
order to the universe, and ensure peace for mankind.

View File

@@ -1,7 +1,8 @@
FROM tweekmonster/vim-testbed:latest
RUN install_vim -tag v8.0.0027 -build \
-tag neovim:v0.1.7 -build
-tag neovim:v0.2.0 -build \
-tag neovim:v0.3.0 -build
ENV PACKAGES="\
bash \
@@ -12,7 +13,7 @@ ENV PACKAGES="\
RUN apk --update add $PACKAGES && \
rm -rf /var/cache/apk/* /tmp/* /var/tmp/*
RUN pip install vim-vint==0.3.9
RUN pip install vim-vint==0.3.15
RUN git clone https://github.com/junegunn/vader.vim vader && \
cd vader && git checkout c6243dd81c98350df4dec608fa972df98fa2a3af

View File

@@ -1,8 +0,0 @@
<!--
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.
-->

View File

@@ -1,4 +1,4 @@
Copyright (c) 2016-2017, 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,21 +1,8 @@
<!--
READ THIS: Before creating a pull request, please consider the following first.
Before creating a pull request, do the following.
* 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.
* If you add or modify a function for converting error lines into loclist items
that ALE can work with, please add Vader tests for them. Look at existing
tests in the test/handler directory, etc.
* If you add or modify a function for computing a command line string for
running a command, please add Vader tests for that.
* Generally try and cover anything with Vader tests, although some things just
can't be tested with Vader, or at least they can be hard to test. Consider
breaking up your code so that some parts can be tested, and generally open up
a discussion about it.
* Have fun!
* Read the documentation that comes with ALE with `:help ale-development`.
Have fun!
-->

458
README.md
View File

@@ -1,10 +1,10 @@
# 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/github/w0rp/ale?svg=true)](https://ci.appveyor.com/project/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)
ALE (Asynchronous Lint Engine) is a plugin for providing linting in NeoVim
and Vim 8 while you edit your text files.
0.2.0+ and Vim 8 while you edit your text files.
![linting example](img/example.gif?raw=true)
@@ -16,9 +16,22 @@ back to a filesystem.
In other words, this plugin allows you to lint while you type.
In addition to linting support, ALE offers some support for fixing code with
formatting tools, and completion via Language Server Protocol servers, or
servers with similar enough protocols, like `tsserver`.
ALE offers support for fixing code with command line tools in a non-blocking
manner with the `:ALEFix` feature, supporting tools in many languages, like
`prettier`, `eslint`, `autopep8`, and more.
ALE acts as a "language client" to support a variety of Language Server Protocol
features, including:
* Diagnostics (via Language Server Protocol linters)
* Go To Definition (`:ALEGoToDefinition`)
* Completion (`let g:ale_completion_enabled = 1`)
* Finding references (`:ALEFindReferences`)
* Hover information (`:ALEHover`)
If you don't care about Language Server Protocol, ALE won't load any of the code
for working with it unless needed. One of ALE's general missions is that you
won't pay for the features that you don't use.
## Table of Contents
@@ -27,6 +40,9 @@ servers with similar enough protocols, like `tsserver`.
1. [Linting](#usage-linting)
2. [Fixing](#usage-fixing)
3. [Completion](#usage-completion)
4. [Go To Definition](#usage-go-to-definition)
5. [Find References](#usage-find-references)
6. [Hovering](#usage-hover)
3. [Installation](#installation)
1. [Installation with Vim package management](#standard-installation)
2. [Installation with Pathogen](#installation-with-pathogen)
@@ -36,15 +52,19 @@ servers with similar enough protocols, like `tsserver`.
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 show errors or warnings in my lightline?](#faq-lightline)
6. [How can I change the format for echo messages?](#faq-echo-format)
7. [How can I execute some code when ALE stops linting?](#faq-autocmd)
8. [How can I navigate between errors quickly?](#faq-navigation)
9. [How can I run linters only when I save files?](#faq-lint-on-save)
10. [How can I use the quickfix list instead of the loclist?](#faq-quickfix)
11. [How can I check JSX files with both stylelint and eslint?](#faq-jsx-stylelint-eslint)
12. [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)
16. [How can I configure the height of the list in which ALE displays errors?](#faq-list-window-height)
<a name="supported-languages"></a>
@@ -71,83 +91,103 @@ formatting.
| -------- | ----- |
| 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 | shell [-n flag](https://www.gnu.org/software/bash/manual/bash.html#index-set), [shellcheck](https://www.shellcheck.net/) |
| Bourne Shell | shell [-n flag](http://linux.die.net/man/1/sh), [shellcheck](https://www.shellcheck.net/) |
| C | [cppcheck](http://cppcheck.sourceforge.net), [cpplint](https://github.com/google/styleguide/tree/gh-pages/cpplint), [gcc](https://gcc.gnu.org/), [clang](http://clang.llvm.org/), [clangtidy](http://clang.llvm.org/extra/clang-tidy/) !!, [clang-format](https://clang.llvm.org/docs/ClangFormat.html)|
| 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/), [clang-format](https://clang.llvm.org/docs/ClangFormat.html)|
| Bash | [language-server](https://github.com/mads-hartmann/bash-language-server), 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) !!, [cquery](https://github.com/cquery-project/cquery), [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) |
| CloudFormation | [cfn-python-lint](https://github.com/awslabs/cfn-python-lint) |
| 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), [prettier](https://github.com/prettier/prettier) |
| CSS | [csslint](http://csslint.net/), [prettier](https://github.com/prettier/prettier), [stylelint](https://github.com/stylelint/stylelint) |
| Cucumber | [cucumber](https://cucumber.io/) |
| Cython (pyrex filetype) | [cython](http://cython.org/) |
| D | [dmd](https://dlang.org/dmd-linux.html) |
| Dart | [dartanalyzer](https://github.com/dart-lang/sdk/tree/master/pkg/analyzer_cli) |
| Dockerfile | [hadolint](https://github.com/lukasmartinelli/hadolint) |
| Elixir | [credo](https://github.com/rrrene/credo), [dogma](https://github.com/lpil/dogma) !! |
| 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), [dartfmt](https://github.com/dart-lang/sdk/tree/master/utils/dartfmt) |
| 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), [mix](https://hexdocs.pm/mix/Mix.html) !!|
| Elm | [elm-format](https://github.com/avh4/elm-format), [elm-make](https://github.com/elm-lang/elm-make) |
| Erb | [erb](https://github.com/jeremyevans/erubi), [erubis](https://github.com/kwatch/erubis) |
| 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) |
| GLSL | [glslang](https://github.com/KhronosGroup/glslang) |
| Go | [gofmt](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) |
| GraphQL | [gqlint](https://github.com/happylinks/gqlint) |
| 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/), [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) |
| HTML | [HTMLHint](http://htmlhint.com/), [proselint](http://proselint.com/), [tidy](http://www.html-tidy.org/) |
| 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) |
| JavaScript | [eslint](http://eslint.org/), [jscs](http://jscs.info/), [jshint](http://jshint.com/), [flow](https://flowtype.org/), [prettier](https://github.com/prettier/prettier), prettier-eslint >= 4.2.0, prettier-standard, [standard](http://standardjs.com/), [xo](https://github.com/sindresorhus/xo)
| JSON | [jsonlint](http://zaa.ch/jsonlint/), [prettier](https://github.com/prettier/prettier) |
| 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), [PMD](https://pmd.github.io/) |
| 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-cli), [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 | [chktex](http://www.nongnu.org/chktex/), [lacheck](https://www.ctan.org/pkg/lacheck), [proselint](http://proselint.com/) |
| 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 | [luacheck](https://github.com/mpeterv/luacheck) |
| Markdown | [mdl](https://github.com/mivok/markdownlint), [proselint](http://proselint.com/), [vale](https://github.com/ValeLint/vale), [remark-lint](https://github.com/wooorm/remark-lint) !! |
| 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) !!, [markdownlint](https://github.com/DavidAnson/markdownlint) !!, [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) !!, [textlint](https://textlint.github.io/), [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) |
| Mercury | [mmc](http://mercurylang.org) !! |
| NASM | [nasm](https://www.nasm.us/) !! |
| 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-ocaml-merlin` for configuration instructions |
| Perl | [perl -c](https://perl.org/), [perl-critic](https://metacpan.org/pod/Perl::Critic) |
| PHP | [hack](http://hacklang.org/), [langserver](https://github.com/felixfbecker/php-language-server), [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) |
| Pod | [proselint](http://proselint.com/)|
| 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), [perltidy](https://metacpan.org/pod/distribution/Perl-Tidy/bin/perltidy) |
| 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/), [pycodestyle](https://github.com/PyCQA/pycodestyle), [pylint](https://www.pylint.org/) !!, [yapf](https://github.com/google/yapf) |
| Python | [autopep8](https://github.com/hhatto/autopep8), [black](https://github.com/ambv/black), [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), [pyre](https://github.com/facebook/pyre-check), [pylint](https://www.pylint.org/) !!, [yapf](https://github.com/google/yapf) |
| QML | [qmlfmt](https://github.com/jesperhh/qmlfmt), [qmllint](https://github.com/qt/qtdeclarative/tree/5.11/tools/qmllint) |
| R | [lintr](https://github.com/jimhester/lintr) |
| ReasonML | [merlin](https://github.com/the-lambda-church/merlin) see `:help ale-integration-reason-merlin` for configuration instructions |
| reStructuredText | [proselint](http://proselint.com/) |
| 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/) !!, [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/) |
| 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), [rufo](https://github.com/ruby-formatter/rufo) |
| 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), [prettier](https://github.com/prettier/prettier) |
| Scala | [scalac](http://scala-lang.org), [scalastyle](http://www.scalastyle.org) |
| 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 | [fsc](https://www.scala-lang.org/old/sites/default/files/linuxsoft_archives/docu/files/tools/fsc.html), [scalac](http://scala-lang.org), [scalafmt](https://scalameta.org/scalafmt/), [scalastyle](http://www.scalastyle.org) |
| Slim | [slim-lint](https://github.com/sds/slim-lint) |
| SML | [smlnj](http://www.smlnj.org/) |
| Solidity | [solium](https://github.com/duaraghav8/Solium) |
| 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://github.com/realm/SwiftLint), [swiftformat](https://github.com/nicklockwood/SwiftFormat) |
| Tcl | [nagelfar](http://nagelfar.sourceforge.net) !! |
| Texinfo | [proselint](http://proselint.com/)|
| Text^ | [proselint](http://proselint.com/), [vale](https://github.com/ValeLint/vale) |
| 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/), [redpen](http://redpen.cc/), [textlint](https://textlint.github.io/), [vale](https://github.com/ValeLint/vale), [write-good](https://github.com/btford/write-good) |
| Thrift | [thrift](http://thrift.apache.org/) |
| TypeScript | [eslint](http://eslint.org/), [tslint](https://github.com/palantir/tslint), tsserver, typecheck, [prettier](https://github.com/prettier/prettier) |
| 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)|
| 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>
@@ -175,24 +215,42 @@ ale-linter-options` for options specified to particular linters.
### 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. For example, the
following code can be used to fix JavaScript code with ESLint:
either in each buffer with a `b:ale_fixers`, or globally with `g:ale_fixers`.
The recommended way to configure fixers is to define a List in an ftplugin file.
```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.
" In ~/.vim/ftplugin/javascript.vim, or somewhere similar.
" Fix files with prettier, and then ESLint.
let b:ale_fixers = ['prettier', 'eslint']
" Equivalent to the above.
let b:ale_fixers = {'javascript': ['prettier', 'eslint']}
```
You can also configure your fixers from vimrc using `g:ale_fixers`, before
or after ALE has been loaded.
```vim
" In ~/.vim/vimrc, or somewhere similar.
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.
If you want to automatically fix files when you save them, you need to turn
a setting on in vimrc.
```vim
" Set this variable to 1 to fix files when you save them.
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.
The `:ALEFixSuggest` command will suggest some supported tools for fixing code.
Both `g:ale_fixers` and `b:ale_fixers` can also accept functions, including
lambda functions, as fixers, for fixing files with custom tools.
See `:help ale-fix` for complete information on how to fix files with ALE.
<a name="usage-completion"></a>
@@ -200,9 +258,7 @@ too. See `:help ale-fix` for detailed information.
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:
Protocol linters, or from `tsserver` for TypeScript.
```vim
" Enable completion where available.
@@ -211,6 +267,39 @@ 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 Language Server Protocol linters
and `tsserver`.
See `:help ale-go-to-definition` for more information.
<a name="usage-find-references"></a>
### 2.v Find References
ALE supports finding references for words under your cursor with the
`:ALEFindReferences` command using any enabled Language Server Protocol linters
and `tsserver`.
See `:help ale-find-references` for more information.
<a name="usage-hover"></a>
### 2.vi Hovering
ALE supports "hover" information for printing brief information about symbols at
the cursor taken from Language Server Protocol linters and `tsserver` with the
`ALEHover` command.
On vim/gvim with `balloon` support you can see the information in a tooltip
that appears under the mouse when you mouseover a symbol.
See `:help ale-hover` for more information.
<a name="installation"></a>
## 3. Installation
@@ -319,12 +408,28 @@ on Freenode. Web chat is available [here](https://webchat.freenode.net/?channels
### 5.i. How do I disable particular linters?
By default, all available tools for all supported languages will be run.
If you want to only select a subset of the tools, simply create a
`g:ale_linters` dictionary in your vimrc file mapping filetypes
to lists of linters to run.
By default, all available tools for all supported languages will be run. If you
want to only select a subset of the tools, you can define `b:ale_linters` for a
single buffer, or `g:ale_linters` globally.
The recommended way to configure linters is to define a List in an ftplugin
file.
```vim
" In ~/.vim/ftplugin/javascript.vim, or somewhere similar.
" Enable ESLint only for JavaScript.
let b:ale_linters = ['eslint']
" Equivalent to the above.
let b:ale_linters = {'javascript': ['eslint']}
```
You can also declare which linters you want to run in your vimrc file, before or
after ALE has been loaded.
```vim
" In ~/.vim/vimrc, or somewhere similar.
let g:ale_linters = {
\ 'javascript': ['eslint'],
\}
@@ -335,6 +440,14 @@ be run for those languages, just as when the dictionary is not defined.
Running many linters should not typically obstruct editing in Vim,
as they will all be executed in separate processes simultaneously.
If you don't want ALE to run anything other than what you've explicitly asked
for, you can set `g:ale_linters_explicit` to `1`.
```vim
" Only run linters named in ale_linters settings.
let g:ale_linters_explicit = 1
```
This plugin will look for linters in the [`ale_linters`](ale_linters) directory.
Each directory within corresponds to a particular filetype in Vim, and each file
in each directory corresponds to the name of a particular linter.
@@ -370,9 +483,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
@@ -412,73 +551,23 @@ See `:help ale#statusline#Count()` for more information.
<a name="faq-lightline"></a>
### 5.v. How can I show errors or warnings in my lightline?
### 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 it's easy to do it yourself:
support for ALE, nevertheless there is a plugin that adds this functionality: [maximbaz/lightline-ale](https://github.com/maximbaz/lightline-ale).
```vim
" This is regular lightline configuration, we just added
" 'linter_warnings', 'linter_errors' and 'linter_ok' to
" the active right panel. Feel free to move it anywhere.
" `component_expand' and `component_type' are required.
"
" For more info on how this works, see lightline documentation.
let g:lightline = {
\ 'active': {
\ 'right': [ [ 'lineinfo' ],
\ [ 'percent' ],
\ [ 'linter_warnings', 'linter_errors', 'linter_ok' ],
\ [ 'fileformat', 'fileencoding', 'filetype' ] ]
\ },
\ 'component_expand': {
\ 'linter_warnings': 'LightlineLinterWarnings',
\ 'linter_errors': 'LightlineLinterErrors',
\ 'linter_ok': 'LightlineLinterOK'
\ },
\ 'component_type': {
\ 'linter_warnings': 'warning',
\ 'linter_errors': 'error',
\ 'linter_ok': 'ok'
\ },
\ }
autocmd User ALELint call lightline#update()
" ale + lightline
function! LightlineLinterWarnings() abort
let l:counts = ale#statusline#Count(bufnr(''))
let l:all_errors = l:counts.error + l:counts.style_error
let l:all_non_errors = l:counts.total - l:all_errors
return l:counts.total == 0 ? '' : printf('%d --', all_non_errors)
endfunction
function! LightlineLinterErrors() abort
let l:counts = ale#statusline#Count(bufnr(''))
let l:all_errors = l:counts.error + l:counts.style_error
let l:all_non_errors = l:counts.total - l:all_errors
return l:counts.total == 0 ? '' : printf('%d >>', all_errors)
endfunction
function! LightlineLinterOK() abort
let l:counts = ale#statusline#Count(bufnr(''))
let l:all_errors = l:counts.error + l:counts.style_error
let l:all_non_errors = l:counts.total - l:all_errors
return l:counts.total == 0 ? '✓' : ''
endfunction
```
See `:help ale#statusline#Count()` and [lightline documentation](https://github.com/itchyny/lightline.vim#advanced-configuration)
for more information.
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.vi. 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.
- `g:ale_echo_msg_format` where:
* `%s` is the error message itself
* `%...code...%` is an optional error code, and most characters can be
written between the `%` characters.
* `%linter%` is the linter name
* `%severity` is the severity type
- `g:ale_echo_msg_error_str` is the string used for error severity.
@@ -496,24 +585,34 @@ Will give you:
![Echoed message](img/echo.png)
See `:help g:ale_echo_msg_format` for more information.
<a name="faq-autocmd"></a>
### 5.vii. 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 when a lint or fix cycle are started and stopped. There is also an event
that runs when a linter job has been successfully started. These events can be
used to call arbitrary functions during these respective parts of the ALE's
operation.
```vim
augroup YourGroup
autocmd!
autocmd User ALELint call YourFunction()
autocmd User ALELintPre call YourFunction()
autocmd User ALELintPost call YourFunction()
autocmd User ALEJobStarted call YourFunction()
autocmd User ALEFixPre call YourFunction()
autocmd User ALEFixPost call YourFunction()
augroup END
```
<a name="faq-navigation"></a>
### 5.viii. 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
@@ -529,7 +628,7 @@ For more information, consult the online documentation with
<a name="faq-lint-on-save"></a>
### 5.ix. 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
@@ -549,7 +648,7 @@ files, you can set `g:ale_lint_on_save` to `0`.
<a name="faq-quickfix"></a>
### 5.x. 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
@@ -574,9 +673,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.xi. 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.
@@ -595,9 +697,18 @@ augroup END
```
Supposing the filetype has been set correctly, you can set the following
options in your vimrc file:
options in a jsx.vim ftplugin file.
```vim
" In ~/.vim/ftplugin/jsx.vim, or somewhere similar.
let b:ale_linters = ['stylelint', 'eslint']
let b:ale_linter_aliases = ['css']
```
Or if you want, you can configure the linters from your vimrc file.
```vim
" In ~/.vim/vimrc, or somewhere similar.
let g:ale_linters = {'jsx': ['stylelint', 'eslint']}
let g:ale_linter_aliases = {'jsx': 'css'}
```
@@ -609,7 +720,7 @@ no linter will be run twice for the same file.
<a name="faq-my-battery-is-sad"></a>
### 5.xii. 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
@@ -631,3 +742,76 @@ 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`, `clangtidy` and `cquery` 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.
<a name="faq-list-window-height"></a>
### 5.xvi. How can I configure the height of the list in which ALE displays errors?
To set a default height for the error list, use the `g:ale_list_window_size` variable.
```vim
" Show 5 lines of errors (default: 10)
let g:ale_list_window_size = 5
```

View File

@@ -1,37 +0,0 @@
" Author: w0rp <devw0rp@gmail.com>
" Description: Follow-up checks for the plugin: warn about conflicting plugins.
" A flag for ensuring that this is not run more than one time.
if exists('g:loaded_ale_after')
finish
endif
" Set the flag so this file is not run more than one time.
let g:loaded_ale_after = 1
" Check if the flag is available and set to 0 to disable checking for and
" emitting conflicting plugin warnings.
if exists('g:ale_emit_conflict_warnings') && !g:ale_emit_conflict_warnings
finish
endif
" Conflicting Plugins Checks
function! s:GetConflictingPluginWarning(plugin_name) abort
return 'ALE conflicts with ' . a:plugin_name
\ . '. Uninstall it, or disable this warning with '
\ . '`let g:ale_emit_conflict_warnings = 0` in your vimrc file, '
\ . '*before* plugins are loaded.'
endfunction
if exists('g:loaded_syntastic_plugin')
throw s:GetConflictingPluginWarning('Syntastic')
endif
if exists('g:loaded_neomake')
throw s:GetConflictingPluginWarning('Neomake')
endif
if exists('g:loaded_validator_plugin')
throw s:GetConflictingPluginWarning('Validator')
endif

View File

@@ -21,7 +21,7 @@ function! ale_linters#ansible#ansible_lint#Handle(buffer, lines) abort
for l:match in ale#util#GetMatches(a:lines, l:pattern)
let l:code = l:match[4]
if l:code is# 'EANSIBLE002'
if l:code is# 'EANSIBLE0002'
\&& !ale#Var(a:buffer, 'warn_about_trailing_whitespace')
" Skip warnings for trailing whitespace if the option is off.
continue
@@ -31,7 +31,8 @@ function! ale_linters#ansible#ansible_lint#Handle(buffer, lines) abort
call add(l:output, {
\ 'lnum': l:match[2] + 0,
\ 'col': l:match[3] + 0,
\ 'text': l:code . ': ' . l:match[5],
\ 'text': l:match[5],
\ 'code': l:code,
\ 'type': l:code[:0] is# 'E' ? 'E' : 'W',
\})
endif

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

@@ -12,7 +12,11 @@ function! ale_linters#awk#gawk#GetExecutable(buffer) abort
endfunction
function! ale_linters#awk#gawk#GetCommand(buffer) abort
" note the --source 'BEGIN ...' is to prevent
" gawk from attempting to execute the body of the script
" it is linting.
return ale_linters#awk#gawk#GetExecutable(a:buffer)
\ . " --source 'BEGIN { exit } END { exit 1 }'"
\ . ' ' . ale#Var(a:buffer, 'awk_gawk_options')
\ . ' ' . '-f %t --lint /dev/null'
endfunction
@@ -21,6 +25,6 @@ call ale#linter#Define('awk', {
\ 'name': 'gawk',
\ 'executable_callback': 'ale_linters#awk#gawk#GetExecutable',
\ 'command_callback': 'ale_linters#awk#gawk#GetCommand',
\ 'callback': 'ale#handlers#cpplint#HandleCppLintFormat',
\ 'callback': 'ale#handlers#gawk#HandleGawkFormat',
\ 'output_stream': 'both'
\})

View File

@@ -8,15 +8,15 @@ 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)
function! ale_linters#c#clang#GetCommand(buffer, output) abort
let l:cflags = ale#c#GetCFlags(a:buffer, a:output)
" -iquote with the directory the file is in makes #include work for
" headers in the same directory.
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)
\ . l:cflags
\ . ale#Var(a:buffer, 'c_clang_options') . ' -'
endfunction
@@ -24,6 +24,9 @@ call ale#linter#Define('c', {
\ 'name': 'clang',
\ 'output_stream': 'stderr',
\ 'executable_callback': 'ale_linters#c#clang#GetExecutable',
\ 'command_callback': 'ale_linters#c#clang#GetCommand',
\ 'command_chain': [
\ {'callback': 'ale#c#GetMakeCommand', 'output_stream': 'stdout'},
\ {'callback': 'ale_linters#c#clang#GetCommand'}
\ ],
\ 'callback': 'ale#handlers#gcc#HandleGCCFormat',
\})

View File

@@ -0,0 +1,31 @@
" 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)
call ale#Set('c_flawfinder_error_severity', 6)
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#flawfinder#HandleFlawfinderFormat',
\})

View File

@@ -8,15 +8,15 @@ 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)
function! ale_linters#c#gcc#GetCommand(buffer, output) abort
let l:cflags = ale#c#GetCFlags(a:buffer, a:output)
" -iquote with the directory the file is in makes #include work for
" headers in the same directory.
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)
\ . l:cflags
\ . ale#Var(a:buffer, 'c_gcc_options') . ' -'
endfunction
@@ -24,6 +24,9 @@ call ale#linter#Define('c', {
\ 'name': 'gcc',
\ 'output_stream': 'stderr',
\ 'executable_callback': 'ale_linters#c#gcc#GetExecutable',
\ 'command_callback': 'ale_linters#c#gcc#GetCommand',
\ 'command_chain': [
\ {'callback': 'ale#c#GetMakeCommand', 'output_stream': 'stdout'},
\ {'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

@@ -0,0 +1,35 @@
" Author: Yasuhiro Kiyota <yasuhiroki.duck@gmail.com>
" Description: Support cfn-python-lint for AWS Cloudformation template file
function! ale_linters#cloudformation#cfn_python_lint#Handle(buffer, lines) abort
" Matches patterns line the following:
"
" sample.template.yaml:96:7:96:15:E3012:Property Resources/Sample/Properties/FromPort should be of type Integer
let l:pattern = '\v^(.*):(\d+):(\d+):(\d+):(\d+):([[:alnum:]]+):(.*)$'
let l:output = []
for l:match in ale#util#GetMatches(a:lines, l:pattern)
let l:code = l:match[6]
if ale#path#IsBufferPath(a:buffer, l:match[1])
call add(l:output, {
\ 'lnum': l:match[2],
\ 'col': l:match[3],
\ 'end_lnum': l:match[4],
\ 'end_col': l:match[5],
\ 'code': l:code,
\ 'type': l:code[:0] is# 'E' ? 'E' : 'W',
\ 'text': l:match[7]
\})
endif
endfor
return l:output
endfunction
call ale#linter#Define('cloudformation', {
\ 'name': 'cloudformation',
\ 'executable': 'cfn-lint',
\ 'command': 'cfn-lint --template %t --format parseable',
\ 'callback': 'ale_linters#cloudformation#cfn_python_lint#Handle',
\})

View File

@@ -8,15 +8,15 @@ 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)
function! ale_linters#cpp#clang#GetCommand(buffer, output) abort
let l:cflags = ale#c#GetCFlags(a:buffer, a:output)
" -iquote with the directory the file is in makes #include work for
" headers in the same directory.
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)
\ . l:cflags
\ . ale#Var(a:buffer, 'cpp_clang_options') . ' -'
endfunction
@@ -24,6 +24,9 @@ call ale#linter#Define('cpp', {
\ 'name': 'clang',
\ 'output_stream': 'stderr',
\ 'executable_callback': 'ale_linters#cpp#clang#GetExecutable',
\ 'command_callback': 'ale_linters#cpp#clang#GetCommand',
\ 'command_chain': [
\ {'callback': 'ale#c#GetMakeCommand', 'output_stream': 'stdout'},
\ {'callback': 'ale_linters#cpp#clang#GetCommand'},
\ ],
\ 'callback': 'ale#handlers#gcc#HandleGCCFormat',
\})

View File

@@ -24,9 +24,9 @@ function! ale_linters#cpp#clangcheck#GetCommand(buffer) abort
" 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) : '')
\ . (empty(l:build_dir) ? ' -extra-arg -Xanalyzer -extra-arg -analyzer-output=text' : '')
endfunction
call ale#linter#Define('cpp', {

View File

@@ -0,0 +1,34 @@
" Author: Ben Falconer <ben@falconers.me.uk>
" Description: A language server for C++
call ale#Set('cpp_cquery_executable', 'cquery')
call ale#Set('cpp_cquery_cache_directory', expand('~/.cache/cquery'))
function! ale_linters#cpp#cquery#GetProjectRoot(buffer) abort
let l:project_root = ale#path#FindNearestFile(a:buffer, 'compile_commands.json')
return !empty(l:project_root) ? fnamemodify(l:project_root, ':h') : ''
endfunction
function! ale_linters#cpp#cquery#GetExecutable(buffer) abort
return ale#Var(a:buffer, 'cpp_cquery_executable')
endfunction
function! ale_linters#cpp#cquery#GetCommand(buffer) abort
let l:executable = ale_linters#cpp#cquery#GetExecutable(a:buffer)
return ale#Escape(l:executable)
endfunction
function! ale_linters#cpp#cquery#GetInitializationOptions(buffer) abort
return {'cacheDirectory': ale#Var(a:buffer, 'cpp_cquery_cache_directory')}
endfunction
call ale#linter#Define('cpp', {
\ 'name': 'cquery',
\ 'lsp': 'stdio',
\ 'executable_callback': 'ale_linters#cpp#cquery#GetExecutable',
\ 'command_callback': 'ale_linters#cpp#cquery#GetCommand',
\ 'project_root_callback': 'ale_linters#cpp#cquery#GetProjectRoot',
\ 'initialization_options_callback': 'ale_linters#cpp#cquery#GetInitializationOptions',
\ 'language': 'cpp',
\})

View File

@@ -0,0 +1,31 @@
" 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)
call ale#Set('c_flawfinder_error_severity', 6)
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#flawfinder#HandleFlawfinderFormat',
\})

View File

@@ -8,22 +8,26 @@ 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)
function! ale_linters#cpp#gcc#GetCommand(buffer, output) abort
let l:cflags = ale#c#GetCFlags(a:buffer, a:output)
" -iquote with the directory the file is in makes #include work for
" headers in the same directory.
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)
\ . l:cflags
\ . ale#Var(a:buffer, 'cpp_gcc_options') . ' -'
endfunction
call ale#linter#Define('cpp', {
\ 'name': 'g++',
\ 'name': 'gcc',
\ 'aliases': ['g++'],
\ 'output_stream': 'stderr',
\ 'executable_callback': 'ale_linters#cpp#gcc#GetExecutable',
\ 'command_callback': 'ale_linters#cpp#gcc#GetCommand',
\ 'command_chain': [
\ {'callback': 'ale#c#GetMakeCommand', 'output_stream': 'stdout'},
\ {'callback': 'ale_linters#cpp#gcc#GetCommand'},
\ ],
\ 'callback': 'ale#handlers#gcc#HandleGCCFormat',
\})

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

View File

@@ -1,55 +1,47 @@
" general mcs options which are likely to stay constant across
" source trees like -pkg:dotnet
let g:ale_cs_mcsc_options = get(g:, 'ale_cs_mcsc_options', '')
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', [])
" path string pointing the linter to the base path of the
" source tree to check
let g:ale_cs_mcsc_source = get(g:, 'ale_cs_mcsc_source','.')
function! s:GetWorkingDirectory(buffer) abort
let l:working_directory = ale#Var(a:buffer, 'cs_mcsc_source')
" list of search paths for additional assemblies to consider
let g:ale_cs_mcsc_assembly_path = get(g:, 'ale_cs_mcsc_assembly_path',[])
if !empty(l:working_directory)
return l:working_directory
endif
return expand('#' . a:buffer . ':p:h')
endfunction
" list of assemblies to consider
let g:ale_cs_mcsc_assemblies = get(g:, 'ale_cs_mcsc_assemblies',[])
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')
" if list of assembly search paths is not empty convert it to
" appropriate -lib: parameter of mcs
let l:path = 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)'), ',')
\ : ''
if !empty(l:path)
let l:path = '-lib:"' . join(l:path, '","') .'"'
else
let l:path =''
endif
" Pass paths to DLL files via the -r: parameter.
let l:assembly_list = ale#Var(a:buffer, 'cs_mcsc_assemblies')
" if list of assemblies to link is not empty convert it to the
" appropriate -r: parameter of mcs
let l:assemblies = ale#Var(a:buffer, 'cs_mcsc_assemblies')
if !empty(l:assemblies)
let l:assemblies = '-r:"' . join(l:assemblies, '","') . '"'
else
let l:assemblies =''
endif
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()
let l:out = ale#util#Tempname()
call ale#engine#ManageFile(a:buffer, l:out)
" assemble linter command string to be executed by ale
" implicitly set -unsafe mcs flag set compilation
" target to module (-t:module), direct mcs output to
" temporary file (-out)
"
return 'cd "' . ale#Var(a:buffer, 'cs_mcsc_source') . '";'
" 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:path
\ . ' ' . l:assemblies
\ . ' ' . l:lib_option
\ . ' ' . l:r_option
\ . ' -out:' . l:out
\ . ' -t:module'
\ . ' -recurse:"*.cs"'
\ . ' -recurse:' . ale#Escape('*.cs')
endfunction
function! ale_linters#cs#mcsc#Handle(buffer, lines) abort
@@ -60,17 +52,19 @@ function! ale_linters#cs#mcsc#Handle(buffer, lines) abort
" 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 = '^\(.\+\.cs\)(\(\d\+\),\(\d\+\)): \(.\+\): \(.\+\)'
let l:pattern = '^\v(.+\.cs)\((\d+),(\d+)\)\: ([^ ]+) ([^ ]+): (.+)$'
let l:output = []
let l:source = ale#Var(a:buffer, 'cs_mcsc_source')
let l:dir = s:GetWorkingDirectory(a:buffer)
for l:match in ale#util#GetMatches(a:lines, l:pattern)
call add(l:output, {
\ 'filename': fnamemodify(l:source . '/' . l:match[1], ':p'),
\ 'filename': ale#path#GetAbsPath(l:dir, l:match[1]),
\ 'lnum': l:match[2] + 0,
\ 'col': l:match[3] + 0,
\ 'text': l:match[4] . ': ' . l:match[5],
\ 'type': l:match[4] =~# '^error' ? 'E' : 'W',
\ 'type': l:match[4] is# 'error' ? 'E' : 'W',
\ 'code': l:match[5],
\ 'text': l:match[6],
\})
endfor

View File

@@ -2,7 +2,7 @@
call ale#Set('css_stylelint_executable', 'stylelint')
call ale#Set('css_stylelint_options', '')
call ale#Set('css_stylelint_use_global', 0)
call ale#Set('css_stylelint_use_global', get(g:, 'ale_use_global_executables', 0))
function! ale_linters#css#stylelint#GetExecutable(buffer) abort
return ale#node#FindExecutable(a:buffer, 'css_stylelint', [

View File

@@ -0,0 +1,45 @@
" Author: Eddie Lebow https://github.com/elebow
" Description: Cucumber, a BDD test tool
function! ale_linters#cucumber#cucumber#GetCommand(buffer) abort
let l:features_dir = ale#path#FindNearestDirectory(a:buffer, 'features')
if !empty(l:features_dir)
let l:features_arg = '-r ' . ale#Escape(l:features_dir)
else
let l:features_arg = ''
endif
return 'cucumber --dry-run --quiet --strict --format=json '
\ . l:features_arg . ' %t'
endfunction
function! ale_linters#cucumber#cucumber#Handle(buffer, lines) abort
try
let l:json = ale#util#FuzzyJSONDecode(a:lines, {})[0]
catch
return []
endtry
let l:output = []
for l:element in get(l:json, 'elements', [])
for l:step in l:element['steps']
if l:step['result']['status'] is# 'undefined'
call add(l:output, {
\ 'lnum': l:step['line'],
\ 'code': 'E',
\ 'text': 'Undefined step'
\})
endif
endfor
endfor
return l:output
endfunction
call ale#linter#Define('cucumber', {
\ 'name': 'cucumber',
\ 'executable': 'cucumber',
\ 'command_callback': 'ale_linters#cucumber#cucumber#GetCommand',
\ 'callback': 'ale_linters#cucumber#cucumber#Handle'
\})

View File

@@ -10,7 +10,7 @@ endfunction
function! ale_linters#cuda#nvcc#GetCommand(buffer) abort
" Unused: use ale#util#nul_file
" let l:output_file = tempname() . '.ii'
" let l:output_file = ale#util#Tempname() . '.ii'
" call ale#engine#ManageFile(a:buffer, l:output_file)
return ale#Escape(ale_linters#cuda#nvcc#GetExecutable(a:buffer))

View File

@@ -46,7 +46,7 @@ function! ale_linters#d#dmd#DMDCommand(buffer, dub_output) abort
endif
endfor
return 'dmd '. join(l:import_list) . ' -o- -vcolumns -c %t'
return 'dmd '. join(l:import_list) . ' -o- -wi -vcolumns -c %t'
endfunction
function! ale_linters#d#dmd#Handle(buffer, lines) abort

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

@@ -13,7 +13,7 @@ function! ale_linters#dart#dartanalyzer#GetCommand(buffer) abort
return ale#Escape(l:executable)
\ . (!empty(l:path) ? ' --packages ' . ale#Escape(l:path) : '')
\ . ' %t'
\ . ' %s'
endfunction
function! ale_linters#dart#dartanalyzer#Handle(buffer, lines) abort
@@ -37,4 +37,5 @@ call ale#linter#Define('dart', {
\ '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,25 @@
" 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#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': 'dart',
\ 'project_root_callback': 'ale_linters#dart#language_server#GetProjectRoot',
\})

View File

@@ -2,31 +2,51 @@
" always, yes, never
call ale#Set('dockerfile_hadolint_use_docker', 'never')
call ale#Set('dockerfile_hadolint_docker_image', 'lukasmartinelli/hadolint')
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] 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

View File

@@ -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

@@ -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

@@ -0,0 +1,61 @@
" Author: evnu - https://github.com/evnu
" Author: colbydehart - https://github.com/colbydehart
" Description: Mix compile checking for Elixir files
function! ale_linters#elixir#mix#Handle(buffer, lines) abort
" Matches patterns like the following:
"
" Error format
" ** (CompileError) apps/sim/lib/sim/server.ex:87: undefined function update_in/4
"
" TODO: Warning format
" warning: variable "foobar" does not exist and is being expanded to "foobar()", please use parentheses to remove the ambiguity or change the variable name
let l:pattern = '\v\(([^\)]+Error)\) ([^:]+):([^:]+): (.+)$'
let l:output = []
for l:match in ale#util#GetMatches(a:lines, l:pattern)
let l:type = 'E'
let l:text = l:match[4]
call add(l:output, {
\ 'bufnr': a:buffer,
\ 'lnum': l:match[3] + 0,
\ 'col': 0,
\ 'type': l:type,
\ 'text': l:text,
\})
endfor
return l:output
endfunction
function! ale_linters#elixir#mix#FindProjectRoot(buffer) abort
let l:mix_file = ale#path#FindNearestFile(a:buffer, 'mix.exs')
if !empty(l:mix_file)
return fnamemodify(l:mix_file, ':p:h')
endif
return '.'
endfunction
function! ale_linters#elixir#mix#GetCommand(buffer) abort
let l:project_root = ale_linters#elixir#mix#FindProjectRoot(a:buffer)
let l:temp_dir = ale#engine#CreateDirectory(a:buffer)
let l:mix_build_path = has('win32')
\ ? 'set MIX_BUILD_PATH=' . ale#Escape(l:temp_dir) . ' &&'
\ : 'MIX_BUILD_PATH=' . ale#Escape(l:temp_dir)
return ale#path#CdString(l:project_root)
\ . l:mix_build_path
\ . ' mix compile %s'
endfunction
call ale#linter#Define('elixir', {
\ 'name': 'mix',
\ 'executable': 'mix',
\ 'command_callback': 'ale_linters#elixir#mix#GetCommand',
\ 'callback': 'ale_linters#elixir#mix#Handle',
\ 'lint_file': 1,
\})

View File

@@ -1,45 +1,26 @@
" Author: buffalocoder - https://github.com/buffalocoder, soywod - https://github.com/soywod
" Author: buffalocoder - https://github.com/buffalocoder, soywod - https://github.com/soywod, hecrj - https://github.com/hecrj
" 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)
call ale#Set('elm_make_executable', 'elm')
call ale#Set('elm_make_use_global', get(g:, 'ale_use_global_executables', 0))
function! ale_linters#elm#make#GetExecutable(buffer) abort
return ale#node#FindExecutable(a:buffer, 'elm_make', [
\ 'node_modules/.bin/elm-make',
\ 'node_modules/.bin/elm',
\])
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] 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] is? l:temp_dir
else
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,
\ '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
if l:line[0] is# '{'
" Elm 0.19
call ale_linters#elm#make#HandleElm019Line(l:line, l:output)
elseif l:line[0] is# '['
" Elm 0.18
call ale_linters#elm#make#HandleElm018Line(l:line, l:output)
elseif l:line isnot# 'Successfully generated /dev/null'
call add(l:unparsed_lines, l:line)
endif
@@ -57,23 +38,135 @@ function! ale_linters#elm#make#Handle(buffer, lines) abort
return l:output
endfunction
function! ale_linters#elm#make#HandleElm019Line(line, output) abort
let l:report = json_decode(a:line)
if l:report.type is? 'error'
" General problem
let l:details = ale_linters#elm#make#ParseMessage(l:report.message)
if empty(l:report.path)
let l:report.path = 'Elm'
endif
if ale_linters#elm#make#FileIsBuffer(l:report.path)
call add(a:output, {
\ 'lnum': 1,
\ 'type': 'E',
\ 'text': l:details,
\})
else
call add(a:output, {
\ 'lnum': 1,
\ 'type': 'E',
\ 'text': l:report.path .' - '. l:details,
\ 'detail': l:report.path ." ----------\n\n". l:details,
\})
endif
else
" Compilation errors
for l:error in l:report.errors
let l:file_is_buffer = ale_linters#elm#make#FileIsBuffer(l:error.path)
for l:problem in l:error.problems
let l:details = ale_linters#elm#make#ParseMessage(l:problem.message)
if l:file_is_buffer
" Buffer module has problems
call add(a:output, {
\ 'lnum': l:problem.region.start.line,
\ 'col': l:problem.region.start.column,
\ 'end_lnum': l:problem.region.end.line,
\ 'end_col': l:problem.region.end.column,
\ 'type': 'E',
\ 'text': l:details,
\})
else
" Imported module has problems
let l:location = l:error.path .':'. l:problem.region.start.line
call add(a:output, {
\ 'lnum': 1,
\ 'type': 'E',
\ 'text': l:location .' - '. l:details,
\ 'detail': l:location ." ----------\n\n". l:details,
\})
endif
endfor
endfor
endif
endfunction
function! ale_linters#elm#make#HandleElm018Line(line, output) abort
let l:errors = json_decode(a:line)
for l:error in l:errors
let l:file_is_buffer = ale_linters#elm#make#FileIsBuffer(l:error.file)
if l:file_is_buffer
" Current buffer has problems
call add(a:output, {
\ 'lnum': l:error.region.start.line,
\ 'col': l:error.region.start.column,
\ '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
\})
elseif l:error.type is? 'error'
" Imported module has errors
let l:location = l:error.file .':'. l:error.region.start.line
call add(a:output, {
\ 'lnum': 1,
\ 'type': 'E',
\ 'text': l:location .' - '. l:error.overview,
\ 'detail': l:location ." ----------\n\n". l:error.overview . "\n\n" . l:error.details
\})
endif
endfor
endfunction
function! ale_linters#elm#make#FileIsBuffer(path) abort
return ale#path#IsTempName(a:path)
endfunction
function! ale_linters#elm#make#ParseMessage(message) abort
return join(map(copy(a:message), 'ale_linters#elm#make#ParseMessageItem(v:val)'), '')
endfunction
function! ale_linters#elm#make#ParseMessageItem(item) abort
if type(a:item) == type('')
return a:item
else
return a:item.string
endif
endfunction
" Return the command to execute the linter in the projects directory.
" 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_json = ale#path#FindNearestFile(a:buffer, 'elm.json')
let l:elm_exe = ale_linters#elm#make#GetExecutable(a:buffer)
if empty(l:elm_package)
if empty(l:elm_json)
" Fallback to Elm 0.18
let l:elm_json = ale#path#FindNearestFile(a:buffer, 'elm-package.json')
endif
if empty(l:elm_json)
let l:dir_set_cmd = ''
else
let l:root_dir = fnamemodify(l:elm_package, ':p:h')
let l:root_dir = fnamemodify(l:elm_json, ':p:h')
let l:dir_set_cmd = 'cd ' . ale#Escape(l:root_dir) . ' && '
endif
" The elm-make compiler, at the time of this writing, uses '/dev/null' as
" The elm 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. It does not use NUL on Windows.
" Source: https://github.com/elm-lang/elm-make/blob/master/src/Flags.hs
" which is why this is hard coded here.
" Source: https://github.com/elm-lang/elm-compiler/blob/19d5a769b30ec0b2fc4475985abb4cd94cd1d6c3/builder/src/Generate/Output.hs#L253
let l:elm_cmd = ale#Escape(l:elm_exe)
\ . ' make'
\ . ' --report=json'
\ . ' --output=/dev/null'

View File

@@ -3,7 +3,7 @@
let g:ale_erlang_erlc_options = get(g:, 'ale_erlang_erlc_options', '')
function! ale_linters#erlang#erlc#GetCommand(buffer) abort
let l:output_file = tempname()
let l:output_file = ale#util#Tempname()
call ale#engine#ManageFile(a:buffer, l:output_file)
return 'erlc -o ' . ale#Escape(l:output_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'

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

@@ -1,11 +1,23 @@
" Author: Jake Zimmerman <jake@zimmerman.io>
" 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': 'erubis -x %t | ruby -c',
\ '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',
\})

67
ale_linters/fish/fish.vim Normal file
View File

@@ -0,0 +1,67 @@
" 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
" ^
"
" OR, patterns such as:
"
" Unsupported use of '||'. In fish, please use 'COMMAND; or COMMAND'.
" /tmp/vLz620o/258/test.fish (line 2): if set -q SSH_CLIENT || set -q SSH_TTY
" ^
"
" fish -n can return errors in either format.
let l:pattern = '^\(.* (line \(\d\+\)): \)\(.*\)$'
let l:column_pattern = '^ *\^'
let l:output = []
let l:column_offset = 0
let l:last_line_with_message = ''
for l:line in a:lines
" Look for error lines first.
let l:match = matchlist(l:line, l:pattern)
if !empty(l:match)
if !empty(l:last_line_with_message)
let l:text = l:last_line_with_message
else
let l:text = l:match[3]
endif
let l:column_offset = len(l:match[1])
let l:last_line_with_message = ''
call add(l:output, {
\ 'col': 0,
\ 'lnum': str2nr(l:match[2]),
\ 'text': l:text,
\})
else
" Look for column markers like ' ^' second.
" The column index will be set according to how long the line is.
let l:column_match = matchstr(l:line, l:column_pattern)
if !empty(l:column_match) && !empty(l:output)
let l:output[-1].col = len(l:column_match) - l:column_offset
let l:last_line_with_message = ''
else
let l:last_line_with_message = l:line
let l:column_offset = 0
endif
endif
endfor
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

@@ -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,56 @@
" 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', get(g:, 'ale_use_global_executables', 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]
if l:code is# 'T2' && !ale#Var(a:buffer, 'warn_about_trailing_whitespace')
continue
endif
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,34 @@
" 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#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': 'glsl',
\ '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,8 +1,9 @@
" 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
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')
@@ -10,13 +11,22 @@ endfunction
function! ale_linters#go#gometalinter#GetCommand(buffer) abort
let l:executable = ale_linters#go#gometalinter#GetExecutable(a:buffer)
let l:filename = expand('#' . 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 ale#Escape(l:executable)
\ . ' --include=' . ale#Escape('^' . ale#util#EscapePCRE(l:filename))
\ . (!empty(l:options) ? ' ' . l:options : '')
\ . ' ' . ale#Escape(fnamemodify(l:filename, ':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
@@ -26,10 +36,13 @@ 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]) is# 'warning' ? 'W' : 'E',

View File

@@ -1,10 +1,15 @@
" Author: Ben Reedy <https://github.com/breed808>
" Description: gosimple for Go files
function! ale_linters#go#gosimple#GetCommand(buffer) abort
return ale#path#BufferCdString(a:buffer) . ' gosimple .'
endfunction
call ale#linter#Define('go', {
\ 'name': 'gosimple',
\ 'executable': 'gosimple',
\ 'command': 'gosimple %t',
\ 'callback': 'ale#handlers#unix#HandleAsWarning',
\ 'output_stream': 'both'
\ 'command_callback': 'ale_linters#go#gosimple#GetCommand',
\ 'callback': 'ale#handlers#go#Handler',
\ 'output_stream': 'both',
\ 'lint_file': 1,
\})

20
ale_linters/go/gotype.vim Normal file
View File

@@ -0,0 +1,20 @@
" Author: Jelte Fennema <github-public@jeltef.nl>
" Description: gotype for Go files
function! ale_linters#go#gotype#GetCommand(buffer) abort
if expand('#' . a:buffer . ':p') =~# '_test\.go$'
return
endif
return ale#path#BufferCdString(a:buffer) . ' gotype .'
endfunction
call ale#linter#Define('go', {
\ 'name': 'gotype',
\ 'output_stream': 'stderr',
\ 'executable': 'gotype',
\ 'command_callback': 'ale_linters#go#gotype#GetCommand',
\ 'callback': 'ale#handlers#go#Handler',
\ 'lint_file': 1,
\})

View File

@@ -1,10 +1,18 @@
" 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
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#handlers#go#Handler',
\ 'lint_file': 1,
\})

View File

@@ -1,10 +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',
\ 'callback': 'ale#handlers#unix#HandleAsWarning',
\ 'output_stream': 'both'
\ 'command_callback': 'ale_linters#go#staticcheck#GetCommand',
\ 'callback': 'ale#handlers#go#Handler',
\ '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

@@ -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

@@ -2,7 +2,7 @@
" Description: Ember-template-lint for checking Handlebars files
call ale#Set('handlebars_embertemplatelint_executable', 'ember-template-lint')
call ale#Set('handlebars_embertemplatelint_use_global', 0)
call ale#Set('handlebars_embertemplatelint_use_global', get(g:, 'ale_use_global_executables', 0))
function! ale_linters#handlebars#embertemplatelint#GetExecutable(buffer) abort
return ale#node#FindExecutable(a:buffer, 'handlebars_embertemplatelint', [
@@ -22,15 +22,13 @@ function! ale_linters#handlebars#embertemplatelint#Handle(buffer, lines) abort
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

@@ -1,10 +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',
\ 'command_callback': 'ale_linters#haskell#ghc#GetCommand',
\ 'callback': 'ale#handlers#haskell#HandleGHCFormat',
\})

View File

@@ -2,7 +2,7 @@
" Description: hdevtools for Haskell files
call ale#Set('haskell_hdevtools_executable', 'hdevtools')
call ale#Set('haskell_hdevtools_options', '-g -Wall')
call ale#Set('haskell_hdevtools_options', get(g:, 'hdevtools_options', '-g -Wall'))
function! ale_linters#haskell#hdevtools#GetExecutable(buffer) abort
return ale#Var(a:buffer, 'haskell_hdevtools_executable')

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,9 +1,9 @@
" 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)
call ale#Set('html_htmlhint_use_global', get(g:, 'ale_use_global_executables', 0))
function! ale_linters#html#htmlhint#GetExecutable(buffer) abort
return ale#node#FindExecutable(a:buffer, 'html_htmlhint', [
@@ -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

@@ -1,11 +1,8 @@
" Author: KabbAmine <amine.kabb@gmail.com>
" Description: This file adds support for checking HTML code with tidy.
" CLI options
let g:ale_html_tidy_executable = get(g:, 'ale_html_tidy_executable', 'tidy')
" Look for the old _args variable first.
let s:default_options = get(g:, 'ale_html_tidy_args', '-q -e -language en')
let g:ale_html_tidy_options = get(g:, 'ale_html_tidy_options', s:default_options)
let g:ale_html_tidy_options = get(g:, 'ale_html_tidy_options', '-q -e -language en')
function! ale_linters#html#tidy#GetCommand(buffer) abort
" Specify file encoding in options
@@ -25,8 +22,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
\)

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

@@ -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

@@ -3,8 +3,9 @@
let s:classpath_sep = has('unix') ? ':' : ';'
let g:ale_java_javac_options = get(g:, 'ale_java_javac_options', '')
let g:ale_java_javac_classpath = get(g:, 'ale_java_javac_classpath', '')
call ale#Set('java_javac_executable', 'javac')
call ale#Set('java_javac_options', '')
call ale#Set('java_javac_classpath', '')
function! ale_linters#java#javac#GetImportPaths(buffer) abort
let l:pom_path = ale#path#FindNearestFile(a:buffer, 'pom.xml')
@@ -35,21 +36,54 @@ function! s:BuildClassPathOption(buffer, import_paths) abort
\ : ''
endfunction
function! ale_linters#java#javac#GetExecutable(buffer) abort
return ale#Var(a:buffer, 'java_javac_executable')
endfunction
function! ale_linters#java#javac#GetCommand(buffer, import_paths) abort
let l:cp_option = s:BuildClassPathOption(a:buffer, a:import_paths)
let l:sp_option = ''
" 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)
let l:executable = ale_linters#java#javac#GetExecutable(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)
\ . ale#Escape(l:executable)
\ . ' -Xlint'
\ . ' ' . l:cp_option
\ . ' ' . l:sp_option
\ . ' -d ' . ale#Escape(l:class_file_directory)
@@ -63,14 +97,15 @@ 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 is# 'error: cannot find symbol'
@@ -78,9 +113,10 @@ function! ale_linters#java#javac#Handle(buffer, lines) abort
endif
else
call add(l:output, {
\ 'lnum': l:match[1] + 0,
\ 'text': l:match[2] . ':' . l:match[3],
\ 'type': l:match[2] is# '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
@@ -90,7 +126,7 @@ endfunction
call ale#linter#Define('java', {
\ 'name': 'javac',
\ 'executable': 'javac',
\ 'executable_callback': 'ale_linters#java#javac#GetExecutable',
\ 'command_chain': [
\ {'callback': 'ale_linters#java#javac#GetImportPaths', 'output_stream': 'stdout'},
\ {'callback': 'ale_linters#java#javac#GetCommand', 'output_stream': 'stderr'},

36
ale_linters/java/pmd.vim Normal file
View File

@@ -0,0 +1,36 @@
" Author: Johannes Wienke <languitar@semipol.de>
" Description: PMD for Java files
function! ale_linters#java#pmd#Handle(buffer, lines) abort
let l:pattern = '"\(\d\+\)",".\+","\(.\+\)","\(\d\+\)","\(\d\+\)","\(.\+\)","\(.\+\)","\(.\+\)"$'
let l:output = []
for l:match in ale#util#GetMatches(a:lines, l:pattern)
call add(l:output, {
\ 'type': 'W',
\ 'lnum': l:match[4] + 0,
\ 'text': l:match[5],
\ 'code': l:match[6] . ' - ' . l:match[7],
\})
endfor
return l:output
endfunction
function! ale_linters#java#pmd#GetCommand(buffer) abort
return 'pmd '
\ . ale#Var(a:buffer, 'java_pmd_options')
\ . ' -f csv'
\ . ' -d %t'
endfunction
if !exists('g:ale_java_pmd_options')
let g:ale_java_pmd_options = '-R category/java/bestpractices.xml'
endif
call ale#linter#Define('java', {
\ 'name': 'pmd',
\ 'executable': 'pmd',
\ 'command_callback': 'ale_linters#java#pmd#GetCommand',
\ 'callback': 'ale_linters#java#pmd#Handle',
\})

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',

108
ale_linters/javascript/flow.vim Normal file → Executable file
View File

@@ -1,21 +1,13 @@
" 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_global', 0)
call ale#Set('javascript_flow_use_home_config', 0)
call ale#Set('javascript_flow_use_global', get(g:, 'ale_use_global_executables', 0))
call ale#Set('javascript_flow_use_respect_pragma', 1)
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#VersionCheck(buffer) abort
return ale#Escape(ale_linters#javascript#flow#GetExecutable(a:buffer))
\ . ' --version'
endfunction
function! ale_linters#javascript#flow#GetCommand(buffer, version_lines) abort
let l:flow_config = ale#path#FindNearestFile(a:buffer, '.flowconfig')
if empty(l:flow_config)
@@ -23,18 +15,43 @@ function! ale_linters#javascript#flow#GetCommand(buffer, version_lines) abort
return ''
endif
let l:use_respect_pragma = 1
" 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.
for l:match in ale#util#GetMatches(a:version_lines, '\v\d+\.\d+\.\d+$')
let l:use_respect_pragma = ale#semver#GreaterOrEqual(
\ ale#semver#Parse(l:match[0]),
\ [0, 36, 0]
\)
endfor
let l:use_respect_pragma = ale#Var(a:buffer, 'javascript_flow_use_respect_pragma')
\ && (empty(l:version) || ale#semver#GTE(l:version, [0, 36]))
return ale#Escape(ale_linters#javascript#flow#GetExecutable(a:buffer))
return ale#Escape(l:executable)
\ . ' check-contents'
\ . (l:use_respect_pragma ? ' --respect-pragma': '')
\ . ' --json --from ale %s'
@@ -56,6 +73,44 @@ function! s:GetJSONLines(lines) abort
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(s:GetJSONLines(a:lines), '')
@@ -94,12 +149,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 is# '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

View File

@@ -2,7 +2,7 @@
" Description: jscs for JavaScript files
call ale#Set('javascript_jscs_executable', 'jscs')
call ale#Set('javascript_jscs_use_global', 0)
call ale#Set('javascript_jscs_use_global', get(g:, 'ale_use_global_executables', 0))
function! ale_linters#javascript#jscs#GetExecutable(buffer) abort
return ale#node#FindExecutable(a:buffer, 'javascript_jscs', [
@@ -35,19 +35,23 @@ function! ale_linters#javascript#jscs#Handle(buffer, lines) abort
"
" foobar.js: line 2, col 1, Expected indentation of 1 characters
"
let l:pattern = '^.*:\s\+line \(\d\+\),\s\+col\s\+\(\d\+\),\s\+\(.*\)$'
let l:pattern = '\v^.*:\s+line (\d+),\s+col\s+(\d+),\s+(.*)$'
let l:output = []
let l:m = ale#util#GetMatches(a:lines, [l:pattern])
for l:match in l:m
let l:text = l:match[3]
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

View File

@@ -2,7 +2,7 @@
" Description: JSHint for Javascript files
call ale#Set('javascript_jshint_executable', 'jshint')
call ale#Set('javascript_jshint_use_global', 0)
call ale#Set('javascript_jshint_use_global', get(g:, 'ale_use_global_executables', 0))
function! ale_linters#javascript#jshint#GetExecutable(buffer) abort
return ale#node#FindExecutable(a:buffer, 'javascript_jshint', [

View File

@@ -2,7 +2,7 @@
" Description: standardjs for JavaScript files
call ale#Set('javascript_standard_executable', 'standard')
call ale#Set('javascript_standard_use_global', 0)
call ale#Set('javascript_standard_use_global', get(g:, 'ale_use_global_executables', 0))
call ale#Set('javascript_standard_options', '')
function! ale_linters#javascript#standard#GetExecutable(buffer) abort

View File

@@ -0,0 +1,26 @@
" Author: Chaucerbao, w0rp <devw0rp@gmail.com>
" Description: tsserver integration for ALE
call ale#Set('javascript_tsserver_executable', 'tsserver')
call ale#Set('javascript_tsserver_config_path', '')
call ale#Set('javascript_tsserver_use_global', get(g:, 'ale_use_global_executables', 0))
" These functions need to be defined just to comply with the API for LSP.
function! ale_linters#javascript#tsserver#GetProjectRoot(buffer) abort
return ''
endfunction
function! ale_linters#javascript#tsserver#GetExecutable(buffer) abort
return ale#node#FindExecutable(a:buffer, 'javascript_tsserver', [
\ 'node_modules/.bin/tsserver',
\])
endfunction
call ale#linter#Define('javascript', {
\ 'name': 'tsserver',
\ 'lsp': 'tsserver',
\ 'executable_callback': 'ale_linters#javascript#tsserver#GetExecutable',
\ 'command_callback': 'ale_linters#javascript#tsserver#GetExecutable',
\ 'project_root_callback': 'ale_linters#javascript#tsserver#GetProjectRoot',
\ 'language': '',
\})

View File

@@ -2,7 +2,7 @@
" Description: xo for JavaScript files
call ale#Set('javascript_xo_executable', 'xo')
call ale#Set('javascript_xo_use_global', 0)
call ale#Set('javascript_xo_use_global', get(g:, 'ale_use_global_executables', 0))
call ale#Set('javascript_xo_options', '')
function! ale_linters#javascript#xo#GetExecutable(buffer) abort

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', get(g:, 'ale_use_global_executables', 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', get(g:, 'ale_use_global_executables', 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',
\})

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

@@ -35,8 +35,9 @@ function! ale_linters#lua#luacheck#Handle(buffer, lines) abort
call add(l:output, {
\ 'lnum': l:match[1] + 0,
\ 'col': l:match[2] + 0,
\ 'text': l:match[3] . l:match[4] . ': ' . l:match[5],
\ '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

@@ -0,0 +1,11 @@
" Author: Ty-Lucas Kelley <tylucaskelley@gmail.com>
" Description: Adds support for markdownlint
call ale#linter#Define('markdown', {
\ 'name': 'markdownlint',
\ 'executable': 'markdownlint',
\ 'lint_file': 1,
\ 'output_stream': 'both',
\ 'command': 'markdownlint %s',
\ 'callback': 'ale#handlers#markdownlint#Handle'
\ })

View File

@@ -1,5 +1,24 @@
" 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:exec_args = l:executable =~? 'bundle$'
\ ? ' exec mdl'
\ : ''
let l:options = ale#Var(a:buffer, 'markdown_mdl_options')
return ale#Escape(l:executable) . l:exec_args
\ . (!empty(l:options) ? ' ' . l:options : '')
endfunction
function! ale_linters#markdown#mdl#Handle(buffer, lines) abort
" matches: '(stdin):173: MD004 Unordered list style'
@@ -19,7 +38,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

@@ -1,18 +1,24 @@
" Author rhysd https://rhysd.github.io/
" Author rhysd https://rhysd.github.io/, Dirk Roorda (dirkroorda), Adrián González Rus (@adrigzr)
" 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\) \(.\+\)$'
" matches: ' 18:71-19:1 error Missing new line after list item list-item-spacing remark-lint',
let l:pattern = '^ \+\(\d\+\):\(\d\+\)\(-\(\d\+\):\(\d\+\)\)\? \(warning\|error\) \(.\+\)$'
let l:output = []
for l:match in ale#util#GetMatches(a:lines, l:pattern)
call add(l:output, {
let l:item = {
\ 'lnum': l:match[1] + 0,
\ 'col': l:match[2] + 0,
\ 'type': l:match[3] is# 'error' ? 'E' : 'W',
\ 'text': l:match[4],
\})
\ 'type': l:match[6] is# 'error' ? 'E' : 'W',
\ 'text': l:match[7],
\}
if l:match[3] isnot# ''
let l:item.end_lnum = l:match[4] + 0
let l:item.end_col = l:match[5] + 0
endif
call add(l:output, l:item)
endfor
return l:output

View File

@@ -0,0 +1,9 @@
" Author: tokida https://rouger.info, Yasuhiro Kiyota <yasuhiroki.duck@gmail.com>
" Description: textlint, a proofreading tool (https://textlint.github.io/)
call ale#linter#Define('markdown', {
\ 'name': 'textlint',
\ 'executable_callback': 'ale#handlers#textlint#GetExecutable',
\ 'command_callback': 'ale#handlers#textlint#GetCommand',
\ 'callback': 'ale#handlers#textlint#HandleTextlintOutput',
\})

View File

@@ -4,6 +4,6 @@
call ale#linter#Define('markdown', {
\ 'name': 'vale',
\ 'executable': 'vale',
\ 'command': 'vale --output=line %t',
\ 'callback': 'ale#handlers#unix#HandleAsWarning',
\ 'command': 'vale --output=JSON %t',
\ 'callback': 'ale#handlers#vale#Handle',
\})

View File

@@ -0,0 +1,9 @@
" Author: Sumner Evans <sumner.evans98@gmail.com>
" Description: write-good for Markdown files
call ale#linter#Define('markdown', {
\ '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,45 @@
" Author: stewy33 <slocumstewy@gmail.com>
" Description: Lints mercury files using mmc
call ale#Set('mercury_mmc_executable', 'mmc')
call ale#Set('mercury_mmc_options', '--make --output-compile-error-lines 100')
function! ale_linters#mercury#mmc#GetExecutable(buffer) abort
return ale#Var(a:buffer, 'mercury_mmc_executable')
endfunction
function! ale_linters#mercury#mmc#GetCommand(buffer) abort
let l:module_name = expand('#' . a:buffer . ':t:r')
return ale#path#BufferCdString(a:buffer)
\ . ale_linters#mercury#mmc#GetExecutable(a:buffer)
\ . ' --errorcheck-only '
\ . ale#Var(a:buffer, 'mercury_mmc_options')
\ . ' ' . l:module_name
endfunction
function! ale_linters#mercury#mmc#Handle(buffer, lines) abort
" output format
" <filename>:<line>: <issue type>: <message>
let l:pattern = '\v^\w+\.m:(\d+):\s+([W|w]arning|.*[E|e]rror.*): (.*)'
let l:output = []
for l:match in ale#util#GetMatches(a:lines, l:pattern)
call add(l:output, {
\ 'lnum': substitute(l:match[1], '\v^0*', '', '') + 0,
\ 'type': l:match[2][0] =~? 'W' ? 'W' : 'E',
\ 'text': l:match[2] . ': ' . l:match[3]
\})
endfor
return l:output
endfunction
call ale#linter#Define('mercury', {
\ 'name': 'mmc',
\ 'output_stream': 'stderr',
\ 'executable_callback': 'ale_linters#mercury#mmc#GetExecutable',
\ 'command_callback': 'ale_linters#mercury#mmc#GetCommand',
\ 'callback': 'ale_linters#mercury#mmc#Handle',
\ 'lint_file': 1,
\})

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