ale

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

BSD-2-CLAUSE License

Stars
13.3K
Committers
811

Bot releases are visible (Hide)

ale - ALE v3.3.0 Latest Release

Published by w0rp almost 2 years 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
ale - ALE v3.2.0

Published by w0rp over 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
ale - ALE v3.1.0

Published by w0rp over 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
ale - ALE v3.0.0

Published by w0rp about 4 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
ale - ALE v2.7.0

Published by w0rp over 4 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
ale - ALE v2.6.0

Published by w0rp about 5 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
ale - ALE v2.5.0

Published by w0rp over 5 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.
ale - ALE v2.4.1

Published by w0rp over 5 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
ale - ALE v2.4.0

Published by w0rp over 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
ale - ALE v2.3.1

Published by w0rp over 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
ale - ALE v2.3.0

Published by w0rp almost 6 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
ale - ALE v2.2.1

Published by w0rp almost 6 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
ale - ALE v2.2.0

Published by w0rp about 6 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
ale - ALE v2.1.1

Published by w0rp about 6 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
ale - ALE v2.1.0

Published by w0rp about 6 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.
ale - ALE v2.0.1

Published by w0rp about 6 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
ale - ALE v1.9.1

Published by w0rp over 6 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
ale - ALE v2.0.0

Published by w0rp over 6 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. 🎆 🇺🇸 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
ale - ALE v1.8.1

Published by w0rp over 6 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
ale - ALE v1.9.0

Published by w0rp over 6 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