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,10 +2654,34 @@ impl<'a> Resolver<'a> {
|
|||||||
|
|
||||||
}
|
}
|
||||||
Some(_) => {
|
Some(_) => {
|
||||||
// The import is unresolved. Bail out.
|
// If containing_module is the same module whose import we are resolving
|
||||||
debug!("(resolving single import) unresolved import; \
|
// and there it has an unresolved import with the same name as `source`,
|
||||||
bailing out");
|
// then the user is actually trying to import an item that is declared
|
||||||
return Indeterminate;
|
// 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");
|
||||||
|
return Indeterminate;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -3018,7 +3042,7 @@ impl<'a> Resolver<'a> {
|
|||||||
fn check_for_conflicts_between_imports_and_items(&mut self,
|
fn check_for_conflicts_between_imports_and_items(&mut self,
|
||||||
module: &Module,
|
module: &Module,
|
||||||
import_resolution:
|
import_resolution:
|
||||||
&mut ImportResolution,
|
&ImportResolution,
|
||||||
import_span: Span,
|
import_span: Span,
|
||||||
name: Name) {
|
name: Name) {
|
||||||
if self.session.features.borrow().import_shadowing {
|
if self.session.features.borrow().import_shadowing {
|
||||||
@ -3031,8 +3055,9 @@ impl<'a> Resolver<'a> {
|
|||||||
.contains_key(&name) {
|
.contains_key(&name) {
|
||||||
match import_resolution.type_target {
|
match import_resolution.type_target {
|
||||||
Some(ref target) if !target.shadowable => {
|
Some(ref target) if !target.shadowable => {
|
||||||
let msg = format!("import `{}` conflicts with imported \
|
let msg = format!("import `{0}` conflicts with imported \
|
||||||
crate in this module",
|
crate in this module \
|
||||||
|
(maybe you meant `use {0}::*`?)",
|
||||||
token::get_name(name).get());
|
token::get_name(name).get());
|
||||||
self.session.span_err(import_span, msg.as_slice());
|
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.
|
// except according to those terms.
|
||||||
|
|
||||||
extern crate core;
|
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() {}
|
fn main() {}
|
||||||
|
Loading…
Reference in New Issue
Block a user