privacy: port "item is private" diag
Signed-off-by: David Wood <david.wood@huawei.com>
This commit is contained in:
parent
be9ebfdbce
commit
cb90a4f30c
3 changed files with 19 additions and 6 deletions
|
@ -1,3 +1,6 @@
|
||||||
privacy-field-is-private = field `{$field_name}` of {$variant_descr} `{$def_path_str}` is private
|
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-is-update-syntax-label = field `{$field_name}` is private
|
||||||
privacy-field-is-private-label = private field
|
privacy-field-is-private-label = private field
|
||||||
|
|
||||||
|
privacy-item-is-private = {$kind} `{$descr}` is private
|
||||||
|
.label = private {$kind}
|
||||||
|
|
|
@ -27,3 +27,13 @@ pub enum FieldIsPrivateLabel {
|
||||||
span: Span,
|
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,
|
||||||
|
}
|
||||||
|
|
|
@ -36,7 +36,7 @@ use std::marker::PhantomData;
|
||||||
use std::ops::ControlFlow;
|
use std::ops::ControlFlow;
|
||||||
use std::{cmp, fmt, mem};
|
use std::{cmp, fmt, mem};
|
||||||
|
|
||||||
use errors::{FieldIsPrivate, FieldIsPrivateLabel};
|
use errors::{FieldIsPrivate, FieldIsPrivateLabel, ItemIsPrivate};
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
/// Generic infrastructure used to implement specific visitors below.
|
/// 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 {
|
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);
|
let is_error = !self.item_is_accessible(def_id);
|
||||||
if is_error {
|
if is_error {
|
||||||
self.tcx
|
self.tcx.sess.emit_err(ItemIsPrivate {
|
||||||
.sess
|
span: self.span,
|
||||||
.struct_span_err(self.span, &format!("{} `{}` is private", kind, descr))
|
kind,
|
||||||
.span_label(self.span, &format!("private {}", kind))
|
descr: descr.to_string(),
|
||||||
.emit();
|
});
|
||||||
}
|
}
|
||||||
is_error
|
is_error
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue