diff options
Diffstat (limited to 'ale_linters')
-rw-r--r-- | ale_linters/cpp/clangtidy.vim | 21 |
1 files changed, 17 insertions, 4 deletions
diff --git a/ale_linters/cpp/clangtidy.vim b/ale_linters/cpp/clangtidy.vim index 5ff345fd..1d5fb77a 100644 --- a/ale_linters/cpp/clangtidy.vim +++ b/ale_linters/cpp/clangtidy.vim @@ -14,15 +14,28 @@ function! ale_linters#cpp#clangtidy#GetExecutable(buffer) abort return ale#Var(a:buffer, 'cpp_clangtidy_executable') endfunction -function! ale_linters#cpp#clangtidy#GetCommand(buffer) abort - let l:checks = join(ale#Var(a:buffer, 'cpp_clangtidy_checks'), ',') +function! s:GetBuildDirectory(buffer) abort + " Don't include build directory for header files, as compile_commands.json + " files don't consider headers to be translation units, and provide no + " commands for compiling header files. + if expand('#' . a:buffer) =~# '\v\.(h|hpp)$' + return '' + endif + let l:build_dir = ale#Var(a:buffer, 'c_build_dir') " c_build_dir has the priority if defined - if empty(l:build_dir) - let l:build_dir = ale#c#FindCompileCommands(a:buffer) + if !empty(l:build_dir) + return l:build_dir endif + return ale#c#FindCompileCommands(a:buffer) +endfunction + +function! ale_linters#cpp#clangtidy#GetCommand(buffer) abort + let l:checks = join(ale#Var(a:buffer, 'cpp_clangtidy_checks'), ',') + let l:build_dir = s:GetBuildDirectory(a:buffer) + " Get the extra options if we couldn't find a build directory. let l:options = empty(l:build_dir) \ ? ale#Var(a:buffer, 'cpp_clangtidy_options') |