1
Fork 0

debug logging, added conditional error message, tests updated

This commit is contained in:
Kevyn Grasso 2018-11-12 15:50:27 -05:00
parent 286dc37d1b
commit 9de6beeae2
3 changed files with 24 additions and 4 deletions

View file

@ -3010,6 +3010,7 @@ impl<'a, 'crateloader: 'a> Resolver<'a, 'crateloader> {
// Visit all direct subpatterns of this pattern. // Visit all direct subpatterns of this pattern.
let outer_pat_id = pat.id; let outer_pat_id = pat.id;
pat.walk(&mut |pat| { pat.walk(&mut |pat| {
debug!("resolve_pattern pat={:?} node={:?}", pat, pat.node);
match pat.node { match pat.node {
PatKind::Ident(bmode, ident, ref opt_pat) => { PatKind::Ident(bmode, ident, ref opt_pat) => {
// First try to resolve the identifier as some existing // First try to resolve the identifier as some existing
@ -3166,6 +3167,7 @@ impl<'a, 'crateloader: 'a> Resolver<'a, 'crateloader> {
format!("not found in {}", mod_str), format!("not found in {}", mod_str),
item_span) item_span)
}; };
let code = DiagnosticId::Error(code.into()); let code = DiagnosticId::Error(code.into());
let mut err = this.session.struct_span_err_with_code(base_span, &base_msg, code); let mut err = this.session.struct_span_err_with_code(base_span, &base_msg, code);
@ -3189,11 +3191,22 @@ impl<'a, 'crateloader: 'a> Resolver<'a, 'crateloader> {
return (err, Vec::new()); return (err, Vec::new());
} }
if is_self_value(path, ns) { if is_self_value(path, ns) {
debug!("smart_resolve_path_fragment E0424 source:{:?}", source);
__diagnostic_used!(E0424); __diagnostic_used!(E0424);
err.code(DiagnosticId::Error("E0424".into())); err.code(DiagnosticId::Error("E0424".into()));
err.span_label(span, format!("`self` value is a keyword \ err.span_label(span, match source {
only available in \ PathSource::Pat => {
methods with `self` parameter")); format!("`self` value is a keyword \
and may not be bound to \
variables or shadowed")
}
_ => {
format!("`self` value is a keyword \
only available in methods \
with `self` parameter")
}
});
return (err, Vec::new()); return (err, Vec::new());
} }

View file

@ -19,4 +19,5 @@ impl Foo {
} }
fn main () { fn main () {
let self = "self"; //~ ERROR E0424
} }

View file

@ -4,6 +4,12 @@ error[E0424]: expected value, found module `self`
LL | self.bar(); //~ ERROR E0424 LL | self.bar(); //~ ERROR E0424
| ^^^^ `self` value is a keyword only available in methods with `self` parameter | ^^^^ `self` value is a keyword only available in methods with `self` parameter
error: aborting due to previous error error[E0424]: expected unit struct/variant or constant, found module `self`
--> $DIR/E0424.rs:22:9
|
LL | let self = "self"; //~ ERROR E0424
| ^^^^ `self` value is a keyword and may not be bound to variables or shadowed
error: aborting due to 2 previous errors
For more information about this error, try `rustc --explain E0424`. For more information about this error, try `rustc --explain E0424`.