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 way. #3288 :ALERepeatSelection
now repeats-relative
from:ALEFindReferences
, etc. #3316- ALE no longer inserts garbage when completion is enabled and
'paste'
mode is enabled. #2971 - Completion now avoids inserting text by default. #3205
- Carriage return characters are now removed from some messages on Windows. #2958
ALERename
no longer generates garbage due to changes not being applied in order. #3322- Special characters in filenames like
[
and]
broke showing diagnostics from tsserver/LSP. They are escaped now. #3183