From 7bb785cc339b0ea268e388c570c9a0cd78f136c8 Mon Sep 17 00:00:00 2001 From: lh123 <1585086582@qq.com> Date: Fri, 3 Dec 2021 12:32:11 +0800 Subject: [PATCH] [clangd] Show parameters for construct. Show parameters for construct. Reviewed By: kadircet Differential Revision: https://reviews.llvm.org/D114621 --- clang-tools-extra/clangd/Hover.cpp | 28 +++++++++++-------- .../clangd/unittests/HoverTests.cpp | 26 +++++++++++++++++ 2 files changed, 42 insertions(+), 12 deletions(-) diff --git a/clang-tools-extra/clangd/Hover.cpp b/clang-tools-extra/clangd/Hover.cpp index faea812712ab..76e9f4d243b9 100644 --- a/clang-tools-extra/clangd/Hover.cpp +++ b/clang-tools-extra/clangd/Hover.cpp @@ -1058,20 +1058,24 @@ markup::Document HoverInfo::present() const { // - `bool param1` // - `int param2 = 5` Output.addParagraph().appendText("→ ").appendCode(*ReturnType); - if (Parameters && !Parameters->empty()) { - Output.addParagraph().appendText("Parameters: "); - markup::BulletList &L = Output.addBulletList(); - for (const auto &Param : *Parameters) { - std::string Buffer; - llvm::raw_string_ostream OS(Buffer); - OS << Param; - L.addItem().addParagraph().appendCode(std::move(OS.str())); - } - } - } else if (Type) { - Output.addParagraph().appendText("Type: ").appendCode(*Type); } + if (Parameters && !Parameters->empty()) { + Output.addParagraph().appendText("Parameters: "); + markup::BulletList &L = Output.addBulletList(); + for (const auto &Param : *Parameters) { + std::string Buffer; + llvm::raw_string_ostream OS(Buffer); + OS << Param; + L.addItem().addParagraph().appendCode(std::move(OS.str())); + } + } + + // Don't print Type after Parameters or ReturnType as this will just duplicate + // the information + if (Type && !ReturnType && !Parameters) + Output.addParagraph().appendText("Type: ").appendCode(*Type); + if (Value) { markup::Paragraph &P = Output.addParagraph(); P.appendText("Value = "); diff --git a/clang-tools-extra/clangd/unittests/HoverTests.cpp b/clang-tools-extra/clangd/unittests/HoverTests.cpp index 79510ceefa1b..0d71dcbf8a93 100644 --- a/clang-tools-extra/clangd/unittests/HoverTests.cpp +++ b/clang-tools-extra/clangd/unittests/HoverTests.cpp @@ -2680,6 +2680,32 @@ public: def)", // In cls protected: int method())", + }, + { + [](HoverInfo &HI) { + HI.Definition = "cls(int a, int b = 5)"; + HI.AccessSpecifier = "public"; + HI.Kind = index::SymbolKind::Constructor; + HI.NamespaceScope = ""; + HI.LocalScope = "cls"; + HI.Name = "cls"; + HI.Parameters.emplace(); + HI.Parameters->emplace_back(); + HI.Parameters->back().Type = "int"; + HI.Parameters->back().Name = "a"; + HI.Parameters->emplace_back(); + HI.Parameters->back().Type = "int"; + HI.Parameters->back().Name = "b"; + HI.Parameters->back().Default = "5"; + }, + R"(constructor cls + +Parameters: +- int a +- int b = 5 + +// In cls +public: cls(int a, int b = 5))", }, { [](HoverInfo &HI) {