Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

CLI option to format non-singleton lists on one line #206

Open
MattSturgeon opened this issue Jun 4, 2024 · 0 comments
Open

CLI option to format non-singleton lists on one line #206

MattSturgeon opened this issue Jun 4, 2024 · 0 comments

Comments

@MattSturgeon
Copy link

MattSturgeon commented Jun 4, 2024

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 d2e8575

@MattSturgeon MattSturgeon changed the title --single-line-lists option to format non-singleton lists on one line where possible CLI option to format non-singleton lists on one line where possible Jun 4, 2024
@MattSturgeon MattSturgeon changed the title CLI option to format non-singleton lists on one line where possible CLI option to format non-singleton lists on one line Jun 4, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
Status: Todo
Development

No branches or pull requests

1 participant