• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 use rustc_errors::DiagnosticArgFromDisplay;
2 use rustc_macros::{Diagnostic, LintDiagnostic, Subdiagnostic};
3 use rustc_span::{Span, Symbol};
4 
5 #[derive(Diagnostic)]
6 #[diag(privacy_field_is_private, code = "E0451")]
7 pub struct FieldIsPrivate {
8     #[primary_span]
9     pub span: Span,
10     pub field_name: Symbol,
11     pub variant_descr: &'static str,
12     pub def_path_str: String,
13     #[subdiagnostic]
14     pub label: FieldIsPrivateLabel,
15 }
16 
17 #[derive(Subdiagnostic)]
18 pub enum FieldIsPrivateLabel {
19     #[label(privacy_field_is_private_is_update_syntax_label)]
20     IsUpdateSyntax {
21         #[primary_span]
22         span: Span,
23         field_name: Symbol,
24     },
25     #[label(privacy_field_is_private_label)]
26     Other {
27         #[primary_span]
28         span: Span,
29     },
30 }
31 
32 #[derive(Diagnostic)]
33 #[diag(privacy_item_is_private)]
34 pub struct ItemIsPrivate<'a> {
35     #[primary_span]
36     #[label]
37     pub span: Span,
38     pub kind: &'a str,
39     pub descr: DiagnosticArgFromDisplay<'a>,
40 }
41 
42 #[derive(Diagnostic)]
43 #[diag(privacy_unnamed_item_is_private)]
44 pub struct UnnamedItemIsPrivate {
45     #[primary_span]
46     pub span: Span,
47     pub kind: &'static str,
48 }
49 
50 // Duplicate of `InPublicInterface` but with a different error code, shares the same slug.
51 #[derive(Diagnostic)]
52 #[diag(privacy_in_public_interface, code = "E0445")]
53 pub struct InPublicInterfaceTraits<'a> {
54     #[primary_span]
55     #[label]
56     pub span: Span,
57     pub vis_descr: &'static str,
58     pub kind: &'a str,
59     pub descr: DiagnosticArgFromDisplay<'a>,
60     #[label(privacy_visibility_label)]
61     pub vis_span: Span,
62 }
63 
64 // Duplicate of `InPublicInterfaceTraits` but with a different error code, shares the same slug.
65 #[derive(Diagnostic)]
66 #[diag(privacy_in_public_interface, code = "E0446")]
67 pub struct InPublicInterface<'a> {
68     #[primary_span]
69     #[label]
70     pub span: Span,
71     pub vis_descr: &'static str,
72     pub kind: &'a str,
73     pub descr: DiagnosticArgFromDisplay<'a>,
74     #[label(privacy_visibility_label)]
75     pub vis_span: Span,
76 }
77 
78 #[derive(Diagnostic)]
79 #[diag(privacy_report_effective_visibility)]
80 pub struct ReportEffectiveVisibility {
81     #[primary_span]
82     pub span: Span,
83     pub descr: String,
84 }
85 
86 #[derive(LintDiagnostic)]
87 #[diag(privacy_from_private_dep_in_public_interface)]
88 pub struct FromPrivateDependencyInPublicInterface<'a> {
89     pub kind: &'a str,
90     pub descr: DiagnosticArgFromDisplay<'a>,
91     pub krate: Symbol,
92 }
93 
94 #[derive(LintDiagnostic)]
95 #[diag(privacy_private_in_public_lint)]
96 pub struct PrivateInPublicLint<'a> {
97     pub vis_descr: &'static str,
98     pub kind: &'a str,
99     pub descr: DiagnosticArgFromDisplay<'a>,
100 }
101 
102 #[derive(LintDiagnostic)]
103 #[diag(privacy_unnameable_types_lint)]
104 pub struct UnnameableTypesLint<'a> {
105     #[label]
106     pub span: Span,
107     pub kind: &'a str,
108     pub descr: DiagnosticArgFromDisplay<'a>,
109     pub reachable_vis: &'a str,
110     pub reexported_vis: &'a str,
111 }
112 
113 // Used for `private_interfaces` and `private_bounds` lints.
114 // They will replace private-in-public errors and compatibility lints in future.
115 // See https://rust-lang.github.io/rfcs/2145-type-privacy.html for more details.
116 #[derive(LintDiagnostic)]
117 #[diag(privacy_private_interface_or_bounds_lint)]
118 pub struct PrivateInterfacesOrBoundsLint<'a> {
119     #[label(privacy_item_label)]
120     pub item_span: Span,
121     pub item_kind: &'a str,
122     pub item_descr: DiagnosticArgFromDisplay<'a>,
123     pub item_vis_descr: &'a str,
124     #[note(privacy_ty_note)]
125     pub ty_span: Span,
126     pub ty_kind: &'a str,
127     pub ty_descr: DiagnosticArgFromDisplay<'a>,
128     pub ty_vis_descr: &'a str,
129 }
130