Skip to content

Commit 1212c94

Browse files
committed
Change syntax for TyAlias where clauses
1 parent de1ac37 commit 1212c94

File tree

1 file changed

+74
-34
lines changed

1 file changed

+74
-34
lines changed

src/items.rs

+74-34
Original file line numberDiff line numberDiff line change
@@ -694,7 +694,8 @@ pub(crate) fn format_impl(
694694
let where_span_end = context.snippet_provider.opt_span_before(missing_span, "{");
695695
let where_clause_str = rewrite_where_clause(
696696
context,
697-
&generics.where_clause,
697+
&generics.where_clause.predicates,
698+
generics.where_clause.span,
698699
context.config.brace_style(),
699700
Shape::legacy(where_budget, offset.block_only()),
700701
false,
@@ -1059,7 +1060,8 @@ pub(crate) fn format_trait(
10591060
let option = WhereClauseOption::snuggled(&generics_str);
10601061
let where_clause_str = rewrite_where_clause(
10611062
context,
1062-
&generics.where_clause,
1063+
&generics.where_clause.predicates,
1064+
generics.where_clause.span,
10631065
context.config.brace_style(),
10641066
Shape::legacy(where_budget, offset.block_only()),
10651067
where_on_new_line,
@@ -1178,7 +1180,8 @@ impl<'a> Rewrite for TraitAliasBounds<'a> {
11781180

11791181
let where_str = rewrite_where_clause(
11801182
context,
1181-
&self.generics.where_clause,
1183+
&self.generics.where_clause.predicates,
1184+
self.generics.where_clause.span,
11821185
context.config.brace_style(),
11831186
shape,
11841187
false,
@@ -1437,7 +1440,8 @@ fn format_tuple_struct(
14371440
let option = WhereClauseOption::new(true, WhereClauseSpace::Newline);
14381441
rewrite_where_clause(
14391442
context,
1440-
&generics.where_clause,
1443+
&generics.where_clause.predicates,
1444+
generics.where_clause.span,
14411445
context.config.brace_style(),
14421446
Shape::legacy(where_budget, offset.block_only()),
14431447
false,
@@ -1503,6 +1507,8 @@ struct TyAliasRewriteInfo<'c, 'g>(
15031507
&'c RewriteContext<'c>,
15041508
Indent,
15051509
&'g ast::Generics,
1510+
(ast::TyAliasWhereClause, ast::TyAliasWhereClause),
1511+
usize,
15061512
symbol::Ident,
15071513
Span,
15081514
);
@@ -1521,14 +1527,24 @@ pub(crate) fn rewrite_type_alias<'a, 'b>(
15211527
ref generics,
15221528
ref bounds,
15231529
ref ty,
1530+
where_clauses,
1531+
where_predicates_split,
15241532
} = *ty_alias_kind;
15251533
let ty_opt = ty.as_ref();
15261534
let (ident, vis) = match visitor_kind {
15271535
Item(i) => (i.ident, &i.vis),
15281536
AssocTraitItem(i) | AssocImplItem(i) => (i.ident, &i.vis),
15291537
ForeignItem(i) => (i.ident, &i.vis),
15301538
};
1531-
let rw_info = &TyAliasRewriteInfo(context, indent, generics, ident, span);
1539+
let rw_info = &TyAliasRewriteInfo(
1540+
context,
1541+
indent,
1542+
generics,
1543+
where_clauses,
1544+
where_predicates_split,
1545+
ident,
1546+
span,
1547+
);
15321548
let op_ty = opaque_ty(ty);
15331549
// Type Aliases are formatted slightly differently depending on the context
15341550
// in which they appear, whether they are opaque, and whether they are associated.
@@ -1564,7 +1580,22 @@ fn rewrite_ty<R: Rewrite>(
15641580
vis: &ast::Visibility,
15651581
) -> Option<String> {
15661582
let mut result = String::with_capacity(128);
1567-
let TyAliasRewriteInfo(context, indent, generics, ident, span) = *rw_info;
1583+
let TyAliasRewriteInfo(
1584+
context,
1585+
indent,
1586+
generics,
1587+
where_clauses,
1588+
where_predicates_split,
1589+
ident,
1590+
span,
1591+
) = *rw_info;
1592+
let (before_where_predicates, after_where_predicates) = generics
1593+
.where_clause
1594+
.predicates
1595+
.split_at(where_predicates_split);
1596+
if !after_where_predicates.is_empty() {
1597+
return None;
1598+
}
15681599
result.push_str(&format!("{}type ", format_visibility(context, vis)));
15691600
let ident_str = rewrite_ident(context, ident);
15701601

@@ -1595,7 +1626,8 @@ fn rewrite_ty<R: Rewrite>(
15951626
}
15961627
let where_clause_str = rewrite_where_clause(
15971628
context,
1598-
&generics.where_clause,
1629+
before_where_predicates,
1630+
where_clauses.0.1,
15991631
context.config.brace_style(),
16001632
Shape::legacy(where_budget, indent),
16011633
false,
@@ -1609,7 +1641,7 @@ fn rewrite_ty<R: Rewrite>(
16091641
if let Some(ty) = rhs {
16101642
// If there's a where clause, add a newline before the assignment. Otherwise just add a
16111643
// space.
1612-
let has_where = !generics.where_clause.predicates.is_empty();
1644+
let has_where = !before_where_predicates.is_empty();
16131645
if has_where {
16141646
result.push_str(&indent.to_string_with_newline(context.config));
16151647
} else {
@@ -1619,7 +1651,7 @@ fn rewrite_ty<R: Rewrite>(
16191651
let comment_span = context
16201652
.snippet_provider
16211653
.opt_span_before(span, "=")
1622-
.map(|op_lo| mk_sp(generics.where_clause.span.hi(), op_lo));
1654+
.map(|op_lo| mk_sp(where_clauses.0.1.hi(), op_lo));
16231655

16241656
let lhs = match comment_span {
16251657
Some(comment_span)
@@ -2176,7 +2208,7 @@ fn rewrite_fn_base(
21762208
let generics_str = rewrite_generics(
21772209
context,
21782210
rewrite_ident(context, ident),
2179-
fn_sig.generics,
2211+
&fn_sig.generics,
21802212
shape,
21812213
)?;
21822214
result.push_str(&generics_str);
@@ -2416,7 +2448,8 @@ fn rewrite_fn_base(
24162448
}
24172449
let where_clause_str = rewrite_where_clause(
24182450
context,
2419-
where_clause,
2451+
&where_clause.predicates,
2452+
where_clause.span,
24202453
context.config.brace_style(),
24212454
Shape::indented(indent, context.config),
24222455
true,
@@ -2692,7 +2725,8 @@ fn generics_shape_from_config(config: &Config, shape: Shape, offset: usize) -> O
26922725

26932726
fn rewrite_where_clause_rfc_style(
26942727
context: &RewriteContext<'_>,
2695-
where_clause: &ast::WhereClause,
2728+
predicates: &[ast::WherePredicate],
2729+
where_span: Span,
26962730
shape: Shape,
26972731
terminator: &str,
26982732
span_end: Option<BytePos>,
@@ -2701,7 +2735,8 @@ fn rewrite_where_clause_rfc_style(
27012735
) -> Option<String> {
27022736
let (where_keyword, allow_single_line) = rewrite_where_keyword(
27032737
context,
2704-
where_clause,
2738+
predicates,
2739+
where_span,
27052740
shape,
27062741
span_end_before_where,
27072742
where_clause_option,
@@ -2714,12 +2749,12 @@ fn rewrite_where_clause_rfc_style(
27142749
.block_left(context.config.tab_spaces())?
27152750
.sub_width(1)?;
27162751
let force_single_line = context.config.where_single_line()
2717-
&& where_clause.predicates.len() == 1
2752+
&& predicates.len() == 1
27182753
&& !where_clause_option.veto_single_line;
27192754

27202755
let preds_str = rewrite_bounds_on_where_clause(
27212756
context,
2722-
where_clause,
2757+
predicates,
27232758
clause_shape,
27242759
terminator,
27252760
span_end,
@@ -2743,7 +2778,8 @@ fn rewrite_where_clause_rfc_style(
27432778
/// Rewrite `where` and comment around it.
27442779
fn rewrite_where_keyword(
27452780
context: &RewriteContext<'_>,
2746-
where_clause: &ast::WhereClause,
2781+
predicates: &[ast::WherePredicate],
2782+
where_span: Span,
27472783
shape: Shape,
27482784
span_end_before_where: BytePos,
27492785
where_clause_option: WhereClauseOption,
@@ -2763,7 +2799,7 @@ fn rewrite_where_keyword(
27632799
};
27642800

27652801
let (span_before, span_after) =
2766-
missing_span_before_after_where(span_end_before_where, where_clause);
2802+
missing_span_before_after_where(span_end_before_where, predicates, where_span);
27672803
let (comment_before, comment_after) =
27682804
rewrite_comments_before_after_where(context, span_before, span_after, shape)?;
27692805

@@ -2789,22 +2825,22 @@ fn rewrite_where_keyword(
27892825
/// Rewrite bounds on a where clause.
27902826
fn rewrite_bounds_on_where_clause(
27912827
context: &RewriteContext<'_>,
2792-
where_clause: &ast::WhereClause,
2828+
predicates: &[ast::WherePredicate],
27932829
shape: Shape,
27942830
terminator: &str,
27952831
span_end: Option<BytePos>,
27962832
where_clause_option: WhereClauseOption,
27972833
force_single_line: bool,
27982834
) -> Option<String> {
2799-
let span_start = where_clause.predicates[0].span().lo();
2835+
let span_start = predicates[0].span().lo();
28002836
// If we don't have the start of the next span, then use the end of the
28012837
// predicates, but that means we miss comments.
2802-
let len = where_clause.predicates.len();
2803-
let end_of_preds = where_clause.predicates[len - 1].span().hi();
2838+
let len = predicates.len();
2839+
let end_of_preds = predicates[len - 1].span().hi();
28042840
let span_end = span_end.unwrap_or(end_of_preds);
28052841
let items = itemize_list(
28062842
context.snippet_provider,
2807-
where_clause.predicates.iter(),
2843+
predicates.iter(),
28082844
terminator,
28092845
",",
28102846
|pred| pred.span().lo(),
@@ -2837,7 +2873,8 @@ fn rewrite_bounds_on_where_clause(
28372873

28382874
fn rewrite_where_clause(
28392875
context: &RewriteContext<'_>,
2840-
where_clause: &ast::WhereClause,
2876+
predicates: &[ast::WherePredicate],
2877+
where_span: Span,
28412878
brace_style: BraceStyle,
28422879
shape: Shape,
28432880
on_new_line: bool,
@@ -2846,14 +2883,15 @@ fn rewrite_where_clause(
28462883
span_end_before_where: BytePos,
28472884
where_clause_option: WhereClauseOption,
28482885
) -> Option<String> {
2849-
if where_clause.predicates.is_empty() {
2886+
if predicates.is_empty() {
28502887
return Some(String::new());
28512888
}
28522889

28532890
if context.config.indent_style() == IndentStyle::Block {
28542891
return rewrite_where_clause_rfc_style(
28552892
context,
2856-
where_clause,
2893+
predicates,
2894+
where_span,
28572895
shape,
28582896
terminator,
28592897
span_end,
@@ -2873,15 +2911,15 @@ fn rewrite_where_clause(
28732911
// be out by a char or two.
28742912

28752913
let budget = context.config.max_width() - offset.width();
2876-
let span_start = where_clause.predicates[0].span().lo();
2914+
let span_start = predicates[0].span().lo();
28772915
// If we don't have the start of the next span, then use the end of the
28782916
// predicates, but that means we miss comments.
2879-
let len = where_clause.predicates.len();
2880-
let end_of_preds = where_clause.predicates[len - 1].span().hi();
2917+
let len = predicates.len();
2918+
let end_of_preds = predicates[len - 1].span().hi();
28812919
let span_end = span_end.unwrap_or(end_of_preds);
28822920
let items = itemize_list(
28832921
context.snippet_provider,
2884-
where_clause.predicates.iter(),
2922+
predicates.iter(),
28852923
terminator,
28862924
",",
28872925
|pred| pred.span().lo(),
@@ -2936,12 +2974,13 @@ fn rewrite_where_clause(
29362974

29372975
fn missing_span_before_after_where(
29382976
before_item_span_end: BytePos,
2939-
where_clause: &ast::WhereClause,
2977+
predicates: &[ast::WherePredicate],
2978+
where_span: Span,
29402979
) -> (Span, Span) {
2941-
let missing_span_before = mk_sp(before_item_span_end, where_clause.span.lo());
2980+
let missing_span_before = mk_sp(before_item_span_end, where_span.lo());
29422981
// 5 = `where`
2943-
let pos_after_where = where_clause.span.lo() + BytePos(5);
2944-
let missing_span_after = mk_sp(pos_after_where, where_clause.predicates[0].span().lo());
2982+
let pos_after_where = where_span.lo() + BytePos(5);
2983+
let missing_span_after = mk_sp(pos_after_where, predicates[0].span().lo());
29452984
(missing_span_before, missing_span_after)
29462985
}
29472986

@@ -3030,7 +3069,8 @@ fn format_generics(
30303069
}
30313070
let where_clause_str = rewrite_where_clause(
30323071
context,
3033-
&generics.where_clause,
3072+
&generics.where_clause.predicates,
3073+
generics.where_clause.span,
30343074
brace_style,
30353075
Shape::legacy(budget, offset.block_only()),
30363076
true,

0 commit comments

Comments
 (0)