about summary refs log tree commit diff
diff options
context:
space:
mode:
authorDavid Wood <david.wood@huawei.com>2022-06-22 13:31:24 +0100
committerDavid Wood <david.wood@huawei.com>2022-06-27 08:53:42 +0100
commitcb90a4f30c9f34b0f2b9c55daedb4fa832bbcf70 (patch)
treef71b2375051e2c1e16321179fe14d6c4d5dcd3b7
parentbe9ebfdbceff0727d37d97a8f4bc812a05a0eff9 (diff)
downloadrust-cb90a4f30c9f34b0f2b9c55daedb4fa832bbcf70.tar.gz
rust-cb90a4f30c9f34b0f2b9c55daedb4fa832bbcf70.zip
privacy: port "item is private" diag
Signed-off-by: David Wood <david.wood@huawei.com>
-rw-r--r--compiler/rustc_error_messages/locales/en-US/privacy.ftl3
-rw-r--r--compiler/rustc_privacy/src/errors.rs10
-rw-r--r--compiler/rustc_privacy/src/lib.rs12
3 files changed, 19 insertions, 6 deletions
diff --git a/compiler/rustc_error_messages/locales/en-US/privacy.ftl b/compiler/rustc_error_messages/locales/en-US/privacy.ftl
index 737aee5e364..6f558d1c6cc 100644
--- a/compiler/rustc_error_messages/locales/en-US/privacy.ftl
+++ b/compiler/rustc_error_messages/locales/en-US/privacy.ftl
@@ -1,3 +1,6 @@
 privacy-field-is-private = field `{$field_name}` of {$variant_descr} `{$def_path_str}` is private
 privacy-field-is-private-is-update-syntax-label = field `{$field_name}` is private
 privacy-field-is-private-label = private field
+
+privacy-item-is-private = {$kind} `{$descr}` is private
+    .label = private {$kind}
diff --git a/compiler/rustc_privacy/src/errors.rs b/compiler/rustc_privacy/src/errors.rs
index b101fae0f94..a3072ded5a3 100644
--- a/compiler/rustc_privacy/src/errors.rs
+++ b/compiler/rustc_privacy/src/errors.rs
@@ -27,3 +27,13 @@ pub enum FieldIsPrivateLabel {
         span: Span,
     },
 }
+
+#[derive(SessionDiagnostic)]
+#[error(privacy::item_is_private)]
+pub struct ItemIsPrivate<'a> {
+    #[primary_span]
+    #[label]
+    pub span: Span,
+    pub kind: &'a str,
+    pub descr: String,
+}
diff --git a/compiler/rustc_privacy/src/lib.rs b/compiler/rustc_privacy/src/lib.rs
index efe1e4bad36..2ff1d031783 100644
--- a/compiler/rustc_privacy/src/lib.rs
+++ b/compiler/rustc_privacy/src/lib.rs
@@ -36,7 +36,7 @@ use std::marker::PhantomData;
 use std::ops::ControlFlow;
 use std::{cmp, fmt, mem};
 
-use errors::{FieldIsPrivate, FieldIsPrivateLabel};
+use errors::{FieldIsPrivate, FieldIsPrivateLabel, ItemIsPrivate};
 
 ////////////////////////////////////////////////////////////////////////////////
 /// Generic infrastructure used to implement specific visitors below.
@@ -1073,11 +1073,11 @@ impl<'tcx> TypePrivacyVisitor<'tcx> {
     fn check_def_id(&mut self, def_id: DefId, kind: &str, descr: &dyn fmt::Display) -> bool {
         let is_error = !self.item_is_accessible(def_id);
         if is_error {
-            self.tcx
-                .sess
-                .struct_span_err(self.span, &format!("{} `{}` is private", kind, descr))
-                .span_label(self.span, &format!("private {}", kind))
-                .emit();
+            self.tcx.sess.emit_err(ItemIsPrivate {
+                span: self.span,
+                kind,
+                descr: descr.to_string(),
+            });
         }
         is_error
     }