forked from OSchip/llvm-project
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:
parent
a6a250a211
commit
2ebb0c57fb
|
@ -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
|
||||
|
|
|
@ -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"
|
||||
" ;",
|
||||
|
|
Loading…
Reference in New Issue