clang-format: [JS] Fix corner case in template string parsing.

Before, these would not properly detected because of the char/string
literal found when re-lexing after the first `:

  var x = `'`;  // comment with matching quote '
  var x = `"`;  // comment with matching quote "

llvm-svn: 239693
This commit is contained in:
Daniel Jasper 2015-06-14 07:16:57 +00:00
parent a6a250a211
commit 2ebb0c57fb
2 changed files with 7 additions and 1 deletions

View File

@ -785,7 +785,8 @@ private:
// Backticks get lexed as tok::unknown tokens. If a template string contains
// a comment start, it gets lexed as a tok::comment, or tok::unknown if
// unterminated.
if (!EndBacktick->isOneOf(tok::comment, tok::unknown))
if (!EndBacktick->isOneOf(tok::comment, tok::string_literal,
tok::char_constant, tok::unknown))
return false;
size_t CommentBacktickPos = EndBacktick->TokenText.find('`');
// Unknown token that's not actually a backtick, or a comment that doesn't

View File

@ -809,6 +809,11 @@ TEST_F(FormatTestJS, TemplateStrings) {
"var y;",
format("var x =\n `/*a`;\n"
"var y;"));
// Unterminated string literals in a template string.
verifyFormat("var x = `'`; // comment with matching quote '\n"
"var y;");
verifyFormat("var x = `\"`; // comment with matching quote \"\n"
"var y;");
// Backticks in a comment - not a template string.
EXPECT_EQ("var x = 1 // `/*a`;\n"
" ;",