Diagnostic and cause
LinkPrivate type in exported surface
- Family
- topaz
- Phase
- resolve
- Code
TPZ3014
Cause and conditions
An exported declaration produces TPZ3014 when its resolved type exposes a private nominal type after transparent alias expansion. Annotated and inferred types follow the same rule.
Related rule: Trigger and repairResponse
Export the nominal type when it belongs in the public API, or return a value with an accessible type.
Source evidence
- compiler/crates/topaz_diag/src/explain.rs at
151141d7bb44· 463-471 - compiler/crates/topaz_self_frontend/topaz/resolver/validation_init.tpz at
151141d7bb44· 76-76 - compiler/crates/topaz_self_frontend/topaz/resolver/validation_init.tpz at
151141d7bb44· 48-88 - compiler/crates/topaz_self_frontend/topaz/resolver/validation_init.tpz at
151141d7bb44· 92-119 - TPZ3014 at
151141d7bb44
The compiler facts describe the earlier source visibility check. The resolved public type contract also covers inferred types and expands transparent aliases before checking nominal visibility.
Compiler phase: resolve.
Compiler explanation: An exported signature mentions a type alias that the module does not export.
Message templates. The marker ⟨value⟩ stands for text computed for the reported program.
⟨value⟩is a module-private type and may not appear in an exported public surface; export the type or use an inline structural type Source
An exported declaration exposes a module-private nominal type in its resolved type. The same rule covers annotated and inferred types after transparent alias expansion. The example exposes the private Count record in a return annotation.
Trigger and repair
An exported declaration produces TPZ3014 when its resolved type exposes a private nominal type after transparent alias expansion. Annotated and inferred types follow the same rule.
Source evidence
- compiler/crates/topaz_self_frontend/topaz/resolver/validation_init.tpz at
151141d7bb44· 48-88 - compiler/crates/topaz_self_frontend/topaz/resolver/validation_init.tpz at
151141d7bb44· 92-119 - TPZ3014 at
151141d7bb44
Response
LinkExport the nominal type when it belongs in the public API, or return a value with an accessible type.
Reproduction and verification
LinkRejected program
Linkimport lib
No stdout.
record Count { value: int }export function count() -> Count { Count { value: 1 } }
Expected result
The expected diagnostic, cause, source location, and accompanying diagnostics are specified below. The verification status records whether this program has been run.
Source evidence
- compiler/crates/topaz_diag/src/explain.rs at
151141d7bb44· 463-471 - compiler/crates/topaz_self_frontend/topaz/resolver/validation_init.tpz at
151141d7bb44· 76-76 - compiler/crates/topaz_self_frontend/topaz/resolver/validation_init.tpz at
151141d7bb44· 48-88 - compiler/crates/topaz_self_frontend/topaz/resolver/validation_init.tpz at
151141d7bb44· 92-119 - TPZ3014 at
151141d7bb44
Corrected program
Linkimport lib
No stdout.
export record Count { value: int }export function count() -> Count { Count { value: 1 } }
Expected result
Expected result
Checking accepts the program. Exit code 0.
This program applies the repair described above. The verification status records whether it has been run.
Source evidence
- compiler/crates/topaz_self_frontend/topaz/resolver/validation_init.tpz at
151141d7bb44· 48-88 - compiler/crates/topaz_self_frontend/topaz/resolver/validation_init.tpz at
151141d7bb44· 92-119 - TPZ3014 at
151141d7bb44