diff --git a/tasks/ast_tools/src/derives/estree.rs b/tasks/ast_tools/src/derives/estree.rs index 1d75876aeff86..3adbc7afe4033 100644 --- a/tasks/ast_tools/src/derives/estree.rs +++ b/tasks/ast_tools/src/derives/estree.rs @@ -114,9 +114,6 @@ fn parse_estree_attr(location: AttrLocation, part: AttrPart) -> Result<()> { _ => Err(()), }) .collect::>>()?; - if args.is_empty() { - return Err(()); - } struct_def.estree.add_entry = Some(args); } AttrPart::String("add_ts", value) => struct_def.estree.add_ts = Some(value), diff --git a/tasks/ast_tools/src/generators/visit.rs b/tasks/ast_tools/src/generators/visit.rs index 109fb75c9ed89..480ecf16a14ac 100644 --- a/tasks/ast_tools/src/generators/visit.rs +++ b/tasks/ast_tools/src/generators/visit.rs @@ -110,9 +110,6 @@ fn parse_visit_attr(location: AttrLocation, part: AttrPart) -> Result<()> { _ => Err(()), }) .collect::>>()?; - if args.is_empty() { - return Err(()); - } match location { AttrLocation::Struct(struct_def) => { diff --git a/tasks/ast_tools/src/parse/attr.rs b/tasks/ast_tools/src/parse/attr.rs index 00d823f2a0e1e..e66744985a9e5 100644 --- a/tasks/ast_tools/src/parse/attr.rs +++ b/tasks/ast_tools/src/parse/attr.rs @@ -144,6 +144,7 @@ pub enum AttrPart<'p> { /// e.g. `#[estree(rename = "Foo")]` or `#[estree(via = crate::serialize::OptionVecDefault)]`. String(&'p str, String), /// List part. + /// This `Vec` is never empty. /// e.g. `#[visit(args(flags = ScopeFlags::Function))]`. List(&'p str, Vec), } diff --git a/tasks/ast_tools/src/parse/parse.rs b/tasks/ast_tools/src/parse/parse.rs index 21d074e7d6828..6f4489c35a663 100644 --- a/tasks/ast_tools/src/parse/parse.rs +++ b/tasks/ast_tools/src/parse/parse.rs @@ -757,7 +757,7 @@ fn process_attr( fn parse_attr_part_list(meta_list: &MetaList) -> Result> { let metas = meta_list.parse_args_with(Punctuated::::parse_terminated).map_err(|_| ())?; - metas + let list_elements = metas .into_iter() .map(|meta| match meta { Meta::Path(path) => { @@ -775,7 +775,13 @@ fn parse_attr_part_list(meta_list: &MetaList) -> Result Ok(AttrPartListElement::List(part_name, list)) } }) - .collect() + .collect::>>()?; + + if list_elements.is_empty() { + return Err(()); + } + + Ok(list_elements) } /// Convert an [`Expr`] to a string.