mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2024-12-25 17:31:02 +00:00
clang-tidy: add IgnoreMacros option to readability-inconsistent-declaration-parameter-name
And also enable it by default to be consistent with e.g. modernize-use-using. This helps e.g. when running this check on client code where the macro is provided by the system, so there is no easy way to modify it. Reviewers: alexfh, piotrdz, hokein, ilya-biryukov Reviewed By: alexfh Differential Revision: https://reviews.llvm.org/D41716 llvm-svn: 321913
This commit is contained in:
parent
e2659d8383
commit
063e6cc5e7
@ -281,6 +281,11 @@ void formatDiagnostics(
|
||||
|
||||
} // anonymous namespace
|
||||
|
||||
void InconsistentDeclarationParameterNameCheck::storeOptions(
|
||||
ClangTidyOptions::OptionMap &Opts) {
|
||||
Options.store(Opts, "IgnoreMacros", IgnoreMacros);
|
||||
}
|
||||
|
||||
void InconsistentDeclarationParameterNameCheck::registerMatchers(
|
||||
MatchFinder *Finder) {
|
||||
Finder->addMatcher(functionDecl(unless(isImplicit()), hasOtherDeclarations())
|
||||
@ -309,6 +314,12 @@ void InconsistentDeclarationParameterNameCheck::check(
|
||||
return;
|
||||
}
|
||||
|
||||
SourceLocation StartLoc = OriginalDeclaration->getLocStart();
|
||||
if (StartLoc.isMacroID() && IgnoreMacros) {
|
||||
markRedeclarationsAsVisited(OriginalDeclaration);
|
||||
return;
|
||||
}
|
||||
|
||||
if (OriginalDeclaration->getTemplatedKind() ==
|
||||
FunctionDecl::TK_FunctionTemplateSpecialization) {
|
||||
formatDiagnostics(this, ParameterSourceDeclaration, OriginalDeclaration,
|
||||
|
@ -27,8 +27,10 @@ class InconsistentDeclarationParameterNameCheck : public ClangTidyCheck {
|
||||
public:
|
||||
InconsistentDeclarationParameterNameCheck(StringRef Name,
|
||||
ClangTidyContext *Context)
|
||||
: ClangTidyCheck(Name, Context) {}
|
||||
: ClangTidyCheck(Name, Context),
|
||||
IgnoreMacros(Options.getLocalOrGlobal("IgnoreMacros", 1) != 0) {}
|
||||
|
||||
void storeOptions(ClangTidyOptions::OptionMap &Opts) override;
|
||||
void registerMatchers(ast_matchers::MatchFinder *Finder) override;
|
||||
void check(const ast_matchers::MatchFinder::MatchResult &Result) override;
|
||||
|
||||
@ -36,6 +38,7 @@ private:
|
||||
void markRedeclarationsAsVisited(const FunctionDecl *FunctionDeclaration);
|
||||
|
||||
llvm::DenseSet<const FunctionDecl *> VisitedDeclarations;
|
||||
const bool IgnoreMacros;
|
||||
};
|
||||
|
||||
} // namespace readability
|
||||
|
@ -42,3 +42,8 @@ references parameter names in its body. Example:
|
||||
In the case of multiple redeclarations or function template specializations,
|
||||
a warning is issued for every redeclaration or specialization inconsistent with
|
||||
the definition or the first declaration seen in a translation unit.
|
||||
|
||||
.. option:: IgnoreMacros
|
||||
|
||||
If this option is set to non-zero (default is `1`), the check will not warn
|
||||
about names declared inside macros.
|
||||
|
@ -0,0 +1,25 @@
|
||||
// RUN: %check_clang_tidy %s readability-inconsistent-declaration-parameter-name %t -- \
|
||||
// RUN: -config="{CheckOptions: [{key: readability-inconsistent-declaration-parameter-name.IgnoreMacros, value: 0}]}" \
|
||||
// RUN: -- -std=c++11
|
||||
|
||||
#define MACRO() \
|
||||
void f(int x);
|
||||
|
||||
struct S {
|
||||
MACRO();
|
||||
// CHECK-MESSAGES: :[[@LINE-1]]:3: warning: function 'S::f' has a definition with different parameter names
|
||||
};
|
||||
|
||||
void S::f(int y) {
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////
|
||||
|
||||
#define DECLARE_FUNCTION_WITH_PARAM_NAME(function_name, param_name) \
|
||||
void function_name(int param_name)
|
||||
|
||||
// CHECK-MESSAGES: :[[@LINE+1]]:34: warning: function 'macroFunction' has 1 other declaration with different parameter names [readability-inconsistent-declaration-parameter-name]
|
||||
DECLARE_FUNCTION_WITH_PARAM_NAME(macroFunction, a);
|
||||
// CHECK-MESSAGES: :[[@LINE+2]]:34: note: the 1st inconsistent declaration seen here
|
||||
// CHECK-MESSAGES: :[[@LINE+1]]:34: note: differing parameters are named here: ('b'), in the other declaration: ('a')
|
||||
DECLARE_FUNCTION_WITH_PARAM_NAME(macroFunction, b);
|
@ -178,11 +178,14 @@ void Class::memberFunctionTemplateWithSpecializations(float c) { c; }
|
||||
|
||||
//////////////////////////////////////////////////////
|
||||
|
||||
#define DECLARE_FUNCTION_WITH_PARAM_NAME(function_name, param_name) \
|
||||
void function_name(int param_name)
|
||||
// This resulted in a warning by default.
|
||||
#define MACRO() \
|
||||
void f(int x);
|
||||
|
||||
// CHECK-MESSAGES: :[[@LINE+1]]:34: warning: function 'macroFunction' has 1 other declaration with different parameter names [readability-inconsistent-declaration-parameter-name]
|
||||
DECLARE_FUNCTION_WITH_PARAM_NAME(macroFunction, a);
|
||||
// CHECK-MESSAGES: :[[@LINE+2]]:34: note: the 1st inconsistent declaration seen here
|
||||
// CHECK-MESSAGES: :[[@LINE+1]]:34: note: differing parameters are named here: ('b'), in the other declaration: ('a')
|
||||
DECLARE_FUNCTION_WITH_PARAM_NAME(macroFunction, b);
|
||||
struct S {
|
||||
MACRO();
|
||||
};
|
||||
|
||||
void S::f(int y)
|
||||
{
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user