dense-analysis / ale

Check syntax in Vim/Neovim asynchronously and fix files, with Language Server Protocol (LSP) support
BSD 2-Clause "Simplified" License
13.51k stars 1.43k forks source link

ALE does not display any signs in NeoVim #4657

Closed kirsa closed 8 months ago

kirsa commented 10 months ago

Information

VIM version

NVIM v0.9.4 Build type: Release LuaJIT 2.1.1699524327

Operating System:

MacOS 14.0 (23A344)

What went wrong

Updated ALE via VimPlug update and now ALE does not display any signs in the gutter.

Reproducing the bug

Open a python file with errors and no sigs are displayed.

  1. Open an empty file with .py extention

  2. Add an obvious python error

  3. Save file

  4. See no signs showing in gutter

  5. Run :sign place group=* to confirm that no ALE signs are active

:ALEInfo

Current Filetype: python Available Linters: ['bandit', 'cspell', 'flake8', 'flakehell', 'jedils', 'mypy', 'prospector', 'pycln', 'pycodestyle', 'pydocstyle', 'pyflakes', 'pylama', 'pylint', 'pylsp', 'pyre', 'pyright', 'refurb', 'ruff', 'unimport', 'vulture'] Linter Aliases: 'jedils' -> ['jedi_language_server'] Enabled Linters: ['flake8', 'mypy', 'pydocstyle', 'pylint'] Ignored Linters: [] Suggested Fixers: 'add_blank_lines_for_python_control_statements' - Add blank lines before control statements. 'autoflake' - Fix flake issues with autoflake. 'autoimport' - Fix import issues with autoimport. 'autopep8' - Fix PEP8 issues with autopep8. 'black' - Fix PEP8 issues with black. 'isort' - Sort Python imports with isort. 'pycln' - remove unused python import statements 'pyflyby' - Tidy Python imports with pyflyby. 'remove_trailing_lines' - Remove all blank lines at the end of a file. 'reorder-python-imports' - Sort Python imports with reorder-python-imports. 'ruff' - A python linter/fixer for Python written in Rust 'ruff_format' - Fix python files with the ruff formatter. 'trim_whitespace' - Remove all trailing whitespace characters at the end of every line. 'yapf' - Fix Python files with yapf.

Linter Variables: let g:ale_python_auto_pipenv = 0 let g:ale_python_auto_poetry = 0 let g:ale_python_auto_virtualenv = 0 let g:ale_python_flake8_auto_pipenv = 0 let g:ale_python_flake8_auto_poetry = 0 let g:ale_python_flake8_change_directory = 'project' let g:ale_python_flake8_executable = 'flake8' let g:ale_python_flake8_options = '--max_line_length=88' let g:ale_python_flake8_use_global = 0 let g:ale_python_mypy_auto_pipenv = 0 let g:ale_python_mypy_auto_poetry = 0 let g:ale_python_mypy_executable = 'mypy' let g:ale_python_mypy_ignore_invalid_syntax = 0 let g:ale_python_mypy_options = '--namespace_packages' let g:ale_python_mypy_show_notes = 1 let g:ale_python_mypy_use_global = 0 let g:ale_python_pydocstyle_auto_pipenv = 0 let g:ale_python_pydocstyle_auto_poetry = 0 let g:ale_python_pydocstyle_executable = 'pydocstyle' let g:ale_python_pydocstyle_options = '' let g:ale_python_pydocstyle_use_global = 0 let g:ale_python_pylint_auto_pipenv = 0 let g:ale_python_pylint_auto_poetry = 0 let g:ale_python_pylint_change_directory = 1 let g:ale_python_pylint_executable = 'pylint' let g:ale_python_pylint_options = '' let g:ale_python_pylint_use_global = 0 let g:ale_python_pylint_use_msg_id = 0

Global Variables: let g:ale_cache_executable_check_failures = v:null let g:ale_change_sign_column_color = 0 let g:ale_command_wrapper = '' let g:ale_completion_delay = v:null let g:ale_completion_enabled = 0 let g:ale_completion_max_suggestions = v:null let g:ale_disable_lsp = 1 let g:ale_echo_cursor = 1 let g:ale_echo_msg_error_str = 'Error' let g:ale_echo_msg_format = '%code: %%s' let g:ale_echo_msg_info_str = 'Info' let g:ale_echo_msg_warning_str = 'Warning' let g:ale_enabled = 1 let g:ale_fix_on_save = 1 let g:ale_fixers = {'python': ['black', 'isort']} let g:ale_history_enabled = 1 let g:ale_info_default_mode = 'preview' let g:ale_history_log_output = 1 let g:ale_keep_list_window_open = v:null let g:ale_lint_delay = 200 let g:ale_lint_on_enter = 1 let g:ale_lint_on_filetype_changed = 1 let g:ale_lint_on_insert_leave = 1 let g:ale_lint_on_save = 1 let g:ale_lint_on_text_changed = 'normal' let g:ale_linter_aliases = {} let g:ale_linters = {'python': ['pylint', 'mypy', 'flake8', 'pydocstyle']} let g:ale_linters_explicit = 0 let g:ale_linters_ignore = {} let g:ale_list_vertical = v:null let g:ale_list_window_size = v:null let g:ale_loclist_msg_format = v:null let g:ale_max_buffer_history_size = 20 let g:ale_max_signs = v:null let g:ale_maximum_file_size = v:null let g:ale_open_list = v:null let g:ale_pattern_options = v:null let g:ale_pattern_options_enabled = v:null let g:ale_root = {} let g:ale_set_balloons = 0 let g:ale_set_highlights = 1 let g:ale_set_loclist = 0 let g:ale_set_quickfix = 0 let g:ale_set_signs = 1 let g:ale_sign_column_always = v:null let g:ale_sign_error = '▶︎' let g:ale_sign_info = ':' let g:ale_sign_offset = v:null let g:ale_sign_style_error = '>' let g:ale_sign_style_warning = 'o' let g:ale_sign_warning = '⏺' let g:ale_sign_highlight_linenrs = v:null let g:ale_type_map = {} let g:ale_use_neovim_diagnostics_api = 1 let g:ale_use_global_executables = v:null let g:ale_virtualtext_cursor = 'all' let g:ale_warn_about_trailing_blank_lines = 1 let g:ale_warn_about_trailing_whitespace = 1

IngoMeyer441 commented 8 months ago

I have the same issue. It started with Neovim commit c4afb9788c4f139eb2e3b7aa4d6a6a20b67ba156 which refactored the sign api.

Related Neovim pull request: #25724

IngoMeyer441 commented 8 months ago

The Neovim changes in #25724 probably broke something in the sign group implementation. With this small ALE patch, sign groups can be disabled as a temporary workaround:

diff --git a/autoload/ale/sign.vim b/autoload/ale/sign.vim
index 15517bf8..ac0b4124 100644
--- a/autoload/ale/sign.vim
+++ b/autoload/ale/sign.vim
@@ -23,7 +23,8 @@ let g:ale_sign_offset = get(g:, 'ale_sign_offset', 1000000)
 let g:ale_sign_column_always = get(g:, 'ale_sign_column_always', 0)
 let g:ale_sign_highlight_linenrs = get(g:, 'ale_sign_highlight_linenrs', 0)

-let s:supports_sign_groups = has('nvim-0.4.2') || has('patch-8.1.614')
+" let s:supports_sign_groups = has('nvim-0.4.2') || has('patch-8.1.614')
+let s:supports_sign_groups = 0

 if !hlexists('ALEErrorSign')
     highlight link ALEErrorSign error
IngoMeyer441 commented 8 months ago

Ok, found the problem... Neovim now uses extmarks for displaying signs, and ALE already uses extmarks for displaying virtual text. However, both the signs and the virtual text use the same group name, thus reference the same extmark group. When updating the virtual text, the extmark group is deleted and this happens after all signs have already been placed, effectively destroying all previously placed signs. Renaming the sign group fixes this issue. I will open a PR for this.

hsanson commented 8 months ago

Should be fixed with #4704