Releases: dense-analysis/ale
ALE v2.3.0
Bugs Fixed
- ALE no longer fixes files with
ale_fix_on_save
and:wq
, due to problems with writing to a buffer after it has been quit. #1960 - The C Makefile parser handles more output correctly. #1907
'vcol': 1
is now used forflake8
, so Unicode characters can be highlighted correctly. #2096- ALE no longer floods the native clipboard program when using
:ALEInfoToClipboard
. #2110
New Features
- ALE now supports LSP symbol search via the
:ALESymbolSearch
command. See:help ale-symbol-search
. - LSP linters can now be configured to send configuration changes via
workspace/didChangeConfiguration
. #1852 #2035 b:ale_linter_aliases
can now be set to aString
. #927- Sources for diagnostics from language servers are now displayed in detailed messages for
:ALEDetail
. #1734 - ALE now supports displaying results from other sources. See
:help ale-lint-other-sources
. #2017 - ALE now displays
virtualtext
in the latest NeoVim versions wheng:ale_virtualtext_cursor
is set to1
.
Other Changes
prettier
is now suggested as a fixer for HTML files. #2060- The
mix
linter is now disabled by default, as it can consume far too much CPU power to run. #2084
New Linters
- Ada -
gcc
#2087 - AsciiDoc -
vale
#2079 - C -
ccls
#1950 - C++ -
ccls
#1950 - D -
dls
#1992 - Dockerfile -
dockerfile_lint
#1971 - Elixir -
elixirls
#1956 #2042 - ERB -
ruumba
#2051 - ISPC -
ispc
#2068 - Objective C -
ccls
#1950 - Perl 6 -
perl6 -c
#1958 - PHP -
psalm
#1893 #2018 - Prolog -
swipl
#1979
New Fixers
terraform fmt
#2015
Linter Enhancements
- Extra options can now be specified for
hlint
. #1908 - Extra options can now be specified for
stylelint
. #1917 - Just about every Haskell linter can now be run via
stack
by setting the_executable
options to a path tostack
. #1851 - The
credo
linter now handles more message types. #1963 - The executable is now configurable for
ansible_lint
. #1977 - The
ansible
linter is now known asansible_lint
, and theansible
andansible-lint
aliases. - The
initializationOptions
can now be configured for the Rubysolargraph
linter. - The
cargo
linter can now be configured to useclippy
. #2001 - The
stack
linters are now only run if astack.yaml
file exists. #1752 - Secondary error spans can now be ignored for Rust linters. #1696
- The
rubocop
linter now respects filters for excluding files from the configuration file. #1999 - The
clang-tidy
linters now use the default checks by default, instead of all checks. Configuration files should now be respected by default. #2031 - The filename being checked is now given to
jshint
via the--filename
argument. #2040 - The executable is now configurable for the
php
linter. #2044 - The executable is now configurable for the
hamllint
linter. #2048 - The
elixir-ls
linter now recognizes umbrella project roots. #2045 - The
golint
executable and options are now configurable. #2054 - The
checkstyle
linter now handles output from older versions. #2063 - The
scalac
linter now stops compilation just before execution, so more problems can be found. #2083 - The
phpstan
linter now supports newer versions ofphpstan
. #2005
Fixer Enhancements
ALE v2.2.1
Bugs Fixed
mix
now runs from the project directory, which fixes some linter issues. #1954- When an
E523
error occurs when trying to echo an error message, ALE will now fall back on truncating messages itself. #1987 - Command which switch directory will now also switch drives on Windows with
cd /d
. #2012 google-java-format
options were incorrectly named. #2016
ALE v2.2.0
Bugs Fixed
prettier_d
could replace the contents of a file with an error message if it returned one. #1802- ALE now correctly considers classes from
tsserver
to be function types for auto-completion. #1905 - Completions weren't showing in Rust for
Foo::
. #1906 - Rust completion results caused errors when they were sent in Markdown format. #1794
- ALE now handles failing to connect to
eslint_d
when checking and fixing files. tsserver
would cause ALE to render errors much more than it needed to. This has been fixed by avoiding re-rendering when empty lists of errors are sent several times in a row.- The functionality for parsing C flags now handles more input.
New Features
- ALE now includes
relatedInformation
from LSP diagnostics in thedetail
key of loclist items, so more information about problems can be revealed with:ALEDetail
. #1815 - ALE now uses a the
noblock
option for jobs and channels available from Vim 8.1 patch 350, which means that ALE doesn't block on sending messages to tsserver or LSP servers. This means there are no strange pauses sometimes. #1800 - ALE can now optionally automatically open and close the preview window to show detailed information for problem lines by setting
g:ale_cursor_detail
to1
before ALE is loaded.g:ale_close_preview_on_insert
can be set to1
before ALE is loaded to automatically close the window upon entering Insert mode. #1889 - For Vim versions that support it, ALE now kills all jobs when the
VimSuspend
event is triggered, say via Ctrl + Z.
Other Changes
- ALE no longer starts linting or displays results while an operator is pending. (Typing an unfinished key sequence.) #1875
- Names with minuses in Lisp and Clojure are now completed by ALE. #1888
New Linters
- C++ -
clangd
#1835,clazy
#1826 - Go -
golangci-lint
#1890,go-langserver
#1870 - HTML -
stylelint
#1839 - Java -
javalsp
#1849 - Julia -
languageserver
#1894 - Objective C -
clangd
#1835 - Objective C++ -
clangd
#1835 - Ruby -
solargraph
#1847 - Scala -
sbtserver
#1871
New Fixers
- Go -
gomod
#1873 - Haskell -
hlint
#1836,stylish-haskell
#1837 - OCaml -
ocamlformat
#1856 - SQL -
sqlfmt
#1897 - XML -
xmllint
#1866 - (Various languages) -
uncrustify
#1885
Linter Enhancements
- The
cquery
language server can now also be started with.cquery
files. #1793 - The
rustc
linter now uses-Z no-codegen
by default. You may have to update your options. #1806 - ALE no longer runs
go env
before runninggo test
, which fixes some issues. #1840 - The
go
executable forgo
linters can now be configured withg:ale_go_go_executable
. #1873 - Extra options can now be defined for
go vet
. #1818 - Extra options can now be set for
phpcs
. #1820 - The options and executable for
puppet
can now be configured. #1865 gitlint
no longer warns aboutB2
errors for trailing whitespace in body text ifale_warn_about_trailing_whitespace
is set to0
.- All Ruby linters can now be run via
bundle
by setting the_executable
options to a path ending in'bundle'
. #1850 - The
thrift
linter now includes files from the same directory as the source file by default. #1927 - Most Python linters can now be configured to automatically use
pipenv
where available. #1719
Fixer Enhancements
ALE v2.1.1
Bugs Fixed
- ALE could sometimes hit a type error when parsing LSP messages. #1816
- Running ALE could replace the
equalprg
setting with local version of the setting for the sandbox tests. 3c6af5f - The
importjs
fixer was not reading the_execuable
variable correctly. #1841 - The Kotlin
languageserver
linter was broken in v2.1.0, and now it works again. #1844 - The Dart
language_server
linter was broken in v2.1.0, and now it works again. #1881 - The "go to definition" column was off by one. #1861
- The Perl linter could throw errors if the output was empty. #1886
- The NASM linter no longer leaves binary files behind. #1900
ALE v2.1.0
In this release, the Hack linters have been moved to run for files with the hack
filetype, and the linters run using Language Server Protocol, offering completion support and more. Only the hack
linter is enabled by default, as hhast
can execute arbitrary code if enabled.
ALE now checks ALE project code with the custom linting script automatically. This should assist with developing ALE itself.
Bugs Fixed
- The executable for
gawk
is now escaped. a42999a - Auto-completion could sometimes send Ctrl + o if you leave Insert mode at just the right time. This has been fixed. #1700
- LSP completion results without the
kind
attribute should now be handled. This is required forclangd
. 7bf3a74 - The omnicomplete menu could sometimes open without the right options being set due to how
feedkeys()
puts keys to send in a queue. This has been fixed. #1700 - Marks are now set when jumping to definitions. #1758
New Features
- ALE now respects the
preview
completion option. #1690 - The
language
option for LSP linters is now optional, and the filetype will be used as the language by default. %e
in linter commands will now be replaced with the escaped executable name.- The
scalastyle
linter's configuration file can now be configured with eitherg:ale_scala_scalastyle_config
or for a buffer withb:ale_scala_scalastyle_config
. The oldg:ale_scalastyle_config_loc
option will be used as the default value until ALE 3.0. a42999a ale#Pad
can now be used for defining linter conveniently including possibly empty options. a42999aale#Env
can now be used for defining linters including environment variables. a42999a- ALE will now detect virtualenv directories for
pipenv
by default. #1724 - ALE will now detect project roots based on Pipenv files. #1724
- Setting
g:ale_lint_on_enter
to0
after ALE is loaded will now prevent the already loaded events for linting on entering a buffer from starting linters. The same rules applies tog:ale_lint_on_filetype_changed
. #1619 - ALE linters are now prevented from being defined or modified in the Vim sandbox. #1708
- ALE fixers are now prevented from being registered in the Vim sandbox. #1708
- In case multiple language servers are connected to for one buffer, ALE will now only send completion requests to the first language server which supports them. #1692
- ALE now sets marks when jumping through errors, so you can jump back to a previous location with Ctrl + o, etc. #1539
- ALE now supports parsing C compiler flags from
compile_commands.json
files. See:help g:ale_c_parse_compile_commands
ac4bac8 - ALE now indicates that problems were found inside header files at the
#include
lines. 16d0c52 - Error codes are now included in messages from LSP and tsserver responses. #1771
- ALE now includes a linter for checking ALE code itself with custom checks.
New Linters
- C -
clangd
#1751,cquery
#1757 - Hack
hhast
#1770 - Haskell -
cabal-ghc
#1742,hie
#1735 - Fortran -
fortran-language-server
#1736 - kotlin -
kotlin-language-server
#1725 - Puppet -
puppet-languageserver
#1697 - Python -
vulture
#1756 - Vue -
vls
#1699 - Yang -
yang-lsp
#1783
Linter Enhancements
- Options are now configurable for
isort
. #1698 - The
remark-lint
linter can now check files as you type. #1730 - The
remark-lint
linter will now run locally installed executables if available. #1730 - The drafter linter now reads the file via stdin. #1750
- The
joker
linter now finds.joker
files inside project directories. #1760 - Python linters now also look for
.flake8rc
to find the project root. #1776 - The GCC error handler now includes the original error in the detailed error message, so you can read long error messages. ccbdfcd
- The
hack
linter now uses Language Server Protocol, offering all other supported LSP features. - The executables are now escaped for many linters where they weren't before. 2172843
Fixer Enhancements
- The
prettier
fixer can now fix YAML and HTML files without file extensions.
ALE v2.0.1
Bugs Fixed
- A very recent vim patch makes defining functions possible in the Sandbox, so ALE now checks if you are the sandbox by setting a setting you can't set in the sandbox to itself. c9a6b04
- ALE now no longer changes the value of
$TMPDIR
to'/tmp'
by default, which can break:!mktemp -p
on some systems. #1716 - LSP error data that is just a string, not an object, is now handled properly. #1720
- Linter callback functions that are unknown or later deleted are now treated as if they had returned an empty list. a782e06
- Highlights for signs weren't being parsed correctly when
verbose
was set greater than0
. This has been fixed. #1687 - Balloons are now disabled in terminals by default. Vim contains some bugs which cause very strange behavior in terminals when balloons are enabled. #1631
ALE v2.0.0
ALE no longer supports NeoVim versions below 0.2.0. If you're using an older version of NeoVim, the time to upgrade is now. Today ALE celebrates its independence from older versions of NeoVim. 🎆 🇺🇸 This is so ALE code can begin using lambdas and closures. Vim 8 support remains the same.
Despite supporting more features than ever, ALE also starts up faster than it ever has, thanks to some startup time optimizations.
Removed Features
- Support for NeoVim versions below 0.2.0 has been removed. Upgrade to NeoVim 0.2.0 or newer.
- The option
g:ale_python_flake8_args
has been removed. Useg:ale_python_flake8_options
instead. - The option
g:ale_html_tidy_args
has been removed. Useg:ale_html_tidy_options
instead. ALEGetStatusLine()
andale#statusline#Status()
have been removed. You should write your own status function instead, or use a companion plugin for ALE like lightline-ale.ALELint()
has been removed. Useale#Queue()
instead.- ALE no longer waits for 2 minutes to check for problems or echo a message again after an exception is thrown. This makes ALE slightly more efficient and easier to profile. If any exceptions are thrown by any functions in the future regularly enough, they can be handled separately.
Bugs Fixed
- ALE would run
:edit
when jumping to definitions inside of files via LSP jumps such as "go to definition." Now:edit
won't be run if the location is inside of the file currently being edited. #1661 - The Python
prospector
linter would raise exceptions when no output was returned in NeoVim. This has been fixed. #1682
New Features
- ALE now supports connecting to LSP servers via TCP connections. #830
- ALE now supports defining
intalizationOptions
for LSP linters. #1632 - ALE will now load all of the code for running LSP linters or
tsserver
only when needed, which should improve startup times for some. - ALE will now only notify LSP servers about files being changed if
b:changedtick
changes, which should result in fewer messages being sent. #1531 '*'
can now be used as a filetype forale_fixers
, meaning "every other filetype." #1417- Suggested fixers now appear in
:ALEInfo
. This will help people figure out how to enable fixers. #1522 - Linter results can now be ignored with
g:ale_linters_ignore
. #1453 #1172
Other Changes
- ALE's autocmd functions now use fewer are now set up in fewer
augroup
groups, and should generally be set up faster than before. - ALE will now close preview windows for showing hover messages when new messages are received. #1590
verilog_systemverilog
is now aliased toverilog
by default. #1674
New Linters
- Bash -
bash-language-server
#1641 - C++ -
cquery
#1632 - CloudFormation -
cfn-lint
#1650 - Elixir -
mix compile
#1618 - Python -
pyre
#1691
New Fixers
Linter Enhancements
puppet
versions on 5.4.0 or above are now supported. #1617g:ale_warn_about_trailing_whitespace
is now respected forgitlint
.cargo
can now be configured to check examples or tests. #1627- All Python linters can now be run via
pipenv run
by setting the executable to apipenv
executable. #1625 #1629 - The
lintr
now uses the--vanilla
switch forRscript
. #1638 - The
cython
linter now uses--warning-extra
by default to report more problems, and the options are configurable. #1675 - The
cargo
linter now only builds sub-crates by default. #1679 - The
--stdin-filename
option forreek
will now be set automatically when reek is version 5.0.0 or newer. #1412 - Error codes are no captured for
yamllint
, for applying consistent formatting. - The
yamllint
handler now respectsale_warn_about_trailing_whitespace
.
Fixer Enhancements
prettier
now sets--parser
automatically for buffers with certain filetypes and no file extensions. #1620
ALE v1.9.1
Bugs Fixed
- ALE could sometimes throw exceptions if "go to definition" responses from tsserver returned an empty List of files. This has been fixed.
- Some typos in the
gitlint
documentation have been fixed, with a new example added. - Sometimes the message handler for LSP and tsserver messages would get invalid messages that can't be read. ALE now handles this.
- ALE now behaves well when
ale_pattern_options
variables are unset. #1621
ALE v1.9.0
This is the last version of ALE which will support the deprecated features listed here and in the version 1.8.0 release notes. You should update to NeoVim 0.2.0 if you are using a lower NeoVim version as soon as you can, and you should switch from using the deprecated features to modern alternatives instead. All of the deprecated features will be removed from the git master branch on July 4th, and will be removed in version 2.0.0.
A commit showing all of the code that will be removed for ALE version 2.0 can be seen here: fa103f0
Deprecated Features
The following legacy options have been marked as deprecated, and you will be warned about them if you use them. #1587
g:ale_python_flake8_args
- Replace withg:ale_python_flake8_options
g:ale_html_tidy_args
- Replace withg:ale_html_tidy_options
Bugs Fixed
- The
pylint
linter now runs from the buffer's directory, which allows pylint to find configuration files consistently. This behavior can be disabled by settingg:ale_python_pylint_change_directory
to0
, if it causes problems for you. #1487 - The
flake8
linter now runs for the buffer's directory, to helpflake8
find configuration files consistently. This behavior can be disabled by settingg:ale_python_flake8_change_directory
to0
, if it causes problems for you. perlcritic
escaping on Windows was broken, and this has been broken.
New Features
vcol
can now be set to1
for linters which return character positions for potentially multi-byte text, instead of byte positions. #605- ALE debugging information can now be written to a file with
:ALEInfoToFile <filename_here>
. #1439 - Running locally installed executables can now be disabled globally by setting
g:ale_use_global_executables
to1
before ALE is loaded. #542 - ALE fixer names can now be given explicitly to the
ALEFix
command, complete with suggestions. #1510 #1564 - ALE now offers asynchronous completion support via LSP linters, including the currently supported
rls
andpyls
. #1162 - ALE now supports finding references to symbols under your cursor with LSP linters for
tsserver
. See:help ale-find-references
. - ALE now supports defining linters from pretty much any VimL file. See
:help ale-linter-loading-behavior
. - ALE now emits an
ALEJobStarted
event whenever a job has successfully been started. #1543 - Completion results can now be filtered out with a setting. See
:help g:ale_completion_excluded_words
. tsserver
completion will now suggest some results for string literals, where possible. #1553- Errors from LSP servers will now appear in
:ALEInfo
output, to help users set up LSP linters. #1559
Other Changes
- ALE now prefers to display higher severity problems over lower severity problems given the choice between two items on the same column. #1494
- The plugin should now start up around twice as fast as it did in the last version. #1524
- It should now be possible to run ALE tests on NetBSD. #1548
- Balloon support is now enabled by default in more circumstances, where it's safe. #1565
- ALE now checks
vimwiki
files withmarkdown
linters by default. #1600 - Conflict warnings with other similar linting plugins have been removed, now ALE is well-known enough. #1524
- ALE will no longer try to check buffers with empty filetypes, where no linters could have been loaded anyway. #1524
- Many ALE variables are now only defined in the files where they are needed, and some are never defined with default values. #1524
New Linters
- Cucumber -
cucumber
#1511 - Java -
pmd
#1488 - Mercury -
mmc
#1429 - Perl -
perltidy
#1517 - Python -
black
#1451 - Scala -
fsc
#1452 - QML -
qmlfmt
#1462
New Fixers
- JavaScript -
xo
#1552
Linter Enhancements
g:ale_haskell_hdevtools_options
now defaults toget(g:, 'hdevtools_options', '-g -Wall'),
to respect an option in the hdevtools documentation. #1479- The executable for
vint
can now be configured. #1315 - The executable for
javac
can now be configured. #1476 - The
gcc
linter forC++
can now be selected with either'g++'
or'gcc'
, which is now the preferred name. #1490 - The
--respect-prgama
option forflow
can now be disabled by settingale_javascript_flow_use_respect_pragma
to0
. #1504 - The
mdl
linter can now be run via Ruby bundles. #1550 gcc
linters now show fatal errors as errors instead of warnings. #1563- The
msgfmt
handler now improves the duplicate message warnings by including the line numbers for the other lines in the messages. #1584 -wi
is now used so more warnings appear for D code. #1575- The
sasslint
linter now finds local configuration more often. #1573 - ALE now supports Elm 0.19, in addition to Elm 0.18.
phan_client
can now be used forphan
. See:help ale-php-phan
Fixer Enhancements
g:ale_php_cs_fixer_options
was added for configuring thephp-cs
fixer. #1477
ALE v1.8.1
Bugs Fixed
- The
textlint
linter will now detect configuration files properly by using the--stdin-filename
option. - The
textlint
linter will now run local versions oftextlint
fromnode_modules
on Windows. - The
flawfinder
linter for C++ didn't initialize a severity variable correctly. This has been fixed. #1385 - The
brittany
fixer wasn't writing its output correctly. This has been fixed. #1424 - The
pylint
linter now handles errors with Windows filenames properly. #1492 - ALE commands didn't work at all if the Mac OSX shell was replaced with PowerShell. Now
/bin/sh
will be used in such cases. #1495 - ALE could throw errors sometimes when opening certain buffers with the plugin not being fully loaded. This has been fixed. #1497