Skip to content

Commit 8c863a9

Browse files
committed
Fix #4654 - version gated consistent format of struct post-comments in new line - with and without trailing comma
1 parent ee2bed9 commit 8c863a9

File tree

15 files changed

+307
-9
lines changed

15 files changed

+307
-9
lines changed

src/attr.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,7 @@ fn format_derive(
122122
context.snippet_provider.span_after(attr.span, "("),
123123
attr.span.hi(),
124124
false,
125+
context.config.version(),
125126
);
126127

127128
Some(items)

src/closures.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -283,6 +283,7 @@ fn rewrite_closure_fn_decl(
283283
context.snippet_provider.span_after(span, "|"),
284284
body.span.lo(),
285285
false,
286+
context.config.version(),
286287
);
287288
let item_vec = param_items.collect::<Vec<_>>();
288289
// 1 = space between parameters and return type.

src/expr.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1623,6 +1623,7 @@ fn rewrite_struct_lit<'a>(
16231623
body_lo,
16241624
span.hi(),
16251625
false,
1626+
context.config.version(),
16261627
);
16271628
let item_vec = items.collect::<Vec<_>>();
16281629

@@ -1773,6 +1774,7 @@ fn rewrite_tuple_in_visual_indent_style<'a, T: 'a + IntoOverflowableItem<'a>>(
17731774
list_lo,
17741775
span.hi() - BytePos(1),
17751776
false,
1777+
context.config.version(),
17761778
);
17771779
let item_vec: Vec<_> = items.collect();
17781780
let tactic = definitive_tactic(

src/imports.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -472,6 +472,7 @@ impl UseTree {
472472
context.snippet_provider.span_after(a.span, "{"),
473473
a.span.hi(),
474474
false,
475+
context.config.version(),
475476
);
476477

477478
// in case of a global path and the nested list starts at the root,

src/items.rs

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -381,8 +381,8 @@ impl<'a> FmtVisitor<'a> {
381381
return None;
382382
}
383383

384-
let res = Stmt::from_ast_node(block.stmts.first()?, true)
385-
.rewrite(&self.get_context(), self.shape())?;
384+
let res =
385+
Stmt::from_ast_node(block.stmts.first()?, true).rewrite(&context, self.shape())?;
386386

387387
let width = self.block_indent.width() + fn_str.len() + res.len() + 5;
388388
if !res.contains('\n') && width <= self.config.max_width() {
@@ -441,7 +441,12 @@ impl<'a> FmtVisitor<'a> {
441441

442442
self.last_pos = body_start;
443443

444-
match self.format_variant_list(enum_def, body_start, span.hi()) {
444+
match self.format_variant_list(
445+
enum_def,
446+
body_start,
447+
span.hi(),
448+
self.get_context().config.version(),
449+
) {
445450
Some(ref s) if enum_def.variants.is_empty() => self.push_str(s),
446451
rw => {
447452
self.push_rewrite(mk_sp(body_start, span.hi()), rw);
@@ -456,6 +461,7 @@ impl<'a> FmtVisitor<'a> {
456461
enum_def: &ast::EnumDef,
457462
body_lo: BytePos,
458463
body_hi: BytePos,
464+
version: Version,
459465
) -> Option<String> {
460466
if enum_def.variants.is_empty() {
461467
let mut buffer = String::with_capacity(128);
@@ -510,6 +516,7 @@ impl<'a> FmtVisitor<'a> {
510516
body_lo,
511517
body_hi,
512518
false,
519+
version,
513520
)
514521
.collect()
515522
};
@@ -2599,6 +2606,7 @@ fn rewrite_params(
25992606
span.lo(),
26002607
span.hi(),
26012608
false,
2609+
context.config.version(),
26022610
)
26032611
.collect();
26042612

@@ -2868,6 +2876,7 @@ fn rewrite_bounds_on_where_clause(
28682876
span_start,
28692877
span_end,
28702878
false,
2879+
context.config.version(),
28712880
);
28722881
let comma_tactic = if where_clause_option.suppress_comma || force_single_line {
28732882
SeparatorTactic::Never
@@ -2947,6 +2956,7 @@ fn rewrite_where_clause(
29472956
span_start,
29482957
span_end,
29492958
false,
2959+
context.config.version(),
29502960
);
29512961
let item_vec = items.collect::<Vec<_>>();
29522962
// FIXME: we don't need to collect here

src/lists.rs

Lines changed: 26 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ use rustc_span::BytePos;
77

88
use crate::comment::{find_comment_end, rewrite_comment, FindUncommented};
99
use crate::config::lists::*;
10-
use crate::config::{Config, IndentStyle};
10+
use crate::config::{Config, IndentStyle, Version};
1111
use crate::rewrite::RewriteContext;
1212
use crate::shape::{Indent, Shape};
1313
use crate::utils::{
@@ -570,6 +570,7 @@ where
570570
terminator: &'a str,
571571
separator: &'a str,
572572
leave_last: bool,
573+
version: Version,
573574
}
574575

575576
pub(crate) fn extract_pre_comment(pre_snippet: &str) -> (Option<String>, ListItemCommentStyle) {
@@ -612,11 +613,25 @@ pub(crate) fn extract_post_comment(
612613
comment_end: usize,
613614
separator: &str,
614615
is_last: bool,
616+
version: Version,
615617
) -> Option<String> {
616618
let white_space: &[_] = &[' ', '\t'];
617619

618620
// Cleanup post-comment: strip separators and whitespace.
619-
let post_snippet = post_snippet[..comment_end].trim();
621+
let post_snippet = if version == Version::One {
622+
post_snippet[..comment_end].trim()
623+
} else {
624+
// If trimmed string starts with comment - preserve leading new-line.
625+
let post_snippet_start_trimmed = post_snippet[..comment_end].trim_start();
626+
if post_snippet_start_trimmed.starts_with("//")
627+
|| post_snippet_start_trimmed.starts_with("/*")
628+
{
629+
post_snippet[..comment_end].trim_matches(white_space)
630+
} else {
631+
post_snippet_start_trimmed
632+
}
633+
.trim_end()
634+
};
620635

621636
let last_inline_comment_ends_with_separator = if is_last {
622637
if let Some(line) = post_snippet.lines().last() {
@@ -767,8 +782,13 @@ where
767782
let comment_end =
768783
get_comment_end(post_snippet, self.separator, self.terminator, is_last);
769784
let new_lines = has_extra_newline(post_snippet, comment_end);
770-
let post_comment =
771-
extract_post_comment(post_snippet, comment_end, self.separator, is_last);
785+
let post_comment = extract_post_comment(
786+
post_snippet,
787+
comment_end,
788+
self.separator,
789+
is_last,
790+
self.version,
791+
);
772792

773793
self.prev_span_end = (self.get_hi)(&item) + BytePos(comment_end as u32);
774794

@@ -800,6 +820,7 @@ pub(crate) fn itemize_list<'a, T, I, F1, F2, F3>(
800820
prev_span_end: BytePos,
801821
next_span_start: BytePos,
802822
leave_last: bool,
823+
version: Version,
803824
) -> ListItems<'a, I, F1, F2, F3>
804825
where
805826
I: Iterator<Item = T>,
@@ -818,6 +839,7 @@ where
818839
terminator,
819840
separator,
820841
leave_last,
842+
version,
821843
}
822844
}
823845

src/macros.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -438,6 +438,7 @@ pub(crate) fn rewrite_macro_def(
438438
context.snippet_provider.span_after(span, "{"),
439439
span.hi(),
440440
false,
441+
context.config.version(),
441442
)
442443
.collect::<Vec<_>>();
443444

src/matches.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -204,6 +204,7 @@ fn rewrite_match_arms(
204204
open_brace_pos,
205205
span.hi(),
206206
false,
207+
context.config.version(),
207208
);
208209
let arms_vec: Vec<_> = items.collect();
209210
// We will add/remove commas inside `arm.rewrite()`, and hence no separator here.

src/overflow.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -587,7 +587,7 @@ impl<'a> Context<'a> {
587587
tactic
588588
}
589589

590-
fn rewrite_items(&self) -> Option<(bool, String)> {
590+
fn rewrite_items(&self, version: Version) -> Option<(bool, String)> {
591591
let span = self.items_span();
592592
let items = itemize_list(
593593
self.context.snippet_provider,
@@ -600,6 +600,7 @@ impl<'a> Context<'a> {
600600
span.lo(),
601601
span.hi(),
602602
true,
603+
version,
603604
);
604605
let mut list_items: Vec<_> = items.collect();
605606

@@ -682,7 +683,7 @@ impl<'a> Context<'a> {
682683
}
683684

684685
fn rewrite(&self, shape: Shape) -> Option<String> {
685-
let (extendable, items_str) = self.rewrite_items()?;
686+
let (extendable, items_str) = self.rewrite_items(self.context.config.version())?;
686687

687688
// If we are using visual indent style and failed to format, retry with block indent.
688689
if !self.context.use_block_indent()

src/patterns.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -308,6 +308,7 @@ fn rewrite_struct_pat(
308308
context.snippet_provider.span_after(span, "{"),
309309
span.hi(),
310310
false,
311+
context.config.version(),
311312
);
312313
let item_vec = items.collect::<Vec<_>>();
313314

@@ -516,6 +517,7 @@ fn count_wildcard_suffix_len(
516517
context.snippet_provider.span_after(span, "("),
517518
span.hi() - BytePos(1),
518519
false,
520+
context.config.version(),
519521
)
520522
.collect();
521523

src/reorder.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,7 @@ fn rewrite_reorderable_or_regroupable_items(
103103
span.lo(),
104104
span.hi(),
105105
false,
106+
context.config.version(),
106107
);
107108
for (item, list_item) in normalized_items.iter_mut().zip(list_items) {
108109
item.list_item = Some(list_item.clone());
@@ -155,6 +156,7 @@ fn rewrite_reorderable_or_regroupable_items(
155156
span.lo(),
156157
span.hi(),
157158
false,
159+
context.config.version(),
158160
);
159161

160162
let mut item_pair_vec: Vec<_> = list_items.zip(reorderable_items.iter()).collect();

src/types.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -351,6 +351,7 @@ where
351351
list_lo,
352352
span.hi(),
353353
false,
354+
context.config.version(),
354355
);
355356

356357
let item_vec: Vec<_> = items.collect();

src/vertical.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -233,6 +233,7 @@ fn rewrite_aligned_items_inner<T: AlignedItem>(
233233
span.lo(),
234234
span.hi(),
235235
false,
236+
context.config.version(),
236237
)
237238
.collect::<Vec<_>>();
238239

0 commit comments

Comments
 (0)