[clang-tools-extra] 1fbb1d6 - [clangd] Drop returntype/type when hovering over type-ish names
Kadir Cetinkaya via cfe-commits
cfe-commits at lists.llvm.org
Tue Jan 21 08:10:58 PST 2020
Author: Kadir Cetinkaya
Date: 2020-01-21T17:10:09+01:00
New Revision: 1fbb1d6df0113ca341f6d257bc72e07343dd861a
URL: https://github.com/llvm/llvm-project/commit/1fbb1d6df0113ca341f6d257bc72e07343dd861a
DIFF: https://github.com/llvm/llvm-project/commit/1fbb1d6df0113ca341f6d257bc72e07343dd861a.diff
LOG: [clangd] Drop returntype/type when hovering over type-ish names
Summary:
Some names, e.g. constructor/destructor/conversions, already contain
the type info, no need to duplicate them in the hoverinfo.
Fixes https://github.com/clangd/clangd/issues/252
Reviewers: sammccall, ilya-biryukov
Subscribers: MaskRay, jkorous, arphaman, usaxena95, cfe-commits
Tags: #clang
Differential Revision: https://reviews.llvm.org/D73110
Added:
Modified:
clang-tools-extra/clangd/Hover.cpp
clang-tools-extra/clangd/unittests/HoverTests.cpp
Removed:
################################################################################
diff --git a/clang-tools-extra/clangd/Hover.cpp b/clang-tools-extra/clangd/Hover.cpp
index ad715db4d5eb..1b7a48758533 100644
--- a/clang-tools-extra/clangd/Hover.cpp
+++ b/clang-tools-extra/clangd/Hover.cpp
@@ -266,20 +266,19 @@ void fillFunctionTypeAndParams(HoverInfo &HI, const Decl *D,
}
}
- if (const auto *CCD = llvm::dyn_cast<CXXConstructorDecl>(FD)) {
- // Constructor's "return type" is the class type.
- HI.ReturnType = declaredType(CCD->getParent()).getAsString(Policy);
- // Don't provide any type for the constructor itself.
- } else if (llvm::isa<CXXDestructorDecl>(FD)) {
- HI.ReturnType = "void";
- } else {
- HI.ReturnType = printType(FD->getReturnType(), Policy);
+ // We don't want any type info, if name already contains it. This is true for
+ // constructors/destructors and conversion operators.
+ const auto NK = FD->getDeclName().getNameKind();
+ if (NK == DeclarationName::CXXConstructorName ||
+ NK == DeclarationName::CXXDestructorName ||
+ NK == DeclarationName::CXXConversionFunctionName)
+ return;
- QualType QT = FD->getType();
- if (const VarDecl *VD = llvm::dyn_cast<VarDecl>(D)) // Lambdas
- QT = VD->getType().getDesugaredType(D->getASTContext());
- HI.Type = printType(QT, Policy);
- }
+ HI.ReturnType = printType(FD->getReturnType(), Policy);
+ QualType QT = FD->getType();
+ if (const VarDecl *VD = llvm::dyn_cast<VarDecl>(D)) // Lambdas
+ QT = VD->getType().getDesugaredType(D->getASTContext());
+ HI.Type = printType(QT, Policy);
// FIXME: handle variadics.
}
diff --git a/clang-tools-extra/clangd/unittests/HoverTests.cpp b/clang-tools-extra/clangd/unittests/HoverTests.cpp
index 9b6f2b185bf4..67257bac6398 100644
--- a/clang-tools-extra/clangd/unittests/HoverTests.cpp
+++ b/clang-tools-extra/clangd/unittests/HoverTests.cpp
@@ -327,7 +327,6 @@ class Foo {})cpp";
HI.Name = "X";
HI.LocalScope = "X<T *>::"; // FIXME: X<T *, void>::
HI.Kind = index::SymbolKind::Constructor;
- HI.ReturnType = "X<T *>";
HI.Definition = "X()";
HI.Parameters.emplace();
}},
@@ -337,10 +336,18 @@ class Foo {})cpp";
HI.Name = "~X";
HI.LocalScope = "X::";
HI.Kind = index::SymbolKind::Destructor;
- HI.ReturnType = "void";
HI.Definition = "~X()";
HI.Parameters.emplace();
}},
+ {"class X { operator [[in^t]](); };",
+ [](HoverInfo &HI) {
+ HI.NamespaceScope = "";
+ HI.Name = "operator int";
+ HI.LocalScope = "X::";
+ HI.Kind = index::SymbolKind::ConversionFunction;
+ HI.Definition = "operator int()";
+ HI.Parameters.emplace();
+ }},
// auto on lambda
{R"cpp(
More information about the cfe-commits
mailing list