Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

refactor(ast): Make serde optional #7138

Merged
merged 83 commits into from Mar 27, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
83 commits
Select commit Hold shift + click to select a range
31fb5c9
feat: serde-impl
kdy1 Mar 24, 2023
2720c40
fixup
kdy1 Mar 24, 2023
f1a1ae7
fixup
kdy1 Mar 24, 2023
d524aa9
Make serde optional
kdy1 Mar 24, 2023
fc7585b
Make serde optional
kdy1 Mar 24, 2023
e588fdb
Fix more
kdy1 Mar 24, 2023
10758fc
Fix more
kdy1 Mar 24, 2023
d88c07d
DeserializeEnum should not be optional
kdy1 Mar 24, 2023
f34b89f
serde(untagged)
kdy1 Mar 24, 2023
f90445b
serde-impl => serde
kdy1 Mar 24, 2023
58b1237
Attributes
kdy1 Mar 24, 2023
c044110
cfg
kdy1 Mar 24, 2023
7e20a51
cfg
kdy1 Mar 24, 2023
fc709e7
cfg
kdy1 Mar 24, 2023
59b491e
constraint
kdy1 Mar 24, 2023
5fc3fe0
Revert "serde-impl => serde"
kdy1 Mar 24, 2023
e8298f1
serde => serde-impl
kdy1 Mar 24, 2023
455ff03
serde
kdy1 Mar 24, 2023
85fad9b
Fix more
kdy1 Mar 24, 2023
0cc7b8b
serde feature for `swc_estree_ast`
kdy1 Mar 24, 2023
4f102fc
Fix more
kdy1 Mar 24, 2023
902576f
Fix some
kdy1 Mar 24, 2023
24c08f1
Fix some
kdy1 Mar 24, 2023
d14b6e9
Fix some
kdy1 Mar 24, 2023
bc52e3b
Fix more
kdy1 Mar 27, 2023
bde028c
Fix more
kdy1 Mar 27, 2023
2f3f144
Fix more
kdy1 Mar 27, 2023
03a992b
Fix more
kdy1 Mar 27, 2023
c5d4870
Fix more
kdy1 Mar 27, 2023
a2ce6ec
Fix more
kdy1 Mar 27, 2023
e0340ec
Fix more
kdy1 Mar 27, 2023
cbaa750
Fix more
kdy1 Mar 27, 2023
e648b02
Fix more
kdy1 Mar 27, 2023
df9cb00
Fix more
kdy1 Mar 27, 2023
756c6bf
Dep
kdy1 Mar 27, 2023
bca6fe5
Fix more
kdy1 Mar 27, 2023
f71f9ef
Fix more
kdy1 Mar 27, 2023
43f031c
Fix more
kdy1 Mar 27, 2023
df42f50
Dep
kdy1 Mar 27, 2023
5b36fcb
Fix more
kdy1 Mar 27, 2023
5313c99
Fix more
kdy1 Mar 27, 2023
a34af33
Fix more
kdy1 Mar 27, 2023
e5c3415
Fix more
kdy1 Mar 27, 2023
f0878b5
Fix more
kdy1 Mar 27, 2023
bbd4a8d
Dep
kdy1 Mar 27, 2023
cf000f5
Fix more
kdy1 Mar 27, 2023
87d0a82
Fix more
kdy1 Mar 27, 2023
2f1c7f1
Fix more
kdy1 Mar 27, 2023
c8a5a2b
Fix more
kdy1 Mar 27, 2023
ea83a5f
Feature
kdy1 Mar 27, 2023
e7fca36
Feature
kdy1 Mar 27, 2023
4b17dc0
Fix more
kdy1 Mar 27, 2023
73070fd
Dep
kdy1 Mar 27, 2023
693e8d5
Feature should enable dep
kdy1 Mar 27, 2023
09bd863
Fix lints
kdy1 Mar 27, 2023
5442839
Dep
kdy1 Mar 27, 2023
6d648ff
Dep
kdy1 Mar 27, 2023
2654390
feature
kdy1 Mar 27, 2023
4020402
feature
kdy1 Mar 27, 2023
b22125d
Feature
kdy1 Mar 27, 2023
38e6f7f
Dep
kdy1 Mar 27, 2023
e3057ea
Change `StringEnum`
kdy1 Mar 27, 2023
48a3e27
Cargo dep
kdy1 Mar 27, 2023
d8985d6
Cargo dep
kdy1 Mar 27, 2023
fe4c7ca
Cargo dep
kdy1 Mar 27, 2023
f5caa48
More fix
kdy1 Mar 27, 2023
66e7bad
Cargo dep
kdy1 Mar 27, 2023
eba914e
More fix
kdy1 Mar 27, 2023
80ecc23
More fix
kdy1 Mar 27, 2023
8c83deb
Revert
kdy1 Mar 27, 2023
e1f9456
Feature
kdy1 Mar 27, 2023
83b736e
Use extra-serde
kdy1 Mar 27, 2023
aa6242f
"extra-serde"
kdy1 Mar 27, 2023
3ccc71f
More fix
kdy1 Mar 27, 2023
2b39b02
More fix
kdy1 Mar 27, 2023
dd371ff
More fix
kdy1 Mar 27, 2023
316c9ef
Default
kdy1 Mar 27, 2023
1cca20c
lints
kdy1 Mar 27, 2023
1518fc8
Fix
kdy1 Mar 27, 2023
4576643
swc_core
kdy1 Mar 27, 2023
f416241
Fix `swc`
kdy1 Mar 27, 2023
0f69731
Fix more
kdy1 Mar 27, 2023
f7360fd
Fix swc_core
kdy1 Mar 27, 2023
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
1 change: 1 addition & 0 deletions bindings/binding_core_node/Cargo.toml
Expand Up @@ -59,6 +59,7 @@ tracing-subscriber = { version = "0.3.9", features = ["env-filter"] }
swc_core = { version = "0.69.20", features = [
"allocator_node",
"ecma_ast",
"ecma_ast_serde",
"common_concurrent",
"bundler",
"ecma_loader",
Expand Down
1 change: 1 addition & 0 deletions bindings/binding_core_wasm/Cargo.toml
Expand Up @@ -24,6 +24,7 @@ anyhow = "1.0.66"
serde = { version = "1", features = ["derive"] }
serde-wasm-bindgen = "0.4.5"
swc_core = { version = "0.69.20", features = [
"ecma_ast_serde",
"common_perf",
"binding_macro_wasm",
"ecma_transforms",
Expand Down
1 change: 1 addition & 0 deletions crates/ast_node/src/enum_deserialize.rs
Expand Up @@ -411,6 +411,7 @@ pub fn expand(
variants
},
{
#[cfg(feature = "serde-impl")]
impl<'de> serde::Deserialize<'de> for Enum {
#[allow(unreachable_code)]
fn deserialize<__D>(
Expand Down
34 changes: 27 additions & 7 deletions crates/ast_node/src/lib.rs
Expand Up @@ -189,12 +189,17 @@ pub fn ast_node(

item.quote_with(smart_quote!(Vars { input, clone }, {
#[allow(clippy::derive_partial_eq_without_eq)]
#[cfg_attr(
feature = "serde-impl",
derive(
::serde::Serialize,
)
)]
#[derive(
::swc_common::FromVariant,
::swc_common::Spanned,
Debug,
PartialEq,
::serde::Serialize,
::swc_common::DeserializeEnum,
)]
clone
Expand All @@ -220,7 +225,10 @@ pub fn ast_node(
deserialize = "__D: rkyv_latest::de::SharedDeserializeRegistry"
))
)]
#[serde(untagged)]
#[cfg_attr(
feature = "serde-impl",
serde(untagged)
)]
input
}))
}
Expand All @@ -238,7 +246,10 @@ pub fn ast_node(
}) => {
if args.is_some() {
Some(Quote::new_call_site().quote_with(smart_quote!(Vars {}, {
#[serde(tag = "type")]
#[cfg_attr(
feature = "serde-impl",
serde(tag = "type")
)]
})))
} else {
None
Expand All @@ -248,8 +259,11 @@ pub fn ast_node(
};

let serde_rename = args.as_ref().map(|args| {
Quote::new_call_site().quote_with(smart_quote!(Vars { name: &args.ty },{
#[serde(rename = name)]
Quote::new_call_site().quote_with(smart_quote!(Vars { name: &args.ty }, {
#[cfg_attr(
feature = "serde-impl",
serde(rename = name)
)]
}))
});

Expand All @@ -261,7 +275,10 @@ pub fn ast_node(
item.quote_with(smart_quote!(Vars { input, serde_tag, serde_rename }, {
#[allow(clippy::derive_partial_eq_without_eq)]
#[derive(::swc_common::Spanned, Clone, Debug, PartialEq)]
#[derive(::serde::Serialize, ::serde::Deserialize)]
#[cfg_attr(
feature = "serde-impl",
derive(::serde::Serialize, ::serde::Deserialize)
)]
#[cfg_attr(
feature = "rkyv-impl",
derive(rkyv::Archive, rkyv::Serialize, rkyv::Deserialize)
Expand Down Expand Up @@ -289,7 +306,10 @@ pub fn ast_node(
)
)]
serde_tag
#[serde(rename_all = "camelCase")]
#[cfg_attr(
feature = "serde-impl",
serde(rename_all = "camelCase")
)]
serde_rename
input
}));
Expand Down
8 changes: 6 additions & 2 deletions crates/jsdoc/Cargo.toml
Expand Up @@ -11,9 +11,13 @@ version = "0.99.10"
[lib]
bench = false

[features]
serde-impl = ["serde"]

[dependencies]
nom = "7.1.0"
serde = { version = "1", features = ["derive"] }
nom = "7.1.0"
serde = { version = "1", features = ["derive"], optional = true }

swc_atoms = { version = "0.4.39", path = "../swc_atoms" }
swc_common = { version = "0.29.39", path = "../swc_common" }

Expand Down
10 changes: 5 additions & 5 deletions crates/jsdoc/src/ast.rs
Expand Up @@ -21,9 +21,9 @@ pub struct JsDoc {
#[ast_node]
pub struct TagItem {
pub span: Span,
#[serde(rename = "tagName")]
#[cfg_attr(feature = "serde-impl", serde(rename = "tagName"))]
pub tag_name: Text,
#[serde(flatten)]
#[cfg_attr(feature = "serde-impl", serde(flatten))]
pub tag: Tag,
}

Expand Down Expand Up @@ -304,7 +304,7 @@ pub struct ParameterTag {
pub span: Span,

pub name: Option<Text>,
#[serde(rename = "typeExpression")]
#[cfg_attr(feature = "serde-impl", serde(rename = "typeExpression"))]
pub ty: Option<Text>,

pub desc: Text,
Expand Down Expand Up @@ -345,11 +345,11 @@ pub struct TemplateTag {
#[ast_node]
pub struct TypedefTag {
pub span: Span,
#[serde(rename = "full_name")]
#[cfg_attr(feature = "serde-impl", serde(rename = "full_name"))]
pub full_name: Option<NamespaceBody>,

pub name: Option<Text>,
#[serde(rename = "typeExpression")]
#[cfg_attr(feature = "serde-impl", serde(rename = "typeExpression"))]
pub type_expr: Option<TypeExprOrTypeLit>,
}

Expand Down
6 changes: 4 additions & 2 deletions crates/string_enum/src/lib.rs
Expand Up @@ -28,8 +28,8 @@ use syn::{self, *};
///# Output
///
/// - `pub fn as_str(&self) -> &'static str`
/// - `impl serde::Serialize`
/// - `impl serde::Deserialize`
/// - `impl serde::Serialize` with `cfg(feature = "serde")`
/// - `impl serde::Deserialize` with `cfg(feature = "serde")`
/// - `impl FromStr`
/// - `impl Debug`
/// - `impl Display`
Expand Down Expand Up @@ -332,6 +332,7 @@ fn make_as_str_ident() -> Ident {
fn make_serialize(i: &DeriveInput) -> ItemImpl {
Quote::new_call_site()
.quote_with(smart_quote!(Vars { Type: &i.ident }, {
#[cfg(feature = "serde")]
impl ::serde::Serialize for Type {
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
where
Expand All @@ -348,6 +349,7 @@ fn make_serialize(i: &DeriveInput) -> ItemImpl {
fn make_deserialize(i: &DeriveInput) -> ItemImpl {
Quote::new_call_site()
.quote_with(smart_quote!(Vars { Type: &i.ident }, {
#[cfg(feature = "serde")]
impl<'de> ::serde::Deserialize<'de> for Type {
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
where
Expand Down
3 changes: 3 additions & 0 deletions crates/swc/Cargo.toml
Expand Up @@ -122,6 +122,9 @@ swc_visit = { version = "0.5.5", path = "../swc_visit" }
ansi_term = "0.12"
criterion = "0.3"
rayon = "1.5.1"
swc_ecma_ast = { version = "0.100.5", path = "../swc_ecma_ast", features = [
"serde-impl",
] }
swc_ecma_lints = { version = "0.77.16", path = "../swc_ecma_lints", features = [
"non_critical_lints",
] }
Expand Down
4 changes: 4 additions & 0 deletions crates/swc_common/benches/serde.rs
@@ -1,3 +1,5 @@
#![cfg_attr(not(feature = "serde-impl"), allow(unused))]

use ast_node::ast_node;
use criterion::{black_box, criterion_group, criterion_main, Criterion};
use serde::{Deserialize, Serialize};
Expand Down Expand Up @@ -64,6 +66,7 @@ fn bench_serde(c: &mut Criterion) {
}

fn bench_ast_node(c: &mut Criterion) {
#[cfg(feature = "serde-impl")]
c.bench_function("serialization of ast node", |b| {
let src = AstNode::String(Str {
span: DUMMY_SP,
Expand All @@ -72,6 +75,7 @@ fn bench_ast_node(c: &mut Criterion) {

b.iter(|| black_box(serde_json::to_string(&src).unwrap()));
});
#[cfg(feature = "serde-impl")]
c.bench_function("deserialization of ast node", |b| {
let src = serde_json::to_string(&AstNode::String(Str {
span: DUMMY_SP,
Expand Down
3 changes: 1 addition & 2 deletions crates/swc_common/src/lib.rs
Expand Up @@ -38,7 +38,6 @@ use std::fmt::Debug;

pub use ast_node::{ast_node, ast_serde, DeserializeEnum, Spanned};
pub use from_variant::FromVariant;
use serde::Serialize;
pub use swc_eq_ignore_macros::{EqIgnoreSpan, TypeEq};
pub use swc_visit::chain;

Expand All @@ -57,7 +56,7 @@ pub use self::{
pub mod private;

/// A trait for ast nodes.
pub trait AstNode: Debug + PartialEq + Clone + Spanned + Serialize {
pub trait AstNode: Debug + PartialEq + Clone + Spanned {
const TYPE: &'static str;
}

Expand Down
2 changes: 1 addition & 1 deletion crates/swc_common/tests/issue_3159.rs
@@ -1,7 +1,7 @@
use swc_common::ast_serde;

#[ast_serde]
enum Message {
pub enum Message {
#[tag("Request")]
Request(String),
#[tag("Response")]
Expand Down
4 changes: 3 additions & 1 deletion crates/swc_core/Cargo.toml
Expand Up @@ -128,7 +128,8 @@ testing_transform = ["__ecma", "__testing_transform"]

# Enable swc_ecma_ast / swc_atoms support.
# TODO: currently both are enabled at once, we may want to separate them.
ecma_ast = ["__ecma", "swc_ecma_ast", "swc_atoms"]
ecma_ast = ["__ecma", "swc_ecma_ast", "swc_atoms"]
ecma_ast_serde = ["ecma_ast", "swc_ecma_ast/serde-impl"]

# Enable swc_ecma_parser support.
ecma_parser = ["__parser"]
Expand All @@ -151,6 +152,7 @@ ecma_usage_analyzer = ["__ecma", "swc_ecma_usage_analyzer"]

# Enable swc_css
css_ast = ["__css", "swc_css_ast"]
css_ast_serde = ["css_ast", "swc_css_ast/serde-impl"]
css_codegen = ["__css", "swc_css_codegen"]
css_compat = ["__css", "swc_css_compat"]
css_minifier = ["__css", "swc_css_minifier"]
Expand Down
1 change: 1 addition & 0 deletions crates/swc_core/tests/fixture/stub_wasm/Cargo.toml
Expand Up @@ -20,6 +20,7 @@ serde = { version = "1", features = ["derive"] }
serde-wasm-bindgen = "0.4.5"
swc_core = { path = "../../../../swc_core", features = [
"common_perf",
"ecma_ast_serde",
"binding_macro_wasm",
"ecma_transforms",
"ecma_visit",
Expand Down
4 changes: 2 additions & 2 deletions crates/swc_css_ast/Cargo.toml
Expand Up @@ -16,13 +16,13 @@ __rkyv = []
default = []
rkyv-bytecheck-impl = []
rkyv-impl = ["__rkyv", "rkyv", "swc_atoms/rkyv-impl", "swc_common/rkyv-impl"]

serde-impl = ["serde"]

[dependencies]
bytecheck = { version = "0.6.9", optional = true }
is-macro = "0.2.0"
rkyv = { version = "=0.7.37", optional = true }
serde = { version = "1.0.127", features = ["derive"] }
serde = { version = "1.0.127", features = ["derive"], optional = true }

string_enum = { version = "0.3.4", path = "../string_enum/" }
swc_atoms = { version = "0.4.39", path = "../swc_atoms" }
Expand Down
8 changes: 4 additions & 4 deletions crates/swc_css_ast/src/at_rule.rs
Expand Up @@ -475,10 +475,10 @@ pub struct MediaFeatureRange {
pub struct MediaFeatureRangeInterval {
pub span: Span,
pub left: Box<MediaFeatureValue>,
#[serde(rename = "leftComparison")]
#[cfg_attr(feature = "serde-impl", serde(rename = "leftComparison"))]
pub left_comparison: MediaFeatureRangeComparison,
pub name: MediaFeatureName,
#[serde(rename = "rightComparison")]
#[cfg_attr(feature = "serde-impl", serde(rename = "rightComparison"))]
pub right_comparison: MediaFeatureRangeComparison,
pub right: Box<MediaFeatureValue>,
}
Expand Down Expand Up @@ -803,10 +803,10 @@ pub struct SizeFeatureRange {
pub struct SizeFeatureRangeInterval {
pub span: Span,
pub left: Box<SizeFeatureValue>,
#[serde(rename = "leftComparison")]
#[cfg_attr(feature = "serde-impl", serde(rename = "leftComparison"))]
pub left_comparison: SizeFeatureRangeComparison,
pub name: SizeFeatureName,
#[serde(rename = "rightComparison")]
#[cfg_attr(feature = "serde-impl", serde(rename = "rightComparison"))]
pub right_comparison: SizeFeatureRangeComparison,
pub right: Box<SizeFeatureValue>,
}
Expand Down
19 changes: 12 additions & 7 deletions crates/swc_css_ast/src/token.rs
Expand Up @@ -4,6 +4,7 @@ use std::{
};

use is_macro::Is;
#[cfg(feature = "serde-impl")]
use serde::{Deserialize, Serialize};
use swc_atoms::{Atom, JsWord};
use swc_common::{ast_node, util::take::Take, EqIgnoreSpan, Span};
Expand All @@ -24,7 +25,7 @@ impl Take for TokenAndSpan {
}
}

#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash, Serialize, Deserialize, Is, EqIgnoreSpan)]
#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash, Is, EqIgnoreSpan)]
#[cfg_attr(
feature = "rkyv",
derive(rkyv::Archive, rkyv::Serialize, rkyv::Deserialize)
Expand All @@ -37,29 +38,32 @@ impl Take for TokenAndSpan {
deserialize = "__D: rkyv::de::SharedDeserializeRegistry"
))
)]
#[cfg_attr(feature = "serde-impl", derive(Serialize, Deserialize))]
pub enum NumberType {
#[serde(rename = "integer")]
#[cfg_attr(feature = "serde-impl", serde(rename = "integer"))]
Integer,
#[serde(rename = "number")]
#[cfg_attr(feature = "serde-impl", serde(rename = "number"))]
Number,
}

#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, EqIgnoreSpan)]
#[derive(Debug, Clone, PartialEq, EqIgnoreSpan)]
#[cfg_attr(
feature = "rkyv",
derive(rkyv::Archive, rkyv::Serialize, rkyv::Deserialize)
)]
#[cfg_attr(feature = "serde-impl", derive(Serialize, Deserialize))]
pub struct DimensionToken {
pub value: f64,
pub raw_value: Atom,
#[cfg_attr(feature = "rkyv", with(swc_atoms::EncodeJsWord))]
pub unit: JsWord,
#[serde(rename = "type")]

#[cfg_attr(feature = "serde-impl", serde(rename = "type"))]
pub type_flag: NumberType,
pub raw_unit: Atom,
}

#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, EqIgnoreSpan)]
#[derive(Debug, Clone, PartialEq, EqIgnoreSpan)]
#[cfg_attr(
feature = "rkyv",
derive(rkyv::Archive, rkyv::Serialize, rkyv::Deserialize)
Expand All @@ -72,6 +76,7 @@ pub struct DimensionToken {
deserialize = "__D: rkyv::de::SharedDeserializeRegistry"
))
)]
#[cfg_attr(feature = "serde-impl", derive(serde::Serialize, serde::Deserialize))]
pub enum Token {
Ident {
#[cfg_attr(feature = "rkyv", with(swc_atoms::EncodeJsWord))]
Expand Down Expand Up @@ -120,7 +125,7 @@ pub enum Token {
Number {
value: f64,
raw: Atom,
#[serde(rename = "type")]
#[cfg_attr(feature = "serde-impl", serde(rename = "type"))]
type_flag: NumberType,
},
Percentage {
Expand Down
5 changes: 4 additions & 1 deletion crates/swc_css_parser/Cargo.toml
Expand Up @@ -28,9 +28,12 @@ swc_css_ast = { version = "0.134.13", path = "../swc_css_ast" }
criterion = "0.3"
serde_json = "1.0.66"

swc_css_ast = { version = "0.134.13", path = "../swc_css_ast", features = [
"serde-impl",
] }
swc_css_visit = { version = "0.133.13", path = "../swc_css_visit" }
swc_node_base = { version = "0.5.8", path = "../swc_node_base" }
testing = { version = "0.31.42", path = "../testing" }
testing = { version = "0.31.42", path = "../testing" }

[[bench]]
harness = false
Expand Down