spacevim/bundle/CompleteParameter.vim/cm_parser/javascript.vim
JIe 2bb7059579
Some checks failed
Detach Plugins / check (FlyGrep.vim) (push) Has been cancelled
Detach Plugins / check (GitHub.vim) (push) Has been cancelled
Detach Plugins / check (JavaUnit.vim) (push) Has been cancelled
Detach Plugins / check (SourceCounter.vim) (push) Has been cancelled
Detach Plugins / check (cpicker.nvim) (push) Has been cancelled
Detach Plugins / check (dein-ui.vim) (push) Has been cancelled
Detach Plugins / check (git.vim) (push) Has been cancelled
Detach Plugins / check (iedit.vim) (push) Has been cancelled
Detach Plugins / check (scrollbar.vim) (push) Has been cancelled
Detach Plugins / check (vim-chat) (push) Has been cancelled
Detach Plugins / check (vim-cheat) (push) Has been cancelled
Detach Plugins / check (vim-todo) (push) Has been cancelled
Detach Plugins / check (xmake.vim) (push) Has been cancelled
test / Linux (nvim, nightly) (push) Has been cancelled
test / Linux (nvim, v0.3.8) (push) Has been cancelled
test / Linux (nvim, v0.4.0) (push) Has been cancelled
test / Linux (nvim, v0.4.2) (push) Has been cancelled
test / Linux (nvim, v0.4.3) (push) Has been cancelled
test / Linux (nvim, v0.4.4) (push) Has been cancelled
test / Linux (nvim, v0.5.0) (push) Has been cancelled
test / Linux (nvim, v0.5.1) (push) Has been cancelled
test / Linux (nvim, v0.6.0) (push) Has been cancelled
test / Linux (nvim, v0.6.1) (push) Has been cancelled
test / Linux (nvim, v0.7.0) (push) Has been cancelled
test / Linux (nvim, v0.7.2) (push) Has been cancelled
test / Linux (nvim, v0.8.0) (push) Has been cancelled
test / Linux (nvim, v0.8.1) (push) Has been cancelled
test / Linux (nvim, v0.8.2) (push) Has been cancelled
test / Linux (nvim, v0.8.3) (push) Has been cancelled
test / Linux (nvim, v0.9.0) (push) Has been cancelled
test / Linux (nvim, v0.9.1) (push) Has been cancelled
test / Linux (true, vim, v7.4.052) (push) Has been cancelled
test / Linux (true, vim, v7.4.1689) (push) Has been cancelled
test / Linux (true, vim, v7.4.629) (push) Has been cancelled
test / Linux (true, vim, v8.0.0027) (push) Has been cancelled
test / Linux (true, vim, v8.0.0183) (push) Has been cancelled
test / Linux (vim, nightly) (push) Has been cancelled
test / Linux (vim, v8.0.0184) (push) Has been cancelled
test / Linux (vim, v8.0.1453) (push) Has been cancelled
test / Linux (vim, v8.1.2269) (push) Has been cancelled
test / Linux (vim, v8.2.2434) (push) Has been cancelled
test / Linux (vim, v8.2.3995) (push) Has been cancelled
test / Windows (nvim, nightly) (push) Has been cancelled
test / Windows (nvim, v0.3.8) (push) Has been cancelled
test / Windows (nvim, v0.4.2) (push) Has been cancelled
test / Windows (nvim, v0.4.3) (push) Has been cancelled
test / Windows (nvim, v0.4.4) (push) Has been cancelled
test / Windows (nvim, v0.5.0) (push) Has been cancelled
test / Windows (nvim, v0.5.1) (push) Has been cancelled
test / Windows (nvim, v0.6.0) (push) Has been cancelled
test / Windows (nvim, v0.6.1) (push) Has been cancelled
test / Windows (nvim, v0.7.0) (push) Has been cancelled
test / Windows (nvim, v0.7.2) (push) Has been cancelled
test / Windows (nvim, v0.8.0) (push) Has been cancelled
test / Windows (nvim, v0.8.1) (push) Has been cancelled
test / Windows (nvim, v0.8.2) (push) Has been cancelled
test / Windows (nvim, v0.8.3) (push) Has been cancelled
test / Windows (nvim, v0.9.0) (push) Has been cancelled
test / Windows (nvim, v0.9.1) (push) Has been cancelled
test / Windows (vim, nightly) (push) Has been cancelled
test / Windows (vim, v7.4.1185) (push) Has been cancelled
test / Windows (vim, v7.4.1689) (push) Has been cancelled
test / Windows (vim, v8.0.0027) (push) Has been cancelled
test / Windows (vim, v8.0.1453) (push) Has been cancelled
test / Windows (vim, v8.1.2269) (push) Has been cancelled
test / Windows (vim, v8.2.2434) (push) Has been cancelled
test / Windows (vim, v8.2.3995) (push) Has been cancelled
docker / docker (push) Has been cancelled
mirror / check (coding) (push) Has been cancelled
mirror / check (gitee) (push) Has been cancelled
mirror / check (gitlab) (push) Has been cancelled
init
2024-08-21 14:17:26 +08:00

118 lines
3.3 KiB
VimL

"==============================================================
" file: javascript.vim
" brief:
" VIM Version: 8.0
" author: tenfyzhong
" email: tenfy@tenfy.cn
" created: 2017-06-11 21:14:37
"==============================================================
function! s:process_param(param)
let param = a:param
" remove fn
while param =~# '\<fn('
let param = substitute(param, '\m\<fn([^)]*)', '', 'g')
endwhile
" both parameter and the type is object
" remove type
while param =~# '{[^{}]*}\s*:\s*{[^{}]*}'
let param = substitute(param, '\m\({[^{}]*}\)\s*:\s*{[^{}]*}', '\1', 'g')
endwhile
" if the type of parameter is an object
" return object but not parameter
while param =~# '\w\+\s*:\s*{[^{}]*}'
let param = substitute(param, '\m\w\+:\s\({[^{}]*}\)', '\1', 'g')
endwhile
let param = substitute(param, '\m?\?:\s*[^,(){}]*', '', 'g')
return param
endfunction
" ycm
function! s:parser0(menu) "{{{
let param = substitute(a:menu, '\m^fn\((.*)\)\%(\s*->.*\)\?', '\1', '')
let param = <sid>process_param(param)
return [param]
endfunction "}}}
" deoplete
function! s:check_parentheses_pairs(line) "{{{
let left = 0
let right = 0
let i = 0
while i < len(a:line)
if a:line[i] ==# '('
let left += 1
elseif a:line[i] ==# ')'
let right += 1
endif
let i += 1
endwhile
return left == right
endfunction "}}}
function! s:parser1(info) "{{{
let info_lines = split(a:info, '\n')
let func = info_lines[0]
for line in info_lines[1:]
if <SID>check_parentheses_pairs(func)
break
endif
let func .= line
endfor
let param = substitute(func, '\m^fn\((.*)\)\%(\s*->.*\)\?', '\1', '')
let param = <sid>process_param(param)
return [param]
endfunction "}}}
function! s:parser2(menu) "{{{
let param = '(' . a:menu . ')'
let param = <SID>process_param(param)
return [param]
endfunction "}}}
function! cm_parser#javascript#parameters(completed_item) "{{{
let menu = get(a:completed_item, 'menu', '')
let info = get(a:completed_item, 'info', '')
let kind = get(a:completed_item, 'kind', '')
let word = get(a:completed_item, 'word', '')
if menu =~# '\m^fn('
return <SID>parser0(menu)
elseif info =~# '\m^fn('
return <SID>parser1(info)
elseif word =~# '\m\w\+(' && empty(info) && kind ==# 'f' && !empty(menu)
" ycm omni
" {'word': 'add(', 'menu': 'a, b', 'info': '', 'kind': 'f', 'abbr': ''}
return <SID>parser2(menu)
endif
return []
endfunction "}}}
function! cm_parser#javascript#parameter_delim() "{{{
return ','
endfunction "}}}
function! cm_parser#javascript#parameter_begin() "{{{
return '({'
endfunction "}}}
function! cm_parser#javascript#parameter_end() "{{{
return ')}'
endfunction "}}}
function! cm_parser#javascript#echos(completed_item) "{{{
let menu = get(a:completed_item, 'menu', '')
let info = get(a:completed_item, 'info', '')
let kind = get(a:completed_item, 'kind', '')
let word = get(a:completed_item, 'word', '')
if menu =~# '\m^fn('
return [menu]
elseif info =~# '\m^fn('
return [info]
elseif word =~# '\m\w\+(' && empty(info) && kind ==# 'f' && !empty(menu)
return [word.menu.')']
endif
return []
endfunction "}}}