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

First location list item is selected after :ALELint #2818

Open infokiller opened 5 years ago

infokiller commented 5 years ago

Information

VIM version

NVIM v0.4.2 Build type: Release

Operating System: ArchLinux 5.2.18

What went wrong

After liniting is run, the first location list item is selected, which is annoying if you already selected another item.

Reproducing the bug

  1. Open a file with multiple errors.
  2. Select a location list item other than the first.
  3. Run :ALELint (or wait for it to run automatically).

See this screencast for a demo with the minimal vimrc I tested:

ale_loclist_jump

:ALEInfo

 Current Filetype: vim
Available Linters: ['ale_custom_linting_rules', 'vint']
  Enabled Linters: ['ale_custom_linting_rules', 'vint']
 Suggested Fixers: 
  'remove_trailing_lines' - Remove all blank lines at the end of a file.
  'trim_whitespace' - Remove all trailing whitespace characters at the end of every line.
 Linter Variables:

let g:ale_vim_vint_executable = 'vint'
let g:ale_vim_vint_show_style_issues = 1
 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_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 = 0
let g:ale_fixers = {}
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 = {}
let g:ale_linters_explicit = 0
let g:ale_list_vertical = 0
let g:ale_list_window_size = 10
let g:ale_loclist_msg_format = '%code: %%s'
let g:ale_lsp_root = {}
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_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 = '>>'
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_statusline_format = v:null
let g:ale_type_map = {}
let g:ale_use_global_executables = v:null
let g:ale_virtualtext_cursor = 0
let g:ale_warn_about_trailing_blank_lines = 1
let g:ale_warn_about_trailing_whitespace = 1
  Command History:

(executable check - success) vint
(finished - exit code 0) ['/bin/zsh', '-c', '''vint'' --version']

<<<OUTPUT STARTS>>>
0.3.21
<<<OUTPUT ENDS>>>

(finished - exit code 1) ['/bin/zsh', '-c', '''vint'' -s --no-color --enable-neovim -f "{file_path}:{line_number}:{column_number}: {severity}: {description} (see {reference})" ''/tmp/nvimNzHmTB/1/vimrc-test-loclist''']

<<<OUTPUT STARTS>>>
/tmp/nvimNzHmTB/1/vimrc-test-loclist:6:9: warning: Prefer single quoted strings (see Google VimScript Style Guide (Strings))
/tmp/nvimNzHmTB/1/vimrc-test-loclist:8:9: warning: Prefer single quoted strings (see Google VimScript Style Guide (Strings))
<<<OUTPUT ENDS>>>
w0rp commented 5 years ago

I'm not sure if this can be fixed.

infokiller commented 5 years ago

I figured this may not be easy to fix. For the record, I think the most sensible behavior after the list is updated is as following:

w0rp commented 5 years ago

There's no logic for selecting an item, so my guess is that each time the list is replaced, Vim is resetting the selection to the first item again. I'm not aware of a way to prevent that, but maybe someone else might have a suggestion.

infokiller commented 5 years ago

Yes I figured that there's probably no logic for this in the code right now, but only suggested what it should be like if it's added.