debug logging, added conditional error message, tests updated
This commit is contained in:
parent
286dc37d1b
commit
9de6beeae2
3 changed files with 24 additions and 4 deletions
|
@ -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());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -19,4 +19,5 @@ impl Foo {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn main () {
|
fn main () {
|
||||||
|
let self = "self"; //~ ERROR E0424
|
||||||
}
|
}
|
||||||
|
|
|
@ -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`.
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue