mirror of
https://github.com/rust-lang/rust.git
synced 2026-05-04 09:53:04 +03:00
Preserve visibility on trait items inside trait and impl
This commit is contained in:
committed by
Caleb Cartwright
parent
c8bd550c8d
commit
fd6b025e8a
+8
-7
@@ -168,14 +168,14 @@ pub(crate) struct FnSig<'a> {
|
||||
constness: ast::Const,
|
||||
defaultness: ast::Defaultness,
|
||||
unsafety: ast::Unsafe,
|
||||
visibility: ast::Visibility,
|
||||
visibility: &'a ast::Visibility,
|
||||
}
|
||||
|
||||
impl<'a> FnSig<'a> {
|
||||
pub(crate) fn from_method_sig(
|
||||
method_sig: &'a ast::FnSig,
|
||||
generics: &'a ast::Generics,
|
||||
visibility: ast::Visibility,
|
||||
visibility: &'a ast::Visibility,
|
||||
) -> FnSig<'a> {
|
||||
FnSig {
|
||||
unsafety: method_sig.header.unsafety,
|
||||
@@ -198,7 +198,7 @@ pub(crate) fn from_fn_kind(
|
||||
match *fn_kind {
|
||||
visit::FnKind::Fn(fn_ctxt, _, fn_sig, vis, _) => match fn_ctxt {
|
||||
visit::FnCtxt::Assoc(..) => {
|
||||
let mut fn_sig = FnSig::from_method_sig(fn_sig, generics, vis.clone());
|
||||
let mut fn_sig = FnSig::from_method_sig(fn_sig, generics, vis);
|
||||
fn_sig.defaultness = defaultness;
|
||||
fn_sig
|
||||
}
|
||||
@@ -210,7 +210,7 @@ pub(crate) fn from_fn_kind(
|
||||
is_async: Cow::Borrowed(&fn_sig.header.asyncness),
|
||||
defaultness,
|
||||
unsafety: fn_sig.header.unsafety,
|
||||
visibility: vis.clone(),
|
||||
visibility: vis,
|
||||
},
|
||||
},
|
||||
_ => unreachable!(),
|
||||
@@ -317,6 +317,7 @@ pub(crate) fn rewrite_required_fn(
|
||||
indent: Indent,
|
||||
ident: symbol::Ident,
|
||||
sig: &ast::FnSig,
|
||||
vis: &ast::Visibility,
|
||||
generics: &ast::Generics,
|
||||
span: Span,
|
||||
) -> Option<String> {
|
||||
@@ -328,7 +329,7 @@ pub(crate) fn rewrite_required_fn(
|
||||
&context,
|
||||
indent,
|
||||
ident,
|
||||
&FnSig::from_method_sig(sig, generics, DEFAULT_VISIBILITY),
|
||||
&FnSig::from_method_sig(sig, generics, vis),
|
||||
span,
|
||||
FnBraceStyle::None,
|
||||
)?;
|
||||
@@ -1754,7 +1755,7 @@ pub(crate) fn from_trait_item(ti: &'a ast::AssocItem) -> Self {
|
||||
};
|
||||
StaticParts {
|
||||
prefix: "const",
|
||||
vis: &DEFAULT_VISIBILITY,
|
||||
vis: &ti.vis,
|
||||
ident: ti.ident,
|
||||
ty,
|
||||
mutability: ast::Mutability::Not,
|
||||
@@ -3110,7 +3111,7 @@ fn rewrite(&self, context: &RewriteContext<'_>, shape: Shape) -> Option<String>
|
||||
context,
|
||||
shape.indent,
|
||||
self.ident,
|
||||
&FnSig::from_method_sig(&fn_sig, generics, self.vis.clone()),
|
||||
&FnSig::from_method_sig(&fn_sig, generics, &self.vis),
|
||||
span,
|
||||
FnBraceStyle::None,
|
||||
)
|
||||
|
||||
+5
-9
@@ -3,7 +3,7 @@
|
||||
|
||||
use rustc_ast::{ast, token::DelimToken, visit, AstLike};
|
||||
use rustc_data_structures::sync::Lrc;
|
||||
use rustc_span::{symbol, BytePos, Pos, Span, DUMMY_SP};
|
||||
use rustc_span::{symbol, BytePos, Pos, Span};
|
||||
|
||||
use crate::attr::*;
|
||||
use crate::comment::{contains_comment, rewrite_comment, CodeCharKind, CommentCodeSlices};
|
||||
@@ -568,6 +568,7 @@ pub(crate) fn visit_item(&mut self, item: &ast::Item) {
|
||||
indent,
|
||||
item.ident,
|
||||
&fn_signature,
|
||||
&item.vis,
|
||||
generics,
|
||||
item.span,
|
||||
);
|
||||
@@ -641,14 +642,9 @@ pub(crate) fn visit_trait_item(&mut self, ti: &ast::AssocItem) {
|
||||
let ast::FnKind(defaultness, ref sig, ref generics, ref block) = **fn_kind;
|
||||
if let Some(ref body) = block {
|
||||
let inner_attrs = inner_attributes(&ti.attrs);
|
||||
let vis = ast::Visibility {
|
||||
kind: ast::VisibilityKind::Inherited,
|
||||
span: DUMMY_SP,
|
||||
tokens: None,
|
||||
};
|
||||
let fn_ctxt = visit::FnCtxt::Assoc(visit::AssocCtxt::Trait);
|
||||
self.visit_fn(
|
||||
visit::FnKind::Fn(fn_ctxt, ti.ident, sig, &vis, Some(body)),
|
||||
visit::FnKind::Fn(fn_ctxt, ti.ident, sig, &ti.vis, Some(body)),
|
||||
generics,
|
||||
&sig.decl,
|
||||
ti.span,
|
||||
@@ -658,7 +654,7 @@ pub(crate) fn visit_trait_item(&mut self, ti: &ast::AssocItem) {
|
||||
} else {
|
||||
let indent = self.block_indent;
|
||||
let rewrite =
|
||||
self.rewrite_required_fn(indent, ti.ident, sig, generics, ti.span);
|
||||
self.rewrite_required_fn(indent, ti.ident, sig, &ti.vis, generics, ti.span);
|
||||
self.push_rewrite(ti.span, rewrite);
|
||||
}
|
||||
}
|
||||
@@ -708,7 +704,7 @@ pub(crate) fn visit_impl_item(&mut self, ii: &ast::AssocItem) {
|
||||
} else {
|
||||
let indent = self.block_indent;
|
||||
let rewrite =
|
||||
self.rewrite_required_fn(indent, ii.ident, sig, generics, ii.span);
|
||||
self.rewrite_required_fn(indent, ii.ident, sig, &ii.vis, generics, ii.span);
|
||||
self.push_rewrite(ii.span, rewrite);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -25,7 +25,7 @@ fn foo() {
|
||||
impl Visible for Bar {
|
||||
pub const C: i32;
|
||||
pub type T;
|
||||
fn f();
|
||||
pub fn f();
|
||||
pub fn g() {}
|
||||
}
|
||||
|
||||
|
||||
@@ -213,8 +213,8 @@ trait B<'a, 'b, 'c, T> = Debug<'a, T>
|
||||
+ EEEEEEE;
|
||||
|
||||
trait Visible {
|
||||
const C: i32;
|
||||
pub const C: i32;
|
||||
pub type T;
|
||||
fn f();
|
||||
fn g() {}
|
||||
pub fn f();
|
||||
pub fn g() {}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user