Skip to content

Commit

Permalink
[Index] Index paremeters in lambda expressions.
Browse files Browse the repository at this point in the history
Summary: This fixes clangd couldn't find references for lambda parameters.

Reviewers: ilya-biryukov

Subscribers: ioeric, arphaman, kadircet, cfe-commits

Differential Revision: https://reviews.llvm.org/D55437

llvm-svn: 349626
  • Loading branch information
hokein committed Dec 19, 2018
1 parent 6c95bea commit e2a27b3
Show file tree
Hide file tree
Showing 2 changed files with 14 additions and 0 deletions.
11 changes: 11 additions & 0 deletions clang/lib/Index/IndexBody.cpp
Expand Up @@ -9,6 +9,7 @@

#include "IndexingContext.h"
#include "clang/AST/RecursiveASTVisitor.h"
#include "clang/AST/ASTLambda.h"

using namespace clang;
using namespace clang::index;
Expand Down Expand Up @@ -454,6 +455,16 @@ class BodyIndexer : public RecursiveASTVisitor<BodyIndexer> {
}
return true;
}

bool VisitParmVarDecl(ParmVarDecl* D) {
// Index the parameters of lambda expression.
if (IndexCtx.shouldIndexFunctionLocalSymbols()) {
const auto *DC = D->getDeclContext();
if (DC && isLambdaCallOperator(DC))
IndexCtx.handleDecl(D);
}
return true;
}
};

} // anonymous namespace
Expand Down
3 changes: 3 additions & 0 deletions clang/test/Index/cxx11-lambdas.cpp
Expand Up @@ -7,6 +7,7 @@ struct X {
auto lambda = [&localA, localB] (Integer x) -> Integer {
return localA + localB + x;
};
auto lambda2 = [](Integer y) {};
}
};

Expand All @@ -26,8 +27,10 @@ struct X {
// RUN: env CINDEXTEST_INDEXLOCALSYMBOLS=1 c-index-test -index-file -std=c++11 %s | FileCheck -check-prefix=CHECK-INDEX %s
// CHECK-INDEX: [indexEntityReference]: kind: variable | name: localA | USR: c:cxx11-lambdas.cpp@100@S@X@F@f#@localA | lang: C | cursor: VariableRef=localA:6:9 | loc: 7:21
// CHECK-INDEX: [indexEntityReference]: kind: variable | name: localB | USR: c:cxx11-lambdas.cpp@100@S@X@F@f#@localB | lang: C | cursor: VariableRef=localB:6:17 | loc: 7:29
// CHECK-INDEX: [indexDeclaration]: kind: variable | name: x | USR: c:cxx11-lambdas.cpp@157@S@X@F@f#@Sa@F@operator()#I#1@x | lang: C | cursor: ParmDecl=x:7:46 (Definition) | loc: 7:46
// CHECK-INDEX: [indexEntityReference]: kind: typedef | name: Integer | USR: c:cxx11-lambdas.cpp@T@Integer | lang: C | cursor: TypeRef=Integer:3:13 | loc: 7:52
// CHECK-INDEX: [indexEntityReference]: kind: typedef | name: Integer | USR: c:cxx11-lambdas.cpp@T@Integer | lang: C | cursor: TypeRef=Integer:3:13 | loc: 7:38
// CHECK-INDEX: [indexEntityReference]: kind: variable | name: localA | USR: c:cxx11-lambdas.cpp@100@S@X@F@f#@localA | lang: C | cursor: DeclRefExpr=localA:6:9 | loc: 8:14
// CHECK-INDEX: [indexEntityReference]: kind: variable | name: localB | USR: c:cxx11-lambdas.cpp@100@S@X@F@f#@localB | lang: C | cursor: DeclRefExpr=localB:6:17 | loc: 8:23
// CHECK-INDEX: [indexEntityReference]: kind: variable | name: x | USR: c:cxx11-lambdas.cpp@157@S@X@F@f#@Sa@F@operator()#I#1@x | lang: C | cursor: DeclRefExpr=x:7:46 | loc: 8:32
// CHECK-INDEX: [indexDeclaration]: kind: variable | name: y | USR: c:cxx11-lambdas.cpp@244@S@X@F@f#@Sa@F@operator()#I#1@y | lang: C | cursor: ParmDecl=y:10:31 (Definition) | loc: 10:31

0 comments on commit e2a27b3

Please sign in to comment.