Implement RFC 2128 (use_nested_groups)
This commit adds support for nested groups inside `use` declarations,
such as `use foo::{bar, sub::{baz::Foo, *}};`.
This commit is contained in:
@@ -56,8 +56,8 @@ pub trait Folder : Sized {
|
||||
noop_fold_meta_item(meta_item, self)
|
||||
}
|
||||
|
||||
fn fold_view_path(&mut self, view_path: P<ViewPath>) -> P<ViewPath> {
|
||||
noop_fold_view_path(view_path, self)
|
||||
fn fold_use_tree(&mut self, use_tree: UseTree) -> UseTree {
|
||||
noop_fold_use_tree(use_tree, self)
|
||||
}
|
||||
|
||||
fn fold_foreign_item(&mut self, ni: ForeignItem) -> ForeignItem {
|
||||
@@ -310,30 +310,18 @@ pub fn noop_fold_meta_items<T: Folder>(meta_items: Vec<MetaItem>, fld: &mut T) -
|
||||
meta_items.move_map(|x| fld.fold_meta_item(x))
|
||||
}
|
||||
|
||||
pub fn noop_fold_view_path<T: Folder>(view_path: P<ViewPath>, fld: &mut T) -> P<ViewPath> {
|
||||
view_path.map(|Spanned {node, span}| Spanned {
|
||||
node: match node {
|
||||
ViewPathSimple(ident, path) => {
|
||||
ViewPathSimple(fld.fold_ident(ident), fld.fold_path(path))
|
||||
}
|
||||
ViewPathGlob(path) => {
|
||||
ViewPathGlob(fld.fold_path(path))
|
||||
}
|
||||
ViewPathList(path, path_list_idents) => {
|
||||
let path = fld.fold_path(path);
|
||||
let path_list_idents = path_list_idents.move_map(|path_list_ident| Spanned {
|
||||
node: PathListItem_ {
|
||||
id: fld.new_id(path_list_ident.node.id),
|
||||
rename: path_list_ident.node.rename.map(|ident| fld.fold_ident(ident)),
|
||||
name: fld.fold_ident(path_list_ident.node.name),
|
||||
},
|
||||
span: fld.new_span(path_list_ident.span)
|
||||
});
|
||||
ViewPathList(path, path_list_idents)
|
||||
}
|
||||
pub fn noop_fold_use_tree<T: Folder>(use_tree: UseTree, fld: &mut T) -> UseTree {
|
||||
UseTree {
|
||||
span: fld.new_span(use_tree.span),
|
||||
prefix: fld.fold_path(use_tree.prefix),
|
||||
kind: match use_tree.kind {
|
||||
UseTreeKind::Simple(ident) => UseTreeKind::Simple(fld.fold_ident(ident)),
|
||||
UseTreeKind::Glob => UseTreeKind::Glob,
|
||||
UseTreeKind::Nested(items) => UseTreeKind::Nested(items.move_map(|(tree, id)| {
|
||||
(fld.fold_use_tree(tree), fld.new_id(id))
|
||||
})),
|
||||
},
|
||||
span: fld.new_span(span)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
pub fn fold_attrs<T: Folder>(attrs: Vec<Attribute>, fld: &mut T) -> Vec<Attribute> {
|
||||
@@ -874,8 +862,8 @@ pub fn noop_fold_block<T: Folder>(b: P<Block>, folder: &mut T) -> P<Block> {
|
||||
pub fn noop_fold_item_kind<T: Folder>(i: ItemKind, folder: &mut T) -> ItemKind {
|
||||
match i {
|
||||
ItemKind::ExternCrate(string) => ItemKind::ExternCrate(string),
|
||||
ItemKind::Use(view_path) => {
|
||||
ItemKind::Use(folder.fold_view_path(view_path))
|
||||
ItemKind::Use(use_tree) => {
|
||||
ItemKind::Use(use_tree.map(|tree| folder.fold_use_tree(tree)))
|
||||
}
|
||||
ItemKind::Static(t, m, e) => {
|
||||
ItemKind::Static(folder.fold_ty(t), m, folder.fold_expr(e))
|
||||
|
||||
Reference in New Issue
Block a user