Skip to content

Commit 5c02ca9

Browse files
committed
feat(ast_tools): add #[estree(no_parent)] attribute
1 parent 48e3348 commit 5c02ca9

File tree

3 files changed

+7
-3
lines changed

3 files changed

+7
-3
lines changed

tasks/ast_tools/src/derives/estree.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,7 @@ fn parse_estree_attr(location: AttrLocation, part: AttrPart) -> Result<()> {
9494
AttrPart::Tag("flatten") => struct_def.estree.flatten = true,
9595
AttrPart::Tag("no_type") => struct_def.estree.no_type = true,
9696
AttrPart::Tag("no_ts_def") => struct_def.estree.no_ts_def = true,
97+
AttrPart::Tag("no_parent") => struct_def.estree.no_parent = true,
9798
AttrPart::List("add_fields", list) => {
9899
for list_element in list {
99100
let (name, value) = list_element.try_into_string()?;

tasks/ast_tools/src/generators/raw_transfer.rs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -319,7 +319,8 @@ fn generate_struct(
319319

320320
generator.generate_struct_fields(struct_def, 0, DeserializerType::Both);
321321

322-
let has_type_field = generator.fields.contains_key("type");
322+
let needs_parent_field =
323+
generator.fields.contains_key("type") && !struct_def.estree.no_parent;
323324

324325
let mut all_fields_inline = true;
325326
for (field_name, StructFieldValue { value, deser_type, inline }) in generator.fields {
@@ -330,7 +331,7 @@ fn generate_struct(
330331
DeserializerType::JsOnly => write_it!(fields_str, "...(!IS_TS && {value}),"),
331332
DeserializerType::TsOnly => write_it!(fields_str, "...(IS_TS && {value}),"),
332333
}
333-
} else if inline || !has_type_field {
334+
} else if inline || !needs_parent_field {
334335
let value = if generator.dependent_field_names.contains(&field_name) {
335336
write_it!(inline_preamble_str, "const {field_name} = {value};\n");
336337
&field_name
@@ -378,7 +379,7 @@ fn generate_struct(
378379
}
379380

380381
let mut parent_assignment_str = "";
381-
if has_type_field {
382+
if needs_parent_field {
382383
fields_str.push_str("...(PARENT && { parent }),\n");
383384

384385
if !all_fields_inline {

tasks/ast_tools/src/schema/extensions/estree.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,8 @@ pub struct ESTreeStruct {
3131
/// Additional custom TS type definition to add along with the generated one.
3232
/// Does not include `export`.
3333
pub add_ts_def: Option<String>,
34+
/// If `true`
35+
pub no_parent: bool,
3436
}
3537

3638
/// Configuration for ESTree generator on an enum.

0 commit comments

Comments
 (0)