ArcsinX created this revision. Herald added subscribers: cfe-commits, usaxena95, kadircet, arphaman, jkorous, MaskRay, ilya-biryukov. Herald added a project: clang.
This patch fixes redundant hover with information about Decl which is not under cursor. Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D83508 Files: clang-tools-extra/clangd/Hover.cpp clang-tools-extra/clangd/unittests/HoverTests.cpp Index: clang-tools-extra/clangd/unittests/HoverTests.cpp =================================================================== --- clang-tools-extra/clangd/unittests/HoverTests.cpp +++ clang-tools-extra/clangd/unittests/HoverTests.cpp @@ -942,6 +942,13 @@ template <typename T> void foo() { (void)[[size^of]](T); })cpp", + R"cpp(// No Decl for token under cursor. + namespace ns { + #define FOO B^AR; + })cpp", + R"cpp(//error-ok + unknown f(i^nt); + )cpp", // literals "auto x = t^rue;", "auto x = '^A';", Index: clang-tools-extra/clangd/Hover.cpp =================================================================== --- clang-tools-extra/clangd/Hover.cpp +++ clang-tools-extra/clangd/Hover.cpp @@ -820,6 +820,18 @@ SelectionTree::createRight(AST.getASTContext(), TB, Offset, Offset); std::vector<const Decl *> Result; if (const SelectionTree::Node *N = ST.commonAncestor()) { + // Don't allow Decls which are not related with tokens under cursor. + if (const auto *D = N->ASTNode.get<Decl>()) { + bool IsDeclTouchingCursor = false; + for (const auto &Tok : TokensTouchingCursor) { + if (D->getLocation() == Tok.location()) { + IsDeclTouchingCursor = true; + break; + } + } + if (!IsDeclTouchingCursor) + return llvm::None; + } // FIXME: Fill in HighlightRange with range coming from N->ASTNode. auto Decls = explicitReferenceTargets(N->ASTNode, DeclRelation::Alias); if (!Decls.empty()) {
Index: clang-tools-extra/clangd/unittests/HoverTests.cpp =================================================================== --- clang-tools-extra/clangd/unittests/HoverTests.cpp +++ clang-tools-extra/clangd/unittests/HoverTests.cpp @@ -942,6 +942,13 @@ template <typename T> void foo() { (void)[[size^of]](T); })cpp", + R"cpp(// No Decl for token under cursor. + namespace ns { + #define FOO B^AR; + })cpp", + R"cpp(//error-ok + unknown f(i^nt); + )cpp", // literals "auto x = t^rue;", "auto x = '^A';", Index: clang-tools-extra/clangd/Hover.cpp =================================================================== --- clang-tools-extra/clangd/Hover.cpp +++ clang-tools-extra/clangd/Hover.cpp @@ -820,6 +820,18 @@ SelectionTree::createRight(AST.getASTContext(), TB, Offset, Offset); std::vector<const Decl *> Result; if (const SelectionTree::Node *N = ST.commonAncestor()) { + // Don't allow Decls which are not related with tokens under cursor. + if (const auto *D = N->ASTNode.get<Decl>()) { + bool IsDeclTouchingCursor = false; + for (const auto &Tok : TokensTouchingCursor) { + if (D->getLocation() == Tok.location()) { + IsDeclTouchingCursor = true; + break; + } + } + if (!IsDeclTouchingCursor) + return llvm::None; + } // FIXME: Fill in HighlightRange with range coming from N->ASTNode. auto Decls = explicitReferenceTargets(N->ASTNode, DeclRelation::Alias); if (!Decls.empty()) {
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits