Poll/discussion: dfmt option for single vs double indents for multi-line code
Prajwal S N
snp at dlang.org
Fri Dec 29 09:08:33 UTC 2023
Hi everyone,
As a part of SAOC 2023, I've been working on porting dfmt to use
the AST from DMD instead of libdparse (you might have come across
my weekly updates). There are a few passes in the original dfmt
that seem to allow for a purely aesthetic formatting
inconsistency, and I wanted some community opinion on whether
these should be made available in dmdfmt, or whether it would be
better to retire them.
- `dfmt_single_template_constraint_indent`: If set to true,
indents multi-line template constraints with a single tab. The
default is false. E.g.
```d
// default
void foo(T)()
if (is(T == char) || is(T == dchar))
// true
void foo(T)()
if (is(T == char) || is(T == dchar))
```
- `dfmt_single_indent`: If set to true, indents multi-line
function declarations with a single tab. The default is false.
E.g.
```d
// default
void foo(int a, char b, string c, int d,
char e, string f) {}
// true
void foo(int a, char b, string c, int d,
char e, string f) {}
```
IMO, code on the following line should ideally be indented by a
single tab, irrespective of the context of the newline. This
ensures formatting consistency across all types of expressions.
With these options, it causes the reader to flip between single
tab and double tab indents across different items like
if/else/for/while and function declarations/template constraints,
which is quite jarring.
What do you think about this? Would it be better to maintain a
single standard for indentation and not allow configuration, or
should a knob be provided at the cost of consistency?
More information about the Digitalmars-d
mailing list