}
hir::PathSegment::new(
- self.lower_ident(segment.identifier),
+ self.lower_ident(segment.ident),
parameters,
infer_types,
)
// Correctly resolve `self` imports
if path.segments.len() > 1
- && path.segments.last().unwrap().identifier.name == keywords::SelfValue.name()
+ && path.segments.last().unwrap().ident.name == keywords::SelfValue.name()
{
let _ = path.segments.pop();
if rename.is_none() {
- *name = path.segments.last().unwrap().identifier.name;
+ *name = path.segments.last().unwrap().ident.name;
}
}
style.hash_stable(hcx, hasher);
path.segments.len().hash_stable(hcx, hasher);
for segment in &path.segments {
- segment.identifier.name.hash_stable(hcx, hasher);
+ segment.ident.name.hash_stable(hcx, hasher);
}
for tt in tokens.trees() {
tt.hash_stable(hcx, hasher);
let mut module_path: Vec<_> = prefix.segments.iter()
.chain(path.segments.iter())
- .map(|seg| respan(seg.span, seg.identifier))
+ .map(|seg| respan(seg.span, seg.ident))
.collect();
match use_tree.kind {
ast::UseTreeKind::Nested(ref items) => {
let prefix = ast::Path {
segments: module_path.iter()
- .map(|s| ast::PathSegment {
- identifier: s.node,
- span: s.span,
- parameters: None,
- })
+ .map(|s| ast::PathSegment::from_ident(s.node, s.span))
.collect(),
span: path.span,
};
let mut new_id = None;
if let Some(trait_ref) = opt_trait_ref {
let path: Vec<_> = trait_ref.path.segments.iter()
- .map(|seg| respan(seg.span, seg.identifier))
+ .map(|seg| respan(seg.span, seg.ident))
.collect();
let def = self.smart_resolve_path_fragment(
trait_ref.ref_id,
source: PathSource)
-> PathResolution {
let segments = &path.segments.iter()
- .map(|seg| respan(seg.span, seg.identifier))
+ .map(|seg| respan(seg.span, seg.ident))
.collect::<Vec<_>>();
self.smart_resolve_path_fragment(id, qself, segments, path.span, source)
}
}
ExprKind::MethodCall(ref segment, ..) => {
err.span_label(parent.span, format!("did you mean `{}::{}(...)`?",
- path_str, segment.identifier));
+ path_str, segment.ident));
return (err, candidates);
}
_ => {}
ExprKind::MethodCall(ref segment, ..) => {
debug!("(recording candidate traits for expr) recording traits for {}",
expr.id);
- let traits = self.get_traits_containing_item(segment.identifier, ValueNS);
+ let traits = self.get_traits_containing_item(segment.ident, ValueNS);
self.trait_map.insert(expr.id, traits);
}
_ => {
if attr.path.segments.len() > 1 {
continue
}
- let ident = attr.path.segments[0].identifier;
+ let ident = attr.path.segments[0].ident;
let result = self.resolve_lexical_macro_path_segment(ident,
MacroNS,
false,
fn path_names_to_string(path: &Path) -> String {
names_to_string(&path.segments.iter()
- .map(|seg| respan(seg.span, seg.identifier))
+ .map(|seg| respan(seg.span, seg.ident))
.collect::<Vec<_>>())
}
impl<'a, 'b> Folder for EliminateCrateVar<'a, 'b> {
fn fold_path(&mut self, mut path: ast::Path) -> ast::Path {
- let ident = path.segments[0].identifier;
+ let ident = path.segments[0].ident;
if ident.name == keywords::DollarCrate.name() {
- path.segments[0].identifier.name = keywords::CrateRoot.name();
+ path.segments[0].ident.name = keywords::CrateRoot.name();
let module = self.0.resolve_crate_root(ident.span.ctxt(), true);
if !module.is_local() {
let span = path.segments[0].span;
if traits[j].segments.len() > 1 {
continue
}
- let trait_name = traits[j].segments[0].identifier.name;
+ let trait_name = traits[j].segments[0].ident.name;
let legacy_name = Symbol::intern(&format!("derive_{}", trait_name));
if !self.global_macros.contains_key(&legacy_name) {
continue
if k > 0 {
tokens.push(TokenTree::Token(path.span, Token::ModSep).into());
}
- let tok = Token::from_ast_ident(segment.identifier);
+ let tok = Token::from_ast_ident(segment.ident);
tokens.push(TokenTree::Token(path.span, tok).into());
}
}
}
let attr_name = match path.segments.len() {
- 1 => path.segments[0].identifier.name,
+ 1 => path.segments[0].ident.name,
_ => return Err(determinacy),
};
for path in traits {
kind: MacroKind, force: bool)
-> Result<Def, Determinacy> {
let ast::Path { ref segments, span } = *path;
- let path: Vec<_> = segments.iter().map(|seg| respan(seg.span, seg.identifier)).collect();
+ let path: Vec<_> = segments.iter().map(|seg| respan(seg.span, seg.ident)).collect();
let invocation = self.invocations[&scope];
let module = invocation.module.get();
self.current_module = if module.is_trait() { module.parent.unwrap() } else { module };
fn macro_resolve(cx: &DocContext, path_str: &str) -> Option<Def> {
use syntax::ext::base::{MacroKind, SyntaxExtension};
use syntax::ext::hygiene::Mark;
- let segment = ast::PathSegment {
- identifier: ast::Ident::from_str(path_str),
- span: DUMMY_SP,
- parameters: None,
- };
- let path = ast::Path {
- span: DUMMY_SP,
- segments: vec![segment],
- };
-
+ let segment = ast::PathSegment::from_ident(ast::Ident::from_str(path_str), DUMMY_SP);
+ let path = ast::Path { segments: vec![segment], span: DUMMY_SP };
let mut resolver = cx.resolver.borrow_mut();
let mark = Mark::root();
let res = resolver
impl<'a> PartialEq<&'a str> for Path {
fn eq(&self, string: &&'a str) -> bool {
- self.segments.len() == 1 && self.segments[0].identifier.name == *string
+ self.segments.len() == 1 && self.segments[0].ident.name == *string
}
}
impl Path {
// convert a span and an identifier to the corresponding
// 1-segment path
- pub fn from_ident(s: Span, identifier: Ident) -> Path {
+ pub fn from_ident(s: Span, ident: Ident) -> Path {
Path {
span: s,
- segments: vec![PathSegment::from_ident(identifier, s)],
+ segments: vec![PathSegment::from_ident(ident, s)],
}
}
// Make a "crate root" segment for this path unless it already has it
// or starts with something like `self`/`super`/`$crate`/etc.
pub fn make_root(&self) -> Option<PathSegment> {
- if let Some(ident) = self.segments.get(0).map(|seg| seg.identifier) {
+ if let Some(ident) = self.segments.get(0).map(|seg| seg.ident) {
if ::parse::token::is_path_segment_keyword(ident) &&
ident.name != keywords::Crate.name() {
return None;
}
pub fn is_global(&self) -> bool {
- !self.segments.is_empty() && self.segments[0].identifier.name == keywords::CrateRoot.name()
+ !self.segments.is_empty() && self.segments[0].ident.name == keywords::CrateRoot.name()
}
}
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
pub struct PathSegment {
/// The identifier portion of this path segment.
- pub identifier: Ident,
+ pub ident: Ident,
/// Span of the segment identifier.
pub span: Span,
impl PathSegment {
pub fn from_ident(ident: Ident, span: Span) -> Self {
- PathSegment { identifier: ident, span: span, parameters: None }
+ PathSegment { ident, span, parameters: None }
}
pub fn crate_root(span: Span) -> Self {
- PathSegment {
- identifier: Ident::new(keywords::CrateRoot.name(), span),
- span,
- parameters: None,
- }
+ PathSegment::from_ident(Ident::new(keywords::CrateRoot.name(), span), span)
}
}
pub fn name(&self) -> Option<Name> {
match self.path.segments.len() {
- 1 => Some(self.path.segments[0].identifier.name),
+ 1 => Some(self.path.segments[0].ident.name),
_ => None,
}
}
let mut tokens = self.tokens.trees().peekable();
Some(MetaItem {
name: match self.path.segments.len() {
- 1 => self.path.segments[0].identifier.name,
+ 1 => self.path.segments[0].ident.name,
_ => return None,
},
node: if let Some(node) = MetaItemKind::from_tokens(&mut tokens) {
}
Ok(MetaItem {
- name: self.path.segments.last().unwrap().identifier.name,
+ name: self.path.segments.last().unwrap().ident.name,
node: self.parse(sess, |parser| parser.parse_meta_item_kind())?,
span: self.span,
})
types: Vec<P<ast::Ty>>,
bindings: Vec<ast::TypeBinding> )
-> ast::Path {
- let last_identifier = idents.pop().unwrap();
+ let last_ident = idents.pop().unwrap();
let mut segments: Vec<ast::PathSegment> = Vec::new();
segments.extend(idents.into_iter().map(|i| ast::PathSegment::from_ident(i, span)));
} else {
None
};
- segments.push(ast::PathSegment { identifier: last_identifier, span, parameters });
+ segments.push(ast::PathSegment { ident: last_ident, span, parameters });
let mut path = ast::Path { span, segments };
if global {
if let Some(seg) = path.make_root() {
None
};
path.segments.push(ast::PathSegment {
- identifier: ident.node,
+ ident: ident.node,
span: ident.span,
parameters,
});
pretty_name.push_str(", ");
}
pretty_name.push_str(&path.to_string());
- names.insert(unwrap_or!(path.segments.get(0), continue).identifier.name);
+ names.insert(unwrap_or!(path.segments.get(0), continue).ident.name);
}
pretty_name.push(')');
path_str.push_str("::");
}
- if segment.identifier.name != keywords::CrateRoot.name() &&
- segment.identifier.name != keywords::DollarCrate.name()
+ if segment.ident.name != keywords::CrateRoot.name() &&
+ segment.ident.name != keywords::DollarCrate.name()
{
- path_str.push_str(&segment.identifier.name.as_str())
+ path_str.push_str(&segment.ident.name.as_str())
}
}
opt_expanded
} else {
let msg = format!("non-{kind} macro in {kind} position: {name}",
- name = path.segments[0].identifier.name, kind = kind.name());
+ name = path.segments[0].ident.name, kind = kind.name());
self.cx.span_err(path.span, &msg);
self.cx.trace_macros_diag();
kind.dummy(span)
inner.push(TokenTree::Token(self.span, token::Colon).into());
}
inner.push(TokenTree::Token(
- self.span, token::Token::from_ast_ident(segment.identifier)
+ self.span, token::Token::from_ast_ident(segment.ident)
).into());
}
inner.push(self.tokens.clone());
fn visit_path(&mut self, path: &'a ast::Path, _id: NodeId) {
for segment in &path.segments {
- if segment.identifier.name == keywords::Crate.name() {
+ if segment.ident.name == keywords::Crate.name() {
gate_feature_post!(&self, crate_in_paths, segment.span,
"`crate` in paths is experimental");
- } else if segment.identifier.name == keywords::Extern.name() {
+ } else if segment.ident.name == keywords::Extern.name() {
gate_feature_post!(&self, extern_in_paths, segment.span,
"`extern` in paths is experimental");
}
pub fn noop_fold_path<T: Folder>(Path { segments, span }: Path, fld: &mut T) -> Path {
Path {
- segments: segments.move_map(|PathSegment {identifier, span, parameters}| PathSegment {
- identifier: fld.fold_ident(identifier),
+ segments: segments.move_map(|PathSegment {ident, span, parameters}| PathSegment {
+ ident: fld.fold_ident(ident),
span: fld.new_span(span),
parameters: parameters.map(|ps| ps.map(|ps| fld.fold_path_parameters(ps))),
}),
ExprKind::MethodCall(seg, args) => {
ExprKind::MethodCall(
PathSegment {
- identifier: folder.fold_ident(seg.identifier),
+ ident: folder.fold_ident(seg.ident),
span: folder.new_span(seg.span),
parameters: seg.parameters.map(|ps| {
ps.map(|ps| folder.fold_path_parameters(ps))
ParenthesizedParameterData { inputs, output, span }.into()
};
- PathSegment { identifier: ident, span: ident_span, parameters }
+ PathSegment { ident, span: ident_span, parameters }
} else {
// Generic arguments are not found.
PathSegment::from_ident(ident, ident_span)
}
let span = lo.to(self.prev_span);
- let ident = respan(segment.span, segment.identifier);
+ let ident = respan(segment.span, segment.ident);
self.mk_expr(span, ExprKind::Field(self_arg, ident), ThinVec::new())
}
})
if i > 0 {
self.writer().word("::")?
}
- if segment.identifier.name != keywords::CrateRoot.name() &&
- segment.identifier.name != keywords::DollarCrate.name() {
- self.writer().word(&segment.identifier.name.as_str())?;
- } else if segment.identifier.name == keywords::DollarCrate.name() {
- self.print_dollar_crate(segment.identifier.span.ctxt())?;
+ if segment.ident.name != keywords::CrateRoot.name() &&
+ segment.ident.name != keywords::DollarCrate.name() {
+ self.writer().word(&segment.ident.name.as_str())?;
+ } else if segment.ident.name == keywords::DollarCrate.name() {
+ self.print_dollar_crate(segment.ident.span.ctxt())?;
}
}
self.writer().space()?;
let base_args = &args[1..];
self.print_expr_maybe_paren(&args[0], parser::PREC_POSTFIX)?;
self.s.word(".")?;
- self.print_ident(segment.identifier)?;
+ self.print_ident(segment.ident)?;
if let Some(ref parameters) = segment.parameters {
self.print_path_parameters(parameters, true)?;
}
colons_before_params: bool)
-> io::Result<()>
{
- if segment.identifier.name != keywords::CrateRoot.name() &&
- segment.identifier.name != keywords::DollarCrate.name() {
- self.print_ident(segment.identifier)?;
+ if segment.ident.name != keywords::CrateRoot.name() &&
+ segment.ident.name != keywords::DollarCrate.name() {
+ self.print_ident(segment.ident)?;
if let Some(ref parameters) = segment.parameters {
self.print_path_parameters(parameters, colons_before_params)?;
}
- } else if segment.identifier.name == keywords::DollarCrate.name() {
- self.print_dollar_crate(segment.identifier.span.ctxt())?;
+ } else if segment.ident.name == keywords::DollarCrate.name() {
+ self.print_dollar_crate(segment.ident.span.ctxt())?;
}
Ok(())
}
self.s.word(">")?;
self.s.word("::")?;
let item_segment = path.segments.last().unwrap();
- self.print_ident(item_segment.identifier)?;
+ self.print_ident(item_segment.ident)?;
match item_segment.parameters {
Some(ref parameters) => self.print_path_parameters(parameters, colons_before_params),
None => Ok(()),
pub fn walk_path_segment<'a, V: Visitor<'a>>(visitor: &mut V,
path_span: Span,
segment: &'a PathSegment) {
- visitor.visit_ident(path_span, segment.identifier);
+ visitor.visit_ident(path_span, segment.ident);
if let Some(ref parameters) = segment.parameters {
visitor.visit_path_parameters(path_span, parameters);
}
fn visit_ty(&mut self, ty: &'a ast::Ty) {
if let ast::TyKind::Path(_, ref path) = ty.node {
if let Some(segment) = path.segments.first() {
- if self.ty_param_names.contains(&segment.identifier.name) {
+ if self.ty_param_names.contains(&segment.ident.name) {
self.types.push(P(ty.clone()));
}
}
// if we have already handled this type, skip it
if let ast::TyKind::Path(_, ref p) = ty.node {
if p.segments.len() == 1 &&
- ty_param_names.contains(&p.segments[0].identifier.name) ||
+ ty_param_names.contains(&p.segments[0].ident.name) ||
processed_field_types.contains(&p.segments) {
continue;
};
}
fn make_x() -> P<Expr> {
- let seg = PathSegment {
- identifier: Ident::from_str("x"),
- span: DUMMY_SP,
- parameters: None,
- };
- let path = Path {
- span: DUMMY_SP,
- segments: vec![seg],
- };
+ let seg = PathSegment::from_ident(Ident::from_str("x"), DUMMY_SP);
+ let path = Path { segments: vec![seg], span: DUMMY_SP };
expr(ExprKind::Path(None, path))
}
0 => iter_exprs(depth - 1, &mut |e| g(ExprKind::Box(e))),
1 => iter_exprs(depth - 1, &mut |e| g(ExprKind::Call(e, vec![]))),
2 => {
- let seg = PathSegment {
- identifier: Ident::from_str("x"),
- span: DUMMY_SP,
- parameters: None,
- };
-
+ let seg = PathSegment::from_ident(Ident::from_str("x"), DUMMY_SP);
iter_exprs(depth - 1, &mut |e| g(ExprKind::MethodCall(
seg.clone(), vec![e, make_x()])));
iter_exprs(depth - 1, &mut |e| g(ExprKind::MethodCall(
iter_exprs(depth - 1, &mut |e| g(ExprKind::Ret(Some(e))));
},
14 => {
- let seg = PathSegment {
- identifier: Ident::from_str("S"),
- span: DUMMY_SP,
- parameters: None,
- };
- let path = Path {
- span: DUMMY_SP,
- segments: vec![seg],
- };
+ let seg = PathSegment::new(Ident::from_str("S"), DUMMY_SP);
+ let path = Path { segments: vec![seg], span: DUMMY_SP };
g(ExprKind::Struct(path, vec![], Some(make_x())));
},
15 => {