[PATCH] D105904: [clangd] Support `#pragma mark` in the outline
Kadir Cetinkaya via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Thu Aug 5 11:52:45 PDT 2021
kadircet added a comment.
Thanks! I think it looks good, I've suggested some more simplifications to termination detection. If you can delete the rest I'd like to take a final look at the rest of the details.
================
Comment at: clang-tools-extra/clangd/FindSymbols.cpp:680
+ // We'll figure out where the Pragmas.front() should go.
+ PragmaMarkSymbol P = Pragmas.front();
+ Pragmas = Pragmas.drop_front();
----------------
nit: std::move
================
Comment at: clang-tools-extra/clangd/FindSymbols.cpp:712
+ ArrayRef<PragmaMarkSymbol> NextPragmas = Pragmas;
+ while (true) {
+ // We own all children that occur after us.
----------------
```
bool TerminatedByNextPragma = false;
for (auto &NextPragma : Pragmas) {
// If we hit a pragma outside of Cur, the rest will be outside as well.
if (!Cur->contains(NextPragma))
break;
// NextPragma cannot terminate P if it is nested inside a children, look for the next one.
if (any_of(Cur->children, [](...) { return Child->contains(NextPragma); })
continue;
// Pragma owns all the children between P and NextPragma
auto It = std::partition(....);
P.children.assign(make_move_iterator(It), make_move_iterator(Cur->children.end()));
Cur->children.erase(It, ...);
TerminatedByNextPragma = true;
break;
}
if(!TerminatedByNextPragma) {
// P is terminated by the end of current symbol, hence it owns all the children after P.
auto It = std::partition(....);
P.children.assign(make_move_iterator(It), make_move_iterator(Cur->children.end()));
Cur->children.erase(It, ...);
}
// Update the range for P to cover children and append to Cur.
```
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D105904/new/
https://reviews.llvm.org/D105904
More information about the cfe-commits
mailing list