fix the bug removing attrs (#3760)
This commit is contained in:
parent
ef00f74ce3
commit
a09ca681de
@ -2,7 +2,7 @@ use syntax::ast::{self, BindingMode, FieldPat, Pat, PatKind, RangeEnd, RangeSynt
|
|||||||
use syntax::ptr;
|
use syntax::ptr;
|
||||||
use syntax::source_map::{self, BytePos, Span};
|
use syntax::source_map::{self, BytePos, Span};
|
||||||
|
|
||||||
use crate::comment::FindUncommented;
|
use crate::comment::{combine_strs_with_missing_comments, FindUncommented};
|
||||||
use crate::config::lists::*;
|
use crate::config::lists::*;
|
||||||
use crate::expr::{can_be_overflowed_expr, rewrite_unary_prefix, wrap_struct_field};
|
use crate::expr::{can_be_overflowed_expr, rewrite_unary_prefix, wrap_struct_field};
|
||||||
use crate::lists::{
|
use crate::lists::{
|
||||||
@ -179,7 +179,13 @@ fn rewrite_struct_pat(
|
|||||||
fields.iter(),
|
fields.iter(),
|
||||||
terminator,
|
terminator,
|
||||||
",",
|
",",
|
||||||
|f| f.span.lo(),
|
|f| {
|
||||||
|
if f.node.attrs.is_empty() {
|
||||||
|
f.span.lo()
|
||||||
|
} else {
|
||||||
|
f.node.attrs.first().unwrap().span.lo()
|
||||||
|
}
|
||||||
|
},
|
||||||
|f| f.span.hi(),
|
|f| f.span.hi(),
|
||||||
|f| f.node.rewrite(context, v_shape),
|
|f| f.node.rewrite(context, v_shape),
|
||||||
context.snippet_provider.span_after(span, "{"),
|
context.snippet_provider.span_after(span, "{"),
|
||||||
@ -225,25 +231,50 @@ fn rewrite_struct_pat(
|
|||||||
|
|
||||||
impl Rewrite for FieldPat {
|
impl Rewrite for FieldPat {
|
||||||
fn rewrite(&self, context: &RewriteContext<'_>, shape: Shape) -> Option<String> {
|
fn rewrite(&self, context: &RewriteContext<'_>, shape: Shape) -> Option<String> {
|
||||||
let pat = self.pat.rewrite(context, shape);
|
let hi_pos = if let Some(last) = self.attrs.last() {
|
||||||
if self.is_shorthand {
|
last.span.hi()
|
||||||
pat
|
|
||||||
} else {
|
} else {
|
||||||
let pat_str = pat?;
|
self.pat.span.lo()
|
||||||
|
};
|
||||||
|
|
||||||
|
let attrs_str = if self.attrs.is_empty() {
|
||||||
|
String::from("")
|
||||||
|
} else {
|
||||||
|
self.attrs.rewrite(context, shape)?
|
||||||
|
};
|
||||||
|
|
||||||
|
let pat_str = self.pat.rewrite(context, shape)?;
|
||||||
|
if self.is_shorthand {
|
||||||
|
combine_strs_with_missing_comments(
|
||||||
|
context,
|
||||||
|
&attrs_str,
|
||||||
|
&pat_str,
|
||||||
|
mk_sp(hi_pos, self.pat.span.lo()),
|
||||||
|
shape,
|
||||||
|
false,
|
||||||
|
)
|
||||||
|
} else {
|
||||||
|
let nested_shape = shape.block_indent(context.config.tab_spaces());
|
||||||
let id_str = rewrite_ident(context, self.ident);
|
let id_str = rewrite_ident(context, self.ident);
|
||||||
let one_line_width = id_str.len() + 2 + pat_str.len();
|
let one_line_width = id_str.len() + 2 + pat_str.len();
|
||||||
if one_line_width <= shape.width {
|
let pat_and_id_str = if one_line_width <= shape.width {
|
||||||
Some(format!("{}: {}", id_str, pat_str))
|
format!("{}: {}", id_str, pat_str)
|
||||||
} else {
|
} else {
|
||||||
let nested_shape = shape.block_indent(context.config.tab_spaces());
|
format!(
|
||||||
let pat_str = self.pat.rewrite(context, nested_shape)?;
|
|
||||||
Some(format!(
|
|
||||||
"{}:\n{}{}",
|
"{}:\n{}{}",
|
||||||
id_str,
|
id_str,
|
||||||
nested_shape.indent.to_string(context.config),
|
nested_shape.indent.to_string(context.config),
|
||||||
pat_str,
|
self.pat.rewrite(context, nested_shape)?
|
||||||
))
|
)
|
||||||
}
|
};
|
||||||
|
combine_strs_with_missing_comments(
|
||||||
|
context,
|
||||||
|
&attrs_str,
|
||||||
|
&pat_and_id_str,
|
||||||
|
mk_sp(hi_pos, self.pat.span.lo()),
|
||||||
|
nested_shape,
|
||||||
|
false,
|
||||||
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
27
tests/target/issue-3759.rs
Normal file
27
tests/target/issue-3759.rs
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
fn main() {
|
||||||
|
let Test {
|
||||||
|
#[cfg(feature = "test")]
|
||||||
|
x,
|
||||||
|
} = Test {
|
||||||
|
#[cfg(feature = "test")]
|
||||||
|
x: 1,
|
||||||
|
};
|
||||||
|
|
||||||
|
let Test {
|
||||||
|
#[cfg(feature = "test")]
|
||||||
|
// comment
|
||||||
|
x,
|
||||||
|
} = Test {
|
||||||
|
#[cfg(feature = "test")]
|
||||||
|
x: 1,
|
||||||
|
};
|
||||||
|
|
||||||
|
let Test {
|
||||||
|
// comment
|
||||||
|
#[cfg(feature = "test")]
|
||||||
|
x,
|
||||||
|
} = Test {
|
||||||
|
#[cfg(feature = "test")]
|
||||||
|
x: 1,
|
||||||
|
};
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user