lh123 updated this revision to Diff 390143. lh123 added a comment. address comment.
Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D114621/new/ https://reviews.llvm.org/D114621 Files: clang-tools-extra/clangd/Hover.cpp 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 @@ -2680,6 +2680,32 @@ // In cls<int> 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) { Index: clang-tools-extra/clangd/Hover.cpp =================================================================== --- clang-tools-extra/clangd/Hover.cpp +++ clang-tools-extra/clangd/Hover.cpp @@ -1051,27 +1051,29 @@ Output.addRuler(); // Print Types on their own lines to reduce chances of getting line-wrapped by // editor, as they might be long. - if (ReturnType) { + if (ReturnType) // For functions we display signature in a list form, e.g.: // → `x` // Parameters: // - `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())); - } + + 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 (Type && !ReturnType && !Parameters) + // Don't print Type after Parameters or ReturnType + Output.addParagraph().appendText("Type: ").appendCode(*Type); + if (Value) { markup::Paragraph &P = Output.addParagraph(); P.appendText("Value = ");
Index: clang-tools-extra/clangd/unittests/HoverTests.cpp =================================================================== --- clang-tools-extra/clangd/unittests/HoverTests.cpp +++ clang-tools-extra/clangd/unittests/HoverTests.cpp @@ -2680,6 +2680,32 @@ // In cls<int> 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) { Index: clang-tools-extra/clangd/Hover.cpp =================================================================== --- clang-tools-extra/clangd/Hover.cpp +++ clang-tools-extra/clangd/Hover.cpp @@ -1051,27 +1051,29 @@ Output.addRuler(); // Print Types on their own lines to reduce chances of getting line-wrapped by // editor, as they might be long. - if (ReturnType) { + if (ReturnType) // For functions we display signature in a list form, e.g.: // â `x` // Parameters: // - `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())); - } + + 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 (Type && !ReturnType && !Parameters) + // Don't print Type after Parameters or ReturnType + Output.addParagraph().appendText("Type: ").appendCode(*Type); + if (Value) { markup::Paragraph &P = Output.addParagraph(); P.appendText("Value = ");
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits