Releases: dense-analysis/ale
ALE v4.0.0
NOTE: Release archive files are for enabling AppVeyor test runs.
Deprecated Features
:ALEInfo'enhancements have led to some deprecations. See new features below. #3368:ALEInfoToClipboardhas been deprecated in favour of:ALEInfo -clipboard.
Removed Features / Breaking Changes
golinthas been removed, as it represents long ago been deprecated and frozen. #4535gometalinterhas been removed, as it has been unsupported for a long time now. #4534- The minimum supported Neovim version is now 0.7.0, though ALE may still happen to work with Neovim versions lower than 0.7.0.
- ALE will no longer look for
ve-py3as a virtualenv directory by default. #4481 - The old
g:ale_linters_sh_shell_default_shelloption has been removed, and users should useg:ale_sh_shell_default_shellinstead. - The
ale_lsp_rootoption has been removed. Useale_rootinstead.
New Features
- virtual-text has been greatly enhanced in many ways since the last version.
- virtual-text highlights are styled to look like comments in code by default in compatible Vim versions, so they look very subtle when editing code. #4401
- You can use
let g:ale_python_auto_virtualenv = 1to automatically updatePATHbased on Python virtualenv locations to run executables. #2172 - Better floating window borders are now used in Neovim. #4417
- virtual-text messages can be vertically aligned to be easier to read with
g:ale_virtualtext_columnandg:ale_virtualtext_maxcolumn. #4473 - virtual-text can be configured to only show the first error with
g:ale_virtualtext_single. #4473- This is now the default setting, as it makes editing files less annoying.
- ALE now uses a defined order for virtualtext problems on a single line.
- The most severe problems are shown first, such as errors instead of warnings.
- If two problems lie on the same line and are equally severe, ALE shows the first problem by column position on the line.
- ALE now uses a separate
ale_signsgroup for signs as to not disturb virtual text messages which use the groupale. #4704
- Floating previews are now closed when you leave a buffer or scroll. #4409
- ALE now sends diagnostics to Neovim's diagnostics API by default in compatible versions of Neovim. #4345 #4442 #4442 #4597 #4921
- You use
let g:ale_use_neovim_diagnostics_api = 0to disable this behavior.
- You use
- In Vim 8.2.3874 and up
numhlhighlights are now supported. #4578 - In supported Vim versions ALE uses the
ModeChangedevent instead ofInsertLeaveemulation with a timer to run linters when leaving insert mode, which is less buggy and more efficient. #4738 - ALE more efficiently fixes files in Neovim by using
nvim_buf_set_lines. #3974- This avoids issues with Treesitter, but a known issue is this resets the jumplist and can disturb the cursor position. See #4735.
- You can now automatically save changes to hidden buffers when LSP commands are run with
let g:ale_save_hidden = 1. :ALEInfohas been supercharged with a new set of features. #3368- Permit
:ALEInfo -clipas a shorthand for:ALEInfo -clipboard - Support
:ALEInfo -previewto render in the preview window - Support
:ALEInfo -echofor the classic:ALEInfomode - Change the default mode to
'preview', and make it configurable. See::h ale_info_default_mode. - Add syntax highlighting for
:ALEInfoin preview mode. - Add a convenience to look up documentation that explains itself.
- Don't show an empty
Linter Variablessection. :ALEInfono longer reports information about its own window. #4618
- Permit
- ALE now defaults
g:ale_disable_lspto a new'auto'mode. With this setting applied, ALE will now check for the presence of thenvim-lspconfigplugin and automatically turn off particular linters if already configured vianvim-lspconfig. - ALE now has an
ALEStopLSPcommand to stop all language servers with provided names so only specific language servers can be stopped with a command. - When jumping to locations through
:ALEGoTo...commands ALE will now present the user with a list of choices if more than one location is available. #4755 ale#floating_preview#Show, while not officially supported as part of ALE's API, now returns the preview window ID so you can more easily work with it. #4828- Matched text now appears in quickfix for
:ALEFindReferences -quicfixfortsserver. #4898 - If an ALE linter
callbackreturns anything other than aListALE will now silently treat the output as if it was an empty list. #4912
New Linters
- Astro -
eslint#4780,prettier#4780 - ASM -
llvm-mc#4446 - Bazel -
buildifier#4529 - C -
clangcheck#4662 - C3 -
c3lsp#4836 - Cairo -
sierra#4530,scarb#4669 - CSS -
biome#4701 #4705 #4775 #4773 #4774 #4902 - Dockerfile -
dockerlinter#4518 - Elixir -
lexical#4580 - ERB -
htmlbeautifier#4751 - Gleam -
gleamlsp#4696,gleam format#4710 - Glimmer -
embertemplatelint#4653 - GraphQL -
biome#4701 #4705 #4775 #4773 #4774 #4902 - Groovy -
npm-groovy-lint#4495 - HTML -
djlint#4909,eslint#4428 - Hurl -
hurlfmt#4741 - JavaScript -
biome#4701 #4705 #4775 #4773 #4774 - JSON -
biome#4805 #4775 #4773 #4774 - Lua -
lua-language-serverf2a21c9 - Markdown -
marksman#4565,pymarkdown#4906 - Nix -
deadnix#4443 - Odein -
ols#4679 - Python -
pycln#4415 - Ruby -
packwerk#4594,steep#4671 - TypeScript -
biome#4701 #4705 #4775 #4773 #4774 - Verilog -
slang#4713 - YAML -
yq#4861 - Yara -
yls#4886
New Fixers
- Astro -
eslint#4780,prettier#4780 - APKBUILD -
apkbuild-fixer#4881 - Clojure -
cljfmt#4860 - CSS -
biome#4701 #4705 #4775 #4773 #4774 #4902 - Erlang -
erlang-mode#4848,erlfmt#4868 - Go -
golangci-lint#4853,gopls format0af4899 - GraphQL -
biome#4701 #4705 #4775 #4773 #4774 #4902 - Groovy -
npm-groovy-lint#4495 - HTML -
rustywind#4477 - Haskell -
fourmolu#4501 - Hurl -
hurlfmt#4741 - JavaScript -
biome#4701 #4705 #4733 #4775 #4774 #4799 - JSON -
biome#4805 #4775 #4774 #4799 - Nickel -
nickel format#4665 - Nix -
alejandra#4435 - OpenSCAD -
scadformat#4808 - Python -
json.tool#4847,pycln#4415,ruff format#4645 - Ruby -
erb-formatter#4546,rubyfmt#4678 - Solidity -
forge#4598 - TypeScript -
biome#4701 #4705 #4733 #4775 #4774 #4799 - YAML -
yamlfmt#4587,yq#4861
Linter Enhancements
- The following changes have been make to update ALE for better linter compatibility in newer versions.
nixversions before 2.4 should be supported as well as newer versions. #4398- The filename is made known to
ruffin version 0.0.69 and up. #4414 - ALE has been updated to run
ruffwithruff checkin versions 0.3.0 and up to make it compatible with those versions. #4732 #4802 - ALE now uses
--no-fixwithruff checkso it doesn't modify files when linting. #4759 ansible-linthas been patched to work with versions 6.11.0 and newer. #4492- The VSCode JSON language server now works with newer versions that use the
vscode-json-languageserverexecutable name instead ofvscode-json-language-server. #4601 - ALE has been updated to work with
solhintversions newer than 3.4.0, as well as older versions. #4499 - ALE has been updated to work with newer
ruffversions. #4632 - ALE has been updated to work with newer
phpmdversions. #4617 - The
volarlinter has been updated to work with version 1.0, and uses the global executable by default, which is required for Volar to function properly. #4552 - ALE now handles
stylelinterror messages from stderr as well as stdout. This makes ALE support newer as well as older versions. #4702 - ALE now uses JSON output in
shellcheckversions 0.7.0 and above for creating more accurate highlights for problems. #4692 - ALE now supports
sqlfluff3.0.0 and up, in addition to older versions. #4743 jqlinter error message parsing has been updated to handle output from versions 1.6 and up. #4862phpstanwill now set the memory limit more appropriately for newer versions. #4900
phpstanwill now set use the cwd to find the configuration file so configuration files are detected better. #4422phpstanfilenames will now be mapped correctly so it matches files better when run from inside of Docker. #4685pyrightcan now be automatically be run via poetry, pipenv, venv. #4389 #4491 #4865- Python linters can now be run via
uv. #4825 #4865 golangci-lintis no longer configured with--enable-allby default so it does not conflict with project configuration files and fail to run. #4488golangci-lintis now enabled by default. #4536golangci-lintnow lints the package by default, as Go can implicitly reference symbols from other files. #4730golangci-lintmessages are now read from JSON output for more accurate parsing of linter output. #4917bicepcan now be run via Azure CLI via anaz_biceplinter using theazcommand. #4496- The Ruby
erblinter uses keyword arguments to avoid a deprecation warning and make it compatible with future Ruby versions. #4521 cspellhas been updated to highlight the whole word. #4556- The
glsllanglinter parsing has been updated to catch more errors. #4540 - The
xmllintlinter has been updated to work on XML files that haven't been saved yet. #4585 #4884 - ALE now runs
actionlinton GitHub configuration files by default by searching upwards for a.githubdirectory. actionlintnow respects project configuration files by linting in the directory instead of a temporary location. #4584actionlintwill be run with an appropriate configuration file. #4858actionlintnow lints one file at a tim...
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
textEditbut noinsertTextFormat. #4124 b:ale_shellandb:ale_shell_argumentscan now be used to set shell options
per-buffer. #4146- ALE now advertises
codeActionLiteralSupportso language servers such as
rust-analyzerreturn code actions to ALE. #4163 - An
ALEGoToImplementationcommand 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_cborerr_cbfor jobs to swallow messages to
prevent Vim from excessively polling results. #4259 - ALE now outputs
virtual-textmessages in Vim 9. #4281 #4291 virtual-textmessages can be shown for all lines, not only the line the cursor
is on, by settingale_virtualtext_cursor = 'all'. #4289virtual-textmessages 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
--lintoptions forawk. #4114 rust-analyzercan now be run for non-Cargo projects. #4118- ALE now reports errors from a
ghcpanic. #4145 pylamaoutput handling has been improved #4106- The default list of YAML linters is now
spectral,yaml-language-server,
andyamllintto avoid running linters specialised for particular
applications of YAML. #4178 - ALE now runs
vimlsforVaderfiles by default, and the default list of
linters forVaderfiles is to runvimls. #4201 - ALE now distinguishes between warnings and errors for
golangci_lint. #4182 - ALE now supports newer
ansible-lintversions. #4188 - ALE now checks for
.mypy.inito 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
detailis not empty
forterraform validate. #4157 - YAML
actionlintoptions can now be configured with
ale_yaml_actionlint_options. #4216 - ALE now runs
dart analyzewith--fatal-infosto capture more information.
#4237 - ALE now searches for
deno.jsonanddeno.jsoncto detect a Deno project
root. #4306 - The
volarlanguage server executable name now defaults to
vue-language-server, which is its current name. #4308 clj-kondois now run with a filename hint to get more accurate problems.
#4315- ALE now uses header-specific filetype options for
clangto improve on
the accuracy of problems ALE reports. #4318 #4334 - ALE now includes
pyrightconfig.jsonandpyrightconfig.tomlin the list of
files it uses to find a Python project root. #4321 - ALE now sets the
cwdforpylspand Pyright to the detected or manually
configured project root to fix incorrect import errors produce by either
pylspwith themypyplugin, or by Pyright. #4388 ruffis now enabled as a linter for Python by default.- Options can now be configured for
hadoint. #4353 --configis now explicitly set forcheckmateso it loads the correct
configuration file. #4351- The executable for
markdownlintis now configurable. #4358 nixversions 2.12 and up are supported properly now. #4394
Fixer Enhancements
shfmtnow runs with-filename=and no other options by default to
use.editorconfigsettings. #4244dprintis now suggested for more filetypes. #4320clang-formatis now suggested for more filetypes. #4367
Bugs Fixed
:ALEImportshould 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_executablewas 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-lintreturns no output. #4373
ALE v3.2.0
Special Notes
- The
pylslinter has been removed because it's no longer maintained, and it has been replaced with thepylsplinter. #3810 - The
dartanalyzerlinter has been removed because the Dart team discourages its use over built-in tools instead.
Deprecated Features
- The
ale_lsp_rootsetting is now deprecated, and you should replace it withale_rootinstead. #3599
New Features
:ALEGoToTypeDefinitionis now supported fortsserver. #3545- You can now rename TypeScript files with the
:ALEFileRenamecommand. #4012 - You can now manually populate loclist and quickfix with
:ALEPopulateLocListand:ALEPopulateQuickfix, respectively. #3761 - You can now send found references to quickfix with
:ALEFindReferences -quickfix. #4033 - Linters and fixers can now set their
cwdseparately 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
ALELSPStartedautocommands after language servers start. #3878 - ALE now supports virtual text in Vim 8.2 when
g:ale_virtualtext_cursoris 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/didSavenotification for language servers where supported to support more language servers like Godot. #3923 - ALE now only sends
textDocument/didSaveif the language server supports it. #3930 #4008 textDocument/didSaveis now dispatched after files are saved due to a rename, and ALE now respects the value ofhiddento determine if other files modified should be written or not. #4049g:ale_open_list/b:ale_open_listcan 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
verilatorlinter now includes the directory the file is in. #3500 _optionsyou define for themypylinter 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
valelinter. #3594 - The
-Targument was removed from therubycommand to support Ruby 3.0 and above. #3537 ansible-lintshould now print more warnings and errors for files with newer versions. #3601- The
texlablinter now defaults to using the.gitproject directory as the default project path. #3610 - The
texlabLSP settings are now configurable. #4027 _optionscan now be set for thepylslinter. #3620goplsis now used for Go by default, and is automatically run fromGOPATHif installed locally.staticcheckis automatically run fromGOPATHif installed locally.- The
staticchecklinter for Go now defaults to linting the entire package at once. #3799 lintrnow runs for more projects by avoiding the--vanillaoption. #3727tflintreads from stdin now, which yields better results when linting. #3717eslintnow runs from Yarn sdk directories too. #3684- The
angularlinter now works for HTML files on Linux in more cases. - The
phpstanlinter now detectsphpstan.neon.distconfiguration files. #3765 - The
phpstanlinter now supports multi-line errors. #3686 - The
phpstanlinter now supports setting--memory-limit. #3973 - Local executables for
phpstancan now be used. #3809 - The
psalmlinter now searches for the project root based on wherecomposer.jsonis. #3979 - The
racolinter now includes thefilenamein the loclist. #3777 - The
rpmlintversion 2.0.0 and above is now support. #3757 - All
checkstyleproblems are now style problems. #3780 - The R language server linter now considers
.Renviron#3744 - The
solclinter now works with more versions. #3763 ansible-lintworks with more recent versions. #3786ansible-lintcolors are now always disabled so problems are parsed better. #3811ansible-lintnow runs only against files on disk for more accurate results. #3846- More recent versions of
hadolintare supported. #3678 hadolinterror codes are now only included if available. #3943- The Python linters now consider
.tool-versionswhen looking for the project root. #3820 #3826 poetryis now supported for running Python linters. #3834- The column number is now read from
elrcto produce more accurate problem locations. #3823 - The
clj-kondolinter options are now configurable. #3812 - More
clj-kondomessages are parsed correctly. #3946 - The
denolinter now supports setting theimportMap. #3827 - Older
cppcheckversions are now supported. #3887 - More
cppcheckproblems are parsed, such as problems from plugins. #3980 cppcheckshould only run on the current file only to make it faster. #3983 #3987cppcheckis only used to check headers included in a source file now. #3983- The
pyrelinter now runs more consistently. #3895 #3900 - The
circlecilinter now avoids checking for updates so it runs faster. #3902 - The
rubocopfixer now avoids loading the--configfile so it's easier to run it in Docker. #3916 smllinters now handle more errors. #3860 #3957- Newer versions of Ruby are supported for type checking by removing
-T1. #3538 elvisproblems are now style problems. #3976alexnow uses--stdinto check for problems while you type. #3982- More
checkmakeversions are supported. #3986 - Newer versions of
reekare supported. #4010 - The
hlslanguage server can now be configured. #4038 - More
nixversions are supported. #4045 - Stable commands are used to run
rustcnow by default, instead of commands for nightly builds. #4087
Fixer Enhancements
clang-formatcan now be configured to use a particular style, or local style file. #3587prettiercan now be used with Ruby code if you have the right plugin installed. #3593cmake-formatnow reads from stdin, which enables it to use configuration files for projects. #3725- The
isortfixer now includes the filename in the arguments for better results. #3815 #3942 - The Dhall fixers now read from stdin. #3868
poetryis now supported for running Python fixers. #3834 #3898uncrustifynow 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
terraformlinter 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
blackfixer for Python didn't build its command string correctly. #3759 -includeand-imacrosnow 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
:ALERenamenow 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
ALECodeActioncommand, 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
tsserverwith theg:ale_lsp_suggestionssetting #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
noselectforcompleteoptif 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
bibcleanlinter now parses more errors #3367 - Maven wrappers can now be run more easily #2934 #3374
- The
shlinter now looks at Vim's buffer-local variables to determine the shell type #3427 eslintandtsserverwill now automatically be run from.yarn/sdks#3435- The
phpcslinter now parses more errors #3282 - The
shellchecklinter now respectsshellcheckdirectives #3216 - The
sorbetlinter now defaults to disablingwatchman, which requireswatchmanto be separately installed #3403 - The
elrclinter 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
-imacrosflags are now included for linting with C compilers #3430- The
dafnylinter now has a time limit setting and parses more errors #3475 xooptions can now be customised #3148- The
swipllinter for Prolog parses error messages from newer versions swipl - Jar files for running eclipselsp are included more reliably #3559
- The
nixlinter works with newer versions of Nix #3227 - The
dialyzerlinter's options can now be configured #3425 - The
cloudformationlinter 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
gofmtnow runs via stdin, which helps with running it via Docker. #3381- The
isortfixer now works withpipenv#3386 scalafmtis now suggested forsbt#3399- The
xofixer now fixes files via stdin #3148 xooptions can now be customised #3148- The
standardrbfixers 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
checkstylelinter now checks errors properly in NeoVim on Windows. #3467 - The
dafnylinter now returns results for the correct filenames. #3390 #3557 - The
phanlinter now returns results for the correct filenames. #3529 rust-analyzernow sends options in the initial configuration so the server recognises them #3453clang-tidyrespectcompile_commands.jsonbetter for header files #3551- The Java tools fixer now longer throws errors when no Maven executable can be found #3547
- ALE wasn't parsing
Makefileoutput unless there were already some compiler flags #3574 - An index error in the
javaclinter has been fixed. #3706
ALE v3.0.0
Deprecated Features
- The
g:ale_completion_tsserver_autoimportoption has been deprecated. Useg:ale_completion_autoimportinstead.
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_executableale_psalm_langserver_options->ale_php_psalm_optionsale_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
%sand%tin commands can now be formatted with:h,:t,:r, and:e, to applyfilename-modifiers. #2556lint_filefor 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.jsonfor 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
:ALEImportcommand can be used to request imports for words at the cursor. #3268 - You can now disable warnings in
tsservercompletion results, which may not be relevant to you. #2849 - When completion text is inserted, including through
:ALEImport, a newALECompletePostevent is triggered. #3333 - You can now call
:ALEFixwith a bang (:ALEFix!) to suppress warnings/errors, such as throughALECompletePost. #3333 - A new
:ALELintStopcommand 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
pylintnow checks code as you type if you have installed a new-enough version. #2522dockerfile_lintnow shows more useful information in detailed error messages. #3158- The documentation for cloudformation linters has been improved a little bit. #3172
- The
eclipselsplinter now starts better on more platforms. #3137 ktlintuses stdin now, so.editorconfigfiles can be loaded. #3119 #3029- The
checkstylelinter now handles options better. #2914 - The
markdownlintlinter now parses more output. #3259 - More
markdownlintversions are now supported. #3253 - You can now pass options for
markdownlint#2940 - The
puppetlinter now parses output better. #3223 - The
cppchecklinter now works with more recent versions ofcppcheck, and parses column numbers and error codes. - The
govetlinter now works with more recent versions of Go. #3191 - PowerShell linters now work by default when the filetype is
ps1. #3010 - The
shlinter will now check scripts with the currentfiletypeif there's no hashbang line. #2906 - You can now set custom target directories for
cargowithale_rust_cargo_target_dir. #3164 - The
vloglinter parses the filename for the errors now. #2924 credonow recognizes umbrella projects #2759rlsis now enabled by default. #3324gccerrors from failed macros are now parsed and reported. #3327- The policy name is now included in
vintmessages #3194 - You can now configure
flake8to try to run from the Python project root. This is the new default. #2858 - The
ember-template-lintlinter 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.jsonare now resolved in a much better way, which results in a massive improvement in how ALE determines flags for files. #3307 - The
cclslinter now detectscompile_commands.jsonin other directories. #3123 #2621 compile_commands.jsonflags can now be used for linting header files. #2919- ALE now tells
clang-tidythat.hfiles are C++ files when the filetype is set to C++ in Vim. #1608 @filearguments incompile_commands.jsonare now handled. #3178-stdflags from_optionssettings for C/C++ linters are now replaced by flags parsed fromcompile_commands.jsonormake -n. #3056- ALE now uses
make -n --always-makeby default on Linux and BSD, to fix issues with ALE not reading flags aftermakeis run. See above notes on breaking changes for BSD. #2038 #3247 -fstack-usageis now removed from parsed C flags, which breaks linters. #3200-iframeworkis now included in parsed C flags. #3057-includeis now included in parsed C flags. #3317
Fixer Enhancements
- The
tslintfixer should work with newer versions again. #3107 - You can now set
ale_ruby_rubocop_auto_correct_allto1to apply unsafe fixes in Rubocop. #3237 - The
rubocopfixer now fixes via stdin with the filename, which makes the fixes more accurate. #3230 - The
prettier-standardfixer should now respect configuration files. #2920 - The
prettierfixer now runs from where.prettierignoreis to ignore files, if available. #3101 - The
standardfixer should work again. Updates tostandardbroke 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_modulesdirectory that contains an ESLint executable. #3222 - LSP servers like
mspylscan 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
initializedmessages 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
eclipselsplinter could find the Java path in a broken ...
ALE v2.7.0
Deprecated Features
- Commands named
*InTab,*InSplit, and*InVSplithave been replaced with* -tab,* -split, and* -vsplitinstead. The old commands will be removed at some point in the future.
Bugs Fixed
tsservercompletion results weren't returning as many details as they did in the past. #2845- The
crystal-langlinter 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:errmsgwas 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
metalslinter was incorrectly returning0there's no project root. #3120 - Sign priorities weren't properly set in newer Vim versions.
New Features
- Other completion sources like
asynccompletecan 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_balloonsto1. - 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_navigationsetting can be used to control how ALE navigates to new locations from commands. #3019 - Previous selections can now be repeated with the
:ALERepeatSelectioncommand. #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
clangdnow automatically sets the compile_commands directory by searching forcompile_commands.jsonfile or C build directories from settings. #2807- The
clangchecklinter now uses a no color option for better output. #2700 - The
psalmlanguage server now accepts command line options. #2819 nimcheckerrors now use a range for errors in some cases. #2887- Some
mypynotes are now shown by default. They can be disabled by settingale_python_mypy_show_notesto0. #2704 mypynow runs from the same directory asmypy.ini, if detected. #2385- The
clj-kondolinter now uses the--cacheargument. #2681 - The
verilatorlinter now shows column numbers. #3098 stderris now read forkotlinc. #3120- The
eclipselsplinter 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
argumentsorcommandforcompile_commands.jsonfiles. #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
:ALEFixwasn'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
alesign 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
javascriptreactandtypescriptreactfiletypes. #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
javalspoptions are now configurable. #2600- The
powershelllinter now handles some output it didn't handle before. #2588 - The
mcsclinter now handles more output. #2586 - Rust
clippyoptions are now easier to configure. #2618 - The Elm language server linter has been updated to match recent changes to the Elm language server. #2750
GO111MODULEcan now be overwritten for all of the Go tools ALE supports. #2430- ALE now captures
stderrformypyoutput in case a serious error appears, so it can be seen in:ALEInfo. #2706 - The
blackfixer includes--pyifor files with the.pyiextension. #2705 - The
shlinter for checking shells now handles error messages for other locales, such as Chinese or Russian. #2741 languagetoolsoptions are now configurable, so--autoDetectcan be removed or replaced with a specific language. #2616- The
mdllinter now reads JSON output with improved error details and an errorcode. #2691 - ALE now searches
node_modulesforsemistandardalso. #2784 - The
psalmlanguage server linter now runs via thepsalmexecutable. #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
tflintlinter 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_lspsetting wasn't applied if you didn't also ignore something else. - The
ale_disable_lspsetting 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_saveis set to0after 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
tsserverdiagnostics were off by 1 on the last character. #2551- ALE now prints a friendly message when you try to use
:ALEInfoToClipboardand no clipboard is available. #2438 - The
checkstyleerror 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_ignoresetting. #1930 - ALE can now apply fixes to buffers that aren't currently open in Vim versions with the
deletebuflinefunction. #1739 - ALE now integrates with Deoplete for offering completion results, in addition to ALE's own completion implementation. #1753 #2492
- ALE now offers an
omnifunccompletion 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 forwritefileto 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_leavecan now be set to0to 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
rlsnow find the toolchain to use automatically. Ifrlsno longer starts for you, uselet g:ale_rust_rls_toolchain = 'rls'. #2432- The
stackandcaballinters now set the working directory to where the file is. #2345 - The working directory for
shellcheckis now set to the buffer's directory by default. #2446 phpstanproblems are now marked as errors. #2444phpstannow only sets a default level if no configuration file is found. #2444- The autoload file for
phpstancan now be set withale_php_phpstan_autoload#2491 - numeric errors codes for
pylintcan 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_whitespacesetting. - ALE now reads JSON output from ESLint and ESLint-derived linters for highlighting ranges. #2551
- ALE now uses
ale_javascript_eslint_optionsfor fixing code with ESLint too. #1989 - Syntax errors for puglint are now handled and printed. #791
phpcserrors are now reported as style errors. #908gcclinters now use-o /dev/nullor-o nulso all errors are caught. #2512- ALE now searches in build directories to find
compile_commands.json#2421 cppchecknow usescompile_commands.jsonfound in build directories. #2359cppchecknow runs from the file's directory with-Iwhen a buffer is modified. #2506gccerrors 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
checkstylelinter is now much more configurable. #2542 - You can now pass options for
clang-tidyitself withale_c(pp)_clangtidy_extra_options. #2566 xmllinters are now run onxsdandxsltfiletypes by default. #2565- The
cargolinter now shows detailed error messages forclippyerrors. #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
rmarkdownfiles 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
shortmesscan'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
javacerrors 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#CreateDirectoryhas been renamed toale#command#CreateDirectoryale#engine#CreateFilehas been renamed toale#command#CreateFileale#engine#EscapeCommandParthas been renamed toale#command#EscapeCommandPartale#engine#ManageDirectoryhas been renamed toale#command#ManageDirectoryale#engine#ManageFilehas 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#Runinstead. #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#Runwith 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
initializemessage with aninitializednotification. This was breaking some language server integrations. #2295 - ALE now always starts jobs with
cmd /con 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/barandFILE:///foo/barare handled now. #2300 - Windows URIs with pipes like
file://C:|fooare 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/javanow addsrc/test/javafor test files. #2305 - ALE now avoids a bug in versions of Vim where
getcurpos()causescurswantto 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
:ALECompleteno longer replacescompletoptlike automatic completion does. #2326 ale_completion_max_suggestionsnow 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#Runfunction. See:help ale#command#Run. :ALEDocumentationcan now be used to request documentation at your cursor withtsserveronly. #1520:ALEGoToDefinitionInSplitand:ALEGoToDefinitionInVSplitcan 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
tsserverresults for:ALEFindReferencesnow show text from the lines found. #2173- You can now use
:ALEFindReferences -relativeto show results with relative paths. #2238 - You can now use
:ALESymbolSearch -relativeto show results with relative paths. #2255 - Completion results can now be requested manually with the
ALECompletecommand 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 aFuncreffor 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.jsonfile processing is now cached and ALE spends a lot less time processing the files. #2161compile_commands.jsonfile processing now uses the build directory as taken from the compilation database, for more accurate results. #2191- C flag processing from
compile_commands.jsonandmake -nis 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
javalsplinter should now be set up with a new distribution system. #2119 #2284 - The
sasslintlinter is now configurable, and will use a local installation if present. #2077 - The
swiftlintlinter will now use a Pod-managed install if available. (#2122) - More output for
perlis now handled. #2150 blackcan now be run viapipenv. #1988- The elm
makelinter will now find problems in test files for versions 0.19 and up. #2176 pylsis now configurable. #2230- Shell linters now handle
kshbetter. #2245 - You can now override the
shellcheckdialect withale_sh_shellcheck_dialect. #2289 stack ghcoptions can now be configured withale_haskell_stack_ghc_options. #2235- Older style
flake8output is now handled to support thehackingplugin. #2215 elmfiles can now be checked withelm-test. #2225- The
alexlinter now handles HTML content better. #2268 - The
alexlinter's executable can now be configured. #2268 - Separate instances of
tsserverare now run for nestedtsconfig.jsonfiles. #2290 pylintnow runs from the project directory by default, or the buffer directory if no project can be found. #2302- The
rlsoptions are now configurable. #2332 credocan now be set to--strictmode. #2337- The location of the composer configuration file is now used for finding the PHP project directory for PHP languagserver too. #2391
jsonlintnow supports local executables like other JS linters. #2363gotypenow uses the-eoption to include all errors. #2340