JsModule {
bom_token: missing (optional),
interpreter_token: missing (optional),
directives: JsDirectiveList [],
items: JsModuleItemList [
JsBogusStatement {
items: [
JsDecoratorList [],
CLASS_KW@0..6 "class" [] [Whitespace(" ")],
JsIdentifierBinding {
name_token: IDENT@6..8 "A" [] [Whitespace(" ")],
},
JsExtendsClause {
extends_token: EXTENDS_KW@8..16 "extends" [] [Whitespace(" ")],
super_class: JsIdentifierExpression {
name: JsReferenceIdentifier {
value_token: IDENT@16..20 "bar" [] [Whitespace(" ")],
},
},
type_arguments: missing (optional),
},
JsExtendsClause {
extends_token: EXTENDS_KW@20..28 "extends" [] [Whitespace(" ")],
super_class: JsIdentifierExpression {
name: JsReferenceIdentifier {
value_token: IDENT@28..32 "foo" [] [Whitespace(" ")],
},
},
type_arguments: missing (optional),
},
L_CURLY@32..33 "{" [] [],
JsClassMemberList [],
R_CURLY@33..34 "}" [] [],
],
},
JsBogusStatement {
items: [
JsDecoratorList [],
CLASS_KW@34..41 "class" [Newline("\n")] [Whitespace(" ")],
JsIdentifierBinding {
name_token: IDENT@41..43 "B" [] [Whitespace(" ")],
},
JsBogus {
items: [
EXTENDS_KW@43..51 "extends" [] [Whitespace(" ")],
JsIdentifierExpression {
name: JsReferenceIdentifier {
value_token: IDENT@51..54 "bar" [] [],
},
},
COMMA@54..56 "," [] [Whitespace(" ")],
JsBogus {
items: [
JsIdentifierExpression {
name: JsReferenceIdentifier {
value_token: IDENT@56..60 "foo" [] [Whitespace(" ")],
},
},
],
},
],
},
L_CURLY@60..61 "{" [] [],
JsClassMemberList [],
R_CURLY@61..62 "}" [] [],
],
},
JsBogusStatement {
items: [
JsDecoratorList [],
CLASS_KW@62..69 "class" [Newline("\n")] [Whitespace(" ")],
JsIdentifierBinding {
name_token: IDENT@69..71 "C" [] [Whitespace(" ")],
},
JsBogus {
items: [
IMPLEMENTS_KW@71..82 "implements" [] [Whitespace(" ")],
TsTypeList [
TsNameWithTypeArguments {
name: JsReferenceIdentifier {
value_token: IDENT@82..84 "B" [] [Whitespace(" ")],
},
type_arguments: missing (optional),
},
],
],
},
L_CURLY@84..85 "{" [] [],
JsClassMemberList [],
R_CURLY@85..86 "}" [] [],
],
},
],
eof_token: EOF@86..87 "" [Newline("\n")] [],
}
0: JS_MODULE@0..87
0: (empty)
1: (empty)
2: JS_DIRECTIVE_LIST@0..0
3: JS_MODULE_ITEM_LIST@0..86
0: JS_BOGUS_STATEMENT@0..34
0: JS_DECORATOR_LIST@0..0
1: CLASS_KW@0..6 "class" [] [Whitespace(" ")]
2: JS_IDENTIFIER_BINDING@6..8
0: IDENT@6..8 "A" [] [Whitespace(" ")]
3: JS_EXTENDS_CLAUSE@8..20
0: EXTENDS_KW@8..16 "extends" [] [Whitespace(" ")]
1: JS_IDENTIFIER_EXPRESSION@16..20
0: JS_REFERENCE_IDENTIFIER@16..20
0: IDENT@16..20 "bar" [] [Whitespace(" ")]
2: (empty)
4: JS_EXTENDS_CLAUSE@20..32
0: EXTENDS_KW@20..28 "extends" [] [Whitespace(" ")]
1: JS_IDENTIFIER_EXPRESSION@28..32
0: JS_REFERENCE_IDENTIFIER@28..32
0: IDENT@28..32 "foo" [] [Whitespace(" ")]
2: (empty)
5: L_CURLY@32..33 "{" [] []
6: JS_CLASS_MEMBER_LIST@33..33
7: R_CURLY@33..34 "}" [] []
1: JS_BOGUS_STATEMENT@34..62
0: JS_DECORATOR_LIST@34..34
1: CLASS_KW@34..41 "class" [Newline("\n")] [Whitespace(" ")]
2: JS_IDENTIFIER_BINDING@41..43
0: IDENT@41..43 "B" [] [Whitespace(" ")]
3: JS_BOGUS@43..60
0: EXTENDS_KW@43..51 "extends" [] [Whitespace(" ")]
1: JS_IDENTIFIER_EXPRESSION@51..54
0: JS_REFERENCE_IDENTIFIER@51..54
0: IDENT@51..54 "bar" [] []
2: COMMA@54..56 "," [] [Whitespace(" ")]
3: JS_BOGUS@56..60
0: JS_IDENTIFIER_EXPRESSION@56..60
0: JS_REFERENCE_IDENTIFIER@56..60
0: IDENT@56..60 "foo" [] [Whitespace(" ")]
4: L_CURLY@60..61 "{" [] []
5: JS_CLASS_MEMBER_LIST@61..61
6: R_CURLY@61..62 "}" [] []
2: JS_BOGUS_STATEMENT@62..86
0: JS_DECORATOR_LIST@62..62
1: CLASS_KW@62..69 "class" [Newline("\n")] [Whitespace(" ")]
2: JS_IDENTIFIER_BINDING@69..71
0: IDENT@69..71 "C" [] [Whitespace(" ")]
3: JS_BOGUS@71..84
0: IMPLEMENTS_KW@71..82 "implements" [] [Whitespace(" ")]
1: TS_TYPE_LIST@82..84
0: TS_NAME_WITH_TYPE_ARGUMENTS@82..84
0: JS_REFERENCE_IDENTIFIER@82..84
0: IDENT@82..84 "B" [] [Whitespace(" ")]
1: (empty)
4: L_CURLY@84..85 "{" [] []
5: JS_CLASS_MEMBER_LIST@85..85
6: R_CURLY@85..86 "}" [] []
4: EOF@86..87 "" [Newline("\n")] []
--
class_extends_err.js:1:21 parse ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
× 'extends' clause already seen.
> 1 │ class A extends bar extends foo {}
│ ^^^^^^^^^^^
2 │ class B extends bar, foo {}
3 │ class C implements B {}
i first 'extends' clause
> 1 │ class A extends bar extends foo {}
│ ^^^^^^^^^^^
2 │ class B extends bar, foo {}
3 │ class C implements B {}
--
class_extends_err.js:2:22 parse ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
× Classes can only extend a single class.
1 │ class A extends bar extends foo {}
> 2 │ class B extends bar, foo {}
│ ^^^
3 │ class C implements B {}
4 │
--
class_extends_err.js:3:9 parse ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
× classes can only implement interfaces in TypeScript files
1 │ class A extends bar extends foo {}
2 │ class B extends bar, foo {}
> 3 │ class C implements B {}
│ ^^^^^^^^^^^^
4 │
--
class A extends bar extends foo {}
class B extends bar, foo {}
class C implements B {}