Skip to content

Commit

Permalink
fix(es/parser): Adjust context while parsing type arguments of TypeSc…
Browse files Browse the repository at this point in the history
…ript type queries (#7582)

**Related issue:**

 - Closes #7580.
  • Loading branch information
kdy1 committed Jun 26, 2023
1 parent fcd650c commit 9d5dda1
Show file tree
Hide file tree
Showing 3 changed files with 239 additions and 1 deletion.
6 changes: 5 additions & 1 deletion crates/swc_ecma_parser/src/parser/typescript.rs
Original file line number Diff line number Diff line change
Expand Up @@ -361,7 +361,11 @@ impl<I: Tokens> Parser<I> {
};

let type_args = if !self.input.had_line_break_before_cur() && is!(self, '<') {
Some(self.parse_ts_type_args()?)
let ctx = Context {
should_not_lex_lt_or_gt_as_type: false,
..self.ctx()
};
Some(self.with_ctx(ctx).parse_ts_type_args()?)
} else {
None
};
Expand Down
5 changes: 5 additions & 0 deletions crates/swc_ecma_parser/tests/typescript/issue-7580/input.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
const example = () => {
return {
func: callback<typeof something<Type1, Type2>>(options => null)
};
};
229 changes: 229 additions & 0 deletions crates/swc_ecma_parser/tests/typescript/issue-7580/input.tsx.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,229 @@
{
"type": "Script",
"span": {
"start": 1,
"end": 119,
"ctxt": 0
},
"body": [
{
"type": "VariableDeclaration",
"span": {
"start": 1,
"end": 119,
"ctxt": 0
},
"kind": "const",
"declare": false,
"declarations": [
{
"type": "VariableDeclarator",
"span": {
"start": 7,
"end": 118,
"ctxt": 0
},
"id": {
"type": "Identifier",
"span": {
"start": 7,
"end": 14,
"ctxt": 0
},
"value": "example",
"optional": false,
"typeAnnotation": null
},
"init": {
"type": "ArrowFunctionExpression",
"span": {
"start": 17,
"end": 118,
"ctxt": 0
},
"params": [],
"body": {
"type": "BlockStatement",
"span": {
"start": 23,
"end": 118,
"ctxt": 0
},
"stmts": [
{
"type": "ReturnStatement",
"span": {
"start": 29,
"end": 114,
"ctxt": 0
},
"argument": {
"type": "ObjectExpression",
"span": {
"start": 36,
"end": 113,
"ctxt": 0
},
"properties": [
{
"type": "KeyValueProperty",
"key": {
"type": "Identifier",
"span": {
"start": 44,
"end": 48,
"ctxt": 0
},
"value": "func",
"optional": false
},
"value": {
"type": "CallExpression",
"span": {
"start": 50,
"end": 107,
"ctxt": 0
},
"callee": {
"type": "Identifier",
"span": {
"start": 50,
"end": 58,
"ctxt": 0
},
"value": "callback",
"optional": false
},
"arguments": [
{
"spread": null,
"expression": {
"type": "ArrowFunctionExpression",
"span": {
"start": 91,
"end": 106,
"ctxt": 0
},
"params": [
{
"type": "Identifier",
"span": {
"start": 91,
"end": 98,
"ctxt": 0
},
"value": "options",
"optional": false,
"typeAnnotation": null
}
],
"body": {
"type": "NullLiteral",
"span": {
"start": 102,
"end": 106,
"ctxt": 0
}
},
"async": false,
"generator": false,
"typeParameters": null,
"returnType": null
}
}
],
"typeArguments": {
"type": "TsTypeParameterInstantiation",
"span": {
"start": 58,
"end": 90,
"ctxt": 0
},
"params": [
{
"type": "TsTypeQuery",
"span": {
"start": 59,
"end": 89,
"ctxt": 0
},
"exprName": {
"type": "Identifier",
"span": {
"start": 66,
"end": 75,
"ctxt": 0
},
"value": "something",
"optional": false
},
"typeArguments": {
"type": "TsTypeParameterInstantiation",
"span": {
"start": 75,
"end": 89,
"ctxt": 0
},
"params": [
{
"type": "TsTypeReference",
"span": {
"start": 76,
"end": 81,
"ctxt": 0
},
"typeName": {
"type": "Identifier",
"span": {
"start": 76,
"end": 81,
"ctxt": 0
},
"value": "Type1",
"optional": false
},
"typeParams": null
},
{
"type": "TsTypeReference",
"span": {
"start": 83,
"end": 88,
"ctxt": 0
},
"typeName": {
"type": "Identifier",
"span": {
"start": 83,
"end": 88,
"ctxt": 0
},
"value": "Type2",
"optional": false
},
"typeParams": null
}
]
}
}
]
}
}
}
]
}
}
]
},
"async": false,
"generator": false,
"typeParameters": null,
"returnType": null
},
"definite": false
}
]
}
],
"interpreter": null
}

1 comment on commit 9d5dda1

@github-actions
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Benchmark

Benchmark suite Current: 9d5dda1 Previous: ab7b17c Ratio
es/full/bugs-1 308863 ns/iter (± 6912) 301869 ns/iter (± 2263) 1.02
es/full/minify/libraries/antd 1475692302 ns/iter (± 25623340) 1494960646 ns/iter (± 37692626) 0.99
es/full/minify/libraries/d3 319296450 ns/iter (± 4521675) 314401510 ns/iter (± 1722406) 1.02
es/full/minify/libraries/echarts 1193296347 ns/iter (± 17382712) 1198633649 ns/iter (± 20227071) 1.00
es/full/minify/libraries/jquery 95289533 ns/iter (± 299445) 95059428 ns/iter (± 1252894) 1.00
es/full/minify/libraries/lodash 113436439 ns/iter (± 493861) 112853315 ns/iter (± 1035821) 1.01
es/full/minify/libraries/moment 56061465 ns/iter (± 147943) 55727326 ns/iter (± 242310) 1.01
es/full/minify/libraries/react 20111498 ns/iter (± 22224) 20002992 ns/iter (± 49248) 1.01
es/full/minify/libraries/terser 247201297 ns/iter (± 2327112) 247522012 ns/iter (± 3350955) 1.00
es/full/minify/libraries/three 438426730 ns/iter (± 11259811) 443275624 ns/iter (± 7830551) 0.99
es/full/minify/libraries/typescript 3019284460 ns/iter (± 37988819) 2980433299 ns/iter (± 36449860) 1.01
es/full/minify/libraries/victory 656060774 ns/iter (± 7739494) 645059214 ns/iter (± 19802358) 1.02
es/full/minify/libraries/vue 138583621 ns/iter (± 1431198) 139130484 ns/iter (± 2705629) 1.00
es/full/codegen/es3 37341 ns/iter (± 52) 37183 ns/iter (± 114) 1.00
es/full/codegen/es5 37305 ns/iter (± 61) 37140 ns/iter (± 97) 1.00
es/full/codegen/es2015 37203 ns/iter (± 63) 37135 ns/iter (± 65) 1.00
es/full/codegen/es2016 37315 ns/iter (± 73) 37104 ns/iter (± 62) 1.01
es/full/codegen/es2017 37263 ns/iter (± 73) 37111 ns/iter (± 66) 1.00
es/full/codegen/es2018 37293 ns/iter (± 84) 37143 ns/iter (± 106) 1.00
es/full/codegen/es2019 37299 ns/iter (± 109) 37156 ns/iter (± 61) 1.00
es/full/codegen/es2020 37284 ns/iter (± 46) 37131 ns/iter (± 109) 1.00
es/full/all/es3 179792081 ns/iter (± 869664) 178692587 ns/iter (± 1506349) 1.01
es/full/all/es5 171806579 ns/iter (± 1554046) 170918901 ns/iter (± 1218719) 1.01
es/full/all/es2015 127488757 ns/iter (± 538459) 127471209 ns/iter (± 685222) 1.00
es/full/all/es2016 127102643 ns/iter (± 780297) 126284072 ns/iter (± 758335) 1.01
es/full/all/es2017 126259163 ns/iter (± 562203) 126030613 ns/iter (± 527115) 1.00
es/full/all/es2018 124088892 ns/iter (± 506029) 123888354 ns/iter (± 877073) 1.00
es/full/all/es2019 123634339 ns/iter (± 506801) 122962961 ns/iter (± 1070751) 1.01
es/full/all/es2020 118539342 ns/iter (± 635187) 118316606 ns/iter (± 492015) 1.00
es/full/parser 514549 ns/iter (± 5411) 504171 ns/iter (± 6282) 1.02
es/full/base/fixer 18784 ns/iter (± 205) 18486 ns/iter (± 95) 1.02
es/full/base/resolver_and_hygiene 94927 ns/iter (± 311) 92576 ns/iter (± 190) 1.03
serialization of serde 301 ns/iter (± 0) 301 ns/iter (± 0) 1
css/minify/libraries/bootstrap 31297145 ns/iter (± 282495) 30913695 ns/iter (± 193347) 1.01
css/visitor/compare/clone 1942842 ns/iter (± 11500) 2165557 ns/iter (± 12343) 0.90
css/visitor/compare/visit_mut_span 2060082 ns/iter (± 14753) 2299636 ns/iter (± 9197) 0.90
css/visitor/compare/visit_mut_span_panic 2138687 ns/iter (± 13331) 2375462 ns/iter (± 8020) 0.90
css/visitor/compare/fold_span 2826169 ns/iter (± 11621) 3067915 ns/iter (± 12572) 0.92
css/visitor/compare/fold_span_panic 3022190 ns/iter (± 13011) 3280533 ns/iter (± 28558) 0.92
css/lexer/bootstrap_5_1_3 4809602 ns/iter (± 4169) 4699434 ns/iter (± 6915) 1.02
css/lexer/foundation_6_7_4 4047562 ns/iter (± 1865) 3978329 ns/iter (± 5171) 1.02
css/lexer/tailwind_3_1_1 772953 ns/iter (± 470) 759640 ns/iter (± 1617) 1.02
css/parser/bootstrap_5_1_3 20435096 ns/iter (± 98043) 20530556 ns/iter (± 34447) 1.00
css/parser/foundation_6_7_4 16474452 ns/iter (± 33905) 16526508 ns/iter (± 50098) 1.00
css/parser/tailwind_3_1_1 3198893 ns/iter (± 5870) 3186893 ns/iter (± 5199) 1.00
es/codegen/colors 743051 ns/iter (± 403325) 740541 ns/iter (± 405229) 1.00
es/codegen/large 2978990 ns/iter (± 1570143) 2989954 ns/iter (± 1557080) 1.00
es/codegen/with-parser/colors 48512 ns/iter (± 271) 49393 ns/iter (± 294) 0.98
es/codegen/with-parser/large 516151 ns/iter (± 669) 517241 ns/iter (± 1085) 1.00
es/minify/libraries/antd 1314259791 ns/iter (± 18132869) 1351127040 ns/iter (± 24190387) 0.97
es/minify/libraries/d3 285889358 ns/iter (± 4391454) 284426796 ns/iter (± 6254619) 1.01
es/minify/libraries/echarts 1051602666 ns/iter (± 9309362) 1045733878 ns/iter (± 8637052) 1.01
es/minify/libraries/jquery 84761849 ns/iter (± 726229) 84443598 ns/iter (± 778954) 1.00
es/minify/libraries/lodash 103265103 ns/iter (± 290834) 103323997 ns/iter (± 291595) 1.00
es/minify/libraries/moment 49701799 ns/iter (± 102602) 49656693 ns/iter (± 261941) 1.00
es/minify/libraries/react 18179800 ns/iter (± 63918) 18151701 ns/iter (± 92558) 1.00
es/minify/libraries/terser 214756123 ns/iter (± 710463) 215468126 ns/iter (± 1415660) 1.00
es/minify/libraries/three 376778806 ns/iter (± 8319557) 375572310 ns/iter (± 8587280) 1.00
es/minify/libraries/typescript 2612213225 ns/iter (± 27797137) 2604474428 ns/iter (± 27945578) 1.00
es/minify/libraries/victory 555253989 ns/iter (± 4618649) 562121588 ns/iter (± 7571808) 0.99
es/minify/libraries/vue 124545213 ns/iter (± 632055) 125500795 ns/iter (± 1092926) 0.99
es/visitor/compare/clone 2070451 ns/iter (± 9381) 2075229 ns/iter (± 6152) 1.00
es/visitor/compare/visit_mut_span 2393444 ns/iter (± 2312) 2403968 ns/iter (± 2959) 1.00
es/visitor/compare/visit_mut_span_panic 2457445 ns/iter (± 6411) 2461563 ns/iter (± 3733) 1.00
es/visitor/compare/fold_span 3480824 ns/iter (± 3972) 3535190 ns/iter (± 43752) 0.98
es/visitor/compare/fold_span_panic 3622180 ns/iter (± 6197) 3603859 ns/iter (± 15671) 1.01
es/lexer/colors 13085 ns/iter (± 31) 13209 ns/iter (± 12) 0.99
es/lexer/angular 6239744 ns/iter (± 20677) 6291139 ns/iter (± 20296) 0.99
es/lexer/backbone 821309 ns/iter (± 2791) 819910 ns/iter (± 465) 1.00
es/lexer/jquery 4619996 ns/iter (± 2955) 4636649 ns/iter (± 8171) 1.00
es/lexer/jquery mobile 7057622 ns/iter (± 23248) 7110193 ns/iter (± 7596) 0.99
es/lexer/mootools 3619671 ns/iter (± 1434) 3653725 ns/iter (± 1202) 0.99
es/lexer/underscore 677725 ns/iter (± 2810) 688436 ns/iter (± 451) 0.98
es/lexer/three 21535632 ns/iter (± 39165) 21643880 ns/iter (± 53802) 0.99
es/lexer/yui 4060189 ns/iter (± 2262) 4098642 ns/iter (± 13096) 0.99
es/parser/colors 29102 ns/iter (± 58) 28612 ns/iter (± 48) 1.02
es/parser/angular 14242200 ns/iter (± 138516) 14416036 ns/iter (± 240633) 0.99
es/parser/backbone 2116541 ns/iter (± 10068) 2126423 ns/iter (± 14266) 1.00
es/parser/jquery 11551697 ns/iter (± 51433) 11597193 ns/iter (± 62853) 1.00
es/parser/jquery mobile 17708029 ns/iter (± 61183) 17908313 ns/iter (± 327037) 0.99
es/parser/mootools 8813210 ns/iter (± 19632) 8886367 ns/iter (± 29833) 0.99
es/parser/underscore 1822634 ns/iter (± 21173) 1833494 ns/iter (± 10346) 0.99
es/parser/three 49195553 ns/iter (± 294981) 50334634 ns/iter (± 779819) 0.98
es/parser/yui 8906517 ns/iter (± 26843) 8904352 ns/iter (± 33663) 1.00
es/preset-env/usage/builtin_type 144577 ns/iter (± 33219) 144513 ns/iter (± 33466) 1.00
es/preset-env/usage/property 18515 ns/iter (± 63) 19000 ns/iter (± 86) 0.97
es/resolver/typescript 97049789 ns/iter (± 1226009) 96595672 ns/iter (± 1967273) 1.00
es/fixer/typescript 67564417 ns/iter (± 1275464) 67487689 ns/iter (± 868520) 1.00
es/hygiene/typescript 144208687 ns/iter (± 2376305) 144284787 ns/iter (± 2544496) 1.00
es/resolver_with_hygiene/typescript 306531284 ns/iter (± 3063980) 305667551 ns/iter (± 5074585) 1.00
es/visitor/base-perf/module_clone 61235 ns/iter (± 387) 61870 ns/iter (± 300) 0.99
es/visitor/base-perf/fold_empty 64609 ns/iter (± 250) 65063 ns/iter (± 207) 0.99
es/visitor/base-perf/fold_noop_impl_all 65016 ns/iter (± 451) 65393 ns/iter (± 353) 0.99
es/visitor/base-perf/fold_noop_impl_vec 65132 ns/iter (± 223) 65696 ns/iter (± 385) 0.99
es/visitor/base-perf/boxing_boxed_clone 58 ns/iter (± 0) 56 ns/iter (± 0) 1.04
es/visitor/base-perf/boxing_unboxed_clone 40 ns/iter (± 0) 40 ns/iter (± 0) 1
es/visitor/base-perf/boxing_boxed 113 ns/iter (± 0) 117 ns/iter (± 0) 0.97
es/visitor/base-perf/boxing_unboxed 80 ns/iter (± 0) 83 ns/iter (± 0) 0.96
es/visitor/base-perf/visit_empty 0 ns/iter (± 0) 0 ns/iter (± 0) NaN
es/visitor/base-perf/visit_contains_this 2691 ns/iter (± 20) 2628 ns/iter (± 11) 1.02
es/base/parallel/resolver/typescript 4644273250 ns/iter (± 314003879) 4413314902 ns/iter (± 275822967) 1.05
es/base/parallel/hygiene/typescript 1589372015 ns/iter (± 11462369) 1579742945 ns/iter (± 15643867) 1.01
misc/visitors/time-complexity/time 5 104 ns/iter (± 2) 103 ns/iter (± 2) 1.01
misc/visitors/time-complexity/time 10 267 ns/iter (± 0) 267 ns/iter (± 0) 1
misc/visitors/time-complexity/time 15 594 ns/iter (± 31) 516 ns/iter (± 10) 1.15
misc/visitors/time-complexity/time 20 900 ns/iter (± 3) 905 ns/iter (± 3) 0.99
misc/visitors/time-complexity/time 40 3564 ns/iter (± 13) 3567 ns/iter (± 15) 1.00
misc/visitors/time-complexity/time 60 7394 ns/iter (± 11) 7473 ns/iter (± 15) 0.99
es/full-target/es2016 242561 ns/iter (± 823) 241887 ns/iter (± 1331) 1.00
es/full-target/es2017 227147 ns/iter (± 1609) 229015 ns/iter (± 967) 0.99
es/full-target/es2018 216543 ns/iter (± 642) 215832 ns/iter (± 617) 1.00
es2020_nullish_coalescing 71953 ns/iter (± 423) 71949 ns/iter (± 223) 1.00
es2020_optional_chaining 83812 ns/iter (± 184) 83412 ns/iter (± 277) 1.00
es2022_class_properties 122755 ns/iter (± 307) 124277 ns/iter (± 308) 0.99
es2018_object_rest_spread 75007 ns/iter (± 307) 74593 ns/iter (± 313) 1.01
es2019_optional_catch_binding 64961 ns/iter (± 205) 65077 ns/iter (± 261) 1.00
es2017_async_to_generator 65398 ns/iter (± 161) 65277 ns/iter (± 200) 1.00
es2016_exponentiation 69894 ns/iter (± 333) 69637 ns/iter (± 204) 1.00
es2015_arrow 72880 ns/iter (± 251) 73327 ns/iter (± 186) 0.99
es2015_block_scoped_fn 70706 ns/iter (± 215) 70353 ns/iter (± 279) 1.01
es2015_block_scoping 132295 ns/iter (± 449) 134836 ns/iter (± 653) 0.98

This comment was automatically generated by workflow using github-action-benchmark.

Please sign in to comment.