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

Consider several elements per line in long lists of small elements #302

Open
expipiplus1 opened this issue May 2, 2020 · 2 comments
Open

Comments

@expipiplus1
Copy link
Contributor

It might be hard to come up with a consistent rule for this. Nevertheless I think the former is much easier to read (and doesn't eat a whole page in my editor)

foo =
  [ 0.0, -0.5, 1.0, 1.0, 1.0
  , 0.5, 0.5, 0.0, 1.0, 0.0
  , -0.5, 0.5, 0.0, 0.0, 1.0
  , 1.0, 0.0, 0.0, 0.0, 0.0
  ]

foo =
  [ 0.0
  , -0.5
  , 1.0
  , 1.0
  , 1.0
  , 0.5
  , 0.5
  , 0.0
  , 1.0
  , 0.0
  , -0.5
  , 0.5
  , 0.0
  , 0.0
  , 1.0
  , 1.0
  , 0.0
  , 0.0
  , 0.0
  , 0.0
  ]
@tfausak
Copy link
Collaborator

tfausak commented Jul 21, 2020

It's tough to say when a list should be formatted with one line per element versus many elements per line. One (kind of clunky) way around this is to concatenate a bunch of sub-lists. For example:

foo = mconcat
  [ [0.0, -0.5, 1.0, 1.0, 1.0]
  , [0.5, 0.5, 0.0, 1.0, 0.0]
  , [-0.5, 0.5, 0.0, 0.0, 1.0]
  , [1.0, 0.0, 0.0, 0.0, 0.0]
  ]

@expipiplus1
Copy link
Contributor Author

Yeah, that is quite clunky and not necessarily without runtime overhead or a clarity cost.

Perhaps a neat way of allowing the user to signal the wrapping would be to break after the first empty comment in the list and at multiples of that index, for example:

foo =
  [ 0.0, -0.5, 1.0, 1.0, 1.0 --
  , 0.5, 0.5, 0.0, 1.0, 0.0
  , -0.5, 0.5, 0.0, 0.0, 1.0
  , 1.0, 0.0, 0.0, 0.0, 0.0
  ]

or

foo =
  [ 0.0, -0.5, 1.0, 1.0, 1.0, 0.5 --
  , 0.5, 0.0, 1.0, 0.0, -0.5, 0.5 
  , 0.0, 0.0, 1.0, 1.0, 0.0, 0.0
  , 0.0, 0.0
  ]

This would allow the user to select the wrapping in a low visual overhead way. I think that clang format has some similar behaviour, at the very least I remember using empty comments to force wrapping of lists when they'd usually be put on one line.

Not quite sure how discoverable this is, but perhaps that ok as this is probably a niche issue anyway.

If it had to be done without hints from the programmer I'd say that lists should be:

  • On one line if possible.
  • One line per element if any element is itself "long" (for some threshold to bikeshed, perhaps as small as 4 or 5 characters).
  • As square as possible with as few elements as possible on the last line.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants