Skip to content

Commit 6285d53

Browse files
committed
Handle new visibility types more gracefully
1 parent fd38acb commit 6285d53

File tree

3 files changed

+33
-24
lines changed

3 files changed

+33
-24
lines changed

src/items.rs

Lines changed: 20 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -142,15 +142,16 @@ impl<'a> FmtVisitor<'a> {
142142
ast::ForeignItemKind::Static(ref ty, is_mutable) => {
143143
// FIXME(#21): we're dropping potential comments in between the
144144
// function keywords here.
145+
let vis = match format_visibility(&item.vis) {
146+
Some(s) => s,
147+
None => return,
148+
};
145149
let mut_str = if is_mutable {
146150
"mut "
147151
} else {
148152
""
149153
};
150-
let prefix = format!("{}static {}{}: ",
151-
format_visibility(&item.vis),
152-
mut_str,
153-
item.ident);
154+
let prefix = format!("{}static {}{}: ", vis, mut_str, item.ident);
154155
let offset = self.block_indent + prefix.len();
155156
// 1 = ;
156157
let width = self.config.max_width - offset.width() - 1;
@@ -307,7 +308,10 @@ impl<'a> FmtVisitor<'a> {
307308
enum_def: &ast::EnumDef,
308309
generics: &ast::Generics,
309310
span: Span) {
310-
let header_str = format_header("enum ", ident, vis);
311+
let header_str = match format_header("enum ", ident, vis) {
312+
Some(s) => s,
313+
None => return,
314+
};
311315
self.buffer.push_str(&header_str);
312316

313317
let enum_snippet = self.snippet(span);
@@ -451,7 +455,7 @@ pub fn format_impl(context: &RewriteContext, item: &ast::Item, offset: Indent) -
451455
ref self_ty,
452456
ref items) = item.node {
453457
let mut result = String::new();
454-
result.push_str(format_visibility(&item.vis));
458+
result.push_str(try_opt!(format_visibility(&item.vis)));
455459
result.push_str(format_unsafety(unsafety));
456460
result.push_str("impl");
457461

@@ -619,7 +623,7 @@ pub fn format_trait(context: &RewriteContext, item: &ast::Item, offset: Indent)
619623
item.node {
620624
let mut result = String::new();
621625
let header = format!("{}{}trait {}",
622-
format_visibility(&item.vis),
626+
try_opt!(format_visibility(&item.vis)),
623627
format_unsafety(unsafety),
624628
item.ident);
625629

@@ -744,7 +748,7 @@ pub fn format_trait(context: &RewriteContext, item: &ast::Item, offset: Indent)
744748
fn format_unit_struct(item_name: &str, ident: ast::Ident, vis: &ast::Visibility) -> Option<String> {
745749
let mut result = String::with_capacity(1024);
746750

747-
let header_str = format_header(item_name, ident, vis);
751+
let header_str = try_opt!(format_header(item_name, ident, vis));
748752
result.push_str(&header_str);
749753
result.push(';');
750754

@@ -762,7 +766,7 @@ fn format_struct_struct(context: &RewriteContext,
762766
-> Option<String> {
763767
let mut result = String::with_capacity(1024);
764768

765-
let header_str = format_header(item_name, ident, vis);
769+
let header_str = try_opt!(format_header(item_name, ident, vis));
766770
result.push_str(&header_str);
767771

768772
let body_lo = context.codemap.span_after(span, "{");
@@ -843,7 +847,7 @@ fn format_tuple_struct(context: &RewriteContext,
843847
-> Option<String> {
844848
let mut result = String::with_capacity(1024);
845849

846-
let header_str = format_header(item_name, ident, vis);
850+
let header_str = try_opt!(format_header(item_name, ident, vis));
847851
result.push_str(&header_str);
848852

849853
// FIXME(#919): don't lose comments on empty tuple structs.
@@ -929,7 +933,7 @@ pub fn rewrite_type_alias(context: &RewriteContext,
929933
-> Option<String> {
930934
let mut result = String::new();
931935

932-
result.push_str(&format_visibility(&vis));
936+
result.push_str(&try_opt!(format_visibility(&vis)));
933937
result.push_str("type ");
934938
result.push_str(&ident.to_string());
935939

@@ -997,7 +1001,7 @@ impl Rewrite for ast::StructField {
9971001
}
9981002

9991003
let name = self.ident;
1000-
let vis = format_visibility(&self.vis);
1004+
let vis = try_opt!(format_visibility(&self.vis));
10011005
let mut attr_str = try_opt!(self.attrs
10021006
.rewrite(context, context.config.max_width - offset.width(), offset));
10031007
if !attr_str.is_empty() {
@@ -1026,7 +1030,7 @@ pub fn rewrite_static(prefix: &str,
10261030
context: &RewriteContext)
10271031
-> Option<String> {
10281032
let prefix = format!("{}{} {}{}: ",
1029-
format_visibility(vis),
1033+
try_opt!(format_visibility(vis)),
10301034
prefix,
10311035
format_mutability(mutability),
10321036
ident);
@@ -1245,7 +1249,7 @@ fn rewrite_fn_base(context: &RewriteContext,
12451249

12461250
let mut result = String::with_capacity(1024);
12471251
// Vis unsafety abi.
1248-
result.push_str(format_visibility(vis));
1252+
result.push_str(try_opt!(format_visibility(vis)));
12491253

12501254
if let ast::Constness::Const = constness {
12511255
result.push_str("const ");
@@ -1801,8 +1805,8 @@ fn rewrite_where_clause(context: &RewriteContext,
18011805
}
18021806
}
18031807

1804-
fn format_header(item_name: &str, ident: ast::Ident, vis: &ast::Visibility) -> String {
1805-
format!("{}{}{}", format_visibility(vis), item_name, ident)
1808+
fn format_header(item_name: &str, ident: ast::Ident, vis: &ast::Visibility) -> Option<String> {
1809+
Some(format!("{}{}{}", try_opt!(format_visibility(vis)), item_name, ident))
18061810
}
18071811

18081812
fn format_generics(context: &RewriteContext,

src/utils.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -67,13 +67,13 @@ pub fn extra_offset(text: &str, offset: Indent) -> usize {
6767
}
6868

6969
#[inline]
70-
pub fn format_visibility(vis: &Visibility) -> &'static str {
70+
pub fn format_visibility(vis: &Visibility) -> Option<&'static str> {
7171
match *vis {
72-
Visibility::Public => "pub ",
73-
Visibility::Inherited => "",
74-
// TODO(#970): Handle new visibility types.
75-
Visibility::Crate => unimplemented!(),
76-
Visibility::Restricted { .. } => unimplemented!(),
72+
Visibility::Public => Some("pub "),
73+
Visibility::Inherited => Some(""),
74+
// FIXME(#970): Handle new visibility types.
75+
Visibility::Crate => None,
76+
Visibility::Restricted { .. } => None,
7777
}
7878
}
7979

src/visitor.rs

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -467,7 +467,9 @@ impl<'a> FmtVisitor<'a> {
467467
let local_file_name = self.codemap.span_to_filename(s);
468468
let is_internal = local_file_name == self.codemap.span_to_filename(m.inner);
469469

470-
self.buffer.push_str(utils::format_visibility(vis));
470+
if let Some(vis) = utils::format_visibility(vis) {
471+
self.buffer.push_str(vis);
472+
}
471473
self.buffer.push_str("mod ");
472474
self.buffer.push_str(&ident.to_string());
473475

@@ -502,7 +504,10 @@ impl<'a> FmtVisitor<'a> {
502504
}
503505

504506
fn format_import(&mut self, vis: &ast::Visibility, vp: &ast::ViewPath, span: Span) {
505-
let vis = utils::format_visibility(vis);
507+
let vis = match utils::format_visibility(vis) {
508+
Some(s) => s,
509+
None => return,
510+
};
506511
let mut offset = self.block_indent;
507512
offset.alignment += vis.len() + "use ".len();
508513
// 1 = ";"

0 commit comments

Comments
 (0)