mirror of
https://github.com/tc39/test262.git
synced 2025-07-06 05:34:42 +02:00
[generation] Expand "comments" in string literals
Extend test generation tool to recognize and expand interpolation patterns within string literals.
This commit is contained in:
parent
3723e7caeb
commit
b0b41775e5
@ -78,6 +78,13 @@ class Template:
|
|||||||
for region in self.regions:
|
for region in self.regions:
|
||||||
whitespace = indentPattern.match(lines[region['lineno']]).group(1)
|
whitespace = indentPattern.match(lines[region['lineno']]).group(1)
|
||||||
value = context['regions'].get(region['name'], '')
|
value = context['regions'].get(region['name'], '')
|
||||||
|
|
||||||
|
str_char = region.get('in_string')
|
||||||
|
if str_char:
|
||||||
|
safe_char = '"' if str_char == '\'' else '\''
|
||||||
|
value = value.replace(str_char, safe_char)
|
||||||
|
value = value.replace('\n', '\\\n')
|
||||||
|
|
||||||
source = source[:region['firstchar']] + \
|
source = source[:region['firstchar']] + \
|
||||||
indent(value, whitespace).lstrip() + \
|
indent(value, whitespace).lstrip() + \
|
||||||
source[region['lastchar']:]
|
source[region['lastchar']:]
|
||||||
|
@ -4,6 +4,7 @@
|
|||||||
def find_comments(source):
|
def find_comments(source):
|
||||||
'''Parse input string describing JavaScript source and yield dictionaries
|
'''Parse input string describing JavaScript source and yield dictionaries
|
||||||
describing the JavaScript comments in the order they appear in the source.
|
describing the JavaScript comments in the order they appear in the source.
|
||||||
|
This includes comment patterns within string literals.
|
||||||
|
|
||||||
Each dictionary defines the following attributes:
|
Each dictionary defines the following attributes:
|
||||||
|
|
||||||
@ -11,6 +12,9 @@ def find_comments(source):
|
|||||||
- firstchar: the zero-indexed position of the token that begins the comment
|
- firstchar: the zero-indexed position of the token that begins the comment
|
||||||
- lastchar: the zero-indexed position of the token that closes the comment
|
- lastchar: the zero-indexed position of the token that closes the comment
|
||||||
- lineno: the zero-indexed offset of the line on which the comment appears
|
- lineno: the zero-indexed offset of the line on which the comment appears
|
||||||
|
- in_string: `False` if the comment is a true JavaScript comment, one of
|
||||||
|
'\'' (single quote), '"' (double quote), or '`' (back tick) if
|
||||||
|
the comment pattern appears within a string literal.
|
||||||
'''
|
'''
|
||||||
in_string = False
|
in_string = False
|
||||||
in_s_comment = False
|
in_s_comment = False
|
||||||
@ -37,6 +41,7 @@ def find_comments(source):
|
|||||||
source=comment[1:],
|
source=comment[1:],
|
||||||
firstchar=idx - len(comment) - 1,
|
firstchar=idx - len(comment) - 1,
|
||||||
lastchar=idx,
|
lastchar=idx,
|
||||||
|
in_string=in_string,
|
||||||
lineno=lineno)
|
lineno=lineno)
|
||||||
continue
|
continue
|
||||||
elif in_m_comment:
|
elif in_m_comment:
|
||||||
@ -46,6 +51,7 @@ def find_comments(source):
|
|||||||
source=comment[1:-1],
|
source=comment[1:-1],
|
||||||
firstchar=idx - len(comment) - 1,
|
firstchar=idx - len(comment) - 1,
|
||||||
lastchar=idx + 1,
|
lastchar=idx + 1,
|
||||||
|
in_string=in_string,
|
||||||
lineno=lineno)
|
lineno=lineno)
|
||||||
continue
|
continue
|
||||||
elif in_string:
|
elif in_string:
|
||||||
@ -53,7 +59,6 @@ def find_comments(source):
|
|||||||
in_string = False
|
in_string = False
|
||||||
elif source[idx] == '\n' and in_string != '`' and not follows_escape:
|
elif source[idx] == '\n' and in_string != '`' and not follows_escape:
|
||||||
in_string = False
|
in_string = False
|
||||||
continue
|
|
||||||
|
|
||||||
if in_m_comment or in_s_comment:
|
if in_m_comment or in_s_comment:
|
||||||
comment += source[idx]
|
comment += source[idx]
|
||||||
|
@ -25,9 +25,10 @@ The following should not be expanded:
|
|||||||
*/*{ first }*/
|
*/*{ first }*/
|
||||||
//*{ first }*/
|
//*{ first }*/
|
||||||
// /*{ first }*/
|
// /*{ first }*/
|
||||||
"/*{ first }*/"
|
Quote characters: " ' `
|
||||||
'/*{ first }*/'
|
"Quote characters: ' ' `"
|
||||||
|
'Quote characters: " " `'
|
||||||
`
|
`
|
||||||
/*{ first }*/`
|
Quote characters: " ' '`
|
||||||
|
|
||||||
'This is "teardown" code.';
|
'This is "teardown" code.';
|
||||||
|
2
tools/generation/test/fixtures/normal.case
vendored
2
tools/generation/test/fixtures/normal.case
vendored
@ -23,5 +23,7 @@ First value
|
|||||||
Second value
|
Second value
|
||||||
//- third
|
//- third
|
||||||
Third value
|
Third value
|
||||||
|
//- fourth
|
||||||
|
Quote characters: " ' `
|
||||||
//- teardown
|
//- teardown
|
||||||
'This is "teardown" code.';
|
'This is "teardown" code.';
|
||||||
|
@ -21,7 +21,8 @@ The following should not be expanded:
|
|||||||
*/*{ first }*/
|
*/*{ first }*/
|
||||||
//*{ first }*/
|
//*{ first }*/
|
||||||
// /*{ first }*/
|
// /*{ first }*/
|
||||||
"/*{ first }*/"
|
/*{ fourth }*/
|
||||||
'/*{ first }*/'
|
"/*{ fourth }*/"
|
||||||
|
'/*{ fourth }*/'
|
||||||
`
|
`
|
||||||
/*{ first }*/`
|
/*{ fourth }*/`
|
||||||
|
Loading…
x
Reference in New Issue
Block a user