Skip to content

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

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
NickLarsenNZ opened this issue May 8, 2025 · 0 comments

Comments

@NickLarsenNZ
Copy link
Member

NickLarsenNZ commented May 8, 2025

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.

@NickLarsenNZ NickLarsenNZ changed the title stackable-versioned: Require inner module definitions to have the same vis8ibility as the parent stackable-versioned: Require inner module definitions to have the same visibility as the parent May 8, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant