nixfmt
nixfmt copied to clipboard
CLI option to format non-singleton lists on one line
Description
In the same spirit as --width
(default 100) allowing end-users outside of nixpkgs to tweak nixfmt's behavior, I'd like an option to disable the default formatting of non-singleton lists.
When the option is enabled, lists of any element count should be rendered on a single line unless that cannot be done for some other reason, such as comments within the list or the total line length being too long.
Better yet, a granular --max-list-items
option could be added:
- default 1 for the current behavior
- 0 would always produce a multi-line list
- a negative value (-1) would always produce a single-line list (if possible, as described in the rest of this issue).
- Any other positive integer would use that value as the threshold for when to no longer attempt to format a list on a single line.
Small example input
{
single = ["a"];
short = ["a" "b" "c"];
long = ["a very very" "long list of" "a few elements" "with many many" "characters!"];
shortWithComment = [
# Elements
"a" "b" "c"
];
shortListWithAVeryVeryLongName_LoremipsumdolorsitametconsecteturadipiscingelitPhasellusaliquetutmauriseumollisSuspendisserhoncusdui = ["a" "b" "c"];
}
Expected output
{
single = [ "a" ];
short = [ "a" "b" "c" ];
long = [
"a very very"
"long list of"
"a few elements"
"with many many"
"characters!"
];
shortWithComment = [
# Elements
"a"
"b"
"c"
];
shortListWithAVeryVeryLongName_LoremipsumdolorsitametconsecteturadipiscingelitPhasellusaliquetutmauriseumollisSuspendisserhoncusdui =
[ "a" "b" "c" ];
}
Actual output
{
single = [ "a" ];
short = [
"a"
"b"
"c"
];
long = [
"a very very"
"long list of"
"a few elements"
"with many many"
"characters!"
];
shortWithComment = [
# Elements
"a"
"b"
"c"
];
shortListWithAVeryVeryLongName_LoremipsumdolorsitametconsecteturadipiscingelitPhasellusaliquetutmauriseumollisSuspendisserhoncusdui = [
"a"
"b"
"c"
];
Note: Only the short
list and the short list with a long name should be formatted differently when --single-line-lists
is used.
Related
This is essentially the opposite of #136 which was asking to revert https://github.com/NixOS/nixfmt/commit/d2e8575db66eac5252323b352e3e1b14a2a1646e