Ale Versions Save

Check syntax in Vim/Neovim asynchronously and fix files, with Language Server Protocol (LSP) support

v2.3.0

5 years ago

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 for flake8, 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 a String. #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 when g:ale_virtualtext_cursor is set to 1.

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 to stack. #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 as ansible_lint, and the ansible and ansible-lint aliases.
  • The initializationOptions can now be configured for the Ruby solargraph linter.
  • The cargo linter can now be configured to use clippy. #2001
  • The stack linters are now only run if a stack.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 of phpstan. #2005

Fixer Enhancements

  • Options are now configurable for the jq fixer. #1980
  • The rubocop fixer now respects filters for excluding files from the configuration file. #1580
  • The ocamlformat fixer now fixes buffers without writing to temporary files. #2053

v2.2.1

5 years ago

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

v2.2.0

5 years ago

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 the detail 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 to 1 before ALE is loaded. g:ale_close_preview_on_insert can be set to 1 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 running go test, which fixes some issues. #1840
  • The go executable for go linters can now be configured with g: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 about B2 errors for trailing whitespace in body text if ale_warn_about_trailing_whitespace is set to 0.
  • 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

  • shfmt now uses the buffer's indentation size for formatting. #1932
  • The fixer for adding blank lines before Python control statements now handles more false positives. #1944

v2.1.1

5 years ago

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. 3c6af5f68d911a7fa2dda470224a09f344419d36
  • 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

v2.1.0

5 years ago

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. a42999a639b2916b769a85f37d037be314d9d61b
  • 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 for clangd. 7bf3a749d088964b2ae42e8019dc6a570173d1bf
  • 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 either g:ale_scala_scalastyle_config or for a buffer with b:ale_scala_scalastyle_config. The old g:ale_scalastyle_config_loc option will be used as the default value until ALE 3.0. a42999a639b2916b769a85f37d037be314d9d61b
  • ale#Pad can now be used for defining linter conveniently including possibly empty options. a42999a639b2916b769a85f37d037be314d9d61b
  • ale#Env can now be used for defining linters including environment variables. a42999a639b2916b769a85f37d037be314d9d61b
  • 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 to 0 after ALE is loaded will now prevent the already loaded events for linting on entering a buffer from starting linters. The same rules applies to g: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 ac4bac8ea4c5a8d520041ad509e10af454fcfce4
  • ALE now indicates that problems were found inside header files at the #include lines. 16d0c52d24e8948b8bd8030e3fd112e0b6361c06
  • 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. ccbdfcd76fe74232ee507d47f7edd9d447e3656a
  • 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. 217284360d35711b751859ed27a7a3c3da300e85

Fixer Enhancements

  • The prettier fixer can now fix YAML and HTML files without file extensions.

v2.0.1

5 years ago

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. c9a6b04dc7c1d9f4d24676ee5ef9670dd0cd1bae
  • 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. a782e0622313672cc7d807425a09a30288b11614
  • Highlights for signs weren't being parsed correctly when verbose was set greater than 0. 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

v1.9.1

5 years ago

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

v2.0.0

5 years ago

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. :fireworks: :us: 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. Use g:ale_python_flake8_options instead.
  • The option g:ale_html_tidy_args has been removed. Use g:ale_html_tidy_options instead.
  • ALEGetStatusLine() and ale#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. Use ale#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 for ale_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 to verilog 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

  • Dart - dartfmt #1683
  • HTML - tidy #1673
  • Scala - scalafmt #1623
  • QML - qmlfmt #1651

Linter Enhancements

  • puppet versions on 5.4.0 or above are now supported. #1617
  • g:ale_warn_about_trailing_whitespace is now respected for gitlint.
  • 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 a pipenv executable. #1625 #1629
  • The lintr now uses the --vanilla switch for Rscript. #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 for reek 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 respects ale_warn_about_trailing_whitespace.

Fixer Enhancements

  • prettier now sets --parser automatically for buffers with certain filetypes and no file extensions. #1620

v1.8.1

5 years ago

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 of textlint from node_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

v1.9.0

5 years ago

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: https://github.com/w0rp/ale/commit/fa103f08ed4e748cbb471fb2666ede04361a846b

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 with g:ale_python_flake8_options
  • g:ale_html_tidy_args - Replace with g: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 setting g:ale_python_pylint_change_directory to 0, if it causes problems for you. #1487
  • The flake8 linter now runs for the buffer's directory, to help flake8 find configuration files consistently. This behavior can be disabled by setting g:ale_python_flake8_change_directory to 0, if it causes problems for you.
  • perlcritic escaping on Windows was broken, and this has been broken.

New Features

  • vcol can now be set to 1 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 to 1 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 and pyls. #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 with markdown 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 to get(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 for C++ can now be selected with either 'g++' or 'gcc', which is now the preferred name. #1490
  • The --respect-prgama option for flow can now be disabled by setting ale_javascript_flow_use_respect_pragma to 0. #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 for phan. See :help ale-php-phan

Fixer Enhancements

  • g:ale_php_cs_fixer_options was added for configuring the php-cs fixer. #1477