Ale Versions Save

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

v3.3.0

1 year ago

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 textEdit but no insertTextFormat. #4124
  • b:ale_shell and b:ale_shell_arguments can now be used to set shell options per-buffer. #4146
  • ALE now advertises codeActionLiteralSupport so language servers such as rust-analyzer return code actions to ALE. #4163
  • An ALEGoToImplementation command 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_cb or err_cb for jobs to swallow messages to prevent Vim from excessively polling results. #4259
  • ALE now outputs virtual-text messages in Vim 9. #4281 #4291
  • virtual-text messages can be shown for all lines, not only the line the cursor is on, by setting ale_virtualtext_cursor = 'all'. #4289
  • virtual-text messages 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 --lint options for awk. #4114
  • rust-analyzer can now be run for non-Cargo projects. #4118
  • ALE now reports errors from a ghc panic. #4145
  • pylama output handling has been improved #4106
  • The default list of YAML linters is now spectral, yaml-language-server, and yamllint to avoid running linters specialised for particular applications of YAML. #4178
  • ALE now runs vimls for Vader files by default, and the default list of linters for Vader files is to run vimls. #4201
  • ALE now distinguishes between warnings and errors for golangci_lint. #4182
  • ALE now supports newer ansible-lint versions. #4188
  • ALE now checks for .mypy.ini to 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 detail is not empty for terraform validate. #4157
  • YAML actionlint options can now be configured with ale_yaml_actionlint_options. #4216
  • ALE now runs dart analyze with --fatal-infos to capture more information. #4237
  • ALE now searches for deno.json and deno.jsonc to detect a Deno project root. #4306
  • The volar language server executable name now defaults to vue-language-server, which is its current name. #4308
  • clj-kondo is now run with a filename hint to get more accurate problems. #4315
  • ALE now uses header-specific filetype options for clang to improve on the accuracy of problems ALE reports. #4318 #4334
  • ALE now includes pyrightconfig.json and pyrightconfig.toml in the list of files it uses to find a Python project root. #4321
  • ALE now sets the cwd for pylsp and Pyright to the detected or manually configured project root to fix incorrect import errors produce by either pylsp with the mypy plugin, or by Pyright. #4388
  • ruff is now enabled as a linter for Python by default.
  • Options can now be configured for hadoint. #4353
  • --config is now explicitly set for checkmate so it loads the correct configuration file. #4351
  • The executable for markdownlint is now configurable. #4358
  • nix versions 2.12 and up are supported properly now. #4394

Fixer Enhancements

  • shfmt now runs with -filename= and no other options by default to use .editorconfig settings. #4244
  • dprint is now suggested for more filetypes. #4320
  • clang-format is now suggested for more filetypes. #4367

Bugs Fixed

  • :ALEImport should 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_executable was 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-lint returns no output. #4373

v3.2.0

2 years ago

Special Notes

  • The pyls linter has been removed because it's no longer maintained, and it has been replaced with the pylsp linter. #3810
  • The dartanalyzer linter has been removed because the Dart team discourages its use over built-in tools instead.

Deprecated Features

  • The ale_lsp_root setting is now deprecated, and you should replace it with ale_root instead. #3599

New Features

  • :ALEGoToTypeDefinition is now supported for tsserver. #3545
  • You can now rename TypeScript files with the :ALEFileRename command. #4012
  • You can now manually populate loclist and quickfix with :ALEPopulateLocList and :ALEPopulateQuickfix, respectively. #3761
  • You can now send found references to quickfix with :ALEFindReferences -quickfix. #4033
  • Linters and fixers can now set their cwd separately from their commands to run them, to make them easier to manager and enable other features. #2281
  • ALE will now read signs with sign_getplaced, when the function is available. This is faster and safer. #3648
  • When repeating selections, ALE will now jump to the last selected item, such as when finding references.
  • ALE will now de-duplicate items before adding them to the location list. #3792
  • Popup windows are now supported in Vim versions that have popup versions. #3817
  • ALE is now tested against NeoVim 0.5. #3830
  • ALE now triggers ALELSPStarted autocommands after language servers start. #3878
  • ALE now supports virtual text in Vim 8.2 when g:ale_virtualtext_cursor is set to 1. #3915
  • Multi-line messages are handled better for virtualtext. #3949
  • virtualtext highlights now respect other ALE highlights better. #3960
  • ALE now handles code actions responses from language servers that directly return commands to run. #3929
  • ALE now includes the text of a file in the textDocument/didSave notification for language servers where supported to support more language servers like Godot. #3923
  • ALE now only sends textDocument/didSave if the language server supports it. #3930 #4008
  • textDocument/didSave is now dispatched after files are saved due to a rename, and ALE now respects the value of hidden to determine if other files modified should be written or not. #4049
  • g:ale_open_list/b:ale_open_list can now be used as a threshold for opening the window after so many problems are found. #4050
  • ALE now attempts to automatically restart language servers when they crash. #4098

New Linters

  • Ada - cspell #3981
  • AsciiDoc - cpell #3981
  • AVRA - avra #3950
  • bitbake - oelint-adv #4043
  • C - cpell #3981
  • C - cpplint #3008
  • C++ - cspell #3981
  • C# - cspell #3981, dotnet format #3879
  • CSS - cspell #3981
  • CMake - cmake-lint #4036
  • CUDA - clangd #3598
  • Dart - dart analyze #3825
  • desktop - desktop-file-validate
  • Elixir - cspell #3981
  • eRuby - erblint #3931
  • Go - cspell #3981
  • Haskell - cspell #3981
  • help - cspell #3981
  • HTML - angular (@angular/language-server) #2102, cspell #3981
  • Java - cspell #3981
  • JavaScript - cspell #3981, deno #3924
  • JSON - cspell #3981
  • Jsonnet - jsonnet-lint #3907, jsonnetfmt #3907
  • Lua - cspell #3981
  • Markdown - cspell #3981
  • Nix - statix #3969
  • OCaml - ocamllsp #3595
  • PHP - cspell #3981, phpactor #3975
  • PowerShell - cspell #3981
  • Python - cspell #3981, flakehell #3921, pylsp #3810, unimport #4058
  • Robot - rflint #3715
  • RST - cspell #3981
  • Ruby - cspell #3981
  • Rust - cspell #3981
  • Scala - cspell #3981
  • sh - cspell #3981
  • svelte - svelteserver #3644
  • Swift - cspell #3981
  • systemd - systemd-analyze
  • Terraform - checkov #4006
  • Texinfo - cspell #3981
  • Thrift - thriftcheck #3852 #3893
  • TypeScript - cspell #3981
  • Verilog - yosys #3713
  • Vue - cspell #3981, volar #3992
  • WGSL - naga #4047
  • YAML - yaml-language-server #4029
  • Zeek - zeek #3952

New Fixers

  • Crystal - crystal tool format #4016
  • Bazel - buildifier #3499
  • Dart - dart format #3764
  • Erlang - erlfmt #3602
  • eRuby - erblint #3935
  • Go - gofumpt #3968, golines #3862
  • JavaScript - dprint #4024
  • Jsonnet - jsonnetfmt #3907
  • JSON - dprint #4024, eslint #3873
  • JSON5 - eslint #3873
  • JSONC - eslint #3873
  • Lua - stylua #3789, lua-format #3804
  • Markdown - dprint #4024, pandoc #3641
  • Nix - statix #3969
  • PureScript - purs-tidy #3863 #3867
  • Python - autoflake #3779
  • Racket - racket-langserver #3808
  • TypeScript - dprint #4024

Linter Enhancements

  • The Verilog verilator linter now includes the directory the file is in. #3500
  • _options you define for the mypy linter are now the first options in the arguments list, so you can run the linter with python -m mypy. #3582
  • The executable, options, and input file can now be configured for the vale linter. #3594
  • The -T argument was removed from the ruby command to support Ruby 3.0 and above. #3537
  • ansible-lint should now print more warnings and errors for files with newer versions. #3601
  • The texlab linter now defaults to using the .git project directory as the default project path. #3610
  • The texlab LSP settings are now configurable. #4027
  • _options can now be set for the pyls linter. #3620
  • gopls is now used for Go by default, and is automatically run from GOPATH if installed locally.
  • staticcheck is automatically run from GOPATH if installed locally.
  • The staticcheck linter for Go now defaults to linting the entire package at once. #3799
  • lintr now runs for more projects by avoiding the --vanilla option. #3727
  • tflint reads from stdin now, which yields better results when linting. #3717
  • eslint now runs from Yarn sdk directories too. #3684
  • The angular linter now works for HTML files on Linux in more cases.
  • The phpstan linter now detects phpstan.neon.dist configuration files. #3765
  • The phpstan linter now supports multi-line errors. #3686
  • The phpstan linter now supports setting --memory-limit. #3973
  • Local executables for phpstan can now be used. #3809
  • The psalm linter now searches for the project root based on where composer.json is. #3979
  • The raco linter now includes the filename in the loclist. #3777
  • The rpmlint version 2.0.0 and above is now support. #3757
  • All checkstyle problems are now style problems. #3780
  • The R language server linter now considers .Renviron #3744
  • The solc linter now works with more versions. #3763
  • ansible-lint works with more recent versions. #3786
  • ansible-lint colors are now always disabled so problems are parsed better. #3811
  • ansible-lint now runs only against files on disk for more accurate results. #3846
  • More recent versions of hadolint are supported. #3678
  • hadolint error codes are now only included if available. #3943
  • The Python linters now consider .tool-versions when looking for the project root. #3820 #3826
  • poetry is now supported for running Python linters. #3834
  • The column number is now read from elrc to produce more accurate problem locations. #3823
  • The clj-kondo linter options are now configurable. #3812
  • More clj-kondo messages are parsed correctly. #3946
  • The deno linter now supports setting the importMap. #3827
  • Older cppcheck versions are now supported. #3887
  • More cppcheck problems are parsed, such as problems from plugins. #3980
  • cppcheck should only run on the current file only to make it faster. #3983 #3987
  • cppcheck is only used to check headers included in a source file now. #3983
  • The pyre linter now runs more consistently. #3895 #3900
  • The circleci linter now avoids checking for updates so it runs faster. #3902
  • The rubocop fixer now avoids loading the --config file so it's easier to run it in Docker. #3916
  • sml linters now handle more errors. #3860 #3957
  • Newer versions of Ruby are supported for type checking by removing -T1. #3538
  • elvis problems are now style problems. #3976
  • alex now uses --stdin to check for problems while you type. #3982
  • More checkmake versions are supported. #3986
  • Newer versions of reek are supported. #4010
  • The hls language server can now be configured. #4038
  • More nix versions are supported. #4045
  • Stable commands are used to run rustc now by default, instead of commands for nightly builds. #4087

Fixer Enhancements

  • clang-format can now be configured to use a particular style, or local style file. #3587
  • prettier can now be used with Ruby code if you have the right plugin installed. #3593
  • cmake-format now reads from stdin, which enables it to use configuration files for projects. #3725
  • The isort fixer now includes the filename in the arguments for better results. #3815 #3942
  • The Dhall fixers now read from stdin. #3868
  • poetry is now supported for running Python fixers. #3834 #3898
  • uncrustify now includes a language option depending on what filetype you're editing. #4007

Bugs Fixed

  • The way ALE handles code actions, completion insertion, and renaming has been reworked with much more robust tests to fix edge cases and stop the cursor moving around strangely. #3478
  • The terraform linter didn't handle all error types correctly. #3606
  • If ALE was run inside of an execute() call it would fail due to uses of redir. Now ALE uses execute() so calls can be nested. #3719
  • Certain Java errors could cause errors in ALE. These messages are handled better. #3706
  • The black fixer for Python didn't build its command string correctly. #3759
  • -include and -imacros now use the filenames instead of absolute paths. #3775
  • Language server messages for completion data are handled better, where they would cause errors before. #3807 #3894
  • The sign column wasn't being kept open when configured in NeoVim 0.5. #3832
  • Empty hover messages could trigger errors in ALE. #3889
  • Code fixes for tsserver or language servers now identify errors that came from the server instead finding other errors from other tools. #3901
  • Code fixes could sometimes cause errors because end line number and column numbers could be missing. This has been fixed. #4062
  • pydocstyle wasn't checking files outside of the root of the project correctly. #3995

v3.1.0

3 years ago

New Features

  • :ALERename now 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 ALECodeAction command, 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 tsserver with the g:ale_lsp_suggestions setting #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 noselect for completeopt if 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 bibclean linter now parses more errors #3367
  • Maven wrappers can now be run more easily #2934 #3374
  • The sh linter now looks at Vim's buffer-local variables to determine the shell type #3427
  • eslint and tsserver will now automatically be run from .yarn/sdks #3435
  • The phpcs linter now parses more errors #3282
  • The shellcheck linter now respects shellcheck directives #3216
  • The sorbet linter now defaults to disabling watchman, which requires watchman to be separately installed #3403
  • The elrc linter 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
  • -imacros flags are now included for linting with C compilers #3430
  • The dafny linter now has a time limit setting and parses more errors #3475
  • xo options can now be customised #3148
  • The swipl linter for Prolog parses error messages from newer versions swipl
  • Jar files for running eclipselsp are included more reliably #3559
  • The nix linter works with newer versions of Nix #3227
  • The dialyzer linter's options can now be configured #3425
  • The cloudformation linter can now also be enabled with the alias cfn-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
  • gofmt now runs via stdin, which helps with running it via Docker. #3381
  • The isort fixer now works with pipenv #3386
  • scalafmt is now suggested for sbt #3399
  • The xo fixer now fixes files via stdin #3148
  • xo options can now be customised #3148
  • The standardrb fixers 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 checkstyle linter now checks errors properly in NeoVim on Windows. #3467
  • The dafny linter now returns results for the correct filenames. #3390 #3557
  • The phan linter now returns results for the correct filenames. #3529
  • rust-analyzer now sends options in the initial configuration so the server recognises them #3453
  • clang-tidy respect compile_commands.json better for header files #3551
  • The Java tools fixer now longer throws errors when no Maven executable can be found #3547
  • ALE wasn't parsing Makefile output unless there were already some compiler flags #3574
  • An index error in the javac linter has been fixed. #3706

v3.0.0

3 years ago

Deprecated Features

  • The g:ale_completion_tsserver_autoimport option has been deprecated. Use g: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 apply filename-modifiers. #2556
  • lint_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, like gopls. #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 new ALECompletePost event is triggered. #3333
  • You can now call :ALEFix with a bang (:ALEFix!) to suppress warnings/errors, such as through ALECompletePost. #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 #3229
  • Python - pyright - #2472
  • sh - bashate #2732 #3070
  • Swift - swift-format #3007 (Not to be confused with swiftformat, which is a different tool and fixer.)
  • SQL - sql-lint #2988
  • Verilog - hdl-checker #2804
  • zig - zls #3232

New Fixers

  • c++ - astyle #3231 #3257
  • Dhall - dhall-format #3310
  • markdown - remark-lint #2836

Linter Enhancements

  • pylint now checks code as you type if you have installed a new-enough version. #2522
  • dockerfile_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 of cppcheck, 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 current filetype if there's no hashbang line. #2906
  • You can now set custom target directories for cargo with ale_rust_cargo_target_dir. #3164
  • The vlog linter parses the filename for the errors now. #2924
  • credo now recognizes umbrella projects #2759
  • rls is now enabled by default. #3324
  • gcc 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 detects compile_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 in compile_commands.json are now handled. #3178
  • -std flags from _options settings for C/C++ linters are now replaced by flags parsed from compile_commands.json or make -n. #3056
  • ALE now uses make -n --always-make by default on Linux and BSD, to fix issues with ALE not reading flags after make 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 to 1 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 to standard 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

v2.7.0

3 years ago

Deprecated Features

  • Commands named *InTab, *InSplit, and *InVSplit have been replaced with * -tab, * -split, and * -vsplit instead. The old commands will be removed at some point in the future.

Bugs Fixed

  • tsserver completion results weren't returning as many details as they did in the past. #2845
  • The crystal-lang linter 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:errmsg was 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 metals linter was incorrectly returning 0 there's no project root. #3120
  • Sign priorities weren't properly set in newer Vim versions.

New Features

  • Other completion sources like asynccomplete can 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_balloons to 1.
  • 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_navigation setting can be used to control how ALE navigates to new locations from commands. #3019
  • Previous selections can now be repeated with the :ALERepeatSelection command. #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

  • Nime - nimpretty #2890
  • PureScript - purty #2690

Linter Enhancements

  • clangd now automatically sets the compile_commands directory by searching for compile_commands.json file or C build directories from settings. #2807
  • The clangcheck linter now uses a no color option for better output. #2700
  • The psalm language server now accepts command line options. #2819
  • nimcheck errors now use a range for errors in some cases. #2887
  • Some mypy notes are now shown by default. They can be disabled by setting ale_python_mypy_show_notes to 0. #2704
  • mypy now runs from the same directory as mypy.ini, if detected. #2385
  • The clj-kondo linter now uses the --cache argument. #2681
  • The verilator linter now shows column numbers. #3098
  • stderr is now read for kotlinc. #3120
  • The eclipselsp linter now lets you specify the javaagent. #3077
  • sourcepaths can now be configured for javac. #2972 #3173

Fixer Enhancements

  • The stylelint fixer now runs from the directory of the buffer and supports configuring the options. #2745
  • styler now uses transformers instead of style for options. #2838

v2.6.0

4 years ago

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 arguments or command for compile_commands.json files. #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
  • :ALEFix wasn'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 ale sign 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 javascriptreact and typescriptreact filetypes. #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
  • javalsp options are now configurable. #2600
  • The powershell linter now handles some output it didn't handle before. #2588
  • The mcsc linter now handles more output. #2586
  • Rust clippy options are now easier to configure. #2618
  • The Elm language server linter has been updated to match recent changes to the Elm language server. #2750
  • GO111MODULE can now be overwritten for all of the Go tools ALE supports. #2430
  • ALE now captures stderr for mypy output in case a serious error appears, so it can be seen in :ALEInfo. #2706
  • The black fixer includes --pyi for files with the .pyi extension. #2705
  • The sh linter for checking shells now handles error messages for other locales, such as Chinese or Russian. #2741
  • languagetools options are now configurable, so --autoDetect can be removed or replaced with a specific language. #2616
  • The mdl linter now reads JSON output with improved error details and an error code. #2691
  • ALE now searches node_modules for semistandard also. #2784
  • The psalm language server linter now runs via the psalm executable. #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 tflint linter now handles a newer error format, in addition to that older ones. #2775

Fixer Enhancements

  • The prettier fixer now uses the glimmer parser for handlebars files. #2563
  • The clangformat fixer now users the --assume-filename option for more accurate fixes. #2646

v2.5.0

4 years ago

Bugs Fixed

  • ALE no longer tracks if LSP linters are busy, and thus allows loclist windows to close automatically. #2460
  • The ale_disable_lsp setting wasn't applied if you didn't also ignore something else.
  • The ale_disable_lsp setting 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_save is set to 0 after fixing a file with ale_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
  • tsserver diagnostics were off by 1 on the last character. #2551
  • ALE now prints a friendly message when you try to use :ALEInfoToClipboard and no clipboard is available. #2438
  • The checkstyle error 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_ignore setting. #1930
  • ALE can now apply fixes to buffers that aren't currently open in Vim versions with the deletebufline function. #1739
  • ALE now integrates with Deoplete for offering completion results, in addition to ALE's own completion implementation. #1753 #2492
  • ALE now offers an omnifunc completion 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 for writefile to 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_leave can now be set to 0 to 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

  • rls now find the toolchain to use automatically. If rls no longer starts for you, use let g:ale_rust_rls_toolchain = 'rls'. #2432
  • The stack and cabal linters now set the working directory to where the file is. #2345
  • The working directory for shellcheck is now set to the buffer's directory by default. #2446
  • phpstan problems are now marked as errors. #2444
  • phpstan now only sets a default level if no configuration file is found. #2444
  • The autoload file for phpstan can now be set with ale_php_phpstan_autoload #2491
  • numeric errors codes for pylint can now be used instead of symbolic errors codes with let g:ale_python_pylint_use_msg_id = 1. #2445
  • The ESLint linter now respects the ale_warn_about_trailing_whitespace setting.
  • ALE now reads JSON output from ESLint and ESLint-derived linters for highlighting ranges. #2551
  • ALE now uses ale_javascript_eslint_options for fixing code with ESLint too. #1989
  • Syntax errors for puglint are now handled and printed. #791
  • phpcs errors are now reported as style errors. #908
  • gcc linters now use -o /dev/null or -o nul so all errors are caught. #2512
  • ALE now searches in build directories to find compile_commands.json #2421
  • cppcheck now uses compile_commands.json found in build directories. #2359
  • cppcheck now runs from the file's directory with -I when a buffer is modified. #2506
  • gcc errors for inlined functions are now indicated more clearly. #2516
  • Python project roots are now found based on the location of .flake8, instead of flake8.cfg. #2502
  • The checkstyle linter is now much more configurable. #2542
  • You can now pass options for clang-tidy itself with ale_c(pp)_clangtidy_extra_options. #2566
  • xml linters are now run on xsd and xslt filetypes by default. #2565
  • The cargo linter now shows detailed error messages for clippy errors. #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
  • rmarkdown files now run R linters by default and suggest R fixers.

v2.4.1

4 years ago

Bugs Fixed

  • ALE will no longer lint buffers used for displaying diffs. #2399
  • ALE will no longer throw errors when shortmess can'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
  • javac errors containing colons are now correctly handled. #2134

v2.4.0

5 years ago

Deprecated Features

  • Some functions have been renamed, and are deprecated. Use the new functions instead. #2132
    • ale#engine#CreateDirectory has been renamed to ale#command#CreateDirectory
    • ale#engine#CreateFile has been renamed to ale#command#CreateFile
    • ale#engine#EscapeCommandPart has been renamed to ale#command#EscapeCommandPart
    • ale#engine#ManageDirectory has been renamed to ale#command#ManageDirectory
    • ale#engine#ManageFile has been renamed to ale#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. Use ale#command#Run instead. #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. Use ale#command#Run with 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 initialize message with an initialized notification. This was breaking some language server integrations. #2295
  • ALE now always starts jobs with cmd /c on 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/bar and FILE:///foo/bar are handled now. #2300
  • Windows URIs with pipes like file://C:|foo are now translated to C:\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/java now add src/test/java for test files. #2305
  • ALE now avoids a bug in versions of Vim where getcurpos() causes curswant to 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 :ALEComplete no longer replaces completopt like automatic completion does. #2326
  • ale_completion_max_suggestions now 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#Run function. See :help ale#command#Run.
  • :ALEDocumentation can now be used to request documentation at your cursor with tsserver only. #1520
  • :ALEGoToDefinitionInSplit and :ALEGoToDefinitionInVSplit can 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
  • tsserver results for :ALEFindReferences now show text from the lines found. #2173
  • You can now use :ALEFindReferences -relative to show results with relative paths. #2238
  • You can now use :ALESymbolSearch -relative to show results with relative paths. #2255
  • Completion results can now be requested manually with the ALEComplete command 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 a Funcref for 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.json file processing is now cached and ALE spends a lot less time processing the files. #2161
  • compile_commands.json file processing now uses the build directory as taken from the compilation database, for more accurate results. #2191
  • C flag processing from compile_commands.json and make -n is 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

  • bibclean #2061
  • cmake-format #2244
  • ktlint #2228
  • textlint #2193

Linter Enhancements

  • The javalsp linter should now be set up with a new distribution system. #2119 #2284
  • The sasslint linter is now configurable, and will use a local installation if present. #2077
  • The swiftlint linter will now use a Pod-managed install if available. (#2122)
  • More output for perl is now handled. #2150
  • black can now be run via pipenv. #1988
  • The elm make linter will now find problems in test files for versions 0.19 and up. #2176
  • pyls is now configurable. #2230
  • Shell linters now handle ksh better. #2245
  • You can now override the shellcheck dialect with ale_sh_shellcheck_dialect. #2289
  • stack ghc options can now be configured with ale_haskell_stack_ghc_options. #2235
  • Older style flake8 output is now handled to support the hacking plugin. #2215
  • elm files can now be checked with elm-test. #2225
  • The alex linter now handles HTML content better. #2268
  • The alex linter's executable can now be configured. #2268
  • Separate instances of tsserver are now run for nested tsconfig.json files. #2290
  • pylint now runs from the project directory by default, or the buffer directory if no project can be found. #2302
  • The rls options are now configurable. #2332
  • credo can now be set to --strict mode. #2337
  • The location of the composer configuration file is now used for finding the PHP project directory for PHP languagserver too. #2391
  • jsonlint now supports local executables like other JS linters. #2363
  • gotype now uses the -e option to include all errors. #2340

Fixer Enhancements

  • ale_javascript_standard_options is now used for fixing files too.
  • The prettier fixer now uses an explicit default parser when the parser is not otherwise known. #2220
  • The black fixer now uses the buffer's directory as the working directory by default. #2262

v2.3.1

5 years ago

Bugs Fixed

  • The changes for scalac for finding more problems broke scalac linting completely for some users, and has thus been reverted. #2093
  • lacheck results are now filtered by the filename, so only results for the current file are reported. #2136
  • gqlint now runs from the buffer's directory so the configuration files can be found. #2153
  • Some --ignore-pattern messages weren't being handled for ale_javascript_eslint_suppress_eslintignore. #2192
  • The flow linter wasn't showing the original error messages in the detailed error message strings. #2263
  • The project root function could cause potentially infinite loops for the hie linter. This has been fixed. #2276