diagnostic-nvim icon indicating copy to clipboard operation
diagnostic-nvim copied to clipboard

The plugin always sets the locations list overwiting an existing one

Open mg979 opened this issue 5 years ago • 0 comments

  • nvim --version: NVIM v0.5.0-634-g161cdba1e
  • language server name/version: ?
  • Operating system/version: Linux Debian Buster
nvim -c ":checkhealth nvim nvim_lsp"
health#nvim#check
========================================================================
## Configuration
  - OK: no issues found

## Performance
  - OK: Build type: RelWithDebInfo

## Remote Plugins
  - OK: Up to date

## terminal
  - INFO: key_backspace (kbs) terminfo entry: key_backspace=\177
  - INFO: key_dc (kdch1) terminfo entry: key_dc=\E[3~
  - INFO: $VTE_VERSION='5402'
  - INFO: $COLORTERM='truecolor'

health#nvim_lsp#check
========================================================================
## Checking language server protocol configuration
lsp.log

The lsp log remains empty.

Actual behaviour

I set the location list to the list of changes in the working tree with this function:

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" Function: git#to_qfix
" Fill the locations list window with git diff hunks
" From GitGutter plugin.
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
""
function! git#to_qfix()
  " {{{1
  silent! Gcd
  let locations = []
  let cmd = 'git --no-pager diff --no-ext-diff --no-color -U0'
  if exists('g:gitgutter_diff_base')
    let cmd .= ' ' . g:gitgutter_diff_base
  endif
  let diff = systemlist(cmd)
  let lnum = 0
  for line in diff
    if line =~ '^diff --git [^"]'
      let paths = line[11:]
      let mid = (len(paths) - 1) / 2
      let [fnamel, fnamer] = [paths[:mid-1], paths[mid+1:]]
      let fname = fnamel ==# fnamer ? fnamel : fnamel[2:]
    elseif line =~ '^diff --git "'
      let [_, fnamel, _, fnamer] = split(line, '"')
      let fname = fnamel ==# fnamer ? fnamel : fnamel[2:]
    elseif line =~ '^@@'
      let lnum = matchlist(line, '+\(\d\+\)')[1]
    elseif lnum > 0
      call add(locations, {'filename': fname, 'lnum': lnum, 'text': line})
      let lnum = 0
    endif
  endfor
  if !empty(locations)
    call setloclist(0, locations)
    lopen
    ll
  else
    echo '[git.vim] no changes'
  endif
endfunction "}}}

Initially the location list is set (it's not empty and I can see it if I print it with echomsg), but as soon as it switches to a buffer with a lsp client (sumneko_lua in this case) it is replaced by the LSP locations list (it says so in the window statusline). You can see it in this asciicast:

asciicast

Expected behaviour

Well if I set a location list I don't want LSP to mess with it...

mg979 avatar Aug 21 '20 21:08 mg979