diff options
Diffstat (limited to 'clang-tools-extra/clangd/Selection.cpp')
| -rw-r--r-- | clang-tools-extra/clangd/Selection.cpp | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/clang-tools-extra/clangd/Selection.cpp b/clang-tools-extra/clangd/Selection.cpp index 96b10f5358c..cd1c84b43c7 100644 --- a/clang-tools-extra/clangd/Selection.cpp +++ b/clang-tools-extra/clangd/Selection.cpp @@ -228,6 +228,16 @@ public: bool TraverseNestedNameSpecifier(NestedNameSpecifier *) { return true; } bool TraverseType(QualType) { return true; } + // The DeclStmt for the loop variable claims to cover the whole range + // inside the parens, this causes the range-init expression to not be hit. + // Traverse the loop VarDecl instead, which has the right source range. + bool TraverseCXXForRangeStmt(CXXForRangeStmt *S) { + return traverseNode(S, [&] { + return TraverseStmt(S->getInit()) && TraverseDecl(S->getLoopVariable()) && + TraverseStmt(S->getRangeInit()) && TraverseStmt(S->getBody()); + }); + } + private: using Base = RecursiveASTVisitor<SelectionVisitor>; |

