Skip to content

Commit b34b90e

Browse files
committed
Fix wrong formatting table with string keys that are numbers
1 parent 7aad0ad commit b34b90e

File tree

2 files changed

+11
-13
lines changed

2 files changed

+11
-13
lines changed

src/table.rs

Lines changed: 8 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -778,13 +778,8 @@ impl Table {
778778
let mut pairs = self.pairs::<Value, Value>().flatten().collect::<Vec<_>>();
779779
// Sort keys
780780
pairs.sort_by(|(a, _), (b, _)| a.sort_cmp(b));
781-
let is_sequence = pairs.iter().enumerate().all(|(i, (k, _))| {
782-
if let Value::Integer(n) = k {
783-
*n == (i + 1) as Integer
784-
} else {
785-
false
786-
}
787-
});
781+
let is_sequence = (pairs.iter().enumerate())
782+
.all(|(i, (k, _))| matches!(k, Value::Integer(n) if *n == (i + 1) as Integer));
788783
if pairs.is_empty() {
789784
return write!(fmt, "{{}}");
790785
}
@@ -797,14 +792,14 @@ impl Table {
797792
writeln!(fmt, ",")?;
798793
}
799794
} else {
795+
fn is_simple_key(key: &[u8]) -> bool {
796+
key.iter().take(1).all(|c| c.is_ascii_alphabetic() || *c == b'_')
797+
&& key.iter().all(|c| c.is_ascii_alphanumeric() || *c == b'_')
798+
}
799+
800800
for (key, value) in pairs {
801801
match key {
802-
Value::String(key)
803-
if key
804-
.to_string_lossy()
805-
.chars()
806-
.all(|c| matches!(c, 'a'..='z' | 'A'..='Z' | '0'..='9' | '_')) =>
807-
{
802+
Value::String(key) if is_simple_key(&key.as_bytes()) => {
808803
write!(fmt, "{}{}", " ".repeat(ident + 2), key.to_string_lossy())?;
809804
write!(fmt, " = ")?;
810805
}

tests/table.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -414,6 +414,9 @@ fn test_table_fmt() -> Result<()> {
414414
"{\n [false] = false,\n [true] = true,\n [1] = 1,\n [1.99] = 1.99,\n [2] = 2,\n [3] = 3,\n [9.2] = 9.2,\n a = 5,\n b = {\n 6,\n },\n [\"special-<chars>\"] = 10,\n}"
415415
);
416416

417+
let table2 = lua.create_table_from([("1", "first"), ("2", "second")])?;
418+
assert_eq!(format!("{table2:#?}"), "{\n [\"1\"] = \"first\",\n [\"2\"] = \"second\",\n}");
419+
417420
Ok(())
418421
}
419422

0 commit comments

Comments
 (0)