Skip to content
This repository was archived by the owner on Oct 17, 2024. It is now read-only.

Commit 4913684

Browse files
authored
Fix subsubtable order (#9)
1 parent 01cdd8a commit 4913684

File tree

4 files changed

+63
-10
lines changed

4 files changed

+63
-10
lines changed

Cargo.lock

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

rust/src/global.rs

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,14 @@ mod tests {
101101
mr="vr"
102102
[demo]
103103
ed = "ed"
104+
[tool.coverage.report]
105+
cd="de"
106+
[tool.coverage]
107+
aa = "bb"
108+
[tool.coverage.paths]
109+
ab="bc"
110+
[tool.coverage.run]
111+
ef="fg"
104112
[tool.pytest]
105113
mk="mv"
106114
"#},
@@ -129,6 +137,15 @@ mod tests {
129137
[tool.pytest]
130138
mk = "mv"
131139
140+
[tool.coverage]
141+
aa = "bb"
142+
[tool.coverage.report]
143+
cd = "de"
144+
[tool.coverage.paths]
145+
ab = "bc"
146+
[tool.coverage.run]
147+
ef = "fg"
148+
132149
[tool.mypy]
133150
mk = "mv"
134151

rust/src/helpers/table.rs

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -87,18 +87,23 @@ fn calculate_order(header_to_pos: &HashMap<String, usize>, ordering: &[&str]) ->
8787
.map(|(k, v)| (v, k * 2))
8888
.collect::<HashMap<&&str, usize>>();
8989

90-
let mut order: Vec<String> = header_to_pos.clone().into_keys().collect();
91-
order.sort_by_cached_key(|k| -> usize {
90+
let mut header_pos: Vec<(String, usize)> = header_to_pos.clone().into_iter().collect();
91+
92+
header_pos.sort_by_cached_key(|(k, file_pos)| -> (usize, usize) {
9293
let key = get_key(k);
9394
let pos = key_to_pos.get(&key.as_str());
94-
if pos.is_some() {
95-
let offset = usize::from(key != *k);
96-
pos.unwrap() + offset
97-
} else {
98-
max_ordering + header_to_pos[k]
99-
}
95+
96+
(
97+
if let Some(&pos) = pos {
98+
let offset = usize::from(key != *k);
99+
pos + offset
100+
} else {
101+
max_ordering
102+
},
103+
*file_pos,
104+
)
100105
});
101-
order
106+
header_pos.into_iter().map(|(k, _)| k).collect()
102107
}
103108

104109
fn get_key(k: &str) -> String {

rust/src/main.rs

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,37 @@ mod tests {
177177
true,
178178
(3, 8)
179179
)]
180+
#[case::subsubtable(
181+
indoc ! {r#"
182+
[project]
183+
[tool.coverage.report]
184+
a = 2
185+
[tool.coverage]
186+
a = 0
187+
[tool.coverage.paths]
188+
a = 1
189+
[tool.coverage.run]
190+
a = 3
191+
"#},
192+
indoc ! {r#"
193+
[project]
194+
classifiers = [
195+
"Programming Language :: Python :: 3 :: Only",
196+
"Programming Language :: Python :: 3.8",
197+
]
198+
[tool.coverage]
199+
a = 0
200+
[tool.coverage.report]
201+
a = 2
202+
[tool.coverage.paths]
203+
a = 1
204+
[tool.coverage.run]
205+
a = 3
206+
"#},
207+
2,
208+
true,
209+
(3, 8)
210+
)]
180211
fn test_format_toml(
181212
#[case] start: &str,
182213
#[case] expected: &str,

0 commit comments

Comments
 (0)