v1nh1shungry updated this revision to Diff 485854. v1nh1shungry added a comment.
apply comment's suggestions Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D140814/new/ https://reviews.llvm.org/D140814 Files: clang-tools-extra/clangd/InlayHints.cpp clang-tools-extra/clangd/unittests/InlayHintTests.cpp Index: clang-tools-extra/clangd/unittests/InlayHintTests.cpp =================================================================== --- clang-tools-extra/clangd/unittests/InlayHintTests.cpp +++ clang-tools-extra/clangd/unittests/InlayHintTests.cpp @@ -1364,7 +1364,6 @@ TEST(TypeHints, Decltype) { assertTypeHints(R"cpp( $a[[decltype(0)]] a; - // FIXME: will be nice to show `: int` instead $b[[decltype(a)]] b; const $c[[decltype(0)]] &c = b; @@ -1377,11 +1376,13 @@ template <class, class> struct Foo; using G = Foo<$g[[decltype(0)]], float>; + + auto $h[[h]] = $i[[decltype(0)]]{}; )cpp", - ExpectedHint{": int", "a"}, - ExpectedHint{": decltype(0)", "b"}, + ExpectedHint{": int", "a"}, ExpectedHint{": int", "b"}, ExpectedHint{": int", "c"}, ExpectedHint{": int", "e"}, - ExpectedHint{": int", "f"}, ExpectedHint{": int", "g"}); + ExpectedHint{": int", "f"}, ExpectedHint{": int", "g"}, + ExpectedHint{": int", "h"}, ExpectedHint{": int", "i"}); } TEST(DesignatorHints, Basic) { Index: clang-tools-extra/clangd/InlayHints.cpp =================================================================== --- clang-tools-extra/clangd/InlayHints.cpp +++ clang-tools-extra/clangd/InlayHints.cpp @@ -662,7 +662,21 @@ sourceLocToPosition(SM, Spelled->back().endLocation())}; } + // The sugared type is more useful in some cases, and the canonical + // type in other cases. For now, prefer the sugared type unless + // we are printing `decltype(expr)`. This could be refined further + // (see https://github.com/clangd/clangd/issues/1298). + static bool shouldPrintCanonicalType(QualType QT) { + if (QT->isDecltypeType()) + return true; + if (const AutoType *AT = QT->getContainedAutoType()) + if (AT->getDeducedType()->isDecltypeType()) + return true; + return false; + } + void addTypeHint(SourceRange R, QualType T, llvm::StringRef Prefix) { + TypeHintPolicy.PrintCanonicalTypes = shouldPrintCanonicalType(T); addTypeHint(R, T, Prefix, TypeHintPolicy); }
Index: clang-tools-extra/clangd/unittests/InlayHintTests.cpp =================================================================== --- clang-tools-extra/clangd/unittests/InlayHintTests.cpp +++ clang-tools-extra/clangd/unittests/InlayHintTests.cpp @@ -1364,7 +1364,6 @@ TEST(TypeHints, Decltype) { assertTypeHints(R"cpp( $a[[decltype(0)]] a; - // FIXME: will be nice to show `: int` instead $b[[decltype(a)]] b; const $c[[decltype(0)]] &c = b; @@ -1377,11 +1376,13 @@ template <class, class> struct Foo; using G = Foo<$g[[decltype(0)]], float>; + + auto $h[[h]] = $i[[decltype(0)]]{}; )cpp", - ExpectedHint{": int", "a"}, - ExpectedHint{": decltype(0)", "b"}, + ExpectedHint{": int", "a"}, ExpectedHint{": int", "b"}, ExpectedHint{": int", "c"}, ExpectedHint{": int", "e"}, - ExpectedHint{": int", "f"}, ExpectedHint{": int", "g"}); + ExpectedHint{": int", "f"}, ExpectedHint{": int", "g"}, + ExpectedHint{": int", "h"}, ExpectedHint{": int", "i"}); } TEST(DesignatorHints, Basic) { Index: clang-tools-extra/clangd/InlayHints.cpp =================================================================== --- clang-tools-extra/clangd/InlayHints.cpp +++ clang-tools-extra/clangd/InlayHints.cpp @@ -662,7 +662,21 @@ sourceLocToPosition(SM, Spelled->back().endLocation())}; } + // The sugared type is more useful in some cases, and the canonical + // type in other cases. For now, prefer the sugared type unless + // we are printing `decltype(expr)`. This could be refined further + // (see https://github.com/clangd/clangd/issues/1298). + static bool shouldPrintCanonicalType(QualType QT) { + if (QT->isDecltypeType()) + return true; + if (const AutoType *AT = QT->getContainedAutoType()) + if (AT->getDeducedType()->isDecltypeType()) + return true; + return false; + } + void addTypeHint(SourceRange R, QualType T, llvm::StringRef Prefix) { + TypeHintPolicy.PrintCanonicalTypes = shouldPrintCanonicalType(T); addTypeHint(R, T, Prefix, TypeHintPolicy); }
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits