JsModule {
bom_token: missing (optional),
interpreter_token: missing (optional),
directives: JsDirectiveList [],
items: JsModuleItemList [
JsFunctionDeclaration {
async_token: missing (optional),
function_token: FUNCTION_KW@0..9 "function" [] [Whitespace(" ")],
star_token: missing (optional),
id: JsIdentifierBinding {
name_token: IDENT@9..10 "f" [] [],
},
type_parameters: missing (optional),
parameters: JsParameters {
l_paren_token: L_PAREN@10..11 "(" [] [],
items: JsParameterList [],
r_paren_token: R_PAREN@11..13 ")" [] [Whitespace(" ")],
},
return_type_annotation: missing (optional),
body: JsFunctionBody {
l_curly_token: L_CURLY@13..14 "{" [] [],
directives: JsDirectiveList [],
statements: JsStatementList [
JsReturnStatement {
return_token: RETURN_KW@14..26 "return" [Newline("\n"), Whitespace(" ")] [Whitespace(" ")],
argument: JsxTagExpression {
tag: JsxElement {
opening_element: JsxOpeningElement {
l_angle_token: L_ANGLE@26..27 "<" [] [],
name: JsxName {
value_token: JSX_IDENT@27..31 "div" [] [Whitespace(" ")],
},
type_arguments: missing (optional),
attributes: JsxAttributeList [
JsxAttribute {
name: JsxName {
value_token: JSX_IDENT@31..45 "string_literal" [] [],
},
initializer: JsxAttributeInitializerClause {
eq_token: EQ@45..46 "=" [] [],
value: JsxString {
value_token: JSX_STRING_LITERAL@46..50 "\"a\"" [] [Whitespace(" ")],
},
},
},
JsxAttribute {
name: JsxName {
value_token: JSX_IDENT@50..60 "expression" [] [],
},
initializer: JsxAttributeInitializerClause {
eq_token: EQ@60..61 "=" [] [],
value: JsxExpressionAttributeValue {
l_curly_token: L_CURLY@61..62 "{" [] [],
expression: JsNumberLiteralExpression {
value_token: JS_NUMBER_LITERAL@62..63 "1" [] [],
},
r_curly_token: R_CURLY@63..65 "}" [] [Whitespace(" ")],
},
},
},
JsxAttribute {
name: JsxName {
value_token: JSX_IDENT@65..73 "novalue" [] [Whitespace(" ")],
},
initializer: missing (optional),
},
JsxAttribute {
name: JsxName {
value_token: JSX_IDENT@73..75 "el" [] [],
},
initializer: JsxAttributeInitializerClause {
eq_token: EQ@75..76 "=" [] [],
value: JsxSelfClosingElement {
l_angle_token: L_ANGLE@76..77 "<" [] [],
name: JsxName {
value_token: JSX_IDENT@77..78 "a" [] [],
},
type_arguments: missing (optional),
attributes: JsxAttributeList [],
slash_token: SLASH@78..79 "/" [] [],
r_angle_token: R_ANGLE@79..80 ">" [] [],
},
},
},
],
r_angle_token: R_ANGLE@80..81 ">" [] [],
},
children: JsxChildList [],
closing_element: JsxClosingElement {
l_angle_token: L_ANGLE@81..82 "<" [] [],
slash_token: SLASH@82..83 "/" [] [],
name: JsxName {
value_token: JSX_IDENT@83..86 "div" [] [],
},
r_angle_token: R_ANGLE@86..87 ">" [] [],
},
},
},
semicolon_token: SEMICOLON@87..88 ";" [] [],
},
],
r_curly_token: R_CURLY@88..90 "}" [Newline("\n")] [],
},
},
JsExpressionStatement {
expression: JsxTagExpression {
tag: JsxSelfClosingElement {
l_angle_token: L_ANGLE@90..92 "<" [Newline("\n")] [],
name: JsxName {
value_token: JSX_IDENT@92..96 "div" [] [Whitespace(" ")],
},
type_arguments: missing (optional),
attributes: JsxAttributeList [
JsxAttribute {
name: JsxName {
value_token: JSX_IDENT@96..107 "dashed-name" [] [],
},
initializer: JsxAttributeInitializerClause {
eq_token: EQ@107..108 "=" [] [],
value: JsxString {
value_token: JSX_STRING_LITERAL@108..115 "'test'" [] [Whitespace(" ")],
},
},
},
JsxAttribute {
name: JsxNamespaceName {
namespace: JsxName {
value_token: JSX_IDENT@115..118 "use" [] [],
},
colon_token: COLON@118..119 ":" [] [],
name: JsxName {
value_token: JSX_IDENT@119..127 "validate" [] [],
},
},
initializer: JsxAttributeInitializerClause {
eq_token: EQ@127..128 "=" [] [],
value: JsxString {
value_token: JSX_STRING_LITERAL@128..135 "\"abcd\"" [] [Whitespace(" ")],
},
},
},
],
slash_token: SLASH@135..136 "/" [] [],
r_angle_token: R_ANGLE@136..137 ">" [] [],
},
},
semicolon_token: SEMICOLON@137..138 ";" [] [],
},
JsExpressionStatement {
expression: JsxTagExpression {
tag: JsxSelfClosingElement {
l_angle_token: L_ANGLE@138..140 "<" [Newline("\n")] [],
name: JsxName {
value_token: JSX_IDENT@140..144 "div" [] [Whitespace(" ")],
},
type_arguments: missing (optional),
attributes: JsxAttributeList [
JsxAttribute {
name: JsxNamespaceName {
namespace: JsxName {
value_token: JSX_IDENT@144..165 "use-dashed_underscore" [] [],
},
colon_token: COLON@165..166 ":" [] [],
name: JsxName {
value_token: JSX_IDENT@166..174 "validate" [] [],
},
},
initializer: JsxAttributeInitializerClause {
eq_token: EQ@174..175 "=" [] [],
value: JsxString {
value_token: JSX_STRING_LITERAL@175..183 "\"ahaha\"" [] [Whitespace(" ")],
},
},
},
],
slash_token: SLASH@183..184 "/" [] [],
r_angle_token: R_ANGLE@184..185 ">" [] [],
},
},
semicolon_token: SEMICOLON@185..186 ";" [] [],
},
JsExpressionStatement {
expression: JsxTagExpression {
tag: JsxSelfClosingElement {
l_angle_token: L_ANGLE@186..188 "<" [Newline("\n")] [],
name: JsxName {
value_token: JSX_IDENT@188..192 "div" [] [Whitespace(" ")],
},
type_arguments: missing (optional),
attributes: JsxAttributeList [
JsxAttribute {
name: JsxName {
value_token: JSX_IDENT@192..208 "multiline-string" [] [],
},
initializer: JsxAttributeInitializerClause {
eq_token: EQ@208..209 "=" [] [],
value: JsxString {
value_token: JSX_STRING_LITERAL@209..233 "'test\n continues here'" [] [Whitespace(" ")],
},
},
},
],
slash_token: SLASH@233..234 "/" [] [],
r_angle_token: R_ANGLE@234..235 ">" [] [],
},
},
semicolon_token: SEMICOLON@235..236 ";" [] [],
},
JsExpressionStatement {
expression: JsxTagExpression {
tag: JsxSelfClosingElement {
l_angle_token: L_ANGLE@236..238 "<" [Newline("\n")] [],
name: JsxName {
value_token: JSX_IDENT@238..242 "div" [] [Whitespace(" ")],
},
type_arguments: missing (optional),
attributes: JsxAttributeList [
JsxAttribute {
name: JsxName {
value_token: JSX_IDENT@242..264 "invalid-unicode-escape" [] [],
},
initializer: JsxAttributeInitializerClause {
eq_token: EQ@264..265 "=" [] [],
value: JsxString {
value_token: JSX_STRING_LITERAL@265..282 "\"\\u10000\\u20000\"" [] [Whitespace(" ")],
},
},
},
],
slash_token: SLASH@282..283 "/" [] [],
r_angle_token: R_ANGLE@283..284 ">" [] [],
},
},
semicolon_token: SEMICOLON@284..285 ";" [] [],
},
],
eof_token: EOF@285..286 "" [Newline("\n")] [],
}
0: JS_MODULE@0..286
0: (empty)
1: (empty)
2: JS_DIRECTIVE_LIST@0..0
3: JS_MODULE_ITEM_LIST@0..285
0: JS_FUNCTION_DECLARATION@0..90
0: (empty)
1: FUNCTION_KW@0..9 "function" [] [Whitespace(" ")]
2: (empty)
3: JS_IDENTIFIER_BINDING@9..10
0: IDENT@9..10 "f" [] []
4: (empty)
5: JS_PARAMETERS@10..13
0: L_PAREN@10..11 "(" [] []
1: JS_PARAMETER_LIST@11..11
2: R_PAREN@11..13 ")" [] [Whitespace(" ")]
6: (empty)
7: JS_FUNCTION_BODY@13..90
0: L_CURLY@13..14 "{" [] []
1: JS_DIRECTIVE_LIST@14..14
2: JS_STATEMENT_LIST@14..88
0: JS_RETURN_STATEMENT@14..88
0: RETURN_KW@14..26 "return" [Newline("\n"), Whitespace(" ")] [Whitespace(" ")]
1: JSX_TAG_EXPRESSION@26..87
0: JSX_ELEMENT@26..87
0: JSX_OPENING_ELEMENT@26..81
0: L_ANGLE@26..27 "<" [] []
1: JSX_NAME@27..31
0: JSX_IDENT@27..31 "div" [] [Whitespace(" ")]
2: (empty)
3: JSX_ATTRIBUTE_LIST@31..80
0: JSX_ATTRIBUTE@31..50
0: JSX_NAME@31..45
0: JSX_IDENT@31..45 "string_literal" [] []
1: JSX_ATTRIBUTE_INITIALIZER_CLAUSE@45..50
0: EQ@45..46 "=" [] []
1: JSX_STRING@46..50
0: JSX_STRING_LITERAL@46..50 "\"a\"" [] [Whitespace(" ")]
1: JSX_ATTRIBUTE@50..65
0: JSX_NAME@50..60
0: JSX_IDENT@50..60 "expression" [] []
1: JSX_ATTRIBUTE_INITIALIZER_CLAUSE@60..65
0: EQ@60..61 "=" [] []
1: JSX_EXPRESSION_ATTRIBUTE_VALUE@61..65
0: L_CURLY@61..62 "{" [] []
1: JS_NUMBER_LITERAL_EXPRESSION@62..63
0: JS_NUMBER_LITERAL@62..63 "1" [] []
2: R_CURLY@63..65 "}" [] [Whitespace(" ")]
2: JSX_ATTRIBUTE@65..73
0: JSX_NAME@65..73
0: JSX_IDENT@65..73 "novalue" [] [Whitespace(" ")]
1: (empty)
3: JSX_ATTRIBUTE@73..80
0: JSX_NAME@73..75
0: JSX_IDENT@73..75 "el" [] []
1: JSX_ATTRIBUTE_INITIALIZER_CLAUSE@75..80
0: EQ@75..76 "=" [] []
1: JSX_SELF_CLOSING_ELEMENT@76..80
0: L_ANGLE@76..77 "<" [] []
1: JSX_NAME@77..78
0: JSX_IDENT@77..78 "a" [] []
2: (empty)
3: JSX_ATTRIBUTE_LIST@78..78
4: SLASH@78..79 "/" [] []
5: R_ANGLE@79..80 ">" [] []
4: R_ANGLE@80..81 ">" [] []
1: JSX_CHILD_LIST@81..81
2: JSX_CLOSING_ELEMENT@81..87
0: L_ANGLE@81..82 "<" [] []
1: SLASH@82..83 "/" [] []
2: JSX_NAME@83..86
0: JSX_IDENT@83..86 "div" [] []
3: R_ANGLE@86..87 ">" [] []
2: SEMICOLON@87..88 ";" [] []
3: R_CURLY@88..90 "}" [Newline("\n")] []
1: JS_EXPRESSION_STATEMENT@90..138
0: JSX_TAG_EXPRESSION@90..137
0: JSX_SELF_CLOSING_ELEMENT@90..137
0: L_ANGLE@90..92 "<" [Newline("\n")] []
1: JSX_NAME@92..96
0: JSX_IDENT@92..96 "div" [] [Whitespace(" ")]
2: (empty)
3: JSX_ATTRIBUTE_LIST@96..135
0: JSX_ATTRIBUTE@96..115
0: JSX_NAME@96..107
0: JSX_IDENT@96..107 "dashed-name" [] []
1: JSX_ATTRIBUTE_INITIALIZER_CLAUSE@107..115
0: EQ@107..108 "=" [] []
1: JSX_STRING@108..115
0: JSX_STRING_LITERAL@108..115 "'test'" [] [Whitespace(" ")]
1: JSX_ATTRIBUTE@115..135
0: JSX_NAMESPACE_NAME@115..127
0: JSX_NAME@115..118
0: JSX_IDENT@115..118 "use" [] []
1: COLON@118..119 ":" [] []
2: JSX_NAME@119..127
0: JSX_IDENT@119..127 "validate" [] []
1: JSX_ATTRIBUTE_INITIALIZER_CLAUSE@127..135
0: EQ@127..128 "=" [] []
1: JSX_STRING@128..135
0: JSX_STRING_LITERAL@128..135 "\"abcd\"" [] [Whitespace(" ")]
4: SLASH@135..136 "/" [] []
5: R_ANGLE@136..137 ">" [] []
1: SEMICOLON@137..138 ";" [] []
2: JS_EXPRESSION_STATEMENT@138..186
0: JSX_TAG_EXPRESSION@138..185
0: JSX_SELF_CLOSING_ELEMENT@138..185
0: L_ANGLE@138..140 "<" [Newline("\n")] []
1: JSX_NAME@140..144
0: JSX_IDENT@140..144 "div" [] [Whitespace(" ")]
2: (empty)
3: JSX_ATTRIBUTE_LIST@144..183
0: JSX_ATTRIBUTE@144..183
0: JSX_NAMESPACE_NAME@144..174
0: JSX_NAME@144..165
0: JSX_IDENT@144..165 "use-dashed_underscore" [] []
1: COLON@165..166 ":" [] []
2: JSX_NAME@166..174
0: JSX_IDENT@166..174 "validate" [] []
1: JSX_ATTRIBUTE_INITIALIZER_CLAUSE@174..183
0: EQ@174..175 "=" [] []
1: JSX_STRING@175..183
0: JSX_STRING_LITERAL@175..183 "\"ahaha\"" [] [Whitespace(" ")]
4: SLASH@183..184 "/" [] []
5: R_ANGLE@184..185 ">" [] []
1: SEMICOLON@185..186 ";" [] []
3: JS_EXPRESSION_STATEMENT@186..236
0: JSX_TAG_EXPRESSION@186..235
0: JSX_SELF_CLOSING_ELEMENT@186..235
0: L_ANGLE@186..188 "<" [Newline("\n")] []
1: JSX_NAME@188..192
0: JSX_IDENT@188..192 "div" [] [Whitespace(" ")]
2: (empty)
3: JSX_ATTRIBUTE_LIST@192..233
0: JSX_ATTRIBUTE@192..233
0: JSX_NAME@192..208
0: JSX_IDENT@192..208 "multiline-string" [] []
1: JSX_ATTRIBUTE_INITIALIZER_CLAUSE@208..233
0: EQ@208..209 "=" [] []
1: JSX_STRING@209..233
0: JSX_STRING_LITERAL@209..233 "'test\n continues here'" [] [Whitespace(" ")]
4: SLASH@233..234 "/" [] []
5: R_ANGLE@234..235 ">" [] []
1: SEMICOLON@235..236 ";" [] []
4: JS_EXPRESSION_STATEMENT@236..285
0: JSX_TAG_EXPRESSION@236..284
0: JSX_SELF_CLOSING_ELEMENT@236..284
0: L_ANGLE@236..238 "<" [Newline("\n")] []
1: JSX_NAME@238..242
0: JSX_IDENT@238..242 "div" [] [Whitespace(" ")]
2: (empty)
3: JSX_ATTRIBUTE_LIST@242..282
0: JSX_ATTRIBUTE@242..282
0: JSX_NAME@242..264
0: JSX_IDENT@242..264 "invalid-unicode-escape" [] []
1: JSX_ATTRIBUTE_INITIALIZER_CLAUSE@264..282
0: EQ@264..265 "=" [] []
1: JSX_STRING@265..282
0: JSX_STRING_LITERAL@265..282 "\"\\u10000\\u20000\"" [] [Whitespace(" ")]
4: SLASH@282..283 "/" [] []
5: R_ANGLE@283..284 ">" [] []
1: SEMICOLON@284..285 ";" [] []
4: EOF@285..286 "" [Newline("\n")] []