Skip to content

Commit

Permalink
feat(css/prefixer): Support nested calc (#6645)
Browse files Browse the repository at this point in the history
  • Loading branch information
alexander-akait committed Dec 14, 2022
1 parent db26f33 commit 5d0dc6e
Show file tree
Hide file tree
Showing 5 changed files with 311 additions and 3 deletions.
21 changes: 21 additions & 0 deletions crates/swc_css_prefixer/data/prefixes_and_browsers.json
Expand Up @@ -3275,6 +3275,27 @@
"firefox": "15"
}
],
"calc-nested": [
{
"chrome": "4",
"edge": "12",
"safari": "3.1",
"firefox": "2",
"opera": "10",
"ie": "6",
"ios": "3.2",
"samsung": "4"
},
{
"chrome": "50",
"edge": "15",
"safari": "10.1",
"firefox": "47",
"opera": "37",
"ios": "10.3",
"samsung": "4"
}
],

"-webkit-image-set()": [
{
Expand Down
97 changes: 94 additions & 3 deletions crates/swc_css_prefixer/src/prefixer.rs
Expand Up @@ -5,7 +5,7 @@ use std::mem::take;

use once_cell::sync::Lazy;
use preset_env_base::{query::targets_to_versions, version::Version, BrowserData, Versions};
use swc_atoms::js_word;
use swc_atoms::{js_word, JsWord};
use swc_common::{
collections::{AHashMap, AHashSet},
EqIgnoreSpan, DUMMY_SP,
Expand Down Expand Up @@ -515,6 +515,82 @@ where
node.visit_mut_with(&mut MediaFeatureResolutionReplacerOnLegacyVariant { from, to });
}

struct CalcReplacer<'a> {
inside_calc: bool,
to: Option<&'a JsWord>,
}

impl VisitMut for CalcReplacer<'_> {
fn visit_mut_function(&mut self, n: &mut Function) {
let old_inside_calc = self.inside_calc;

let name = n.name.value.to_ascii_lowercase();

let is_webkit_calc = matches!(name, js_word!("-webkit-calc"));
let is_moz_calc = matches!(name, js_word!("-moz-calc"));

if self.to.is_none() && (is_webkit_calc || is_moz_calc) {
return;
}

if (is_webkit_calc && self.to == Some(&js_word!("-moz-calc")))
|| (is_moz_calc && self.to == Some(&js_word!("-webkit-calc")))
{
return;
}

self.inside_calc = matches!(name, js_word!("calc")) || is_webkit_calc || is_moz_calc;

n.visit_mut_children_with(self);

if matches!(name, js_word!("calc")) {
if let Some(to) = self.to {
n.name.value = to.clone();
n.name.raw = None;
}
}

self.inside_calc = old_inside_calc;
}

fn visit_mut_calc_value(&mut self, n: &mut CalcValue) {
n.visit_mut_children_with(self);

if !self.inside_calc {
return;
}

if let CalcValue::Function(function) = n {
let name = function.name.value.to_ascii_lowercase();

if matches!(
name,
js_word!("calc") | js_word!("-webkit-calc") | js_word!("-moz-calc")
) {
let calc_sum = match function.value.get(0) {
Some(ComponentValue::CalcSum(calc_sum)) => *calc_sum.clone(),
_ => return,
};

*n = CalcValue::Sum(CalcSum {
span: function.span,
expressions: calc_sum.expressions,
});
}
}
}
}

fn replace_calc<N>(node: &mut N, to: Option<&JsWord>)
where
N: for<'aa> VisitMutWith<CalcReplacer<'aa>>,
{
node.visit_mut_with(&mut CalcReplacer {
inside_calc: false,
to,
});
}

macro_rules! to_ident {
($val:expr) => {{
ComponentValue::Ident(Box::new(Ident {
Expand Down Expand Up @@ -1243,7 +1319,7 @@ impl VisitMut for Prefixer {
}

if should_prefix("-webkit-calc()", self.env, false) {
replace_function_name(&mut webkit_value, "calc", "-webkit-calc");
replace_calc(&mut webkit_value, Some(&js_word!("-webkit-calc")));
}

if should_prefix("-webkit-cross-fade()", self.env, false) {
Expand Down Expand Up @@ -1295,7 +1371,7 @@ impl VisitMut for Prefixer {
}

if should_prefix("-moz-calc()", self.env, false) {
replace_function_name(&mut moz_value, "calc", "-moz-calc");
replace_calc(&mut moz_value, Some(&js_word!("-moz-calc")));
}

if should_prefix("-moz-linear-gradient()", self.env, false) {
Expand Down Expand Up @@ -3258,5 +3334,20 @@ impl VisitMut for Prefixer {
important: n.important.clone(),
}));
}

if should_prefix("calc-nested", self.env, true) {
let mut value = n.value.clone();

replace_calc(&mut value, None);

if !n.value.eq_ignore_span(&value) {
self.added_declarations.push(Box::new(Declaration {
span: n.span,
name: n.name.clone(),
value,
important: n.important.clone(),
}));
}
}
}
}
66 changes: 66 additions & 0 deletions crates/swc_css_prefixer/tests/fixture/calc/input.css
Expand Up @@ -9,3 +9,69 @@
div {
background-size: calc(20px);
}

.basic {
opacity: calc(1 + calc(2 * 2));
}

.mixed-casing {
width: calc(1 + cAlC(2 * 2));
}

.multi-line {
width: calc(1 +
calc(2 * 2)
);
}

.multiple-nested {
width: calc(2 + calc(2 * 2) + calc(2 * 2));
}

.triple-nested {
width: calc(3 + calc(2 * calc(2 * 2)));
}

.triple-nested-in-other-func {
width: var(--foo, calc(4 + calc(2 * calc(2 * 2))));
}

.complex {
width: calc(5 + calc(2 * calc(
2 * var(
--foo,
calc(6 + calc(2 * calc(2 * 2)))))
)
);
}

.ignore {
width: calc(1 + var(--foo, calc(2 * 2)));
}

.custom-props {
--order: calc(1 + calc(2 * 2));
}

.foo {
width: calc((1 + calc(2 * 2)) * 10px);
width: CALC((1 + CALC(2 * 2)) * 10px);
padding: calc((1 + calc(2 * 2)) * 10px) calc((1 + calc(2 * 2)) * 10px);
padding: calc((1 + -webkit-calc(2 * 2)) * 10px);
}

.bar {
padding: -webkit-calc((1 + calc(2 * 2)) * 10px);
}

.baz {
padding: -webkit-calc((1 + -webkit-calc(2 * 2)) * 10px);
}

.foo1 {
padding: -webkit-calc((1 + (2 * 2)) * 10px);
}

.foo2 {
padding: var(--foo, calc((1 + calc(2 * 2)) * 10px));
}
85 changes: 85 additions & 0 deletions crates/swc_css_prefixer/tests/fixture/calc/output.css
Expand Up @@ -16,3 +16,88 @@ div {
background-size: -moz-calc(20px);
background-size: calc(20px);
}
.basic {
opacity: -webkit-calc(1 + (2 * 2));
opacity: -moz-calc(1 + (2 * 2));
opacity: calc(1 + (2 * 2));
opacity: calc(1 + calc(2 * 2));
}
.mixed-casing {
width: -webkit-calc(1 + (2 * 2));
width: -moz-calc(1 + (2 * 2));
width: calc(1 + (2 * 2));
width: calc(1 + cAlC(2 * 2));
}
.multi-line {
width: -webkit-calc(1 + (2 * 2));
width: -moz-calc(1 + (2 * 2));
width: calc(1 + (2 * 2));
width: calc(1 + calc(2 * 2));
}
.multiple-nested {
width: -webkit-calc(2 + (2 * 2) + (2 * 2));
width: -moz-calc(2 + (2 * 2) + (2 * 2));
width: calc(2 + (2 * 2) + (2 * 2));
width: calc(2 + calc(2 * 2) + calc(2 * 2));
}
.triple-nested {
width: -webkit-calc(3 + (2 * (2 * 2)));
width: -moz-calc(3 + (2 * (2 * 2)));
width: calc(3 + (2 * (2 * 2)));
width: calc(3 + calc(2 * calc(2 * 2)));
}
.triple-nested-in-other-func {
width: var(--foo, -webkit-calc(4 + (2 * (2 * 2))));
width: var(--foo, -moz-calc(4 + (2 * (2 * 2))));
width: var(--foo, calc(4 + (2 * (2 * 2))));
width: var(--foo, calc(4 + calc(2 * calc(2 * 2))));
}
.complex {
width: -webkit-calc(5 + (2 * (2 * var(--foo, -webkit-calc(6 + (2 * (2 * 2)))))));
width: -moz-calc(5 + (2 * (2 * var(--foo, -moz-calc(6 + (2 * (2 * 2)))))));
width: calc(5 + (2 * (2 * var(--foo, calc(6 + (2 * (2 * 2)))))));
width: calc(5 + calc(2 * calc(2 * var(--foo, calc(6 + calc(2 * calc(2 * 2)))))));
}
.ignore {
width: -webkit-calc(1 + var(--foo, -webkit-calc(2 * 2)));
width: -moz-calc(1 + var(--foo, -moz-calc(2 * 2)));
width: calc(1 + var(--foo, calc(2 * 2)));
}
.custom-props {
--order: calc(1 + calc(2 * 2));
}
.foo {
width: -webkit-calc((1 + (2 * 2)) * 10px);
width: -moz-calc((1 + (2 * 2)) * 10px);
width: calc((1 + (2 * 2)) * 10px);
width: calc((1 + calc(2 * 2)) * 10px);
width: -webkit-calc((1 + (2 * 2)) * 10px);
width: -moz-calc((1 + (2 * 2)) * 10px);
width: CALC((1 + (2 * 2)) * 10px);
width: CALC((1 + CALC(2 * 2)) * 10px);
padding: -webkit-calc((1 + (2 * 2)) * 10px) -webkit-calc((1 + (2 * 2)) * 10px);
padding: -moz-calc((1 + (2 * 2)) * 10px) -moz-calc((1 + (2 * 2)) * 10px);
padding: calc((1 + (2 * 2)) * 10px) calc((1 + (2 * 2)) * 10px);
padding: calc((1 + calc(2 * 2)) * 10px) calc((1 + calc(2 * 2)) * 10px);
padding: -webkit-calc((1 + (2 * 2)) * 10px);
padding: -moz-calc((1 + (2 * 2)) * 10px);
padding: calc((1 + (2 * 2)) * 10px);
padding: calc((1 + -webkit-calc(2 * 2)) * 10px);
}
.bar {
padding: -webkit-calc((1 + (2 * 2)) * 10px);
padding: -webkit-calc((1 + calc(2 * 2)) * 10px);
}
.baz {
padding: -webkit-calc((1 + (2 * 2)) * 10px);
padding: -webkit-calc((1 + -webkit-calc(2 * 2)) * 10px);
}
.foo1 {
padding: -webkit-calc((1 + (2 * 2)) * 10px);
}
.foo2 {
padding: var(--foo, -webkit-calc((1 + (2 * 2)) * 10px));
padding: var(--foo, -moz-calc((1 + (2 * 2)) * 10px));
padding: var(--foo, calc((1 + (2 * 2)) * 10px));
padding: var(--foo, calc((1 + calc(2 * 2)) * 10px));
}
Expand Up @@ -7,3 +7,48 @@
div {
background-size: calc(20px);
}
.basic {
opacity: calc(1 + calc(2 * 2));
}
.mixed-casing {
width: calc(1 + cAlC(2 * 2));
}
.multi-line {
width: calc(1 + calc(2 * 2));
}
.multiple-nested {
width: calc(2 + calc(2 * 2) + calc(2 * 2));
}
.triple-nested {
width: calc(3 + calc(2 * calc(2 * 2)));
}
.triple-nested-in-other-func {
width: var(--foo, calc(4 + calc(2 * calc(2 * 2))));
}
.complex {
width: calc(5 + calc(2 * calc(2 * var(--foo, calc(6 + calc(2 * calc(2 * 2)))))));
}
.ignore {
width: calc(1 + var(--foo, calc(2 * 2)));
}
.custom-props {
--order: calc(1 + calc(2 * 2));
}
.foo {
width: calc((1 + calc(2 * 2)) * 10px);
width: CALC((1 + CALC(2 * 2)) * 10px);
padding: calc((1 + calc(2 * 2)) * 10px) calc((1 + calc(2 * 2)) * 10px);
padding: calc((1 + -webkit-calc(2 * 2)) * 10px);
}
.bar {
padding: -webkit-calc((1 + calc(2 * 2)) * 10px);
}
.baz {
padding: -webkit-calc((1 + -webkit-calc(2 * 2)) * 10px);
}
.foo1 {
padding: -webkit-calc((1 + (2 * 2)) * 10px);
}
.foo2 {
padding: var(--foo, calc((1 + calc(2 * 2)) * 10px));
}

1 comment on commit 5d0dc6e

@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: 5d0dc6e Previous: fe06b80 Ratio
es/full/bugs-1 298265 ns/iter (± 8793) 300996 ns/iter (± 18288) 0.99
es/full/minify/libraries/antd 1517172182 ns/iter (± 20585075) 1646758161 ns/iter (± 20064096) 0.92
es/full/minify/libraries/d3 310668546 ns/iter (± 3938005) 337817001 ns/iter (± 6895005) 0.92
es/full/minify/libraries/echarts 1295713808 ns/iter (± 11112022) 1399611670 ns/iter (± 11818302) 0.93
es/full/minify/libraries/jquery 88440245 ns/iter (± 1117761) 92174554 ns/iter (± 1931942) 0.96
es/full/minify/libraries/lodash 105027849 ns/iter (± 753516) 109521052 ns/iter (± 2003821) 0.96
es/full/minify/libraries/moment 53813707 ns/iter (± 2733556) 53853046 ns/iter (± 508668) 1.00
es/full/minify/libraries/react 19177023 ns/iter (± 154661) 19778994 ns/iter (± 165687) 0.97
es/full/minify/libraries/terser 240074142 ns/iter (± 1882043) 260888839 ns/iter (± 4276569) 0.92
es/full/minify/libraries/three 431015790 ns/iter (± 5638935) 472499837 ns/iter (± 9724658) 0.91
es/full/minify/libraries/typescript 2978173793 ns/iter (± 27359410) 3099704751 ns/iter (± 23605560) 0.96
es/full/minify/libraries/victory 621760485 ns/iter (± 6419309) 711212209 ns/iter (± 21301581) 0.87
es/full/minify/libraries/vue 128230071 ns/iter (± 1697534) 134625025 ns/iter (± 3359579) 0.95
es/full/codegen/es3 27555 ns/iter (± 293) 27635 ns/iter (± 48) 1.00
es/full/codegen/es5 26846 ns/iter (± 202) 27578 ns/iter (± 73) 0.97
es/full/codegen/es2015 26995 ns/iter (± 215) 27580 ns/iter (± 75) 0.98
es/full/codegen/es2016 26954 ns/iter (± 210) 27568 ns/iter (± 46) 0.98
es/full/codegen/es2017 27748 ns/iter (± 43) 27582 ns/iter (± 46) 1.01
es/full/codegen/es2018 26945 ns/iter (± 191) 27592 ns/iter (± 29) 0.98
es/full/codegen/es2019 26896 ns/iter (± 276) 27543 ns/iter (± 74) 0.98
es/full/codegen/es2020 26967 ns/iter (± 231) 27601 ns/iter (± 67) 0.98
es/full/all/es3 168083415 ns/iter (± 3366374) 169035866 ns/iter (± 2559614) 0.99
es/full/all/es5 160999986 ns/iter (± 2405009) 163037029 ns/iter (± 3852142) 0.99
es/full/all/es2015 118485187 ns/iter (± 2101046) 121300582 ns/iter (± 1471173) 0.98
es/full/all/es2016 117946240 ns/iter (± 951271) 120441512 ns/iter (± 2071211) 0.98
es/full/all/es2017 117642795 ns/iter (± 507114) 120316950 ns/iter (± 1096381) 0.98
es/full/all/es2018 115478364 ns/iter (± 1492077) 120205716 ns/iter (± 2449222) 0.96
es/full/all/es2019 114588699 ns/iter (± 969155) 118703904 ns/iter (± 1852033) 0.97
es/full/all/es2020 110501595 ns/iter (± 1052836) 111880447 ns/iter (± 1349510) 0.99
es/full/parser 490815 ns/iter (± 8105) 508462 ns/iter (± 7336) 0.97
es/full/base/fixer 21967 ns/iter (± 20) 21775 ns/iter (± 36) 1.01
es/full/base/resolver_and_hygiene 75953 ns/iter (± 813) 76958 ns/iter (± 78) 0.99
serialization of ast node 138 ns/iter (± 1) 142 ns/iter (± 0) 0.97
serialization of serde 125 ns/iter (± 0) 127 ns/iter (± 0) 0.98
css/minify/libraries/bootstrap 26603211 ns/iter (± 169936) 26864173 ns/iter (± 66116) 0.99
css/visitor/compare/clone 2074416 ns/iter (± 33781) 2085745 ns/iter (± 15243) 0.99
css/visitor/compare/visit_mut_span 2255488 ns/iter (± 7936) 2259912 ns/iter (± 4476) 1.00
css/visitor/compare/visit_mut_span_panic 2297958 ns/iter (± 7415) 2318806 ns/iter (± 3308) 0.99
css/visitor/compare/fold_span 2976678 ns/iter (± 19414) 2986589 ns/iter (± 47914) 1.00
css/visitor/compare/fold_span_panic 3120678 ns/iter (± 30100) 3106316 ns/iter (± 38801) 1.00
css/lexer/bootstrap_5_1_3 5078673 ns/iter (± 29742) 5186669 ns/iter (± 1244) 0.98
css/lexer/foundation_6_7_4 4312952 ns/iter (± 18973) 4395803 ns/iter (± 720) 0.98
css/lexer/tailwind_3_1_1 807614 ns/iter (± 5749) 824885 ns/iter (± 828) 0.98
css/parser/bootstrap_5_1_3 20287808 ns/iter (± 130847) 20674921 ns/iter (± 110657) 0.98
css/parser/foundation_6_7_4 16300480 ns/iter (± 94926) 16390537 ns/iter (± 19223) 0.99
css/parser/tailwind_3_1_1 3131812 ns/iter (± 15506) 3177072 ns/iter (± 2470) 0.99
es/codegen/colors 329745 ns/iter (± 186040) 332488 ns/iter (± 186186) 0.99
es/codegen/large 1217821 ns/iter (± 647174) 1218788 ns/iter (± 637353) 1.00
es/codegen/with-parser/colors 44908 ns/iter (± 618) 45488 ns/iter (± 283) 0.99
es/codegen/with-parser/large 511530 ns/iter (± 1765) 513831 ns/iter (± 1062) 1.00
es/minify/libraries/antd 1375507014 ns/iter (± 10270722) 1407542773 ns/iter (± 24620448) 0.98
es/minify/libraries/d3 283561973 ns/iter (± 8323861) 302143683 ns/iter (± 10636144) 0.94
es/minify/libraries/echarts 1129709589 ns/iter (± 38271739) 1230040855 ns/iter (± 18167194) 0.92
es/minify/libraries/jquery 76660633 ns/iter (± 494348) 81336683 ns/iter (± 1197576) 0.94
es/minify/libraries/lodash 94887172 ns/iter (± 726280) 98832833 ns/iter (± 1415497) 0.96
es/minify/libraries/moment 45222124 ns/iter (± 442706) 49246812 ns/iter (± 857161) 0.92
es/minify/libraries/react 17274529 ns/iter (± 144272) 17429067 ns/iter (± 266936) 0.99
es/minify/libraries/terser 207026714 ns/iter (± 2311739) 229942705 ns/iter (± 5976977) 0.90
es/minify/libraries/three 364326094 ns/iter (± 3928893) 400820561 ns/iter (± 10546240) 0.91
es/minify/libraries/typescript 2588091094 ns/iter (± 19828455) 2707082729 ns/iter (± 29965951) 0.96
es/minify/libraries/victory 526428657 ns/iter (± 5624457) 586860015 ns/iter (± 13101763) 0.90
es/minify/libraries/vue 114142025 ns/iter (± 916241) 119922740 ns/iter (± 3135900) 0.95
es/visitor/compare/clone 2359351 ns/iter (± 32674) 2404892 ns/iter (± 32371) 0.98
es/visitor/compare/visit_mut_span 2778783 ns/iter (± 22005) 2784413 ns/iter (± 13986) 1.00
es/visitor/compare/visit_mut_span_panic 2776874 ns/iter (± 19278) 2873928 ns/iter (± 30437) 0.97
es/visitor/compare/fold_span 3832158 ns/iter (± 43904) 3981743 ns/iter (± 48130) 0.96
es/visitor/compare/fold_span_panic 3978705 ns/iter (± 26185) 4114624 ns/iter (± 31046) 0.97
es/lexer/colors 17041 ns/iter (± 121) 17381 ns/iter (± 21) 0.98
es/lexer/angular 7990236 ns/iter (± 32417) 8210028 ns/iter (± 37460) 0.97
es/lexer/backbone 1047783 ns/iter (± 7504) 1072320 ns/iter (± 336) 0.98
es/lexer/jquery 5868105 ns/iter (± 35815) 5946733 ns/iter (± 1222) 0.99
es/lexer/jquery mobile 8937948 ns/iter (± 60724) 9162127 ns/iter (± 2055) 0.98
es/lexer/mootools 4567754 ns/iter (± 28744) 4671572 ns/iter (± 1010) 0.98
es/lexer/underscore 879724 ns/iter (± 5201) 895197 ns/iter (± 247) 0.98
es/lexer/three 27625459 ns/iter (± 243848) 27915316 ns/iter (± 12304) 0.99
es/lexer/yui 5032030 ns/iter (± 20832) 5044733 ns/iter (± 963) 1.00
es/parser/colors 30156 ns/iter (± 320) 31314 ns/iter (± 142) 0.96
es/parser/angular 15433997 ns/iter (± 172358) 15993951 ns/iter (± 174141) 0.96
es/parser/backbone 2253215 ns/iter (± 23986) 2324087 ns/iter (± 13149) 0.97
es/parser/jquery 12235171 ns/iter (± 104186) 12563443 ns/iter (± 87061) 0.97
es/parser/jquery mobile 19068123 ns/iter (± 186419) 20750588 ns/iter (± 401706) 0.92
es/parser/mootools 9279431 ns/iter (± 87485) 9700858 ns/iter (± 34441) 0.96
es/parser/underscore 1924380 ns/iter (± 24265) 1971469 ns/iter (± 9347) 0.98
es/parser/three 53317410 ns/iter (± 757517) 59160260 ns/iter (± 451020) 0.90
es/parser/yui 9586602 ns/iter (± 164026) 9666270 ns/iter (± 47865) 0.99
es/preset-env/usage/builtin_type 141451 ns/iter (± 33237) 142049 ns/iter (± 32935) 1.00
es/preset-env/usage/property 21449 ns/iter (± 149) 21250 ns/iter (± 69) 1.01
es/resolver/typescript 109381900 ns/iter (± 1406514) 110616766 ns/iter (± 2272648) 0.99
es/fixer/typescript 86166118 ns/iter (± 1870083) 86531316 ns/iter (± 670971) 1.00
es/hygiene/typescript 169741116 ns/iter (± 1926531) 168055581 ns/iter (± 1166489) 1.01
es/resolver_with_hygiene/typescript 292938234 ns/iter (± 1828331) 295267668 ns/iter (± 742375) 0.99
es/visitor/base-perf/module_clone 74431 ns/iter (± 1569) 74275 ns/iter (± 1041) 1.00
es/visitor/base-perf/fold_empty 85275 ns/iter (± 1399) 86278 ns/iter (± 1445) 0.99
es/visitor/base-perf/fold_noop_impl_all 85689 ns/iter (± 1405) 85696 ns/iter (± 723) 1.00
es/visitor/base-perf/fold_noop_impl_vec 85945 ns/iter (± 1179) 86463 ns/iter (± 1157) 0.99
es/visitor/base-perf/boxing_boxed_clone 55 ns/iter (± 0) 54 ns/iter (± 0) 1.02
es/visitor/base-perf/boxing_unboxed_clone 58 ns/iter (± 0) 58 ns/iter (± 0) 1
es/visitor/base-perf/boxing_boxed 101 ns/iter (± 0) 101 ns/iter (± 0) 1
es/visitor/base-perf/boxing_unboxed 100 ns/iter (± 0) 101 ns/iter (± 0) 0.99
es/visitor/base-perf/visit_contains_this 3288 ns/iter (± 46) 3666 ns/iter (± 83) 0.90
es/base/parallel/resolver/typescript 5111034411 ns/iter (± 191853260) 4917048540 ns/iter (± 251501171) 1.04
es/base/parallel/hygiene/typescript 2032643219 ns/iter (± 44709894) 2012932844 ns/iter (± 15815560) 1.01
misc/visitors/time-complexity/time 5 101 ns/iter (± 0) 103 ns/iter (± 0) 0.98
misc/visitors/time-complexity/time 10 327 ns/iter (± 3) 337 ns/iter (± 1) 0.97
misc/visitors/time-complexity/time 15 632 ns/iter (± 7) 649 ns/iter (± 0) 0.97
misc/visitors/time-complexity/time 20 1183 ns/iter (± 10) 1271 ns/iter (± 47) 0.93
misc/visitors/time-complexity/time 40 6605 ns/iter (± 90) 6665 ns/iter (± 11) 0.99
misc/visitors/time-complexity/time 60 16976 ns/iter (± 160) 17257 ns/iter (± 228) 0.98
es/full-target/es2016 186260 ns/iter (± 3051) 187609 ns/iter (± 333) 0.99
es/full-target/es2017 176474 ns/iter (± 1638) 180569 ns/iter (± 402) 0.98
es/full-target/es2018 165164 ns/iter (± 1614) 169690 ns/iter (± 660) 0.97
es2020_nullish_coalescing 64708 ns/iter (± 748) 65473 ns/iter (± 125) 0.99
es2020_optional_chaining 91937 ns/iter (± 677) 94407 ns/iter (± 8042) 0.97
es2022_class_properties 89752 ns/iter (± 693) 92115 ns/iter (± 128) 0.97
es2018_object_rest_spread 68140 ns/iter (± 331) 70103 ns/iter (± 973) 0.97
es2019_optional_catch_binding 58146 ns/iter (± 366) 59898 ns/iter (± 110) 0.97
es2017_async_to_generator 58765 ns/iter (± 440) 60382 ns/iter (± 146) 0.97
es2016_exponentiation 61927 ns/iter (± 365) 63379 ns/iter (± 153) 0.98
es2015_arrow 67216 ns/iter (± 626) 69079 ns/iter (± 231) 0.97
es2015_block_scoped_fn 63240 ns/iter (± 545) 64735 ns/iter (± 86) 0.98
es2015_block_scoping 155483 ns/iter (± 11140) 156824 ns/iter (± 9823) 0.99
es2015_classes 111727 ns/iter (± 891) 115189 ns/iter (± 435) 0.97
es2015_computed_props 57912 ns/iter (± 231) 59801 ns/iter (± 104) 0.97
es2015_destructuring 111006 ns/iter (± 904) 114442 ns/iter (± 281) 0.97
es2015_duplicate_keys 61076 ns/iter (± 482) 62521 ns/iter (± 115) 0.98
es2015_parameters 75782 ns/iter (± 566) 78008 ns/iter (± 147) 0.97
es2015_fn_name 63225 ns/iter (± 412) 65529 ns/iter (± 542) 0.96
es2015_for_of 61063 ns/iter (± 391) 62639 ns/iter (± 170) 0.97
es2015_instanceof 59732 ns/iter (± 260) 61645 ns/iter (± 87) 0.97
es2015_shorthand_property 58313 ns/iter (± 314) 59303 ns/iter (± 146) 0.98
es2015_spread 58608 ns/iter (± 423) 59595 ns/iter (± 108) 0.98
es2015_sticky_regex 59893 ns/iter (± 535) 60974 ns/iter (± 113) 0.98
es2015_typeof_symbol 59442 ns/iter (± 455) 61077 ns/iter (± 103) 0.97
es/transform/baseline/base 49389 ns/iter (± 467) 50346 ns/iter (± 79) 0.98
es/transform/baseline/common_reserved_word 59544 ns/iter (± 496) 61268 ns/iter (± 145) 0.97
es/transform/baseline/common_typescript 136478 ns/iter (± 1191) 141937 ns/iter (± 1812) 0.96
es/target/es3 163735 ns/iter (± 971) 168127 ns/iter (± 217) 0.97
es/target/es2015 609256 ns/iter (± 7607) 627727 ns/iter (± 1080) 0.97
es/target/es2016 62665 ns/iter (± 857) 63348 ns/iter (± 151) 0.99
es/target/es2017 59565 ns/iter (± 688) 60420 ns/iter (± 88) 0.99
es/target/es2018 78069 ns/iter (± 797) 80211 ns/iter (± 116) 0.97
es/target/es2020 127925 ns/iter (± 1305) 131363 ns/iter (± 227) 0.97
babelify-only 652185 ns/iter (± 4402) 668025 ns/iter (± 4674) 0.98
parse_and_babelify_angular 40729350 ns/iter (± 369943) 43868900 ns/iter (± 610831) 0.93
parse_and_babelify_backbone 5287650 ns/iter (± 45317) 5404051 ns/iter (± 81222) 0.98
parse_and_babelify_jquery 31307164 ns/iter (± 624027) 32249270 ns/iter (± 364518) 0.97
parse_and_babelify_jquery_mobile 54554161 ns/iter (± 1006800) 55082815 ns/iter (± 732057) 0.99
parse_and_babelify_mootools 31004417 ns/iter (± 1223549) 33835474 ns/iter (± 612432) 0.92
parse_and_babelify_underscore 4320403 ns/iter (± 19423) 4368925 ns/iter (± 54973) 0.99
parse_and_babelify_yui 30539916 ns/iter (± 580093) 32922537 ns/iter (± 379733) 0.93
html/minify/document/css_spec 39634858 ns/iter (± 423226) 41584284 ns/iter (± 386390) 0.95
html/minify/document/github 16845619 ns/iter (± 213786) 17401033 ns/iter (± 39904) 0.97
html/minify/document/stackoverflow 15057669 ns/iter (± 107199) 15473526 ns/iter (± 35016) 0.97
html/minify/document_fragment/css_spec 37970324 ns/iter (± 311881) 39820186 ns/iter (± 366765) 0.95
html/minify/document_fragment/github 16199756 ns/iter (± 127659) 16698929 ns/iter (± 70330) 0.97
html/minify/document_fragment/stackoverflow 14607632 ns/iter (± 50939) 15489816 ns/iter (± 104970) 0.94
html/document/visitor/compare/clone 334237 ns/iter (± 2810) 340841 ns/iter (± 2047) 0.98
html/document/visitor/compare/visit_mut_span 356386 ns/iter (± 3264) 365522 ns/iter (± 1457) 0.98
html/document/visitor/compare/visit_mut_span_panic 373953 ns/iter (± 2509) 376416 ns/iter (± 2248) 0.99
html/document/visitor/compare/fold_span 394161 ns/iter (± 4328) 404181 ns/iter (± 1567) 0.98
html/document/visitor/compare/fold_span_panic 451497 ns/iter (± 2214) 460993 ns/iter (± 2751) 0.98
html/document_fragment/visitor/compare/clone 337794 ns/iter (± 3083) 339078 ns/iter (± 2004) 1.00
html/document_fragment/visitor/compare/visit_mut_span 357565 ns/iter (± 2681) 365634 ns/iter (± 2232) 0.98
html/document_fragment/visitor/compare/visit_mut_span_panic 368268 ns/iter (± 2068) 372208 ns/iter (± 1961) 0.99
html/document_fragment/visitor/compare/fold_span 397394 ns/iter (± 2285) 401328 ns/iter (± 2071) 0.99
html/document_fragment/visitor/compare/fold_span_panic 455352 ns/iter (± 4235) 459460 ns/iter (± 1971) 0.99
html/lexer/css_2021_spec 15101434 ns/iter (± 108865) 15592866 ns/iter (± 6709) 0.97
html/lexer/github_com_17_05_2022 5895766 ns/iter (± 60357) 6052926 ns/iter (± 7556) 0.97
html/lexer/stackoverflow_com_17_05_2022 5460986 ns/iter (± 39834) 5659403 ns/iter (± 2080) 0.96
html/parser/parser_document/css_2021_spec 24488964 ns/iter (± 127044) 25682802 ns/iter (± 267786) 0.95
html/parser/parser_document/github_com_17_05_2022 8516296 ns/iter (± 81976) 8777695 ns/iter (± 33271) 0.97
html/parser/parser_document/stackoverflow_com_17_05_2022 7537615 ns/iter (± 42889) 7730492 ns/iter (± 11063) 0.98
html/parser/parser_document_fragment/css_2021_spec 24835803 ns/iter (± 184432) 26115903 ns/iter (± 151647) 0.95
html/parser/parser_document_fragment/github_com_17_05_2022 8515696 ns/iter (± 84540) 8793057 ns/iter (± 9808) 0.97
html/parser/parser_document_fragment/stackoverflow_com_17_05_2022 7490586 ns/iter (± 31253) 7728190 ns/iter (± 4919) 0.97

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

Please sign in to comment.