Rollup merge of #106579 - estebank:issue-52144, r=Nilstrieb
Suggest making private tuple struct field public Fix #52144.
This commit is contained in:
commit
25fd633828
@ -334,6 +334,15 @@ fn insert_field_names_local(&mut self, def_id: DefId, vdata: &ast::VariantData)
|
|||||||
self.r.field_names.insert(def_id, field_names);
|
self.r.field_names.insert(def_id, field_names);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn insert_field_visibilities_local(&mut self, def_id: DefId, vdata: &ast::VariantData) {
|
||||||
|
let field_vis = vdata
|
||||||
|
.fields()
|
||||||
|
.iter()
|
||||||
|
.map(|field| field.vis.span.until(field.ident.map_or(field.ty.span, |i| i.span)))
|
||||||
|
.collect();
|
||||||
|
self.r.field_visibility_spans.insert(def_id, field_vis);
|
||||||
|
}
|
||||||
|
|
||||||
fn insert_field_names_extern(&mut self, def_id: DefId) {
|
fn insert_field_names_extern(&mut self, def_id: DefId) {
|
||||||
let field_names =
|
let field_names =
|
||||||
self.r.cstore().struct_field_names_untracked(def_id, self.r.session).collect();
|
self.r.cstore().struct_field_names_untracked(def_id, self.r.session).collect();
|
||||||
@ -737,6 +746,7 @@ fn build_reduced_graph_for_item(&mut self, item: &'b Item) {
|
|||||||
|
|
||||||
// Record field names for error reporting.
|
// Record field names for error reporting.
|
||||||
self.insert_field_names_local(def_id, vdata);
|
self.insert_field_names_local(def_id, vdata);
|
||||||
|
self.insert_field_visibilities_local(def_id, vdata);
|
||||||
|
|
||||||
// If this is a tuple or unit struct, define a name
|
// If this is a tuple or unit struct, define a name
|
||||||
// in the value namespace as well.
|
// in the value namespace as well.
|
||||||
@ -770,6 +780,8 @@ fn build_reduced_graph_for_item(&mut self, item: &'b Item) {
|
|||||||
Res::Def(DefKind::Ctor(CtorOf::Struct, ctor_kind), ctor_def_id.to_def_id());
|
Res::Def(DefKind::Ctor(CtorOf::Struct, ctor_kind), ctor_def_id.to_def_id());
|
||||||
self.r.define(parent, ident, ValueNS, (ctor_res, ctor_vis, sp, expansion));
|
self.r.define(parent, ident, ValueNS, (ctor_res, ctor_vis, sp, expansion));
|
||||||
self.r.visibilities.insert(ctor_def_id, ctor_vis);
|
self.r.visibilities.insert(ctor_def_id, ctor_vis);
|
||||||
|
// We need the field visibility spans also for the constructor for E0603.
|
||||||
|
self.insert_field_visibilities_local(ctor_def_id.to_def_id(), vdata);
|
||||||
|
|
||||||
self.r
|
self.r
|
||||||
.struct_constructors
|
.struct_constructors
|
||||||
@ -783,6 +795,7 @@ fn build_reduced_graph_for_item(&mut self, item: &'b Item) {
|
|||||||
|
|
||||||
// Record field names for error reporting.
|
// Record field names for error reporting.
|
||||||
self.insert_field_names_local(def_id, vdata);
|
self.insert_field_names_local(def_id, vdata);
|
||||||
|
self.insert_field_visibilities_local(def_id, vdata);
|
||||||
}
|
}
|
||||||
|
|
||||||
ItemKind::Trait(..) => {
|
ItemKind::Trait(..) => {
|
||||||
@ -1510,6 +1523,7 @@ fn visit_variant(&mut self, variant: &'b ast::Variant) {
|
|||||||
|
|
||||||
// Record field names for error reporting.
|
// Record field names for error reporting.
|
||||||
self.insert_field_names_local(def_id.to_def_id(), &variant.data);
|
self.insert_field_names_local(def_id.to_def_id(), &variant.data);
|
||||||
|
self.insert_field_visibilities_local(def_id.to_def_id(), &variant.data);
|
||||||
|
|
||||||
visit::walk_variant(self, variant);
|
visit::walk_variant(self, variant);
|
||||||
}
|
}
|
||||||
|
@ -6,7 +6,9 @@
|
|||||||
use rustc_ast_pretty::pprust;
|
use rustc_ast_pretty::pprust;
|
||||||
use rustc_data_structures::fx::FxHashSet;
|
use rustc_data_structures::fx::FxHashSet;
|
||||||
use rustc_errors::struct_span_err;
|
use rustc_errors::struct_span_err;
|
||||||
use rustc_errors::{Applicability, Diagnostic, DiagnosticBuilder, ErrorGuaranteed, MultiSpan};
|
use rustc_errors::{
|
||||||
|
pluralize, Applicability, Diagnostic, DiagnosticBuilder, ErrorGuaranteed, MultiSpan,
|
||||||
|
};
|
||||||
use rustc_feature::BUILTIN_ATTRIBUTES;
|
use rustc_feature::BUILTIN_ATTRIBUTES;
|
||||||
use rustc_hir::def::Namespace::{self, *};
|
use rustc_hir::def::Namespace::{self, *};
|
||||||
use rustc_hir::def::{self, CtorKind, CtorOf, DefKind, NonMacroAttrKind, PerNS};
|
use rustc_hir::def::{self, CtorKind, CtorOf, DefKind, NonMacroAttrKind, PerNS};
|
||||||
@ -1604,6 +1606,16 @@ fn report_privacy_error(&self, privacy_error: &PrivacyError<'_>) {
|
|||||||
err.span_label(ident.span, &format!("private {}", descr));
|
err.span_label(ident.span, &format!("private {}", descr));
|
||||||
if let Some(span) = ctor_fields_span {
|
if let Some(span) = ctor_fields_span {
|
||||||
err.span_label(span, "a constructor is private if any of the fields is private");
|
err.span_label(span, "a constructor is private if any of the fields is private");
|
||||||
|
if let Res::Def(_, d) = res && let Some(fields) = self.field_visibility_spans.get(&d) {
|
||||||
|
err.multipart_suggestion_verbose(
|
||||||
|
&format!(
|
||||||
|
"consider making the field{} publicly accessible",
|
||||||
|
pluralize!(fields.len())
|
||||||
|
),
|
||||||
|
fields.iter().map(|span| (*span, "pub ".to_string())).collect(),
|
||||||
|
Applicability::MaybeIncorrect,
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Print the whole import chain to make it easier to see what happens.
|
// Print the whole import chain to make it easier to see what happens.
|
||||||
|
@ -1451,6 +1451,17 @@ fn smart_resolve_context_dependent_help(
|
|||||||
.collect();
|
.collect();
|
||||||
|
|
||||||
if non_visible_spans.len() > 0 {
|
if non_visible_spans.len() > 0 {
|
||||||
|
if let Some(fields) = self.r.field_visibility_spans.get(&def_id) {
|
||||||
|
err.multipart_suggestion_verbose(
|
||||||
|
&format!(
|
||||||
|
"consider making the field{} publicly accessible",
|
||||||
|
pluralize!(fields.len())
|
||||||
|
),
|
||||||
|
fields.iter().map(|span| (*span, "pub ".to_string())).collect(),
|
||||||
|
Applicability::MaybeIncorrect,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
let mut m: MultiSpan = non_visible_spans.clone().into();
|
let mut m: MultiSpan = non_visible_spans.clone().into();
|
||||||
non_visible_spans
|
non_visible_spans
|
||||||
.into_iter()
|
.into_iter()
|
||||||
|
@ -881,6 +881,10 @@ pub struct Resolver<'a> {
|
|||||||
/// Used for hints during error reporting.
|
/// Used for hints during error reporting.
|
||||||
field_names: FxHashMap<DefId, Vec<Spanned<Symbol>>>,
|
field_names: FxHashMap<DefId, Vec<Spanned<Symbol>>>,
|
||||||
|
|
||||||
|
/// Span of the privacy modifier in fields of an item `DefId` accessible with dot syntax.
|
||||||
|
/// Used for hints during error reporting.
|
||||||
|
field_visibility_spans: FxHashMap<DefId, Vec<Span>>,
|
||||||
|
|
||||||
/// All imports known to succeed or fail.
|
/// All imports known to succeed or fail.
|
||||||
determined_imports: Vec<&'a Import<'a>>,
|
determined_imports: Vec<&'a Import<'a>>,
|
||||||
|
|
||||||
@ -1268,6 +1272,7 @@ pub fn new(
|
|||||||
|
|
||||||
has_self: FxHashSet::default(),
|
has_self: FxHashSet::default(),
|
||||||
field_names: FxHashMap::default(),
|
field_names: FxHashMap::default(),
|
||||||
|
field_visibility_spans: FxHashMap::default(),
|
||||||
|
|
||||||
determined_imports: Vec::new(),
|
determined_imports: Vec::new(),
|
||||||
indeterminate_imports: Vec::new(),
|
indeterminate_imports: Vec::new(),
|
||||||
|
@ -9,6 +9,10 @@ note: constructor is not visible here due to private fields
|
|||||||
|
|
|
|
||||||
LL | pub struct Bar(u8);
|
LL | pub struct Bar(u8);
|
||||||
| ^^ private field
|
| ^^ private field
|
||||||
|
help: consider making the field publicly accessible
|
||||||
|
|
|
||||||
|
LL | pub struct Bar(pub u8);
|
||||||
|
| +++
|
||||||
|
|
||||||
error: aborting due to previous error
|
error: aborting due to previous error
|
||||||
|
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
mod foo {
|
mod foo {
|
||||||
pub(crate) struct Foo(u8);
|
pub(crate) struct Foo(u8);
|
||||||
pub(crate) struct Bar(pub u8, u8, Foo);
|
pub(crate) struct Bar(pub u8, pub(in crate::foo) u8, Foo);
|
||||||
|
|
||||||
pub(crate) fn make_bar() -> Bar {
|
pub(crate) fn make_bar() -> Bar {
|
||||||
Bar(1, 12, Foo(10))
|
Bar(1, 12, Foo(10))
|
||||||
|
@ -11,6 +11,10 @@ LL | let Bar(x, y, Foo(z)) = make_bar();
|
|||||||
| ^ ^^^^^^ private field
|
| ^ ^^^^^^ private field
|
||||||
| |
|
| |
|
||||||
| private field
|
| private field
|
||||||
|
help: consider making the fields publicly accessible
|
||||||
|
|
|
||||||
|
LL | pub(crate) struct Bar(pub u8, pub u8, pub Foo);
|
||||||
|
| ~~~ ~~~ +++
|
||||||
|
|
||||||
error[E0532]: cannot match against a tuple struct which contains private fields
|
error[E0532]: cannot match against a tuple struct which contains private fields
|
||||||
--> $DIR/issue-75907.rs:15:19
|
--> $DIR/issue-75907.rs:15:19
|
||||||
@ -23,6 +27,10 @@ note: constructor is not visible here due to private fields
|
|||||||
|
|
|
|
||||||
LL | let Bar(x, y, Foo(z)) = make_bar();
|
LL | let Bar(x, y, Foo(z)) = make_bar();
|
||||||
| ^ private field
|
| ^ private field
|
||||||
|
help: consider making the field publicly accessible
|
||||||
|
|
|
||||||
|
LL | pub(crate) struct Foo(pub u8);
|
||||||
|
| +++
|
||||||
|
|
||||||
error: aborting due to 2 previous errors
|
error: aborting due to 2 previous errors
|
||||||
|
|
||||||
|
@ -12,6 +12,10 @@ note: the tuple struct constructor `A` is defined here
|
|||||||
|
|
|
|
||||||
LL | pub struct A(());
|
LL | pub struct A(());
|
||||||
| ^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^
|
||||||
|
help: consider making the field publicly accessible
|
||||||
|
|
|
||||||
|
LL | pub struct A(pub ());
|
||||||
|
| +++
|
||||||
|
|
||||||
error[E0603]: tuple struct constructor `B` is private
|
error[E0603]: tuple struct constructor `B` is private
|
||||||
--> $DIR/privacy5.rs:52:16
|
--> $DIR/privacy5.rs:52:16
|
||||||
@ -27,6 +31,10 @@ note: the tuple struct constructor `B` is defined here
|
|||||||
|
|
|
|
||||||
LL | pub struct B(isize);
|
LL | pub struct B(isize);
|
||||||
| ^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^
|
||||||
|
help: consider making the field publicly accessible
|
||||||
|
|
|
||||||
|
LL | pub struct B(pub isize);
|
||||||
|
| +++
|
||||||
|
|
||||||
error[E0603]: tuple struct constructor `C` is private
|
error[E0603]: tuple struct constructor `C` is private
|
||||||
--> $DIR/privacy5.rs:53:16
|
--> $DIR/privacy5.rs:53:16
|
||||||
@ -42,6 +50,10 @@ note: the tuple struct constructor `C` is defined here
|
|||||||
|
|
|
|
||||||
LL | pub struct C(pub isize, isize);
|
LL | pub struct C(pub isize, isize);
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
help: consider making the fields publicly accessible
|
||||||
|
|
|
||||||
|
LL | pub struct C(pub isize, pub isize);
|
||||||
|
| ~~~ +++
|
||||||
|
|
||||||
error[E0603]: tuple struct constructor `A` is private
|
error[E0603]: tuple struct constructor `A` is private
|
||||||
--> $DIR/privacy5.rs:56:12
|
--> $DIR/privacy5.rs:56:12
|
||||||
@ -57,6 +69,10 @@ note: the tuple struct constructor `A` is defined here
|
|||||||
|
|
|
|
||||||
LL | pub struct A(());
|
LL | pub struct A(());
|
||||||
| ^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^
|
||||||
|
help: consider making the field publicly accessible
|
||||||
|
|
|
||||||
|
LL | pub struct A(pub ());
|
||||||
|
| +++
|
||||||
|
|
||||||
error[E0603]: tuple struct constructor `A` is private
|
error[E0603]: tuple struct constructor `A` is private
|
||||||
--> $DIR/privacy5.rs:57:12
|
--> $DIR/privacy5.rs:57:12
|
||||||
@ -72,6 +88,10 @@ note: the tuple struct constructor `A` is defined here
|
|||||||
|
|
|
|
||||||
LL | pub struct A(());
|
LL | pub struct A(());
|
||||||
| ^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^
|
||||||
|
help: consider making the field publicly accessible
|
||||||
|
|
|
||||||
|
LL | pub struct A(pub ());
|
||||||
|
| +++
|
||||||
|
|
||||||
error[E0603]: tuple struct constructor `A` is private
|
error[E0603]: tuple struct constructor `A` is private
|
||||||
--> $DIR/privacy5.rs:58:18
|
--> $DIR/privacy5.rs:58:18
|
||||||
@ -87,6 +107,10 @@ note: the tuple struct constructor `A` is defined here
|
|||||||
|
|
|
|
||||||
LL | pub struct A(());
|
LL | pub struct A(());
|
||||||
| ^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^
|
||||||
|
help: consider making the field publicly accessible
|
||||||
|
|
|
||||||
|
LL | pub struct A(pub ());
|
||||||
|
| +++
|
||||||
|
|
||||||
error[E0603]: tuple struct constructor `A` is private
|
error[E0603]: tuple struct constructor `A` is private
|
||||||
--> $DIR/privacy5.rs:59:18
|
--> $DIR/privacy5.rs:59:18
|
||||||
@ -102,6 +126,10 @@ note: the tuple struct constructor `A` is defined here
|
|||||||
|
|
|
|
||||||
LL | pub struct A(());
|
LL | pub struct A(());
|
||||||
| ^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^
|
||||||
|
help: consider making the field publicly accessible
|
||||||
|
|
|
||||||
|
LL | pub struct A(pub ());
|
||||||
|
| +++
|
||||||
|
|
||||||
error[E0603]: tuple struct constructor `B` is private
|
error[E0603]: tuple struct constructor `B` is private
|
||||||
--> $DIR/privacy5.rs:61:12
|
--> $DIR/privacy5.rs:61:12
|
||||||
@ -117,6 +145,10 @@ note: the tuple struct constructor `B` is defined here
|
|||||||
|
|
|
|
||||||
LL | pub struct B(isize);
|
LL | pub struct B(isize);
|
||||||
| ^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^
|
||||||
|
help: consider making the field publicly accessible
|
||||||
|
|
|
||||||
|
LL | pub struct B(pub isize);
|
||||||
|
| +++
|
||||||
|
|
||||||
error[E0603]: tuple struct constructor `B` is private
|
error[E0603]: tuple struct constructor `B` is private
|
||||||
--> $DIR/privacy5.rs:62:12
|
--> $DIR/privacy5.rs:62:12
|
||||||
@ -132,6 +164,10 @@ note: the tuple struct constructor `B` is defined here
|
|||||||
|
|
|
|
||||||
LL | pub struct B(isize);
|
LL | pub struct B(isize);
|
||||||
| ^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^
|
||||||
|
help: consider making the field publicly accessible
|
||||||
|
|
|
||||||
|
LL | pub struct B(pub isize);
|
||||||
|
| +++
|
||||||
|
|
||||||
error[E0603]: tuple struct constructor `B` is private
|
error[E0603]: tuple struct constructor `B` is private
|
||||||
--> $DIR/privacy5.rs:63:18
|
--> $DIR/privacy5.rs:63:18
|
||||||
@ -147,6 +183,10 @@ note: the tuple struct constructor `B` is defined here
|
|||||||
|
|
|
|
||||||
LL | pub struct B(isize);
|
LL | pub struct B(isize);
|
||||||
| ^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^
|
||||||
|
help: consider making the field publicly accessible
|
||||||
|
|
|
||||||
|
LL | pub struct B(pub isize);
|
||||||
|
| +++
|
||||||
|
|
||||||
error[E0603]: tuple struct constructor `B` is private
|
error[E0603]: tuple struct constructor `B` is private
|
||||||
--> $DIR/privacy5.rs:64:18
|
--> $DIR/privacy5.rs:64:18
|
||||||
@ -162,6 +202,10 @@ note: the tuple struct constructor `B` is defined here
|
|||||||
|
|
|
|
||||||
LL | pub struct B(isize);
|
LL | pub struct B(isize);
|
||||||
| ^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^
|
||||||
|
help: consider making the field publicly accessible
|
||||||
|
|
|
||||||
|
LL | pub struct B(pub isize);
|
||||||
|
| +++
|
||||||
|
|
||||||
error[E0603]: tuple struct constructor `B` is private
|
error[E0603]: tuple struct constructor `B` is private
|
||||||
--> $DIR/privacy5.rs:65:18
|
--> $DIR/privacy5.rs:65:18
|
||||||
@ -177,6 +221,10 @@ note: the tuple struct constructor `B` is defined here
|
|||||||
|
|
|
|
||||||
LL | pub struct B(isize);
|
LL | pub struct B(isize);
|
||||||
| ^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^
|
||||||
|
help: consider making the field publicly accessible
|
||||||
|
|
|
||||||
|
LL | pub struct B(pub isize);
|
||||||
|
| +++
|
||||||
|
|
||||||
error[E0603]: tuple struct constructor `B` is private
|
error[E0603]: tuple struct constructor `B` is private
|
||||||
--> $DIR/privacy5.rs:65:32
|
--> $DIR/privacy5.rs:65:32
|
||||||
@ -192,6 +240,10 @@ note: the tuple struct constructor `B` is defined here
|
|||||||
|
|
|
|
||||||
LL | pub struct B(isize);
|
LL | pub struct B(isize);
|
||||||
| ^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^
|
||||||
|
help: consider making the field publicly accessible
|
||||||
|
|
|
||||||
|
LL | pub struct B(pub isize);
|
||||||
|
| +++
|
||||||
|
|
||||||
error[E0603]: tuple struct constructor `C` is private
|
error[E0603]: tuple struct constructor `C` is private
|
||||||
--> $DIR/privacy5.rs:68:12
|
--> $DIR/privacy5.rs:68:12
|
||||||
@ -207,6 +259,10 @@ note: the tuple struct constructor `C` is defined here
|
|||||||
|
|
|
|
||||||
LL | pub struct C(pub isize, isize);
|
LL | pub struct C(pub isize, isize);
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
help: consider making the fields publicly accessible
|
||||||
|
|
|
||||||
|
LL | pub struct C(pub isize, pub isize);
|
||||||
|
| ~~~ +++
|
||||||
|
|
||||||
error[E0603]: tuple struct constructor `C` is private
|
error[E0603]: tuple struct constructor `C` is private
|
||||||
--> $DIR/privacy5.rs:69:12
|
--> $DIR/privacy5.rs:69:12
|
||||||
@ -222,6 +278,10 @@ note: the tuple struct constructor `C` is defined here
|
|||||||
|
|
|
|
||||||
LL | pub struct C(pub isize, isize);
|
LL | pub struct C(pub isize, isize);
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
help: consider making the fields publicly accessible
|
||||||
|
|
|
||||||
|
LL | pub struct C(pub isize, pub isize);
|
||||||
|
| ~~~ +++
|
||||||
|
|
||||||
error[E0603]: tuple struct constructor `C` is private
|
error[E0603]: tuple struct constructor `C` is private
|
||||||
--> $DIR/privacy5.rs:70:12
|
--> $DIR/privacy5.rs:70:12
|
||||||
@ -237,6 +297,10 @@ note: the tuple struct constructor `C` is defined here
|
|||||||
|
|
|
|
||||||
LL | pub struct C(pub isize, isize);
|
LL | pub struct C(pub isize, isize);
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
help: consider making the fields publicly accessible
|
||||||
|
|
|
||||||
|
LL | pub struct C(pub isize, pub isize);
|
||||||
|
| ~~~ +++
|
||||||
|
|
||||||
error[E0603]: tuple struct constructor `C` is private
|
error[E0603]: tuple struct constructor `C` is private
|
||||||
--> $DIR/privacy5.rs:71:12
|
--> $DIR/privacy5.rs:71:12
|
||||||
@ -252,6 +316,10 @@ note: the tuple struct constructor `C` is defined here
|
|||||||
|
|
|
|
||||||
LL | pub struct C(pub isize, isize);
|
LL | pub struct C(pub isize, isize);
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
help: consider making the fields publicly accessible
|
||||||
|
|
|
||||||
|
LL | pub struct C(pub isize, pub isize);
|
||||||
|
| ~~~ +++
|
||||||
|
|
||||||
error[E0603]: tuple struct constructor `C` is private
|
error[E0603]: tuple struct constructor `C` is private
|
||||||
--> $DIR/privacy5.rs:72:18
|
--> $DIR/privacy5.rs:72:18
|
||||||
@ -267,6 +335,10 @@ note: the tuple struct constructor `C` is defined here
|
|||||||
|
|
|
|
||||||
LL | pub struct C(pub isize, isize);
|
LL | pub struct C(pub isize, isize);
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
help: consider making the fields publicly accessible
|
||||||
|
|
|
||||||
|
LL | pub struct C(pub isize, pub isize);
|
||||||
|
| ~~~ +++
|
||||||
|
|
||||||
error[E0603]: tuple struct constructor `C` is private
|
error[E0603]: tuple struct constructor `C` is private
|
||||||
--> $DIR/privacy5.rs:73:18
|
--> $DIR/privacy5.rs:73:18
|
||||||
@ -282,6 +354,10 @@ note: the tuple struct constructor `C` is defined here
|
|||||||
|
|
|
|
||||||
LL | pub struct C(pub isize, isize);
|
LL | pub struct C(pub isize, isize);
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
help: consider making the fields publicly accessible
|
||||||
|
|
|
||||||
|
LL | pub struct C(pub isize, pub isize);
|
||||||
|
| ~~~ +++
|
||||||
|
|
||||||
error[E0603]: tuple struct constructor `C` is private
|
error[E0603]: tuple struct constructor `C` is private
|
||||||
--> $DIR/privacy5.rs:74:18
|
--> $DIR/privacy5.rs:74:18
|
||||||
@ -297,6 +373,10 @@ note: the tuple struct constructor `C` is defined here
|
|||||||
|
|
|
|
||||||
LL | pub struct C(pub isize, isize);
|
LL | pub struct C(pub isize, isize);
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
help: consider making the fields publicly accessible
|
||||||
|
|
|
||||||
|
LL | pub struct C(pub isize, pub isize);
|
||||||
|
| ~~~ +++
|
||||||
|
|
||||||
error[E0603]: tuple struct constructor `C` is private
|
error[E0603]: tuple struct constructor `C` is private
|
||||||
--> $DIR/privacy5.rs:75:18
|
--> $DIR/privacy5.rs:75:18
|
||||||
@ -312,6 +392,10 @@ note: the tuple struct constructor `C` is defined here
|
|||||||
|
|
|
|
||||||
LL | pub struct C(pub isize, isize);
|
LL | pub struct C(pub isize, isize);
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
help: consider making the fields publicly accessible
|
||||||
|
|
|
||||||
|
LL | pub struct C(pub isize, pub isize);
|
||||||
|
| ~~~ +++
|
||||||
|
|
||||||
error[E0603]: tuple struct constructor `A` is private
|
error[E0603]: tuple struct constructor `A` is private
|
||||||
--> $DIR/privacy5.rs:83:17
|
--> $DIR/privacy5.rs:83:17
|
||||||
@ -327,6 +411,10 @@ note: the tuple struct constructor `A` is defined here
|
|||||||
|
|
|
|
||||||
LL | pub struct A(());
|
LL | pub struct A(());
|
||||||
| ^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^
|
||||||
|
help: consider making the field publicly accessible
|
||||||
|
|
|
||||||
|
LL | pub struct A(pub ());
|
||||||
|
| +++
|
||||||
|
|
||||||
error[E0603]: tuple struct constructor `B` is private
|
error[E0603]: tuple struct constructor `B` is private
|
||||||
--> $DIR/privacy5.rs:84:17
|
--> $DIR/privacy5.rs:84:17
|
||||||
@ -342,6 +430,10 @@ note: the tuple struct constructor `B` is defined here
|
|||||||
|
|
|
|
||||||
LL | pub struct B(isize);
|
LL | pub struct B(isize);
|
||||||
| ^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^
|
||||||
|
help: consider making the field publicly accessible
|
||||||
|
|
|
||||||
|
LL | pub struct B(pub isize);
|
||||||
|
| +++
|
||||||
|
|
||||||
error[E0603]: tuple struct constructor `C` is private
|
error[E0603]: tuple struct constructor `C` is private
|
||||||
--> $DIR/privacy5.rs:85:17
|
--> $DIR/privacy5.rs:85:17
|
||||||
@ -357,6 +449,10 @@ note: the tuple struct constructor `C` is defined here
|
|||||||
|
|
|
|
||||||
LL | pub struct C(pub isize, isize);
|
LL | pub struct C(pub isize, isize);
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
help: consider making the fields publicly accessible
|
||||||
|
|
|
||||||
|
LL | pub struct C(pub isize, pub isize);
|
||||||
|
| ~~~ +++
|
||||||
|
|
||||||
error[E0603]: tuple struct constructor `A` is private
|
error[E0603]: tuple struct constructor `A` is private
|
||||||
--> $DIR/privacy5.rs:90:20
|
--> $DIR/privacy5.rs:90:20
|
||||||
|
15
tests/ui/privacy/suggest-making-field-public.fixed
Normal file
15
tests/ui/privacy/suggest-making-field-public.fixed
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
// run-rustfix
|
||||||
|
mod a {
|
||||||
|
pub struct A(pub String);
|
||||||
|
}
|
||||||
|
|
||||||
|
mod b {
|
||||||
|
use crate::a::A;
|
||||||
|
pub fn x() {
|
||||||
|
A("".into()); //~ ERROR cannot initialize a tuple struct which contains private fields
|
||||||
|
}
|
||||||
|
}
|
||||||
|
fn main() {
|
||||||
|
a::A("a".into()); //~ ERROR tuple struct constructor `A` is private
|
||||||
|
b::x();
|
||||||
|
}
|
15
tests/ui/privacy/suggest-making-field-public.rs
Normal file
15
tests/ui/privacy/suggest-making-field-public.rs
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
// run-rustfix
|
||||||
|
mod a {
|
||||||
|
pub struct A(pub(self)String);
|
||||||
|
}
|
||||||
|
|
||||||
|
mod b {
|
||||||
|
use crate::a::A;
|
||||||
|
pub fn x() {
|
||||||
|
A("".into()); //~ ERROR cannot initialize a tuple struct which contains private fields
|
||||||
|
}
|
||||||
|
}
|
||||||
|
fn main() {
|
||||||
|
a::A("a".into()); //~ ERROR tuple struct constructor `A` is private
|
||||||
|
b::x();
|
||||||
|
}
|
39
tests/ui/privacy/suggest-making-field-public.stderr
Normal file
39
tests/ui/privacy/suggest-making-field-public.stderr
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
error[E0603]: tuple struct constructor `A` is private
|
||||||
|
--> $DIR/suggest-making-field-public.rs:13:8
|
||||||
|
|
|
||||||
|
LL | pub struct A(pub(self)String);
|
||||||
|
| --------------- a constructor is private if any of the fields is private
|
||||||
|
...
|
||||||
|
LL | a::A("a".into());
|
||||||
|
| ^ private tuple struct constructor
|
||||||
|
|
|
||||||
|
note: the tuple struct constructor `A` is defined here
|
||||||
|
--> $DIR/suggest-making-field-public.rs:3:5
|
||||||
|
|
|
||||||
|
LL | pub struct A(pub(self)String);
|
||||||
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
help: consider making the field publicly accessible
|
||||||
|
|
|
||||||
|
LL | pub struct A(pub String);
|
||||||
|
| ~~~
|
||||||
|
|
||||||
|
error[E0423]: cannot initialize a tuple struct which contains private fields
|
||||||
|
--> $DIR/suggest-making-field-public.rs:9:9
|
||||||
|
|
|
||||||
|
LL | A("".into());
|
||||||
|
| ^
|
||||||
|
|
|
||||||
|
note: constructor is not visible here due to private fields
|
||||||
|
--> $DIR/suggest-making-field-public.rs:3:18
|
||||||
|
|
|
||||||
|
LL | pub struct A(pub(self)String);
|
||||||
|
| ^^^^^^^^^^^^^^^ private field
|
||||||
|
help: consider making the field publicly accessible
|
||||||
|
|
|
||||||
|
LL | pub struct A(pub String);
|
||||||
|
| ~~~
|
||||||
|
|
||||||
|
error: aborting due to 2 previous errors
|
||||||
|
|
||||||
|
Some errors have detailed explanations: E0423, E0603.
|
||||||
|
For more information about an error, try `rustc --explain E0423`.
|
@ -1,5 +1,5 @@
|
|||||||
mod foo {
|
mod foo {
|
||||||
pub struct Bx(());
|
pub struct Bx(pub(in crate::foo) ());
|
||||||
}
|
}
|
||||||
|
|
||||||
mod bar {
|
mod bar {
|
||||||
|
@ -7,8 +7,8 @@ LL | Bx(());
|
|||||||
note: tuple struct `foo::Bx` exists but is inaccessible
|
note: tuple struct `foo::Bx` exists but is inaccessible
|
||||||
--> $DIR/issue-42944.rs:2:5
|
--> $DIR/issue-42944.rs:2:5
|
||||||
|
|
|
|
||||||
LL | pub struct Bx(());
|
LL | pub struct Bx(pub(in crate::foo) ());
|
||||||
| ^^^^^^^^^^^^^^^^^^ not accessible
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ not accessible
|
||||||
|
|
||||||
error[E0423]: cannot initialize a tuple struct which contains private fields
|
error[E0423]: cannot initialize a tuple struct which contains private fields
|
||||||
--> $DIR/issue-42944.rs:9:9
|
--> $DIR/issue-42944.rs:9:9
|
||||||
@ -19,8 +19,12 @@ LL | Bx(());
|
|||||||
note: constructor is not visible here due to private fields
|
note: constructor is not visible here due to private fields
|
||||||
--> $DIR/issue-42944.rs:2:19
|
--> $DIR/issue-42944.rs:2:19
|
||||||
|
|
|
|
||||||
LL | pub struct Bx(());
|
LL | pub struct Bx(pub(in crate::foo) ());
|
||||||
| ^^ private field
|
| ^^^^^^^^^^^^^^^^^^^^^ private field
|
||||||
|
help: consider making the field publicly accessible
|
||||||
|
|
|
||||||
|
LL | pub struct Bx(pub ());
|
||||||
|
| ~~~
|
||||||
|
|
||||||
error: aborting due to 2 previous errors
|
error: aborting due to 2 previous errors
|
||||||
|
|
||||||
|
@ -53,6 +53,10 @@ note: the tuple struct constructor `Z` is defined here
|
|||||||
|
|
|
|
||||||
LL | pub(in m) struct Z(pub(in m::n) u8);
|
LL | pub(in m) struct Z(pub(in m::n) u8);
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
help: consider making the field publicly accessible
|
||||||
|
|
|
||||||
|
LL | pub(in m) struct Z(pub u8);
|
||||||
|
| ~~~
|
||||||
|
|
||||||
error[E0603]: tuple struct constructor `S` is private
|
error[E0603]: tuple struct constructor `S` is private
|
||||||
--> $DIR/privacy-struct-ctor.rs:29:8
|
--> $DIR/privacy-struct-ctor.rs:29:8
|
||||||
@ -68,6 +72,10 @@ note: the tuple struct constructor `S` is defined here
|
|||||||
|
|
|
|
||||||
LL | pub struct S(u8);
|
LL | pub struct S(u8);
|
||||||
| ^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^
|
||||||
|
help: consider making the field publicly accessible
|
||||||
|
|
|
||||||
|
LL | pub struct S(pub u8);
|
||||||
|
| +++
|
||||||
|
|
||||||
error[E0603]: tuple struct constructor `S` is private
|
error[E0603]: tuple struct constructor `S` is private
|
||||||
--> $DIR/privacy-struct-ctor.rs:31:19
|
--> $DIR/privacy-struct-ctor.rs:31:19
|
||||||
@ -83,6 +91,10 @@ note: the tuple struct constructor `S` is defined here
|
|||||||
|
|
|
|
||||||
LL | pub struct S(u8);
|
LL | pub struct S(u8);
|
||||||
| ^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^
|
||||||
|
help: consider making the field publicly accessible
|
||||||
|
|
|
||||||
|
LL | pub struct S(pub u8);
|
||||||
|
| +++
|
||||||
|
|
||||||
error[E0603]: tuple struct constructor `Z` is private
|
error[E0603]: tuple struct constructor `Z` is private
|
||||||
--> $DIR/privacy-struct-ctor.rs:35:11
|
--> $DIR/privacy-struct-ctor.rs:35:11
|
||||||
@ -98,6 +110,10 @@ note: the tuple struct constructor `Z` is defined here
|
|||||||
|
|
|
|
||||||
LL | pub(in m) struct Z(pub(in m::n) u8);
|
LL | pub(in m) struct Z(pub(in m::n) u8);
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
help: consider making the field publicly accessible
|
||||||
|
|
|
||||||
|
LL | pub(in m) struct Z(pub u8);
|
||||||
|
| ~~~
|
||||||
|
|
||||||
error[E0603]: tuple struct constructor `S` is private
|
error[E0603]: tuple struct constructor `S` is private
|
||||||
--> $DIR/privacy-struct-ctor.rs:41:16
|
--> $DIR/privacy-struct-ctor.rs:41:16
|
||||||
|
Loading…
Reference in New Issue
Block a user