1
Fork 0

rustc: rename multiple imports in a list

This commit is contained in:
Sean McArthur 2015-07-31 22:20:25 -07:00
parent d03456183e
commit cfcd449c4c
16 changed files with 170 additions and 34 deletions

View file

@ -573,10 +573,12 @@ impl<'a> Parser<'a> {
pub fn parse_path_list_item(&mut self) -> PResult<ast::PathListItem> {
let lo = self.span.lo;
let node = if try!(self.eat_keyword(keywords::SelfValue)) {
ast::PathListMod { id: ast::DUMMY_NODE_ID }
let rename = try!(self.parse_rename());
ast::PathListMod { id: ast::DUMMY_NODE_ID, rename: rename }
} else {
let ident = try!(self.parse_ident());
ast::PathListIdent { name: ident, id: ast::DUMMY_NODE_ID }
let rename = try!(self.parse_rename());
ast::PathListIdent { name: ident, rename: rename, id: ast::DUMMY_NODE_ID }
};
let hi = self.last_span.hi;
Ok(spanned(lo, hi, node))
@ -5104,8 +5106,8 @@ impl<'a> Parser<'a> {
-> PResult<P<Item>> {
let crate_name = try!(self.parse_ident());
let (maybe_path, ident) = if try!(self.eat_keyword(keywords::As)) {
(Some(crate_name.name), try!(self.parse_ident()))
let (maybe_path, ident) = if let Some(ident) = try!(self.parse_rename()) {
(Some(crate_name.name), ident)
} else {
(None, crate_name)
};
@ -5766,12 +5768,18 @@ impl<'a> Parser<'a> {
}
}).collect()
};
if try!(self.eat_keyword(keywords::As)) {
rename_to = try!(self.parse_ident())
}
rename_to = try!(self.parse_rename()).unwrap_or(rename_to);
Ok(P(spanned(lo, self.last_span.hi, ViewPathSimple(rename_to, path))))
}
fn parse_rename(&mut self) -> PResult<Option<Ident>> {
if try!(self.eat_keyword(keywords::As)) {
self.parse_ident().map(Some)
} else {
Ok(None)
}
}
/// Parses a source module as a crate. This is the main
/// entry point for the parser.
pub fn parse_crate_mod(&mut self) -> PResult<Crate> {