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. #3807 #3894
- The sign column wasn't being kept open when configured in NeoVim 0.5. #3832
- Empty hover messages could trigger errors in ALE. #3889
- Code fixes for
tsserver
or language servers now identify errors that came from the server instead finding other errors from other tools. #3901 - Code fixes could sometimes cause errors because end line number and column numbers could be missing. This has been fixed. #4062
pydocstyle
wasn't checking files outside of the root of the project correctly. #3995