Author: Sam McCall Date: 2023-05-17T20:25:42+02:00 New Revision: 0e66105a9260d80d58215c0c627f35e950c35b99
URL: https://github.com/llvm/llvm-project/commit/0e66105a9260d80d58215c0c627f35e950c35b99 DIFF: https://github.com/llvm/llvm-project/commit/0e66105a9260d80d58215c0c627f35e950c35b99.diff LOG: [clangd] Tweak "provides" hover card when symbols have the same name Previously for overloaded functions we'd show: Provides: foo, bar bar bar bar The symbol name is duplicated ==> only show unique names, since we're not displaying the signature Commas are missing ==> fix the logic which was checking for "last element" by value (though after the above fix this bug is dead anyway) While here, remove a redundant bounds check before take_front(). Differential Revision: https://reviews.llvm.org/D150683 Added: Modified: clang-tools-extra/clangd/Hover.cpp clang-tools-extra/clangd/unittests/HoverTests.cpp Removed: ################################################################################ diff --git a/clang-tools-extra/clangd/Hover.cpp b/clang-tools-extra/clangd/Hover.cpp index de589e70f4afa..d1f6f3a7b06c0 100644 --- a/clang-tools-extra/clangd/Hover.cpp +++ b/clang-tools-extra/clangd/Hover.cpp @@ -1268,6 +1268,9 @@ void maybeAddUsedSymbols(ParsedAST &AST, HoverInfo &HI, const Inclusion &Inc) { for (const auto &UsedSymbolDecl : UsedSymbols) HI.UsedSymbolNames.push_back(getSymbolName(UsedSymbolDecl)); llvm::sort(HI.UsedSymbolNames); + HI.UsedSymbolNames.erase( + std::unique(HI.UsedSymbolNames.begin(), HI.UsedSymbolNames.end()), + HI.UsedSymbolNames.end()); } } // namespace @@ -1529,16 +1532,11 @@ markup::Document HoverInfo::present() const { P.appendText("provides "); const std::vector<std::string>::size_type SymbolNamesLimit = 5; - auto Front = - llvm::ArrayRef(UsedSymbolNames) - .take_front(std::min(UsedSymbolNames.size(), SymbolNamesLimit)); - - for (const auto &Sym : Front) { - P.appendCode(Sym); - if (Sym != Front.back()) - P.appendText(", "); - } + auto Front = llvm::ArrayRef(UsedSymbolNames).take_front(SymbolNamesLimit); + llvm::interleave( + Front, [&](llvm::StringRef Sym) { P.appendCode(Sym); }, + [&] { P.appendText(", "); }); if (UsedSymbolNames.size() > Front.size()) { P.appendText(" and "); P.appendText(std::to_string(UsedSymbolNames.size() - Front.size())); diff --git a/clang-tools-extra/clangd/unittests/HoverTests.cpp b/clang-tools-extra/clangd/unittests/HoverTests.cpp index f95c947559936..135fdfc4c23bc 100644 --- a/clang-tools-extra/clangd/unittests/HoverTests.cpp +++ b/clang-tools-extra/clangd/unittests/HoverTests.cpp @@ -3052,6 +3052,7 @@ TEST(Hover, UsedSymbols) { } Cases[] = {{R"cpp( #include ^"bar.h" int fstBar = bar1(); + int another= bar1(0); int sndBar = bar2(); Bar bar; int macroBar = BAR; @@ -3075,6 +3076,7 @@ TEST(Hover, UsedSymbols) { #define BAR 5 int bar1(); int bar2(); + int bar1(double); class Bar {}; )cpp"); TU.AdditionalFiles["system/vector"] = guard(R"cpp( @@ -3487,11 +3489,11 @@ int foo = 3)", }, {[](HoverInfo &HI) { HI.Name = "foo.h"; - HI.UsedSymbolNames = {"Foo", "Bar", "Baz"}; + HI.UsedSymbolNames = {"Foo", "Bar", "Bar"}; }, R"(foo.h -provides Foo, Bar, Baz)"}, +provides Foo, Bar, Bar)"}, {[](HoverInfo &HI) { HI.Name = "foo.h"; HI.UsedSymbolNames = {"Foo", "Bar", "Baz", "Foobar", "Qux", "Quux"}; _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits