spacevim/bundle/CompleteParameter.vim/cm_parser/cpp.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

99 lines
3.2 KiB
VimL

"==============================================================
" file: cpp.vim
" brief:
" VIM Version: 8.0
" author: zhongtenghui
" email: zhongtenghui@gf.com.cn
" created: 2017-06-13 08:58:09
"==============================================================
" ycm macro
" {'word': 'CMP', 'menu': '', 'info': ' CMP( a, b )^@', 'kind': 'm', 'abbr': 'CMP( a, b )'}
function! s:parse_macro(word, info)
let param = substitute(a:info, '\m\s*'.a:word.'\(([^()]*)\).*', '\1', 'g')
let param = substitute(param, '\m( *', '(', 'g')
let param = substitute(param, '\m *)', ')', 'g')
return [param]
endfunction
" ycm
"
" deoplete
" {'word': 'erase', 'menu': '[clang] ', 'info': 'erase(const_iterator __position)', 'kind': 'f iterator', 'abbr': 'erase(const_iterator __position)'}
function! s:parse_function(word, info) "{{{
let result = []
let decls = split(a:info, "\n")
for decl in decls
if empty(decl) || decl =~# '^\s*'.a:word.'\s*$'
continue
endif
let param = substitute(decl, '\m^.*\<'.a:word.'\((.*)\).*', '\1', '')
" remove <.*>
while param =~# '<.*>'
let param = substitute(param, '\m<[^<>]*>', '', 'g')
endwhile
let param = substitute(param, '\m=\s*\w*\%(([^)]*)\)\?\s*', '', 'g')
let param = substitute(param, '\m\%(\s*[^(,)]*\s\)*\s*[&*]\?\s*\(\%(\w\+\)\|\%([*&]\)\)\s*\([,)]\)', '\1\2', 'g')
let param = substitute(param, ',', ', ', 'g')
call add(result, param)
endfor
return result
endfunction "}}}
" ycm
"
" deoplete
" {'word': 'vector', 'menu': '[clang] ', 'info': 'vector<class _Tp>', 'kind': 'p ', 'abbr' : 'vector<class _Tp>'}
function! s:parse_class(word, info) "{{{
let result = []
let decls = split(a:info, "\n")
for decl in decls
if empty(decl) || decl =~# '^\s*'.a:word.'\s*$'
continue
endif
let param = substitute(decl, '\m^.*\<'.a:word.'\(<.*>\).*', '\1', '')
let param = substitute(param, '\m\%(\w\+\)\?\s*\(\w\+\s*[,>]\)', '\1', 'g')
call add(result, param)
endfor
return result
endfunction "}}}
function! cm_parser#cpp#parameters(completed_item) "{{{
let kind = get(a:completed_item, 'kind', '')
let word = get(a:completed_item, 'word', '')
let info = get(a:completed_item, 'info', '')
let l:menu = get(a:completed_item, 'menu', '')
if kind ==# 'f'
return <SID>parse_function(word, info)
elseif kind ==# 'c'
return <SID>parse_class(word, info)
elseif kind =~# '\m^f\s.\+' && l:menu ==# '[clang] '
return <SID>parse_function(word, info)
elseif kind ==# 'p ' && !empty(word) && info =~# '\m^'.word.'<.*>'
return <SID>parse_class(word, info)
elseif kind ==# 'm'
return <SID>parse_macro(word, info)
else
return []
endif
endfunction "}}}
function! cm_parser#cpp#parameter_delim() "{{{
return ','
endfunction "}}}
function! cm_parser#cpp#parameter_begin() "{{{
return '(<'
endfunction "}}}
function! cm_parser#cpp#parameter_end() "{{{
return ')>'
endfunction "}}}
function! cm_parser#cpp#echos(completed_item) "{{{
let info = get(a:completed_item, 'info', '')
let decls = split(info, "\n")
return decls
endfunction "}}}