https://github.com/HighCommander4 updated https://github.com/llvm/llvm-project/pull/156284
>From 6791b7af77579242a7a0dd6a35929c0a648835d0 Mon Sep 17 00:00:00 2001 From: Nathan Ridge <zeratul...@hotmail.com> Date: Mon, 1 Sep 2025 02:48:44 -0400 Subject: [PATCH] [clangd] Show type hint for simple cases of dependent 'auto' Fixes https://github.com/clangd/clangd/issues/2275 --- clang-tools-extra/clangd/InlayHints.cpp | 31 ++++++++++++++----- .../clangd/unittests/InlayHintTests.cpp | 3 +- 2 files changed, 26 insertions(+), 8 deletions(-) diff --git a/clang-tools-extra/clangd/InlayHints.cpp b/clang-tools-extra/clangd/InlayHints.cpp index cd479e1b7c9bc..d56b93e5f36dc 100644 --- a/clang-tools-extra/clangd/InlayHints.cpp +++ b/clang-tools-extra/clangd/InlayHints.cpp @@ -633,13 +633,30 @@ class InlayHintVisitor : public RecursiveASTVisitor<InlayHintVisitor> { } if (auto *AT = D->getType()->getContainedAutoType()) { - if (AT->isDeduced() && !D->getType()->isDependentType()) { - // Our current approach is to place the hint on the variable - // and accordingly print the full type - // (e.g. for `const auto& x = 42`, print `const int&`). - // Alternatively, we could place the hint on the `auto` - // (and then just print the type deduced for the `auto`). - addTypeHint(D->getLocation(), D->getType(), /*Prefix=*/": "); + if (AT->isDeduced()) { + QualType T; + // If the type is dependent, HeuristicResolver *may* be able to + // resolve it to something that's useful to print. In other + // cases, it can't, and the resultng type would just be printed + // as "<dependent type>", in which case don't hint it at all. + if (D->getType()->isDependentType()) { + if (D->hasInit()) { + QualType Resolved = Resolver->resolveExprToType(D->getInit()); + if (Resolved != AST.DependentTy) { + T = Resolved; + } + } + } else { + T = D->getType(); + } + if (!T.isNull()) { + // Our current approach is to place the hint on the variable + // and accordingly print the full type + // (e.g. for `const auto& x = 42`, print `const int&`). + // Alternatively, we could place the hint on the `auto` + // (and then just print the type deduced for the `auto`). + addTypeHint(D->getLocation(), T, /*Prefix=*/": "); + } } } diff --git a/clang-tools-extra/clangd/unittests/InlayHintTests.cpp b/clang-tools-extra/clangd/unittests/InlayHintTests.cpp index 99e728c40063d..feb4404b3d2bf 100644 --- a/clang-tools-extra/clangd/unittests/InlayHintTests.cpp +++ b/clang-tools-extra/clangd/unittests/InlayHintTests.cpp @@ -1441,7 +1441,8 @@ TEST(TypeHints, DependentType) { void bar(T arg) { auto [a, b] = arg; } - )cpp"); + )cpp", + ExpectedHint{": T", "var2"}); } TEST(TypeHints, LongTypeName) { _______________________________________________ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits