diff options
| author | bors <bors@rust-lang.org> | 2017-12-01 03:25:54 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2017-12-01 03:25:54 +0000 |
| commit | 804b15be82ea668d943fab70195eb57a2f942d4b (patch) | |
| tree | 39e40f11e8616391f33eaafe14ad61a80a78d00e /src/librustc_resolve/lib.rs | |
| parent | d8a60c9611399b1b5c9c703b975af4724b432b0d (diff) | |
| parent | f7f69512c8741e81714252d481a4cf6936f2c65f (diff) | |
Auto merge of #45846 - pietroalbini:use-nested-groups, r=petrochenkov
Add nested groups in imports This PR adds support for nested groups in imports (rust-lang/rfcs#2128, tracking issue #44494). r? @petrochenkov
Diffstat (limited to 'src/librustc_resolve/lib.rs')
| -rw-r--r-- | src/librustc_resolve/lib.rs | 40 |
1 files changed, 32 insertions, 8 deletions
diff --git a/src/librustc_resolve/lib.rs b/src/librustc_resolve/lib.rs index 3243152527f..44db030b2b2 100644 --- a/src/librustc_resolve/lib.rs +++ b/src/librustc_resolve/lib.rs @@ -1937,14 +1937,12 @@ impl<'a> Resolver<'a> { }); } - ItemKind::Use(ref view_path) => { - match view_path.node { - ast::ViewPathList(ref prefix, ref items) if items.is_empty() => { - // Resolve prefix of an import with empty braces (issue #28388). - self.smart_resolve_path(item.id, None, prefix, PathSource::ImportPrefix); - } - _ => {} - } + ItemKind::Use(ref use_tree) => { + let path = Path { + segments: vec![], + span: use_tree.span, + }; + self.resolve_use_tree(item, use_tree, &path); } ItemKind::ExternCrate(_) | ItemKind::MacroDef(..) | ItemKind::GlobalAsm(_)=> { @@ -1955,6 +1953,32 @@ impl<'a> Resolver<'a> { } } + fn resolve_use_tree(&mut self, item: &Item, use_tree: &ast::UseTree, prefix: &Path) { + match use_tree.kind { + ast::UseTreeKind::Nested(ref items) => { + let path = Path { + segments: prefix.segments + .iter() + .chain(use_tree.prefix.segments.iter()) + .cloned() + .collect(), + span: prefix.span.to(use_tree.prefix.span), + }; + + if items.len() == 0 { + // Resolve prefix of an import with empty braces (issue #28388). + self.smart_resolve_path(item.id, None, &path, PathSource::ImportPrefix); + } else { + for &(ref tree, _) in items { + self.resolve_use_tree(item, tree, &path); + } + } + } + ast::UseTreeKind::Simple(_) => {}, + ast::UseTreeKind::Glob => {}, + } + } + fn with_type_parameter_rib<'b, F>(&'b mut self, type_parameters: TypeParameters<'a, 'b>, f: F) where F: FnOnce(&mut Resolver) { |
