Skip to content

stackable-versioned: Require inner module definitions to have the same visibility as the parent #1028

@NickLarsenNZ

Description

@NickLarsenNZ

As discussion with @Techassi, we should warn/error if the visibility of the inner module doesn't match the outer module.

The inner module ends up with the same visibility as the parent anyway, but it is confusing if it is not the same.

#[versioned(version(name = "v1alpha1"))]
pub mod versioned {

    // contents of this mod get merged with the generated `v1alpha` mod.
    // nothing unusual here, pub all the way
	pub mod v1alpha1 {
        pub use v1alpha1_impl::Error;
    }

}

Is equivalent to:

#[versioned(version(name = "v1alpha1"))]
pub mod versioned {

    // contents of this mod get merged with the generated `v1alpha` mod, 
    // with `pub` visibility (because of `pub mod versioned`).
    // 👇
	mod v1alpha1 {
        pub use v1alpha1_impl::Error;
    }

}

However, it appears confusing to the reader. Eg:

How can the pub use be of any use inside a private mod?

... with the answer being oh, the mod is actually pub mod because of pub mod versioned which leads to pub mod v1alpha being generated, which absorbs the contents of the mod v1alpha1 that you see in the source.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions