diff --git a/clang-tools-extra/clangd/unittests/HoverTests.cpp b/clang-tools-extra/clangd/unittests/HoverTests.cpp index 91060a517de53..2ad7f0ee55d72 100644 --- a/clang-tools-extra/clangd/unittests/HoverTests.cpp +++ b/clang-tools-extra/clangd/unittests/HoverTests.cpp @@ -523,6 +523,32 @@ class Foo final {})cpp"; HI.Kind = index::SymbolKind::TypeAlias; HI.Definition = "Foo"; }}, + // constrained template parameter + {R"cpp( + template concept Fooable = true; + template<[[Foo^able]] T> + void bar(T t) {} + )cpp", + [](HoverInfo &HI) { + HI.NamespaceScope = ""; + HI.Name = "Fooable"; + HI.Kind = index::SymbolKind::Concept; + HI.Definition = "template \nconcept Fooable = true"; + }}, + {R"cpp( + template concept Fooable = true; + template + void bar(TT t) {} + )cpp", + [](HoverInfo &HI) { + HI.Name = "TT"; + HI.Type = "class"; + HI.AccessSpecifier = "public"; + HI.NamespaceScope = ""; + HI.LocalScope = "bar::"; + HI.Kind = index::SymbolKind::TemplateTypeParm; + HI.Definition = "Fooable TT"; + }}, // empty macro {R"cpp( @@ -3025,17 +3051,17 @@ TEST(Hover, Providers) { const char *Code; const std::function ExpectedBuilder; } Cases[] = {{R"cpp( - struct Foo {}; + struct Foo {}; Foo F = Fo^o{}; )cpp", [](HoverInfo &HI) { HI.Provider = ""; }}, {R"cpp( - #include "foo.h" + #include "foo.h" Foo F = Fo^o{}; )cpp", [](HoverInfo &HI) { HI.Provider = "\"foo.h\""; }}, {R"cpp( - #include "all.h" + #include "all.h" Foo F = Fo^o{}; )cpp", [](HoverInfo &HI) { HI.Provider = "\"foo.h\""; }}, @@ -3055,7 +3081,7 @@ TEST(Hover, Providers) { )cpp", [](HoverInfo &HI) { HI.Provider = "\"foo.h\""; }}, {R"cpp( - #include "foo.h" + #include "foo.h" Foo A; Foo B; Foo C = A ^+ B;