summaryrefslogtreecommitdiffstats
path: root/clang
diff options
context:
space:
mode:
Diffstat (limited to 'clang')
-rw-r--r--clang/lib/Format/Format.cpp7
-rw-r--r--clang/unittests/Format/FormatTest.cpp13
2 files changed, 20 insertions, 0 deletions
diff --git a/clang/lib/Format/Format.cpp b/clang/lib/Format/Format.cpp
index 8f119d3b650..bd9f3233237 100644
--- a/clang/lib/Format/Format.cpp
+++ b/clang/lib/Format/Format.cpp
@@ -1648,6 +1648,8 @@ private:
SmallVector<FormatToken *, 16> Tokens;
SmallVector<IdentifierInfo *, 8> ForEachMacros;
+ bool FormattingDisabled = false;
+
void readRawToken(FormatToken &Tok) {
Lex.LexFromRawLexer(Tok.Tok);
Tok.TokenText = StringRef(SourceMgr.getCharacterData(Tok.Tok.getLocation()),
@@ -1663,6 +1665,11 @@ private:
Tok.Tok.setKind(tok::char_constant);
}
}
+ if (Tok.is(tok::comment) && Tok.TokenText == "// clang-format on")
+ FormattingDisabled = false;
+ Tok.Finalized = FormattingDisabled;
+ if (Tok.is(tok::comment) && Tok.TokenText == "// clang-format off")
+ FormattingDisabled = true;
}
};
diff --git a/clang/unittests/Format/FormatTest.cpp b/clang/unittests/Format/FormatTest.cpp
index 5c526c12e12..318f5b4a7cd 100644
--- a/clang/unittests/Format/FormatTest.cpp
+++ b/clang/unittests/Format/FormatTest.cpp
@@ -9133,5 +9133,18 @@ TEST_F(FormatTest, HandleConflictMarkers) {
"int i;\n"));
}
+TEST_F(FormatTest, DisableRegions) {
+ EXPECT_EQ("int i;\n"
+ "// clang-format off\n"
+ " int j;\n"
+ "// clang-format on\n"
+ "int k;",
+ format(" int i;\n"
+ " // clang-format off\n"
+ " int j;\n"
+ " // clang-format on\n"
+ " int k;"));
+}
+
} // end namespace tooling
} // end namespace clang
OpenPOWER on IntegriCloud