Skip to content

Commit 02df831

Browse files
committed
test key with many dots
1 parent 835eb39 commit 02df831

File tree

3 files changed

+88
-8
lines changed

3 files changed

+88
-8
lines changed

src/formatting/cargo_toml.rs

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ pub(crate) fn format_cargo_toml_inner(content: &str, config: &Config) -> Result<
2424
&mut FormatInlineTable {
2525
max_width: config.max_width(),
2626
long_tables: vec![],
27-
current_section: String::new(),
27+
current_section: vec![],
2828
},
2929
&mut TrimSpaces,
3030
];
@@ -124,8 +124,8 @@ struct WrapArray {
124124
struct FormatInlineTable {
125125
max_width: usize,
126126
/// Must be `InlineTable`
127-
long_tables: Vec<(String, String, Item)>,
128-
current_section: String,
127+
long_tables: Vec<(Vec<String>, String, Item)>,
128+
current_section: Vec<String>,
129129
}
130130

131131
impl VisitMut for SortKey {
@@ -279,6 +279,9 @@ impl VisitMut for SortSection {
279279
fn visit_table_mut(&mut self, table: &mut Table) {
280280
table.set_position(self.current_position);
281281
self.current_position += 1;
282+
for (_, v) in table.iter_mut().sorted_by_key(|(k, _)| k.to_string()) {
283+
self.visit_item_mut(v);
284+
}
282285
}
283286
}
284287

@@ -313,7 +316,7 @@ impl VisitMut for WrapArray {
313316
impl VisitMut for FormatInlineTable {
314317
fn visit_document_mut(&mut self, doc: &mut Document) {
315318
doc.as_table_mut().iter_mut().for_each(|(key, section)| {
316-
self.current_section = key.to_owned();
319+
self.current_section = vec![key.to_owned()];
317320
self.visit_table_like_kv_mut(key, section);
318321
});
319322

@@ -322,9 +325,13 @@ impl VisitMut for FormatInlineTable {
322325

323326
long_tables
324327
.into_iter()
325-
.for_each(|(section, key, table)| match table {
328+
.for_each(|(sections, key, table)| match table {
326329
Item::Value(Value::InlineTable(table)) => {
327-
doc[&section][&key] = Item::Table(table.into_table());
330+
let mut section = doc.as_item_mut();
331+
for key in sections {
332+
section = &mut section[&key]
333+
}
334+
section[&key] = Item::Table(table.into_table());
328335
}
329336
_ => unreachable!(),
330337
});
@@ -344,14 +351,16 @@ impl VisitMut for FormatInlineTable {
344351
}
345352
});
346353

347-
long_table_keys.into_iter().for_each(|key| {
354+
long_table_keys.into_iter().sorted().for_each(|key| {
348355
let item = table.remove(&key).unwrap();
349356
self.long_tables
350357
.push((self.current_section.clone(), key, item));
351358
});
352359

353-
table.iter_mut().for_each(|(_, node)| {
360+
table.iter_mut().for_each(|(key, node)| {
361+
self.current_section.push(key.to_owned());
354362
self.visit_item_mut(node);
363+
self.current_section.pop();
355364
});
356365
}
357366
}
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
2+
[a.c]
3+
ac =1
4+
5+
# comment for [a.a]
6+
7+
[a.a] # also comment for [a.a]
8+
aa=1
9+
10+
# comment for [a.a.c.d]
11+
12+
[a.a.c.d]
13+
aacd=1
14+
15+
[a.a.b]
16+
veryveryveryveryveryveryveryverylong-table-name2={veryveryveryveryveryveryveryverylong-key-name=2}
17+
aab =1
18+
19+
veryveryveryveryveryveryveryverylong-table-name={veryveryveryveryveryveryveryverylong-key-name=1}
20+
21+
[a.a.c]
22+
aac=1
23+
24+
25+
[a]
26+
27+
# comment for [a.b], not [a.b.b]
28+
b.b = 1
29+
30+
# comment for cc
31+
cc = 3
32+
33+
34+
b.a = 2
35+
36+
37+
[a.z]
38+
az=1
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
[a]
2+
# comment for [a.b], not [a.b.b]
3+
b.a = 2
4+
# comment for [a.b], not [a.b.b]
5+
b.b = 1
6+
# comment for cc
7+
cc = 3
8+
9+
# comment for [a.a]
10+
[a.a] # also comment for [a.a]
11+
aa = 1
12+
13+
[a.a.b]
14+
aab = 1
15+
16+
[a.a.b.veryveryveryveryveryveryveryverylong-table-name]
17+
veryveryveryveryveryveryveryverylong-key-name = 1
18+
19+
[a.a.b.veryveryveryveryveryveryveryverylong-table-name2]
20+
veryveryveryveryveryveryveryverylong-key-name = 2
21+
22+
[a.a.c]
23+
aac = 1
24+
25+
# comment for [a.a.c.d]
26+
[a.a.c.d]
27+
aacd = 1
28+
29+
[a.c]
30+
ac = 1
31+
32+
[a.z]
33+
az = 1

0 commit comments

Comments
 (0)