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