HomePhabricator

Refactor clang-format's formatter.

Description

Refactor clang-format's formatter.

Summary:
a) Pull out a class LevelIndentTracker whose responsibility is to keep track

of the indent of levels across multiple annotated lines.

b) Put all responsibility for merging lines into the LineJoiner; make the

LineJoiner iterate over the lines so we never operate on a line that might
be merged later; this makes the interface safer to use.

c) Move formatting of the end-of-file whitespace into formatFirstToken.

Fix bugs that became obvious after the refactoring:

  1. We would not format lines with offsets correctly inside nested blocks if only the outer expression was affected: int x = s({ clang-format only this line class X { public: ^ this starts at the non-modified indnent level; previously we would // not fix this, now we correctly outdent it. void f(); }; });
  2. We would incorrectly align comments across lines that do not have comments for lines with nested blocks: int expression; with comment int x = s({ int y; comment int z; we would incorrectly align this comment with the comment on 'expression' });

Details

Committed
klimekMay 12 2015, 2:23 AM
Parents
rL237103: Remove handling of eStateStopped from NativeProcessLinux::Resume
Branches
Unknown
Tags
Unknown