summaryrefslogtreecommitdiff
path: root/ale_linters/cpp
diff options
context:
space:
mode:
authorw0rp <devw0rp@gmail.com>2019-05-20 19:57:08 +0100
committerw0rp <devw0rp@gmail.com>2019-05-20 19:57:08 +0100
commit143af2b9fd78dbfd5ee8ae727a522dd2dcc79b61 (patch)
tree2c44b311a5f127cba4654ff4f9a1e450d55f365a /ale_linters/cpp
parent781bf1502f78f7882347a70b587512a0e94ea380 (diff)
downloadale-143af2b9fd78dbfd5ee8ae727a522dd2dcc79b61.zip
Fix #2421 - Use compile_commands.json in build dirs to find roots
Diffstat (limited to 'ale_linters/cpp')
-rw-r--r--ale_linters/cpp/clangcheck.vim3
-rw-r--r--ale_linters/cpp/clangd.vim8
-rw-r--r--ale_linters/cpp/cquery.vim10
3 files changed, 9 insertions, 12 deletions
diff --git a/ale_linters/cpp/clangcheck.vim b/ale_linters/cpp/clangcheck.vim
index b511a413..7d32a57c 100644
--- a/ale_linters/cpp/clangcheck.vim
+++ b/ale_linters/cpp/clangcheck.vim
@@ -12,7 +12,8 @@ function! ale_linters#cpp#clangcheck#GetCommand(buffer) abort
let l:build_dir = ale#Var(a:buffer, 'c_build_dir')
if empty(l:build_dir)
- let l:build_dir = ale#path#Dirname(ale#c#FindCompileCommands(a:buffer))
+ let [l:root, l:json_file] = ale#c#FindCompileCommands(a:buffer)
+ let l:build_dir = ale#path#Dirname(l:json_file)
endif
" The extra arguments in the command are used to prevent .plist files from
diff --git a/ale_linters/cpp/clangd.vim b/ale_linters/cpp/clangd.vim
index 4a8ff4f6..fab605f4 100644
--- a/ale_linters/cpp/clangd.vim
+++ b/ale_linters/cpp/clangd.vim
@@ -4,12 +4,6 @@
call ale#Set('cpp_clangd_executable', 'clangd')
call ale#Set('cpp_clangd_options', '')
-function! ale_linters#cpp#clangd#GetProjectRoot(buffer) abort
- let l:project_root = ale#path#FindNearestFile(a:buffer, 'compile_commands.json')
-
- return !empty(l:project_root) ? fnamemodify(l:project_root, ':h') : ''
-endfunction
-
function! ale_linters#cpp#clangd#GetCommand(buffer) abort
return '%e' . ale#Pad(ale#Var(a:buffer, 'cpp_clangd_options'))
endfunction
@@ -19,5 +13,5 @@ call ale#linter#Define('cpp', {
\ 'lsp': 'stdio',
\ 'executable': {b -> ale#Var(b, 'cpp_clangd_executable')},
\ 'command': function('ale_linters#cpp#clangd#GetCommand'),
-\ 'project_root': function('ale_linters#cpp#clangd#GetProjectRoot'),
+\ 'project_root': function('ale#c#FindProjectRoot'),
\})
diff --git a/ale_linters/cpp/cquery.vim b/ale_linters/cpp/cquery.vim
index 0dd9f6ad..2971cdcb 100644
--- a/ale_linters/cpp/cquery.vim
+++ b/ale_linters/cpp/cquery.vim
@@ -5,13 +5,15 @@ call ale#Set('cpp_cquery_executable', 'cquery')
call ale#Set('cpp_cquery_cache_directory', expand('~/.cache/cquery'))
function! ale_linters#cpp#cquery#GetProjectRoot(buffer) abort
- let l:project_root = ale#path#FindNearestFile(a:buffer, 'compile_commands.json')
+ " Try to find cquery configuration files first.
+ let l:config = ale#path#FindNearestFile(a:buffer, '.cquery')
- if empty(l:project_root)
- let l:project_root = ale#path#FindNearestFile(a:buffer, '.cquery')
+ if !empty(l:config)
+ return fnamemodify(l:config, ':h')
endif
- return !empty(l:project_root) ? fnamemodify(l:project_root, ':h') : ''
+ " Fall back on default project root detection.
+ return ale#c#FindProjectRoot(a:buffer)
endfunction
function! ale_linters#cpp#cquery#GetInitializationOptions(buffer) abort