Author: alexfh Date: Mon Sep 22 05:41:39 2014 New Revision: 218240 URL: http://llvm.org/viewvc/llvm-project?rev=218240&view=rev Log: Add NamespaceCommentCheck to the Google module.
Summary: This uses a bit hacky way to set the defaults for the spaces before comments, but it's also one of the simplest ways. Fixed a bug with how the SpacesBeforeComments option was used. Reviewers: djasper Reviewed By: djasper Subscribers: cfe-commits Differential Revision: http://reviews.llvm.org/D5410 Added: clang-tools-extra/trunk/clang-tidy/readability/ clang-tools-extra/trunk/clang-tidy/readability/CMakeLists.txt clang-tools-extra/trunk/clang-tidy/readability/Makefile clang-tools-extra/trunk/clang-tidy/readability/NamespaceCommentCheck.cpp - copied, changed from r218227, clang-tools-extra/trunk/clang-tidy/llvm/NamespaceCommentCheck.cpp clang-tools-extra/trunk/clang-tidy/readability/NamespaceCommentCheck.h - copied, changed from r218227, clang-tools-extra/trunk/clang-tidy/llvm/NamespaceCommentCheck.h clang-tools-extra/trunk/test/clang-tidy/google-readability-namespace-comments.cpp clang-tools-extra/trunk/unittests/clang-tidy/ReadabilityChecksTest.cpp - copied, changed from r218227, clang-tools-extra/trunk/unittests/clang-tidy/LLVMModuleTest.cpp Removed: clang-tools-extra/trunk/clang-tidy/llvm/NamespaceCommentCheck.cpp clang-tools-extra/trunk/clang-tidy/llvm/NamespaceCommentCheck.h Modified: clang-tools-extra/trunk/clang-tidy/CMakeLists.txt clang-tools-extra/trunk/clang-tidy/Makefile clang-tools-extra/trunk/clang-tidy/google/GoogleTidyModule.cpp clang-tools-extra/trunk/clang-tidy/llvm/CMakeLists.txt clang-tools-extra/trunk/clang-tidy/llvm/LLVMTidyModule.cpp clang-tools-extra/trunk/unittests/clang-tidy/CMakeLists.txt clang-tools-extra/trunk/unittests/clang-tidy/LLVMModuleTest.cpp clang-tools-extra/trunk/unittests/clang-tidy/Makefile Modified: clang-tools-extra/trunk/clang-tidy/CMakeLists.txt URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clang-tidy/CMakeLists.txt?rev=218240&r1=218239&r2=218240&view=diff ============================================================================== --- clang-tools-extra/trunk/clang-tidy/CMakeLists.txt (original) +++ clang-tools-extra/trunk/clang-tidy/CMakeLists.txt Mon Sep 22 05:41:39 2014 @@ -27,4 +27,5 @@ add_subdirectory(tool) add_subdirectory(llvm) add_subdirectory(google) add_subdirectory(misc) +add_subdirectory(readability) add_subdirectory(utils) Modified: clang-tools-extra/trunk/clang-tidy/Makefile URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clang-tidy/Makefile?rev=218240&r1=218239&r2=218240&view=diff ============================================================================== --- clang-tools-extra/trunk/clang-tidy/Makefile (original) +++ clang-tools-extra/trunk/clang-tidy/Makefile Mon Sep 22 05:41:39 2014 @@ -11,6 +11,6 @@ CLANG_LEVEL := ../../.. LIBRARYNAME := clangTidy include $(CLANG_LEVEL)/../../Makefile.config -DIRS = utils llvm google misc tool +DIRS = utils readability llvm google misc tool include $(CLANG_LEVEL)/Makefile Modified: clang-tools-extra/trunk/clang-tidy/google/GoogleTidyModule.cpp URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clang-tidy/google/GoogleTidyModule.cpp?rev=218240&r1=218239&r2=218240&view=diff ============================================================================== --- clang-tools-extra/trunk/clang-tidy/google/GoogleTidyModule.cpp (original) +++ clang-tools-extra/trunk/clang-tidy/google/GoogleTidyModule.cpp Mon Sep 22 05:41:39 2014 @@ -21,6 +21,7 @@ #include "TodoCommentCheck.h" #include "UnnamedNamespaceInHeaderCheck.h" #include "UsingNamespaceDirectiveCheck.h" +#include "../readability/NamespaceCommentCheck.h" using namespace clang::ast_matchers; @@ -52,6 +53,8 @@ public: "google-readability-function"); CheckFactories.registerCheck<readability::TodoCommentCheck>( "google-readability-todo"); + CheckFactories.registerCheck<readability::NamespaceCommentCheck>( + "google-readability-namespace-comments"); } }; Modified: clang-tools-extra/trunk/clang-tidy/llvm/CMakeLists.txt URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clang-tidy/llvm/CMakeLists.txt?rev=218240&r1=218239&r2=218240&view=diff ============================================================================== --- clang-tools-extra/trunk/clang-tidy/llvm/CMakeLists.txt (original) +++ clang-tools-extra/trunk/clang-tidy/llvm/CMakeLists.txt Mon Sep 22 05:41:39 2014 @@ -4,7 +4,6 @@ add_clang_library(clangTidyLLVMModule HeaderGuardCheck.cpp IncludeOrderCheck.cpp LLVMTidyModule.cpp - NamespaceCommentCheck.cpp TwineLocalCheck.cpp LINK_LIBS @@ -13,6 +12,7 @@ add_clang_library(clangTidyLLVMModule clangBasic clangLex clangTidy + clangTidyReadability clangTidyUtils clangTooling ) Modified: clang-tools-extra/trunk/clang-tidy/llvm/LLVMTidyModule.cpp URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clang-tidy/llvm/LLVMTidyModule.cpp?rev=218240&r1=218239&r2=218240&view=diff ============================================================================== --- clang-tools-extra/trunk/clang-tidy/llvm/LLVMTidyModule.cpp (original) +++ clang-tools-extra/trunk/clang-tidy/llvm/LLVMTidyModule.cpp Mon Sep 22 05:41:39 2014 @@ -12,7 +12,7 @@ #include "../ClangTidyModuleRegistry.h" #include "HeaderGuardCheck.h" #include "IncludeOrderCheck.h" -#include "NamespaceCommentCheck.h" +#include "../readability/NamespaceCommentCheck.h" #include "TwineLocalCheck.h" namespace clang { @@ -23,7 +23,7 @@ public: void addCheckFactories(ClangTidyCheckFactories &CheckFactories) override { CheckFactories.registerCheck<LLVMHeaderGuardCheck>("llvm-header-guard"); CheckFactories.registerCheck<IncludeOrderCheck>("llvm-include-order"); - CheckFactories.registerCheck<NamespaceCommentCheck>( + CheckFactories.registerCheck<readability::NamespaceCommentCheck>( "llvm-namespace-comment"); CheckFactories.registerCheck<TwineLocalCheck>("llvm-twine-local"); } Removed: clang-tools-extra/trunk/clang-tidy/llvm/NamespaceCommentCheck.cpp URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clang-tidy/llvm/NamespaceCommentCheck.cpp?rev=218239&view=auto ============================================================================== --- clang-tools-extra/trunk/clang-tidy/llvm/NamespaceCommentCheck.cpp (original) +++ clang-tools-extra/trunk/clang-tidy/llvm/NamespaceCommentCheck.cpp (removed) @@ -1,127 +0,0 @@ -//===--- NamespaceCommentCheck.cpp - clang-tidy ---------------------------===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// - -#include "NamespaceCommentCheck.h" -#include "clang/AST/ASTContext.h" -#include "clang/ASTMatchers/ASTMatchers.h" -#include "clang/Lex/Lexer.h" -#include "llvm/ADT/StringExtras.h" - -using namespace clang::ast_matchers; - -namespace clang { -namespace tidy { - -NamespaceCommentCheck::NamespaceCommentCheck(StringRef Name, - ClangTidyContext *Context) - : ClangTidyCheck(Name, Context), - NamespaceCommentPattern("^/[/*] *(end (of )?)? *(anonymous|unnamed)? *" - "namespace( +([a-zA-Z0-9_]+))? *(\\*/)?$", - llvm::Regex::IgnoreCase), - ShortNamespaceLines(Options.get("ShortNamespaceLines", 1u)), - SpacesBeforeComments(Options.get("SpacesBeforeComments", 1u)) {} - -void NamespaceCommentCheck::storeOptions(ClangTidyOptions::OptionMap &Opts) { - Options.store(Opts, "ShortNamespaceLines", ShortNamespaceLines); - Options.store(Opts, "SpacesBeforeComments", SpacesBeforeComments); -} - -void NamespaceCommentCheck::registerMatchers(MatchFinder *Finder) { - Finder->addMatcher(namespaceDecl().bind("namespace"), this); -} - -bool locationsInSameFile(const SourceManager &Sources, SourceLocation Loc1, - SourceLocation Loc2) { - return Loc1.isFileID() && Loc2.isFileID() && - Sources.getFileID(Loc1) == Sources.getFileID(Loc2); -} - -std::string getNamespaceComment(const NamespaceDecl *ND, bool InsertLineBreak, - unsigned SpacesBeforeComments) { - std::string Fix = "// namespace"; - if (!ND->isAnonymousNamespace()) - Fix.append(std::string(SpacesBeforeComments, ' ')) - .append(ND->getNameAsString()); - if (InsertLineBreak) - Fix.append("\n"); - return Fix; -} - -void NamespaceCommentCheck::check(const MatchFinder::MatchResult &Result) { - const NamespaceDecl *ND = Result.Nodes.getNodeAs<NamespaceDecl>("namespace"); - const SourceManager &Sources = *Result.SourceManager; - - if (!locationsInSameFile(Sources, ND->getLocStart(), ND->getRBraceLoc())) - return; - - // Don't require closing comments for namespaces spanning less than certain - // number of lines. - unsigned StartLine = Sources.getSpellingLineNumber(ND->getLocStart()); - unsigned EndLine = Sources.getSpellingLineNumber(ND->getRBraceLoc()); - if (EndLine - StartLine + 1 <= ShortNamespaceLines) - return; - - // Find next token after the namespace closing brace. - SourceLocation AfterRBrace = ND->getRBraceLoc().getLocWithOffset(1); - SourceLocation Loc = AfterRBrace; - Token Tok; - // Skip whitespace until we find the next token. - while (Lexer::getRawToken(Loc, Tok, Sources, Result.Context->getLangOpts())) { - Loc = Loc.getLocWithOffset(1); - } - if (!locationsInSameFile(Sources, ND->getRBraceLoc(), Loc)) - return; - - bool NextTokenIsOnSameLine = Sources.getSpellingLineNumber(Loc) == EndLine; - // If we insert a line comment before the token in the same line, we need - // to insert a line break. - bool NeedLineBreak = NextTokenIsOnSameLine && Tok.isNot(tok::eof); - - // Try to find existing namespace closing comment on the same line. - if (Tok.is(tok::comment) && NextTokenIsOnSameLine) { - StringRef Comment(Sources.getCharacterData(Loc), Tok.getLength()); - SmallVector<StringRef, 6> Groups; - if (NamespaceCommentPattern.match(Comment, &Groups)) { - StringRef NamespaceNameInComment = Groups.size() >= 6 ? Groups[5] : ""; - - // Check if the namespace in the comment is the same. - if ((ND->isAnonymousNamespace() && NamespaceNameInComment.empty()) || - ND->getNameAsString() == NamespaceNameInComment) { - // FIXME: Maybe we need a strict mode, where we always fix namespace - // comments with different format. - return; - } - - // Otherwise we need to fix the comment. - NeedLineBreak = Comment.startswith("/*"); - CharSourceRange OldCommentRange = CharSourceRange::getCharRange( - SourceRange(Loc, Loc.getLocWithOffset(Tok.getLength()))); - diag(Loc, "namespace closing comment refers to a wrong namespace '%0'") - << NamespaceNameInComment - << FixItHint::CreateReplacement( - OldCommentRange, - getNamespaceComment(ND, NeedLineBreak, SpacesBeforeComments)); - return; - } - - // This is not a recognized form of a namespace closing comment. - // Leave line comment on the same line. Move block comment to the next line, - // as it can be multi-line or there may be other tokens behind it. - if (Comment.startswith("//")) - NeedLineBreak = false; - } - - diag(ND->getLocation(), "namespace not terminated with a closing comment") - << FixItHint::CreateInsertion( - AfterRBrace, - " " + getNamespaceComment(ND, NeedLineBreak, SpacesBeforeComments)); -} - -} // namespace tidy -} // namespace clang Removed: clang-tools-extra/trunk/clang-tidy/llvm/NamespaceCommentCheck.h URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clang-tidy/llvm/NamespaceCommentCheck.h?rev=218239&view=auto ============================================================================== --- clang-tools-extra/trunk/clang-tidy/llvm/NamespaceCommentCheck.h (original) +++ clang-tools-extra/trunk/clang-tidy/llvm/NamespaceCommentCheck.h (removed) @@ -1,39 +0,0 @@ -//===--- NamespaceCommentCheck.h - clang-tidy -------------------*- C++ -*-===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// - -#ifndef LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_LLVM_NAMESPACE_COMMENT_CHECK_H -#define LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_LLVM_NAMESPACE_COMMENT_CHECK_H - -#include "../ClangTidy.h" -#include "llvm/Support/Regex.h" - -namespace clang { -namespace tidy { - -/// \brief Checks that long namespaces have a closing comment. -/// -/// see: http://llvm.org/docs/CodingStandards.html#namespace-indentation -class NamespaceCommentCheck : public ClangTidyCheck { -public: - NamespaceCommentCheck(StringRef Name, ClangTidyContext *Context); - void registerMatchers(ast_matchers::MatchFinder *Finder) override; - void check(const ast_matchers::MatchFinder::MatchResult &Result) override; - -private: - void storeOptions(ClangTidyOptions::OptionMap &Options) override; - - llvm::Regex NamespaceCommentPattern; - const unsigned ShortNamespaceLines; - const unsigned SpacesBeforeComments; -}; - -} // namespace tidy -} // namespace clang - -#endif // LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_LLVM_NAMESPACE_COMMENT_CHECK_H Added: clang-tools-extra/trunk/clang-tidy/readability/CMakeLists.txt URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clang-tidy/readability/CMakeLists.txt?rev=218240&view=auto ============================================================================== --- clang-tools-extra/trunk/clang-tidy/readability/CMakeLists.txt (added) +++ clang-tools-extra/trunk/clang-tidy/readability/CMakeLists.txt Mon Sep 22 05:41:39 2014 @@ -0,0 +1,13 @@ +set(LLVM_LINK_COMPONENTS support) + +add_clang_library(clangTidyReadability + NamespaceCommentCheck.cpp + + LINK_LIBS + clangAST + clangASTMatchers + clangBasic + clangLex + clangTidy + clangTooling + ) Added: clang-tools-extra/trunk/clang-tidy/readability/Makefile URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clang-tidy/readability/Makefile?rev=218240&view=auto ============================================================================== --- clang-tools-extra/trunk/clang-tidy/readability/Makefile (added) +++ clang-tools-extra/trunk/clang-tidy/readability/Makefile Mon Sep 22 05:41:39 2014 @@ -0,0 +1,12 @@ +##===- clang-tidy/readability/Makefile ---------------------*- Makefile -*-===## +# +# The LLVM Compiler Infrastructure +# +# This file is distributed under the University of Illinois Open Source +# License. See LICENSE.TXT for details. +# +##===----------------------------------------------------------------------===## +CLANG_LEVEL := ../../../.. +LIBRARYNAME := clangTidyReadability + +include $(CLANG_LEVEL)/Makefile Copied: clang-tools-extra/trunk/clang-tidy/readability/NamespaceCommentCheck.cpp (from r218227, clang-tools-extra/trunk/clang-tidy/llvm/NamespaceCommentCheck.cpp) URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clang-tidy/readability/NamespaceCommentCheck.cpp?p2=clang-tools-extra/trunk/clang-tidy/readability/NamespaceCommentCheck.cpp&p1=clang-tools-extra/trunk/clang-tidy/llvm/NamespaceCommentCheck.cpp&r1=218227&r2=218240&rev=218240&view=diff ============================================================================== --- clang-tools-extra/trunk/clang-tidy/llvm/NamespaceCommentCheck.cpp (original) +++ clang-tools-extra/trunk/clang-tidy/readability/NamespaceCommentCheck.cpp Mon Sep 22 05:41:39 2014 @@ -17,6 +17,7 @@ using namespace clang::ast_matchers; namespace clang { namespace tidy { +namespace readability { NamespaceCommentCheck::NamespaceCommentCheck(StringRef Name, ClangTidyContext *Context) @@ -25,7 +26,8 @@ NamespaceCommentCheck::NamespaceCommentC "namespace( +([a-zA-Z0-9_]+))? *(\\*/)?$", llvm::Regex::IgnoreCase), ShortNamespaceLines(Options.get("ShortNamespaceLines", 1u)), - SpacesBeforeComments(Options.get("SpacesBeforeComments", 1u)) {} + SpacesBeforeComments(Options.get("SpacesBeforeComments", + Name.startswith("google") ? 2u : 1u)) {} void NamespaceCommentCheck::storeOptions(ClangTidyOptions::OptionMap &Opts) { Options.store(Opts, "ShortNamespaceLines", ShortNamespaceLines); @@ -42,12 +44,10 @@ bool locationsInSameFile(const SourceMan Sources.getFileID(Loc1) == Sources.getFileID(Loc2); } -std::string getNamespaceComment(const NamespaceDecl *ND, bool InsertLineBreak, - unsigned SpacesBeforeComments) { +std::string getNamespaceComment(const NamespaceDecl *ND, bool InsertLineBreak) { std::string Fix = "// namespace"; if (!ND->isAnonymousNamespace()) - Fix.append(std::string(SpacesBeforeComments, ' ')) - .append(ND->getNameAsString()); + Fix.append(" ").append(ND->getNameAsString()); if (InsertLineBreak) Fix.append("\n"); return Fix; @@ -105,8 +105,7 @@ void NamespaceCommentCheck::check(const diag(Loc, "namespace closing comment refers to a wrong namespace '%0'") << NamespaceNameInComment << FixItHint::CreateReplacement( - OldCommentRange, - getNamespaceComment(ND, NeedLineBreak, SpacesBeforeComments)); + OldCommentRange, getNamespaceComment(ND, NeedLineBreak)); return; } @@ -118,10 +117,11 @@ void NamespaceCommentCheck::check(const } diag(ND->getLocation(), "namespace not terminated with a closing comment") - << FixItHint::CreateInsertion( - AfterRBrace, - " " + getNamespaceComment(ND, NeedLineBreak, SpacesBeforeComments)); + << FixItHint::CreateInsertion(AfterRBrace, + std::string(SpacesBeforeComments, ' ') + + getNamespaceComment(ND, NeedLineBreak)); } +} // namespace readability } // namespace tidy } // namespace clang Copied: clang-tools-extra/trunk/clang-tidy/readability/NamespaceCommentCheck.h (from r218227, clang-tools-extra/trunk/clang-tidy/llvm/NamespaceCommentCheck.h) URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clang-tidy/readability/NamespaceCommentCheck.h?p2=clang-tools-extra/trunk/clang-tidy/readability/NamespaceCommentCheck.h&p1=clang-tools-extra/trunk/clang-tidy/llvm/NamespaceCommentCheck.h&r1=218227&r2=218240&rev=218240&view=diff ============================================================================== --- clang-tools-extra/trunk/clang-tidy/llvm/NamespaceCommentCheck.h (original) +++ clang-tools-extra/trunk/clang-tidy/readability/NamespaceCommentCheck.h Mon Sep 22 05:41:39 2014 @@ -7,18 +7,20 @@ // //===----------------------------------------------------------------------===// -#ifndef LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_LLVM_NAMESPACE_COMMENT_CHECK_H -#define LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_LLVM_NAMESPACE_COMMENT_CHECK_H +#ifndef LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_READABILITY_NAMESPACECOMMENTCHECK_H +#define LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_READABILITY_NAMESPACECOMMENTCHECK_H #include "../ClangTidy.h" #include "llvm/Support/Regex.h" namespace clang { namespace tidy { +namespace readability { /// \brief Checks that long namespaces have a closing comment. /// -/// see: http://llvm.org/docs/CodingStandards.html#namespace-indentation +/// http://llvm.org/docs/CodingStandards.html#namespace-indentation +/// http://google-styleguide.googlecode.com/svn/trunk/cppguide.html#Namespaces class NamespaceCommentCheck : public ClangTidyCheck { public: NamespaceCommentCheck(StringRef Name, ClangTidyContext *Context); @@ -33,7 +35,8 @@ private: const unsigned SpacesBeforeComments; }; +} // namespace readability } // namespace tidy } // namespace clang -#endif // LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_LLVM_NAMESPACE_COMMENT_CHECK_H +#endif // LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_READABILITY_NAMESPACECOMMENTCHECK_H Added: clang-tools-extra/trunk/test/clang-tidy/google-readability-namespace-comments.cpp URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/test/clang-tidy/google-readability-namespace-comments.cpp?rev=218240&view=auto ============================================================================== --- clang-tools-extra/trunk/test/clang-tidy/google-readability-namespace-comments.cpp (added) +++ clang-tools-extra/trunk/test/clang-tidy/google-readability-namespace-comments.cpp Mon Sep 22 05:41:39 2014 @@ -0,0 +1,15 @@ +// RUN: $(dirname %s)/check_clang_tidy_fix.sh %s google-readability-namespace-comments %t +// REQUIRES: shell + +// CHECK-MESSAGES: :[[@LINE+2]]:11: warning: namespace not terminated with a closing comment [google-readability-namespace-comments] +// CHECK-MESSAGES: :[[@LINE+2]]:11: warning: namespace not terminated with a closing comment [google-readability-namespace-comments] +namespace n1 { +namespace n2 { + +} +} +// CHECK-FIXES: } // namespace n2 +// CHECK-FIXES: } // namespace n1 + + +namespace short1 { namespace short2 { } } Modified: clang-tools-extra/trunk/unittests/clang-tidy/CMakeLists.txt URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/unittests/clang-tidy/CMakeLists.txt?rev=218240&r1=218239&r2=218240&view=diff ============================================================================== --- clang-tools-extra/trunk/unittests/clang-tidy/CMakeLists.txt (original) +++ clang-tools-extra/trunk/unittests/clang-tidy/CMakeLists.txt Mon Sep 22 05:41:39 2014 @@ -10,6 +10,7 @@ add_extra_unittest(ClangTidyTests ClangTidyDiagnosticConsumerTest.cpp ClangTidyOptionsTest.cpp LLVMModuleTest.cpp + ReadabilityChecksTest.cpp GoogleModuleTest.cpp MiscModuleTest.cpp) @@ -22,5 +23,6 @@ target_link_libraries(ClangTidyTests clangTidyGoogleModule clangTidyLLVMModule clangTidyMiscModule + clangTidyReadability clangTooling ) Modified: clang-tools-extra/trunk/unittests/clang-tidy/LLVMModuleTest.cpp URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/unittests/clang-tidy/LLVMModuleTest.cpp?rev=218240&r1=218239&r2=218240&view=diff ============================================================================== --- clang-tools-extra/trunk/unittests/clang-tidy/LLVMModuleTest.cpp (original) +++ clang-tools-extra/trunk/unittests/clang-tidy/LLVMModuleTest.cpp Mon Sep 22 05:41:39 2014 @@ -1,91 +1,12 @@ #include "ClangTidyTest.h" #include "llvm/HeaderGuardCheck.h" #include "llvm/IncludeOrderCheck.h" -#include "llvm/NamespaceCommentCheck.h" #include "gtest/gtest.h" namespace clang { namespace tidy { namespace test { -TEST(NamespaceCommentCheckTest, Basic) { - EXPECT_EQ("namespace i {\n} // namespace i", - runCheckOnCode<NamespaceCommentCheck>("namespace i {\n}")); - EXPECT_EQ("namespace {\n} // namespace", - runCheckOnCode<NamespaceCommentCheck>("namespace {\n}")); - EXPECT_EQ( - "namespace i { namespace j {\n} // namespace j\n } // namespace i", - runCheckOnCode<NamespaceCommentCheck>("namespace i { namespace j {\n} }")); -} - -TEST(NamespaceCommentCheckTest, SingleLineNamespaces) { - EXPECT_EQ( - "namespace i { namespace j { } }", - runCheckOnCode<NamespaceCommentCheck>("namespace i { namespace j { } }")); -} - -TEST(NamespaceCommentCheckTest, CheckExistingComments) { - EXPECT_EQ("namespace i { namespace j {\n" - "} /* namespace j */ } // namespace i\n" - " /* random comment */", - runCheckOnCode<NamespaceCommentCheck>( - "namespace i { namespace j {\n" - "} /* namespace j */ } /* random comment */")); - EXPECT_EQ("namespace {\n" - "} // namespace", - runCheckOnCode<NamespaceCommentCheck>("namespace {\n" - "} // namespace")); - EXPECT_EQ("namespace {\n" - "} //namespace", - runCheckOnCode<NamespaceCommentCheck>("namespace {\n" - "} //namespace")); - EXPECT_EQ("namespace {\n" - "} // anonymous namespace", - runCheckOnCode<NamespaceCommentCheck>("namespace {\n" - "} // anonymous namespace")); - EXPECT_EQ( - "namespace My_NameSpace123 {\n" - "} // namespace My_NameSpace123", - runCheckOnCode<NamespaceCommentCheck>("namespace My_NameSpace123 {\n" - "} // namespace My_NameSpace123")); - EXPECT_EQ( - "namespace My_NameSpace123 {\n" - "} //namespace My_NameSpace123", - runCheckOnCode<NamespaceCommentCheck>("namespace My_NameSpace123 {\n" - "} //namespace My_NameSpace123")); - EXPECT_EQ("namespace My_NameSpace123 {\n" - "} // end namespace My_NameSpace123", - runCheckOnCode<NamespaceCommentCheck>( - "namespace My_NameSpace123 {\n" - "} // end namespace My_NameSpace123")); - // Understand comments only on the same line. - EXPECT_EQ("namespace {\n" - "} // namespace\n" - "// namespace", - runCheckOnCode<NamespaceCommentCheck>("namespace {\n" - "}\n" - "// namespace")); - // Leave unknown comments. - EXPECT_EQ("namespace {\n" - "} // namespace // random text", - runCheckOnCode<NamespaceCommentCheck>("namespace {\n" - "} // random text")); -} - -TEST(NamespaceCommentCheckTest, FixWrongComments) { - EXPECT_EQ("namespace i { namespace jJ0_ {\n" - "} // namespace jJ0_\n" - " } // namespace i\n" - " /* random comment */", - runCheckOnCode<NamespaceCommentCheck>( - "namespace i { namespace jJ0_ {\n" - "} /* namespace qqq */ } /* random comment */")); - EXPECT_EQ("namespace {\n" - "} // namespace", - runCheckOnCode<NamespaceCommentCheck>("namespace {\n" - "} // namespace asdf")); -} - // FIXME: It seems this might be incompatible to dos path. Investigating. #if !defined(_WIN32) static std::string runHeaderGuardCheck(StringRef Code, const Twine &Filename, Modified: clang-tools-extra/trunk/unittests/clang-tidy/Makefile URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/unittests/clang-tidy/Makefile?rev=218240&r1=218239&r2=218240&view=diff ============================================================================== --- clang-tools-extra/trunk/unittests/clang-tidy/Makefile (original) +++ clang-tools-extra/trunk/unittests/clang-tidy/Makefile Mon Sep 22 05:41:39 2014 @@ -14,7 +14,8 @@ TESTNAME = ClangTidy LINK_COMPONENTS := asmparser bitreader support MC MCParser option \ TransformUtils USEDLIBS = clangTidy.a clangTidyLLVMModule.a clangTidyGoogleModule.a \ - clangTidyMiscModule.a clangTidy.a clangTidyUtils.a \ + clangTidyMiscModule.a clangTidyReadability.a clangTidy.a \ + clangTidyUtils.a \ clangStaticAnalyzerFrontend.a clangStaticAnalyzerCheckers.a \ clangStaticAnalyzerCore.a \ clangFormat.a clangTooling.a clangFrontend.a clangSerialization.a \ Copied: clang-tools-extra/trunk/unittests/clang-tidy/ReadabilityChecksTest.cpp (from r218227, clang-tools-extra/trunk/unittests/clang-tidy/LLVMModuleTest.cpp) URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/unittests/clang-tidy/ReadabilityChecksTest.cpp?p2=clang-tools-extra/trunk/unittests/clang-tidy/ReadabilityChecksTest.cpp&p1=clang-tools-extra/trunk/unittests/clang-tidy/LLVMModuleTest.cpp&r1=218227&r2=218240&rev=218240&view=diff ============================================================================== --- clang-tools-extra/trunk/unittests/clang-tidy/LLVMModuleTest.cpp (original) +++ clang-tools-extra/trunk/unittests/clang-tidy/ReadabilityChecksTest.cpp Mon Sep 22 05:41:39 2014 @@ -1,13 +1,13 @@ #include "ClangTidyTest.h" -#include "llvm/HeaderGuardCheck.h" -#include "llvm/IncludeOrderCheck.h" -#include "llvm/NamespaceCommentCheck.h" +#include "readability/NamespaceCommentCheck.h" #include "gtest/gtest.h" namespace clang { namespace tidy { namespace test { +using readability::NamespaceCommentCheck; + TEST(NamespaceCommentCheckTest, Basic) { EXPECT_EQ("namespace i {\n} // namespace i", runCheckOnCode<NamespaceCommentCheck>("namespace i {\n}")); @@ -86,124 +86,6 @@ TEST(NamespaceCommentCheckTest, FixWrong "} // namespace asdf")); } -// FIXME: It seems this might be incompatible to dos path. Investigating. -#if !defined(_WIN32) -static std::string runHeaderGuardCheck(StringRef Code, const Twine &Filename, - unsigned ExpectedWarnings) { - std::vector<ClangTidyError> Errors; - std::string Result = test::runCheckOnCode<LLVMHeaderGuardCheck>( - Code, &Errors, Filename, std::string("-xc++-header")); - return Errors.size() == ExpectedWarnings ? Result : "invalid error count"; -} - -namespace { -struct WithEndifComment : public LLVMHeaderGuardCheck { - WithEndifComment(StringRef Name, ClangTidyContext *Context) - : LLVMHeaderGuardCheck(Name, Context) {} - bool shouldSuggestEndifComment(StringRef Filename) override { return true; } -}; -} // namespace - -static std::string runHeaderGuardCheckWithEndif(StringRef Code, - const Twine &Filename, - unsigned ExpectedWarnings) { - std::vector<ClangTidyError> Errors; - std::string Result = test::runCheckOnCode<WithEndifComment>( - Code, &Errors, Filename, std::string("-xc++-header")); - return Errors.size() == ExpectedWarnings ? Result : "invalid error count"; -} - -TEST(LLVMHeaderGuardCheckTest, FixHeaderGuards) { - EXPECT_EQ("#ifndef LLVM_ADT_FOO_H\n#define LLVM_ADT_FOO_H\n#endif\n", - runHeaderGuardCheck("#ifndef FOO\n#define FOO\n#endif\n", - "include/llvm/ADT/foo.h", - /*ExpectedWarnings=*/1)); - - // Allow trailing underscores. - EXPECT_EQ("#ifndef LLVM_ADT_FOO_H_\n#define LLVM_ADT_FOO_H_\n#endif\n", - runHeaderGuardCheck( - "#ifndef LLVM_ADT_FOO_H_\n#define LLVM_ADT_FOO_H_\n#endif\n", - "include/llvm/ADT/foo.h", /*ExpectedWarnings=*/0)); - - EXPECT_EQ( - "#ifndef LLVM_CLANG_C_BAR_H\n#define LLVM_CLANG_C_BAR_H\n\n\n#endif\n", - runHeaderGuardCheck("", "./include/clang-c/bar.h", - /*ExpectedWarnings=*/1)); - - EXPECT_EQ("#ifndef LLVM_CLANG_LIB_CODEGEN_C_H\n#define " - "LLVM_CLANG_LIB_CODEGEN_C_H\n\n\n#endif\n", - runHeaderGuardCheck("", "tools/clang/lib/CodeGen/c.h", - /*ExpectedWarnings=*/1)); - - EXPECT_EQ("#ifndef LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_X_H\n#define " - "LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_X_H\n\n\n#endif\n", - runHeaderGuardCheck("", "tools/clang/tools/extra/clang-tidy/x.h", - /*ExpectedWarnings=*/1)); - - EXPECT_EQ( - "int foo;\n#ifndef LLVM_CLANG_BAR_H\n#define LLVM_CLANG_BAR_H\n#endif\n", - runHeaderGuardCheck("int foo;\n#ifndef LLVM_CLANG_BAR_H\n" - "#define LLVM_CLANG_BAR_H\n#endif\n", - "include/clang/bar.h", /*ExpectedWarnings=*/1)); - - EXPECT_EQ("#ifndef LLVM_CLANG_BAR_H\n#define LLVM_CLANG_BAR_H\n\n" - "int foo;\n#ifndef FOOLOLO\n#define FOOLOLO\n#endif\n\n#endif\n", - runHeaderGuardCheck( - "int foo;\n#ifndef FOOLOLO\n#define FOOLOLO\n#endif\n", - "include/clang/bar.h", /*ExpectedWarnings=*/1)); - - EXPECT_EQ("#ifndef LLVM_ADT_FOO_H\n#define LLVM_ADT_FOO_H\n#endif " - " // LLVM_ADT_FOO_H\n", - runHeaderGuardCheckWithEndif("#ifndef FOO\n#define FOO\n#endif\n", - "include/llvm/ADT/foo.h", - /*ExpectedWarnings=*/1)); - - EXPECT_EQ("#ifndef LLVM_ADT_FOO_H\n#define LLVM_ADT_FOO_H\n#endif " - " // LLVM_ADT_FOO_H\n", - runHeaderGuardCheckWithEndif("#ifndef LLVM_ADT_FOO_H\n#define " - "LLVM_ADT_FOO_H\n#endif // LLVM_H\n", - "include/llvm/ADT/foo.h", - /*ExpectedWarnings=*/1)); - - EXPECT_EQ("#ifndef LLVM_ADT_FOO_H\n#define LLVM_ADT_FOO_H\n#endif" - " /* LLVM_ADT_FOO_H */\n", - runHeaderGuardCheckWithEndif("#ifndef LLVM_ADT_FOO_H\n#define " - "LLVM_ADT_FOO_H\n" - "#endif /* LLVM_ADT_FOO_H */\n", - "include/llvm/ADT/foo.h", - /*ExpectedWarnings=*/0)); - - EXPECT_EQ("#ifndef LLVM_ADT_FOO_H_\n#define LLVM_ADT_FOO_H_\n#endif " - "// LLVM_ADT_FOO_H_\n", - runHeaderGuardCheckWithEndif( - "#ifndef LLVM_ADT_FOO_H_\n#define " - "LLVM_ADT_FOO_H_\n#endif // LLVM_ADT_FOO_H_\n", - "include/llvm/ADT/foo.h", /*ExpectedWarnings=*/0)); - - EXPECT_EQ( - "#ifndef LLVM_ADT_FOO_H\n#define LLVM_ADT_FOO_H\n#endif // " - "LLVM_ADT_FOO_H\n", - runHeaderGuardCheckWithEndif( - "#ifndef LLVM_ADT_FOO_H_\n#define LLVM_ADT_FOO_H_\n#endif // LLVM\n", - "include/llvm/ADT/foo.h", /*ExpectedWarnings=*/1)); - - EXPECT_EQ("#ifndef LLVM_ADT_FOO_H\n#define LLVM_ADT_FOO_H\n#endif \\ \n// " - "LLVM_ADT_FOO_H\n", - runHeaderGuardCheckWithEndif("#ifndef LLVM_ADT_FOO_H\n#define " - "LLVM_ADT_FOO_H\n#endif \\ \n// " - "LLVM_ADT_FOO_H\n", - "include/llvm/ADT/foo.h", - /*ExpectedWarnings=*/0)); - - EXPECT_EQ("#ifndef LLVM_ADT_FOO_H\n#define LLVM_ADT_FOO_H\n#endif /* " - "LLVM_ADT_FOO_H\\ \n FOO */", - runHeaderGuardCheckWithEndif( - "#ifndef LLVM_ADT_FOO_H\n#define LLVM_ADT_FOO_H\n#endif /* " - "LLVM_ADT_FOO_H\\ \n FOO */", - "include/llvm/ADT/foo.h", /*ExpectedWarnings=*/0)); -} -#endif - } // namespace test } // namespace tidy } // namespace clang _______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
