diff options
Diffstat (limited to 'clang-tools-extra/clangd')
| -rw-r--r-- | clang-tools-extra/clangd/XRefs.cpp | 5 | ||||
| -rw-r--r-- | clang-tools-extra/clangd/index/SymbolCollector.cpp | 6 | 
2 files changed, 10 insertions, 1 deletions
| diff --git a/clang-tools-extra/clangd/XRefs.cpp b/clang-tools-extra/clangd/XRefs.cpp index be4df73b9cf..a099fb9092f 100644 --- a/clang-tools-extra/clangd/XRefs.cpp +++ b/clang-tools-extra/clangd/XRefs.cpp @@ -15,6 +15,7 @@  #include "clang/AST/DeclTemplate.h"  #include "clang/AST/RecursiveASTVisitor.h"  #include "clang/Index/IndexDataConsumer.h" +#include "clang/Index/IndexSymbol.h"  #include "clang/Index/IndexingAction.h"  #include "clang/Index/USRGeneration.h"  #include "llvm/Support/Path.h" @@ -154,6 +155,10 @@ public:                        llvm::ArrayRef<index::SymbolRelation> Relations,                        SourceLocation Loc,                        index::IndexDataConsumer::ASTNodeInfo ASTNode) override { +    // Skip non-semantic references. +    if (Roles & static_cast<unsigned>(index::SymbolRole::NameReference)) +      return true; +      if (Loc == SearchedLocation) {        auto IsImplicitExpr = [](const Expr *E) {          if (!E) diff --git a/clang-tools-extra/clangd/index/SymbolCollector.cpp b/clang-tools-extra/clangd/index/SymbolCollector.cpp index 686b67b2dfb..7fae0795d17 100644 --- a/clang-tools-extra/clangd/index/SymbolCollector.cpp +++ b/clang-tools-extra/clangd/index/SymbolCollector.cpp @@ -211,7 +211,7 @@ getTokenLocation(SourceLocation TokLoc, const SourceManager &SM,  // the first seen declaration as canonical declaration is not a good enough  // heuristic.  bool isPreferredDeclaration(const NamedDecl &ND, index::SymbolRoleSet Roles) { -  const auto& SM = ND.getASTContext().getSourceManager(); +  const auto &SM = ND.getASTContext().getSourceManager();    return (Roles & static_cast<unsigned>(index::SymbolRole::Definition)) &&           isa<TagDecl>(&ND) &&           !SM.isWrittenInMainFile(SM.getExpansionLoc(ND.getLocation())); @@ -305,6 +305,10 @@ bool SymbolCollector::handleDeclOccurence(         Decl::FriendObjectKind::FOK_None) &&        !(Roles & static_cast<unsigned>(index::SymbolRole::Definition)))      return true; +  // Skip non-semantic references, we should start processing these when we +  // decide to implement renaming with index support. +  if ((Roles & static_cast<unsigned>(index::SymbolRole::NameReference))) +    return true;    // A declaration created for a friend declaration should not be used as the    // canonical declaration in the index. Use OrigD instead, unless we've already    // picked a replacement for D | 

