mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2024-11-24 22:30:13 +00:00
[clang-tidy] Add an IgnoreMacros option to readability-avoid-const-params-in-decls
readability-avoid-const-params-in-decls.IgnoreMacros is enabled by default to be consistent with most other checks. Reviewed By: ymandel Differential Revision: https://reviews.llvm.org/D130130
This commit is contained in:
parent
88b7c178f2
commit
9a4e52ebeb
@ -27,6 +27,10 @@ SourceRange getTypeRange(const ParmVarDecl &Param) {
|
||||
|
||||
} // namespace
|
||||
|
||||
void AvoidConstParamsInDecls::storeOptions(ClangTidyOptions::OptionMap &Opts) {
|
||||
Options.store(Opts, "IgnoreMacros", IgnoreMacros);
|
||||
}
|
||||
|
||||
void AvoidConstParamsInDecls::registerMatchers(MatchFinder *Finder) {
|
||||
const auto ConstParamDecl =
|
||||
parmVarDecl(hasType(qualType(isConstQualified()))).bind("param");
|
||||
@ -44,6 +48,12 @@ void AvoidConstParamsInDecls::check(const MatchFinder::MatchResult &Result) {
|
||||
if (!Param->getType().isLocalConstQualified())
|
||||
return;
|
||||
|
||||
if (IgnoreMacros &&
|
||||
(Param->getBeginLoc().isMacroID() || Param->getEndLoc().isMacroID())) {
|
||||
// Suppress the check if macros are involved.
|
||||
return;
|
||||
}
|
||||
|
||||
auto Diag = diag(Param->getBeginLoc(),
|
||||
"parameter %0 is const-qualified in the function "
|
||||
"declaration; const-qualification of parameters only has an "
|
||||
|
@ -20,13 +20,18 @@ namespace readability {
|
||||
class AvoidConstParamsInDecls : public ClangTidyCheck {
|
||||
public:
|
||||
AvoidConstParamsInDecls(StringRef Name, ClangTidyContext *Context)
|
||||
: ClangTidyCheck(Name, Context) {}
|
||||
: ClangTidyCheck(Name, Context),
|
||||
IgnoreMacros(Options.getLocalOrGlobal("IgnoreMacros", true)) {}
|
||||
|
||||
void storeOptions(ClangTidyOptions::OptionMap &Opts) override;
|
||||
void registerMatchers(ast_matchers::MatchFinder *Finder) override;
|
||||
void check(const ast_matchers::MatchFinder::MatchResult &Result) override;
|
||||
llvm::Optional<TraversalKind> getCheckTraversalKind() const override {
|
||||
return TK_IgnoreUnlessSpelledInSource;
|
||||
}
|
||||
|
||||
private:
|
||||
const bool IgnoreMacros;
|
||||
};
|
||||
|
||||
} // namespace readability
|
||||
|
@ -149,6 +149,10 @@ Changes in existing checks
|
||||
copy assignment operators with nonstandard return types. The check is restricted to
|
||||
c++11-or-later.
|
||||
|
||||
- Change the default behavior of :doc:`readability-avoid-const-params-in-decls
|
||||
<clang-tidy/checks/readability-avoid-const-params-in-decls>` to not
|
||||
warn about `const` value parameters of declarations inside macros.
|
||||
|
||||
Removed checks
|
||||
^^^^^^^^^^^^^^
|
||||
|
||||
|
@ -15,3 +15,11 @@ Examples:
|
||||
|
||||
void f(const string); // Bad: const is top level.
|
||||
void f(const string&); // Good: const is not top level.
|
||||
|
||||
Options
|
||||
-------
|
||||
|
||||
.. option:: IgnoreMacros
|
||||
|
||||
If set to `true`, the check will not give warnings inside macros. Default
|
||||
is `true`.
|
||||
|
@ -0,0 +1,22 @@
|
||||
// RUN: %check_clang_tidy %s readability-avoid-const-params-in-decls %t -- \
|
||||
// RUN: -config="{CheckOptions: [{key: readability-avoid-const-params-in-decls.IgnoreMacros, value: false}]}"
|
||||
|
||||
// Regression tests involving macros
|
||||
#define CONCAT(a, b) a##b
|
||||
void ConstNotVisible(CONCAT(cons, t) int i);
|
||||
// CHECK-MESSAGES: :[[@LINE-1]]:22: warning: parameter 'i'
|
||||
// We warn, but we can't give a fix
|
||||
// CHECK-FIXES: void ConstNotVisible(CONCAT(cons, t) int i);
|
||||
|
||||
#define CONST_INT_PARAM const int i
|
||||
void ConstInMacro(CONST_INT_PARAM);
|
||||
// CHECK-MESSAGES: :[[@LINE-1]]:19: warning: parameter 'i'
|
||||
// We warn, but we can't give a fix
|
||||
// CHECK-FIXES: void ConstInMacro(CONST_INT_PARAM);
|
||||
|
||||
#define DECLARE_FUNCTION_WITH_ARG(x) struct InsideMacro{ x }
|
||||
DECLARE_FUNCTION_WITH_ARG(
|
||||
void member_function(const int i);
|
||||
);
|
||||
// CHECK-MESSAGES: :[[@LINE-2]]:26: warning: parameter 'i'
|
||||
// CHECK-FIXES: void member_function(int i);
|
@ -170,12 +170,17 @@ void NF(const int*);
|
||||
void NF(const int* const*);
|
||||
void NF(alias_const_type);
|
||||
|
||||
// Regression test for when the 'const' token is not in the code.
|
||||
// Regression tests involving macros, which are ignored by default.
|
||||
#define CONCAT(a, b) a##b
|
||||
void ConstNotVisible(CONCAT(cons, t) int i);
|
||||
// CHECK-MESSAGES: :[[@LINE-1]]:22: warning: parameter 'i'
|
||||
// We warn, but we can't give a fix
|
||||
// CHECK-FIXES: void ConstNotVisible(CONCAT(cons, t) int i);
|
||||
|
||||
#define CONST_INT_PARAM const int i
|
||||
void ConstInMacro(CONST_INT_PARAM);
|
||||
|
||||
#define DECLARE_FUNCTION_WITH_ARG(x) struct InsideMacro{ x }
|
||||
DECLARE_FUNCTION_WITH_ARG(
|
||||
void member_function(const int i);
|
||||
);
|
||||
|
||||
// Regression test. We should not warn (or crash) on lambda expressions
|
||||
auto lambda_with_name = [](const int n) {};
|
||||
|
Loading…
Reference in New Issue
Block a user