dense-analysis / ale

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

Virtualtext at the end of a line not showing as comment after colorscheme reload #4622

Open esan0 opened 1 year ago

esan0 commented 1 year ago

Information

VIM version VIM - Vi IMproved 9.0 (2022 Jun 28, compiled Oct 01 2023 12:12:50) Included patches: 1-1968

Operating System: $ uname -r 6.5.5-arch1-1

What went wrong

When the colorscheme gets reloaded, virtualtext loses its "comment" highlighting.

Clean vim loaded: virtualtext_1

reload colorscheme virtualtext_2

I was able to get around this partially by adding the following to the function that manually toggles background (and thus reloads the colorscheme):

function! s:TogBG()
    let &background = ( &background == "dark"? "light" : "dark" )
    highlight link ALEVirtualTextError Comment
    highlight link ALEVirtualTextStyleError ALEVirtualTextError
    highlight link ALEVirtualTextWarning Comment
    highlight link ALEVirtualTextStyleWarning ALEVirtualTextWarning
    highlight link ALEVirtualTextInfo ALEVirtualTextWarning
    hi ALEError cterm=undercurl
    hi ALEWarning cterm=undercurl
endfunction

However, this doesn't solve the problem when the colorscheme is reloaded automatically, for example, when my terminal background gets changed and vim follows that change.

I'm also suspicious that if these highlight groups get somehow reset, then other non-visible items may also silently reset. In fact, I also have to add ALEError and ALEWarning cterm=undercurl in the manual function, too, because they get reset to underline.

Reproducing the bug

And the virtualtext at the end of the cursor is no longer italic and light (see figures above)

:ALEInfo

Current Filetype: python Available Linters: ['bandit', 'cspell', 'flake8', 'flakehell', 'jedils', 'mypy', 'prospector', 'pycln', 'pycodestyle', 'pydocstyle', 'pyflakes', ...] Linter Aliases: 'jedils' -> ['jedi_language_server'] Enabled Linters: ['mypy', 'pyright', 'ruff'] 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 'trim_whitespace' - Remove all trailing whitespace characters at the end of every line. 'yapf' - Fix Python files with yapf. Linter Variables: " Press Space to read :help for a setting 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_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 = '' let g:ale_python_mypy_show_notes = 1 let g:ale_python_mypy_use_global = 0 let g:ale_python_pyright_auto_pipenv = 0 let g:ale_python_pyright_auto_poetry = 0 let g:ale_python_pyright_config = {} let g:ale_python_pyright_executable = 'pyright-langserver' let g:ale_python_pyright_use_global = 0 let g:ale_python_ruff_auto_pipenv = 0 let g:ale_python_ruff_auto_poetry = 0 let g:ale_python_ruff_change_directory = 1 let g:ale_python_ruff_executable = 'ruff' let g:ale_python_ruff_options = '' let g:ale_python_ruff_use_global = 0 Global Variables: " Press Space to read :help for a setting 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 = 100 let g:ale_completion_enabled = 1 let g:ale_completion_max_suggestions = 50 let g:ale_disable_lsp = 'auto' let g:ale_echo_cursor = 1 let g:ale_echo_msg_error_str = 'Error' let g:ale_echo_msg_format = '[%linter%] %s [%severity%]' 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 = {} let b:ale_fixers = ['black', 'ruff', '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 = 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 = {} let b:ale_linters = ['mypy', 'ruff', 'pyright'] 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 = 1 let g:ale_set_loclist = 1 let g:ale_set_quickfix = 0 let g:ale_set_signs = 1 let g:ale_sign_column_always = 0 let g:ale_sign_error = 'E' let g:ale_sign_info = 'I' let g:ale_sign_offset = 1000000 let g:ale_sign_style_error = 'E' let g:ale_sign_style_warning = 'W' let g:ale_sign_warning = 'W' let g:ale_sign_highlight_linenrs = 0 let g:ale_type_map = {} let g:ale_use_neovim_diagnostics_api = 0 let g:ale_use_global_executables = v:null let g:ale_virtualtext_cursor = 'current' let g:ale_warn_about_trailing_blank_lines = 1 let g:ale_warn_about_trailing_whitespace = 1
w0rp commented 1 year ago

I would like to fix this, but I'm not sure how to fix it.

egorbn commented 10 months ago

Maybe something to look into?

image

From here.

egorbn commented 10 months ago

Confirming that adding the following to vimrc seems to do the trick:

function! TogBG() abort
    highlight link ALEVirtualTextError Comment
    highlight link ALEVirtualTextStyleError ALEVirtualTextError
    highlight link ALEVirtualTextWarning Comment
    highlight link ALEVirtualTextStyleWarning ALEVirtualTextWarning
    highlight link ALEVirtualTextInfo ALEVirtualTextWarning
endfunction
autocmd ColorScheme * call TogBG()