mirror of
https://github.com/dense-analysis/ale
synced 2024-12-17 20:05:31 +00:00
Add CMake linter cmake-lint (#4036)
* Add CMake linter cmake-lint Add support for the CMake linter provided by https://github.com/cheshirekow/cmake_format. * Escape cmake-lint executable and add linter tests
This commit is contained in:
parent
7cbb68da6c
commit
c9938bc293
43
ale_linters/cmake/cmake_lint.vim
Normal file
43
ale_linters/cmake/cmake_lint.vim
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
" Author: Carl Smedstad <carl.smedstad at protonmail dot com>
|
||||||
|
" Description: cmake-lint for cmake files
|
||||||
|
|
||||||
|
let g:ale_cmake_cmake_lint_executable =
|
||||||
|
\ get(g:, 'ale_cmake_cmake_lint_executable', 'cmake-lint')
|
||||||
|
|
||||||
|
let g:ale_cmake_cmake_lint_options =
|
||||||
|
\ get(g:, 'ale_cmake_cmake_lint_options', '')
|
||||||
|
|
||||||
|
function! ale_linters#cmake#cmake_lint#Executable(buffer) abort
|
||||||
|
return ale#Var(a:buffer, 'cmake_cmake_lint_executable')
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! ale_linters#cmake#cmake_lint#Command(buffer) abort
|
||||||
|
let l:executable = ale_linters#cmake#cmake_lint#Executable(a:buffer)
|
||||||
|
let l:options = ale#Var(a:buffer, 'cmake_cmake_lint_options')
|
||||||
|
|
||||||
|
return ale#Escape(l:executable) . ' ' . l:options . ' %t'
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! ale_linters#cmake#cmake_lint#Handle(buffer, lines) abort
|
||||||
|
let l:pattern = '\v^[^:]+:(\d+),?(\d+)?:\s\[([A-Z]\d+)\]\s(.+)$'
|
||||||
|
let l:output = []
|
||||||
|
|
||||||
|
for l:match in ale#util#GetMatches(a:lines, l:pattern)
|
||||||
|
call add(l:output, {
|
||||||
|
\ 'lnum': l:match[1] + 0,
|
||||||
|
\ 'col': l:match[2] + 0,
|
||||||
|
\ 'type': 'W',
|
||||||
|
\ 'code': l:match[3],
|
||||||
|
\ 'text': l:match[4],
|
||||||
|
\})
|
||||||
|
endfor
|
||||||
|
|
||||||
|
return l:output
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
call ale#linter#Define('cmake', {
|
||||||
|
\ 'name': 'cmake_lint',
|
||||||
|
\ 'executable': function('ale_linters#cmake#cmake_lint#Executable'),
|
||||||
|
\ 'command': function('ale_linters#cmake#cmake_lint#Command'),
|
||||||
|
\ 'callback': 'ale_linters#cmake#cmake_lint#Handle',
|
||||||
|
\})
|
@ -21,6 +21,25 @@ g:ale_cmake_cmakelint_options *g:ale_cmake_cmakelint_options*
|
|||||||
This variable can be set to pass additional options to cmakelint.
|
This variable can be set to pass additional options to cmakelint.
|
||||||
|
|
||||||
|
|
||||||
|
===============================================================================
|
||||||
|
cmake-lint *ale-cmake-cmake-lint*
|
||||||
|
|
||||||
|
g:ale_cmake_cmake_lint_executable *g:ale_cmake_cmake_lint_executable*
|
||||||
|
*b:ale_cmake_cmake_lint_executable*
|
||||||
|
Type: |String|
|
||||||
|
Default: `'cmake-lint'`
|
||||||
|
|
||||||
|
This variable can be set to change the path the cmake-lint.
|
||||||
|
|
||||||
|
|
||||||
|
g:ale_cmake_cmake_lint_options *g:ale_cmake_cmake_lint_options*
|
||||||
|
*b:ale_cmake_cmake_lint_options*
|
||||||
|
Type: |String|
|
||||||
|
Default: `''`
|
||||||
|
|
||||||
|
This variable can be set to pass additional options to cmake-lint.
|
||||||
|
|
||||||
|
|
||||||
===============================================================================
|
===============================================================================
|
||||||
cmake-format *ale-cmake-cmakeformat*
|
cmake-format *ale-cmake-cmakeformat*
|
||||||
|
|
||||||
|
@ -105,6 +105,7 @@ Notes:
|
|||||||
* `cfn-python-lint`
|
* `cfn-python-lint`
|
||||||
* CMake
|
* CMake
|
||||||
* `cmake-format`
|
* `cmake-format`
|
||||||
|
* `cmake-lint`
|
||||||
* `cmakelint`
|
* `cmakelint`
|
||||||
* CoffeeScript
|
* CoffeeScript
|
||||||
* `coffee`
|
* `coffee`
|
||||||
|
@ -2752,6 +2752,7 @@ documented in additional help files.
|
|||||||
cfn-python-lint.......................|ale-cloudformation-cfn-python-lint|
|
cfn-python-lint.......................|ale-cloudformation-cfn-python-lint|
|
||||||
cmake...................................|ale-cmake-options|
|
cmake...................................|ale-cmake-options|
|
||||||
cmakelint.............................|ale-cmake-cmakelint|
|
cmakelint.............................|ale-cmake-cmakelint|
|
||||||
|
cmake-lint............................|ale-cmake-cmake-lint|
|
||||||
cmake-format..........................|ale-cmake-cmakeformat|
|
cmake-format..........................|ale-cmake-cmakeformat|
|
||||||
cpp.....................................|ale-cpp-options|
|
cpp.....................................|ale-cpp-options|
|
||||||
astyle................................|ale-cpp-astyle|
|
astyle................................|ale-cpp-astyle|
|
||||||
|
@ -114,6 +114,7 @@ formatting.
|
|||||||
* [cfn-python-lint](https://github.com/awslabs/cfn-python-lint)
|
* [cfn-python-lint](https://github.com/awslabs/cfn-python-lint)
|
||||||
* CMake
|
* CMake
|
||||||
* [cmake-format](https://github.com/cheshirekow/cmake_format)
|
* [cmake-format](https://github.com/cheshirekow/cmake_format)
|
||||||
|
* [cmake-lint](https://github.com/cheshirekow/cmake_format)
|
||||||
* [cmakelint](https://github.com/richq/cmake-lint)
|
* [cmakelint](https://github.com/richq/cmake-lint)
|
||||||
* CoffeeScript
|
* CoffeeScript
|
||||||
* [coffee](http://coffeescript.org/)
|
* [coffee](http://coffeescript.org/)
|
||||||
|
30
test/handler/test_cmake_lint_handler.vader
Normal file
30
test/handler/test_cmake_lint_handler.vader
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
Before:
|
||||||
|
runtime ale_linters/cmake/cmake_lint.vim
|
||||||
|
|
||||||
|
After:
|
||||||
|
Restore
|
||||||
|
|
||||||
|
call ale#linter#Reset()
|
||||||
|
|
||||||
|
Execute(The cmake_lint handler should handle basic warnings):
|
||||||
|
AssertEqual
|
||||||
|
\ [
|
||||||
|
\ {
|
||||||
|
\ 'lnum': 126,
|
||||||
|
\ 'col': 0,
|
||||||
|
\ 'type': 'W',
|
||||||
|
\ 'code': 'C0301',
|
||||||
|
\ 'text': 'Line too long (136/80)',
|
||||||
|
\ },
|
||||||
|
\ {
|
||||||
|
\ 'lnum': 139,
|
||||||
|
\ 'col': 4,
|
||||||
|
\ 'type': 'W',
|
||||||
|
\ 'code': 'C0113',
|
||||||
|
\ 'text': 'Missing COMMENT in statement which allows it',
|
||||||
|
\ },
|
||||||
|
\ ],
|
||||||
|
\ ale_linters#cmake#cmake_lint#Handle(1, [
|
||||||
|
\ 'CMakeLists.txt:126: [C0301] Line too long (136/80)',
|
||||||
|
\ 'CMakeLists.txt:139,04: [C0113] Missing COMMENT in statement which allows it',
|
||||||
|
\ ])
|
13
test/linter/test_cmake_cmake_lint.vader
Normal file
13
test/linter/test_cmake_cmake_lint.vader
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
Before:
|
||||||
|
call ale#assert#SetUpLinterTest('cmake', 'cmake_lint')
|
||||||
|
|
||||||
|
After:
|
||||||
|
call ale#assert#TearDownLinterTest()
|
||||||
|
|
||||||
|
Execute(The default command should be correct):
|
||||||
|
AssertLinter 'cmake-lint', ale#Escape('cmake-lint') . ' %t'
|
||||||
|
|
||||||
|
Execute(The executable should be configurable):
|
||||||
|
let g:ale_cmake_cmake_lint_executable = 'foobar'
|
||||||
|
|
||||||
|
AssertLinter 'foobar', ale#Escape('foobar') . ' %t'
|
Loading…
Reference in New Issue
Block a user