[clang-tools-extra] r209141 - Improved llvm-namespace-comment check.

Sean Silva chisophugis at gmail.com
Tue May 20 10:32:28 PDT 2014


Is there a particular reason that this is being tested with unittests
instead of the usual lit tests? This kind of thing seems like it would be a
lot more readable as a lit test.

-- Sean Silva


On Mon, May 19, 2014 at 10:39 AM, Alexander Kornienko <alexfh at google.com>wrote:

> Author: alexfh
> Date: Mon May 19 11:39:08 2014
> New Revision: 209141
>
> URL: http://llvm.org/viewvc/llvm-project?rev=209141&view=rev
> Log:
> Improved llvm-namespace-comment check.
>
> Summary:
> Handle various forms of existing namespace closing comments, fix
> existing comments with wrong namespace name, ignore short namespaces.
>
> The state of this check now seems to be enough to enable it by default to
> gather
> user feedback ;)
>
> Reviewers: klimek
>
> Reviewed By: klimek
>
> Subscribers: cfe-commits
>
> Differential Revision: http://reviews.llvm.org/D3825
>
> Added:
>     clang-tools-extra/trunk/clang-tidy/llvm/IncludeOrderCheck.cpp
>     clang-tools-extra/trunk/clang-tidy/llvm/IncludeOrderCheck.h
>     clang-tools-extra/trunk/clang-tidy/llvm/NamespaceCommentCheck.cpp
>     clang-tools-extra/trunk/clang-tidy/llvm/NamespaceCommentCheck.h
> Removed:
>     clang-tools-extra/trunk/clang-tidy/llvm/LLVMTidyModule.h
> Modified:
>     clang-tools-extra/trunk/clang-tidy/llvm/CMakeLists.txt
>     clang-tools-extra/trunk/clang-tidy/llvm/LLVMTidyModule.cpp
>     clang-tools-extra/trunk/clang-tidy/tool/ClangTidyMain.cpp
>     clang-tools-extra/trunk/unittests/clang-tidy/LLVMModuleTest.cpp
>
> 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=209141&r1=209140&r2=209141&view=diff
>
> ==============================================================================
> --- clang-tools-extra/trunk/clang-tidy/llvm/CMakeLists.txt (original)
> +++ clang-tools-extra/trunk/clang-tidy/llvm/CMakeLists.txt Mon May 19
> 11:39:08 2014
> @@ -1,7 +1,9 @@
>  set(LLVM_LINK_COMPONENTS support)
>
>  add_clang_library(clangTidyLLVMModule
> +  IncludeOrderCheck.cpp
>    LLVMTidyModule.cpp
> +  NamespaceCommentCheck.cpp
>
>    LINK_LIBS
>    clangAST
>
> Added: clang-tools-extra/trunk/clang-tidy/llvm/IncludeOrderCheck.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clang-tidy/llvm/IncludeOrderCheck.cpp?rev=209141&view=auto
>
> ==============================================================================
> --- clang-tools-extra/trunk/clang-tidy/llvm/IncludeOrderCheck.cpp (added)
> +++ clang-tools-extra/trunk/clang-tidy/llvm/IncludeOrderCheck.cpp Mon May
> 19 11:39:08 2014
> @@ -0,0 +1,44 @@
> +//===--- IncludeOrderCheck.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 "IncludeOrderCheck.h"
> +#include "clang/Frontend/CompilerInstance.h"
> +#include "clang/Lex/PPCallbacks.h"
> +#include "clang/Lex/Preprocessor.h"
> +
> +namespace clang {
> +namespace tidy {
> +
> +namespace {
> +class IncludeOrderPPCallbacks : public PPCallbacks {
> +public:
> +  explicit IncludeOrderPPCallbacks(IncludeOrderCheck &Check) :
> Check(Check) {}
> +
> +  void InclusionDirective(SourceLocation HashLoc, const Token &IncludeTok,
> +                          StringRef FileName, bool IsAngled,
> +                          CharSourceRange FilenameRange, const FileEntry
> *File,
> +                          StringRef SearchPath, StringRef RelativePath,
> +                          const Module *Imported) override {
> +    // FIXME: This is a dummy implementation to show how to get at
> preprocessor
> +    // information. Implement a real include order check.
> +    Check.diag(HashLoc, "This is an include");
> +  }
> +
> +private:
> +  IncludeOrderCheck &Check;
> +};
> +} // namespace
> +
> +void IncludeOrderCheck::registerPPCallbacks(CompilerInstance &Compiler) {
> +  Compiler.getPreprocessor()
> +      .addPPCallbacks(new IncludeOrderPPCallbacks(*this));
> +}
> +
> +} // namespace tidy
> +} // namespace clang
>
> Added: clang-tools-extra/trunk/clang-tidy/llvm/IncludeOrderCheck.h
> URL:
> http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clang-tidy/llvm/IncludeOrderCheck.h?rev=209141&view=auto
>
> ==============================================================================
> --- clang-tools-extra/trunk/clang-tidy/llvm/IncludeOrderCheck.h (added)
> +++ clang-tools-extra/trunk/clang-tidy/llvm/IncludeOrderCheck.h Mon May 19
> 11:39:08 2014
> @@ -0,0 +1,29 @@
> +//===--- IncludeOrderCheck.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_INCLUDE_ORDER_CHECK_H
> +#define LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_LLVM_INCLUDE_ORDER_CHECK_H
> +
> +#include "../ClangTidy.h"
> +
> +namespace clang {
> +namespace tidy {
> +
> +/// \brief Checks the correct order of \c #includes.
> +///
> +/// see: http://llvm.org/docs/CodingStandards.html#include-style
> +class IncludeOrderCheck : public ClangTidyCheck {
> +public:
> +  void registerPPCallbacks(CompilerInstance &Compiler) override;
> +};
> +
> +} // namespace tidy
> +} // namespace clang
> +
> +#endif // LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_LLVM_INCLUDE_ORDER_CHECK_H
>
> 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=209141&r1=209140&r2=209141&view=diff
>
> ==============================================================================
> --- clang-tools-extra/trunk/clang-tidy/llvm/LLVMTidyModule.cpp (original)
> +++ clang-tools-extra/trunk/clang-tidy/llvm/LLVMTidyModule.cpp Mon May 19
> 11:39:08 2014
> @@ -7,75 +7,15 @@
>  //
>
>  //===----------------------------------------------------------------------===//
>
> -#include "LLVMTidyModule.h"
>  #include "../ClangTidy.h"
>  #include "../ClangTidyModule.h"
>  #include "../ClangTidyModuleRegistry.h"
> -#include "clang/AST/ASTContext.h"
> -#include "clang/ASTMatchers/ASTMatchFinder.h"
> -#include "clang/ASTMatchers/ASTMatchers.h"
> -#include "clang/Frontend/CompilerInstance.h"
> -#include "clang/Lex/PPCallbacks.h"
> -#include "clang/Lex/Preprocessor.h"
> -#include "llvm/Support/raw_ostream.h"
> -
> -using namespace clang::ast_matchers;
> +#include "IncludeOrderCheck.h"
> +#include "NamespaceCommentCheck.h"
>
>  namespace clang {
>  namespace tidy {
>
> -void NamespaceCommentCheck::registerMatchers(MatchFinder *Finder) {
> -  Finder->addMatcher(namespaceDecl().bind("namespace"), this);
> -}
> -
> -void NamespaceCommentCheck::check(const MatchFinder::MatchResult &Result)
> {
> -  const NamespaceDecl *ND =
> Result.Nodes.getNodeAs<NamespaceDecl>("namespace");
> -  Token Tok;
> -  SourceLocation Loc = ND->getRBraceLoc().getLocWithOffset(1);
> -  while (Lexer::getRawToken(Loc, Tok, *Result.SourceManager,
> -                            Result.Context->getLangOpts())) {
> -    Loc = Loc.getLocWithOffset(1);
> -  }
> -  // FIXME: Check that this namespace is "long".
> -  if (Tok.is(tok::comment)) {
> -    // FIXME: Check comment content.
> -    // FIXME: Check comment placement on the same line.
> -    return;
> -  }
> -  std::string Fix = " // namespace";
> -  if (!ND->isAnonymousNamespace())
> -    Fix = Fix.append(" ").append(ND->getNameAsString());
> -
> -  diag(ND->getLocation(), "namespace not terminated with a closing
> comment")
> -      <<
> FixItHint::CreateInsertion(ND->getRBraceLoc().getLocWithOffset(1),
> -                                    Fix);
> -}
> -
> -namespace {
> -class IncludeOrderPPCallbacks : public PPCallbacks {
> -public:
> -  explicit IncludeOrderPPCallbacks(IncludeOrderCheck &Check) :
> Check(Check) {}
> -
> -  void InclusionDirective(SourceLocation HashLoc, const Token &IncludeTok,
> -                          StringRef FileName, bool IsAngled,
> -                          CharSourceRange FilenameRange, const FileEntry
> *File,
> -                          StringRef SearchPath, StringRef RelativePath,
> -                          const Module *Imported) override {
> -    // FIXME: This is a dummy implementation to show how to get at
> preprocessor
> -    // information. Implement a real include order check.
> -    Check.diag(HashLoc, "This is an include");
> -  }
> -
> -private:
> -  IncludeOrderCheck &Check;
> -};
> -} // namespace
> -
> -void IncludeOrderCheck::registerPPCallbacks(CompilerInstance &Compiler) {
> -  Compiler.getPreprocessor()
> -      .addPPCallbacks(new IncludeOrderPPCallbacks(*this));
> -}
> -
>  class LLVMModule : public ClangTidyModule {
>  public:
>    void addCheckFactories(ClangTidyCheckFactories &CheckFactories)
> override {
>
> Removed: clang-tools-extra/trunk/clang-tidy/llvm/LLVMTidyModule.h
> URL:
> http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clang-tidy/llvm/LLVMTidyModule.h?rev=209140&view=auto
>
> ==============================================================================
> --- clang-tools-extra/trunk/clang-tidy/llvm/LLVMTidyModule.h (original)
> +++ clang-tools-extra/trunk/clang-tidy/llvm/LLVMTidyModule.h (removed)
> @@ -1,38 +0,0 @@
> -//===--- LLVMTidyModule.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_LLVM_TIDY_MODULE_H
> -#define LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_LLVM_LLVM_TIDY_MODULE_H
> -
> -#include "../ClangTidy.h"
> -
> -namespace clang {
> -namespace tidy {
> -
> -/// \brief Checks the correct order of \c #includes.
> -///
> -/// see: http://llvm.org/docs/CodingStandards.html#include-style
> -class IncludeOrderCheck : public ClangTidyCheck {
> -public:
> -  void registerPPCallbacks(CompilerInstance &Compiler) override;
> -};
> -
> -/// \brief Checks that long namespaces have a closing comment.
> -///
> -/// see: http://llvm.org/docs/CodingStandards.html#namespace-indentation
> -class NamespaceCommentCheck : public ClangTidyCheck {
> -public:
> -  void registerMatchers(ast_matchers::MatchFinder *Finder) override;
> -  void check(const ast_matchers::MatchFinder::MatchResult &Result)
> override;
> -};
> -
> -} // namespace tidy
> -} // namespace clang
> -
> -#endif // LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_LLVM_TIDY_LLVM_MODULE_H
>
> Added: 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=209141&view=auto
>
> ==============================================================================
> --- clang-tools-extra/trunk/clang-tidy/llvm/NamespaceCommentCheck.cpp
> (added)
> +++ clang-tools-extra/trunk/clang-tidy/llvm/NamespaceCommentCheck.cpp Mon
> May 19 11:39:08 2014
> @@ -0,0 +1,115 @@
> +//===--- 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/Support/raw_ostream.h"
> +
> +using namespace clang::ast_matchers;
> +
> +namespace clang {
> +namespace tidy {
> +
> +NamespaceCommentCheck::NamespaceCommentCheck()
> +    : NamespaceCommentPattern("^/[/*] *(end (of )?)?
> *(anonymous|unnamed)? *"
> +                              "namespace( +([a-zA-Z0-9_]+))? *(\\*/)?$",
> +                              llvm::Regex::IgnoreCase),
> +      ShortNamespaceLines(1) {}
> +
> +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) {
> +  std::string Fix = "// namespace";
> +  if (!ND->isAnonymousNamespace())
> +    Fix.append(" ").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;
> +  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));
> +      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));
> +}
> +
> +} // namespace tidy
> +} // namespace clang
>
> Added: 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=209141&view=auto
>
> ==============================================================================
> --- clang-tools-extra/trunk/clang-tidy/llvm/NamespaceCommentCheck.h (added)
> +++ clang-tools-extra/trunk/clang-tidy/llvm/NamespaceCommentCheck.h Mon
> May 19 11:39:08 2014
> @@ -0,0 +1,36 @@
> +//===--- 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();
> +  void registerMatchers(ast_matchers::MatchFinder *Finder) override;
> +  void check(const ast_matchers::MatchFinder::MatchResult &Result)
> override;
> +
> +private:
> +  llvm::Regex NamespaceCommentPattern;
> +  const unsigned ShortNamespaceLines;
> +};
> +
> +} // namespace tidy
> +} // namespace clang
> +
> +#endif // LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_LLVM_NAMESPACE_COMMENT_CHECK_H
>
> Modified: clang-tools-extra/trunk/clang-tidy/tool/ClangTidyMain.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clang-tidy/tool/ClangTidyMain.cpp?rev=209141&r1=209140&r2=209141&view=diff
>
> ==============================================================================
> --- clang-tools-extra/trunk/clang-tidy/tool/ClangTidyMain.cpp (original)
> +++ clang-tools-extra/trunk/clang-tidy/tool/ClangTidyMain.cpp Mon May 19
> 11:39:08 2014
> @@ -31,7 +31,6 @@ const char DefaultChecks[] =
>      "*,"                       // Enable all checks, except these:
>      "-clang-analyzer-alpha*,"  // Too many false positives.
>      "-llvm-include-order,"     // Not implemented yet.
> -    "-llvm-namespace-comment," // Not complete.
>      "-google-*,";              // Doesn't apply to LLVM.
>  static cl::opt<std::string>
>  Checks("checks", cl::desc("Comma-separated list of globs with optional
> '-'\n"
>
> 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=209141&r1=209140&r2=209141&view=diff
>
> ==============================================================================
> --- clang-tools-extra/trunk/unittests/clang-tidy/LLVMModuleTest.cpp
> (original)
> +++ clang-tools-extra/trunk/unittests/clang-tidy/LLVMModuleTest.cpp Mon
> May 19 11:39:08 2014
> @@ -1,5 +1,6 @@
>  #include "ClangTidyTest.h"
> -#include "llvm/LLVMTidyModule.h"
> +#include "llvm/IncludeOrderCheck.h"
> +#include "llvm/NamespaceCommentCheck.h"
>  #include "gtest/gtest.h"
>
>  namespace clang {
> @@ -9,6 +10,79 @@ 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"));
>  }
>
>  } // namespace test
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20140520/00e4b4ff/attachment.html>


More information about the cfe-commits mailing list