From 072750137f752c0a09fd1ff493da2bea6519b7ef Mon Sep 17 00:00:00 2001 From: Dan George Date: Sat, 20 Nov 2021 02:01:32 -0800 Subject: Fix --file-filter option on cppcheck command (#3987) * Add cppcheck handler match on misra msg * Fix cppcheck --file-filter setting This time, the tests and actually usage both work. Co-authored-by: Dan George --- autoload/ale/handlers/cppcheck.vim | 4 +--- test/linter/test_c_cppcheck.vader | 11 +++++++---- test/linter/test_cpp_cppcheck.vader | 11 +++++++---- 3 files changed, 15 insertions(+), 11 deletions(-) diff --git a/autoload/ale/handlers/cppcheck.vim b/autoload/ale/handlers/cppcheck.vim index cf69df26..150bb007 100644 --- a/autoload/ale/handlers/cppcheck.vim +++ b/autoload/ale/handlers/cppcheck.vim @@ -46,13 +46,11 @@ function! ale#handlers#cppcheck#GetCompileCommandsOptions(buffer) abort " If we find it, we'll `cd` to where the compile_commands.json file is, " then use the file to set up import paths, etc. let [l:dir, l:json_path] = ale#c#FindCompileCommands(a:buffer) - let b:root_index = len(l:dir) + 1 - let b:buffer_file= bufname(a:buffer) " By default, cppcheck processes every config in compile_commands.json. " Use --file-filter to limit to just the buffer file. return !empty(l:json_path) - \ ? '--project=' . ale#Escape(l:json_path[b:root_index: ]) . ' --file-filter=' . ale#Escape(b:buffer_file[b:root_index:]) + \ ? '--project=' . ale#Escape(l:json_path[len(l:dir) + 1: ]) . ' --file-filter=' . ale#Escape(bufname(a:buffer)) \ : '' endfunction diff --git a/test/linter/test_c_cppcheck.vader b/test/linter/test_c_cppcheck.vader index c0611143..0cc3a5d3 100644 --- a/test/linter/test_c_cppcheck.vader +++ b/test/linter/test_c_cppcheck.vader @@ -3,6 +3,7 @@ Before: let b:command_tail = ' -q --language=c --template=' . ale#Escape('{file}:{line}:{column}: {severity}:{inconclusive:inconclusive:} {message} [{id}]\\n{code}') . ' --enable=style -I' . ale#Escape(ale#path#Simplify(g:dir)) .' %t' After: + unlet! b:rel_file_path unlet! b:command_tail call ale#assert#TearDownLinterTest() @@ -15,25 +16,27 @@ Execute(The executable should be configurable): AssertLinter 'foobar', ale#Escape('foobar') . b:command_tail Execute(cppcheck for C should detect compile_commands.json files): - call ale#test#SetFilename('../test-files/cppcheck/one/foo.c') + let b:rel_file_path = '../test-files/cppcheck/one/foo.c' + call ale#test#SetFilename(b:rel_file_path) AssertLinterCwd ale#path#Simplify(g:dir . '/../test-files/cppcheck/one') AssertLinter 'cppcheck', ale#Escape('cppcheck') \ . ' -q --language=c' \ . ' --template=' . ale#Escape('{file}:{line}:{column}: {severity}:{inconclusive:inconclusive:} {message} [{id}]\\n{code}') \ . ' --project=' . ale#Escape('compile_commands.json') - \ . ' --file-filter=' . ale#Escape('foo.c') + \ . ' --file-filter=' . ale#Escape(ale#test#GetFilename(b:rel_file_path)) \ . ' --enable=style %t' Execute(cppcheck for C should detect compile_commands.json files in build directories): - call ale#test#SetFilename('../test-files/cppcheck/with_build_dir/foo.c') + let b:rel_file_path = '../test-files/cppcheck/with_build_dir/foo.c' + call ale#test#SetFilename(b:rel_file_path) AssertLinterCwd ale#path#Simplify(g:dir . '/../test-files/cppcheck/with_build_dir') AssertLinter 'cppcheck', ale#Escape('cppcheck') \ . ' -q --language=c' \ . ' --template=' . ale#Escape('{file}:{line}:{column}: {severity}:{inconclusive:inconclusive:} {message} [{id}]\\n{code}') \ . ' --project=' . ale#Escape(ale#path#Simplify('build/compile_commands.json')) - \ . ' --file-filter=' . ale#Escape('foo.c') + \ . ' --file-filter=' . ale#Escape(ale#test#GetFilename(b:rel_file_path)) \ . ' --enable=style %t' Execute(cppcheck for C should include file dir if compile_commands.json file is not found): diff --git a/test/linter/test_cpp_cppcheck.vader b/test/linter/test_cpp_cppcheck.vader index 2cde1da4..21d6707d 100644 --- a/test/linter/test_cpp_cppcheck.vader +++ b/test/linter/test_cpp_cppcheck.vader @@ -9,6 +9,7 @@ After: set buftype=nofile endif + unlet! b:rel_file_path unlet! b:command_tail call ale#assert#TearDownLinterTest() @@ -21,25 +22,27 @@ Execute(The executable should be configurable): AssertLinter 'foobar', ale#Escape('foobar') . b:command_tail Execute(cppcheck for C++ should detect compile_commands.json files): - call ale#test#SetFilename('../test-files/cppcheck/one/foo.cpp') + let b:rel_file_path = '../test-files/cppcheck/one/foo.cpp' + call ale#test#SetFilename(b:rel_file_path) AssertLinterCwd ale#path#Simplify(g:dir . '/../test-files/cppcheck/one') AssertLinter 'cppcheck', ale#Escape('cppcheck') \ . ' -q --language=c++' \ . ' --template=' . ale#Escape('{file}:{line}:{column}: {severity}:{inconclusive:inconclusive:} {message} [{id}]\\n{code}') \ . ' --project=' . ale#Escape('compile_commands.json') - \ . ' --file-filter=' . ale#Escape('foo.cpp') + \ . ' --file-filter=' . ale#Escape(ale#test#GetFilename(b:rel_file_path)) \ . ' --enable=style %t' Execute(cppcheck for C++ should detect compile_commands.json files in build directories): - call ale#test#SetFilename('../test-files/cppcheck/with_build_dir/foo.cpp') + let b:rel_file_path = '../test-files/cppcheck/with_build_dir/foo.cpp' + call ale#test#SetFilename(b:rel_file_path) AssertLinterCwd ale#path#Simplify(g:dir . '/../test-files/cppcheck/with_build_dir') AssertLinter 'cppcheck', ale#Escape('cppcheck') \ . ' -q --language=c++' \ . ' --template=' . ale#Escape('{file}:{line}:{column}: {severity}:{inconclusive:inconclusive:} {message} [{id}]\\n{code}') \ . ' --project=' . ale#Escape(ale#path#Simplify('build/compile_commands.json')) - \ . ' --file-filter=' . ale#Escape('foo.cpp') + \ . ' --file-filter=' . ale#Escape(ale#test#GetFilename(b:rel_file_path)) \ . ' --enable=style %t' Execute(cppcheck for C++ should include file dir if compile_commands.json file is not found): -- cgit v1.2.3