clang-format: [JS] revert over-eager ASI check.
Summary: Change r291428 introduced ASI detection after closing curly braces. That would generally be correct, however this breaks indentation for structural statements. What happens is that CompoundStatementIndenter increases indentation for the current line, then after reading ASI creates a new line (with the increased line level), and only after the structural parser sees e.g. the if/then/else branch closed, line level is reduced. That leads to the new line started by ASI having a level too high.
Reviewers: djasper
Subscribers: sammccall, cfe-commits, klimek
Differential Revision: https://reviews.llvm.org/D28763
llvm-svn: 292099
diff --git a/clang/lib/Format/UnwrappedLineParser.cpp b/clang/lib/Format/UnwrappedLineParser.cpp
index 8fc3b78..1dcb866 100644
--- a/clang/lib/Format/UnwrappedLineParser.cpp
+++ b/clang/lib/Format/UnwrappedLineParser.cpp
@@ -746,8 +746,7 @@
Previous->isOneOf(tok::r_square, tok::r_paren, tok::plusplus,
tok::minusminus)))
return addUnwrappedLine();
- if ((PreviousMustBeValue || Previous->is(tok::r_brace)) &&
- isJSDeclOrStmt(Keywords, Next))
+ if (PreviousMustBeValue && isJSDeclOrStmt(Keywords, Next))
return addUnwrappedLine();
}
diff --git a/clang/unittests/Format/FormatTestJS.cpp b/clang/unittests/Format/FormatTestJS.cpp
index 230717f..50ba4ff 100644
--- a/clang/unittests/Format/FormatTestJS.cpp
+++ b/clang/unittests/Format/FormatTestJS.cpp
@@ -858,13 +858,25 @@
"return 1",
"a = null\n"
" return 1");
+ // Below "class Y {}" should ideally be on its own line.
verifyFormat(
"x = {\n"
" a: 1\n"
- "}\n"
- "class Y {}",
+ "} class Y {}",
" x = {a : 1}\n"
" class Y { }");
+ verifyFormat(
+ "if (x) {\n"
+ "}\n"
+ "return 1",
+ "if (x) {}\n"
+ " return 1");
+ verifyFormat(
+ "if (x) {\n"
+ "}\n"
+ "class X {}",
+ "if (x) {}\n"
+ " class X {}");
}
TEST_F(FormatTestJS, ImportExportASI) {
@@ -873,11 +885,17 @@
"export function z() {}",
"import {x} from 'y'\n"
" export function z() {}");
+ // Below "class Y {}" should ideally be on its own line.
verifyFormat(
- "export {x}\n"
- "class Y {}",
+ "export {x} class Y {}",
" export {x}\n"
" class Y {\n}");
+ verifyFormat(
+ "if (x) {\n"
+ "}\n"
+ "export class Y {}",
+ "if ( x ) { }\n"
+ " export class Y {}");
}
TEST_F(FormatTestJS, ClosureStyleCasts) {