He probado clangdpara 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-lspfuncionó.
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-lspcuales requiere async.vimen 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 gdsobre el abcde
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 $PATHforma predeterminada, usar ruta absoluta)
vim-lsp: e3f6933 (7 de marzo de 2019) y async.vim: f301455 (13 de febrero de 2019)