[clang-tools-extra] r309379 - [clang-tidy] readability-redundant-declaration: ignore friends and macros
Alexander Kornienko via cfe-commits
cfe-commits at lists.llvm.org
Fri Jul 28 05:46:02 PDT 2017
Author: alexfh
Date: Fri Jul 28 05:46:02 2017
New Revision: 309379
URL: http://llvm.org/viewvc/llvm-project?rev=309379&view=rev
Log:
[clang-tidy] readability-redundant-declaration: ignore friends and macros
Added:
clang-tools-extra/trunk/test/clang-tidy/readability-redundant-declaration-ignore-macros.cpp
Modified:
clang-tools-extra/trunk/clang-tidy/readability/RedundantDeclarationCheck.cpp
clang-tools-extra/trunk/clang-tidy/readability/RedundantDeclarationCheck.h
clang-tools-extra/trunk/test/clang-tidy/readability-redundant-declaration.cpp
Modified: clang-tools-extra/trunk/clang-tidy/readability/RedundantDeclarationCheck.cpp
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clang-tidy/readability/RedundantDeclarationCheck.cpp?rev=309379&r1=309378&r2=309379&view=diff
==============================================================================
--- clang-tools-extra/trunk/clang-tidy/readability/RedundantDeclarationCheck.cpp (original)
+++ clang-tools-extra/trunk/clang-tidy/readability/RedundantDeclarationCheck.cpp Fri Jul 28 05:46:02 2017
@@ -18,11 +18,16 @@ namespace clang {
namespace tidy {
namespace readability {
+RedundantDeclarationCheck::RedundantDeclarationCheck(StringRef Name,
+ ClangTidyContext *Context)
+ : ClangTidyCheck(Name, Context),
+ IgnoreMacros(Options.getLocalOrGlobal("IgnoreMacros", true)) {}
+
void RedundantDeclarationCheck::registerMatchers(MatchFinder *Finder) {
Finder->addMatcher(
- namedDecl(
- anyOf(varDecl(unless(isDefinition())),
- functionDecl(unless(anyOf(isDefinition(), isDefaulted())))))
+ namedDecl(anyOf(varDecl(unless(isDefinition())),
+ functionDecl(unless(anyOf(isDefinition(), isDefaulted(),
+ hasParent(friendDecl()))))))
.bind("Decl"),
this);
}
@@ -36,6 +41,13 @@ void RedundantDeclarationCheck::check(co
return;
if (Prev->getLocation() == D->getLocation())
return;
+ if (IgnoreMacros &&
+ (D->getLocation().isMacroID() || Prev->getLocation().isMacroID()))
+ return;
+ // Don't complain when the previous declaration is a friend declaration.
+ for (const auto &Parent : Result.Context->getParents(*Prev))
+ if (Parent.get<FriendDecl>())
+ return;
const SourceManager &SM = *Result.SourceManager;
Modified: clang-tools-extra/trunk/clang-tidy/readability/RedundantDeclarationCheck.h
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clang-tidy/readability/RedundantDeclarationCheck.h?rev=309379&r1=309378&r2=309379&view=diff
==============================================================================
--- clang-tools-extra/trunk/clang-tidy/readability/RedundantDeclarationCheck.h (original)
+++ clang-tools-extra/trunk/clang-tidy/readability/RedundantDeclarationCheck.h Fri Jul 28 05:46:02 2017
@@ -22,10 +22,12 @@ namespace readability {
/// http://clang.llvm.org/extra/clang-tidy/checks/readability-redundant-declaration.html
class RedundantDeclarationCheck : public ClangTidyCheck {
public:
- RedundantDeclarationCheck(StringRef Name, ClangTidyContext *Context)
- : ClangTidyCheck(Name, Context) {}
+ RedundantDeclarationCheck(StringRef Name, ClangTidyContext *Context);
void registerMatchers(ast_matchers::MatchFinder *Finder) override;
void check(const ast_matchers::MatchFinder::MatchResult &Result) override;
+
+private:
+ const bool IgnoreMacros;
};
} // namespace readability
Added: clang-tools-extra/trunk/test/clang-tidy/readability-redundant-declaration-ignore-macros.cpp
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/test/clang-tidy/readability-redundant-declaration-ignore-macros.cpp?rev=309379&view=auto
==============================================================================
--- clang-tools-extra/trunk/test/clang-tidy/readability-redundant-declaration-ignore-macros.cpp (added)
+++ clang-tools-extra/trunk/test/clang-tidy/readability-redundant-declaration-ignore-macros.cpp Fri Jul 28 05:46:02 2017
@@ -0,0 +1,22 @@
+// RUN: %check_clang_tidy %s readability-redundant-declaration %t -- \
+// RUN: -config="{CheckOptions: \
+// RUN: [{key: readability-redundant-declaration.IgnoreMacros, \
+// RUN: value: 1}]}" \
+// RUN: -- -std=c++11
+
+extern int Xyz;
+extern int Xyz; // Xyz
+// CHECK-MESSAGES: :[[@LINE-1]]:12: warning: redundant 'Xyz' declaration [readability-redundant-declaration]
+// CHECK-FIXES: {{^}}// Xyz{{$}}
+
+namespace macros {
+#define DECLARE(x) extern int x
+#define DEFINE(x) extern int x; int x = 42
+DECLARE(test);
+DEFINE(test);
+// CHECK-FIXES: {{^}}#define DECLARE(x) extern int x{{$}}
+// CHECK-FIXES: {{^}}#define DEFINE(x) extern int x; int x = 42{{$}}
+// CHECK-FIXES: {{^}}DECLARE(test);{{$}}
+// CHECK-FIXES: {{^}}DEFINE(test);{{$}}
+
+} // namespace macros
Modified: clang-tools-extra/trunk/test/clang-tidy/readability-redundant-declaration.cpp
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/test/clang-tidy/readability-redundant-declaration.cpp?rev=309379&r1=309378&r2=309379&view=diff
==============================================================================
--- clang-tools-extra/trunk/test/clang-tidy/readability-redundant-declaration.cpp (original)
+++ clang-tools-extra/trunk/test/clang-tidy/readability-redundant-declaration.cpp Fri Jul 28 05:46:02 2017
@@ -1,4 +1,8 @@
-// RUN: %check_clang_tidy %s readability-redundant-declaration %t
+// RUN: %check_clang_tidy %s readability-redundant-declaration %t -- \
+// RUN: -config="{CheckOptions: \
+// RUN: [{key: readability-redundant-declaration.IgnoreMacros, \
+// RUN: value: 0}]}" \
+// RUN: -- -std=c++11
extern int Xyz;
extern int Xyz; // Xyz
@@ -42,3 +46,25 @@ struct C2 {
template <class T>
C2<T>::C2() = default;
+
+void best_friend();
+
+struct Friendly {
+ friend void best_friend();
+ friend void enemy();
+};
+
+void enemy();
+
+namespace macros {
+#define DECLARE(x) extern int x
+#define DEFINE(x) extern int x; int x = 42
+DECLARE(test);
+DEFINE(test);
+// CHECK-MESSAGES: :[[@LINE-1]]:8: warning: redundant 'test' declaration
+// CHECK-FIXES: {{^}}#define DECLARE(x) extern int x{{$}}
+// CHECK-FIXES: {{^}}#define DEFINE(x) extern int x; int x = 42{{$}}
+// CHECK-FIXES: {{^}}DECLARE(test);{{$}}
+// CHECK-FIXES: {{^}}DEFINE(test);{{$}}
+
+} // namespace macros
More information about the cfe-commits
mailing list