[clang-tools-extra] [clangd] Support go-to-definition on type hints. The core part (PR #86629)
Nathan Ridge via cfe-commits
cfe-commits at lists.llvm.org
Tue Jun 18 21:11:29 PDT 2024
================
@@ -1005,14 +1332,22 @@ class InlayHintVisitor : public RecursiveASTVisitor<InlayHintVisitor> {
// The sugared type is more useful in some cases, and the canonical
// type in other cases.
auto Desugared = maybeDesugar(AST, T);
- std::string TypeName = Desugared.getAsString(TypeHintPolicy);
- if (T != Desugared && !shouldPrintTypeHint(TypeName)) {
+ std::vector<InlayHintLabelPart> Chunks;
+ TypeInlayHintLabelPartBuilder Builder(Desugared, AST, MainFilePath,
+ TypeHintPolicy, Prefix, Chunks);
+ Builder.Visit(Desugared.getTypePtr());
+ if (T != Desugared && !shouldPrintTypeHint(Chunks)) {
// If the desugared type is too long to display, fallback to the sugared
// type.
- TypeName = T.getAsString(TypeHintPolicy);
+ Chunks.clear();
+ TypeInlayHintLabelPartBuilder Builder(T, AST, MainFilePath,
+ TypeHintPolicy, Prefix, Chunks);
+ Builder.Visit(T.getTypePtr());
}
- if (shouldPrintTypeHint(TypeName))
- addInlayHint(R, HintSide::Right, InlayHintKind::Type, Prefix, TypeName,
+ if (shouldPrintTypeHint(Chunks))
+ addInlayHint(R, HintSide::Right, InlayHintKind::Type,
+ /*Prefix=*/"", // We have handled prefixes in the builder.
----------------
HighCommander4 wrote:
Why do we handle prefixes in the builder if we handle them in `addInlayHint()`?
https://github.com/llvm/llvm-project/pull/86629
More information about the cfe-commits
mailing list