diff options
| author | David Wood <david.wood@huawei.com> | 2022-06-22 13:31:24 +0100 |
|---|---|---|
| committer | David Wood <david.wood@huawei.com> | 2022-06-27 08:53:42 +0100 |
| commit | cb90a4f30c9f34b0f2b9c55daedb4fa832bbcf70 (patch) | |
| tree | f71b2375051e2c1e16321179fe14d6c4d5dcd3b7 | |
| parent | be9ebfdbceff0727d37d97a8f4bc812a05a0eff9 (diff) | |
| download | rust-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.ftl | 3 | ||||
| -rw-r--r-- | compiler/rustc_privacy/src/errors.rs | 10 | ||||
| -rw-r--r-- | compiler/rustc_privacy/src/lib.rs | 12 |
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 } |
