Use Names in path fragments and MacroDef
This commit is contained in:
parent
64fb709f99
commit
a636a83caa
10 changed files with 40 additions and 39 deletions
|
@ -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,
|
||||||
|
|
|
@ -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),
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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")
|
||||||
|
|
|
@ -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)
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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)))
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
|
@ -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,
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue