#1167 Use the make -n parsing for C++ compilers, and document the new option
This commit is contained in:
parent
018831d601
commit
95ec9bb780
@ -8,15 +8,15 @@ function! ale_linters#cpp#clang#GetExecutable(buffer) abort
|
|||||||
return ale#Var(a:buffer, 'cpp_clang_executable')
|
return ale#Var(a:buffer, 'cpp_clang_executable')
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! ale_linters#cpp#clang#GetCommand(buffer) abort
|
function! ale_linters#cpp#clang#GetCommand(buffer, output) abort
|
||||||
let l:paths = ale#c#FindLocalHeaderPaths(a:buffer)
|
let l:cflags = ale#c#GetCFlags(a:buffer, a:output)
|
||||||
|
|
||||||
" -iquote with the directory the file is in makes #include work for
|
" -iquote with the directory the file is in makes #include work for
|
||||||
" headers in the same directory.
|
" headers in the same directory.
|
||||||
return ale#Escape(ale_linters#cpp#clang#GetExecutable(a:buffer))
|
return ale#Escape(ale_linters#cpp#clang#GetExecutable(a:buffer))
|
||||||
\ . ' -S -x c++ -fsyntax-only '
|
\ . ' -S -x c++ -fsyntax-only '
|
||||||
\ . '-iquote ' . ale#Escape(fnamemodify(bufname(a:buffer), ':p:h')) . ' '
|
\ . '-iquote ' . ale#Escape(fnamemodify(bufname(a:buffer), ':p:h')) . ' '
|
||||||
\ . ale#c#IncludeOptions(l:paths)
|
\ . l:cflags
|
||||||
\ . ale#Var(a:buffer, 'cpp_clang_options') . ' -'
|
\ . ale#Var(a:buffer, 'cpp_clang_options') . ' -'
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
@ -24,6 +24,9 @@ call ale#linter#Define('cpp', {
|
|||||||
\ 'name': 'clang',
|
\ 'name': 'clang',
|
||||||
\ 'output_stream': 'stderr',
|
\ 'output_stream': 'stderr',
|
||||||
\ 'executable_callback': 'ale_linters#cpp#clang#GetExecutable',
|
\ 'executable_callback': 'ale_linters#cpp#clang#GetExecutable',
|
||||||
\ 'command_callback': 'ale_linters#cpp#clang#GetCommand',
|
\ 'command_chain': [
|
||||||
|
\ {'callback': 'ale#c#GetMakeCommand', 'output_stream': 'stdout'},
|
||||||
|
\ {'callback': 'ale_linters#cpp#clang#GetCommand'},
|
||||||
|
\ ],
|
||||||
\ 'callback': 'ale#handlers#gcc#HandleGCCFormat',
|
\ 'callback': 'ale#handlers#gcc#HandleGCCFormat',
|
||||||
\})
|
\})
|
||||||
|
@ -8,15 +8,15 @@ function! ale_linters#cpp#gcc#GetExecutable(buffer) abort
|
|||||||
return ale#Var(a:buffer, 'cpp_gcc_executable')
|
return ale#Var(a:buffer, 'cpp_gcc_executable')
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! ale_linters#cpp#gcc#GetCommand(buffer) abort
|
function! ale_linters#cpp#gcc#GetCommand(buffer, output) abort
|
||||||
let l:paths = ale#c#FindLocalHeaderPaths(a:buffer)
|
let l:cflags = ale#c#GetCFlags(a:buffer, a:output)
|
||||||
|
|
||||||
" -iquote with the directory the file is in makes #include work for
|
" -iquote with the directory the file is in makes #include work for
|
||||||
" headers in the same directory.
|
" headers in the same directory.
|
||||||
return ale#Escape(ale_linters#cpp#gcc#GetExecutable(a:buffer))
|
return ale#Escape(ale_linters#cpp#gcc#GetExecutable(a:buffer))
|
||||||
\ . ' -S -x c++ -fsyntax-only '
|
\ . ' -S -x c++ -fsyntax-only '
|
||||||
\ . '-iquote ' . ale#Escape(fnamemodify(bufname(a:buffer), ':p:h')) . ' '
|
\ . '-iquote ' . ale#Escape(fnamemodify(bufname(a:buffer), ':p:h')) . ' '
|
||||||
\ . ale#c#IncludeOptions(l:paths)
|
\ . l:cflags
|
||||||
\ . ale#Var(a:buffer, 'cpp_gcc_options') . ' -'
|
\ . ale#Var(a:buffer, 'cpp_gcc_options') . ' -'
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
@ -24,6 +24,9 @@ call ale#linter#Define('cpp', {
|
|||||||
\ 'name': 'g++',
|
\ 'name': 'g++',
|
||||||
\ 'output_stream': 'stderr',
|
\ 'output_stream': 'stderr',
|
||||||
\ 'executable_callback': 'ale_linters#cpp#gcc#GetExecutable',
|
\ 'executable_callback': 'ale_linters#cpp#gcc#GetExecutable',
|
||||||
\ 'command_callback': 'ale_linters#cpp#gcc#GetCommand',
|
\ 'command_chain': [
|
||||||
|
\ {'callback': 'ale#c#GetMakeCommand', 'output_stream': 'stdout'},
|
||||||
|
\ {'callback': 'ale_linters#cpp#gcc#GetCommand'},
|
||||||
|
\ ],
|
||||||
\ 'callback': 'ale#handlers#gcc#HandleGCCFormat',
|
\ 'callback': 'ale#handlers#gcc#HandleGCCFormat',
|
||||||
\})
|
\})
|
||||||
|
@ -31,7 +31,18 @@ g:ale_c_build_dir *g:ale_c_build_dir*
|
|||||||
database (it can be useful if multiple builds are in multiple build
|
database (it can be useful if multiple builds are in multiple build
|
||||||
subdirectories in the project tree).
|
subdirectories in the project tree).
|
||||||
This feature is also most useful for the clang tools linters, wrapped
|
This feature is also most useful for the clang tools linters, wrapped
|
||||||
aroung LibTooling (namely clang-tidy here)
|
around LibTooling (namely clang-tidy here)
|
||||||
|
|
||||||
|
|
||||||
|
g:ale_c_parse_makefile *g:ale_c_parse_makefile*
|
||||||
|
*b:ale_c_parse_makefile*
|
||||||
|
Type: |Number|
|
||||||
|
Default: `0`
|
||||||
|
|
||||||
|
If set to `1`, ALE will run `make -n` to automatically determine flags to
|
||||||
|
set for C or C++ compilers. This can make it easier to determine the correct
|
||||||
|
build flags to use for different files.
|
||||||
|
|
||||||
|
|
||||||
===============================================================================
|
===============================================================================
|
||||||
clang *ale-c-clang*
|
clang *ale-c-clang*
|
||||||
|
@ -5,8 +5,11 @@ ALE C++ Integration *ale-cpp-options*
|
|||||||
===============================================================================
|
===============================================================================
|
||||||
Global Options
|
Global Options
|
||||||
|
|
||||||
The |g:ale_c_build_dir_names| and |g:ale_c_build_dir| also apply to some C++
|
The following C options also apply to some C++ linters too.
|
||||||
linters too.
|
|
||||||
|
* |g:ale_c_build_dir_names|
|
||||||
|
* |g:ale_c_build_dir|
|
||||||
|
* |g:ale_c_parse_makefile|
|
||||||
|
|
||||||
|
|
||||||
===============================================================================
|
===============================================================================
|
||||||
|
@ -30,10 +30,10 @@ Execute(The executable should be configurable):
|
|||||||
Execute(The executable should be used in the command):
|
Execute(The executable should be used in the command):
|
||||||
AssertEqual
|
AssertEqual
|
||||||
\ ale#Escape('clang++') . b:command_tail,
|
\ ale#Escape('clang++') . b:command_tail,
|
||||||
\ ale_linters#cpp#clang#GetCommand(bufnr(''))
|
\ ale_linters#cpp#clang#GetCommand(bufnr(''), [])
|
||||||
|
|
||||||
let b:ale_cpp_clang_executable = 'foobar'
|
let b:ale_cpp_clang_executable = 'foobar'
|
||||||
|
|
||||||
AssertEqual
|
AssertEqual
|
||||||
\ ale#Escape('foobar') . b:command_tail,
|
\ ale#Escape('foobar') . b:command_tail,
|
||||||
\ ale_linters#cpp#clang#GetCommand(bufnr(''))
|
\ ale_linters#cpp#clang#GetCommand(bufnr(''), [])
|
||||||
|
@ -30,10 +30,10 @@ Execute(The executable should be configurable):
|
|||||||
Execute(The executable should be used in the command):
|
Execute(The executable should be used in the command):
|
||||||
AssertEqual
|
AssertEqual
|
||||||
\ ale#Escape('gcc') . b:command_tail,
|
\ ale#Escape('gcc') . b:command_tail,
|
||||||
\ ale_linters#cpp#gcc#GetCommand(bufnr(''))
|
\ ale_linters#cpp#gcc#GetCommand(bufnr(''), [])
|
||||||
|
|
||||||
let b:ale_cpp_gcc_executable = 'foobar'
|
let b:ale_cpp_gcc_executable = 'foobar'
|
||||||
|
|
||||||
AssertEqual
|
AssertEqual
|
||||||
\ ale#Escape('foobar') . b:command_tail,
|
\ ale#Escape('foobar') . b:command_tail,
|
||||||
\ ale_linters#cpp#gcc#GetCommand(bufnr(''))
|
\ ale_linters#cpp#gcc#GetCommand(bufnr(''), [])
|
||||||
|
@ -146,7 +146,7 @@ Execute(The C++ GCC handler should include 'include' directories for projects wi
|
|||||||
\ . '-iquote ' . ale#Escape(ale#path#Simplify(g:dir . '/test_c_projects/makefile_project/subdir')) . ' '
|
\ . '-iquote ' . ale#Escape(ale#path#Simplify(g:dir . '/test_c_projects/makefile_project/subdir')) . ' '
|
||||||
\ . ' -I' . ale#Escape(ale#path#Simplify(g:dir . '/test_c_projects/makefile_project/include')) . ' '
|
\ . ' -I' . ale#Escape(ale#path#Simplify(g:dir . '/test_c_projects/makefile_project/include')) . ' '
|
||||||
\ . ' -'
|
\ . ' -'
|
||||||
\ , ale_linters#cpp#gcc#GetCommand(bufnr(''))
|
\ , ale_linters#cpp#gcc#GetCommand(bufnr(''), [])
|
||||||
|
|
||||||
Execute(The C++ GCC handler should include 'include' directories for projects with a configure file):
|
Execute(The C++ GCC handler should include 'include' directories for projects with a configure file):
|
||||||
runtime! ale_linters/cpp/gcc.vim
|
runtime! ale_linters/cpp/gcc.vim
|
||||||
@ -159,7 +159,7 @@ Execute(The C++ GCC handler should include 'include' directories for projects wi
|
|||||||
\ . '-iquote ' . ale#Escape(ale#path#Simplify(g:dir . '/test_c_projects/configure_project/subdir')) . ' '
|
\ . '-iquote ' . ale#Escape(ale#path#Simplify(g:dir . '/test_c_projects/configure_project/subdir')) . ' '
|
||||||
\ . ' -I' . ale#Escape(ale#path#Simplify(g:dir . '/test_c_projects/configure_project/include')) . ' '
|
\ . ' -I' . ale#Escape(ale#path#Simplify(g:dir . '/test_c_projects/configure_project/include')) . ' '
|
||||||
\ . ' -'
|
\ . ' -'
|
||||||
\ , ale_linters#cpp#gcc#GetCommand(bufnr(''))
|
\ , ale_linters#cpp#gcc#GetCommand(bufnr(''), [])
|
||||||
|
|
||||||
Execute(The C++ GCC handler should include root directories for projects with .h files in them):
|
Execute(The C++ GCC handler should include root directories for projects with .h files in them):
|
||||||
runtime! ale_linters/cpp/gcc.vim
|
runtime! ale_linters/cpp/gcc.vim
|
||||||
@ -172,7 +172,7 @@ Execute(The C++ GCC handler should include root directories for projects with .h
|
|||||||
\ . '-iquote ' . ale#Escape(ale#path#Simplify(g:dir . '/test_c_projects/h_file_project/subdir')) . ' '
|
\ . '-iquote ' . ale#Escape(ale#path#Simplify(g:dir . '/test_c_projects/h_file_project/subdir')) . ' '
|
||||||
\ . ' -I' . ale#Escape(ale#path#Simplify(g:dir . '/test_c_projects/h_file_project')) . ' '
|
\ . ' -I' . ale#Escape(ale#path#Simplify(g:dir . '/test_c_projects/h_file_project')) . ' '
|
||||||
\ . ' -'
|
\ . ' -'
|
||||||
\ , ale_linters#cpp#gcc#GetCommand(bufnr(''))
|
\ , ale_linters#cpp#gcc#GetCommand(bufnr(''), [])
|
||||||
|
|
||||||
Execute(The C++ GCC handler should include root directories for projects with .hpp files in them):
|
Execute(The C++ GCC handler should include root directories for projects with .hpp files in them):
|
||||||
runtime! ale_linters/cpp/gcc.vim
|
runtime! ale_linters/cpp/gcc.vim
|
||||||
@ -185,7 +185,7 @@ Execute(The C++ GCC handler should include root directories for projects with .h
|
|||||||
\ . '-iquote ' . ale#Escape(ale#path#Simplify(g:dir . '/test_c_projects/hpp_file_project/subdir')) . ' '
|
\ . '-iquote ' . ale#Escape(ale#path#Simplify(g:dir . '/test_c_projects/hpp_file_project/subdir')) . ' '
|
||||||
\ . ' -I' . ale#Escape(ale#path#Simplify(g:dir . '/test_c_projects/hpp_file_project')) . ' '
|
\ . ' -I' . ale#Escape(ale#path#Simplify(g:dir . '/test_c_projects/hpp_file_project')) . ' '
|
||||||
\ . ' -'
|
\ . ' -'
|
||||||
\ , ale_linters#cpp#gcc#GetCommand(bufnr(''))
|
\ , ale_linters#cpp#gcc#GetCommand(bufnr(''), [])
|
||||||
|
|
||||||
Execute(The C++ Clang handler should include 'include' directories for projects with a Makefile):
|
Execute(The C++ Clang handler should include 'include' directories for projects with a Makefile):
|
||||||
runtime! ale_linters/cpp/clang.vim
|
runtime! ale_linters/cpp/clang.vim
|
||||||
@ -198,7 +198,7 @@ Execute(The C++ Clang handler should include 'include' directories for projects
|
|||||||
\ . '-iquote ' . ale#Escape(ale#path#Simplify(g:dir . '/test_c_projects/makefile_project/subdir')) . ' '
|
\ . '-iquote ' . ale#Escape(ale#path#Simplify(g:dir . '/test_c_projects/makefile_project/subdir')) . ' '
|
||||||
\ . ' -I' . ale#Escape(ale#path#Simplify(g:dir . '/test_c_projects/makefile_project/include')) . ' '
|
\ . ' -I' . ale#Escape(ale#path#Simplify(g:dir . '/test_c_projects/makefile_project/include')) . ' '
|
||||||
\ . ' -'
|
\ . ' -'
|
||||||
\ , ale_linters#cpp#clang#GetCommand(bufnr(''))
|
\ , ale_linters#cpp#clang#GetCommand(bufnr(''), [])
|
||||||
|
|
||||||
Execute(The C++ Clang handler should include 'include' directories for projects with a configure file):
|
Execute(The C++ Clang handler should include 'include' directories for projects with a configure file):
|
||||||
runtime! ale_linters/cpp/clang.vim
|
runtime! ale_linters/cpp/clang.vim
|
||||||
@ -211,7 +211,7 @@ Execute(The C++ Clang handler should include 'include' directories for projects
|
|||||||
\ . '-iquote ' . ale#Escape(ale#path#Simplify(g:dir . '/test_c_projects/configure_project/subdir')) . ' '
|
\ . '-iquote ' . ale#Escape(ale#path#Simplify(g:dir . '/test_c_projects/configure_project/subdir')) . ' '
|
||||||
\ . ' -I' . ale#Escape(ale#path#Simplify(g:dir . '/test_c_projects/configure_project/include')) . ' '
|
\ . ' -I' . ale#Escape(ale#path#Simplify(g:dir . '/test_c_projects/configure_project/include')) . ' '
|
||||||
\ . ' -'
|
\ . ' -'
|
||||||
\ , ale_linters#cpp#clang#GetCommand(bufnr(''))
|
\ , ale_linters#cpp#clang#GetCommand(bufnr(''), [])
|
||||||
|
|
||||||
Execute(The C++ Clang handler should include root directories for projects with .h files in them):
|
Execute(The C++ Clang handler should include root directories for projects with .h files in them):
|
||||||
runtime! ale_linters/cpp/clang.vim
|
runtime! ale_linters/cpp/clang.vim
|
||||||
@ -224,7 +224,7 @@ Execute(The C++ Clang handler should include root directories for projects with
|
|||||||
\ . '-iquote ' . ale#Escape(ale#path#Simplify(g:dir . '/test_c_projects/h_file_project/subdir')) . ' '
|
\ . '-iquote ' . ale#Escape(ale#path#Simplify(g:dir . '/test_c_projects/h_file_project/subdir')) . ' '
|
||||||
\ . ' -I' . ale#Escape(ale#path#Simplify(g:dir . '/test_c_projects/h_file_project')) . ' '
|
\ . ' -I' . ale#Escape(ale#path#Simplify(g:dir . '/test_c_projects/h_file_project')) . ' '
|
||||||
\ . ' -'
|
\ . ' -'
|
||||||
\ , ale_linters#cpp#clang#GetCommand(bufnr(''))
|
\ , ale_linters#cpp#clang#GetCommand(bufnr(''), [])
|
||||||
|
|
||||||
Execute(The C++ Clang handler should include root directories for projects with .hpp files in them):
|
Execute(The C++ Clang handler should include root directories for projects with .hpp files in them):
|
||||||
runtime! ale_linters/cpp/clang.vim
|
runtime! ale_linters/cpp/clang.vim
|
||||||
@ -237,7 +237,7 @@ Execute(The C++ Clang handler should include root directories for projects with
|
|||||||
\ . '-iquote ' . ale#Escape(ale#path#Simplify(g:dir . '/test_c_projects/hpp_file_project/subdir')) . ' '
|
\ . '-iquote ' . ale#Escape(ale#path#Simplify(g:dir . '/test_c_projects/hpp_file_project/subdir')) . ' '
|
||||||
\ . ' -I' . ale#Escape(ale#path#Simplify(g:dir . '/test_c_projects/hpp_file_project')) . ' '
|
\ . ' -I' . ale#Escape(ale#path#Simplify(g:dir . '/test_c_projects/hpp_file_project')) . ' '
|
||||||
\ . ' -'
|
\ . ' -'
|
||||||
\ , ale_linters#cpp#clang#GetCommand(bufnr(''))
|
\ , ale_linters#cpp#clang#GetCommand(bufnr(''), [])
|
||||||
|
|
||||||
Execute(The C++ Clang handler shoud use the include directory based on the .git location):
|
Execute(The C++ Clang handler shoud use the include directory based on the .git location):
|
||||||
runtime! ale_linters/cpp/clang.vim
|
runtime! ale_linters/cpp/clang.vim
|
||||||
@ -258,7 +258,7 @@ Execute(The C++ Clang handler shoud use the include directory based on the .git
|
|||||||
\ . '-iquote ' . ale#Escape(ale#path#Simplify(g:dir . '/test_c_projects/git_and_nested_makefiles/src')) . ' '
|
\ . '-iquote ' . ale#Escape(ale#path#Simplify(g:dir . '/test_c_projects/git_and_nested_makefiles/src')) . ' '
|
||||||
\ . ' -I' . ale#Escape(ale#path#Simplify(g:dir . '/test_c_projects/git_and_nested_makefiles/include')) . ' '
|
\ . ' -I' . ale#Escape(ale#path#Simplify(g:dir . '/test_c_projects/git_and_nested_makefiles/include')) . ' '
|
||||||
\ . ' -'
|
\ . ' -'
|
||||||
\ , ale_linters#cpp#clang#GetCommand(bufnr(''))
|
\ , ale_linters#cpp#clang#GetCommand(bufnr(''), [])
|
||||||
|
|
||||||
Execute(The C++ ClangTidy handler should include json folders for projects with suitable build directory in them):
|
Execute(The C++ ClangTidy handler should include json folders for projects with suitable build directory in them):
|
||||||
runtime! ale_linters/cpp/clangtidy.vim
|
runtime! ale_linters/cpp/clangtidy.vim
|
||||||
|
Loading…
Reference in New Issue
Block a user