[PATCH] D69764: [clang-format] Add East/West Const fixer capability
MyDeveloperDay via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Thu May 28 04:18:29 PDT 2020
MyDeveloperDay marked an inline comment as done.
MyDeveloperDay added inline comments.
================
Comment at: clang/lib/Format/EastWestConstFixer.cpp:130
+
+static void swapFourTokens(const SourceManager &SourceMgr,
+ tooling::Replacements &Fixes,
----------------
curdeius wrote:
> These functions seem a bit ugly... and very specific. And they both look like rotate left/right. Couldn't it be a single function taking a range/span/collection of FormatTokens?
This is something I'd also started to feel the same, now I'm starting to handle longer sets of qualifier, I can replace all these swap functions for one single rotate.
```
lang=c++
static void rotateTokens(const SourceManager &SourceMgr,
tooling::Replacements &Fixes, const FormatToken *First,
const FormatToken *Last, bool Left) {
auto *End = Last;
auto *Begin = First;
if (!Left) {
End = Last->Next;
Begin = First->Next;
}
std::string NewText;
// If we are rotating to the left we move the Last token to the front.
if (Left) {
NewText += Last->TokenText;
NewText += " ";
}
// Then move through the other tokens.
auto *Tok = Begin;
while (Tok != End) {
if (!NewText.empty())
NewText += " ";
NewText += Tok->TokenText;
Tok = Tok->Next;
}
// If we are rotating to the right we move the first token to the back.
if (!Left) {
NewText += " ";
NewText += First->TokenText;
}
auto Range = CharSourceRange::getCharRange(First->getStartOfNonWhitespace(),
Last->Tok.getEndLoc());
auto Err = Fixes.add(tooling::Replacement(SourceMgr, Range, NewText));
if (Err) {
llvm::errs() << "Error while rearranging const : "
<< llvm::toString(std::move(Err)) << "\n";
}
}
```
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D69764/new/
https://reviews.llvm.org/D69764
More information about the cfe-commits
mailing list