1
Fork 0

use defkind.descr in wrong namespace resolve failure

This commit is contained in:
YI 2020-04-26 10:28:33 +08:00
parent bb1eedb026
commit eb8a7031ef
3 changed files with 24 additions and 21 deletions

View file

@ -2213,25 +2213,28 @@ impl<'a> Resolver<'a> {
} else {
let mut msg =
format!("could not find `{}` in `{}`", ident, path[i - 1].ident);
if ns == TypeNS {
if let FindBindingResult::Binding(Ok(_)) =
find_binding_in_ns(self, ValueNS)
if ns == TypeNS || ns == ValueNS {
let ns_to_try = if ns == TypeNS { ValueNS } else { TypeNS };
if let FindBindingResult::Binding(Ok(binding)) =
find_binding_in_ns(self, ns_to_try)
{
let mut found = |what| {
msg = format!(
"`{}` in `{}` is a concrete value, not a module or Struct you specified",
"expected {}, found {} `{}` in `{}`",
ns.descr(),
what,
ident,
path[i - 1].ident
);
)
};
} else if ns == ValueNS {
if let FindBindingResult::Binding(Ok(_)) =
find_binding_in_ns(self, TypeNS)
{
msg = format!(
"`{}` in `{}` is a type, not a concrete value you specified",
ident,
path[i - 1].ident
);
if binding.module().is_some() {
found("module")
} else {
match binding.res() {
def::Res::<NodeId>::Def(kind, id) => found(kind.descr(id)),
_ => found(ns_to_try.descr()),
}
}
};
}
(msg, None)

View file

@ -2,5 +2,5 @@ use std::sync::mpsc;
fn main() {
let (tx, rx) = mpsc::channel::new(1);
//~^ ERROR `channel` in `mpsc` is a concrete value, not a module or Struct you specified
//~^ ERROR expected type, found function `channel` in `mpsc`
}

View file

@ -1,8 +1,8 @@
error[E0433]: failed to resolve: `channel` in `mpsc` is a concrete value, not a module or Struct you specified
error[E0433]: failed to resolve: expected type, found function `channel` in `mpsc`
--> $DIR/issue-71406.rs:4:26
|
LL | let (tx, rx) = mpsc::channel::new(1);
| ^^^^^^^ `channel` in `mpsc` is a concrete value, not a module or Struct you specified
| ^^^^^^^ expected type, found function `channel` in `mpsc`
error: aborting due to previous error