Use compdb to post-process compile_commands.json
When selecting a `:BuildDir` for the `clangd` LSP use `compdb` to post-process the `compile_commands.json` to also include flags for stand alone header files.
This commit is contained in:
parent
eabec4e9b6
commit
0961c13316
@ -4,6 +4,7 @@
|
|||||||
- vim-vint
|
- vim-vint
|
||||||
- yamllint
|
- yamllint
|
||||||
- cmakelint
|
- cmakelint
|
||||||
|
- compdb
|
||||||
- repo:
|
- repo:
|
||||||
- remote: https://github.com/k-takata/minpac.git
|
- remote: https://github.com/k-takata/minpac.git
|
||||||
location: ~/.vim/pack/minpac/opt/minpac
|
location: ~/.vim/pack/minpac/opt/minpac
|
||||||
|
@ -28,6 +28,7 @@ function! build#dir(...) abort
|
|||||||
endfor
|
endfor
|
||||||
let l:index = inputlist(l:choices)
|
let l:index = inputlist(l:choices)
|
||||||
let l:dir = s:dirs[l:index - 1]
|
let l:dir = s:dirs[l:index - 1]
|
||||||
|
echomsg ' '.l:dir
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
else
|
else
|
||||||
@ -48,17 +49,30 @@ function! build#dir(...) abort
|
|||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
if exists('l:dir')
|
if exists('l:dir')
|
||||||
" Set build directory and restart YouCompleteMe.
|
" Set build directory.
|
||||||
let $BUILD_DIR = getcwd().'/'.substitute(l:dir, '\/$', '', '')
|
let l:cwd = substitute(getcwd(), '\\', '\/', 'g')
|
||||||
|
let $BUILD_DIR = l:cwd.'/'.substitute(l:dir, '\/$', '', '')
|
||||||
|
if executable('compdb')
|
||||||
|
" Post-process compile_commands.json with compdb, adds header files to
|
||||||
|
" missing compile_commands.json for more accurate diagnostics.
|
||||||
|
let l:database_dir = l:cwd.'/.vim'
|
||||||
|
let l:compile_commands = l:database_dir.'/compile_commands.json'
|
||||||
|
call systemlist('compdb -p '.$BUILD_DIR.' list > '.l:compile_commands)
|
||||||
|
else
|
||||||
|
let l:database_dir = $BUILD_DIR
|
||||||
|
endif
|
||||||
|
" Read/create .vim/coc-settings.json
|
||||||
let l:coc_settings = {}
|
let l:coc_settings = {}
|
||||||
if isdirectory('.vim')
|
if isdirectory('.vim')
|
||||||
let l:coc_settings = json_decode(join(readfile('.vim/coc-settings.json'), ''))
|
let l:coc_settings = json_decode(join(readfile('.vim/coc-settings.json'), ''))
|
||||||
else
|
else
|
||||||
call mkdir('.vim')
|
call mkdir('.vim')
|
||||||
endif
|
endif
|
||||||
let l:coc_settings['clangd.compilationDatabasePath'] = $BUILD_DIR
|
" Update .vim/coc-settings.json with new build directory.
|
||||||
|
let l:coc_settings['clangd.compilationDatabasePath'] = l:database_dir
|
||||||
let l:coc_settings['cmake.lsp.buildDirectory'] = $BUILD_DIR
|
let l:coc_settings['cmake.lsp.buildDirectory'] = $BUILD_DIR
|
||||||
call writefile([json_encode(l:coc_settings)], '.vim/coc-settings.json')
|
call writefile([json_encode(l:coc_settings)], '.vim/coc-settings.json')
|
||||||
|
" Finally restart coc.nvim with new config.
|
||||||
CocRestart
|
CocRestart
|
||||||
endif
|
endif
|
||||||
endfunction
|
endfunction
|
||||||
|
Loading…
x
Reference in New Issue
Block a user