From aa0c128d1b21d1ceff084ee471cd91dfa4dc7939 Mon Sep 17 00:00:00 2001 From: Chen-jj <798095202@qq.com> Date: Wed, 6 Mar 2024 17:21:33 +0800 Subject: [PATCH 001/236] =?UTF-8?q?feat:=20=E7=BB=99=E7=BB=84=E4=BB=B6?= =?UTF-8?q?=E8=BF=94=E5=9B=9E=E5=80=BC=E5=8C=85=E8=A3=B9=E7=94=A8=E4=BA=8E?= =?UTF-8?q?=E5=B1=82=E5=8F=A0=E7=9A=84=E5=87=BD=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/visitor.rs | 81 +++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 73 insertions(+), 8 deletions(-) diff --git a/src/visitor.rs b/src/visitor.rs index 167b8db..b65b271 100644 --- a/src/visitor.rs +++ b/src/visitor.rs @@ -15,9 +15,8 @@ use lightningcss::{ }; use swc_atoms::Atom; use swc_common::{Span, DUMMY_SP}; -use swc_ecma_ast::{ - AssignExpr, AssignOp, BindingIdent, BlockStmt, CallExpr, Callee, ComputedPropName, Decl, Expr, ExprOrSpread, ExprStmt, FnDecl, FnExpr, Function, Ident, IfStmt, ImportDecl, ImportNamedSpecifier, ImportSpecifier, JSXAttr, JSXAttrName, JSXAttrOrSpread, JSXAttrValue, JSXElement, JSXElementName, JSXExpr, JSXExprContainer, JSXFragment, KeyValueProp, Lit, MemberProp, Module, ModuleDecl, ModuleItem, Null, ObjectLit, Prop, PropName, PropOrSpread, ReturnStmt, Stmt, Str, VarDecl -}; +use swc_ecma_ast::*; +use swc_ecma_utils::quote_ident; use swc_ecma_visit::{ noop_visit_mut_type, noop_visit_type, Visit, VisitAll, VisitAllWith, VisitMut, VisitMutWith, VisitWith, @@ -424,12 +423,52 @@ pub fn insert_import_module_decl(module: &mut Module, last_import_index: usize, pub struct ModuleMutVisitor { pub all_style: Rc>>, - pub platform: Platform + pub platform: Platform, + pub enable_cascading: bool, } impl ModuleMutVisitor { pub fn new(all_style: Rc>>, platform: Platform) -> Self { - ModuleMutVisitor { all_style, platform } + ModuleMutVisitor { all_style, platform, enable_cascading: true } + } +} + +impl ModuleMutVisitor { + fn get_cascading_visitor (&self) -> impl VisitMut { + struct MyVisitor; + impl VisitMut for MyVisitor { + fn visit_mut_function(&mut self, _: &mut Function) {} + fn visit_mut_arrow_expr(&mut self, _: &mut ArrowExpr) {} + fn visit_mut_return_stmt(&mut self, stmt: &mut ReturnStmt) { + let arg = &mut stmt.arg; + if arg.is_some() { + let expr = arg.take().unwrap(); + *arg = Some(Box::new(Expr::Call(CallExpr { + span: DUMMY_SP, + callee: Callee::Expr(Box::new(Expr::Ident(quote_ident!("MyMethod")))), + args: vec![ExprOrSpread { expr, spread: None }], + type_args: None, + }))) + } + } + } + MyVisitor {} + } + fn enable_cascading_for_class (&self, class: &mut Box) { + let render_function = class.body.iter_mut().find(|item| { + // Todo: support ClassProperty + if let ClassMember::Method(ClassMethod { key, .. }) = item { + return key.is_ident() && key.as_ident().unwrap().sym == "render"; + } + return false; + }); + if render_function.is_some() { + let body = &mut render_function.unwrap().as_mut_method().unwrap().function; + body.visit_mut_children_with(&mut self.get_cascading_visitor()); + }; + } + fn enable_cascading_for_function (&self, body: &mut Box) { + body.visit_mut_children_with(&mut &mut self.get_cascading_visitor()); } } @@ -584,9 +623,35 @@ impl VisitMut for ModuleMutVisitor { // 将 inner_style_stmt 插入到 module 的最后一条 import 语句之后 let mut last_import_index = 0; - for (index, stmt) in module.body.iter().enumerate() { - if let ModuleItem::ModuleDecl(ModuleDecl::Import(_)) = stmt { - last_import_index = index; + for (index, stmt) in module.body.iter_mut().enumerate() { + if stmt.is_module_decl() { + let module_decl = stmt.as_mut_module_decl().unwrap(); + if let ModuleDecl::Import(_) = module_decl { + last_import_index = index; + } + // 开启层叠功能 + if self.enable_cascading { + match module_decl { + ModuleDecl::ExportDefaultDecl(ExportDefaultDecl { decl, .. }) => { + match decl { + // export defualt class {} + DefaultDecl::Class(ClassExpr { class, .. }) => { + self.enable_cascading_for_class(class); + }, + // export defualt function () {} + DefaultDecl::Fn(FnExpr { function, ..}) => { + self.enable_cascading_for_function(function); + } + _ => () + } + }, + // export default Index + ModuleDecl::ExportDefaultExpr(ExportDefaultExpr { expr, .. }) => { + // Todo: suport ExportDefaultExpr + }, + _ => () + } + } } } if last_import_index != 0 { From 4c15e380fe2ef805c485a7313c84fbbc031e16e0 Mon Sep 17 00:00:00 2001 From: Chen-jj <798095202@qq.com> Date: Wed, 6 Mar 2024 18:44:54 +0800 Subject: [PATCH 002/236] =?UTF-8?q?feat:=20=E5=AE=8C=E5=96=84=E7=BB=84?= =?UTF-8?q?=E4=BB=B6=E8=BF=94=E5=9B=9E=E5=80=BC=E5=8C=85=E8=A3=B9=E7=94=A8?= =?UTF-8?q?=E4=BA=8E=E5=B1=82=E5=8F=A0=E7=9A=84=E5=87=BD=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/constants.rs | 1 + src/visitor.rs | 20 +++++++++++++++++--- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/src/constants.rs b/src/constants.rs index 4810714..f6e5a37 100644 --- a/src/constants.rs +++ b/src/constants.rs @@ -3,6 +3,7 @@ pub const CONVERT_STYLE_PX_FN: &'static str = "convertNumber2VP"; pub const INNER_STYLE: &'static str = "__inner_style__"; pub const INNER_STYLE_DATA: &'static str = "__inner_style_data__"; pub const NESTING_STYLE: &'static str = "__nesting_style__"; +pub const COMBINE_NESTING_STYLE: &'static str = "__combine_nesting_style__"; pub const NESTINT_STYLE_DATA: &'static str = "__nesting_style_data__"; pub const CALC_DYMAMIC_STYLE: &'static str = "calcDynamicStyle"; diff --git a/src/visitor.rs b/src/visitor.rs index fc6f5aa..7a19f6f 100644 --- a/src/visitor.rs +++ b/src/visitor.rs @@ -23,7 +23,7 @@ use swc_ecma_visit::{ }; use crate::{ - constants::{CALC_DYMAMIC_STYLE, CONVERT_STYLE_PX_FN, INNER_STYLE, INNER_STYLE_DATA, NESTING_STYLE, NESTINT_STYLE_DATA, RN_CONVERT_STYLE_PX_FN, RN_CONVERT_STYLE_VU_FN}, parse_style_properties::parse_style_properties, scraper::Element, style_parser::StyleValue, style_propetries::{style_value_type::StyleValueType, traits::ToStyleValue, unit::{Platform, PropertyTuple}}, utils::{ + constants::{CALC_DYMAMIC_STYLE, COMBINE_NESTING_STYLE, CONVERT_STYLE_PX_FN, INNER_STYLE, INNER_STYLE_DATA, NESTING_STYLE, NESTINT_STYLE_DATA, RN_CONVERT_STYLE_PX_FN, RN_CONVERT_STYLE_VU_FN}, parse_style_properties::parse_style_properties, scraper::Element, style_parser::StyleValue, style_propetries::{style_value_type::StyleValueType, traits::ToStyleValue, unit::{Platform, PropertyTuple}}, utils::{ create_qualname, get_callee_attributes, prefix_style_key, recursion_jsx_member, split_selector, to_camel_case, to_kebab_case } }; @@ -409,6 +409,12 @@ pub fn insert_import_module_decl(module: &mut Module, last_import_index: usize, // ))), imported: None, is_type_only: false, + }), + ImportSpecifier::Named(ImportNamedSpecifier { + span: DUMMY_SP, + local: Ident::new(COMBINE_NESTING_STYLE.into(), DUMMY_SP), + imported: None, + is_type_only: false, }) ], src: Box::new(Str::from("@tarojs/runtime")), @@ -445,8 +451,16 @@ impl ModuleMutVisitor { let expr = arg.take().unwrap(); *arg = Some(Box::new(Expr::Call(CallExpr { span: DUMMY_SP, - callee: Callee::Expr(Box::new(Expr::Ident(quote_ident!("MyMethod")))), - args: vec![ExprOrSpread { expr, spread: None }], + callee: Callee::Expr(Box::new(Expr::Ident(quote_ident!(COMBINE_NESTING_STYLE)))), + args: vec![ + ExprOrSpread { expr, spread: None }, + ExprOrSpread { expr: Box::new(Expr::Call(CallExpr { + span: DUMMY_SP, + callee: Callee::Expr(Box::new(Expr::Ident(quote_ident!(NESTING_STYLE)))), + args: vec![], + type_args: None + })), spread: None } + ], type_args: None, }))) } From fca94e65f6e92e1bcf54f37f84fd2a709590d25a Mon Sep 17 00:00:00 2001 From: Chen-jj <798095202@qq.com> Date: Wed, 6 Mar 2024 20:36:27 +0800 Subject: [PATCH 003/236] =?UTF-8?q?feat:=20=E6=96=B0=E5=A2=9Epaser?= =?UTF-8?q?=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- index.d.ts | 6 +++++- src/lib.rs | 15 ++++++++++++--- src/style_write.rs | 5 ++++- src/visitor.rs | 8 ++++---- 4 files changed, 25 insertions(+), 9 deletions(-) diff --git a/index.d.ts b/index.d.ts index dc702d7..241bed7 100644 --- a/index.d.ts +++ b/index.d.ts @@ -3,4 +3,8 @@ /* auto-generated by NAPI-RS */ -export function parse(component: string, styles: Array, platformString: string): string +export interface ParseOptions { + platformString: string + isEnableNesting?: boolean +} +export function parse(component: string, styles: Array, options: ParseOptions): string diff --git a/src/lib.rs b/src/lib.rs index 1d8c4dd..71040d1 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -25,15 +25,24 @@ mod parse_style_properties; // component: jsx的code string // styles: css的code string // platform_string: "ReactNative" | "Harmony" + +#[napi(object)] +pub struct ParseOptions { + pub platform_string: String, + pub is_enable_nesting: Option, +} + #[napi] -pub fn parse(component: String, styles: Vec, platform_string: String) -> String { +pub fn parse(component: String, styles: Vec, options: ParseOptions) -> String { - let platform = match platform_string.as_str() { + let platform = match options.platform_string.as_str() { "ReactNative" => Platform::ReactNative, "Harmony" => Platform::Harmony, _ => Platform::Harmony }; + let is_enable_nesting = options.is_enable_nesting.map_or(false, |item| item); + // 解析组件文件 let cm: Lrc = Default::default(); let comments = SingleThreadedComments::default(); @@ -54,6 +63,7 @@ pub fn parse(component: String, styles: Vec, platform_string: String) -> style_data.style_record.clone(), style_data.pesudo_style_record.clone(), style_data.all_style.clone(), + is_enable_nesting, ); style_write.write(platform); @@ -72,4 +82,3 @@ pub fn parse(component: String, styles: Vec, platform_string: String) -> let code = String::from_utf8(buf).unwrap().replace("\r\n", "\n"); code } - diff --git a/src/style_write.rs b/src/style_write.rs index da184bf..ad3e5f9 100644 --- a/src/style_write.rs +++ b/src/style_write.rs @@ -14,6 +14,7 @@ pub struct StyleWrite<'i> { pub style_record: Rc)>>>>, pub pesudo_style_record: Rc)>)>>>>, pub all_style: Rc>>, + pub is_enable_nesting: bool, } impl<'i> StyleWrite<'i> { @@ -23,6 +24,7 @@ impl<'i> StyleWrite<'i> { style_record: Rc)>>>>, pesudo_style_record: Rc)>)>>>>, all_style: Rc>>, + is_enable_nesting: bool ) -> Self { StyleWrite { module, @@ -30,6 +32,7 @@ impl<'i> StyleWrite<'i> { style_record, pesudo_style_record, all_style, + is_enable_nesting, } } @@ -50,7 +53,7 @@ impl<'i> StyleWrite<'i> { } // 插入样式表 { - let mut insert_mut_visitor = ModuleMutVisitor::new(self.all_style.clone(), platform.clone()); + let mut insert_mut_visitor = ModuleMutVisitor::new(self.all_style.clone(), platform.clone(), self.is_enable_nesting); self .module .borrow_mut() diff --git a/src/visitor.rs b/src/visitor.rs index 7a19f6f..06daf6e 100644 --- a/src/visitor.rs +++ b/src/visitor.rs @@ -430,12 +430,12 @@ pub fn insert_import_module_decl(module: &mut Module, last_import_index: usize, pub struct ModuleMutVisitor { pub all_style: Rc>>, pub platform: Platform, - pub enable_cascading: bool, + pub is_enable_nesting: bool, } impl ModuleMutVisitor { - pub fn new(all_style: Rc>>, platform: Platform) -> Self { - ModuleMutVisitor { all_style, platform, enable_cascading: true } + pub fn new(all_style: Rc>>, platform: Platform, is_enable_nesting: bool) -> Self { + ModuleMutVisitor { all_style, platform, is_enable_nesting } } } @@ -568,7 +568,7 @@ impl VisitMut for ModuleMutVisitor { last_import_index = index; } // 开启层叠功能 - if self.enable_cascading { + if self.is_enable_nesting { match module_decl { ModuleDecl::ExportDefaultDecl(ExportDefaultDecl { decl, .. }) => { match decl { From a5bb7859dcd15b1fd2dd0bc5df4005adb5fbaaea Mon Sep 17 00:00:00 2001 From: heiazu <13560201846@163.com> Date: Wed, 6 Mar 2024 22:25:50 +0800 Subject: [PATCH 004/236] =?UTF-8?q?feat:=20=E5=A2=9E=E5=8A=A0=E6=9D=83?= =?UTF-8?q?=E9=87=8D=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- __test__/fixure/pesudo.jsx | 2 +- __test__/fixure/pesudo.scss | 11 +- __test__/index.js | 5 +- __test__/index.spec.mjs | 10 +- __test__/index.spec.mjs.md | 266 +++++++++++++++++------------------ __test__/index.spec.mjs.snap | Bin 4769 -> 4839 bytes src/lib.rs | 7 +- src/style_parser.rs | 10 +- src/visitor.rs | 19 ++- 9 files changed, 181 insertions(+), 149 deletions(-) diff --git a/__test__/fixure/pesudo.jsx b/__test__/fixure/pesudo.jsx index 5690998..f1be322 100644 --- a/__test__/fixure/pesudo.jsx +++ b/__test__/fixure/pesudo.jsx @@ -1,7 +1,7 @@ import { View, Text } from '@tarojs/components' import './pesudo.scss' -function Pesudo() { +export default function Pesudo() { return asdasdasdasdasd diff --git a/__test__/fixure/pesudo.scss b/__test__/fixure/pesudo.scss index 25c3630..e7601a0 100644 --- a/__test__/fixure/pesudo.scss +++ b/__test__/fixure/pesudo.scss @@ -8,7 +8,10 @@ color: red; } -.a, .a .b { - font-size: 20px; - text-overflow: ellipsis; -} \ No newline at end of file + +.aaa { + font-size: 20px; + -webkit-line-clamp: 2; + text-overflow: ellipsis; + color: #00f; +} diff --git a/__test__/index.js b/__test__/index.js index 290010d..cbe26f5 100644 --- a/__test__/index.js +++ b/__test__/index.js @@ -4,6 +4,9 @@ process.env.platform = 'arm64' const { parse } = require('../index.js') const component = fs.readFileSync(path.resolve(__dirname, 'fixure/pesudo.jsx'), 'utf8') const css1 = fs.readFileSync(path.resolve(__dirname, 'fixure/pesudo.scss'), 'utf8') -const code = parse(component, [css1], "Harmony") +const code = parse(component, [css1], { + platformString: 'Harmony', + isEnableNesting: true +}) console.log(code) \ No newline at end of file diff --git a/__test__/index.spec.mjs b/__test__/index.spec.mjs index 14775f4..7532feb 100644 --- a/__test__/index.spec.mjs +++ b/__test__/index.spec.mjs @@ -14,7 +14,10 @@ test('test parse Harmony', (t) => { const css1 = fs.readFileSync(path.resolve(__dirname, 'fixure/Mod.scss'), 'utf8') const css2 = fs.readFileSync(path.resolve(__dirname, 'fixure/test.scss'), 'utf8') - const code = parse(jsx, [css1, css2], "Harmony") + const code = parse(jsx, [css1, css2], { + platformString: 'Harmony', + isEnableNesting: true + }) t.snapshot(code) }) @@ -23,6 +26,9 @@ test('test parse ReactNative', (t) => { const css1 = fs.readFileSync(path.resolve(__dirname, 'fixure/Mod.scss'), 'utf8') const css2 = fs.readFileSync(path.resolve(__dirname, 'fixure/test.scss'), 'utf8') - const code = parse(jsx, [css1, css2], "ReactNative") + const code = parse(jsx, [css1, css2], { + platformString: 'ReactNative', + isEnableNesting: true + }) t.snapshot(code) }) diff --git a/__test__/index.spec.mjs.md b/__test__/index.spec.mjs.md index 97502e0..eff2d9d 100644 --- a/__test__/index.spec.mjs.md +++ b/__test__/index.spec.mjs.md @@ -10,6 +10,7 @@ Generated by [AVA](https://avajs.dev). `import React from 'react';␊ import './Mod.scss';␊ + import { calcDynamicStyle, convertNumber2VP, __combine_nesting_style__ } from "@tarojs/runtime";␊ let __inner_style_data__;␊ function __inner_style__() {␊ if (__inner_style_data__) return __inner_style_data__;␊ @@ -326,7 +327,6 @@ Generated by [AVA](https://avajs.dev). };␊ return __inner_style_data__;␊ }␊ - import { calcDynamicStyle, convertNumber2VP } from "@tarojs/runtime";␊ function Bb() {␊ return /*#__PURE__*/ React.createElement("div", {␊ className: boxClass.join(' '),␊ @@ -935,6 +935,138 @@ Generated by [AVA](https://avajs.dev). import { StyleSheet } from "react-native";␊ import { scalePx2dp, scaleVu2dp } from "@tarojs/runtime-rn";␊ function ignoreStyleFileCache() {}␊ + function Bb() {␊ + return /*#__PURE__*/ React.createElement("div", {␊ + className: boxClass.join(' '),␊ + style: calcDynamicStyle(__inner_style__(), boxClass.join(' '), bannerStyle)␊ + }, /*#__PURE__*/ React.createElement("div", {␊ + className: "cnt_row1",␊ + style: {␊ + alignItems: "center",␊ + display: "flex",␊ + gap: scalePx2dp(10),␊ + height: scalePx2dp(50),␊ + justifyContent: "flex-start",␊ + position: "relative",␊ + width: scalePx2dp(311)␊ + }␊ + }, /*#__PURE__*/ React.createElement("img", {␊ + className: "img",␊ + src: "//img12.360buyimg.com/img/jfs/t1/100881/15/44805/18567/64f58062F1b45e0cb/caf065a7410087ce.png",␊ + style: {␊ + width: scalePx2dp(50),␊ + height: scalePx2dp(50)␊ + }␊ + }), /*#__PURE__*/ React.createElement("div", {␊ + className: "cnt_col",␊ + style: {␊ + display: "flex",␊ + flexDirection: "column",␊ + alignItems: "flex-start",␊ + justifyContent: "center",␊ + gap: scalePx2dp(8),␊ + width: scalePx2dp(145),␊ + height: scalePx2dp(50)␊ + }␊ + }, /*#__PURE__*/ React.createElement("span", {␊ + className: "line1 instruction1",␊ + style: {␊ + whiteSpace: "nowrap",␊ + overflow: "hidden",␊ + flex: \`2 2 10%\`,␊ + borderRadius: "50%",␊ + alignItems: "flex-end",␊ + color: "#000",␊ + fontSize: scalePx2dp(16),␊ + flexShrink: 0,␊ + width: scalePx2dp(116),␊ + display: "flex"␊ + }␊ + }, "巴拉巴拉小魔仙"), /*#__PURE__*/ React.createElement("span", {␊ + className: "line1 txt",␊ + style: {␊ + whiteSpace: "nowrap",␊ + overflow: "hidden",␊ + flex: \`2 2 10%\`,␊ + borderRadius: "50%",␊ + alignItems: "flex-end",␊ + color: "#999",␊ + fontSize: scalePx2dp(12),␊ + flexShrink: 0,␊ + display: "flex"␊ + }␊ + }, "成员: 4000+")), /*#__PURE__*/ React.createElement("div", {␊ + className: "cnt_row2",␊ + style: {␊ + alignItems: "flex-start",␊ + borderColor: "#999",␊ + borderRadius: scalePx2dp(12),␊ + borderStyle: "solid",␊ + borderTopLeftRadius: scalePx2dp(1000),␊ + borderWidth: scalePx2dp(1),␊ + display: "flex",␊ + flexShrink: 0,␊ + gap: scalePx2dp(-94),␊ + height: scalePx2dp(23),␊ + justifyContent: "space-between",␊ + left: scalePx2dp(201),␊ + paddingBottom: scalePx2dp(4),␊ + paddingLeft: scalePx2dp(8),␊ + paddingRight: scalePx2dp(8),␊ + paddingTop: scalePx2dp(4),␊ + position: "absolute",␊ + top: scalePx2dp(3),␊ + width: scalePx2dp(110),␊ + zIndex: 12␊ + }␊ + }, this.getDom(), /*#__PURE__*/ React.createElement("img", {␊ + className: "icon1",␊ + src: "//img11.360buyimg.com/img/jfs/t1/175578/35/40256/1981/64f58062Fddaf1a21/f1111d9988a65ccc.png",␊ + style: {␊ + width: scalePx2dp(15),␊ + height: scalePx2dp(15)␊ + }␊ + }), /*#__PURE__*/ React.createElement("span", {␊ + className: "instruction2",␊ + style: {␊ + color: "#999",␊ + fontSize: scalePx2dp(11),␊ + textAlign: "center",␊ + flexShrink: 0,␊ + overflow: "hidden"␊ + }␊ + }, "slslsl-jsj"), /*#__PURE__*/ React.createElement("span", {␊ + className: "txt1",␊ + style: {␊ + color: "#222",␊ + fontSize: scalePx2dp(11),␊ + textAlign: "center",␊ + flexShrink: 0␊ + }␊ + }, "复制"))), /*#__PURE__*/ React.createElement("span", {␊ + className: "line1 txt",␊ + style: {␊ + whiteSpace: "nowrap",␊ + overflow: "hidden",␊ + flex: \`2 2 10%\`,␊ + borderRadius: "50%",␊ + alignItems: "flex-end",␊ + color: "#999",␊ + fontSize: scalePx2dp(12),␊ + flexShrink: 0,␊ + display: "flex"␊ + }␊ + }, "成员123: 4000+"), /*#__PURE__*/ React.createElement("div", {␊ + className: "cnt_row4"␊ + }, /*#__PURE__*/ React.createElement("img", {␊ + className: "icon2",␊ + src: "//img11.360buyimg.com/img/jfs/t1/175578/35/40256/1981/64f58062Fddaf1a21/f1111d9988a65ccc.png"␊ + }), /*#__PURE__*/ React.createElement("span", {␊ + className: "instruction3"␊ + }, "slslsl-jsj"), /*#__PURE__*/ React.createElement("span", {␊ + className: "txt3"␊ + }, "复制")));␊ + }␊ let __inner_style_data__;␊ function __inner_style__() {␊ if (__inner_style_data__) return __inner_style_data__;␊ @@ -1161,138 +1293,6 @@ Generated by [AVA](https://avajs.dev). };␊ return __inner_style_data__;␊ }␊ - function Bb() {␊ - return /*#__PURE__*/ React.createElement("div", {␊ - className: boxClass.join(' '),␊ - style: calcDynamicStyle(__inner_style__(), boxClass.join(' '), bannerStyle)␊ - }, /*#__PURE__*/ React.createElement("div", {␊ - className: "cnt_row1",␊ - style: {␊ - alignItems: "center",␊ - display: "flex",␊ - gap: scalePx2dp(10),␊ - height: scalePx2dp(50),␊ - justifyContent: "flex-start",␊ - position: "relative",␊ - width: scalePx2dp(311)␊ - }␊ - }, /*#__PURE__*/ React.createElement("img", {␊ - className: "img",␊ - src: "//img12.360buyimg.com/img/jfs/t1/100881/15/44805/18567/64f58062F1b45e0cb/caf065a7410087ce.png",␊ - style: {␊ - width: scalePx2dp(50),␊ - height: scalePx2dp(50)␊ - }␊ - }), /*#__PURE__*/ React.createElement("div", {␊ - className: "cnt_col",␊ - style: {␊ - display: "flex",␊ - flexDirection: "column",␊ - alignItems: "flex-start",␊ - justifyContent: "center",␊ - gap: scalePx2dp(8),␊ - width: scalePx2dp(145),␊ - height: scalePx2dp(50)␊ - }␊ - }, /*#__PURE__*/ React.createElement("span", {␊ - className: "line1 instruction1",␊ - style: {␊ - whiteSpace: "nowrap",␊ - overflow: "hidden",␊ - flex: \`2 2 10%\`,␊ - borderRadius: "50%",␊ - alignItems: "flex-end",␊ - color: "#000",␊ - fontSize: scalePx2dp(16),␊ - flexShrink: 0,␊ - width: scalePx2dp(116),␊ - display: "flex"␊ - }␊ - }, "巴拉巴拉小魔仙"), /*#__PURE__*/ React.createElement("span", {␊ - className: "line1 txt",␊ - style: {␊ - whiteSpace: "nowrap",␊ - overflow: "hidden",␊ - flex: \`2 2 10%\`,␊ - borderRadius: "50%",␊ - alignItems: "flex-end",␊ - color: "#999",␊ - fontSize: scalePx2dp(12),␊ - flexShrink: 0,␊ - display: "flex"␊ - }␊ - }, "成员: 4000+")), /*#__PURE__*/ React.createElement("div", {␊ - className: "cnt_row2",␊ - style: {␊ - alignItems: "flex-start",␊ - borderColor: "#999",␊ - borderRadius: scalePx2dp(12),␊ - borderStyle: "solid",␊ - borderTopLeftRadius: scalePx2dp(1000),␊ - borderWidth: scalePx2dp(1),␊ - display: "flex",␊ - flexShrink: 0,␊ - gap: scalePx2dp(-94),␊ - height: scalePx2dp(23),␊ - justifyContent: "space-between",␊ - left: scalePx2dp(201),␊ - paddingBottom: scalePx2dp(4),␊ - paddingLeft: scalePx2dp(8),␊ - paddingRight: scalePx2dp(8),␊ - paddingTop: scalePx2dp(4),␊ - position: "absolute",␊ - top: scalePx2dp(3),␊ - width: scalePx2dp(110),␊ - zIndex: 12␊ - }␊ - }, this.getDom(), /*#__PURE__*/ React.createElement("img", {␊ - className: "icon1",␊ - src: "//img11.360buyimg.com/img/jfs/t1/175578/35/40256/1981/64f58062Fddaf1a21/f1111d9988a65ccc.png",␊ - style: {␊ - width: scalePx2dp(15),␊ - height: scalePx2dp(15)␊ - }␊ - }), /*#__PURE__*/ React.createElement("span", {␊ - className: "instruction2",␊ - style: {␊ - color: "#999",␊ - fontSize: scalePx2dp(11),␊ - textAlign: "center",␊ - flexShrink: 0,␊ - overflow: "hidden"␊ - }␊ - }, "slslsl-jsj"), /*#__PURE__*/ React.createElement("span", {␊ - className: "txt1",␊ - style: {␊ - color: "#222",␊ - fontSize: scalePx2dp(11),␊ - textAlign: "center",␊ - flexShrink: 0␊ - }␊ - }, "复制"))), /*#__PURE__*/ React.createElement("span", {␊ - className: "line1 txt",␊ - style: {␊ - whiteSpace: "nowrap",␊ - overflow: "hidden",␊ - flex: \`2 2 10%\`,␊ - borderRadius: "50%",␊ - alignItems: "flex-end",␊ - color: "#999",␊ - fontSize: scalePx2dp(12),␊ - flexShrink: 0,␊ - display: "flex"␊ - }␊ - }, "成员123: 4000+"), /*#__PURE__*/ React.createElement("div", {␊ - className: "cnt_row4"␊ - }, /*#__PURE__*/ React.createElement("img", {␊ - className: "icon2",␊ - src: "//img11.360buyimg.com/img/jfs/t1/175578/35/40256/1981/64f58062Fddaf1a21/f1111d9988a65ccc.png"␊ - }), /*#__PURE__*/ React.createElement("span", {␊ - className: "instruction3"␊ - }, "slslsl-jsj"), /*#__PURE__*/ React.createElement("span", {␊ - className: "txt3"␊ - }, "复制")));␊ - }␊ function Cc() {␊ return
␊ ␊ diff --git a/__test__/index.spec.mjs.snap b/__test__/index.spec.mjs.snap index 02be3bab35f8a5e557adfc223705c1efde4c9f5f..e14342ad931f7e4aaf5c14541b937e8519feb973 100644 GIT binary patch literal 4839 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 N?*D374eaF5006vNY&8G? literal 4769 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, options: ParseOptions) -> S _ => Platform::Harmony }; - let is_enable_nesting = options.is_enable_nesting.map_or(false, |item| item); + let mut is_enable_nesting = options.is_enable_nesting.map_or(false, |item| item); // 解析组件文件 let cm: Lrc = Default::default(); @@ -55,6 +55,11 @@ pub fn parse(component: String, styles: Vec, options: ParseOptions) -> S style_parser.parse(&css); let style_data = style_parser.calc(); + // 判断计算的结果是否会含有嵌套选择器 + if is_enable_nesting { + is_enable_nesting = style_data.has_nesting; + } + let program = Rc::new(RefCell::new(document.program.as_ref().unwrap().clone())); let jsx_record = Rc::new(RefCell::new(document.jsx_record.as_ref().unwrap().clone())); let mut style_write = StyleWrite::new( diff --git a/src/style_parser.rs b/src/style_parser.rs index e7f4127..78a4142 100644 --- a/src/style_parser.rs +++ b/src/style_parser.rs @@ -12,6 +12,7 @@ pub struct StyleData<'i> { pub style_record: Rc)>>>>, pub pesudo_style_record: Rc)>)>>>>, pub all_style: Rc>>, + pub has_nesting: bool } @@ -97,7 +98,9 @@ impl<'i> StyleParser<'i> { let mut style_record = HashMap::new(); let mut pesudo_style_record = HashMap::new(); let mut final_all_style = self.calc_style_record(&mut all_style); - + // 是否含有嵌套选择器 + let mut has_nesting = false; + // final_all_style 转换为驼峰命名 let mut final_all_style = final_all_style.iter_mut().map(|(selector, style_value)| { let properties = style_value.declaration.declarations.iter().map(|property| { @@ -114,6 +117,10 @@ impl<'i> StyleParser<'i> { ) }) .collect::>(); // Specify the lifetime of the tuple elements to match the input data + // 判断是否含有嵌套选择器 + if selector.contains(" ") { + has_nesting = true + } (selector.to_owned(), properties) }) .collect::>(); @@ -192,6 +199,7 @@ impl<'i> StyleParser<'i> { style_record: Rc::new(RefCell::new(final_style_record)), pesudo_style_record: Rc::new(RefCell::new(final_pesudo_style_record)), all_style: Rc::new(RefCell::new(final_all_style)), + has_nesting } } diff --git a/src/visitor.rs b/src/visitor.rs index 06daf6e..72ed638 100644 --- a/src/visitor.rs +++ b/src/visitor.rs @@ -493,8 +493,6 @@ impl VisitMut for ModuleMutVisitor { let binding = self.all_style.borrow(); let style_entries: BTreeMap<_, _> = binding.iter().collect(); - - // __inner_style__普通样式对象 let mut final_style_entries: BTreeMap> = BTreeMap::new(); // __nesting_style__嵌套样式对象 @@ -597,6 +595,7 @@ impl VisitMut for ModuleMutVisitor { } // 插入平台所需的运行时代码, 如: import { calcDynamicStyle } from '@tarojs/runtime' last_import_index = insert_import_module_decl(module, last_import_index, self.platform.clone()); + last_import_index += 1; let mut var_checker = VarChecker { found: false }; module.visit_with(&mut var_checker); @@ -628,11 +627,18 @@ impl VisitMut for ModuleMutVisitor { .insert(last_import_index, ModuleItem::Stmt(style_func)); } - // 插入嵌套样式 - let nesting_style_object = Box::new(Expr::Array(ArrayLit { + if self.is_enable_nesting { + // 插入嵌套样式 + + let mut nestings = nesting_style_entries.into_iter().collect::, Vec)>>(); + // 根据类的数量进行权重排序 + nestings.sort_by(|a, b| { + a.0.len().cmp(&b.0.len()) + }); + + let nesting_style_object = Box::new(Expr::Array(ArrayLit { span: DUMMY_SP, - elems: nesting_style_entries - .iter() + elems: nestings.into_iter() .map(|(key, value)| { Some(ExprOrSpread { spread: None, @@ -675,6 +681,7 @@ impl VisitMut for ModuleMutVisitor { module .body .insert(last_import_index, ModuleItem::Stmt(style_func)) + } } } From 76ab0302f401f02883d78da16ea2820dcb2122c9 Mon Sep 17 00:00:00 2001 From: heiazu <13560201846@163.com> Date: Wed, 6 Mar 2024 22:26:46 +0800 Subject: [PATCH 005/236] 0.0.34 --- CHANGELOG.md | 13 +++++++++++++ npm/android-arm-eabi/package.json | 2 +- npm/android-arm64/package.json | 2 +- npm/darwin-arm64/package.json | 2 +- npm/darwin-universal/package.json | 2 +- npm/darwin-x64/package.json | 2 +- npm/linux-arm-gnueabihf/package.json | 2 +- npm/linux-arm64-gnu/package.json | 2 +- npm/linux-arm64-musl/package.json | 2 +- npm/linux-x64-gnu/package.json | 2 +- npm/linux-x64-musl/package.json | 2 +- npm/win32-arm64-msvc/package.json | 2 +- npm/win32-ia32-msvc/package.json | 2 +- npm/win32-x64-msvc/package.json | 2 +- package.json | 2 +- 15 files changed, 27 insertions(+), 14 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 664ed55..8931474 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,16 @@ +## [0.0.34](https://github.com/NervJS/parse-css-to-stylesheet/compare/v0.0.33...v0.0.34) (2024-03-06) + + +### Features + +* 给组件返回值包裹用于层叠的函数 ([aa0c128](https://github.com/NervJS/parse-css-to-stylesheet/commit/aa0c128d1b21d1ceff084ee471cd91dfa4dc7939)) +* 完善组件返回值包裹用于层叠的函数 ([4c15e38](https://github.com/NervJS/parse-css-to-stylesheet/commit/4c15e380fe2ef805c485a7313c84fbbc031e16e0)) +* 新增paser配置 ([fca94e6](https://github.com/NervJS/parse-css-to-stylesheet/commit/fca94e65f6e92e1bcf54f37f84fd2a709590d25a)) +* 增加嵌套拆分逻辑 ([4af4b9a](https://github.com/NervJS/parse-css-to-stylesheet/commit/4af4b9ad0509b815041141cdb943b61eca217d18)) +* 增加权重逻辑 ([a5bb785](https://github.com/NervJS/parse-css-to-stylesheet/commit/a5bb7859dcd15b1fd2dd0bc5df4005adb5fbaaea)) + + + ## [0.0.33](https://github.com/NervJS/parse-css-to-stylesheet/compare/v0.0.32...v0.0.33) (2024-03-05) diff --git a/npm/android-arm-eabi/package.json b/npm/android-arm-eabi/package.json index e35c2b3..bafc045 100644 --- a/npm/android-arm-eabi/package.json +++ b/npm/android-arm-eabi/package.json @@ -1,6 +1,6 @@ { "name": "@tarojs/parse-css-to-stylesheet-android-arm-eabi", - "version": "0.0.33", + "version": "0.0.34", "os": [ "android" ], diff --git a/npm/android-arm64/package.json b/npm/android-arm64/package.json index 8d3c6cf..0d8486a 100644 --- a/npm/android-arm64/package.json +++ b/npm/android-arm64/package.json @@ -1,6 +1,6 @@ { "name": "@tarojs/parse-css-to-stylesheet-android-arm64", - "version": "0.0.33", + "version": "0.0.34", "os": [ "android" ], diff --git a/npm/darwin-arm64/package.json b/npm/darwin-arm64/package.json index 105a083..906a460 100644 --- a/npm/darwin-arm64/package.json +++ b/npm/darwin-arm64/package.json @@ -1,6 +1,6 @@ { "name": "@tarojs/parse-css-to-stylesheet-darwin-arm64", - "version": "0.0.33", + "version": "0.0.34", "os": [ "darwin" ], diff --git a/npm/darwin-universal/package.json b/npm/darwin-universal/package.json index 36d5d2f..c33dfe0 100644 --- a/npm/darwin-universal/package.json +++ b/npm/darwin-universal/package.json @@ -1,6 +1,6 @@ { "name": "@tarojs/parse-css-to-stylesheet-darwin-universal", - "version": "0.0.33", + "version": "0.0.34", "os": [ "darwin" ], diff --git a/npm/darwin-x64/package.json b/npm/darwin-x64/package.json index bc26d07..8584ae4 100644 --- a/npm/darwin-x64/package.json +++ b/npm/darwin-x64/package.json @@ -1,6 +1,6 @@ { "name": "@tarojs/parse-css-to-stylesheet-darwin-x64", - "version": "0.0.33", + "version": "0.0.34", "os": [ "darwin" ], diff --git a/npm/linux-arm-gnueabihf/package.json b/npm/linux-arm-gnueabihf/package.json index b49f4a6..b364a61 100644 --- a/npm/linux-arm-gnueabihf/package.json +++ b/npm/linux-arm-gnueabihf/package.json @@ -1,6 +1,6 @@ { "name": "@tarojs/parse-css-to-stylesheet-linux-arm-gnueabihf", - "version": "0.0.33", + "version": "0.0.34", "os": [ "linux" ], diff --git a/npm/linux-arm64-gnu/package.json b/npm/linux-arm64-gnu/package.json index 3db83d1..f447be0 100644 --- a/npm/linux-arm64-gnu/package.json +++ b/npm/linux-arm64-gnu/package.json @@ -1,6 +1,6 @@ { "name": "@tarojs/parse-css-to-stylesheet-linux-arm64-gnu", - "version": "0.0.33", + "version": "0.0.34", "os": [ "linux" ], diff --git a/npm/linux-arm64-musl/package.json b/npm/linux-arm64-musl/package.json index 59d9c2c..2daf7de 100644 --- a/npm/linux-arm64-musl/package.json +++ b/npm/linux-arm64-musl/package.json @@ -1,6 +1,6 @@ { "name": "@tarojs/parse-css-to-stylesheet-linux-arm64-musl", - "version": "0.0.33", + "version": "0.0.34", "os": [ "linux" ], diff --git a/npm/linux-x64-gnu/package.json b/npm/linux-x64-gnu/package.json index 020ba66..073ca12 100644 --- a/npm/linux-x64-gnu/package.json +++ b/npm/linux-x64-gnu/package.json @@ -1,6 +1,6 @@ { "name": "@tarojs/parse-css-to-stylesheet-linux-x64-gnu", - "version": "0.0.33", + "version": "0.0.34", "os": [ "linux" ], diff --git a/npm/linux-x64-musl/package.json b/npm/linux-x64-musl/package.json index 2255853..2bf6e0f 100644 --- a/npm/linux-x64-musl/package.json +++ b/npm/linux-x64-musl/package.json @@ -1,6 +1,6 @@ { "name": "@tarojs/parse-css-to-stylesheet-linux-x64-musl", - "version": "0.0.33", + "version": "0.0.34", "os": [ "linux" ], diff --git a/npm/win32-arm64-msvc/package.json b/npm/win32-arm64-msvc/package.json index 349d07a..4286143 100644 --- a/npm/win32-arm64-msvc/package.json +++ b/npm/win32-arm64-msvc/package.json @@ -1,6 +1,6 @@ { "name": "@tarojs/parse-css-to-stylesheet-win32-arm64-msvc", - "version": "0.0.33", + "version": "0.0.34", "os": [ "win32" ], diff --git a/npm/win32-ia32-msvc/package.json b/npm/win32-ia32-msvc/package.json index 9175e1d..6803956 100644 --- a/npm/win32-ia32-msvc/package.json +++ b/npm/win32-ia32-msvc/package.json @@ -1,6 +1,6 @@ { "name": "@tarojs/parse-css-to-stylesheet-win32-ia32-msvc", - "version": "0.0.33", + "version": "0.0.34", "os": [ "win32" ], diff --git a/npm/win32-x64-msvc/package.json b/npm/win32-x64-msvc/package.json index 0e14cf1..b15a14c 100644 --- a/npm/win32-x64-msvc/package.json +++ b/npm/win32-x64-msvc/package.json @@ -1,6 +1,6 @@ { "name": "@tarojs/parse-css-to-stylesheet-win32-x64-msvc", - "version": "0.0.33", + "version": "0.0.34", "os": [ "win32" ], diff --git a/package.json b/package.json index 1e64304..762c132 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@tarojs/parse-css-to-stylesheet", - "version": "0.0.33", + "version": "0.0.34", "main": "index.js", "types": "index.d.ts", "napi": { From d2bbcc84b6a07a1feabc3720f9e4d8cb8255710f Mon Sep 17 00:00:00 2001 From: Chen-jj <798095202@qq.com> Date: Thu, 7 Mar 2024 14:47:40 +0800 Subject: [PATCH 006/236] =?UTF-8?q?fix:=20=E5=BD=93=E8=BF=94=E5=9B=9E?= =?UTF-8?q?=E5=80=BC=E4=B8=BA=20JSX=20=E6=97=B6=E6=89=8D=E5=A4=84=E7=90=86?= =?UTF-8?q?=E5=B1=82=E5=8F=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/visitor.rs | 114 +++++++++++++++++++++++++++++++++---------------- 1 file changed, 78 insertions(+), 36 deletions(-) diff --git a/src/visitor.rs b/src/visitor.rs index 06daf6e..53523df 100644 --- a/src/visitor.rs +++ b/src/visitor.rs @@ -440,35 +440,45 @@ impl ModuleMutVisitor { } impl ModuleMutVisitor { - fn get_cascading_visitor (&self) -> impl VisitMut { + fn get_nesting_visitor (&self) -> impl VisitMut { struct MyVisitor; impl VisitMut for MyVisitor { fn visit_mut_function(&mut self, _: &mut Function) {} fn visit_mut_arrow_expr(&mut self, _: &mut ArrowExpr) {} fn visit_mut_return_stmt(&mut self, stmt: &mut ReturnStmt) { let arg = &mut stmt.arg; - if arg.is_some() { - let expr = arg.take().unwrap(); - *arg = Some(Box::new(Expr::Call(CallExpr { - span: DUMMY_SP, - callee: Callee::Expr(Box::new(Expr::Ident(quote_ident!(COMBINE_NESTING_STYLE)))), - args: vec![ - ExprOrSpread { expr, spread: None }, - ExprOrSpread { expr: Box::new(Expr::Call(CallExpr { - span: DUMMY_SP, - callee: Callee::Expr(Box::new(Expr::Ident(quote_ident!(NESTING_STYLE)))), - args: vec![], - type_args: None - })), spread: None } - ], - type_args: None, - }))) + if let Some(expr_in_box) = arg { + let is_return_jsx_like = match &mut **expr_in_box { + Expr::JSXElement(_) | + Expr::JSXFragment(_) | + Expr::JSXMember(_) => { + true + }, + _ => false + }; + if is_return_jsx_like { + let expr = arg.take().unwrap(); + *arg = Some(Box::new(Expr::Call(CallExpr { + span: DUMMY_SP, + callee: Callee::Expr(Box::new(Expr::Ident(quote_ident!(COMBINE_NESTING_STYLE)))), + args: vec![ + ExprOrSpread { expr, spread: None }, + ExprOrSpread { expr: Box::new(Expr::Call(CallExpr { + span: DUMMY_SP, + callee: Callee::Expr(Box::new(Expr::Ident(quote_ident!(NESTING_STYLE)))), + args: vec![], + type_args: None + })), spread: None } + ], + type_args: None, + }))) + } } } } MyVisitor {} } - fn enable_cascading_for_class (&self, class: &mut Box) { + fn enable_nesting_for_class (&self, class: &mut Box) { let render_function = class.body.iter_mut().find(|item| { // Todo: support ClassProperty if let ClassMember::Method(ClassMethod { key, .. }) = item { @@ -478,11 +488,11 @@ impl ModuleMutVisitor { }); if render_function.is_some() { let body = &mut render_function.unwrap().as_mut_method().unwrap().function; - body.visit_mut_children_with(&mut self.get_cascading_visitor()); + body.visit_mut_children_with(&mut self.get_nesting_visitor()); }; } - fn enable_cascading_for_function (&self, body: &mut Box) { - body.visit_mut_children_with(&mut &mut self.get_cascading_visitor()); + fn enable_nesting_for_function (&self, body: &mut Box) { + body.visit_mut_children_with(&mut &mut self.get_nesting_visitor()); } } @@ -562,35 +572,67 @@ impl VisitMut for ModuleMutVisitor { // 将 inner_style_stmt 插入到 module 的最后一条 import 语句之后 let mut last_import_index = 0; for (index, stmt) in module.body.iter_mut().enumerate() { - if stmt.is_module_decl() { - let module_decl = stmt.as_mut_module_decl().unwrap(); - if let ModuleDecl::Import(_) = module_decl { - last_import_index = index; - } + if let ModuleItem::ModuleDecl(ModuleDecl::Import(_)) = stmt { + last_import_index = index; + } // 开启层叠功能 if self.is_enable_nesting { - match module_decl { - ModuleDecl::ExportDefaultDecl(ExportDefaultDecl { decl, .. }) => { + match stmt { + ModuleItem::ModuleDecl(ModuleDecl::ExportDefaultDecl(ExportDefaultDecl { decl, .. })) => { match decl { - // export defualt class {} + // export defualt class Index {} DefaultDecl::Class(ClassExpr { class, .. }) => { - self.enable_cascading_for_class(class); + self.enable_nesting_for_class(class); }, - // export defualt function () {} + // export defualt function Index () {} DefaultDecl::Fn(FnExpr { function, ..}) => { - self.enable_cascading_for_function(function); + self.enable_nesting_for_function(function); } _ => () } }, - // export default Index - ModuleDecl::ExportDefaultExpr(ExportDefaultExpr { expr, .. }) => { - // Todo: suport ExportDefaultExpr + ModuleItem::ModuleDecl(ModuleDecl::ExportDecl(ExportDecl { decl, .. })) => { + match decl { + // export class Index {} + Decl::Class(ClassDecl { class, .. }) => { + self.enable_nesting_for_class(class); + }, + // export function Index () {} + Decl::Fn(FnDecl { function, ..}) => { + self.enable_nesting_for_function(function); + } + _ => () + } + }, + ModuleItem::Stmt(Stmt::Decl(Decl::Class(ClassDecl { class, .. }))) => { + // class Index {} + self.enable_nesting_for_class(class); + }, + ModuleItem::Stmt(Stmt::Decl(Decl::Fn(FnDecl { function, .. }))) => { + // function Index () {} + self.enable_nesting_for_function(function); }, + ModuleItem::Stmt(Stmt::Decl(Decl::Var(var_decl))) => { + var_decl.decls.iter_mut().for_each(|decl| { + match &mut decl.init { + Some(init) => { + match &mut **init { + Expr::Fn(FnExpr { function, .. }) => { + self.enable_nesting_for_function(function); + }, + Expr::Arrow(ArrowExpr { body, .. }) => { + // Todo: support arrow funciton + }, + _ => () + } + }, + None => (), + } + }) + } _ => () } } - } } if last_import_index != 0 { last_import_index += 1; From feba800e7cab86c3b99241b8a844c67c59503905 Mon Sep 17 00:00:00 2001 From: heiazu <13560201846@163.com> Date: Thu, 7 Mar 2024 17:52:58 +0800 Subject: [PATCH 007/236] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E5=B5=8C?= =?UTF-8?q?=E5=A5=97=E5=92=8C=E4=BC=AA=E7=B1=BB=E7=9A=84bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- __test__/index.spec.mjs.md | 70 ++++++-- __test__/index.spec.mjs.snap | Bin 4839 -> 4871 bytes src/parse_style_properties.rs | 9 + src/style_propetries/background_size.rs | 65 ++++--- src/style_propetries/display.rs | 6 +- src/style_propetries/macros.rs | 6 +- .../transform_properties/translate.rs | 19 +- src/visitor.rs | 166 +++++++++--------- 8 files changed, 194 insertions(+), 147 deletions(-) diff --git a/__test__/index.spec.mjs.md b/__test__/index.spec.mjs.md index eff2d9d..0140086 100644 --- a/__test__/index.spec.mjs.md +++ b/__test__/index.spec.mjs.md @@ -156,7 +156,10 @@ Generated by [AVA](https://avajs.dev). ]␊ ]␊ },␊ - _backgroundSize: ImageSize.Auto,␊ + _backgroundSize: {␊ + width: "auto",␊ + height: "auto"␊ + },␊ _backgroundPosition: {␊ x: "0%",␊ y: "0%"␊ @@ -200,7 +203,10 @@ Generated by [AVA](https://avajs.dev). _backgroundImage: {␊ src: "https://img.alicdn.com/imgextra/i1/O1CN01QYQY2e1Q1QYQY2e1Q_!!6000000000000-2-tps-18-18.png"␊ },␊ - _backgroundSize: ImageSize.Auto,␊ + _backgroundSize: {␊ + width: "auto",␊ + height: "auto"␊ + },␊ _backgroundPosition: Alignment.Center,␊ _backgroundRepeat: ImageRepeat.NoRepeat,␊ _backgroundColor: "#FF0000",␊ @@ -343,7 +349,10 @@ Generated by [AVA](https://avajs.dev). y: "0%"␊ },␊ _backgroundRepeat: ImageRepeat.XY,␊ - _backgroundSize: ImageSize.Auto,␊ + _backgroundSize: {␊ + width: "auto",␊ + height: "auto"␊ + },␊ _columnGap: convertNumber2VP(10),␊ _display: "flex",␊ _height: convertNumber2VP(50),␊ @@ -371,7 +380,10 @@ Generated by [AVA](https://avajs.dev). ]␊ ]␊ },␊ - _backgroundSize: ImageSize.Auto,␊ + _backgroundSize: {␊ + width: "auto",␊ + height: "auto"␊ + },␊ _backgroundPosition: {␊ x: "0%",␊ y: "0%"␊ @@ -401,7 +413,10 @@ Generated by [AVA](https://avajs.dev). _backgroundImage: {␊ src: "https://img.alicdn.com/imgextra/i1/O1CN01QYQY2e1Q1QYQY2e1Q_!!6000000000000-2-tps-18-18.png"␊ },␊ - _backgroundSize: ImageSize.Auto,␊ + _backgroundSize: {␊ + width: "auto",␊ + height: "auto"␊ + },␊ _backgroundPosition: Alignment.Center,␊ _backgroundRepeat: ImageRepeat.NoRepeat,␊ _backgroundColor: "#FF0000",␊ @@ -429,7 +444,10 @@ Generated by [AVA](https://avajs.dev). _backgroundImage: {␊ src: "https://img.alicdn.com/imgextra/i1/O1CN01QYQY2e1Q1QYQY2e1Q_!!6000000000000-2-tps-18-18.png"␊ },␊ - _backgroundSize: ImageSize.Auto,␊ + _backgroundSize: {␊ + width: "auto",␊ + height: "auto"␊ + },␊ _backgroundPosition: Alignment.Center,␊ _backgroundRepeat: ImageRepeat.NoRepeat,␊ _backgroundColor: "#FF0000",␊ @@ -516,7 +534,10 @@ Generated by [AVA](https://avajs.dev). _backgroundImage: {␊ src: "https://img.alicdn.com/imgextra/i1/O1CN01QYQY2e1Q1QYQY2e1Q_!!6000000000000-2-tps-18-18.png"␊ },␊ - _backgroundSize: ImageSize.Auto,␊ + _backgroundSize: {␊ + width: "auto",␊ + height: "auto"␊ + },␊ _backgroundPosition: Alignment.Center,␊ _backgroundRepeat: ImageRepeat.NoRepeat,␊ _backgroundColor: "#FF0000",␊ @@ -555,7 +576,10 @@ Generated by [AVA](https://avajs.dev). _backgroundImage: {␊ src: "https://img.alicdn.com/imgextra/i1/O1CN01QYQY2e1Q1QYQY2e1Q_!!6000000000000-2-tps-18-18.png"␊ },␊ - _backgroundSize: ImageSize.Auto,␊ + _backgroundSize: {␊ + width: "auto",␊ + height: "auto"␊ + },␊ _backgroundPosition: Alignment.Center,␊ _backgroundRepeat: ImageRepeat.NoRepeat,␊ _backgroundColor: "#FF0000",␊ @@ -597,7 +621,10 @@ Generated by [AVA](https://avajs.dev). _backgroundImage: {␊ src: "https://img.alicdn.com/imgextra/i1/O1CN01QYQY2e1Q1QYQY2e1Q_!!6000000000000-2-tps-18-18.png"␊ },␊ - _backgroundSize: ImageSize.Auto,␊ + _backgroundSize: {␊ + width: "auto",␊ + height: "auto"␊ + },␊ _backgroundPosition: Alignment.Center,␊ _backgroundRepeat: ImageRepeat.NoRepeat,␊ _backgroundColor: "#FF0000",␊ @@ -692,7 +719,10 @@ Generated by [AVA](https://avajs.dev). _backgroundImage: {␊ src: "https://img.alicdn.com/imgextra/i1/O1CN01QYQY2e1Q1QYQY2e1Q_!!6000000000000-2-tps-18-18.png"␊ },␊ - _backgroundSize: ImageSize.Auto,␊ + _backgroundSize: {␊ + width: "auto",␊ + height: "auto"␊ + },␊ _backgroundPosition: Alignment.Center,␊ _backgroundRepeat: ImageRepeat.NoRepeat,␊ _backgroundColor: "#FF0000",␊ @@ -729,7 +759,10 @@ Generated by [AVA](https://avajs.dev). y: "0%"␊ },␊ _backgroundRepeat: ImageRepeat.XY,␊ - _backgroundSize: ImageSize.Auto,␊ + _backgroundSize: {␊ + width: "auto",␊ + height: "auto"␊ + },␊ _columnGap: convertNumber2VP(10),␊ _display: "flex",␊ _height: convertNumber2VP(50),␊ @@ -755,7 +788,10 @@ Generated by [AVA](https://avajs.dev). ]␊ ]␊ },␊ - _backgroundSize: ImageSize.Auto,␊ + _backgroundSize: {␊ + width: "auto",␊ + height: "auto"␊ + },␊ _backgroundPosition: {␊ x: "0%",␊ y: "0%"␊ @@ -783,7 +819,10 @@ Generated by [AVA](https://avajs.dev). _backgroundImage: {␊ src: "https://img.alicdn.com/imgextra/i1/O1CN01QYQY2e1Q1QYQY2e1Q_!!6000000000000-2-tps-18-18.png"␊ },␊ - _backgroundSize: ImageSize.Auto,␊ + _backgroundSize: {␊ + width: "auto",␊ + height: "auto"␊ + },␊ _backgroundPosition: Alignment.Center,␊ _backgroundRepeat: ImageRepeat.NoRepeat,␊ _backgroundColor: "#FF0000",␊ @@ -810,7 +849,10 @@ Generated by [AVA](https://avajs.dev). _backgroundImage: {␊ src: "https://img.alicdn.com/imgextra/i1/O1CN01QYQY2e1Q1QYQY2e1Q_!!6000000000000-2-tps-18-18.png"␊ },␊ - _backgroundSize: ImageSize.Auto,␊ + _backgroundSize: {␊ + width: "auto",␊ + height: "auto"␊ + },␊ _backgroundPosition: Alignment.Center,␊ _backgroundRepeat: ImageRepeat.NoRepeat,␊ _backgroundColor: "#FF0000",␊ diff --git a/__test__/index.spec.mjs.snap b/__test__/index.spec.mjs.snap index e14342ad931f7e4aaf5c14541b937e8519feb973..8e529d804dd6ddd52fc46b580a4f58f5cc25926c 100644 GIT binary patch literal 4871 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 literal 4839 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 N?*D374eaF5006vNY&8G? diff --git a/src/parse_style_properties.rs b/src/parse_style_properties.rs index 5826fd2..80d5105 100644 --- a/src/parse_style_properties.rs +++ b/src/parse_style_properties.rs @@ -164,6 +164,15 @@ pub fn parse_style_properties(properties: &Vec<(String, Property)>) -> Vec - -`,l=` - -`,c=` -