[clang-tools-extra] r231369 - [clang-tidy] Replace unrecognized namespace ending comments.
Alexander Kornienko
alexfh at google.com
Thu Mar 5 06:56:12 PST 2015
Author: alexfh
Date: Thu Mar 5 08:56:11 2015
New Revision: 231369
URL: http://llvm.org/viewvc/llvm-project?rev=231369&view=rev
Log:
[clang-tidy] Replace unrecognized namespace ending comments.
Summary:
Replace unrecognized namespace ending comments. This will help in particular when a namespace ending comment is mistyped or doesn't fit the regexp for other reason, e.g.:
namespace a {
namespace b {
namespace {
} // anoynmous namespace
} // b
} // namesapce a
Reviewers: djasper
Reviewed By: djasper
Subscribers: curdeius, cfe-commits
Differential Revision: http://reviews.llvm.org/D8078
Modified:
clang-tools-extra/trunk/clang-tidy/readability/NamespaceCommentCheck.cpp
clang-tools-extra/trunk/unittests/clang-tidy/ReadabilityModuleTest.cpp
Modified: clang-tools-extra/trunk/clang-tidy/readability/NamespaceCommentCheck.cpp
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clang-tidy/readability/NamespaceCommentCheck.cpp?rev=231369&r1=231368&r2=231369&view=diff
==============================================================================
--- clang-tools-extra/trunk/clang-tidy/readability/NamespaceCommentCheck.cpp (original)
+++ clang-tools-extra/trunk/clang-tidy/readability/NamespaceCommentCheck.cpp Thu Mar 5 08:56:11 2015
@@ -82,6 +82,9 @@ void NamespaceCommentCheck::check(const
// to insert a line break.
bool NeedLineBreak = NextTokenIsOnSameLine && Tok.isNot(tok::eof);
+ SourceRange OldCommentRange(AfterRBrace, AfterRBrace);
+ StringRef Message = "%0 not terminated with a closing comment";
+
// Try to find existing namespace closing comment on the same line.
if (Tok.is(tok::comment) && NextTokenIsOnSameLine) {
StringRef Comment(Sources.getCharacterData(Loc), Tok.getLength());
@@ -101,20 +104,22 @@ void NamespaceCommentCheck::check(const
// 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("//"))
+ OldCommentRange =
+ SourceRange(AfterRBrace, Loc.getLocWithOffset(Tok.getLength()));
+ Message =
+ (llvm::Twine(
+ "%0 ends with a comment that refers to a wrong namespace '") +
+ NamespaceNameInComment + "'").str();
+ } else if (Comment.startswith("//")) {
+ // Assume that this is an unrecognized form of a namespace closing line
+ // comment. Replace it.
NeedLineBreak = false;
+ OldCommentRange =
+ SourceRange(AfterRBrace, Loc.getLocWithOffset(Tok.getLength()));
+ Message = "%0 ends with an unrecognized comment";
+ }
+ // If it's a block comment, just move it to the next line, as it can be
+ // multi-line or there may be other tokens behind it.
}
std::string NamespaceName =
@@ -122,11 +127,11 @@ void NamespaceCommentCheck::check(const
? "anonymous namespace"
: ("namespace '" + ND->getNameAsString() + "'");
- diag(AfterRBrace, "%0 not terminated with a closing comment")
+ diag(AfterRBrace, Message)
<< NamespaceName
- << FixItHint::CreateInsertion(AfterRBrace,
- std::string(SpacesBeforeComments, ' ') +
- getNamespaceComment(ND, NeedLineBreak));
+ << FixItHint::CreateReplacement(
+ OldCommentRange, std::string(SpacesBeforeComments, ' ') +
+ getNamespaceComment(ND, NeedLineBreak));
diag(ND->getLocation(), "%0 starts here", DiagnosticIDs::Note)
<< NamespaceName;
}
Modified: clang-tools-extra/trunk/unittests/clang-tidy/ReadabilityModuleTest.cpp
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/unittests/clang-tidy/ReadabilityModuleTest.cpp?rev=231369&r1=231368&r2=231369&view=diff
==============================================================================
--- clang-tools-extra/trunk/unittests/clang-tidy/ReadabilityModuleTest.cpp (original)
+++ clang-tools-extra/trunk/unittests/clang-tidy/ReadabilityModuleTest.cpp Thu Mar 5 08:56:11 2015
@@ -75,11 +75,6 @@ TEST(NamespaceCommentCheckTest, CheckExi
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) {
@@ -94,6 +89,11 @@ TEST(NamespaceCommentCheckTest, FixWrong
"} // namespace",
runCheckOnCode<NamespaceCommentCheck>("namespace {\n"
"} // namespace asdf"));
+ // Remove unknown comments.
+ EXPECT_EQ("namespace {\n"
+ "} // namespace",
+ runCheckOnCode<NamespaceCommentCheck>("namespace {\n"
+ "} // random text"));
}
TEST(BracesAroundStatementsCheck, IfWithComments) {
More information about the cfe-commits
mailing list