massberg created this revision. massberg added a reviewer: sammccall. Herald added subscribers: kadircet, arphaman. Herald added a project: All. massberg requested review of this revision. Herald added subscribers: cfe-commits, MaskRay, ilya-biryukov. Herald added a project: clang-tools-extra.
Concepts aren't fully supporteb by hover yet. For the currently supported case we add a test here to prevent regressions in the future. Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D155558 Files: 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 @@ -523,6 +523,32 @@ HI.Kind = index::SymbolKind::TypeAlias; HI.Definition = "Foo<int>"; }}, + // constrained template parameter + {R"cpp( + template<class T> 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 <class T>\nconcept Fooable = true"; + }}, + {R"cpp( + template<class T> concept Fooable = true; + template<Fooable [[T^T]]> + 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 @@ const char *Code; const std::function<void(HoverInfo &)> 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 @@ )cpp", [](HoverInfo &HI) { HI.Provider = "\"foo.h\""; }}, {R"cpp( - #include "foo.h" + #include "foo.h" Foo A; Foo B; Foo C = A ^+ B;
Index: clang-tools-extra/clangd/unittests/HoverTests.cpp =================================================================== --- clang-tools-extra/clangd/unittests/HoverTests.cpp +++ clang-tools-extra/clangd/unittests/HoverTests.cpp @@ -523,6 +523,32 @@ HI.Kind = index::SymbolKind::TypeAlias; HI.Definition = "Foo<int>"; }}, + // constrained template parameter + {R"cpp( + template<class T> 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 <class T>\nconcept Fooable = true"; + }}, + {R"cpp( + template<class T> concept Fooable = true; + template<Fooable [[T^T]]> + 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 @@ const char *Code; const std::function<void(HoverInfo &)> 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 @@ )cpp", [](HoverInfo &HI) { HI.Provider = "\"foo.h\""; }}, {R"cpp( - #include "foo.h" + #include "foo.h" Foo A; Foo B; Foo C = A ^+ B;
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits