Send me your list of D gripes and wishes

Joseph Rushton Wakeling joseph.wakeling at webdrake.net
Sat Dec 31 17:00:12 UTC 2022


On Saturday, 31 December 2022 at 08:56:34 UTC, Richard (Rikki) 
Andrew Cattermole wrote:
> I don't see how it would differ, the format is a new commit as 
> part of the PR.
>
> See: 
> https://mskelton.medium.com/auto-formatting-code-using-prettier-and-github-actions-ed458f58b7df

OK, understood.  (It wasn't 100% clear from your previous post 
that you were envisioning one follow-up patch on top of the PR, 
as opposed to modifying patches in the PR.)

> You've got the problem right there. There is no tool to run 
> locally. Its mixed between a few different CI runner types.

Yeah, I see why that would be very painful.

What I'd like to suggest is that, regardless of what one does or 
doesn't do during CI, the absence of a single tool for checking 
or fixing style is the crux of the problem.  Whatever CI does or 
doesn't do, it's IMO useful as a developer to be able to check 
one's own code for style correctness, before submitting in a PR.

So it seems to me that the best way forward here is to make sure 
that all the wanted style checks _can_ be carried out by a single 
tool, or at least by a well defined set of tools with 
standardized configuration.

There are good examples in other languages.  I've historically 
preferred tools that just define what's objectionable rather than 
what's correct (if that makes sense), so there is still an amount 
of flexibility for the developer to write code as they wish, but 
since I discovered the Python tool 
[`black`](https://black.readthedocs.io/en/stable/), I think it's 
clear that it's at least _possible_ to craft a deterministic 
formatting tool that consistently produces good looking code.

What's particularly nice about that tool is that it can be run to 
edit code in-place, or it can be used in a dry-run mode which 
outputs a patch showing what would have been changed (with exit 
code 0 if that's nothing, or 1 if changes are required).

Where CI for my own projects is concerned, I've preferred to use 
the dry-run mode and throw it back on the PR author to actually 
_make_ the fix -- on the grounds that the PR author should be in 
control of what code changes, but also because it's 
straightforward to follow what changes are wanted, and equally 
trivial to run the tool locally to make them.  But obviously one 
could use the same tooling to append a style-fix patch to a PR, 
if that was considered desirable.

> People (including myself) spend time having to figure out why 
> the CI failed, rather than letting it fix any problems it 
> encounters. It adds a failure mode to contributing, when we 
> could eliminate it and have more consistent code as a result!

I completely agree that we want to eliminate this kind of 
uncertainty.  I just think that to achieve it we need a 
well-defined tool which can be run locally as easily as in CI.

Python tooling is particularly instructive as a good point of 
reference, because there are other tools (e.g. 
[`tox`](https://tox.wiki/en/latest/)) which make it very easy to 
run a range of different checks (style, linter, test suite, ...) 
in a standardized way, via a single command.

Of course, it's not like people haven't already tried (`dfmt` 
etc.).  It just seems to be hard to sustain the momentum to 
implement and maintain such tools for D :-(

I'll mention some of these thoughts in the feedback I plan to 
write to Mike.


More information about the Digitalmars-d mailing list