improve error when self is used as not the first argument

This commit is contained in:
Axary 2018-11-16 19:27:27 +01:00
parent 646d68f585
commit fe23ffbda0
5 changed files with 30 additions and 13 deletions

View file

@ -1824,6 +1824,14 @@ impl<'a> Parser<'a> {
fn parse_arg_general(&mut self, require_name: bool) -> PResult<'a, Arg> {
maybe_whole!(self, NtArg, |x| x);
if let Ok(Some(_)) = self.parse_self_arg() {
let mut err = self.struct_span_err(self.prev_span,
"unexpected `self` argument in function");
err.span_label(self.prev_span,
"`self` is only valid as the first argument of a trait function");
return Err(err);
}
let (pat, ty) = if require_name || self.is_named_argument() {
debug!("parse_arg_general parse_pat (require_name:{})",
require_name);
@ -5386,14 +5394,7 @@ impl<'a> Parser<'a> {
fn parse_fn_args(&mut self, named_args: bool, allow_variadic: bool)
-> PResult<'a, (Vec<Arg> , bool)> {
self.expect(&token::OpenDelim(token::Paren))?;
if let Ok(Some(_)) = self.parse_self_arg() {
let mut err = self.struct_span_err(self.prev_span
, "unexpected `self` argument in bare function");
err.span_label(self.prev_span, "invalid argument in bare function");
return Err(err);
}
let sp = self.span;
let mut variadic = false;
let args: Vec<Option<Arg>> =