summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--README.md2
-rw-r--r--ale_linters/cpp/clangcheck.vim37
-rw-r--r--doc/ale-cpp.txt37
-rw-r--r--doc/ale.txt1
4 files changed, 71 insertions, 6 deletions
diff --git a/README.md b/README.md
index 2bb0ef04..dacd93f0 100644
--- a/README.md
+++ b/README.md
@@ -62,7 +62,7 @@ name. That seems to be the fairest way to arrange this table.
| Bash | [-n flag](https://www.gnu.org/software/bash/manual/bash.html#index-set), [shellcheck](https://www.shellcheck.net/) |
| Bourne Shell | [-n flag](http://linux.die.net/man/1/sh), [shellcheck](https://www.shellcheck.net/) |
| C | [cppcheck](http://cppcheck.sourceforge.net), [gcc](https://gcc.gnu.org/), [clang](http://clang.llvm.org/)|
-| C++ (filetype cpp) | [clang](http://clang.llvm.org/), [clangtidy](http://clang.llvm.org/extra/clang-tidy/), [cppcheck](http://cppcheck.sourceforge.net), [cpplint](https://github.com/google/styleguide/tree/gh-pages/cpplint), [gcc](https://gcc.gnu.org/)|
+| C++ (filetype cpp) | [clang](http://clang.llvm.org/), [clangcheck](http://clang.llvm.org/docs/ClangCheck.html), [clangtidy](http://clang.llvm.org/extra/clang-tidy/), [cppcheck](http://cppcheck.sourceforge.net), [cpplint](https://github.com/google/styleguide/tree/gh-pages/cpplint), [gcc](https://gcc.gnu.org/)|
| C# | [mcs](http://www.mono-project.com/docs/about-mono/languages/csharp/) |
| Chef | [foodcritic](http://www.foodcritic.io/) |
| CMake | [cmakelint](https://github.com/richq/cmake-lint) |
diff --git a/ale_linters/cpp/clangcheck.vim b/ale_linters/cpp/clangcheck.vim
new file mode 100644
index 00000000..11184cb8
--- /dev/null
+++ b/ale_linters/cpp/clangcheck.vim
@@ -0,0 +1,37 @@
+" Author: gagbo <gagbobada@gmail.com>
+" Description: clang-check linter for cpp files
+
+" Set this option to manually set some options for clang-check.
+let g:ale_cpp_clangcheck_options = get(g:, 'ale_cpp_clangcheck_options', '')
+
+" Set this option to manually point to the build directory for clang-tidy.
+" This will disable all the other clangtidy_options, since compilation
+" flags are contained in the json
+let g:ale_c_build_dir = get(g:, 'ale_c_build_dir', '')
+
+function! ale_linters#cpp#clangcheck#GetCommand(buffer) abort
+ let l:user_options = ale#Var(a:buffer, 'cpp_clangcheck_options')
+ let l:extra_options = !empty(l:user_options)
+ \ ? l:user_options
+ \ : ''
+
+ " Try to find compilation database to link automatically
+ let l:user_build_dir = ale#Var(a:buffer, 'c_build_dir')
+ if empty(l:user_build_dir)
+ let l:user_build_dir = ale#c#FindCompileCommands(a:buffer)
+ endif
+ let l:build_options = !empty(l:user_build_dir)
+ \ ? ' -p ' . ale#Escape(l:user_build_dir)
+ \ : ''
+
+ return 'clang-check -analyze ' . '%s' . l:extra_options . l:build_options
+endfunction
+
+call ale#linter#Define('cpp', {
+\ 'name': 'clangcheck',
+\ 'output_stream': 'stderr',
+\ 'executable': 'clang-check',
+\ 'command_callback': 'ale_linters#cpp#clangcheck#GetCommand',
+\ 'callback': 'ale#handlers#gcc#HandleGCCFormat',
+\ 'lint_file': 1,
+\})
diff --git a/doc/ale-cpp.txt b/doc/ale-cpp.txt
index 27e7fe0b..0b9b3ae1 100644
--- a/doc/ale-cpp.txt
+++ b/doc/ale-cpp.txt
@@ -45,6 +45,29 @@ g:ale_cpp_clang_options *g:ale_cpp_clang_options*
-------------------------------------------------------------------------------
+clangcheck *ale-cpp-clangcheck*
+
+`clang-check` will be run only when files are saved to disk, so that
+`compile_commands.json` files can be used. It is recommended to use this
+linter in combination with `compile_commands.json` files.
+Therefore, `clang-check` linter reads the options |g:ale_c_build_dir| and
+|g:ale_c_build_dir_names|. Also, setting |g:ale_c_build_dir| actually
+overrides |g:ale_c_build_dir_names|.
+
+
+g:ale_cpp_clangcheck_options *g:ale_cpp_clangcheck_options*
+ *b:ale_cpp_clangcheck_options*
+ Type: |String|
+ Default: `''`
+
+ This variable can be changed to modify flags given to clang-check.
+
+ This variable should not be set to point to build subdirectory with
+ `-p path/to/build` option, as it is handled by the |g:ale_c_build_dir|
+ option.
+
+
+-------------------------------------------------------------------------------
clangtidy *ale-cpp-clangtidy*
`clang-tidy` will be run only when files are saved to disk, so that
@@ -73,11 +96,15 @@ g:ale_cpp_clangtidy_options *g:ale_cpp_clangtidy_options*
This variable can be changed to modify flags given to clang-tidy.
- Setting this variable to a non-empty string will cause the `--` argument
- to be passed to `clang-tidy`, which will mean that detection of
- `compile_commands.json` files for compile command databases will be
- disabled. Only set this option if you want to control compiler flags
- entirely manually.
+ - Setting this variable to a non-empty string,
+ - and working in a buffer where no compilation database is found using
+ |g:ale_c_build_dir_names| or |g:ale_c_build_dir|,
+ will cause the `--` argument to be passed to `clang-tidy`, which will mean
+ that detection of `compile_commands.json` files for compile command
+ databases will be disabled.
+ Only set this option if you want to control compiler flags
+ entirely manually, and no `compile_commands.json` file is in one
+ of the |g:ale_c_build_dir_names| directories of the project tree.
-------------------------------------------------------------------------------
diff --git a/doc/ale.txt b/doc/ale.txt
index 2a760ba1..351e12cd 100644
--- a/doc/ale.txt
+++ b/doc/ale.txt
@@ -21,6 +21,7 @@ CONTENTS *ale-contents*
foodcritic..........................|ale-chef-foodcritic|
cpp...................................|ale-cpp-options|
clang...............................|ale-cpp-clang|
+ clangcheck..........................|ale-cpp-clangcheck|
clangtidy...........................|ale-cpp-clangtidy|
cppcheck............................|ale-cpp-cppcheck|
cpplint.............................|ale-cpp-cpplint|