dense-analysis / ale

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

Misbehavior in python files with v3.3.0 #4400

Closed m-zat closed 1 year ago

m-zat commented 1 year ago

Information

VIM version

VIM - Vi IMproved 9.0 (2022 Jun 28, compiled Dec 11 2022 13:50:40) Included patches: 1-1046

Operating System: Archlinux

What went wrong

When opening a python file with linting errors, messages is filled up with errors and some of the linting errors are printed into the current buffer

Reproducing the bug

  1. Open a new empty python file. For instance with vim pythonfile.py
  2. This appears in messages
    Error detected while processing function <SNR>66_VimCloseCallback[11]..<SNR>66_VimExitCallback[22]..function <SNR>66_VimCloseCallback[11]..<SNR>66_VimExitCallback[15]..<lambda>17[1]..<SNR>61_ExitCallback[28]..<SNR>60_HandleExit[30]..ale#engine#HandleLoclist[40]..ale#engine#SetResults
    [23]..ale#virtualtext#SetTexts[13]..ale#virtualtext#ShowMessage:
    line   29:
    E970: Unknown highlight group name: 'ALEVirtualTextStyleWarning'
    Error detected while processing function <SNR>66_VimOutputCallback[6]..<lambda>12[1]..ale#lsp#HandleMessage[30]..ale#lsp_linter#HandleLSPResponse[8]..<SNR>67_HandleLSPDiagnostics[20]..ale#engine#HandleLoclist[40]..ale#engine#SetResults[23]..ale#virtualtext#SetTexts[13]..ale#virtualte
    xt#ShowMessage:
    line   29:
    E970: Unknown highlight group name: 'ALEVirtualTextWarning'

    and this appears in the buffer:

    --  1  > blank line at end of file

:ALEInfo

Expand Current Filetype: python Available Linters: ['bandit', 'cspell', 'flake8', 'flakehell', 'jedils', 'mypy', 'prospector', 'pycodestyle', 'pydocstyle', 'pyflakes', 'pylama', 'pylint', 'pylsp', 'pyre', 'pyright', 'refurb', 'ruff', 'unimport', 'vulture'] Enabled Linters: ['flake8', 'mypy', 'pylsp'] 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. '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 '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_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 = '--ignore-missing-imports' let g:ale_python_mypy_show_notes = 1 let g:ale_python_mypy_use_global = 0 let g:ale_python_pylsp_auto_pipenv = 0 let g:ale_python_pylsp_auto_poetry = 0 let g:ale_python_pylsp_config = {'pylsp': {'plugins': {'pycodestyle': {'enabled': v:false}}}} let g:ale_python_pylsp_executable = 'pylsp' let g:ale_python_pylsp_options = '' let g:ale_python_pylsp_use_global = 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 = 0 let g:ale_echo_cursor = 1 let g:ale_echo_msg_error_str = 'E' let g:ale_echo_msg_format = '[%linter%] %s [%severity%]' let g:ale_echo_msg_info_str = 'Info' let g:ale_echo_msg_warning_str = 'W' let g:ale_enabled = 1 let g:ale_fix_on_save = 0 let g:ale_fixers = {'javascript': ['standard'], 'python': ['black', 'isort']} let g:ale_history_enabled = 1 let g:ale_history_log_output = 1 let g:ale_keep_list_window_open = 0 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 = {'javascript': ['standard', 'tsserver'], 'python': ['flake8', 'mypy', 'pylsp']} let g:ale_linters_explicit = 0 let g:ale_linters_ignore = {} let g:ale_list_vertical = 0 let g:ale_list_window_size = 10 let g:ale_loclist_msg_format = '[%linter%] %s [%severity%]' let g:ale_max_buffer_history_size = 20 let g:ale_max_signs = -1 let g:ale_maximum_file_size = v:null let g:ale_open_list = 0 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 = 0 let g:ale_set_loclist = 1 let g:ale_set_quickfix = 0 let g:ale_set_signs = 1 let g:ale_sign_column_always = 1 let g:ale_sign_error = '>>' let g:ale_sign_info = '--' let g:ale_sign_offset = 1000000 let g:ale_sign_style_error = '>>' let g:ale_sign_style_warning = '--' let g:ale_sign_warning = '--' let g:ale_sign_highlight_linenrs = 0 let g:ale_statusline_format = v:null let g:ale_type_map = {} 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 Command History: (executable check - success) flake8 (finished - exit code 0) ['/usr/bin/zsh', '-c', 'cd ''/tmp'' && ''flake8'' --version'] <<>> 6.0.0 (flake8-docstrings: 1.6.0, mccabe: 0.7.0, pycodestyle: 2.10.0, pyflakes: 3.0.1) CPython 3.10.9 on Linux <<>> (executable check - success) mypy (finished - exit code 2) ['/usr/bin/zsh', '-c', 'cd ''/tmp'' && ''mypy'' --ignore-missing-imports --show-column-numbers --shadow-file ''/tmp/pythonfile.py'' ''/tmp/vaq3pnC/1/pythonfile.py'' ''/tmp/pythonfile.py'''] <<>> mypy: can't read file '/tmp/pythonfile.py': No such file or directory <<>> (executable check - success) pylsp (finished - exit code 1) ['/usr/bin/zsh', '-c', 'cd ''/tmp'' && ''flake8'' --max-line-length 88 --format=default --stdin-display-name ''/tmp/pythonfile.py'' - < ''/tmp/vaq3pnC/2/pythonfile.py'''] <<>> /tmp/pythonfile.py:1:1: D100 Missing docstring in public module /tmp/pythonfile.py:1:1: W391 blank line at end of file <<>> (started) ['/usr/bin/zsh', '-c', 'cd ''/tmp'' && ''pylsp''']
w0rp commented 1 year ago

I know what the issue is, and I'll fix it in a related issue in a moment. It's because it's possible to load the virtualtext.vim file without loading the highlight.vim file that defines those highlights. The people who contributed the virtual-text code, probably at my suggestion I'm going to guess, made the highlight groups link to the other ALE highlight groups, but I now think this makes for a bad default set of colors anyway. I've got a better idea.

w0rp commented 1 year ago

I've fixed this in master now, and the bug fix will be in the next patch release.

m-zat commented 1 year ago

Hi @w0rp, thanks for taking the time to work on this issue! Unfortunately it does not seem to be solved. Errors are not shown in messages anymore but the error is still inserted into the current buffer.

w0rp commented 1 year ago
--  1  > blank line at end of file

This part is correct. That's the virtual-text feature showing a problem, which is now enabled by default. If you don't want it at all, do this:

let g:ale_virtualtext_cursor = 'disabled'

I recommend actually doing this:

let g:ale_warn_about_trailing_whitespace = 0

Then you won't tend to see warnings or errors from ALE about trailing whitespace or EOF issues, which I tend to automatically fix when I save files anyway.