He probado clangd
para ver si las funciones sobrecargadas se distinguen realmente cuando busco la definición correcta de una línea de código donde se usa una de las funciones sobrecargadas. En mi configuración de prueba mínima usando el complemento vim vim-lsp
funcionó.
Configuración mínima
$MYVIMRC
es
source $VIMRUNTIME/defaults.vim
if executable('/usr/local/Cellar/llvm/7.0.0/bin/clangd')
augroup Clangd
autocmd User lsp_setup call lsp#register_server({
\ 'name': 'clangd',
\ 'cmd': {server_info->['/usr/local/Cellar/llvm/7.0.0/bin/clangd']},
\ 'whitelist': ['c', 'cpp', 'objc', 'objcpp'],
\ })
autocmd FileType c,cpp,objc,objcpp nmap <buffer> gd <plug>(lsp-definition)
autocmd FileType c,cpp,objc,objcpp setlocal omnifunc=lsp#complete
augroup END
endif
La instalación de los vim-lsp
cuales requiere async.vim
en vim8 packpath
$ cd ~/.vim
$ git clone https://github.com/prabirshrestha/async.vim pack/prabirshrestha/start/async.vim/
$ git clone https://github.com/prabirshrestha/vim-lsp pack/prabirshrestha/start/vim-lsp/
Ahora su configuración vim debería verse así (omitiendo archivos y carpetas más profundamente anidados)
~/.vim
❯ tree -L 4 -F
.
├── pack/
│ └── prabirshrestha/
│ └── start/
│ ├── async.vim/
│ └── vim-lsp/
└── vimrc
5 directories, 1 file
Prueba
Ahora considere el archivo cpp
void abc(int a, int b) {
}
void abc(int a, int b, int c) {
}
int main(int argc, char const *argv[])
{
abc(1,2);
abc(1,2,3);
return 0;
}
Al pulsar gd
sobre el abc
de
abc(1,2)
salta a la primera línea, y de
abc(1,2,3)
salta a la quinta línea.
Entorno y versiones:
vim
: MacVim 8.1.950 (155); instalado desde DMG desde github en macOS 10.14.3
clangd
: 7.0.0; instalado con $ brew install llvm
(no en $PATH
forma predeterminada, usar ruta absoluta)
vim-lsp
: e3f6933 (7 de marzo de 2019) y async.vim
: f301455 (13 de febrero de 2019)