Consider inner modules to be local in the non_local_definitions
lint
This commit is contained in:
parent
e27af2917b
commit
21c688af86
2 changed files with 49 additions and 5 deletions
|
@ -356,7 +356,7 @@ fn path_has_local_parent(
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Given a def id and a parent impl def id, this checks if the parent
|
/// Given a def id and a parent impl def id, this checks if the parent
|
||||||
/// def id correspond to the def id of the parent impl definition.
|
/// def id (modulo modules) correspond to the def id of the parent impl definition.
|
||||||
#[inline]
|
#[inline]
|
||||||
fn did_has_local_parent(
|
fn did_has_local_parent(
|
||||||
did: DefId,
|
did: DefId,
|
||||||
|
@ -364,8 +364,14 @@ fn did_has_local_parent(
|
||||||
impl_parent: DefId,
|
impl_parent: DefId,
|
||||||
impl_parent_parent: Option<DefId>,
|
impl_parent_parent: Option<DefId>,
|
||||||
) -> bool {
|
) -> bool {
|
||||||
did.is_local() && {
|
did.is_local()
|
||||||
let res_parent = tcx.parent(did);
|
&& if let Some(did_parent) = tcx.opt_parent(did) {
|
||||||
res_parent == impl_parent || Some(res_parent) == impl_parent_parent
|
did_parent == impl_parent
|
||||||
}
|
|| Some(did_parent) == impl_parent_parent
|
||||||
|
|| !did_parent.is_crate_root()
|
||||||
|
&& tcx.def_kind(did_parent) == DefKind::Mod
|
||||||
|
&& did_has_local_parent(did_parent, tcx, impl_parent, impl_parent_parent)
|
||||||
|
} else {
|
||||||
|
false
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
38
tests/ui/lint/non-local-defs/module_as_local.rs
Normal file
38
tests/ui/lint/non-local-defs/module_as_local.rs
Normal file
|
@ -0,0 +1,38 @@
|
||||||
|
//! This test checks that module are treated as if they were local
|
||||||
|
//!
|
||||||
|
//! https://github.com/rust-lang/rust/issues/124396
|
||||||
|
|
||||||
|
//@ check-pass
|
||||||
|
|
||||||
|
trait JoinTo {}
|
||||||
|
|
||||||
|
fn simple_one() {
|
||||||
|
mod posts {
|
||||||
|
#[allow(non_camel_case_types)]
|
||||||
|
pub struct table {}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl JoinTo for posts::table {}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn simple_two() {
|
||||||
|
mod posts {
|
||||||
|
pub mod posts {
|
||||||
|
#[allow(non_camel_case_types)]
|
||||||
|
pub struct table {}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl JoinTo for posts::posts::table {}
|
||||||
|
}
|
||||||
|
|
||||||
|
struct Global;
|
||||||
|
fn trait_() {
|
||||||
|
mod posts {
|
||||||
|
pub trait AdjecentTo {}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl posts::AdjecentTo for Global {}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {}
|
Loading…
Add table
Add a link
Reference in a new issue