kadircet updated this revision to Diff 437148. kadircet marked 2 inline comments as done. kadircet added a comment.
- Leave the Ctx refactoring out of the patch. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D127832/new/ https://reviews.llvm.org/D127832 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 @@ -3206,6 +3206,30 @@ ASSERT_TRUE(H); EXPECT_EQ(H->Definition, "int arr[]"); } + +TEST(Hover, Typedefs) { + Annotations T(R"cpp( + template <bool X, typename T, typename F> + struct cond { using type = T; }; + template <typename T, typename F> + struct cond<false, T, F> { using type = F; }; + + template <bool X, typename T, typename F> + using type = typename cond<X, T, F>::type; + + void foo() { + using f^oo = type<true, int, double>; + } + )cpp"); + + TestTU TU = TestTU::withCode(T.code()); + auto AST = TU.build(); + auto H = getHover(AST, T.point(), format::getLLVMStyle(), nullptr); + + ASSERT_TRUE(H && H->Type); + EXPECT_EQ(H->Type->Type, "int"); + EXPECT_EQ(H->Definition, "using foo = type<true, int, double>"); +} } // namespace } // namespace clangd } // namespace clang Index: clang-tools-extra/clangd/Hover.cpp =================================================================== --- clang-tools-extra/clangd/Hover.cpp +++ clang-tools-extra/clangd/Hover.cpp @@ -623,7 +623,8 @@ HI.Type = printType(VT->getTemplatedDecl()->getType(), VT->getASTContext(), PP); else if (const auto *TN = dyn_cast<TypedefNameDecl>(D)) - HI.Type = printType(TN->getUnderlyingType(), TN->getASTContext(), PP); + HI.Type = printType(TN->getUnderlyingType().getDesugaredType(Ctx), + TN->getASTContext(), PP); else if (const auto *TAT = dyn_cast<TypeAliasTemplateDecl>(D)) HI.Type = printType(TAT->getTemplatedDecl()->getUnderlyingType(), TAT->getASTContext(), PP);
Index: clang-tools-extra/clangd/unittests/HoverTests.cpp =================================================================== --- clang-tools-extra/clangd/unittests/HoverTests.cpp +++ clang-tools-extra/clangd/unittests/HoverTests.cpp @@ -3206,6 +3206,30 @@ ASSERT_TRUE(H); EXPECT_EQ(H->Definition, "int arr[]"); } + +TEST(Hover, Typedefs) { + Annotations T(R"cpp( + template <bool X, typename T, typename F> + struct cond { using type = T; }; + template <typename T, typename F> + struct cond<false, T, F> { using type = F; }; + + template <bool X, typename T, typename F> + using type = typename cond<X, T, F>::type; + + void foo() { + using f^oo = type<true, int, double>; + } + )cpp"); + + TestTU TU = TestTU::withCode(T.code()); + auto AST = TU.build(); + auto H = getHover(AST, T.point(), format::getLLVMStyle(), nullptr); + + ASSERT_TRUE(H && H->Type); + EXPECT_EQ(H->Type->Type, "int"); + EXPECT_EQ(H->Definition, "using foo = type<true, int, double>"); +} } // namespace } // namespace clangd } // namespace clang Index: clang-tools-extra/clangd/Hover.cpp =================================================================== --- clang-tools-extra/clangd/Hover.cpp +++ clang-tools-extra/clangd/Hover.cpp @@ -623,7 +623,8 @@ HI.Type = printType(VT->getTemplatedDecl()->getType(), VT->getASTContext(), PP); else if (const auto *TN = dyn_cast<TypedefNameDecl>(D)) - HI.Type = printType(TN->getUnderlyingType(), TN->getASTContext(), PP); + HI.Type = printType(TN->getUnderlyingType().getDesugaredType(Ctx), + TN->getASTContext(), PP); else if (const auto *TAT = dyn_cast<TypeAliasTemplateDecl>(D)) HI.Type = printType(TAT->getTemplatedDecl()->getUnderlyingType(), TAT->getASTContext(), PP);
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits