Documentation
use self::public_for_any_external_crate::second;

pub(crate) fn public_in_this_crate() {
    // public_for_any_external_crate::second::third(); // error
    public_for_any_external_crate::pulic_in_visvility_that_is_super_from_here();
    public_for_any_external_crate::second::public_in_grandparent();
    use public_for_any_external_crate::second::public_in_grandparent;
    public_in_grandparent();
    // public_for_any_external_crate::public_in_this_mod(); // error
    // public_for_any_external_crate::same_as_public_in_this_mod(); // error
}

pub mod public_for_any_external_crate {
    pub(self) fn public_in_this_mod() {
        second::third();
    }
    fn same_as_public_in_this_mod() {
        second::third();
    }
    pub(super) fn pulic_in_visvility_that_is_super_from_here() {}
    pub mod second {
        pub(in crate::visibility::public_for_any_external_crate) fn third() {
            // println!("can you see?");
        }
        pub(in super::super) fn public_in_grandparent() {}
    }
}