mirror of
https://github.com/rust-lang/rust.git
synced 2025-04-28 11:07:42 +00:00
auto merge of #19522 : mukilan/rust/import-conflicts-item, r=cmr
Fixes #19498
This commit is contained in:
commit
a243e8820a
@ -2654,6 +2654,28 @@ impl<'a> Resolver<'a> {
|
||||
|
||||
}
|
||||
Some(_) => {
|
||||
// If containing_module is the same module whose import we are resolving
|
||||
// and there it has an unresolved import with the same name as `source`,
|
||||
// then the user is actually trying to import an item that is declared
|
||||
// in the same scope
|
||||
//
|
||||
// e.g
|
||||
// use self::submodule;
|
||||
// pub mod submodule;
|
||||
//
|
||||
// In this case we continue as if we resolved the import and let the
|
||||
// check_for_conflicts_between_imports_and_items call below handle
|
||||
// the conflict
|
||||
match (module_.def_id.get(), containing_module.def_id.get()) {
|
||||
(Some(id1), Some(id2)) if id1 == id2 => {
|
||||
if value_result.is_unknown() {
|
||||
value_result = UnboundResult;
|
||||
}
|
||||
if type_result.is_unknown() {
|
||||
type_result = UnboundResult;
|
||||
}
|
||||
}
|
||||
_ => {
|
||||
// The import is unresolved. Bail out.
|
||||
debug!("(resolving single import) unresolved import; \
|
||||
bailing out");
|
||||
@ -2662,6 +2684,8 @@ impl<'a> Resolver<'a> {
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// If we didn't find a result in the type namespace, search the
|
||||
// external modules.
|
||||
@ -3018,7 +3042,7 @@ impl<'a> Resolver<'a> {
|
||||
fn check_for_conflicts_between_imports_and_items(&mut self,
|
||||
module: &Module,
|
||||
import_resolution:
|
||||
&mut ImportResolution,
|
||||
&ImportResolution,
|
||||
import_span: Span,
|
||||
name: Name) {
|
||||
if self.session.features.borrow().import_shadowing {
|
||||
@ -3031,8 +3055,9 @@ impl<'a> Resolver<'a> {
|
||||
.contains_key(&name) {
|
||||
match import_resolution.type_target {
|
||||
Some(ref target) if !target.shadowable => {
|
||||
let msg = format!("import `{}` conflicts with imported \
|
||||
crate in this module",
|
||||
let msg = format!("import `{0}` conflicts with imported \
|
||||
crate in this module \
|
||||
(maybe you meant `use {0}::*`?)",
|
||||
token::get_name(name).get());
|
||||
self.session.span_err(import_span, msg.as_slice());
|
||||
}
|
||||
|
21
src/test/compile-fail/issue-19498.rs
Normal file
21
src/test/compile-fail/issue-19498.rs
Normal file
@ -0,0 +1,21 @@
|
||||
// Copyright 2013 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 self::A; //~ ERROR import `A` conflicts with existing submodule
|
||||
use self::B; //~ ERROR import `B` conflicts with existing submodule
|
||||
mod A {}
|
||||
pub mod B {}
|
||||
|
||||
mod C {
|
||||
use C::D; //~ ERROR import `D` conflicts with existing submodule
|
||||
mod D {}
|
||||
}
|
||||
|
||||
fn main() {}
|
@ -9,6 +9,7 @@
|
||||
// except according to those terms.
|
||||
|
||||
extern crate core;
|
||||
use core; //~ ERROR unresolved import (maybe you meant `core::*`?)
|
||||
use core;
|
||||
//~^ ERROR import `core` conflicts with imported crate in this module
|
||||
|
||||
fn main() {}
|
||||
|
Loading…
Reference in New Issue
Block a user