TT_CastRParen,
TT_ConditionalExpr,
TT_CtorInitializerColon,
- TT_IncludePath,
+ TT_ImplicitStringLiteral,
TT_LineComment,
TT_ObjCBlockLParen,
TT_ObjCDecl,
assert(State.Stack.size());
unsigned ParenLevel = State.Stack.size() - 1;
+ if (Current.Type == TT_ImplicitStringLiteral) {
+ moveStateToNextToken(State);
+ return;
+ }
+
if (Newline) {
unsigned WhitespaceStartColumn = State.Column;
if (Current.is(tok::r_brace)) {
}
void parseIncludeDirective() {
+ next();
+ if (CurrentToken != NULL && CurrentToken->is(tok::less)) {
+ next();
+ while (CurrentToken != NULL) {
+ CurrentToken->Type = TT_ImplicitStringLiteral;
+ next();
+ }
+ } else {
+ while (CurrentToken != NULL) {
+ next();
+ }
+ }
+ }
+
+ void parseWarningOrError() {
+ next();
+ // We still want to format the whitespace left of the first token of the
+ // warning or error.
+ next();
while (CurrentToken != NULL) {
- CurrentToken->Type = TT_IncludePath;
+ CurrentToken->Type = TT_ImplicitStringLiteral;
next();
}
}
case tok::pp_import:
parseIncludeDirective();
break;
+ case tok::pp_error:
+ case tok::pp_warning:
+ parseWarningOrError();
+ break;
default:
break;
}
if (Tok.Parent->is(tok::comma))
return true;
- if (Tok.Type == TT_IncludePath)
- return Tok.is(tok::less) || Tok.is(tok::string_literal);
if (Tok.Type == TT_CtorInitializerColon || Tok.Type == TT_ObjCBlockLParen)
return true;
if (Tok.Type == TT_OverloadedOperator)
// Don't break at ':' if identifier before it can beak.
return false;
}
- if (Right.Type == TT_IncludePath)
- return false;
if (Right.is(tok::colon) && Right.Type == TT_ObjCMethodExpr)
return false;
if (Left.is(tok::colon) && Left.Type == TT_ObjCMethodExpr)
"#include \"a/b/string\"\n"
"#include \"string.h\"\n"
"#include \"string.h\"\n"
- "#include <a-a>");
+ "#include <a-a>\n"
+ "#include < path with space >\n");
verifyFormat("#import <string>");
verifyFormat("#import <a/b/c.h>");
" f();\n");
}
+TEST_F(FormatTest, DoNotInterfereWithErrorAndWarning) {
+ verifyFormat("#error Leave all white!!!!! space* alone!\n");
+ verifyFormat("#warning Leave all white!!!!! space* alone!\n");
+ EXPECT_EQ("#error 1", format(" # error 1"));
+ EXPECT_EQ("#warning 1", format(" # warning 1"));
+}
+
// FIXME: This breaks the order of the unwrapped lines:
// TEST_F(FormatTest, OrderUnwrappedLines) {
// verifyFormat("{\n"