forked from OSchip/llvm-project
[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
This commit is contained in:
parent
1256d68093
commit
1fbb1d6df0
clang-tools-extra/clangd
|
@ -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.
|
||||
}
|
||||
|
||||
|
|
|
@ -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(
|
||||
|
|
Loading…
Reference in New Issue