Skip to content

Commit

Permalink
fix(es/minifier): Drop line comments starting with ! (#7689)
Browse files Browse the repository at this point in the history
**Related issue:**

 - Closes #7653
  • Loading branch information
kdy1 committed Jul 21, 2023
1 parent aff07b1 commit 951138c
Show file tree
Hide file tree
Showing 4 changed files with 42 additions and 2 deletions.
16 changes: 14 additions & 2 deletions crates/swc/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -120,7 +120,11 @@ use std::{

use anyhow::{bail, Context, Error};
use atoms::JsWord;
use common::{collections::AHashMap, comments::SingleThreadedComments, errors::HANDLER};
use common::{
collections::AHashMap,
comments::{CommentKind, SingleThreadedComments},
errors::HANDLER,
};
use config::{IsModule, JsMinifyCommentOption, JsMinifyOptions, OutputCharset};
use jsonc_parser::{parse_to_serde_value, ParseOptions};
use once_cell::sync::Lazy;
Expand Down Expand Up @@ -696,7 +700,15 @@ pub(crate) fn minify_file_comments(
BoolOr::Data(JsMinifyCommentOption::PreserveSomeComments) => {
let preserve_excl = |_: &BytePos, vc: &mut Vec<Comment>| -> bool {
// Preserve license comments.
vc.retain(|c: &Comment| c.text.contains("@license") || c.text.starts_with('!'));
//
// See https://github.com/terser/terser/blob/798135e04baddd94fea403cfaab4ba8b22b1b524/lib/output.js#L175-L181
vc.retain(|c: &Comment| {
c.text.contains("@lic")
|| c.text.contains("@preserve")
|| c.text.contains("@copyright")
|| c.text.contains("@cc_on")
|| (c.kind == CommentKind::Block && c.text.starts_with('!'))
});
!vc.is_empty()
};
let (mut l, mut t) = comments.borrow_all_mut();
Expand Down
15 changes: 15 additions & 0 deletions crates/swc/tests/fixture/issues-7xxx/7653/input/.swcrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
{
"jsc": {
"parser": {
"syntax": "typescript",
"tsx": true
},
"transform": null,
"target": "es5",
"loose": true,
"externalHelpers": false,
"keepClassNames": false,
},
"minify": true,
"isModule": true
}
12 changes: 12 additions & 0 deletions crates/swc/tests/fixture/issues-7xxx/7653/input/1.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
/** Add your relevant code here for the issue to reproduce */
export default function Home() {
return <div
//TODO: Check if this is still needed after the approval of the new Ad Manager
//! The following property might seem like it is doing nothing.
//! However, it is important in order to prevent React from discarding
//! the node's contents once hydration happens on the client.
//! The contents of this node might change between the Server Side Rendering
//! and the hydration, due to the registering of the slots that is done before hydration.
dangerouslySetInnerHTML={{ __html: 'Hello World' }}
/>
}
1 change: 1 addition & 0 deletions crates/swc/tests/fixture/issues-7xxx/7653/output/1.js
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export default function Home(){return React.createElement("div",{dangerouslySetInnerHTML:{__html:"Hello World"}})}

1 comment on commit 951138c

@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: 951138c Previous: 241c04a Ratio
es/full/bugs-1 283739 ns/iter (± 4895) 293194 ns/iter (± 6378) 0.97
es/full/minify/libraries/antd 1357910406 ns/iter (± 18392269) 1321864611 ns/iter (± 18958849) 1.03
es/full/minify/libraries/d3 292043673 ns/iter (± 4774406) 277917980 ns/iter (± 5712947) 1.05
es/full/minify/libraries/echarts 1121112761 ns/iter (± 7444746) 1064009093 ns/iter (± 4245819) 1.05
es/full/minify/libraries/jquery 86866527 ns/iter (± 712723) 84729198 ns/iter (± 270018) 1.03
es/full/minify/libraries/lodash 100504811 ns/iter (± 391356) 98151219 ns/iter (± 161341) 1.02
es/full/minify/libraries/moment 50953221 ns/iter (± 113485) 49660844 ns/iter (± 60121) 1.03
es/full/minify/libraries/react 18236844 ns/iter (± 82815) 17962471 ns/iter (± 48853) 1.02
es/full/minify/libraries/terser 225182701 ns/iter (± 929107) 219869948 ns/iter (± 1124538) 1.02
es/full/minify/libraries/three 404492091 ns/iter (± 3533121) 386141614 ns/iter (± 2648781) 1.05
es/full/minify/libraries/typescript 2729126946 ns/iter (± 29429371) 2667482556 ns/iter (± 13629789) 1.02
es/full/minify/libraries/victory 575161292 ns/iter (± 12203907) 568135630 ns/iter (± 3140194) 1.01
es/full/minify/libraries/vue 123010385 ns/iter (± 1485444) 120854332 ns/iter (± 830287) 1.02
es/full/codegen/es3 34134 ns/iter (± 68) 34316 ns/iter (± 82) 0.99
es/full/codegen/es5 34065 ns/iter (± 85) 34267 ns/iter (± 42) 0.99
es/full/codegen/es2015 34142 ns/iter (± 66) 34299 ns/iter (± 65) 1.00
es/full/codegen/es2016 34126 ns/iter (± 87) 34267 ns/iter (± 73) 1.00
es/full/codegen/es2017 34035 ns/iter (± 92) 34312 ns/iter (± 95) 0.99
es/full/codegen/es2018 34107 ns/iter (± 81) 34285 ns/iter (± 82) 0.99
es/full/codegen/es2019 34140 ns/iter (± 72) 34341 ns/iter (± 78) 0.99
es/full/codegen/es2020 34139 ns/iter (± 74) 34354 ns/iter (± 93) 0.99
es/full/all/es3 172718337 ns/iter (± 1104100) 172475523 ns/iter (± 1168953) 1.00
es/full/all/es5 164355674 ns/iter (± 1001487) 165273391 ns/iter (± 1569545) 0.99
es/full/all/es2015 123942817 ns/iter (± 523550) 124461022 ns/iter (± 814370) 1.00
es/full/all/es2016 123592732 ns/iter (± 1067611) 123286043 ns/iter (± 486242) 1.00
es/full/all/es2017 122076147 ns/iter (± 538422) 122379610 ns/iter (± 386766) 1.00
es/full/all/es2018 120362192 ns/iter (± 576364) 120444805 ns/iter (± 431552) 1.00
es/full/all/es2019 119802659 ns/iter (± 859275) 120191745 ns/iter (± 572433) 1.00
es/full/all/es2020 115016042 ns/iter (± 917681) 115859306 ns/iter (± 551974) 0.99
es/full/parser 534799 ns/iter (± 6467) 539883 ns/iter (± 5226) 0.99
es/full/base/fixer 17683 ns/iter (± 67) 17745 ns/iter (± 167) 1.00
es/full/base/resolver_and_hygiene 83181 ns/iter (± 163) 82647 ns/iter (± 206) 1.01
serialization of serde 291 ns/iter (± 0) 294 ns/iter (± 1) 0.99
css/minify/libraries/bootstrap 28798243 ns/iter (± 96346) 28254499 ns/iter (± 166533) 1.02
css/visitor/compare/clone 1642135 ns/iter (± 4768) 1637799 ns/iter (± 2667) 1.00
css/visitor/compare/visit_mut_span 1790081 ns/iter (± 5769) 1774096 ns/iter (± 6573) 1.01
css/visitor/compare/visit_mut_span_panic 1842535 ns/iter (± 2924) 1831275 ns/iter (± 5899) 1.01
css/visitor/compare/fold_span 2560112 ns/iter (± 16375) 2574277 ns/iter (± 12833) 0.99
css/visitor/compare/fold_span_panic 2751312 ns/iter (± 13853) 2764428 ns/iter (± 15263) 1.00
css/lexer/bootstrap_5_1_3 4433388 ns/iter (± 3448) 4487332 ns/iter (± 3861) 0.99
css/lexer/foundation_6_7_4 3756957 ns/iter (± 1845) 3766743 ns/iter (± 2325) 1.00
css/lexer/tailwind_3_1_1 712790 ns/iter (± 564) 720823 ns/iter (± 2985) 0.99
css/parser/bootstrap_5_1_3 20172369 ns/iter (± 36499) 19592842 ns/iter (± 76094) 1.03
css/parser/foundation_6_7_4 16099106 ns/iter (± 45805) 15529733 ns/iter (± 41698) 1.04
css/parser/tailwind_3_1_1 3099826 ns/iter (± 3293) 2981137 ns/iter (± 2870) 1.04
es/codegen/colors 756306 ns/iter (± 401849) 734588 ns/iter (± 402652) 1.03
es/codegen/large 3158740 ns/iter (± 1665466) 3131931 ns/iter (± 1681480) 1.01
es/codegen/with-parser/colors 44142 ns/iter (± 453) 44204 ns/iter (± 429) 1.00
es/codegen/with-parser/large 482393 ns/iter (± 1348) 484572 ns/iter (± 574) 1.00
es/minify/libraries/antd 1167070035 ns/iter (± 16082500) 1148458195 ns/iter (± 14593694) 1.02
es/minify/libraries/d3 243091491 ns/iter (± 1281574) 241812011 ns/iter (± 2676415) 1.01
es/minify/libraries/echarts 930953945 ns/iter (± 5098739) 919758931 ns/iter (± 13698541) 1.01
es/minify/libraries/jquery 74254758 ns/iter (± 246414) 73636654 ns/iter (± 389240) 1.01
es/minify/libraries/lodash 88551790 ns/iter (± 199190) 88037321 ns/iter (± 137352) 1.01
es/minify/libraries/moment 43622796 ns/iter (± 109356) 43604865 ns/iter (± 112619) 1.00
es/minify/libraries/react 16096109 ns/iter (± 60241) 16014875 ns/iter (± 28353) 1.01
es/minify/libraries/terser 189759093 ns/iter (± 860920) 187765448 ns/iter (± 790676) 1.01
es/minify/libraries/three 325563318 ns/iter (± 1661307) 322992884 ns/iter (± 1740598) 1.01
es/minify/libraries/typescript 2294015210 ns/iter (± 12318055) 2291881269 ns/iter (± 8994370) 1.00
es/minify/libraries/victory 487923416 ns/iter (± 3514998) 472735163 ns/iter (± 14512767) 1.03
es/minify/libraries/vue 108414179 ns/iter (± 790473) 107123358 ns/iter (± 248804) 1.01
es/visitor/compare/clone 1934960 ns/iter (± 18816) 1938516 ns/iter (± 4336) 1.00
es/visitor/compare/visit_mut_span 2282528 ns/iter (± 2591) 2287129 ns/iter (± 5028) 1.00
es/visitor/compare/visit_mut_span_panic 2312759 ns/iter (± 5079) 2324419 ns/iter (± 3129) 0.99
es/visitor/compare/fold_span 3316503 ns/iter (± 2933) 3315610 ns/iter (± 4195) 1.00
es/visitor/compare/fold_span_panic 3483401 ns/iter (± 2475) 3477431 ns/iter (± 4855) 1.00
es/lexer/colors 13022 ns/iter (± 19) 12609 ns/iter (± 13) 1.03
es/lexer/angular 6144771 ns/iter (± 8075) 6159853 ns/iter (± 18750) 1.00
es/lexer/backbone 811470 ns/iter (± 1060) 800148 ns/iter (± 639) 1.01
es/lexer/jquery 4529183 ns/iter (± 3588) 4502994 ns/iter (± 4983) 1.01
es/lexer/jquery mobile 6960376 ns/iter (± 2527) 6906329 ns/iter (± 13509) 1.01
es/lexer/mootools 3598939 ns/iter (± 1101) 3565140 ns/iter (± 6516) 1.01
es/lexer/underscore 679775 ns/iter (± 1006) 673534 ns/iter (± 1093) 1.01
es/lexer/three 21413757 ns/iter (± 18323) 21197953 ns/iter (± 19689) 1.01
es/lexer/yui 3913429 ns/iter (± 4390) 3870332 ns/iter (± 1572) 1.01
es/parser/colors 26280 ns/iter (± 47) 26495 ns/iter (± 61) 0.99
es/parser/angular 13342753 ns/iter (± 69789) 13330895 ns/iter (± 54588) 1.00
es/parser/backbone 1973709 ns/iter (± 8923) 1969855 ns/iter (± 8759) 1.00
es/parser/jquery 10753090 ns/iter (± 39636) 10746776 ns/iter (± 43498) 1.00
es/parser/jquery mobile 16566526 ns/iter (± 195241) 16502279 ns/iter (± 37811) 1.00
es/parser/mootools 8242130 ns/iter (± 17883) 8259212 ns/iter (± 21767) 1.00
es/parser/underscore 1701820 ns/iter (± 8810) 1701210 ns/iter (± 9104) 1.00
es/parser/three 47188213 ns/iter (± 861637) 46023543 ns/iter (± 129240) 1.03
es/parser/yui 8166263 ns/iter (± 47604) 8215630 ns/iter (± 27648) 0.99
es/preset-env/usage/builtin_type 135971 ns/iter (± 30944) 139635 ns/iter (± 32697) 0.97
es/preset-env/usage/property 17107 ns/iter (± 62) 16828 ns/iter (± 58) 1.02
es/resolver/typescript 90198237 ns/iter (± 1243091) 87890571 ns/iter (± 1028951) 1.03
es/fixer/typescript 64057495 ns/iter (± 820316) 63452645 ns/iter (± 269791) 1.01
es/hygiene/typescript 136281481 ns/iter (± 3627283) 133711435 ns/iter (± 573672) 1.02
es/resolver_with_hygiene/typescript 250985943 ns/iter (± 3296262) 244961364 ns/iter (± 1597556) 1.02
es/visitor/base-perf/module_clone 61664 ns/iter (± 235) 61999 ns/iter (± 319) 0.99
es/visitor/base-perf/fold_empty 64668 ns/iter (± 343) 64061 ns/iter (± 342) 1.01
es/visitor/base-perf/fold_noop_impl_all 64759 ns/iter (± 553) 64403 ns/iter (± 882) 1.01
es/visitor/base-perf/fold_noop_impl_vec 64900 ns/iter (± 284) 64270 ns/iter (± 229) 1.01
es/visitor/base-perf/boxing_boxed_clone 59 ns/iter (± 0) 58 ns/iter (± 0) 1.02
es/visitor/base-perf/boxing_unboxed_clone 39 ns/iter (± 0) 39 ns/iter (± 0) 1
es/visitor/base-perf/boxing_boxed 108 ns/iter (± 0) 110 ns/iter (± 0) 0.98
es/visitor/base-perf/boxing_unboxed 78 ns/iter (± 0) 77 ns/iter (± 0) 1.01
es/visitor/base-perf/visit_empty 0 ns/iter (± 0) 0 ns/iter (± 0) NaN
es/visitor/base-perf/visit_contains_this 2520 ns/iter (± 19) 2498 ns/iter (± 7) 1.01
es/base/parallel/resolver/typescript 4481123869 ns/iter (± 271760016) 4498257590 ns/iter (± 283672280) 1.00
es/base/parallel/hygiene/typescript 1476104863 ns/iter (± 14112456) 1472152606 ns/iter (± 19301840) 1.00
misc/visitors/time-complexity/time 5 137 ns/iter (± 1) 137 ns/iter (± 0) 1
misc/visitors/time-complexity/time 10 285 ns/iter (± 47) 396 ns/iter (± 3) 0.72
misc/visitors/time-complexity/time 15 683 ns/iter (± 5) 732 ns/iter (± 18) 0.93
misc/visitors/time-complexity/time 20 1062 ns/iter (± 3) 1045 ns/iter (± 2) 1.02
misc/visitors/time-complexity/time 40 3704 ns/iter (± 291) 3487 ns/iter (± 4) 1.06
misc/visitors/time-complexity/time 60 8131 ns/iter (± 731) 8773 ns/iter (± 20) 0.93
es/full-target/es2016 238298 ns/iter (± 1668) 235638 ns/iter (± 625) 1.01
es/full-target/es2017 224099 ns/iter (± 523) 225286 ns/iter (± 461) 0.99
es/full-target/es2018 213795 ns/iter (± 715) 212848 ns/iter (± 363) 1.00
es2020_nullish_coalescing 69076 ns/iter (± 319) 71685 ns/iter (± 357) 0.96
es2020_optional_chaining 78288 ns/iter (± 315) 78934 ns/iter (± 274) 0.99
es2022_class_properties 118576 ns/iter (± 221) 120924 ns/iter (± 224) 0.98
es2018_object_rest_spread 75022 ns/iter (± 232) 75738 ns/iter (± 361) 0.99
es2019_optional_catch_binding 64921 ns/iter (± 186) 64127 ns/iter (± 180) 1.01
es2017_async_to_generator 63471 ns/iter (± 124) 66062 ns/iter (± 252) 0.96
es2016_exponentiation 68359 ns/iter (± 293) 70353 ns/iter (± 202) 0.97
es2015_arrow 73343 ns/iter (± 355) 74826 ns/iter (± 317) 0.98
es2015_block_scoped_fn 68563 ns/iter (± 200) 70371 ns/iter (± 194) 0.97
es2015_block_scoping 125273 ns/iter (± 595) 126612 ns/iter (± 226) 0.99

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

Please sign in to comment.