On Monday, 12 January 2015 at 05:43:33 UTC, Zach the Mystic wrote:
On Monday, 12 January 2015 at 00:38:20 UTC, Walter Bright wrote:
On 1/11/15 10:48 AM, Walter Bright wrote:
The main problem is what to do about comments, which don't fit into the
grammar.
In the first version comments might go through unchanged.

Consider:

   for /*comment*/ (a;
                    b;
                    c)

Do what with that?

I don't know. Simplest would be to punt for now - such rare embedded comments
should not be blockers. -- Andrei

Normally I would agree, but deleting peoples' comments from their source code is not a good plan. It'll make them justifiably angry.

This conversation reminds me of something I've thought about ever since I first studied D. D takes the C preprocessor and folds it into the regular AST. But comments still seemed like the outlier. I looked through a bunch of source code and tried to figure out the most specific place anyone could possibly put a comment. The most detailed I found were something like:

enum X {
  ONE,
  TWO, // We need a TWO here
  THREE
}

So I started conceiving of a language in which even the *comments* were part of the AST. For, me this would be the aesthetic ideal. It just seemed like the next step in total AST integration.

The clang-format approach is to make decisions based on the AST, but edit the byte array. AST nodes contain exact positions: line and column numbers. Sometimes more of them. For example, an if-statement needs to know the position of 'else' as well.

Here is another example: void setX(int position /* inches */);
However, I think it should really be wrapped into a struct instead to get type checker's approval.

Initially, clang-format only did whitespace changes. I am not sure if they weakened this already. For example, stripping parens in expressions (((((x)))) => x) would be acceptable for me.


btw +1 for https://github.com/Hackerpilot/dfmt

Reply via email to