syntax: Mod records the span for inner contents.
this is useful when the module item and module contents are defined from different files (like rustdoc). in most cases the original span for the module item would be used; in other cases, the span for module contents is available separately at the `inner` field.
This commit is contained in:
@@ -4036,7 +4036,8 @@ impl<'a> Parser<'a> {
|
||||
// attributes (of length 0 or 1), parse all of the items in a module
|
||||
fn parse_mod_items(&mut self,
|
||||
term: token::Token,
|
||||
first_item_attrs: Vec<Attribute> )
|
||||
first_item_attrs: Vec<Attribute>,
|
||||
inner_lo: BytePos)
|
||||
-> Mod {
|
||||
// parse all of the items up to closing or an attribute.
|
||||
// view items are legal here.
|
||||
@@ -4081,7 +4082,11 @@ impl<'a> Parser<'a> {
|
||||
self.span_err(self.last_span, "expected item after attributes");
|
||||
}
|
||||
|
||||
ast::Mod { view_items: view_items, items: items }
|
||||
ast::Mod {
|
||||
inner: mk_sp(inner_lo, self.span.lo),
|
||||
view_items: view_items,
|
||||
items: items
|
||||
}
|
||||
}
|
||||
|
||||
fn parse_item_const(&mut self) -> ItemInfo {
|
||||
@@ -4107,8 +4112,9 @@ impl<'a> Parser<'a> {
|
||||
} else {
|
||||
self.push_mod_path(id, outer_attrs);
|
||||
self.expect(&token::LBRACE);
|
||||
let mod_inner_lo = self.span.lo;
|
||||
let (inner, next) = self.parse_inner_attrs_and_next();
|
||||
let m = self.parse_mod_items(token::RBRACE, next);
|
||||
let m = self.parse_mod_items(token::RBRACE, next, mod_inner_lo);
|
||||
self.expect(&token::RBRACE);
|
||||
self.pop_mod_path();
|
||||
(id, ItemMod(m), Some(inner))
|
||||
@@ -4197,10 +4203,11 @@ impl<'a> Parser<'a> {
|
||||
self.cfg.clone(),
|
||||
&path,
|
||||
id_sp);
|
||||
let mod_inner_lo = p0.span.lo;
|
||||
let (inner, next) = p0.parse_inner_attrs_and_next();
|
||||
let mod_attrs = outer_attrs.append(inner.as_slice());
|
||||
let first_item_outer_attrs = next;
|
||||
let m0 = p0.parse_mod_items(token::EOF, first_item_outer_attrs);
|
||||
let m0 = p0.parse_mod_items(token::EOF, first_item_outer_attrs, mod_inner_lo);
|
||||
self.sess.included_mod_stack.borrow_mut().pop();
|
||||
return (ast::ItemMod(m0), mod_attrs);
|
||||
}
|
||||
@@ -5061,7 +5068,7 @@ impl<'a> Parser<'a> {
|
||||
let (inner, next) = self.parse_inner_attrs_and_next();
|
||||
let first_item_outer_attrs = next;
|
||||
// parse the items inside the crate:
|
||||
let m = self.parse_mod_items(token::EOF, first_item_outer_attrs);
|
||||
let m = self.parse_mod_items(token::EOF, first_item_outer_attrs, lo);
|
||||
|
||||
ast::Crate {
|
||||
module: m,
|
||||
|
||||
Reference in New Issue
Block a user