@@ -777,16 +777,45 @@ impl Table {
777
777
let mut pairs = self . pairs :: < Value , Value > ( ) . flatten ( ) . collect :: < Vec < _ > > ( ) ;
778
778
// Sort keys
779
779
pairs. sort_by ( |( a, _) , ( b, _) | a. sort_cmp ( b) ) ;
780
+ let is_sequence = pairs. iter ( ) . enumerate ( ) . all ( |( i, ( k, _) ) | {
781
+ if let Value :: Integer ( n) = k {
782
+ * n == ( i + 1 ) as Integer
783
+ } else {
784
+ false
785
+ }
786
+ } ) ;
780
787
if pairs. is_empty ( ) {
781
788
return write ! ( fmt, "{{}}" ) ;
782
789
}
783
790
writeln ! ( fmt, "{{" ) ?;
784
- for ( key, value) in pairs {
785
- write ! ( fmt, "{}[" , " " . repeat( ident + 2 ) ) ?;
786
- key. fmt_pretty ( fmt, false , ident + 2 , visited) ?;
787
- write ! ( fmt, "] = " ) ?;
788
- value. fmt_pretty ( fmt, true , ident + 2 , visited) ?;
789
- writeln ! ( fmt, "," ) ?;
791
+ if is_sequence {
792
+ // Format as list
793
+ for ( _, value) in pairs {
794
+ write ! ( fmt, "{}" , " " . repeat( ident + 2 ) ) ?;
795
+ value. fmt_pretty ( fmt, true , ident + 2 , visited) ?;
796
+ writeln ! ( fmt, "," ) ?;
797
+ }
798
+ } else {
799
+ for ( key, value) in pairs {
800
+ match key {
801
+ Value :: String ( key)
802
+ if key
803
+ . to_string_lossy ( )
804
+ . chars ( )
805
+ . all ( |c| matches ! ( c, 'a' ..='z' | 'A' ..='Z' | '0' ..='9' | '_' ) ) =>
806
+ {
807
+ write ! ( fmt, "{}{}" , " " . repeat( ident + 2 ) , key. to_string_lossy( ) ) ?;
808
+ write ! ( fmt, " = " ) ?;
809
+ }
810
+ _ => {
811
+ write ! ( fmt, "{}[" , " " . repeat( ident + 2 ) ) ?;
812
+ key. fmt_pretty ( fmt, false , ident + 2 , visited) ?;
813
+ write ! ( fmt, "] = " ) ?;
814
+ }
815
+ }
816
+ value. fmt_pretty ( fmt, true , ident + 2 , visited) ?;
817
+ writeln ! ( fmt, "," ) ?;
818
+ }
790
819
}
791
820
write ! ( fmt, "{}}}" , " " . repeat( ident) )
792
821
}
0 commit comments