diff options
| author | Esteban Küber <esteban@kuber.com.ar> | 2023-06-16 19:44:06 +0000 |
|---|---|---|
| committer | Esteban Küber <esteban@kuber.com.ar> | 2023-06-22 16:50:31 +0000 |
| commit | 7dffd24da5292cc01f18c4ab53f0b96f682fcbe3 (patch) | |
| tree | ea1661ccd5cbc1b72aa6842bed7c2d292a1fd169 /tests/ui/structs | |
| parent | 717c4817391f61953eed678607168cfea81e3111 (diff) | |
| download | rust-7dffd24da5292cc01f18c4ab53f0b96f682fcbe3.tar.gz rust-7dffd24da5292cc01f18c4ab53f0b96f682fcbe3.zip | |
Tweak privacy errors to account for reachable items
Suggest publicly accessible paths for items in private mod: When encountering a path in non-import situations that are not reachable due to privacy constraints, search for any public re-exports that the user could use instead. Track whether an import suggestion is offering a re-export. When encountering a path with private segments, mention if the item at the final path segment is not publicly accessible at all. Add item visibility metadata to privacy errors from imports: On unreachable imports, record the item that was being imported in order to suggest publicly available re-exports or to be explicit that the item is not available publicly from any path. In order to allow this, we add a mode to `resolve_path` that will not add new privacy errors, nor return early if it encounters one. This way we can get the `Res` corresponding to the final item in the import, which is used in the privacy error machinery.
Diffstat (limited to 'tests/ui/structs')
| -rw-r--r-- | tests/ui/structs/struct-variant-privacy-xc.stderr | 4 | ||||
| -rw-r--r-- | tests/ui/structs/struct-variant-privacy.stderr | 4 |
2 files changed, 6 insertions, 2 deletions
diff --git a/tests/ui/structs/struct-variant-privacy-xc.stderr b/tests/ui/structs/struct-variant-privacy-xc.stderr index 1c1caaef8b7..7a1c84badef 100644 --- a/tests/ui/structs/struct-variant-privacy-xc.stderr +++ b/tests/ui/structs/struct-variant-privacy-xc.stderr @@ -14,7 +14,9 @@ error[E0603]: enum `Bar` is private --> $DIR/struct-variant-privacy-xc.rs:7:33 | LL | struct_variant_privacy::Bar::Baz { a: _a } => {} - | ^^^ private enum + | ^^^ --- variant `Baz` is not publicly re-exported + | | + | private enum | note: the enum `Bar` is defined here --> $DIR/auxiliary/struct_variant_privacy.rs:1:1 diff --git a/tests/ui/structs/struct-variant-privacy.stderr b/tests/ui/structs/struct-variant-privacy.stderr index eafd26c716f..eabd66907f6 100644 --- a/tests/ui/structs/struct-variant-privacy.stderr +++ b/tests/ui/structs/struct-variant-privacy.stderr @@ -14,7 +14,9 @@ error[E0603]: enum `Bar` is private --> $DIR/struct-variant-privacy.rs:10:14 | LL | foo::Bar::Baz { a: _a } => {} - | ^^^ private enum + | ^^^ --- variant `Baz` is not publicly re-exported + | | + | private enum | note: the enum `Bar` is defined here --> $DIR/struct-variant-privacy.rs:2:5 |
