1
Fork 0

Auto merge of #27451 - seanmonstar:use-groups-as, r=alexcrichton

An implementation of [RFC 1219](https://github.com/rust-lang/rfcs/pull/1219).

The RFC is not merged yet, but once merged, this could be.
This commit is contained in:
bors 2015-08-10 20:24:06 +00:00
commit 8856927f64
16 changed files with 170 additions and 34 deletions

View file

@ -574,10 +574,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))
@ -5117,8 +5119,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)
};
@ -5779,12 +5781,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> {