Ho testato clangd
per vedere se le funzioni sovraccaricate sono effettivamente distinte quando si cerca la definizione corretta da una riga di codice in cui viene utilizzata una delle funzioni sovraccaricate. Nella mia configurazione di test minima usando il plugin vim vim-lsp
ha funzionato.
Configurazione minima
$MYVIMRC
è
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 cui installazione vim-lsp
richiede async.vim
in 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/
Ora dovrebbe apparire la tua configurazione di vim (omettendo file e cartelle più annidati)
~/.vim
❯ tree -L 4 -F
.
├── pack/
│ └── prabirshrestha/
│ └── start/
│ ├── async.vim/
│ └── vim-lsp/
└── vimrc
5 directories, 1 file
Test
Ora considera il file 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;
}
Premendo gd
su abc
di
abc(1,2)
passa alla prima riga e di
abc(1,2,3)
passa alla quinta riga.
Ambiente e versioni:
vim
: MacVim 8.1.950 (155); installato da DMG da github su macOS 10.14.3
clangd
: 7.0.0; installato con $ brew install llvm
(non in $PATH
per impostazione predefinita, usa il percorso assoluto)
vim-lsp
: e3f6933 (7 marzo 2019) e async.vim
: f301455 (13 febbraio 2019)