From 23ea62d40a0661755672a8ab0707507c58019bf0 Mon Sep 17 00:00:00 2001 From: w0rp Date: Mon, 17 Jul 2017 00:17:59 +0100 Subject: [PATCH] #711 - Make the cpplint executable configurable --- ale_linters/cpp/cpplint.vim | 17 +++++--- doc/ale-cpp.txt | 8 ++++ .../test_cpplint_command_callbacks.vader | 42 +++++++++++++++++++ 3 files changed, 62 insertions(+), 5 deletions(-) create mode 100644 test/command_callback/test_cpplint_command_callbacks.vader diff --git a/ale_linters/cpp/cpplint.vim b/ale_linters/cpp/cpplint.vim index 205c746..346ac81 100644 --- a/ale_linters/cpp/cpplint.vim +++ b/ale_linters/cpp/cpplint.vim @@ -1,18 +1,25 @@ " Author: Dawid Kurek https://github.com/dawikur " Description: cpplint for cpp files -if !exists('g:ale_cpp_cpplint_options') - let g:ale_cpp_cpplint_options = '' -endif +call ale#Set('cpp_cpplint_executable', 'cpplint') +call ale#Set('cpp_cpplint_options', '') + +function! ale_linters#cpp#cpplint#GetExecutable(buffer) abort + return ale#Var(a:buffer, 'cpp_cpplint_executable') +endfunction function! ale_linters#cpp#cpplint#GetCommand(buffer) abort - return 'cpplint ' . ale#Var(a:buffer, 'cpp_cpplint_options') . ' %s' + let l:options = ale#Var(a:buffer, 'cpp_cpplint_options') + + return ale#Escape(ale_linters#cpp#cpplint#GetExecutable(a:buffer)) + \ . (!empty(l:options) ? ' ' . l:options : '') + \ . ' %s' endfunction call ale#linter#Define('cpp', { \ 'name': 'cpplint', \ 'output_stream': 'stderr', -\ 'executable': 'cpplint', +\ 'executable_callback': 'ale_linters#cpp#cpplint#GetExecutable', \ 'command_callback': 'ale_linters#cpp#cpplint#GetCommand', \ 'callback': 'ale#handlers#cpplint#HandleCppLintFormat', \ 'lint_file': 1, diff --git a/doc/ale-cpp.txt b/doc/ale-cpp.txt index ed852b4..854e9b4 100644 --- a/doc/ale-cpp.txt +++ b/doc/ale-cpp.txt @@ -154,6 +154,14 @@ g:ale_cpp_cppcheck_options *g:ale_cpp_cppcheck_options* =============================================================================== cpplint *ale-cpp-cpplint* +g:ale_cpp_cpplint_executable *g:ale_cpp_cpplint_executable* + *b:ale_cpp_cpplint_executable* + Type: |String| + Default: `'cpplint'` + + This variable can be changed to use a different executable for cpplint. + + g:ale_cpp_cpplint_options *g:ale_cpp_cpplint_options* *b:ale_cpp_cpplint_options* Type: |String| diff --git a/test/command_callback/test_cpplint_command_callbacks.vader b/test/command_callback/test_cpplint_command_callbacks.vader new file mode 100644 index 0000000..34746a1 --- /dev/null +++ b/test/command_callback/test_cpplint_command_callbacks.vader @@ -0,0 +1,42 @@ +Before: + Save g:ale_cpp_cpplint_executable + Save g:ale_cpp_cpplint_options + + unlet! g:ale_cpp_cpplint_executable + unlet! b:ale_cpp_cpplint_executable + unlet! g:ale_cpp_cpplint_options + unlet! b:ale_cpp_cpplint_options + + runtime ale_linters/cpp/cpplint.vim + +After: + Restore + unlet! b:command_tail + unlet! b:ale_cpp_cpplint_executable + unlet! b:ale_cpp_cpplint_options + call ale#linter#Reset() + +Execute(The executable should be configurable): + AssertEqual 'cpplint', ale_linters#cpp#cpplint#GetExecutable(bufnr('')) + + let b:ale_cpp_cpplint_executable = 'foobar' + + AssertEqual 'foobar', ale_linters#cpp#cpplint#GetExecutable(bufnr('')) + +Execute(The executable should be used in the command): + AssertEqual + \ ale#Escape('cpplint') . ' %s', + \ ale_linters#cpp#cpplint#GetCommand(bufnr('')) + + let b:ale_cpp_cpplint_executable = 'foobar' + + AssertEqual + \ ale#Escape('foobar') . ' %s', + \ ale_linters#cpp#cpplint#GetCommand(bufnr('')) + \ +Execute(The options should be configurable): + let b:ale_cpp_cpplint_options = '--something' + + AssertEqual + \ ale#Escape('cpplint') . ' --something %s', + \ ale_linters#cpp#cpplint#GetCommand(bufnr(''))