summaryrefslogtreecommitdiffstats
path: root/clang-tools-extra/clangd/Selection.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'clang-tools-extra/clangd/Selection.cpp')
-rw-r--r--clang-tools-extra/clangd/Selection.cpp10
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>;
OpenPOWER on IntegriCloud