Skip to content

Commit fd6b025

Browse files
dtolnaycalebcartwright
authored andcommitted
Preserve visibility on trait items inside trait and impl
1 parent c8bd550 commit fd6b025

File tree

4 files changed

+17
-20
lines changed

4 files changed

+17
-20
lines changed

Diff for: src/items.rs

+8-7
Original file line numberDiff line numberDiff line change
@@ -168,14 +168,14 @@ pub(crate) struct FnSig<'a> {
168168
constness: ast::Const,
169169
defaultness: ast::Defaultness,
170170
unsafety: ast::Unsafe,
171-
visibility: ast::Visibility,
171+
visibility: &'a ast::Visibility,
172172
}
173173

174174
impl<'a> FnSig<'a> {
175175
pub(crate) fn from_method_sig(
176176
method_sig: &'a ast::FnSig,
177177
generics: &'a ast::Generics,
178-
visibility: ast::Visibility,
178+
visibility: &'a ast::Visibility,
179179
) -> FnSig<'a> {
180180
FnSig {
181181
unsafety: method_sig.header.unsafety,
@@ -198,7 +198,7 @@ impl<'a> FnSig<'a> {
198198
match *fn_kind {
199199
visit::FnKind::Fn(fn_ctxt, _, fn_sig, vis, _) => match fn_ctxt {
200200
visit::FnCtxt::Assoc(..) => {
201-
let mut fn_sig = FnSig::from_method_sig(fn_sig, generics, vis.clone());
201+
let mut fn_sig = FnSig::from_method_sig(fn_sig, generics, vis);
202202
fn_sig.defaultness = defaultness;
203203
fn_sig
204204
}
@@ -210,7 +210,7 @@ impl<'a> FnSig<'a> {
210210
is_async: Cow::Borrowed(&fn_sig.header.asyncness),
211211
defaultness,
212212
unsafety: fn_sig.header.unsafety,
213-
visibility: vis.clone(),
213+
visibility: vis,
214214
},
215215
},
216216
_ => unreachable!(),
@@ -317,6 +317,7 @@ impl<'a> FmtVisitor<'a> {
317317
indent: Indent,
318318
ident: symbol::Ident,
319319
sig: &ast::FnSig,
320+
vis: &ast::Visibility,
320321
generics: &ast::Generics,
321322
span: Span,
322323
) -> Option<String> {
@@ -328,7 +329,7 @@ impl<'a> FmtVisitor<'a> {
328329
&context,
329330
indent,
330331
ident,
331-
&FnSig::from_method_sig(sig, generics, DEFAULT_VISIBILITY),
332+
&FnSig::from_method_sig(sig, generics, vis),
332333
span,
333334
FnBraceStyle::None,
334335
)?;
@@ -1754,7 +1755,7 @@ impl<'a> StaticParts<'a> {
17541755
};
17551756
StaticParts {
17561757
prefix: "const",
1757-
vis: &DEFAULT_VISIBILITY,
1758+
vis: &ti.vis,
17581759
ident: ti.ident,
17591760
ty,
17601761
mutability: ast::Mutability::Not,
@@ -3110,7 +3111,7 @@ impl Rewrite for ast::ForeignItem {
31103111
context,
31113112
shape.indent,
31123113
self.ident,
3113-
&FnSig::from_method_sig(&fn_sig, generics, self.vis.clone()),
3114+
&FnSig::from_method_sig(&fn_sig, generics, &self.vis),
31143115
span,
31153116
FnBraceStyle::None,
31163117
)

Diff for: src/visitor.rs

+5-9
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ use std::rc::Rc;
33

44
use rustc_ast::{ast, token::DelimToken, visit, AstLike};
55
use rustc_data_structures::sync::Lrc;
6-
use rustc_span::{symbol, BytePos, Pos, Span, DUMMY_SP};
6+
use rustc_span::{symbol, BytePos, Pos, Span};
77

88
use crate::attr::*;
99
use crate::comment::{contains_comment, rewrite_comment, CodeCharKind, CommentCodeSlices};
@@ -568,6 +568,7 @@ impl<'b, 'a: 'b> FmtVisitor<'a> {
568568
indent,
569569
item.ident,
570570
&fn_signature,
571+
&item.vis,
571572
generics,
572573
item.span,
573574
);
@@ -641,14 +642,9 @@ impl<'b, 'a: 'b> FmtVisitor<'a> {
641642
let ast::FnKind(defaultness, ref sig, ref generics, ref block) = **fn_kind;
642643
if let Some(ref body) = block {
643644
let inner_attrs = inner_attributes(&ti.attrs);
644-
let vis = ast::Visibility {
645-
kind: ast::VisibilityKind::Inherited,
646-
span: DUMMY_SP,
647-
tokens: None,
648-
};
649645
let fn_ctxt = visit::FnCtxt::Assoc(visit::AssocCtxt::Trait);
650646
self.visit_fn(
651-
visit::FnKind::Fn(fn_ctxt, ti.ident, sig, &vis, Some(body)),
647+
visit::FnKind::Fn(fn_ctxt, ti.ident, sig, &ti.vis, Some(body)),
652648
generics,
653649
&sig.decl,
654650
ti.span,
@@ -658,7 +654,7 @@ impl<'b, 'a: 'b> FmtVisitor<'a> {
658654
} else {
659655
let indent = self.block_indent;
660656
let rewrite =
661-
self.rewrite_required_fn(indent, ti.ident, sig, generics, ti.span);
657+
self.rewrite_required_fn(indent, ti.ident, sig, &ti.vis, generics, ti.span);
662658
self.push_rewrite(ti.span, rewrite);
663659
}
664660
}
@@ -708,7 +704,7 @@ impl<'b, 'a: 'b> FmtVisitor<'a> {
708704
} else {
709705
let indent = self.block_indent;
710706
let rewrite =
711-
self.rewrite_required_fn(indent, ii.ident, sig, generics, ii.span);
707+
self.rewrite_required_fn(indent, ii.ident, sig, &ii.vis, generics, ii.span);
712708
self.push_rewrite(ii.span, rewrite);
713709
}
714710
}

Diff for: tests/target/impls.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ pub impl Foo for Bar {
2525
impl Visible for Bar {
2626
pub const C: i32;
2727
pub type T;
28-
fn f();
28+
pub fn f();
2929
pub fn g() {}
3030
}
3131

Diff for: tests/target/trait.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -213,8 +213,8 @@ where
213213
+ EEEEEEE;
214214

215215
trait Visible {
216-
const C: i32;
216+
pub const C: i32;
217217
pub type T;
218-
fn f();
219-
fn g() {}
218+
pub fn f();
219+
pub fn g() {}
220220
}

0 commit comments

Comments
 (0)