Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/attr.rs
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,7 @@ fn format_derive(
})?;

let items = itemize_list(
context.snippet_provider,
context,
item_spans,
")",
",",
Expand Down
2 changes: 1 addition & 1 deletion src/closures.rs
Original file line number Diff line number Diff line change
Expand Up @@ -310,7 +310,7 @@ fn rewrite_closure_fn_decl(
let ret_str = fn_decl.output.rewrite_result(context, param_shape)?;

let param_items = itemize_list(
context.snippet_provider,
context,
fn_decl.inputs.iter(),
"|",
",",
Expand Down
4 changes: 2 additions & 2 deletions src/expr.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1843,7 +1843,7 @@ fn rewrite_struct_lit<'a>(
};

let items = itemize_list(
context.snippet_provider,
context,
field_iter,
"}",
",",
Expand Down Expand Up @@ -1995,7 +1995,7 @@ fn rewrite_tuple_in_visual_indent_style<'a, T: 'a + IntoOverflowableItem<'a>>(
let list_lo = context.snippet_provider.span_after(span, "(");
let nested_shape = shape.sub_width(2, span)?.visual_indent(1);
let items = itemize_list(
context.snippet_provider,
context,
items,
")",
",",
Expand Down
2 changes: 1 addition & 1 deletion src/imports.rs
Original file line number Diff line number Diff line change
Expand Up @@ -476,7 +476,7 @@ impl UseTree {
// Extract comments between nested use items.
// This needs to be done before sorting use items.
let items = itemize_list(
context.snippet_provider,
context,
list.iter().map(|(tree, _)| tree),
"}",
",",
Expand Down
15 changes: 11 additions & 4 deletions src/items.rs
Original file line number Diff line number Diff line change
Expand Up @@ -614,9 +614,10 @@ impl<'a> FmtVisitor<'a> {
.max()
.unwrap_or(&0);

let enum_context = self.get_context();
let itemize_list_with = |one_line_width: usize| {
itemize_list(
self.snippet_provider,
&enum_context,
enum_def.variants.iter(),
"}",
",",
Expand Down Expand Up @@ -2852,7 +2853,7 @@ fn rewrite_params(
return Ok(comment.to_owned());
}
let param_items: Vec<_> = itemize_list(
context.snippet_provider,
context,
params.iter(),
")",
",",
Expand Down Expand Up @@ -3130,7 +3131,7 @@ fn rewrite_bounds_on_where_clause(
let end_of_preds = predicates[len - 1].span().hi();
let span_end = span_end.unwrap_or(end_of_preds);
let items = itemize_list(
context.snippet_provider,
context,
predicates.iter(),
terminator,
",",
Expand Down Expand Up @@ -3185,6 +3186,12 @@ fn rewrite_where_clause(
return Ok(String::new());
}

if out_of_file_lines_range!(context, where_span) {
return Ok(context
.snippet(mk_sp(span_end_before_where, where_span.hi()))
.to_owned());
}

if context.config.indent_style() == IndentStyle::Block {
return rewrite_where_clause_rfc_style(
context,
Expand Down Expand Up @@ -3216,7 +3223,7 @@ fn rewrite_where_clause(
let end_of_preds = predicates[len - 1].span().hi();
let span_end = span_end.unwrap_or(end_of_preds);
let items = itemize_list(
context.snippet_provider,
context,
predicates.iter(),
terminator,
",",
Expand Down
25 changes: 16 additions & 9 deletions src/lists.rs
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,11 @@ use crate::config::lists::*;
use crate::config::{Config, IndentStyle};
use crate::rewrite::{ExceedsMaxWidthError, RewriteContext, RewriteError, RewriteResult};
use crate::shape::{Indent, Shape};
use crate::source_map::LineRangeUtils;
use crate::utils::{
count_newlines, first_line_width, last_line_width, mk_sp, starts_with_newline,
unicode_str_width,
};
use crate::visitor::SnippetProvider;

pub(crate) struct ListFormatting<'a> {
tactic: DefinitiveListTactic,
Expand Down Expand Up @@ -564,7 +564,7 @@ pub(crate) struct ListItems<'a, I, F1, F2, F3>
where
I: Iterator,
{
snippet_provider: &'a SnippetProvider,
context: &'a RewriteContext<'a>,
inner: Peekable<I>,
get_lo: F1,
get_hi: F2,
Expand Down Expand Up @@ -751,10 +751,14 @@ where

fn next(&mut self) -> Option<Self::Item> {
self.inner.next().map(|item| {
let lo = (self.get_lo)(&item);
let hi = (self.get_hi)(&item);
let context = self.context;

// Pre-comment
let pre_snippet = self
let pre_snippet = context
.snippet_provider
.span_to_snippet(mk_sp(self.prev_span_end, (self.get_lo)(&item)))
.span_to_snippet(mk_sp(self.prev_span_end, lo))
.unwrap_or("");
let (pre_comment, pre_comment_style) = extract_pre_comment(pre_snippet);

Expand All @@ -763,9 +767,9 @@ where
Some(next_item) => (self.get_lo)(next_item),
None => self.next_span_start,
};
let post_snippet = self
let post_snippet = context
.snippet_provider
.span_to_snippet(mk_sp((self.get_hi)(&item), next_start))
.span_to_snippet(mk_sp(hi, next_start))
.unwrap_or("");
let is_last = self.inner.peek().is_none();
let comment_end =
Expand All @@ -774,14 +778,17 @@ where
let post_comment =
extract_post_comment(post_snippet, comment_end, self.separator, is_last);

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

let item_span = mk_sp(lo, hi);
ListItem {
pre_comment,
pre_comment_style,
// leave_last is set to true only for rewrite_items
item: if self.inner.peek().is_none() && self.leave_last {
Err(RewriteError::SkipFormatting)
} else if out_of_file_lines_range!(context, item_span) {
Ok(context.snippet(item_span).to_owned())
} else {
(self.get_item_string)(&item)
},
Expand All @@ -795,7 +802,7 @@ where
#[allow(clippy::too_many_arguments)]
// Creates an iterator over a list's items with associated comments.
pub(crate) fn itemize_list<'a, T, I, F1, F2, F3>(
snippet_provider: &'a SnippetProvider,
context: &'a RewriteContext<'a>,
inner: I,
terminator: &'a str,
separator: &'a str,
Expand All @@ -813,7 +820,7 @@ where
F3: Fn(&T) -> RewriteResult,
{
ListItems {
snippet_provider,
context,
inner: inner.peekable(),
get_lo,
get_hi,
Expand Down
2 changes: 1 addition & 1 deletion src/macros.rs
Original file line number Diff line number Diff line change
Expand Up @@ -465,7 +465,7 @@ pub(crate) fn rewrite_macro_def(
}

let branch_items = itemize_list(
context.snippet_provider,
context,
parsed_def.branches.iter(),
"}",
";",
Expand Down
2 changes: 1 addition & 1 deletion src/matches.rs
Original file line number Diff line number Diff line change
Expand Up @@ -222,7 +222,7 @@ fn rewrite_match_arms(
.chain(repeat(true));
let beginning_verts = collect_beginning_verts(context, arms);
let items = itemize_list(
context.snippet_provider,
context,
arms.iter()
.zip(is_last_iter)
.zip(beginning_verts.into_iter())
Expand Down
2 changes: 1 addition & 1 deletion src/overflow.rs
Original file line number Diff line number Diff line change
Expand Up @@ -625,7 +625,7 @@ impl<'a> Context<'a> {
debug!("items: {:?}", self.items);

let items = itemize_list(
self.context.snippet_provider,
self.context,
self.items.iter(),
self.suffix,
",",
Expand Down
4 changes: 2 additions & 2 deletions src/patterns.rs
Original file line number Diff line number Diff line change
Expand Up @@ -429,7 +429,7 @@ fn rewrite_struct_pat(
)?;

let items = itemize_list(
context.snippet_provider,
context,
fields.iter(),
terminator,
",",
Expand Down Expand Up @@ -651,7 +651,7 @@ fn count_wildcard_suffix_len(
let mut suffix_len = 0;

let items: Vec<_> = itemize_list(
context.snippet_provider,
context,
patterns.iter(),
")",
",",
Expand Down
4 changes: 2 additions & 2 deletions src/reorder.rs
Original file line number Diff line number Diff line change
Expand Up @@ -110,7 +110,7 @@ fn rewrite_reorderable_or_regroupable_items(
let cloned = normalized_items.clone();
// Add comments before merging.
let list_items = itemize_list(
context.snippet_provider,
context,
cloned.iter(),
"",
";",
Expand Down Expand Up @@ -169,7 +169,7 @@ fn rewrite_reorderable_or_regroupable_items(
}
_ => {
let list_items = itemize_list(
context.snippet_provider,
context,
reorderable_items.iter(),
"",
";",
Expand Down
2 changes: 1 addition & 1 deletion src/types.rs
Original file line number Diff line number Diff line change
Expand Up @@ -380,7 +380,7 @@ where
(comment, tactic)
} else {
let items = itemize_list(
context.snippet_provider,
context,
inputs,
")",
",",
Expand Down
2 changes: 1 addition & 1 deletion src/vertical.rs
Original file line number Diff line number Diff line change
Expand Up @@ -222,7 +222,7 @@ fn rewrite_aligned_items_inner<T: AlignedItem>(
}

let mut items = itemize_list(
context.snippet_provider,
context,
fields.iter(),
"}",
",",
Expand Down
9 changes: 9 additions & 0 deletions tests/source/file-lines-where-clause-skip.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
// rustfmt-file_lines: [{"file":"tests/source/file-lines-where-clause-skip.rs","range":[8,8]}]

fn foo<T>() where
T: Clone,
T: Copy,
T: Default,
{
let x=1;
}
9 changes: 9 additions & 0 deletions tests/source/file-lines-where-clause.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
// rustfmt-file_lines: [{"file":"tests/source/file-lines-where-clause.rs","range":[5,5]}]

fn foo<T, U, V>()
where
T : Clone + Debug,
U : Copy,
V : Default,
{
}
9 changes: 9 additions & 0 deletions tests/target/file-lines-where-clause-skip.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
// rustfmt-file_lines: [{"file":"tests/source/file-lines-where-clause-skip.rs","range":[8,8]}]

fn foo<T>() where
T: Clone,
T: Copy,
T: Default,
{
let x = 1;
}
9 changes: 9 additions & 0 deletions tests/target/file-lines-where-clause.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
// rustfmt-file_lines: [{"file":"tests/source/file-lines-where-clause.rs","range":[5,5]}]

fn foo<T, U, V>()
where
T: Clone + Debug,
U : Copy,
V : Default,
{
}
Loading