Releases: dense-analysis/ale
ALE v3.3.0
New Features
- ALE is now tested against the following Vim versions:
- Vim 8.0
- Vim 9.0
- NeoVim 0.2
- NeoVim 0.8
- LSP completion messages with
textEdit
but noinsertTextFormat
. #4124 b:ale_shell
andb:ale_shell_arguments
can now be used to set shell options
per-buffer. #4146- ALE now advertises
codeActionLiteralSupport
so language servers such as
rust-analyzer
return code actions to ALE. #4163 - An
ALEGoToImplementation
command has been added to go to the location
of the implementation of a symbol via supporting language servers. - All floating window borders characters can now be configured with
g:ale_floating_window_border
. #4215 - Floating windows can be heavily customised with
g:ale_floating_preview_popup_opts
. #4247 - The default omnicompletion regex for Racket is now
'\k\+$'
. #4186 #4293 #4352 - ALE completion has been tweaked to work better with C files. #4231
- ALE now always sets
out_cb
orerr_cb
for jobs to swallow messages to
prevent Vim from excessively polling results. #4259 - ALE now outputs
virtual-text
messages in Vim 9. #4281 #4291 virtual-text
messages can be shown for all lines, not only the line the cursor
is on, by settingale_virtualtext_cursor = 'all'
. #4289virtual-text
messages are now enabled by default where supported nicely. #4396- ALE now reports LSP linters that fail to run due to a project root not being
set as an error, so you can figure out why nothing is happening more easily.
#4207
New Linters
- Ansible -
ansible-language-server
#4355 - Bicep -
bicep
#4310 #4311 - Cairo -
starknet
#4256 - CSS -
vscode-langservers-extracted
#4175 - Erlang -
erlang_ls
#4346 - HTML -
vscode-langservers-extracted
#4175 - JSON -
vscode-langservers-extracted
#4164 #4175 - Lua -
selene
#4169 #4183 - OpenSCAD -
sca2d
#4205 - proto -
buf lint
#4128 #4300 - Python -
ruff
#4347,refurb
#4379 - Rego -
cpsell
#4199,opa check
#4199 - SQL -
sqlfluff
#4361 - Terrafrom -
tfsec
#4323 #4326 - YAML -
actionlint
#4173,gitlab-lint
#3042
New Fixers
- CSS -
css-beautify
#4319 - HCL -
packer fmt
#4192 - OCaml -
dune
#4263 - Packer -
packer fmt
#4192 - PHP -
pint
#4238 - proto -
buf format
#4128 #4300 - Python -
pyflyby
#4219,ruff
#4347 #4393 - Racket -
raco fmt
#4354 - Rego -
opa fmt
#4199 - Ruby -
stree write
#4268 - SQL -
sqlfluff
#4361 #4365 - Zig -
zig fmt
#4198
Linter Enhancements
- You can now override
--lint
options forawk
. #4114 rust-analyzer
can now be run for non-Cargo projects. #4118- ALE now reports errors from a
ghc
panic. #4145 pylama
output handling has been improved #4106- The default list of YAML linters is now
spectral
,yaml-language-server
,
andyamllint
to avoid running linters specialised for particular
applications of YAML. #4178 - ALE now runs
vimls
forVader
files by default, and the default list of
linters forVader
files is to runvimls
. #4201 - ALE now distinguishes between warnings and errors for
golangci_lint
. #4182 - ALE now supports newer
ansible-lint
versions. #4188 - ALE now checks for
.mypy.ini
to detect a Python project root. #4202 - ALE now supports
ember-template-lint
>= 4.0.0, in addition to older
versions. #4200 - ALE now reads only shows detailed error messages if
detail
is not empty
forterraform validate
. #4157 - YAML
actionlint
options can now be configured with
ale_yaml_actionlint_options
. #4216 - ALE now runs
dart analyze
with--fatal-infos
to capture more information.
#4237 - ALE now searches for
deno.json
anddeno.jsonc
to detect a Deno project
root. #4306 - The
volar
language server executable name now defaults to
vue-language-server
, which is its current name. #4308 clj-kondo
is now run with a filename hint to get more accurate problems.
#4315- ALE now uses header-specific filetype options for
clang
to improve on
the accuracy of problems ALE reports. #4318 #4334 - ALE now includes
pyrightconfig.json
andpyrightconfig.toml
in the list of
files it uses to find a Python project root. #4321 - ALE now sets the
cwd
forpylsp
and Pyright to the detected or manually
configured project root to fix incorrect import errors produce by either
pylsp
with themypy
plugin, or by Pyright. #4388 ruff
is now enabled as a linter for Python by default.- Options can now be configured for
hadoint
. #4353 --config
is now explicitly set forcheckmate
so it loads the correct
configuration file. #4351- The executable for
markdownlint
is now configurable. #4358 nix
versions 2.12 and up are supported properly now. #4394
Fixer Enhancements
shfmt
now runs with-filename=
and no other options by default to
use.editorconfig
settings. #4244dprint
is now suggested for more filetypes. #4320clang-format
is now suggested for more filetypes. #4367
Bugs Fixed
:ALEImport
should work with more language servers. #4105- ALE now reports errors ending at the last line in a file when linters reports
end lines beyond the end of the file. #4130 ale_haskell_hls_executable
was incorrectly named
ale_haskell_his_executable
. #4241- ALE no longer shows error messages on hover if
ale_enabled == 0
. #4277 <Plug>(ale_go_to_type_definition_in_vsplit)
didn't run the command. #4304- A missing
<Plug>(ale_go_to_implementation)
mapping has been defined. #4337 - ALE no longer errors when
ansible-lint
returns no output. #4373
ALE v3.2.0
Special Notes
- The
pyls
linter has been removed because it's no longer maintained, and it has been replaced with thepylsp
linter. #3810 - The
dartanalyzer
linter has been removed because the Dart team discourages its use over built-in tools instead.
Deprecated Features
- The
ale_lsp_root
setting is now deprecated, and you should replace it withale_root
instead. #3599
New Features
:ALEGoToTypeDefinition
is now supported fortsserver
. #3545- You can now rename TypeScript files with the
:ALEFileRename
command. #4012 - You can now manually populate loclist and quickfix with
:ALEPopulateLocList
and:ALEPopulateQuickfix
, respectively. #3761 - You can now send found references to quickfix with
:ALEFindReferences -quickfix
. #4033 - Linters and fixers can now set their
cwd
separately from their commands to run them, to make them easier to manager and enable other features. #2281 - ALE will now read signs with
sign_getplaced
, when the function is available. This is faster and safer. #3648 - When repeating selections, ALE will now jump to the last selected item, such as when finding references.
- ALE will now de-duplicate items before adding them to the location list. #3792
- Popup windows are now supported in Vim versions that have popup versions. #3817
- ALE is now tested against NeoVim 0.5. #3830
- ALE now triggers
ALELSPStarted
autocommands after language servers start. #3878 - ALE now supports virtual text in Vim 8.2 when
g:ale_virtualtext_cursor
is set to1
. #3915 - Multi-line messages are handled better for virtualtext. #3949
- virtualtext highlights now respect other ALE highlights better. #3960
- ALE now handles code actions responses from language servers that directly return commands to run. #3929
- ALE now includes the text of a file in the
textDocument/didSave
notification for language servers where supported to support more language servers like Godot. #3923 - ALE now only sends
textDocument/didSave
if the language server supports it. #3930 #4008 textDocument/didSave
is now dispatched after files are saved due to a rename, and ALE now respects the value ofhidden
to determine if other files modified should be written or not. #4049g:ale_open_list
/b:ale_open_list
can now be used as a threshold for opening the window after so many problems are found. #4050- ALE now attempts to automatically restart language servers when they crash. #4098
New Linters
- Ada -
cspell
#3981 - AsciiDoc -
cpell
#3981 - AVRA -
avra
#3950 - bitbake -
oelint-adv
#4043 - C -
cpell
#3981 - C -
cpplint
#3008 - C++ -
cspell
#3981 - C# -
cspell
#3981,dotnet format
#3879 - CSS -
cspell
#3981 - CMake -
cmake-lint
#4036 - CUDA -
clangd
#3598 - Dart -
dart analyze
#3825 - desktop -
desktop-file-validate
- Elixir -
cspell
#3981 - eRuby -
erblint
#3931 - Go -
cspell
#3981 - Haskell -
cspell
#3981 help
-cspell
#3981- HTML -
angular
(@angular/language-server) #2102,cspell
#3981 - Java -
cspell
#3981 - JavaScript -
cspell
#3981,deno
#3924 - JSON -
cspell
#3981 - Jsonnet -
jsonnet-lint
#3907,jsonnetfmt
#3907 - Lua -
cspell
#3981 - Markdown -
cspell
#3981 - Nix -
statix
#3969 - OCaml -
ocamllsp
#3595 - PHP -
cspell
#3981,phpactor
#3975 - PowerShell -
cspell
#3981 - Python -
cspell
#3981,flakehell
#3921,pylsp
#3810,unimport
#4058 - Robot -
rflint
#3715 - RST -
cspell
#3981 - Ruby -
cspell
#3981 - Rust -
cspell
#3981 - Scala -
cspell
#3981 sh
-cspell
#3981- svelte -
svelteserver
#3644 - Swift -
cspell
#3981 - systemd -
systemd-analyze
- Terraform -
checkov
#4006 - Texinfo -
cspell
#3981 - Thrift -
thriftcheck
#3852 #3893 - TypeScript -
cspell
#3981 - Verilog -
yosys
#3713 - Vue -
cspell
#3981,volar
#3992 - WGSL -
naga
#4047 - YAML -
yaml-language-server
#4029 - Zeek -
zeek
#3952
New Fixers
- Crystal -
crystal tool format
#4016 - Bazel -
buildifier
#3499 - Dart -
dart format
#3764 - Erlang -
erlfmt
#3602 - eRuby -
erblint
#3935 - Go -
gofumpt
#3968,golines
#3862 - JavaScript -
dprint
#4024 - Jsonnet -
jsonnetfmt
#3907 - JSON -
dprint
#4024,eslint
#3873 - JSON5 -
eslint
#3873 - JSONC -
eslint
#3873 - Lua -
stylua
#3789,lua-format
#3804 - Markdown -
dprint
#4024,pandoc
#3641 - Nix -
statix
#3969 - PureScript -
purs-tidy
#3863 #3867 - Python -
autoflake
#3779 - Racket -
racket-langserver
#3808 - TypeScript -
dprint
#4024
Linter Enhancements
- The Verilog
verilator
linter now includes the directory the file is in. #3500 _options
you define for themypy
linter are now the first options in the arguments list, so you can run the linter withpython -m mypy
. #3582- The executable, options, and input file can now be configured for the
vale
linter. #3594 - The
-T
argument was removed from theruby
command to support Ruby 3.0 and above. #3537 ansible-lint
should now print more warnings and errors for files with newer versions. #3601- The
texlab
linter now defaults to using the.git
project directory as the default project path. #3610 - The
texlab
LSP settings are now configurable. #4027 _options
can now be set for thepyls
linter. #3620gopls
is now used for Go by default, and is automatically run fromGOPATH
if installed locally.staticcheck
is automatically run fromGOPATH
if installed locally.- The
staticcheck
linter for Go now defaults to linting the entire package at once. #3799 lintr
now runs for more projects by avoiding the--vanilla
option. #3727tflint
reads from stdin now, which yields better results when linting. #3717eslint
now runs from Yarn sdk directories too. #3684- The
angular
linter now works for HTML files on Linux in more cases. - The
phpstan
linter now detectsphpstan.neon.dist
configuration files. #3765 - The
phpstan
linter now supports multi-line errors. #3686 - The
phpstan
linter now supports setting--memory-limit
. #3973 - Local executables for
phpstan
can now be used. #3809 - The
psalm
linter now searches for the project root based on wherecomposer.json
is. #3979 - The
raco
linter now includes thefilename
in the loclist. #3777 - The
rpmlint
version 2.0.0 and above is now support. #3757 - All
checkstyle
problems are now style problems. #3780 - The R language server linter now considers
.Renviron
#3744 - The
solc
linter now works with more versions. #3763 ansible-lint
works with more recent versions. #3786ansible-lint
colors are now always disabled so problems are parsed better. #3811ansible-lint
now runs only against files on disk for more accurate results. #3846- More recent versions of
hadolint
are supported. #3678 hadolint
error codes are now only included if available. #3943- The Python linters now consider
.tool-versions
when looking for the project root. #3820 #3826 poetry
is now supported for running Python linters. #3834- The column number is now read from
elrc
to produce more accurate problem locations. #3823 - The
clj-kondo
linter options are now configurable. #3812 - More
clj-kondo
messages are parsed correctly. #3946 - The
deno
linter now supports setting theimportMap
. #3827 - Older
cppcheck
versions are now supported. #3887 - More
cppcheck
problems are parsed, such as problems from plugins. #3980 cppcheck
should only run on the current file only to make it faster. #3983 #3987cppcheck
is only used to check headers included in a source file now. #3983- The
pyre
linter now runs more consistently. #3895 #3900 - The
circleci
linter now avoids checking for updates so it runs faster. #3902 - The
rubocop
fixer now avoids loading the--config
file so it's easier to run it in Docker. #3916 sml
linters now handle more errors. #3860 #3957- Newer versions of Ruby are supported for type checking by removing
-T1
. #3538 elvis
problems are now style problems. #3976alex
now uses--stdin
to check for problems while you type. #3982- More
checkmake
versions are supported. #3986 - Newer versions of
reek
are supported. #4010 - The
hls
language server can now be configured. #4038 - More
nix
versions are supported. #4045 - Stable commands are used to run
rustc
now by default, instead of commands for nightly builds. #4087
Fixer Enhancements
clang-format
can now be configured to use a particular style, or local style file. #3587prettier
can now be used with Ruby code if you have the right plugin installed. #3593cmake-format
now reads from stdin, which enables it to use configuration files for projects. #3725- The
isort
fixer now includes the filename in the arguments for better results. #3815 #3942 - The Dhall fixers now read from stdin. #3868
poetry
is now supported for running Python fixers. #3834 #3898uncrustify
now includes a language option depending on what filetype you're editing. #4007
Bugs Fixed
- The way ALE handles code actions, completion insertion, and renaming has been reworked with much more robust tests to fix edge cases and stop the cursor moving around strangely. #3478
- The
terraform
linter didn't handle all error types correctly. #3606 - If ALE was run inside of an
execute()
call it would fail due to uses ofredir
. Now ALE usesexecute()
so calls can be nested. #3719 - Certain Java errors could cause errors in ALE. These messages are handled better. #3706
- The
black
fixer for Python didn't build its command string correctly. #3759 -include
and-imacros
now use the filenames instead of absolute paths. #3775- Language server messages for completion data are handled better, where they would cause errors before. #3...
ALE v3.1.0
New Features
:ALERename
now just saves other buffers you have open and automatically reloads them when you next open them up again. #3332- You can now apply code actions with the
ALECodeAction
command, such as quick fixes. #1466 - You can apply refactors and renames with the right click context menu. #1466 #3482
- You can now configure balloons to only appear for LSP/tsserver hover information. #2727
- Hover messages and detailed error messages can now be displayed in NeoVim floating windows. See
:h g:ale_floating_preview
. #3470 #3314 - ALE socket LSP connections now support named pipes in NeoVim. #3509
- Hints and suggestions can now be displayed for
tsserver
with theg:ale_lsp_suggestions
setting #3362 - ALE now permits duplicate completion results when auto-imports are enabled. #3473
- ALE's Makefile detection will now also look for GNUmakefile. #3575
- ALE's automatic completion now only uses
noselect
forcompleteopt
if Vim is configured that way already. #3433 - When selections are repeated with
:ALERepeatSelection
, ALE now jumps to the last selection made, so resuming a search is easier.
New Linters
- Ada -
ada_language_server
#2825 - APKBUILD -
apkbuild-lint
#3424,secfixes-check
#3424 - Dart -
analysis_server
#3069 - Erlang -
Elvis
#3292 - Inko -
inko
#3494 - JSON -
jq #3568,
spectral` #3489 - Nix -
rnix-lsp
#3556 - OpenApi -
ibm_validator
#2711 #2782,yamllint
#2711 #2782 - PHP -
intelephense
#3357,tlint
#3291 - R -
languageserver
#3370 - Salt -
salt-lint
#3491 - TypeScript -
deno
#3533 - Vala -
vala-lint
#3519 - YAML -
spectral
#3489
New Fixers
fish
-fish_indent
#2148 #3576- Dhall -
dhall format
#3261,dhall freeze
#3261,dhall lint
#3261 - Haskell -
ormolu
#2903 - Lua -
luafmt
#3289 - OpenApi -
prettier
#2782 - Python -
autoimport
#3409 - TypeScript -
deno
#3533 - YAML -
circleci
,yamlfix
#3461
Linter Enhancements
- The
bibclean
linter now parses more errors #3367 - Maven wrappers can now be run more easily #2934 #3374
- The
sh
linter now looks at Vim's buffer-local variables to determine the shell type #3427 eslint
andtsserver
will now automatically be run from.yarn/sdks
#3435- The
phpcs
linter now parses more errors #3282 - The
shellcheck
linter now respectsshellcheck
directives #3216 - The
sorbet
linter now defaults to disablingwatchman
, which requireswatchman
to be separately installed #3403 - The
elrc
linter executable can now be customised #3531 - The Python project root detection now also looks for poetry.lock and pyproject.toml #3398
- A custom configuration file can now be used for Credo #3455
-imacros
flags are now included for linting with C compilers #3430- The
dafny
linter now has a time limit setting and parses more errors #3475 xo
options can now be customised #3148- The
swipl
linter for Prolog parses error messages from newer versions swipl - Jar files for running eclipselsp are included more reliably #3559
- The
nix
linter works with newer versions of Nix #3227 - The
dialyzer
linter's options can now be configured #3425 - The
cloudformation
linter can now also be enabled with the aliascfn-lint
, which matches the executable name. #2547 - The severity of problems can now be shown for newer versions of
hadolint
#3472 - Initialization options can now be set for
gopls
#3571
Fixer Enhancements
- You can now set additional options for the phpcbf fixer. #3383
gofmt
now runs via stdin, which helps with running it via Docker. #3381- The
isort
fixer now works withpipenv
#3386 scalafmt
is now suggested forsbt
#3399- The
xo
fixer now fixes files via stdin #3148 xo
options can now be customised #3148- The
standardrb
fixers now use stdin #3521
Bugs Fixed
- Fixer performance is much improved in modern version so Vim and NeoVim. #3358
- Rename operations or other code actions should no longer trigger an indexing error now and again. #2801 #3344
- Additional spaces and line breaks for completion items are now collapsed into single spaces. #3354
- The Java
checkstyle
linter now checks errors properly in NeoVim on Windows. #3467 - The
dafny
linter now returns results for the correct filenames. #3390 #3557 - The
phan
linter now returns results for the correct filenames. #3529 rust-analyzer
now sends options in the initial configuration so the server recognises them #3453clang-tidy
respectcompile_commands.json
better for header files #3551- The Java tools fixer now longer throws errors when no Maven executable can be found #3547
- ALE wasn't parsing
Makefile
output unless there were already some compiler flags #3574 - An index error in the
javac
linter has been fixed. #3706
ALE v3.0.0
Deprecated Features
- The
g:ale_completion_tsserver_autoimport
option has been deprecated. Useg:ale_completion_autoimport
instead.
Removed Features / Breaking Changes
Many previously deprecated features have been removed. Here is a list of the features removed, and what you should use instead.
Removed | Replacement |
---|---|
:ALEGoToDefinitionInTab |
:ALEGoToDefinition -tab |
:ALEGoToDefinitionInSplit |
:ALEGoToDefinition -split |
:ALEGoToDefinitionInVSplit |
:ALEGoToDefinition -vsplit |
:ALEGoToTypeDefinitionInTab |
:ALEGoToTypeDefinition -tab |
:ALEGoToTypeDefinitionInSplit |
:ALEGoToTypeDefinition -split |
:ALEGoToTypeDefinitionInVSplit |
:ALEGoToTypeDefinition -vsplit |
ale#engine#ManageFile |
ale#command#ManageFile |
ale#engine#ManageDirectory |
ale#command#ManageDirectory |
ale#engine#CreateFile |
ale#command#CreateFile |
ale#engine#CreateDirectory |
ale#command#CreateDirectory |
(linter) command_chain |
ale#command#Run |
(linter) 'command_callback': 'Foo' |
'command': function('Foo') |
(linter) 'executable_callback': 'Foo' |
'executable': function('Foo') |
(linter) 'address_callback': 'Foo' |
'address': function('Foo') |
(linter) 'language_callback': 'Foo' |
'language': function('Foo') |
(linter) 'initialization_options_callback': 'Foo' |
'initialization_options': function('Foo') |
(linter) 'lsp_config_callback': 'Foo' |
'lsp_config': function('Foo') |
(fixer) chain_with |
ale#command#Run |
You can update your scripts to work with the current or previous versions of ALE by checking the ALE version with ale#Has('ale-2.7.0')
.
The following <Plug>
mappings were previously scheduled for deprecation, but instead will be supported forever, and are now documented again.
<Plug>(ale_go_to_definition_in_tab)
<Plug>(ale_go_to_definition_in_split)
<Plug>(ale_go_to_definition_in_vsplit)
<Plug>(ale_go_to_type_definition_in_tab)
<Plug>(ale_go_to_type_definition_in_split)
<Plug>(ale_go_to_type_definition_in_vsplit)
Removed linter options
The following linter options have been replaced.
ale_psalm_langserver_executable
->ale_php_psalm_executable
ale_psalm_langserver_options
->ale_php_psalm_options
ale_psalm_langserver_use_global
->ale_php_psalm_use_global
make
dry run parsing on BSD
ALE now uses make -n --always-make
for parsing make
dry runs on Linux and BSD. This will not work at all with BSD make
, and there's no way to automatically take the option away for BSD users without making ALE worse on all other systems. BSD users should use let g:ale_c_always_make = 0
to make it work again. This issue does not affect Mac OSX users, because ALE can use !has('macunix')
to disable the option by default for Mac OSX users.
Generic cc
Linter
The existing gcc
and clang
linters have been replaced with a generic cc
linter, which can be selected with any of the old linter names. This combined linter now attempts to run clang
if available, and falls back to running gcc
. See issue #3299 for more information.
New Features
- ALE now supports linting or fixing files via Docker containers, virtual machines, remote file systems, etc. #2556 #3325
%s
and%t
in commands can now be formatted with:h
,:t
,:r
, and:e
, to applyfilename-modifiers
. #2556lint_file
for linters can now be computed dynamically, and from deferred results, so linters and dynamically switch between running only against files on disk, or checking code on the fly. #3285- Parsing
compile_commands.json
for automatically figuring out flags for compilers is now enabled by default, and several improvements have been made to how ALE handles flags for C/C++ linters. - ALE will now show LSP/tsserver hover information in your echo line when your cursor rests on a symbol ALE can get information about. #1532
- ALE now handles some Markdown formatting in hover text, and set syntax highlights when displaying hover text where possible. #3274
- ALE now supports renaming symbols (
:ALERename
) with connected LSP servers that support it, likegopls
. #3047 #3196 #2943 - ALE can now be configured to provide auto-completion with imports for LSP servers. #2976 #3196 #3267
- A new
:ALEImport
command can be used to request imports for words at the cursor. #3268 - You can now disable warnings in
tsserver
completion results, which may not be relevant to you. #2849 - When completion text is inserted, including through
:ALEImport
, a newALECompletePost
event is triggered. #3333 - You can now call
:ALEFix
with a bang (:ALEFix!
) to suppress warnings/errors, such as throughALECompletePost
. #3333 - A new
:ALELintStop
command has been added which lets you stop any linters currently running. #3333 - ALE is able to better recognise when newer LSP servers support capabilities like hover, "go to definition," etc. #2907
- Ignored linters now appear clearly in
:ALEInfo
. #3003
New Linters
AsciiDoc
-languagetool
#3229Python
-pyright
- #2472sh
-bashate
#2732 #3070Swift
-swift-format
#3007 (Not to be confused withswiftformat
, which is a different tool and fixer.)SQL
-sql-lint
#2988Verilog
-hdl-checker
#2804zig
-zls
#3232
New Fixers
Linter Enhancements
pylint
now checks code as you type if you have installed a new-enough version. #2522dockerfile_lint
now shows more useful information in detailed error messages. #3158- The documentation for cloudformation linters has been improved a little bit. #3172
- The
eclipselsp
linter now starts better on more platforms. #3137 ktlint
uses stdin now, so.editorconfig
files can be loaded. #3119 #3029- The
checkstyle
linter now handles options better. #2914 - The
markdownlint
linter now parses more output. #3259 - More
markdownlint
versions are now supported. #3253 - You can now pass options for
markdownlint
#2940 - The
puppet
linter now parses output better. #3223 - The
cppcheck
linter now works with more recent versions ofcppcheck
, and parses column numbers and error codes. - The
govet
linter now works with more recent versions of Go. #3191 - PowerShell linters now work by default when the filetype is
ps1
. #3010 - The
sh
linter will now check scripts with the currentfiletype
if there's no hashbang line. #2906 - You can now set custom target directories for
cargo
withale_rust_cargo_target_dir
. #3164 - The
vlog
linter parses the filename for the errors now. #2924 credo
now recognizes umbrella projects #2759rls
is now enabled by default. #3324gcc
errors from failed macros are now parsed and reported. #3327- The policy name is now included in
vint
messages #3194 - You can now configure
flake8
to try to run from the Python project root. This is the new default. #2858 - The
ember-template-lint
linter now reads from stdin too, for newer versions. #2622
C/C++ flag detection
A wide range of improvements have been made to how ALE detects C/C++ compiler flags.
- Paths from
compile_commands.json
are now resolved in a much better way, which results in a massive improvement in how ALE determines flags for files. #3307 - The
ccls
linter now detectscompile_commands.json
in other directories. #3123 #2621 compile_commands.json
flags can now be used for linting header files. #2919- ALE now tells
clang-tidy
that.h
files are C++ files when the filetype is set to C++ in Vim. #1608 @file
arguments incompile_commands.json
are now handled. #3178-std
flags from_options
settings for C/C++ linters are now replaced by flags parsed fromcompile_commands.json
ormake -n
. #3056- ALE now uses
make -n --always-make
by default on Linux and BSD, to fix issues with ALE not reading flags aftermake
is run. See above notes on breaking changes for BSD. #2038 #3247 -fstack-usage
is now removed from parsed C flags, which breaks linters. #3200-iframework
is now included in parsed C flags. #3057-include
is now included in parsed C flags. #3317
Fixer Enhancements
- The
tslint
fixer should work with newer versions again. #3107 - You can now set
ale_ruby_rubocop_auto_correct_all
to1
to apply unsafe fixes in Rubocop. #3237 - The
rubocop
fixer now fixes via stdin with the filename, which makes the fixes more accurate. #3230 - The
prettier-standard
fixer should now respect configuration files. #2920 - The
prettier
fixer now runs from where.prettierignore
is to ignore files, if available. #3101 - The
standard
fixer should work again. Updates tostandard
broke it. #3046
Bugs Fixed
- The ESLint fixer now users the same directory switching logic that the linter uses, for plugin detection. #3094
- ESLint linters and fixers now search for the location of ESLint and plugins by finding the
node_modules
directory that contains an ESLint executable. #3222 - LSP servers like
mspyls
can respond with invalid hover data, which caused errors in ALE. ALE handles this invalid data now. #3273 - URI encoding/decoding for paths sent to and from LSP servers now handles UTF-8 paths. #3278
- ALE hover messages could send a column index
-1
, which caused some servers to crash. #3294 - ALE now handles LSP servers crashing, and re-sends
initialized
messages when they do. #3294 - When ALE wrote files, it could append extra newline characters when you've configured Vim not to add them. Now they will not be added. #3144
- tsserver completion results from default exports will now insert the name of the default export. #2899
- The
eclipselsp
linter could find the Java path in a broken ...
ALE v2.7.0
Deprecated Features
- Commands named
*InTab
,*InSplit
, and*InVSplit
have been replaced with* -tab
,* -split
, and* -vsplit
instead. The old commands will be removed at some point in the future.
Bugs Fixed
tsserver
completion results weren't returning as many details as they did in the past. #2845- The
crystal-lang
linter was breaking when errors were reported without filenames. #2617 - The PowerShell linter has been updated to continue to work in PowerShell 7. #2889
- Deprecation warnings were breaking parsing of ESLint errors. #2910
- ESLint error parsing was broken for graphql files. #2908
v:errmsg
was polluted when it didn't need to be by ALE sometimes. #3021- ALE was writing the buffer when organising imports or performing completion actions. Now it won't write them. #2811
- The Scala
metals
linter was incorrectly returning0
there's no project root. #3120 - Sign priorities weren't properly set in newer Vim versions.
New Features
- Other completion sources like
asynccomplete
can now apply code actions for completion, such as adding import lines. #2844 - Completion symbols can now be customised to use other characters or strings. See
:help g:ale_completion_symbols
. #2847 - ALE now displays window messages for errors from language servers by default. A preview window will be used for show errors. #2652
- ALE hover messages can be displayed in preview windows by setting
g:ale_set_balloons
to1
. - ALE will now show completion messages in popups if so configured. #2942
- You can now exclude exclude some problems from highlights with
g:ale_exclude_highlights
#2982 - The
ale_default_navigation
setting can be used to control how ALE navigates to new locations from commands. #3019 - Previous selections can now be repeated with the
:ALERepeatSelection
command. #3019
New Linters
- bats -
shellcheck
#3133 - Go -
revive
#2933 - Nim -
nimlsp
#2815 - TypeScript -
standard
#2660 - Terraform -
terraform-lsp
#2758 - Rust -
rust-analyzer
#2837 - Vim -
vimls
#3124
New Fixers
Linter Enhancements
clangd
now automatically sets the compile_commands directory by searching forcompile_commands.json
file or C build directories from settings. #2807- The
clangcheck
linter now uses a no color option for better output. #2700 - The
psalm
language server now accepts command line options. #2819 nimcheck
errors now use a range for errors in some cases. #2887- Some
mypy
notes are now shown by default. They can be disabled by settingale_python_mypy_show_notes
to0
. #2704 mypy
now runs from the same directory asmypy.ini
, if detected. #2385- The
clj-kondo
linter now uses the--cache
argument. #2681 - The
verilator
linter now shows column numbers. #3098 stderr
is now read forkotlinc
. #3120- The
eclipselsp
linter now lets you specify thejavaagent
. #3077 - sourcepaths can now be configured for
javac
. #2972 #3173
Fixer Enhancements
ALE v2.6.0
Bugs Fixed
- ALE now shows more variables that should have been show in
:ALEInfo
. #2686 - ALE now parsers compiler flags from Makefiles and compile_commands.json more strictly. #2590 #2265 #2590
- ALE now handles either
arguments
orcommand
forcompile_commands.json
files. #2123 - The cursor position is now kept in place when loclist windows are automatically opened and closed. #2632
- When ALE fixed files on save in newer Vim versions it would output junk files. This has been fixed. #2711
- The build path for the Erlang Dialyzer linter was wrong. #2653
:ALEFix
wasn't fixing files when only the case of characters had changed. #2744
New Features
- NeoVim's new highlighting API is now used where available. #1274 #2169 #2638
- NeoVim number highlights can now be set, in supported NeoVim versions. #2637 #2678
- ALE now integrates with asyncomplete.vim. #2627
- ALE now supports renaming symbols with
:ALERename
. #2709 - ALE can now organise imports with
tsserver
. #2709 - ALE now supports autocompletion involving adding import lines for
tsserver
. #2709 #2780 - ALE now sets an
ale
sign group and priority in versions of NeoVim or Vim that are recent enough. #2786
Other Changes
- The Deoplete completion source rank is now 1000. #2591
- ALE now completes C++ code on
->
and::
. #2599 - Deoplete now completes on more patterns like
->
and::
. #2601 #2643 - ALE now only resets selections when needed when lists are opened. #2630
- ALE now supports the newer
javascriptreact
andtypescriptreact
filetypes. #2765
New Linters
- Ink -
ink-language-server
#2683 - PureScript -
purescript-language-server
#2572 - Ruby -
debride
#2694,sorbet
#2614
New Fixers
- Ada -
gnatpp
#2631 - C -
clangtidy
#2548 - C++ -
clangtidy
#2548 - C# -
csc
#2586 - D -
dfmt
#2662 - Haskell -
hindent
#2462 - Nix -
nixpkgs-fmt
#2676 - Ruby -
sorbet
#2614 - Scala -
metals
#2735 - SQL -
sqlformat
#2702
Linter Enhancements
- The checkstyle configuration file is now detected more capably. #2591
javalsp
options are now configurable. #2600- The
powershell
linter now handles some output it didn't handle before. #2588 - The
mcsc
linter now handles more output. #2586 - Rust
clippy
options are now easier to configure. #2618 - The Elm language server linter has been updated to match recent changes to the Elm language server. #2750
GO111MODULE
can now be overwritten for all of the Go tools ALE supports. #2430- ALE now captures
stderr
formypy
output in case a serious error appears, so it can be seen in:ALEInfo
. #2706 - The
black
fixer includes--pyi
for files with the.pyi
extension. #2705 - The
sh
linter for checking shells now handles error messages for other locales, such as Chinese or Russian. #2741 languagetools
options are now configurable, so--autoDetect
can be removed or replaced with a specific language. #2616- The
mdl
linter now reads JSON output with improved error details and an errorcode
. #2691 - ALE now searches
node_modules
forsemistandard
also. #2784 - The
psalm
language server linter now runs via thepsalm
executable. #2659 - Makefile output can now be used for
clang-tidy
. #2771 - The vlog linter has been updated to handle a new error format. #2813
- The
tflint
linter now handles a newer error format, in addition to that older ones. #2775
Fixer Enhancements
ALE v2.5.0
Bugs Fixed
- ALE no longer tracks if LSP linters are busy, and thus allows loclist windows to close automatically. #2460
- The
ale_disable_lsp
setting wasn't applied if you didn't also ignore something else. - The
ale_disable_lsp
setting wasn't applied to diagnostic callbacks if you had previously run language servers. - ALE's handler for language server diagnostics could display results for a directory in a file. This has been fixed. #2524
- ALE no longer lints on save if
ale_lint_on_save
is set to0
after fixing a file withale_fix_on_save
. #2497 - When jumping through problems, problems at column 0 are treated as if they were at column 1, so jumping through them works. #1317
- Turning ALE's automatic completion on could stop Ctrl+O working in Insert mode. This should now only happen right before the completion menu is about to open automatically. #2535
- Completion positions were off by 1 in many cases. Completion results should be greatly enhanced now. #2544
tsserver
diagnostics were off by 1 on the last character. #2551- ALE now prints a friendly message when you try to use
:ALEInfoToClipboard
and no clipboard is available. #2438 - The
checkstyle
error parser now stops after finding results in the newer format, so it doesn't show some errors twice. #2543 - Highlights weren't being removed when set up in other character cases, such as all lowercase. #2555
- In order to better support environments like MSYS, ALE now converts backslashes in paths in Unix to forward slashes, even though they are valid characters for filenames in Unix. #2525
- ALE now updates loclists for all windows showing a buffer, instead of just the first one. #2253
- Linters that have been previously defined with the same name for the same filetype are now replaced. #1727
New Features
- Fixers can be prevented from being run automatically on save with the new
ale_fix_on_save_ignore
setting. #1930 - ALE can now apply fixes to buffers that aren't currently open in Vim versions with the
deletebufline
function. #1739 - ALE now integrates with Deoplete for offering completion results, in addition to ALE's own completion implementation. #1753 #2492
- ALE now offers an
omnifunc
completion function. (set omnifunc=ale#completion#OmniFunc
) #2285 - ALE's automatic completion implementation can now be disabled for specific buffers by using
let b:ale_completion_enabled = 0
. - ALE now updates the tagstack when jumping from one file another by default. #2448
- ALE now use's NeoVim's highlighting API, where available, instead of Vim's. Highlights in newer versions of NeoVim are now adjusted as lines move around as a result. #2169 #2475 (REMOVE FROM NOTES if this isn't done in time. Taken out for now.)
- ALE now tells language servers documents are closed when buffers are deleted. #829
- ALE now tells language servers which features are supported by ALE. #2515
- You can now send custom request to language servers ALE knows about with
ale#lsp_linter#SendRequest
. #2549
Other Changes
- Newlines are now removed for language server messages with newlines, but kept in detailed messages. #2425
- ALE now displays simple messages instead of detailed messages in virtualtext. #2434
- ALE now uses the
'S'
flag forwritefile
to avoid using fsync calls for temporary files it creates, which may improve performance for some machines. - ALE now lints when leaving insert mode and not while in Insert mode by default.
b:ale_lint_on_insert_leave
can now be set to0
to disable linting when leaving insert mode for particular buffers.
New Linters
- Chef -
cookstyle
#2362 - Clojure -
clj-kondo
#2377 - CSS -
fecs
#2394 - Erlang -
dialyzer
#2509 - Haskell -
floskell
#2437 - HTML
fecs
#2394 - LaTex - Texlab #2500
- Java -
eclipselsp
#2121 #2523 #2520 - JavaScript
fecs
#2394 - PowerShell -
powershell
#2413 - ReasonML -
reason-language-server
#2431 - Swift -
sourcekit-lsp
#2420 - Terraform -
terraform
#2529 - TypeScript -
xo
#2453
New Fixers
- LaTex -
latexindent
#2387 - OCaml -
ocp-indent
#2436 - Python -
reorder-python-imports
#2567 - R -
styler
#2401 - SQL -
pgformatter
#2540
Linter Enhancements
rls
now find the toolchain to use automatically. Ifrls
no longer starts for you, uselet g:ale_rust_rls_toolchain = 'rls'
. #2432- The
stack
andcabal
linters now set the working directory to where the file is. #2345 - The working directory for
shellcheck
is now set to the buffer's directory by default. #2446 phpstan
problems are now marked as errors. #2444phpstan
now only sets a default level if no configuration file is found. #2444- The autoload file for
phpstan
can now be set withale_php_phpstan_autoload
#2491 - numeric errors codes for
pylint
can now be used instead of symbolic errors codes withlet g:ale_python_pylint_use_msg_id = 1
. #2445 - The ESLint linter now respects the
ale_warn_about_trailing_whitespace
setting. - ALE now reads JSON output from ESLint and ESLint-derived linters for highlighting ranges. #2551
- ALE now uses
ale_javascript_eslint_options
for fixing code with ESLint too. #1989 - Syntax errors for puglint are now handled and printed. #791
phpcs
errors are now reported as style errors. #908gcc
linters now use-o /dev/null
or-o nul
so all errors are caught. #2512- ALE now searches in build directories to find
compile_commands.json
#2421 cppcheck
now usescompile_commands.json
found in build directories. #2359cppcheck
now runs from the file's directory with-I
when a buffer is modified. #2506gcc
errors for inlined functions are now indicated more clearly. #2516- Python project roots are now found based on the location of
.flake8
, instead offlake8.cfg
. #2502 - The
checkstyle
linter is now much more configurable. #2542 - You can now pass options for
clang-tidy
itself withale_c(pp)_clangtidy_extra_options
. #2566 xml
linters are now run onxsd
andxslt
filetypes by default. #2565- The
cargo
linter now shows detailed error messages forclippy
errors. #2559 - The Java language server can now be launched with either the language server's own binary, or Java. There is no default executable any more. #2558
rmarkdown
files now run R linters by default and suggest R fixers.
ALE v2.4.1
Bugs Fixed
- ALE will no longer lint buffers used for displaying diffs. #2399
- ALE will no longer throw errors when
shortmess
can't be set up to truncate messages. #2417 - Some language server linters could mention a deprecation warning for language_calllback incorrectly.
- The DMD linter file had a test function in it which could stop the script from loading. #2433
- The kotlinc command callback was broken in 2.4.0 when Maven and Gradle are missing. #2440
- tsserver and LSP linters weren't being marked as inactive when results were received. #2415
- #2351 meant that previous settings for sign text with trailing spaces no longer worked. The trailing spaces will be stripped off again automatically. #2452
javac
errors containing colons are now correctly handled. #2134
ALE v2.4.0
Deprecated Features
- Some functions have been renamed, and are deprecated. Use the new functions instead. #2132
ale#engine#CreateDirectory
has been renamed toale#command#CreateDirectory
ale#engine#CreateFile
has been renamed toale#command#CreateFile
ale#engine#EscapeCommandPart
has been renamed toale#command#EscapeCommandPart
ale#engine#ManageDirectory
has been renamed toale#command#ManageDirectory
ale#engine#ManageFile
has been renamed toale#command#ManageFile
'executable_callback'
for linters has been deprecated. Use'executable'
with a Funcref instead. #2132'command_callback'
for linters has been deprecated. Use'command'
with a Funcref instead. #2132'command_chain'
for linters has been deprecated. Useale#command#Run
instead. #2132'project_root_callback'
for LSP linters has been deprecated. Use'project_root'
with a Funcref instead. #2132'address_callback'
for LSP linters has been deprecated. Use'address'
with a Funcref instead. #2132'language_callback'
for LSP linters has been deprecated. Use'address'
with a Funcref instead. #2132'initialization_options_callback'
for LSP linters has been deprecated. Use'initialization_options'
with a Funcref instead. #2132'lsp_config_callback'
for LSP linters has been deprecated. Use'lsp_config'
with a Funcref instead. #2132'chain_with'
for fixers has been deprecated. Useale#command#Run
with a Funcref instead. #2132
Bugs Fixed
- End column positions for LSP diagnostics were off by 1. #2223
- Hover, go to definition, and references are off by one. #2224
- ALE now correctly responds to the response to an LSP
initialize
message with aninitialized
notification. This was breaking some language server integrations. #2295 - ALE now always starts jobs with
cmd /c
on Windows so NeoVim works in PowerShell. #2009 - virtualtext for NeoVim is now correctly cleared when using disabling ALE linting via commands. #2307
- URIs like
file:/foo/bar
andFILE:///foo/bar
are handled now. #2300 - Windows URIs with pipes like
file://C:|foo
are now translated toC:\foo
. - Windows URIs where the drive letter is encoded are now handled, even though the drive letter shouldn't be encoded. #2357
- Java projects without
src/main/java
now addsrc/test/java
for test files. #2305 - ALE now avoids a bug in versions of Vim where
getcurpos()
causescurswant
to be changed, which can cause the cursor to move around strangely. #2330 - Rust error message end columns were off by 1. #2325
- Manual completion with
:ALEComplete
no longer replacescompletopt
like automatic completion does. #2326 ale_completion_max_suggestions
now correctly limits the number of results from LSP completion servers.- Spaces and backslashes can now be used for sign text. #2351
- LSP reference responses will a null result are now handled. #2402
- Opening the location list in a vertical list now forces it opening to the bottom or right, so it won't steal focus. #2368
New Features
- Linter and fixers executables and commands can be deferred from an arbitrary number of asynchronous results using the new
ale#command#Run
function. See:help ale#command#Run
. :ALEDocumentation
can now be used to request documentation at your cursor withtsserver
only. #1520:ALEGoToDefinitionInSplit
and:ALEGoToDefinitionInVSplit
can now be used for opening definitions in split windows. #2141- ALE now centers the screen and forces a redraw after jumping to a new location for going to a definition, etc. #2277
tsserver
results for:ALEFindReferences
now show text from the lines found. #2173- You can now use
:ALEFindReferences -relative
to show results with relative paths. #2238 - You can now use
:ALESymbolSearch -relative
to show results with relative paths. #2255 - Completion results can now be requested manually with the
ALEComplete
command or with the<Plug>(ale_complete)
key. #2177 #2189 - The shell and shell command used for jobs run by ALE can now be overridden via settings. #2167
- Project path detection for LSP tools can now be overridden with settings. #2241
- When moving through problems, the type of problems can now be filtered. #2279
'executable'
for linters can now be set to aFuncref
for calculating the executable string. #2132- All LSP and tsserver linters can now be disabled entirely with
ale_disable_lsp
, while leaving other linters enabled. #2403
Other Changes
compile_commands.json
file processing is now cached and ALE spends a lot less time processing the files. #2161compile_commands.json
file processing now uses the build directory as taken from the compilation database, for more accurate results. #2191- C flag processing from
compile_commands.json
andmake -n
is now much better in general. #2194 #2168 #2131 #2272 - semver version parsing now handles versions without the patch number, even though this goes against the semver spec. #2216 #2355
New Linters
- Asciidoc -
textlint
#2193 - BibTeX -
bibclean
#2061 - Cyhper -
cypher-lint
#2270 - Elm -
elm-lint
#2378 - LaTeX -
textlint
#2234 - Go -
bingo
#2165 - Mail -
languagetool
#2155 - Markdown -
languagetool
#2155 - PowerShell -
psscriptanalyzer
#2370 - Python -
bandit
#2250 #2303,pydocstyle
#2085,pylama
#2266 - Racket -
raco
#2146 - ReStructuredText -
textlint
#1978 - Ruby -
standardrb
#2133 - SugarSS -
stylelint
#2219 - Text -
languagetool
#2155 - Verilog -
vlog
#2229,xvlog
#2229 - VHDL -
ghdl
#2229,vcom
#2229,xvhdl
#2229
New Fixers
Linter Enhancements
- The
javalsp
linter should now be set up with a new distribution system. #2119 #2284 - The
sasslint
linter is now configurable, and will use a local installation if present. #2077 - The
swiftlint
linter will now use a Pod-managed install if available. (#2122) - More output for
perl
is now handled. #2150 black
can now be run viapipenv
. #1988- The elm
make
linter will now find problems in test files for versions 0.19 and up. #2176 pyls
is now configurable. #2230- Shell linters now handle
ksh
better. #2245 - You can now override the
shellcheck
dialect withale_sh_shellcheck_dialect
. #2289 stack ghc
options can now be configured withale_haskell_stack_ghc_options
. #2235- Older style
flake8
output is now handled to support thehacking
plugin. #2215 elm
files can now be checked withelm-test
. #2225- The
alex
linter now handles HTML content better. #2268 - The
alex
linter's executable can now be configured. #2268 - Separate instances of
tsserver
are now run for nestedtsconfig.json
files. #2290 pylint
now runs from the project directory by default, or the buffer directory if no project can be found. #2302- The
rls
options are now configurable. #2332 credo
can now be set to--strict
mode. #2337- The location of the composer configuration file is now used for finding the PHP project directory for PHP languagserver too. #2391
jsonlint
now supports local executables like other JS linters. #2363gotype
now uses the-e
option to include all errors. #2340
Fixer Enhancements
ALE v2.3.1
Bugs Fixed
- The changes for
scalac
for finding more problems brokescalac
linting completely for some users, and has thus been reverted. #2093 lacheck
results are now filtered by the filename, so only results for the current file are reported. #2136gqlint
now runs from the buffer's directory so the configuration files can be found. #2153- Some
--ignore-pattern
messages weren't being handled forale_javascript_eslint_suppress_eslintignore
. #2192 - The
flow
linter wasn't showing the original error messages in the detailed error message strings. #2263 - The project root function could cause potentially infinite loops for the
hie
linter. This has been fixed. #2276