I think the only one I disagree with here is the function chains example. I may agree with a different example, but with this one I find the chained version without variables much easier to understand because I'm traversing the graph visually in my head, while the variables are additional state I have to keep track of in my head.<p>----<p>Really I was hoping this would be about actual visual patterns and not syntax. It's my major issue with how strict code linting/autoformatting is nowadays.<p>For example, the "black" formatter for python requires this:<p><pre><code> drawer.ellipse((10, 10, 30, 30), fill=(256, 256, 0))
drawer.ellipse((370, 10, 390, 30), fill=(256, 256, 0))
drawer.arc((20, 0, 380, 180), 15, 165, fill=(256, 256, 0), width=5)
</code></pre>
The first argument is (x1, y1, x2, y2) of a bounding box and black wants to align x1 for "ellipse" with y1 of "arc". Do people really find that more readable than this?<p><pre><code> drawer.ellipse( (10, 10, 30, 30), fill=(256, 256, 0) )
drawer.ellipse( (370, 10, 390, 30), fill=(256, 256, 0) )
drawer.arc( (20, 0, 380, 180), 15, 165, fill=(256, 256, 0), width=5 )
</code></pre>
Or perhaps something more common in python, kwargs in function arguments. No spacing at all is standard python style:<p><pre><code> Foobar.objects.create(
name=form.name,
owner=user,
location=form.location,
source=form.source,
created=time.now,
)
</code></pre>
Instead for me it's much easier to read this, since I don't have to scan for the "=" and mentally parse each line, it's just a table:<p><pre><code> Foobar.objects.create(
name = form.name,
owner = user,
location = form.location,
source = form.source,
created = time.now,
)
</code></pre>
But no linters/formatters accept such spacing by default. I think flake8 (linter) could be configured to ignore whitespace like this, but black (formatter) can't.