Skip to content

Commit cc54488

Browse files
committed
support more of the class syntax
1 parent d691a30 commit cc54488

File tree

3 files changed

+61
-4
lines changed

3 files changed

+61
-4
lines changed

common/corpus/declarations.txt

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -625,6 +625,60 @@ class Foo {
625625
(formal_parameters)
626626
(type_annotation (type_identifier))))))
627627

628+
=======================================
629+
Regression for issue 131
630+
=======================================
631+
632+
class A extends B<C>(D) implements C {}
633+
export class A extends B<C>(D) implements C {}
634+
635+
class A extends B<C>(D)<E> implements C {}
636+
export class A extends B<C>(D)<E> implements C {}
637+
638+
---
639+
640+
(program
641+
(class_declaration
642+
(type_identifier)
643+
(class_heritage
644+
(extends_clause
645+
(functional_extension
646+
(identifier)
647+
(call_type_arguments (type_identifier)) (arguments (identifier))))
648+
(implements_clause (type_identifier)))
649+
(class_body))
650+
(export_statement (class_declaration
651+
(type_identifier)
652+
(class_heritage
653+
(extends_clause (functional_extension
654+
(identifier)
655+
(call_type_arguments (type_identifier))
656+
(arguments (identifier))))
657+
(implements_clause (type_identifier)))
658+
(class_body)))
659+
(class_declaration
660+
(type_identifier)
661+
(class_heritage
662+
(extends_clause
663+
(functional_extension
664+
(identifier)
665+
(call_type_arguments (type_identifier))
666+
(arguments (identifier)))
667+
(type_arguments (type_identifier)))
668+
(implements_clause (type_identifier)))
669+
(class_body))
670+
(export_statement (class_declaration
671+
(type_identifier)
672+
(class_heritage
673+
(extends_clause
674+
(functional_extension
675+
(identifier)
676+
(call_type_arguments (type_identifier))
677+
(arguments (identifier)))
678+
(type_arguments (type_identifier)))
679+
(implements_clause (type_identifier)))
680+
(class_body))))
681+
628682
=======================================
629683
Classes with property names as strings or numbers
630684
=======================================

common/corpus/types.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -462,7 +462,7 @@ interface Enum extends Bar, Baz, funThatEvalsToInterface() {
462462
(extends_clause
463463
(type_identifier)
464464
(type_identifier)
465-
(call_expression (identifier) (arguments)))
465+
(functional_extension (identifier) (arguments)))
466466
(object_type
467467
(method_signature
468468
(accessibility_modifier)

common/define-grammar.js

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ const PREC = {
1212
PLUS: 4,
1313
REL: 5,
1414
TIMES: 6,
15-
EXTENDS: 7,
1615
NEG: 9,
1716
INC: 10,
1817
NON_NULL: 10,
@@ -24,7 +23,8 @@ const PREC = {
2423
TYPE_ASSERTION: 16,
2524
TYPE_REFERENCE: 16,
2625
CONSTRUCTOR_TYPE: 17,
27-
TYPEOF: 18
26+
TYPEOF: 18,
27+
EXTENDS: 18
2828
};
2929

3030
module.exports = function defineGrammar(dialect) {
@@ -404,13 +404,16 @@ module.exports = function defineGrammar(dialect) {
404404
field('body', $.object_type)
405405
),
406406

407+
functional_extension: $ => prec(PREC.EXTENDS, callExpression($, "function_like")),
408+
407409
extends_clause: $ => prec(PREC.EXTENDS, seq(
408410
'extends',
409411
commaSep1(choice(
410412
prec(PREC.TYPE_REFERENCE, choice(
411413
$._type_identifier,
412414
$.nested_type_identifier,
413-
$.generic_type
415+
$.generic_type,
416+
seq($.functional_extension, optional($.type_arguments))
414417
)),
415418
$._expression
416419
))

0 commit comments

Comments
 (0)