namespace format {
namespace {
-// The maximal number of lines that a short namespace spans.
+// The maximal number of unwrapped lines that a short namespace spans.
// Short namespaces don't need an end comment.
static const int kShortNamespaceMaxLines = 1;
return text;
}
-bool isShort(const FormatToken *NamespaceTok, const FormatToken *RBraceTok,
- const SourceManager &SourceMgr) {
- int StartLine =
- SourceMgr.getSpellingLineNumber(NamespaceTok->Tok.getLocation());
- int EndLine = SourceMgr.getSpellingLineNumber(RBraceTok->Tok.getLocation());
- return EndLine - StartLine + 1 <= kShortNamespaceMaxLines;
-}
-
bool hasEndComment(const FormatToken *RBraceTok) {
return RBraceTok->Next && RBraceTok->Next->is(tok::comment);
}
const std::string EndCommentText =
computeEndCommentText(NamespaceName, AddNewline);
if (!hasEndComment(RBraceTok)) {
- if (!isShort(NamespaceTok, RBraceTok, SourceMgr))
+ bool isShort = I - StartLineIndex <= kShortNamespaceMaxLines + 1;
+ if (!isShort)
addEndComment(RBraceTok, EndCommentText, SourceMgr, &Fixes);
continue;
}
EXPECT_EQ("namespace N {\n"
"\n"
"int i;\n"
- "} // namespace N",
+ "}",
format("namespace N {\n"
"\n"
"int i;\n"
"}", LLVMWithNoNamespaceFix));
EXPECT_EQ("namespace {\n"
"int i;\n"
- "\n"
- "} // namespace",
+ "}",
format("namespace {\n"
"int i;\n"
"\n"
EXPECT_EQ("namespace N {\n"
"void f() {}\n"
"void g()\n"
- "}",
+ "} // namespace N",
format("namespace N { void f( ) { } void g( ) }"));
}
" void f() {}\n"
" int *a;\n"
"};\n"
- "}\n"
- "}");
+ "} // namespace b\n"
+ "} // namespace a");
}
TEST_F(FormatTest, SpecialTokensAtEndOfLine) {
"struct B {\n"
" int x;\n"
"};\n"
- "}\n",
+ "} // namespace a\n",
StroustrupBraceStyle);
verifyFormat("void foo()\n"
TEST_F(NamespaceEndCommentsFixerTest, AddsEndComment) {
EXPECT_EQ("namespace {\n"
" int i;\n"
+ " int j;\n"
"}// namespace",
fixNamespaceEndComments("namespace {\n"
" int i;\n"
+ " int j;\n"
"}"));
EXPECT_EQ("namespace {\n"
" int i;\n"
+ " int j;\n"
"}// namespace\n",
fixNamespaceEndComments("namespace {\n"
" int i;\n"
+ " int j;\n"
"}\n"));
EXPECT_EQ("namespace A {\n"
" int i;\n"
+ " int j;\n"
"}// namespace A",
fixNamespaceEndComments("namespace A {\n"
" int i;\n"
+ " int j;\n"
"}"));
EXPECT_EQ("inline namespace A {\n"
" int i;\n"
+ " int j;\n"
"}// namespace A",
fixNamespaceEndComments("inline namespace A {\n"
" int i;\n"
+ " int j;\n"
"}"));
EXPECT_EQ("namespace ::A {\n"
" int i;\n"
+ " int j;\n"
"}// namespace ::A",
fixNamespaceEndComments("namespace ::A {\n"
" int i;\n"
+ " int j;\n"
"}"));
EXPECT_EQ("namespace ::A::B {\n"
" int i;\n"
+ " int j;\n"
"}// namespace ::A::B",
fixNamespaceEndComments("namespace ::A::B {\n"
" int i;\n"
+ " int j;\n"
"}"));
EXPECT_EQ("namespace /**/::/**/A/**/::/**/B/**/ {\n"
" int i;\n"
+ " int j;\n"
"}// namespace ::A::B",
fixNamespaceEndComments("namespace /**/::/**/A/**/::/**/B/**/ {\n"
" int i;\n"
+ " int j;\n"
"}"));
EXPECT_EQ("namespace A {\n"
"namespace B {\n"
" int i;\n"
+ "}\n"
+ "}// namespace A",
+ fixNamespaceEndComments("namespace A {\n"
+ "namespace B {\n"
+ " int i;\n"
+ "}\n"
+ "}"));
+ EXPECT_EQ("namespace A {\n"
+ "namespace B {\n"
+ " int i;\n"
+ " int j;\n"
"}// namespace B\n"
"}// namespace A",
fixNamespaceEndComments("namespace A {\n"
"namespace B {\n"
" int i;\n"
+ " int j;\n"
"}\n"
"}"));
EXPECT_EQ("namespace A {\n"
" int a;\n"
+ " int b;\n"
"}// namespace A\n"
"namespace B {\n"
" int b;\n"
+ " int a;\n"
"}// namespace B",
fixNamespaceEndComments("namespace A {\n"
" int a;\n"
+ " int b;\n"
"}\n"
"namespace B {\n"
" int b;\n"
+ " int a;\n"
"}"));
EXPECT_EQ("namespace A {\n"
" int a1;\n"
+ " int a2;\n"
"}// namespace A\n"
"namespace A {\n"
" int a2;\n"
+ " int a1;\n"
"}// namespace A",
fixNamespaceEndComments("namespace A {\n"
" int a1;\n"
+ " int a2;\n"
"}\n"
"namespace A {\n"
" int a2;\n"
+ " int a1;\n"
"}"));
EXPECT_EQ("namespace A {\n"
" int a;\n"
+ " int b;\n"
"}// namespace A\n"
"// comment about b\n"
"int b;",
fixNamespaceEndComments("namespace A {\n"
" int a;\n"
+ " int b;\n"
"}\n"
"// comment about b\n"
"int b;"));
"namespace B {\n"
"namespace C {\n"
"namespace D {\n"
- "}// namespace D\n"
+ "}\n"
"}// namespace C\n"
"}// namespace B\n"
"}// namespace A",
TEST_F(NamespaceEndCommentsFixerTest, AddsNewlineIfNeeded) {
EXPECT_EQ("namespace A {\n"
" int i;\n"
+ " int j;\n"
"}// namespace A\n"
- " int j;",
+ " int k;",
fixNamespaceEndComments("namespace A {\n"
" int i;\n"
- "} int j;"));
+ " int j;\n"
+ "} int k;"));
EXPECT_EQ("namespace {\n"
" int i;\n"
+ " int j;\n"
"}// namespace\n"
- " int j;",
+ " int k;",
fixNamespaceEndComments("namespace {\n"
" int i;\n"
- "} int j;"));
+ " int j;\n"
+ "} int k;"));
EXPECT_EQ("namespace A {\n"
" int i;\n"
+ " int j;\n"
"}// namespace A\n"
" namespace B {\n"
" int j;\n"
+ " int k;\n"
"}// namespace B",
fixNamespaceEndComments("namespace A {\n"
" int i;\n"
+ " int j;\n"
"} namespace B {\n"
" int j;\n"
+ " int k;\n"
"}"));
}
TEST_F(NamespaceEndCommentsFixerTest, DoesNotAddEndCommentForShortNamespace) {
EXPECT_EQ("namespace {}", fixNamespaceEndComments("namespace {}"));
EXPECT_EQ("namespace A {}", fixNamespaceEndComments("namespace A {}"));
- EXPECT_EQ("namespace A { int i; }",
- fixNamespaceEndComments("namespace A { int i; }"));
+ EXPECT_EQ("namespace A { a }",
+ fixNamespaceEndComments("namespace A { a }"));
}
TEST_F(NamespaceEndCommentsFixerTest, DoesNotAddCommentAfterUnaffectedRBrace) {