1
Fork 0

Use Names in path fragments and MacroDef

This commit is contained in:
Vadim Petrochenkov 2015-09-20 14:51:40 +03:00
parent 64fb709f99
commit a636a83caa
10 changed files with 40 additions and 39 deletions

View file

@ -1787,7 +1787,7 @@ fn encode_macro_defs(rbml_w: &mut Encoder,
for def in &krate.exported_macros { for def in &krate.exported_macros {
rbml_w.start_tag(tag_macro_def); rbml_w.start_tag(tag_macro_def);
encode_name(rbml_w, def.ident.name); encode_name(rbml_w, def.name);
encode_attributes(rbml_w, &def.attrs); encode_attributes(rbml_w, &def.attrs);
rbml_w.wr_tagged_str(tag_macro_def_body, rbml_w.wr_tagged_str(tag_macro_def_body,

View file

@ -333,11 +333,11 @@ pub struct Crate {
/// Not parsed directly, but created on macro import or `macro_rules!` expansion. /// Not parsed directly, but created on macro import or `macro_rules!` expansion.
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)] #[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
pub struct MacroDef { pub struct MacroDef {
pub ident: Ident, pub name: Name,
pub attrs: Vec<Attribute>, pub attrs: Vec<Attribute>,
pub id: NodeId, pub id: NodeId,
pub span: Span, pub span: Span,
pub imported_from: Option<Ident>, pub imported_from: Option<Name>,
pub export: bool, pub export: bool,
pub use_locally: bool, pub use_locally: bool,
pub allow_internal_unstable: bool, pub allow_internal_unstable: bool,
@ -1039,14 +1039,14 @@ pub type Variant = Spanned<Variant_>;
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug, Copy)] #[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug, Copy)]
pub enum PathListItem_ { pub enum PathListItem_ {
PathListIdent { PathListIdent {
name: Ident, name: Name,
/// renamed in list, eg `use foo::{bar as baz};` /// renamed in list, eg `use foo::{bar as baz};`
rename: Option<Ident>, rename: Option<Name>,
id: NodeId id: NodeId
}, },
PathListMod { PathListMod {
/// renamed in list, eg `use foo::{self as baz};` /// renamed in list, eg `use foo::{self as baz};`
rename: Option<Ident>, rename: Option<Name>,
id: NodeId id: NodeId
} }
} }
@ -1058,7 +1058,7 @@ impl PathListItem_ {
} }
} }
pub fn rename(&self) -> Option<Ident> { pub fn rename(&self) -> Option<Name> {
match *self { match *self {
PathListIdent { rename, .. } | PathListMod { rename, .. } => rename PathListIdent { rename, .. } | PathListMod { rename, .. } => rename
} }
@ -1077,7 +1077,7 @@ pub enum ViewPath_ {
/// or just /// or just
/// ///
/// `foo::bar::baz` (with `as baz` implicitly on the right) /// `foo::bar::baz` (with `as baz` implicitly on the right)
ViewPathSimple(Ident, Path), ViewPathSimple(Name, Path),
/// `foo::bar::*` /// `foo::bar::*`
ViewPathGlob(Path), ViewPathGlob(Path),

View file

@ -22,7 +22,7 @@ pub fn lower_view_path(view_path: &ViewPath) -> P<hir::ViewPath> {
P(Spanned { P(Spanned {
node: match view_path.node { node: match view_path.node {
ViewPathSimple(ident, ref path) => { ViewPathSimple(ident, ref path) => {
hir::ViewPathSimple(ident, lower_path(path)) hir::ViewPathSimple(ident.name, lower_path(path))
} }
ViewPathGlob(ref path) => { ViewPathGlob(ref path) => {
hir::ViewPathGlob(lower_path(path)) hir::ViewPathGlob(lower_path(path))
@ -35,11 +35,14 @@ pub fn lower_view_path(view_path: &ViewPath) -> P<hir::ViewPath> {
PathListIdent { id, name, rename } => PathListIdent { id, name, rename } =>
hir::PathListIdent { hir::PathListIdent {
id: id, id: id,
name: name, name: name.name,
rename: rename.clone(), rename: rename.map(|x| x.name),
}, },
PathListMod { id, rename } => PathListMod { id, rename } =>
hir::PathListMod { id: id, rename: rename.clone() } hir::PathListMod {
id: id,
rename: rename.map(|x| x.name)
}
}, },
span: path_list_ident.span span: path_list_ident.span
} }
@ -526,11 +529,11 @@ pub fn lower_crate(c: &Crate) -> hir::Crate {
pub fn lower_macro_def(m: &MacroDef) -> hir::MacroDef { pub fn lower_macro_def(m: &MacroDef) -> hir::MacroDef {
hir::MacroDef { hir::MacroDef {
ident: m.ident, name: m.ident.name,
attrs: m.attrs.clone(), attrs: m.attrs.clone(),
id: m.id, id: m.id,
span: m.span, span: m.span,
imported_from: m.imported_from, imported_from: m.imported_from.map(|x| x.name),
export: m.export, export: m.export,
use_locally: m.use_locally, use_locally: m.use_locally,
allow_internal_unstable: m.allow_internal_unstable, allow_internal_unstable: m.allow_internal_unstable,

View file

@ -2174,15 +2174,14 @@ impl<'a> State<'a> {
pub fn print_view_path(&mut self, vp: &hir::ViewPath) -> io::Result<()> { pub fn print_view_path(&mut self, vp: &hir::ViewPath) -> io::Result<()> {
match vp.node { match vp.node {
hir::ViewPathSimple(ident, ref path) => { hir::ViewPathSimple(name, ref path) => {
try!(self.print_path(path, false, 0)); try!(self.print_path(path, false, 0));
// FIXME(#6993) can't compare identifiers directly here // FIXME(#6993) can't compare identifiers directly here
if path.segments.last().unwrap().identifier.name != if path.segments.last().unwrap().identifier.name != name {
ident.name {
try!(space(&mut self.s)); try!(space(&mut self.s));
try!(self.word_space("as")); try!(self.word_space("as"));
try!(self.print_ident(ident)); try!(self.print_name(name));
} }
Ok(()) Ok(())
@ -2203,7 +2202,7 @@ impl<'a> State<'a> {
try!(self.commasep(Inconsistent, &idents[..], |s, w| { try!(self.commasep(Inconsistent, &idents[..], |s, w| {
match w.node { match w.node {
hir::PathListIdent { name, .. } => { hir::PathListIdent { name, .. } => {
s.print_ident(name) s.print_name(name)
}, },
hir::PathListMod { .. } => { hir::PathListMod { .. } => {
word(&mut s.s, "self") word(&mut s.s, "self")

View file

@ -312,8 +312,7 @@ impl<'a, 'b:'a, 'tcx:'b> GraphBuilder<'a, 'b, 'tcx> {
ResolutionError::SelfImportsOnlyAllowedWithin); ResolutionError::SelfImportsOnlyAllowedWithin);
} }
let subclass = SingleImport(binding.name, let subclass = SingleImport(binding, source_name);
source_name);
self.build_import_directive(&**parent, self.build_import_directive(&**parent,
module_path, module_path,
subclass, subclass,
@ -343,7 +342,7 @@ impl<'a, 'b:'a, 'tcx:'b> GraphBuilder<'a, 'b, 'tcx> {
for source_item in source_items { for source_item in source_items {
let (module_path, name, rename) = match source_item.node { let (module_path, name, rename) = match source_item.node {
PathListIdent { name, rename, .. } => PathListIdent { name, rename, .. } =>
(module_path.clone(), name.name, rename.unwrap_or(name).name), (module_path.clone(), name, rename.unwrap_or(name)),
PathListMod { rename, .. } => { PathListMod { rename, .. } => {
let name = match module_path.last() { let name = match module_path.last() {
Some(name) => *name, Some(name) => *name,
@ -358,7 +357,7 @@ impl<'a, 'b:'a, 'tcx:'b> GraphBuilder<'a, 'b, 'tcx> {
} }
}; };
let module_path = module_path.split_last().unwrap().1; let module_path = module_path.split_last().unwrap().1;
let rename = rename.map(|n| n.name).unwrap_or(name); let rename = rename.unwrap_or(name);
(module_path.to_vec(), name, rename) (module_path.to_vec(), name, rename)
} }
}; };

View file

@ -2210,23 +2210,23 @@ impl<'a, 'tcx> Resolver<'a, 'tcx> {
ItemUse(ref view_path) => { ItemUse(ref view_path) => {
// check for imports shadowing primitive types // check for imports shadowing primitive types
let check_rename = |this: &Self, id, ident: Ident| { let check_rename = |this: &Self, id, name| {
match this.def_map.borrow().get(&id).map(|d| d.full_def()) { match this.def_map.borrow().get(&id).map(|d| d.full_def()) {
Some(DefTy(..)) | Some(DefStruct(..)) | Some(DefTrait(..)) | None => { Some(DefTy(..)) | Some(DefStruct(..)) | Some(DefTrait(..)) | None => {
this.check_if_primitive_type_name(ident.name, item.span); this.check_if_primitive_type_name(name, item.span);
} }
_ => {} _ => {}
} }
}; };
match view_path.node { match view_path.node {
hir::ViewPathSimple(ident, _) => { hir::ViewPathSimple(name, _) => {
check_rename(self, item.id, ident); check_rename(self, item.id, name);
} }
hir::ViewPathList(ref prefix, ref items) => { hir::ViewPathList(ref prefix, ref items) => {
for item in items { for item in items {
if let Some(ident) = item.node.rename() { if let Some(name) = item.node.rename() {
check_rename(self, item.node.id(), ident); check_rename(self, item.node.id(), name);
} }
} }

View file

@ -43,7 +43,7 @@ use super::{Clean, ToSource};
/// ///
/// The returned value is `None` if the `id` could not be inlined, and `Some` /// The returned value is `None` if the `id` could not be inlined, and `Some`
/// of a vector of items if it was successfully expanded. /// of a vector of items if it was successfully expanded.
pub fn try_inline(cx: &DocContext, id: ast::NodeId, into: Option<ast::Ident>) pub fn try_inline(cx: &DocContext, id: ast::NodeId, into: Option<ast::Name>)
-> Option<Vec<clean::Item>> { -> Option<Vec<clean::Item>> {
let tcx = match cx.tcx_opt() { let tcx = match cx.tcx_opt() {
Some(tcx) => tcx, Some(tcx) => tcx,

View file

@ -2386,14 +2386,14 @@ impl Clean<Vec<Item>> for doctree::Import {
(ret, ImportList(resolve_use_source(cx, p.clean(cx), self.id), (ret, ImportList(resolve_use_source(cx, p.clean(cx), self.id),
remaining)) remaining))
} }
hir::ViewPathSimple(i, ref p) => { hir::ViewPathSimple(name, ref p) => {
if !denied { if !denied {
match inline::try_inline(cx, self.id, Some(i)) { match inline::try_inline(cx, self.id, Some(name)) {
Some(items) => return items, Some(items) => return items,
None => {} None => {}
} }
} }
(vec![], SimpleImport(i.clean(cx), (vec![], SimpleImport(name.clean(cx),
resolve_use_source(cx, p.clean(cx), self.id))) resolve_use_source(cx, p.clean(cx), self.id)))
} }
}; };

View file

@ -210,12 +210,12 @@ pub struct DefaultImpl {
} }
pub struct Macro { pub struct Macro {
pub name: Ident, pub name: Name,
pub id: ast::NodeId, pub id: ast::NodeId,
pub attrs: Vec<ast::Attribute>, pub attrs: Vec<ast::Attribute>,
pub whence: Span, pub whence: Span,
pub stab: Option<attr::Stability>, pub stab: Option<attr::Stability>,
pub imported_from: Option<Ident>, pub imported_from: Option<Name>,
} }
pub struct ExternCrate { pub struct ExternCrate {

View file

@ -199,7 +199,7 @@ impl<'a, 'tcx> RustdocVisitor<'a, 'tcx> {
} }
fn resolve_id(&mut self, id: ast::NodeId, renamed: Option<ast::Ident>, fn resolve_id(&mut self, id: ast::NodeId, renamed: Option<ast::Name>,
glob: bool, om: &mut Module, please_inline: bool) -> bool { glob: bool, om: &mut Module, please_inline: bool) -> bool {
let tcx = match self.cx.tcx_opt() { let tcx = match self.cx.tcx_opt() {
Some(tcx) => tcx, Some(tcx) => tcx,
@ -241,9 +241,9 @@ impl<'a, 'tcx> RustdocVisitor<'a, 'tcx> {
} }
pub fn visit_item(&mut self, item: &hir::Item, pub fn visit_item(&mut self, item: &hir::Item,
renamed: Option<ast::Ident>, om: &mut Module) { renamed: Option<ast::Name>, om: &mut Module) {
debug!("Visiting item {:?}", item); debug!("Visiting item {:?}", item);
let name = renamed.map_or(item.name, |x| x.name); let name = renamed.unwrap_or(item.name);
match item.node { match item.node {
hir::ItemExternCrate(ref p) => { hir::ItemExternCrate(ref p) => {
let path = match *p { let path = match *p {
@ -398,7 +398,7 @@ impl<'a, 'tcx> RustdocVisitor<'a, 'tcx> {
Macro { Macro {
id: def.id, id: def.id,
attrs: def.attrs.clone(), attrs: def.attrs.clone(),
name: def.ident, name: def.name,
whence: def.span, whence: def.span,
stab: self.stability(def.id), stab: self.stability(def.id),
imported_from: def.imported_from, imported_from: def.imported_from,