Fix error message for E0256 in certain cases.
Previously, it said "import `Foo` conflicts with existing submodule" even when it was a type alias, enum, or trait. The message now says the conflict is with "type in this module" in the case of the first two, and "trait in this module" for the last one. Fixes #24081.
This commit is contained in:
parent
f6d53af85f
commit
0c22cd7906
2 changed files with 32 additions and 4 deletions
|
|
@ -12,6 +12,7 @@ use self::ImportDirectiveSubclass::*;
|
|||
|
||||
use DefModifiers;
|
||||
use Module;
|
||||
use ModuleKind;
|
||||
use Namespace::{self, TypeNS, ValueNS};
|
||||
use NameBindings;
|
||||
use NamespaceResult::{BoundResult, UnboundResult, UnknownResult};
|
||||
|
|
@ -980,10 +981,14 @@ impl<'a, 'b:'a, 'tcx:'b> ImportResolver<'a, 'b, 'tcx> {
|
|||
match import_resolution.type_target {
|
||||
Some(ref target) if target.shadowable != Shadowable::Always => {
|
||||
if let Some(ref ty) = *name_bindings.type_def.borrow() {
|
||||
let (what, note) = if ty.module_def.is_some() {
|
||||
("existing submodule", "note conflicting module here")
|
||||
} else {
|
||||
("type in this module", "note conflicting type here")
|
||||
let (what, note) = match ty.module_def {
|
||||
Some(ref module)
|
||||
if module.kind.get() == ModuleKind::NormalModuleKind =>
|
||||
("existing submodule", "note conflicting module here"),
|
||||
Some(ref module)
|
||||
if module.kind.get() == ModuleKind::TraitModuleKind =>
|
||||
("trait in this module", "note conflicting trait here"),
|
||||
_ => ("type in this module", "note conflicting type here"),
|
||||
};
|
||||
span_err!(self.resolver.session, import_span, E0256,
|
||||
"import `{}` conflicts with {}",
|
||||
|
|
|
|||
23
src/test/compile-fail/issue-24081.rs
Normal file
23
src/test/compile-fail/issue-24081.rs
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
// Copyright 2015 The Rust Project Developers. See the COPYRIGHT
|
||||
// file at the top-level directory of this distribution and at
|
||||
// http://rust-lang.org/COPYRIGHT.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
|
||||
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
|
||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
|
||||
use std::ops::Add; //~ ERROR import `Add` conflicts with type in this module
|
||||
use std::ops::Sub; //~ ERROR import `Sub` conflicts with type in this module
|
||||
use std::ops::Mul; //~ ERROR import `Mul` conflicts with type in this module
|
||||
use std::ops::Div; //~ ERROR import `Div` conflicts with existing submodule
|
||||
use std::ops::Rem; //~ ERROR import `Rem` conflicts with trait in this module
|
||||
|
||||
type Add = bool;
|
||||
struct Sub { x: f32 }
|
||||
enum Mul { A, B }
|
||||
mod Div { }
|
||||
trait Rem { }
|
||||
|
||||
fn main() {}
|
||||
Loading…
Add table
Add a link
Reference in a new issue