1
Fork 0

Rollup merge of #50979 - Manishearth:type-only, r=estebank

Fix span for type-only arguments

Currently it points to the comma or parenthesis before the type, which is broken

cc @mark-i-m this is what broke #48309

r? @estebank
This commit is contained in:
kennytm 2018-05-24 16:02:42 +08:00 committed by GitHub
commit 6441ebe5a7
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -1771,27 +1771,27 @@ impl<'a> Parser<'a> {
pub fn parse_arg_general(&mut self, require_name: bool) -> PResult<'a, Arg> { pub fn parse_arg_general(&mut self, require_name: bool) -> PResult<'a, Arg> {
maybe_whole!(self, NtArg, |x| x); maybe_whole!(self, NtArg, |x| x);
let pat = if require_name || self.is_named_argument() { let (pat, ty) = if require_name || self.is_named_argument() {
debug!("parse_arg_general parse_pat (require_name:{})", debug!("parse_arg_general parse_pat (require_name:{})",
require_name); require_name);
let pat = self.parse_pat()?; let pat = self.parse_pat()?;
self.expect(&token::Colon)?; self.expect(&token::Colon)?;
pat (pat, self.parse_ty()?)
} else { } else {
debug!("parse_arg_general ident_to_pat"); debug!("parse_arg_general ident_to_pat");
let ident = Ident::new(keywords::Invalid.name(), self.prev_span); let ident = Ident::new(keywords::Invalid.name(), self.prev_span);
P(Pat { let ty = self.parse_ty()?;
let pat = P(Pat {
id: ast::DUMMY_NODE_ID, id: ast::DUMMY_NODE_ID,
node: PatKind::Ident(BindingMode::ByValue(Mutability::Immutable), ident, None), node: PatKind::Ident(BindingMode::ByValue(Mutability::Immutable), ident, None),
span: ident.span, span: ty.span,
}) });
(pat, ty)
}; };
let t = self.parse_ty()?;
Ok(Arg { Ok(Arg {
ty: t, ty,
pat, pat,
id: ast::DUMMY_NODE_ID, id: ast::DUMMY_NODE_ID,
}) })