]> granicus.if.org Git - clang/commitdiff
clang-format: [JS] ASI insertion after boolean literals.
authorMartin Probst <martin@probst.io>
Sun, 18 Sep 2016 17:21:52 +0000 (17:21 +0000)
committerMartin Probst <martin@probst.io>
Sun, 18 Sep 2016 17:21:52 +0000 (17:21 +0000)
Summary:
Before when a semicolon was missing after a boolean literal:
    a = true
    return 1;

clang-format would parse this as one line and format as:
    a = true return 1;

It turns out that C++ does not consider `true` and `false` to be literals, we
have to check for that explicitly.

Reviewers: djasper

Subscribers: klimek, cfe-commits

Differential Revision: https://reviews.llvm.org/D24574

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@281856 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Format/UnwrappedLineParser.cpp
unittests/Format/FormatTestJS.cpp

index 94dccc6e02b04fdd36560bf318e70d2e74b01d7a..76dc4131c0da03ff58672ae7ce8e4a4d43a08b86 100644 (file)
@@ -681,7 +681,9 @@ static bool mustBeJSIdent(const AdditionalKeywords &Keywords,
 
 static bool mustBeJSIdentOrValue(const AdditionalKeywords &Keywords,
                                  const FormatToken *FormatTok) {
-  return FormatTok->Tok.isLiteral() || mustBeJSIdent(Keywords, FormatTok);
+  return FormatTok->Tok.isLiteral() ||
+         FormatTok->isOneOf(tok::kw_true, tok::kw_false) ||
+         mustBeJSIdent(Keywords, FormatTok);
 }
 
 // isJSDeclOrStmt returns true if |FormatTok| starts a declaration or statement
index 9ccb75b6296d6dc3cf3a6cea9079aafcb223c5c9..dd95462daf410ba7e84aa311703ebfa752425550 100644 (file)
@@ -774,6 +774,18 @@ TEST_F(FormatTestJS, AutomaticSemicolonInsertionHeuristic) {
                                       "String");
   verifyFormat("function f(@Foo bar) {}", "function f(@Foo\n"
                                           "  bar) {}");
+  verifyFormat("a = true\n"
+               "return 1",
+               "a = true\n"
+               "  return   1");
+  verifyFormat("a = 's'\n"
+               "return 1",
+               "a = 's'\n"
+               "  return   1");
+  verifyFormat("a = null\n"
+               "return 1",
+               "a = null\n"
+               "  return   1");
 }
 
 TEST_F(FormatTestJS, ClosureStyleCasts) {