Fix missing items in completion

FIX: This commit fix dbeniamine/todo.txt-vim#7 some the last completion item
was not added to the completion list
CHG: This commit also provide a small refactor of todo#Complete
This commit is contained in:
David Beniamine
2016-02-09 22:31:00 +01:00
parent 7515fde8ae
commit a21fd1198c

View File

@@ -277,7 +277,7 @@ endfunction
" Completion {{{1
" Simple keyword completion on all buffers {{{2
function! TodoKeywordComplete(base)
function! TodoKeywordComplete(base)
" Search for matches
let res = []
for bufnr in range(1,bufnr('$'))
@@ -293,6 +293,25 @@ function! TodoKeywordComplete(base)
endfor
return res
endfunction
" Convert an item to the completion format and add it to the completion list
fun! TodoAddToCompletionList(list,item,opp)
" Create the definitive item
let resitem={}
let resitem.word=a:item.word
let resitem.info=a:opp=='+'?"Projects":"Contexts"
let resitem.info.=": ".join(a:item.related, ", ")
\."\nBuffers: ".join(a:item.buffers, ", ")
call add(a:list,resitem)
endfun
fun! TodoCopyTempItem(item)
let ret={}
let ret.word=a:item.word
let ret.related=[a:item.related]
let ret.buffers=[a:item.buffers]
return ret
endfun
" Intelligent completion for projects and Contexts {{{2
fun! todo#Complete(findstart, base)
@@ -327,10 +346,7 @@ fun! todo#Complete(findstart, base)
call sort(res)
" Here all results are sorted in res, but we need to merge them
let ret=[]
if res != []
let curitem={}
let curitem.word=res[0].word
let curitem.related=[]
if res != []
let curitem=TodoCopyTempItem(res[0])
for it in res
if curitem.word==it.word
@@ -341,19 +357,14 @@ fun! todo#Complete(findstart, base)
if index(curitem.buffers,it.buffers) <0
call add(curitem.buffers,it.buffers)
endif
else
" Create the definitive item
let resitem={}
let resitem.word=curitem.word
let resitem.info=opp=='+'?"Projects":"Contexts"
let resitem.info.=": ".join(curitem.related, ", ")
\."\nBuffers: ".join(curitem.buffers, ", ")
else
" Add to list
call TodoAddToCompletionList(ret,curitem,opp)
" Init new item from it
let curitem.word=it.word
let curitem.related=[it.related]
" Init new item from it
let curitem=TodoCopyTempItem(it)
endif
endfor
" Don't forget to add the list item
call TodoAddToCompletionList(ret,curitem,opp)
endif
return ret