Skip to content

Commit e877b75

Browse files
committed
Add an allowed conflict for new_expression vs call_expression
Also, add a positive dynamic precedence on the arguments node in a new_expression, so that new expressions with arguments will be parsed as such, instead of being parsed as new expressions *without* arguments nested inside of call expressions.
1 parent 1d05f78 commit e877b75

File tree

4 files changed

+21451
-22766
lines changed

4 files changed

+21451
-22766
lines changed

grammar.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,7 @@ module.exports = grammar({
7575
[$.assignment_pattern, $.assignment_expression],
7676
[$.computed_property_name, $.array],
7777
[$._for_header, $._expression],
78+
[$.new_expression, $.call_expression],
7879
],
7980

8081
word: $ => $.identifier,
@@ -633,7 +634,7 @@ module.exports = grammar({
633634
new_expression: $ => prec(PREC.NEW, seq(
634635
'new',
635636
field('constructor', $._expression),
636-
field('arguments', optional($.arguments))
637+
field('arguments', optional(prec.dynamic(1, $.arguments)))
637638
)),
638639

639640
_constructable_expression: $ => choice(

src/grammar.json

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2749,8 +2749,12 @@
27492749
"type": "CHOICE",
27502750
"members": [
27512751
{
2752-
"type": "SYMBOL",
2753-
"name": "arguments"
2752+
"type": "PREC_DYNAMIC",
2753+
"value": 1,
2754+
"content": {
2755+
"type": "SYMBOL",
2756+
"name": "arguments"
2757+
}
27542758
},
27552759
{
27562760
"type": "BLANK"
@@ -5923,6 +5927,10 @@
59235927
[
59245928
"_for_header",
59255929
"_expression"
5930+
],
5931+
[
5932+
"new_expression",
5933+
"call_expression"
59265934
]
59275935
],
59285936
"externals": [

src/node-types.json

Lines changed: 1 addition & 89 deletions
Original file line numberDiff line numberDiff line change
@@ -1909,95 +1909,7 @@
19091909
"required": true,
19101910
"types": [
19111911
{
1912-
"type": "array",
1913-
"named": true
1914-
},
1915-
{
1916-
"type": "arrow_function",
1917-
"named": true
1918-
},
1919-
{
1920-
"type": "class",
1921-
"named": true
1922-
},
1923-
{
1924-
"type": "false",
1925-
"named": true
1926-
},
1927-
{
1928-
"type": "function",
1929-
"named": true
1930-
},
1931-
{
1932-
"type": "generator_function",
1933-
"named": true
1934-
},
1935-
{
1936-
"type": "identifier",
1937-
"named": true
1938-
},
1939-
{
1940-
"type": "import",
1941-
"named": true
1942-
},
1943-
{
1944-
"type": "member_expression",
1945-
"named": true
1946-
},
1947-
{
1948-
"type": "meta_property",
1949-
"named": true
1950-
},
1951-
{
1952-
"type": "new_expression",
1953-
"named": true
1954-
},
1955-
{
1956-
"type": "null",
1957-
"named": true
1958-
},
1959-
{
1960-
"type": "number",
1961-
"named": true
1962-
},
1963-
{
1964-
"type": "object",
1965-
"named": true
1966-
},
1967-
{
1968-
"type": "parenthesized_expression",
1969-
"named": true
1970-
},
1971-
{
1972-
"type": "regex",
1973-
"named": true
1974-
},
1975-
{
1976-
"type": "string",
1977-
"named": true
1978-
},
1979-
{
1980-
"type": "subscript_expression",
1981-
"named": true
1982-
},
1983-
{
1984-
"type": "super",
1985-
"named": true
1986-
},
1987-
{
1988-
"type": "template_string",
1989-
"named": true
1990-
},
1991-
{
1992-
"type": "this",
1993-
"named": true
1994-
},
1995-
{
1996-
"type": "true",
1997-
"named": true
1998-
},
1999-
{
2000-
"type": "undefined",
1912+
"type": "_expression",
20011913
"named": true
20021914
}
20031915
]

0 commit comments

Comments
 (0)