Skip to content

Commit 1fe4e29

Browse files
author
Josh Vera
authored
Merge pull request #89 from tree-sitter/remove-calls-from-new-expressions
Remove calls from new expressions
2 parents 7ee0097 + f64397a commit 1fe4e29

File tree

7 files changed

+63829
-58115
lines changed

7 files changed

+63829
-58115
lines changed

corpus/expressions.txt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -671,9 +671,9 @@ new Thing;
671671
---
672672

673673
(program
674-
(expression_statement (new_expression (call_expression
674+
(expression_statement (new_expression
675675
(member_expression (identifier) (property_identifier))
676-
(arguments (number) (string)))))
676+
(arguments (number) (string))))
677677
(expression_statement (new_expression
678678
(identifier))))
679679

@@ -999,7 +999,7 @@ typeof a == b && c instanceof d
999999
(expression_statement (binary_expression
10001000
(binary_expression
10011001
(identifier)
1002-
(new_expression (call_expression (identifier) (arguments (identifier)))))
1002+
(new_expression (identifier) (arguments (identifier))))
10031003
(identifier)))
10041004
(expression_statement (binary_expression
10051005
(binary_expression

corpus/semicolon_insertion.txt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -188,15 +188,15 @@ var a = new A()
188188
(program
189189
(variable_declaration (variable_declarator
190190
(identifier)
191-
(new_expression (call_expression
191+
(call_expression
192192
(member_expression
193193
(call_expression
194194
(member_expression
195-
(call_expression (identifier) (arguments))
195+
(new_expression (identifier) (arguments))
196196
(property_identifier))
197197
(arguments (object (pair (property_identifier) (string)))))
198198
(property_identifier))
199-
(arguments))))))
199+
(arguments)))))
200200

201201
==============================================
202202
if/for/while/do statements without semicolons
@@ -280,4 +280,4 @@ let d
280280
(comment)
281281
(comment)
282282
(comment)
283-
(lexical_declaration (variable_declarator (identifier))))
283+
(lexical_declaration (variable_declarator (identifier))))

corpus/statements.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -512,7 +512,7 @@ throw new Error("uh oh");
512512

513513
(program
514514
(throw_statement
515-
(new_expression (call_expression (identifier) (arguments (string))))))
515+
(new_expression (identifier) (arguments (string)))))
516516

517517
============================================
518518
Throw statements with sequence expressions

grammar.js

Lines changed: 41 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,8 @@ const PREC = {
1818
NOT: 8,
1919
NEG: 9,
2020
INC: 10,
21-
NEW: 11,
22-
CALL: 12,
21+
CALL: 11,
22+
NEW: 12,
2323
MEMBER: 13
2424
};
2525

@@ -37,6 +37,7 @@ module.exports = grammar({
3737
],
3838

3939
inline: $ => [
40+
$._constructable_expression,
4041
$._statement,
4142
$._expressions,
4243
$._semicolon,
@@ -57,6 +58,7 @@ module.exports = grammar({
5758
[$._expression, $.arrow_function],
5859
[$._expression, $.method_definition],
5960
[$._expression, $.formal_parameters],
61+
[$._expression, $.rest_parameter],
6062
[$.labeled_statement, $._property_name],
6163
[$.assignment_pattern, $.assignment_expression],
6264
[$.computed_property_name, $.array],
@@ -386,15 +388,9 @@ module.exports = grammar({
386388
),
387389

388390
_expression: $ => choice(
389-
$.object,
390-
$.array,
391+
$._constructable_expression,
391392
$._jsx_element,
392393
$.jsx_fragment,
393-
$.class,
394-
$.anonymous_class,
395-
$.function,
396-
$.arrow_function,
397-
$.generator_function,
398394

399395
$.assignment_expression,
400396
$.augmented_assignment_expression,
@@ -404,23 +400,7 @@ module.exports = grammar({
404400
$.ternary_expression,
405401
$.update_expression,
406402
$.call_expression,
407-
$.member_expression,
408-
$.new_expression,
409-
$.parenthesized_expression,
410-
$.subscript_expression,
411403
$.yield_expression,
412-
$.this,
413-
414-
$.number,
415-
$.string,
416-
$.template_string,
417-
$.regex,
418-
$.true,
419-
$.false,
420-
$.null,
421-
$.undefined,
422-
$.identifier,
423-
alias($._reserved_identifier, $.identifier)
424404
),
425405

426406
yield_expression: $ => prec.right(seq(
@@ -586,11 +566,43 @@ module.exports = grammar({
586566
choice($.arguments, $.template_string)
587567
)),
588568

589-
new_expression: $ => prec(PREC.NEW, seq(
569+
new_expression: $ => prec.right(PREC.NEW, seq(
590570
'new',
591-
$._expression
571+
572+
$._constructable_expression,
573+
574+
optional($.arguments)
592575
)),
593576

577+
_constructable_expression: $ => choice(
578+
// Primary Expression
579+
$.this,
580+
$.identifier,
581+
alias($._reserved_identifier, $.identifier),
582+
$.number,
583+
$.string,
584+
$.template_string,
585+
$.regex,
586+
$.true,
587+
$.false,
588+
$.null,
589+
$.undefined,
590+
$.object,
591+
$.array,
592+
$.function,
593+
$.arrow_function,
594+
$.generator_function,
595+
$.class,
596+
$.anonymous_class,
597+
$.parenthesized_expression,
598+
599+
$.subscript_expression,
600+
$.member_expression,
601+
$.meta_property,
602+
$.new_expression,
603+
),
604+
605+
594606
await_expression: $ => seq(
595607
'await',
596608
$._expression
@@ -830,6 +842,8 @@ module.exports = grammar({
830842
return token(seq(alpha, repeat(alpha_numeric)))
831843
},
832844

845+
meta_property: $ => seq('new', '.', 'target'),
846+
833847
this: $ => 'this',
834848
super: $ => 'super',
835849
true: $ => 'true',

0 commit comments

Comments
 (0)