Hi,

When a buffer is modified (lines are added/removed), the line numbers
in the quickfix list are updated to reflect the new line numbers
using the qf_mark_adjust() function.

This functionality is broken with the recent changes made to optimize
this update (curbuf->b_has_qf_entry). This happens when a quickfix list
and an empty location list are used. The qf_mark_adjust() function sets
the b_has_qf_entry flag to FALSE if a quickfix entry is not found. But
this function is called for both a quickfix list and the location list
to adjust the line numbers. If any one of the list is empty, then this
flag will be set to FALSE. After this, further modifications to the
buffer will not update the line numbers. Should we use two separate
flags (one for the quickfix list and the other for the location list?)

I created the following test function to illustrate the problem:

function! Test_Qf_Mark_Adjust()
  let l = []
  for i in range(1, 20)
      call add(l, 'Line' . i)
  endfor
  call writefile(l, 'Xqftestfile')

  call setloclist(0, [])

  edit Xqftestfile

  cgetexpr ['Xqftestfile:5:Line5',
        \ 'Xqftestfile:10:Line10',
        \ 'Xqftestfile:15:Line15',
        \ 'Xqftestfile:20:Line20']

  6,14delete
  call append(6, ['Buffer', 'Window'])

  let l = getqflist()

  call assert_equal(5, l[0].lnum)
  call assert_equal(6, l[2].lnum)
  call assert_equal(13, l[3].lnum)

  enew!
  call delete('Xqftestfile')
endfunction


- Yegappan

-- 
-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Raspunde prin e-mail lui