Merge pull request #214 from Deraen/completion-context
Completion context
This commit is contained in:
commit
89aee9c00c
@ -108,6 +108,37 @@ function! s:candidate(val) abort
|
||||
\ }
|
||||
endfunction
|
||||
|
||||
function! s:get_complete_context() abort
|
||||
" Find toplevel form
|
||||
" If cursor is on start parenthesis we don't want to find the form
|
||||
" If cursor is on end parenthesis we want to find the form
|
||||
let [line1, col1] = searchpairpos('(', '', ')', 'Wrnb', g:fireplace#skip)
|
||||
let [line2, col2] = searchpairpos('(', '', ')', 'Wrnc', g:fireplace#skip)
|
||||
|
||||
if (line1 == 0 && col1 == 0) || (line2 == 0 && col2 == 0)
|
||||
return ""
|
||||
endif
|
||||
|
||||
if line1 == line2
|
||||
let expr = getline(line1)[col1-1 : col2-1]
|
||||
else
|
||||
let expr = getline(line1)[col1-1 : -1] . ' '
|
||||
\ . join(getline(line1+1, line2-1), ' ')
|
||||
\ . getline(line2)[0 : col2-1]
|
||||
endif
|
||||
|
||||
" Calculate the position of cursor inside the expr
|
||||
if line1 == line('.')
|
||||
let p = col('.') - col1
|
||||
else
|
||||
let p = strlen(getline(line1)[col1-1 : -1])
|
||||
\ + strlen(join(getline(line1 + 1, line('.') - 1), ' '))
|
||||
\ + col('.')
|
||||
endif
|
||||
|
||||
return strpart(expr, 0, p) . '__prefix__' . strpart(expr, p)
|
||||
endfunction
|
||||
|
||||
function! fireplace#omnicomplete(findstart, base) abort
|
||||
if a:findstart
|
||||
let line = getline('.')[0 : col('.')-2]
|
||||
@ -116,7 +147,12 @@ function! fireplace#omnicomplete(findstart, base) abort
|
||||
try
|
||||
|
||||
if fireplace#op_available('complete')
|
||||
let response = fireplace#message({'op': 'complete', 'symbol': a:base, 'extra-metadata': ['arglists', 'doc']})
|
||||
let response = fireplace#message({
|
||||
\ 'op': 'complete',
|
||||
\ 'symbol': a:base,
|
||||
\ 'extra-metadata': ['arglists', 'doc'],
|
||||
\ 'context': s:get_complete_context()
|
||||
\ })
|
||||
let trans = '{"word": (v:val =~# ''[./]'' ? "" : matchstr(a:base, ''^.\+/'')) . v:val}'
|
||||
let value = get(response[0], 'value', get(response[0], 'completions'))
|
||||
if type(value) == type([])
|
||||
|
Loading…
Reference in New Issue
Block a user