Skip to content

Commit 5416c4d

Browse files
committed
Modify code around ast::Visibility
`ast::Visibility` is changed to `codemap::Spanned` whose node is `ast::VisibilityKind`. This commit fixes it. Closes #2398.
1 parent d316eba commit 5416c4d

File tree

2 files changed

+22
-30
lines changed

2 files changed

+22
-30
lines changed

src/items.rs

Lines changed: 15 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,7 @@ use std::cmp::min;
1616
use config::lists::*;
1717
use regex::Regex;
1818
use syntax::{abi, ast, ptr, symbol};
19-
use syntax::ast::{CrateSugar, ImplItem};
20-
use syntax::codemap::{BytePos, Span};
19+
use syntax::codemap::{self, BytePos, Span};
2120
use syntax::visit;
2221

2322
use codemap::{LineRangeUtils, SpanUtils};
@@ -39,6 +38,11 @@ use utils::{colon_spaces, contains_skip, first_line_width, format_abi, format_co
3938
use vertical::rewrite_with_alignment;
4039
use visitor::FmtVisitor;
4140

41+
const DEFAULT_VISIBILITY: ast::Visibility = codemap::Spanned {
42+
node: ast::VisibilityKind::Inherited,
43+
span: codemap::DUMMY_SP,
44+
};
45+
4246
fn type_annotation_separator(config: &Config) -> &str {
4347
colon_spaces(config.space_before_colon(), config.space_after_colon())
4448
}
@@ -191,7 +195,7 @@ impl<'a> FnSig<'a> {
191195
abi: method_sig.abi,
192196
decl: &*method_sig.decl,
193197
generics,
194-
visibility: ast::Visibility::Inherited,
198+
visibility: DEFAULT_VISIBILITY,
195199
}
196200
}
197201

@@ -680,7 +684,7 @@ pub fn format_impl(
680684

681685
fn is_impl_single_line(
682686
context: &RewriteContext,
683-
items: &[ImplItem],
687+
items: &[ast::ImplItem],
684688
result: &str,
685689
where_clause_str: &str,
686690
item: &ast::Item,
@@ -869,7 +873,7 @@ impl<'a> StructParts<'a> {
869873
StructParts {
870874
prefix: "",
871875
ident: variant.node.name,
872-
vis: &ast::Visibility::Inherited,
876+
vis: &DEFAULT_VISIBILITY,
873877
def: &variant.node.data,
874878
generics: None,
875879
span: variant.span,
@@ -1208,21 +1212,9 @@ pub fn format_struct_struct(
12081212
}
12091213
}
12101214

1211-
/// Returns a bytepos that is after that of `(` in `pub(..)`. If the given visibility does not
1212-
/// contain `pub(..)`, then return the `lo` of the `defualt_span`. Yeah, but for what? Well, we need
1213-
/// to bypass the `(` in the visibility when creating a span of tuple's body or fn's args.
1214-
fn get_bytepos_after_visibility(
1215-
context: &RewriteContext,
1216-
vis: &ast::Visibility,
1217-
default_span: Span,
1218-
terminator: &str,
1219-
) -> BytePos {
1220-
match *vis {
1221-
ast::Visibility::Crate(s, CrateSugar::PubCrate) => context
1222-
.snippet_provider
1223-
.span_after(mk_sp(s.hi(), default_span.hi()), terminator),
1224-
ast::Visibility::Crate(s, CrateSugar::JustCrate) => s.hi(),
1225-
ast::Visibility::Restricted { ref path, .. } => path.span.hi(),
1215+
fn get_bytepos_after_visibility(vis: &ast::Visibility, default_span: Span) -> BytePos {
1216+
match vis.node {
1217+
ast::VisibilityKind::Crate(..) | ast::VisibilityKind::Restricted { .. } => vis.span.hi(),
12261218
_ => default_span.lo(),
12271219
}
12281220
}
@@ -1240,7 +1232,7 @@ fn format_tuple_struct(
12401232
result.push_str(&header_str);
12411233

12421234
let body_lo = if fields.is_empty() {
1243-
let lo = get_bytepos_after_visibility(context, struct_parts.vis, span, ")");
1235+
let lo = get_bytepos_after_visibility(struct_parts.vis, span);
12441236
context
12451237
.snippet_provider
12461238
.span_after(mk_sp(lo, span.hi()), "(")
@@ -1522,7 +1514,7 @@ impl<'a> StaticParts<'a> {
15221514
};
15231515
StaticParts {
15241516
prefix: "const",
1525-
vis: &ast::Visibility::Inherited,
1517+
vis: &DEFAULT_VISIBILITY,
15261518
ident: ti.ident,
15271519
ty,
15281520
mutability: ast::Mutability::Immutable,
@@ -1874,7 +1866,7 @@ fn rewrite_fn_base(
18741866
}
18751867

18761868
// Skip `pub(crate)`.
1877-
let lo_after_visibility = get_bytepos_after_visibility(context, &fn_sig.visibility, span, ")");
1869+
let lo_after_visibility = get_bytepos_after_visibility(&fn_sig.visibility, span);
18781870
// A conservative estimation, to goal is to be over all parens in generics
18791871
let args_start = fn_sig
18801872
.generics

src/utils.rs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ use std::borrow::Cow;
1212

1313
use syntax::{abi, ptr};
1414
use syntax::ast::{self, Attribute, CrateSugar, MetaItem, MetaItemKind, NestedMetaItem,
15-
NestedMetaItemKind, Path, Visibility};
15+
NestedMetaItemKind, Path, Visibility, VisibilityKind};
1616
use syntax::codemap::{BytePos, Span, NO_EXPANSION};
1717

1818
use config::Color;
@@ -35,12 +35,12 @@ pub fn extra_offset(text: &str, shape: Shape) -> usize {
3535

3636
// Uses Cow to avoid allocating in the common cases.
3737
pub fn format_visibility(vis: &Visibility) -> Cow<'static, str> {
38-
match *vis {
39-
Visibility::Public => Cow::from("pub "),
40-
Visibility::Inherited => Cow::from(""),
41-
Visibility::Crate(_, CrateSugar::PubCrate) => Cow::from("pub(crate) "),
42-
Visibility::Crate(_, CrateSugar::JustCrate) => Cow::from("crate "),
43-
Visibility::Restricted { ref path, .. } => {
38+
match vis.node {
39+
VisibilityKind::Public => Cow::from("pub "),
40+
VisibilityKind::Inherited => Cow::from(""),
41+
VisibilityKind::Crate(CrateSugar::PubCrate) => Cow::from("pub(crate) "),
42+
VisibilityKind::Crate(CrateSugar::JustCrate) => Cow::from("crate "),
43+
VisibilityKind::Restricted { ref path, .. } => {
4444
let Path { ref segments, .. } = **path;
4545
let mut segments_iter = segments.iter().map(|seg| seg.identifier.name.to_string());
4646
if path.is_global() {

0 commit comments

Comments
 (0)