summaryrefslogtreecommitdiff
path: root/ale_linters/cpp/clang.vim
AgeCommit message (Collapse)Author
2020-08-20#3299 Merge gcc and clang into a cc linterw0rp
Users can easily be confused when they set some options for a C or C++ compiler, and another compiler is run with different options, which still reports errors. To remedy this, the existing `gcc` and `clang` linters have been replaced with a `cc` linter that will run either compiler. This is a breaking change for ALE v3.0.0.
2020-03-17Avoid overriding parsed C/C++ -std=* flagAlex Wang
ALE appends flags from {c,cpp}_{clang,gcc}_options after those found by parsing compile_commands.json or Makefile output. If -std=* flags are present in both the ALE flags and parsed flags, the last one present (i.e., ALE's -std=* flag) will determine the mode the compiler works in. This can result in errors showing up in vim but not in the actual build or vice-versa. For example, say you have foo.cpp: #include <type_traits> int main() { return std::is_same_v<float, int>; } If cpp_clang_options contains -std=c++17 and -std=c++14 is parsed from compile_commands.json, then ALE would end up running something like: clang++ -S -x c++ -fsyntax-only -std=c++14 -std=c++17 - < foo.cpp This would result in no errors showing up in Vim, but the actual build would fail with: <stdin>:3:14: error: no template named 'is_same_v' in namespace 'std'; did you mean 'is_same'? return std::is_same_v<float, int>; ~~~~~^~~~~~~~~ is_same /Library/Developer/CommandLineTools/usr/bin/../include/c++/v1/type_traits:872:61: note: 'is_same' declared here template <class _Tp, class _Up> struct _LIBCPP_TEMPLATE_VIS is_same : public false_type {}; ^ <stdin>:3:35: error: expected '(' for function-style cast or type construction return std::is_same_v<float, int>; ~~~~~~~~~~~~~~~~~~~~~~~~~~^ 2 errors generated. as the actual build would not have the -std=c++17 flag added by ALE. If cpp_clang_options contains -std=c++14 and -std=c++17 is parsed from compile_commands.json, then the opposite problem would occur. ALE would end up running something like: clang++ -S -x c++ -fsyntax-only -std=c++17 -std=c++14 - < foo.cpp and would show an error on line 3 of foo.cpp: [clang] No template named 'is_same_v' in namespace 'std'; did you mean 'is_same'? (fix available) The actual build, on the other hand, would succeed without any complaints. Removing -std=* from ALE's flags if it is already present in the parsed flags ensures that the wrong -std=* flag is not used. An alternative would have been to switch the order in which parsed flags and ALE flags were concatenated when producing the command to execute, but that could prevent a user from intentionally using ALE's flags to override some other flags, e.g. -W* flags to enable/disable warnings in a project whose flags are not under the developer's control. -std=* flags are also present in cuda/nvcc.vim, objc/clang.vim, objcpp/clang.vim, and vhdl/ghdl.vim, but none of those linters appear to parse compile_commands.json or `make` output.
2019-04-07#2132 - Replace command_chain and chain_with with ale#command#Runw0rp
2019-02-22#2132 - Replace all uses of foo_callback with foow0rp
2018-08-02Simplify the code for most linters and tests with closuresw0rp
2018-07-30Indicate that a C compiler failed due to problems in a header filew0rp
2018-07-29Add support for parsing compile_commands.json files for C compilersw0rp
2018-03-27#1167 Use the make -n parsing for C++ compilers, and document the new optionw0rp
2017-07-17Fix another executable callback typow0rp
2017-07-16#711 - Make the clang executables configurablew0rp
2017-06-25Move ale#handlers#c functions into ale#cw0rp
2017-05-31Fix #557 - Detect C project roots and include root directories with headers, ↵w0rp
or include directories
2017-05-12#549 Temporarily revert shell escaping changes, just for Windowsw0rp
2017-05-08#540 Fix shell escaping pretty much everywherew0rp
2017-04-16#427 Implement buffer variable overrides for all linter optionsw0rp
2017-04-11#392 Report errors inside of headers, in a very basic wayw0rp
2017-03-11#277 #318 Support all same-directory includes for gcc and clangw0rp
2017-03-01Use latest C++ standardequal-l2
2017-02-16Fix clang++ flag typo.Andrea Caforio
2017-02-11Add clang to cpp linters.tomotanakamura