Skip to content

Commit 742a30d

Browse files
committed
Format paths in derive attribute
1 parent fd0ea74 commit 742a30d

File tree

3 files changed

+47
-6
lines changed

3 files changed

+47
-6
lines changed

src/attr.rs

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -87,19 +87,23 @@ fn format_derive(
8787
// attribute is not parseable, none of the attributes will be
8888
// reformatted.
8989
let item_spans = attr.meta_item_list().map(|meta_item_list| {
90-
meta_item_list
91-
.into_iter()
92-
.map(|meta_item_inner| meta_item_inner.span())
90+
meta_item_list.into_iter().map(|meta_item_inner| {
91+
// Try to format the path, if it fails, fallback to the original
92+
let formatted = meta_item_inner
93+
.rewrite(context, shape)
94+
.unwrap_or_else(|| context.snippet(meta_item_inner.span()).to_owned());
95+
(meta_item_inner.span(), formatted)
96+
})
9397
})?;
9498

9599
let items = itemize_list(
96100
context.snippet_provider,
97101
item_spans,
98102
")",
99103
",",
100-
|span| span.lo(),
101-
|span| span.hi(),
102-
|span| Ok(context.snippet(*span).to_owned()),
104+
|(span, _)| span.lo(),
105+
|(span, _)| span.hi(),
106+
|(_, data)| Ok(data.to_string()),
103107
// We update derive attribute spans to start after the opening '('
104108
// This helps us focus parsing to just what's inside #[derive(...)]
105109
context.snippet_provider.span_after(attr.span, "("),

tests/source/issue-6343.rs

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
#[derive(serde :: Serialize)]
2+
enum Something {
3+
Variant
4+
}
5+
6+
#[derive(
7+
serde :: Serialize,
8+
IReallyLoveToWriteLongDerives,
9+
Debug,
10+
Eq,
11+
PartialEq, Ord, PartialOrd,
12+
Hash, Clone, Copy, Default
13+
)]
14+
enum SomethingComplex {
15+
Variant5
16+
}

tests/target/issue-6343.rs

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
#[derive(serde::Serialize)]
2+
enum Something {
3+
Variant,
4+
}
5+
6+
#[derive(
7+
serde::Serialize,
8+
IReallyLoveToWriteLongDerives,
9+
Debug,
10+
Eq,
11+
PartialEq,
12+
Ord,
13+
PartialOrd,
14+
Hash,
15+
Clone,
16+
Copy,
17+
Default,
18+
)]
19+
enum SomethingComplex {
20+
Variant5,
21+
}

0 commit comments

Comments
 (0)