File tree 7 files changed +39
-7
lines changed
7 files changed +39
-7
lines changed Original file line number Diff line number Diff line change @@ -8,7 +8,7 @@ privacy_from_private_dep_in_public_interface =
8
8
privacy_in_public_interface = { $vis_descr } { $kind } `{ $descr } ` in public interface
9
9
.label = can't leak { $vis_descr } { $kind }
10
10
.visibility_label = `{ $descr } ` declared as { $vis_descr }
11
- .suggestion = consider adding `pub ` in front of it
11
+ .suggestion = consider adding `{ $vis_sugg } ` in front of it
12
12
13
13
privacy_item_is_private = { $kind } `{ $descr } ` is private
14
14
.label = private { $kind }
Original file line number Diff line number Diff line change @@ -55,6 +55,7 @@ pub struct InPublicInterface<'a> {
55
55
pub span : Span ,
56
56
pub vis_descr : & ' static str ,
57
57
pub kind : & ' a str ,
58
+ pub vis_sugg : & ' static str ,
58
59
pub descr : DiagnosticArgFromDisplay < ' a > ,
59
60
#[ label( privacy_visibility_label) ]
60
61
pub vis_span : Span ,
Original file line number Diff line number Diff line change @@ -1475,12 +1475,31 @@ impl SearchInterfaceForPrivateItemsVisitor<'_> {
1475
1475
}
1476
1476
} ;
1477
1477
1478
+ // FIXME: this code was adapted from the above `vis_descr` computation,
1479
+ // but it's not clear if it's correct.
1480
+ let vis_sugg = match self . required_visibility {
1481
+ ty:: Visibility :: Public => "pub" ,
1482
+ ty:: Visibility :: Restricted ( vis_def_id) => {
1483
+ if vis_def_id
1484
+ == self . tcx . parent_module_from_def_id ( local_def_id) . to_local_def_id ( )
1485
+ {
1486
+ "???FIXME???"
1487
+ } else if vis_def_id. is_top_level_module ( ) {
1488
+ "pub(crate)"
1489
+ } else {
1490
+ "???FIXME???"
1491
+ }
1492
+ }
1493
+ } ;
1494
+
1478
1495
self . tcx . sess . emit_err ( InPublicInterface {
1479
1496
span,
1480
1497
vis_descr,
1481
1498
kind,
1499
+ vis_sugg,
1482
1500
descr : descr. into ( ) ,
1483
1501
vis_span,
1502
+ suggestion : vis_span,
1484
1503
} ) ;
1485
1504
return false ;
1486
1505
}
Original file line number Diff line number Diff line change @@ -2,7 +2,10 @@ error[E0446]: private type `Bar` in public interface
2
2
--> $DIR/E0446.rs:10:5
3
3
|
4
4
LL | struct Bar;
5
- | ---------- `Bar` declared as private
5
+ | ----------
6
+ | |
7
+ | `Bar` declared as private
8
+ | help: consider adding `pub` in front of it
6
9
...
7
10
LL | type Alias1 = Bar;
8
11
| ^^^^^^^^^^^ can't leak private type
@@ -11,7 +14,10 @@ error[E0446]: private trait `PrivTr` in public interface
11
14
--> $DIR/E0446.rs:11:5
12
15
|
13
16
LL | trait PrivTr {}
14
- | ------------ `PrivTr` declared as private
17
+ | ------------
18
+ | |
19
+ | `PrivTr` declared as private
20
+ | help: consider adding `pub` in front of it
15
21
...
16
22
LL | type Alias2 = Box<dyn PrivTr>;
17
23
| ^^^^^^^^^^^ can't leak private trait
Original file line number Diff line number Diff line change @@ -18,7 +18,7 @@ LL | struct Priv;
18
18
| -----------
19
19
| |
20
20
| `m2::Priv` declared as private
21
- | help: consider adding `pub` in front of it
21
+ | help: consider adding `pub(crate) ` in front of it
22
22
LL | impl ::std::ops::Deref for ::SemiPriv {
23
23
LL | type Target = Priv;
24
24
| ^^^^^^^^^^^ can't leak private type
@@ -30,7 +30,7 @@ LL | struct Priv;
30
30
| -----------
31
31
| |
32
32
| `m3::Priv` declared as private
33
- | help: consider adding `pub` in front of it
33
+ | help: consider adding `pub(crate) ` in front of it
34
34
LL | impl ::SemiPrivTrait for () {
35
35
LL | type Assoc = Priv;
36
36
| ^^^^^^^^^^ can't leak private type
Original file line number Diff line number Diff line change @@ -75,7 +75,10 @@ error[E0446]: private trait `PrivTr` in public interface
75
75
--> $DIR/private-in-public-assoc-ty.rs:41:9
76
76
|
77
77
LL | trait PrivTr {}
78
- | ------------ `PrivTr` declared as private
78
+ | ------------
79
+ | |
80
+ | `PrivTr` declared as private
81
+ | help: consider adding `pub` in front of it
79
82
...
80
83
LL | type Exist = impl PrivTr;
81
84
| ^^^^^^^^^^ can't leak private trait
Original file line number Diff line number Diff line change @@ -75,7 +75,10 @@ LL | type AssocTy = Const<{ my_const_fn(U) }>;
75
75
| ^^^^^^^^^^^^ can't leak private type
76
76
...
77
77
LL | const fn my_const_fn(val: u8) -> u8 {
78
- | ----------------------------------- `fn(u8) -> u8 {my_const_fn}` declared as private
78
+ | -----------------------------------
79
+ | |
80
+ | `fn(u8) -> u8 {my_const_fn}` declared as private
81
+ | help: consider adding `pub` in front of it
79
82
80
83
error: aborting due to previous error; 5 warnings emitted
81
84
You can’t perform that action at this time.
0 commit comments