r239693 - clang-format: [JS] Fix corner case in template string parsing.
Daniel Jasper
djasper at google.com
Sun Jun 14 00:16:57 PDT 2015
Author: djasper
Date: Sun Jun 14 02:16:57 2015
New Revision: 239693
URL: http://llvm.org/viewvc/llvm-project?rev=239693&view=rev
Log:
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 "
Modified:
cfe/trunk/lib/Format/Format.cpp
cfe/trunk/unittests/Format/FormatTestJS.cpp
Modified: cfe/trunk/lib/Format/Format.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Format/Format.cpp?rev=239693&r1=239692&r2=239693&view=diff
==============================================================================
--- cfe/trunk/lib/Format/Format.cpp (original)
+++ cfe/trunk/lib/Format/Format.cpp Sun Jun 14 02:16:57 2015
@@ -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
Modified: cfe/trunk/unittests/Format/FormatTestJS.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/unittests/Format/FormatTestJS.cpp?rev=239693&r1=239692&r2=239693&view=diff
==============================================================================
--- cfe/trunk/unittests/Format/FormatTestJS.cpp (original)
+++ cfe/trunk/unittests/Format/FormatTestJS.cpp Sun Jun 14 02:16:57 2015
@@ -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"
" ;",
More information about the cfe-commits
mailing list