Skip to content

Commit 6c00a24

Browse files
authoredJun 12, 2023
feat(es/parser): Disallow tagged tpl in optional chaining (#7515)
1 parent b46bcf3 commit 6c00a24

File tree

4 files changed

+16
-0
lines changed

4 files changed

+16
-0
lines changed
 

‎crates/swc_ecma_parser/src/error.rs

+4
Original file line numberDiff line numberDiff line change
@@ -195,6 +195,7 @@ pub enum SyntaxError {
195195
TsBindingPatCannotBeOptional,
196196
SuperCallOptional,
197197
OptChainCannotFollowConstructorCall,
198+
TaggedTplInOptChain,
198199

199200
TrailingCommaInsideImport,
200201

@@ -470,6 +471,9 @@ impl SyntaxError {
470471
SyntaxError::OptChainCannotFollowConstructorCall => {
471472
"Constructor in/after an optional chaining is not allowed.".into()
472473
}
474+
SyntaxError::TaggedTplInOptChain => {
475+
"Tagged template literal is not allowed in optional chain.".into()
476+
}
473477
SyntaxError::TsInvalidParamPropPat => {
474478
"Typescript parameter property must be an identifier or assignment pattern".into()
475479
}

‎crates/swc_ecma_parser/src/parser/expr.rs

+5
Original file line numberDiff line numberDiff line change
@@ -1060,6 +1060,11 @@ impl<I: Tokens> Parser<I> {
10601060
let tpl = Box::new(self.parse_tpl(true)?);
10611061

10621062
let span = span!(self, tagged_tpl_start);
1063+
1064+
if tag.is_opt_chain() {
1065+
self.emit_err(span, SyntaxError::TaggedTplInOptChain);
1066+
}
1067+
10631068
Ok(TaggedTpl {
10641069
span,
10651070
tag,
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
a?.b``
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
2+
x Tagged template literal is not allowed in optional chain.
3+
,-[$DIR/tests/errors/optional-chaining/tagged-template.js:1:1]
4+
1 | a?.b``
5+
: ^^^^^^
6+
`----

2 commit comments

Comments
 (2)

github-actions[bot] commented on Jun 12, 2023

@github-actions[bot]

Benchmark

Benchmark suite Current: 6c00a24 Previous: cc4146c Ratio
es/full/bugs-1 398581 ns/iter (± 15929) 303955 ns/iter (± 2324) 1.31
es/full/minify/libraries/antd 2142108168 ns/iter (± 29665316) 1467484525 ns/iter (± 12067225) 1.46
es/full/minify/libraries/d3 447177726 ns/iter (± 6855658) 311934217 ns/iter (± 2279178) 1.43
es/full/minify/libraries/echarts 1664890862 ns/iter (± 17990697) 1201620404 ns/iter (± 14714019) 1.39
es/full/minify/libraries/jquery 126299575 ns/iter (± 2198206) 95044278 ns/iter (± 445442) 1.33
es/full/minify/libraries/lodash 152750950 ns/iter (± 1846538) 112583075 ns/iter (± 282096) 1.36
es/full/minify/libraries/moment 73920310 ns/iter (± 1652425) 55796479 ns/iter (± 184538) 1.32
es/full/minify/libraries/react 25990657 ns/iter (± 591904) 19913663 ns/iter (± 186646) 1.31
es/full/minify/libraries/terser 351236871 ns/iter (± 4031831) 250205455 ns/iter (± 2198087) 1.40
es/full/minify/libraries/three 634581840 ns/iter (± 8913857) 452430818 ns/iter (± 3223615) 1.40
es/full/minify/libraries/typescript 3973719438 ns/iter (± 17159903) 3009212200 ns/iter (± 35810181) 1.32
es/full/minify/libraries/victory 939441001 ns/iter (± 16709514) 643910043 ns/iter (± 6962487) 1.46
es/full/minify/libraries/vue 191111487 ns/iter (± 4173658) 135634063 ns/iter (± 332995) 1.41
es/full/codegen/es3 40861 ns/iter (± 885) 35988 ns/iter (± 246) 1.14
es/full/codegen/es5 40990 ns/iter (± 68) 36126 ns/iter (± 133) 1.13
es/full/codegen/es2015 40912 ns/iter (± 67) 36088 ns/iter (± 81) 1.13
es/full/codegen/es2016 40885 ns/iter (± 71) 35999 ns/iter (± 74) 1.14
es/full/codegen/es2017 41014 ns/iter (± 127) 36109 ns/iter (± 52) 1.14
es/full/codegen/es2018 40972 ns/iter (± 68) 35933 ns/iter (± 152) 1.14
es/full/codegen/es2019 40953 ns/iter (± 61) 36182 ns/iter (± 113) 1.13
es/full/codegen/es2020 40989 ns/iter (± 103) 36112 ns/iter (± 81) 1.14
es/full/all/es3 237589656 ns/iter (± 10398432) 180025541 ns/iter (± 926230) 1.32
es/full/all/es5 219999397 ns/iter (± 3149752) 169749805 ns/iter (± 594731) 1.30
es/full/all/es2015 170628123 ns/iter (± 3234706) 126510925 ns/iter (± 586634) 1.35
es/full/all/es2016 169637176 ns/iter (± 2578079) 125599591 ns/iter (± 462772) 1.35
es/full/all/es2017 170364619 ns/iter (± 3474528) 124701997 ns/iter (± 873902) 1.37
es/full/all/es2018 171321949 ns/iter (± 3610627) 122601797 ns/iter (± 454033) 1.40
es/full/all/es2019 171928047 ns/iter (± 3039658) 122285845 ns/iter (± 618755) 1.41
es/full/all/es2020 163588735 ns/iter (± 6990832) 116097408 ns/iter (± 635344) 1.41
es/full/parser 610306 ns/iter (± 15100) 514292 ns/iter (± 7108) 1.19
es/full/base/fixer 25391 ns/iter (± 58) 19248 ns/iter (± 84) 1.32
es/full/base/resolver_and_hygiene 104543 ns/iter (± 138) 95327 ns/iter (± 193) 1.10
serialization of serde 282 ns/iter (± 0) 313 ns/iter (± 2) 0.90
css/minify/libraries/bootstrap 39080392 ns/iter (± 77172) 30858437 ns/iter (± 121565) 1.27
css/visitor/compare/clone 2837698 ns/iter (± 31205) 2149619 ns/iter (± 10468) 1.32
css/visitor/compare/visit_mut_span 3081187 ns/iter (± 49999) 2276221 ns/iter (± 16431) 1.35
css/visitor/compare/visit_mut_span_panic 3091157 ns/iter (± 23221) 2350754 ns/iter (± 24420) 1.31
css/visitor/compare/fold_span 3968898 ns/iter (± 26525) 2997188 ns/iter (± 18103) 1.32
css/visitor/compare/fold_span_panic 4195673 ns/iter (± 35779) 3181430 ns/iter (± 37217) 1.32
css/lexer/bootstrap_5_1_3 5538785 ns/iter (± 36985) 4808768 ns/iter (± 11285) 1.15
css/lexer/foundation_6_7_4 4673445 ns/iter (± 6803) 4042674 ns/iter (± 4628) 1.16
css/lexer/tailwind_3_1_1 888213 ns/iter (± 872) 765232 ns/iter (± 793) 1.16
css/parser/bootstrap_5_1_3 25519134 ns/iter (± 188372) 20577245 ns/iter (± 84713) 1.24
css/parser/foundation_6_7_4 20271782 ns/iter (± 35594) 16541775 ns/iter (± 40042) 1.23
css/parser/tailwind_3_1_1 3739471 ns/iter (± 3914) 3185031 ns/iter (± 3527) 1.17
es/codegen/colors 704591 ns/iter (± 382954) 738784 ns/iter (± 400782) 0.95
es/codegen/large 3177909 ns/iter (± 1696096) 3110146 ns/iter (± 1641323) 1.02
es/codegen/with-parser/colors 57545 ns/iter (± 513) 48859 ns/iter (± 331) 1.18
es/codegen/with-parser/large 572112 ns/iter (± 1296) 504321 ns/iter (± 691) 1.13
es/minify/libraries/antd 1892848211 ns/iter (± 15801861) 1302678354 ns/iter (± 14998550) 1.45
es/minify/libraries/d3 403348364 ns/iter (± 5118303) 277902834 ns/iter (± 1178392) 1.45
es/minify/libraries/echarts 1467546324 ns/iter (± 12010002) 1047513178 ns/iter (± 7555550) 1.40
es/minify/libraries/jquery 112016315 ns/iter (± 1451088) 83333834 ns/iter (± 412914) 1.34
es/minify/libraries/lodash 140569162 ns/iter (± 3942944) 101865817 ns/iter (± 275935) 1.38
es/minify/libraries/moment 65051063 ns/iter (± 1354684) 49219606 ns/iter (± 97923) 1.32
es/minify/libraries/react 22971268 ns/iter (± 402922) 17943495 ns/iter (± 49027) 1.28
es/minify/libraries/terser 314350634 ns/iter (± 6376999) 211292198 ns/iter (± 1033950) 1.49
es/minify/libraries/three 557690258 ns/iter (± 13076551) 367812815 ns/iter (± 4047044) 1.52
es/minify/libraries/typescript 3491724683 ns/iter (± 30565166) 2574660922 ns/iter (± 13227312) 1.36
es/minify/libraries/victory 825696120 ns/iter (± 10598310) 570946996 ns/iter (± 14268620) 1.45
es/minify/libraries/vue 173416784 ns/iter (± 3125827) 122616641 ns/iter (± 451207) 1.41
es/visitor/compare/clone 2654325 ns/iter (± 32361) 2067940 ns/iter (± 16496) 1.28
es/visitor/compare/visit_mut_span 3099453 ns/iter (± 42492) 2407046 ns/iter (± 6919) 1.29
es/visitor/compare/visit_mut_span_panic 3174278 ns/iter (± 16608) 2444920 ns/iter (± 12299) 1.30
es/visitor/compare/fold_span 4518025 ns/iter (± 18586) 3486198 ns/iter (± 5068) 1.30
es/visitor/compare/fold_span_panic 4664097 ns/iter (± 32363) 3614200 ns/iter (± 5515) 1.29
es/lexer/colors 14854 ns/iter (± 37) 13521 ns/iter (± 44) 1.10
es/lexer/angular 6978732 ns/iter (± 4990) 6253368 ns/iter (± 21015) 1.12
es/lexer/backbone 847584 ns/iter (± 473) 835776 ns/iter (± 3141) 1.01
es/lexer/jquery 4783419 ns/iter (± 3008) 4650228 ns/iter (± 6084) 1.03
es/lexer/jquery mobile 7397735 ns/iter (± 7975) 7129219 ns/iter (± 13568) 1.04
es/lexer/mootools 3750137 ns/iter (± 3131) 3687183 ns/iter (± 7511) 1.02
es/lexer/underscore 704695 ns/iter (± 519) 693761 ns/iter (± 576) 1.02
es/lexer/three 22715493 ns/iter (± 28347) 21959742 ns/iter (± 31284) 1.03
es/lexer/yui 4305655 ns/iter (± 6837) 4141302 ns/iter (± 3176) 1.04
es/parser/colors 33058 ns/iter (± 86) 29295 ns/iter (± 76) 1.13
es/parser/angular 18997554 ns/iter (± 205033) 14734350 ns/iter (± 97307) 1.29
es/parser/backbone 2457567 ns/iter (± 15097) 2179528 ns/iter (± 7750) 1.13
es/parser/jquery 15105019 ns/iter (± 474599) 11891230 ns/iter (± 58421) 1.27
es/parser/jquery mobile 23413332 ns/iter (± 374815) 18009218 ns/iter (± 108989) 1.30
es/parser/mootools 10948577 ns/iter (± 79554) 9084464 ns/iter (± 30963) 1.21
es/parser/underscore 2087156 ns/iter (± 11930) 1884593 ns/iter (± 9354) 1.11
es/parser/three 65851264 ns/iter (± 197402) 50626049 ns/iter (± 313655) 1.30
es/parser/yui 11429948 ns/iter (± 254495) 9098435 ns/iter (± 26081) 1.26
es/preset-env/usage/builtin_type 151724 ns/iter (± 33561) 146647 ns/iter (± 32394) 1.03
es/preset-env/usage/property 28820 ns/iter (± 180) 20782 ns/iter (± 60) 1.39
es/resolver/typescript 139097550 ns/iter (± 3034563) 95208458 ns/iter (± 1831160) 1.46
es/fixer/typescript 95459844 ns/iter (± 4466635) 66892246 ns/iter (± 1387934) 1.43
es/hygiene/typescript 231851732 ns/iter (± 1904800) 143957777 ns/iter (± 576859) 1.61
es/resolver_with_hygiene/typescript 460516433 ns/iter (± 3135605) 307328859 ns/iter (± 2110042) 1.50
es/visitor/base-perf/module_clone 84375 ns/iter (± 569) 62379 ns/iter (± 299) 1.35
es/visitor/base-perf/fold_empty 93983 ns/iter (± 347) 65515 ns/iter (± 350) 1.43
es/visitor/base-perf/fold_noop_impl_all 93927 ns/iter (± 537) 65634 ns/iter (± 242) 1.43
es/visitor/base-perf/fold_noop_impl_vec 93929 ns/iter (± 411) 66487 ns/iter (± 345) 1.41
es/visitor/base-perf/boxing_boxed_clone 60 ns/iter (± 0) 57 ns/iter (± 0) 1.05
es/visitor/base-perf/boxing_unboxed_clone 44 ns/iter (± 0) 41 ns/iter (± 0) 1.07
es/visitor/base-perf/boxing_boxed 105 ns/iter (± 0) 113 ns/iter (± 0) 0.93
es/visitor/base-perf/boxing_unboxed 82 ns/iter (± 0) 79 ns/iter (± 0) 1.04
es/visitor/base-perf/visit_contains_this 3491 ns/iter (± 55) 2678 ns/iter (± 12) 1.30
es/base/parallel/resolver/typescript 6913861807 ns/iter (± 392211187) 4716615597 ns/iter (± 244861078) 1.47
es/base/parallel/hygiene/typescript 2552390489 ns/iter (± 43186992) 1550703889 ns/iter (± 21564894) 1.65
misc/visitors/time-complexity/time 5 113 ns/iter (± 0) 104 ns/iter (± 0) 1.09
misc/visitors/time-complexity/time 10 368 ns/iter (± 0) 267 ns/iter (± 0) 1.38
misc/visitors/time-complexity/time 15 770 ns/iter (± 0) 503 ns/iter (± 5) 1.53
misc/visitors/time-complexity/time 20 1440 ns/iter (± 2) 879 ns/iter (± 55) 1.64
misc/visitors/time-complexity/time 40 7461 ns/iter (± 7) 3541 ns/iter (± 13) 2.11
misc/visitors/time-complexity/time 60 18866 ns/iter (± 33) 7338 ns/iter (± 20) 2.57
es/full-target/es2016 271781 ns/iter (± 1029) 241941 ns/iter (± 696) 1.12
es/full-target/es2017 261355 ns/iter (± 517) 227845 ns/iter (± 594) 1.15
es/full-target/es2018 249858 ns/iter (± 430) 216982 ns/iter (± 601) 1.15
es2020_nullish_coalescing 97958 ns/iter (± 362) 73808 ns/iter (± 465) 1.33
es2020_optional_chaining 131415 ns/iter (± 286) 103209 ns/iter (± 410) 1.27
es2022_class_properties 156842 ns/iter (± 352) 122012 ns/iter (± 338) 1.29
es2018_object_rest_spread 99104 ns/iter (± 298) 77169 ns/iter (± 176) 1.28
es2019_optional_catch_binding 87534 ns/iter (± 247) 65559 ns/iter (± 201) 1.34
es2017_async_to_generator 88330 ns/iter (± 180) 66097 ns/iter (± 163) 1.34
es2016_exponentiation 95160 ns/iter (± 270) 71429 ns/iter (± 166) 1.33
es2015_arrow 98023 ns/iter (± 358) 74228 ns/iter (± 381) 1.32
es2015_block_scoped_fn 96203 ns/iter (± 180) 70354 ns/iter (± 208) 1.37
es2015_block_scoping 183305 ns/iter (± 201) 134022 ns/iter (± 387) 1.37

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

github-actions[bot] commented on Jun 12, 2023

@github-actions[bot]

⚠️ Performance Alert ⚠️

Possible performance regression was detected for benchmark.
Benchmark result of this commit is worse than the previous benchmark result exceeding threshold 2.

Benchmark suite Current: 6c00a24 Previous: cc4146c Ratio
misc/visitors/time-complexity/time 40 7461 ns/iter (± 7) 3541 ns/iter (± 13) 2.11
misc/visitors/time-complexity/time 60 18866 ns/iter (± 33) 7338 ns/iter (± 20) 2.57

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

CC: @kdy1

Please sign in to comment.