Added generate_method_arguments handling in class diagram generator

This commit is contained in:
Bartek Kryza
2022-02-06 18:37:48 +01:00
parent 786ecbdd1d
commit fcfe2bcab2
4 changed files with 44 additions and 2 deletions

View File

@@ -150,13 +150,19 @@ void generator::generate(const class_ &c, std::ostream &ostr) const
ostr << to_string(m.scope()) << m.name(); ostr << to_string(m.scope()) << m.name();
ostr << "("; ostr << "(";
if (true) { // TODO: add option to disable parameter generation if (m_config.generate_method_arguments() !=
config::method_arguments::none) {
std::vector<std::string> params; std::vector<std::string> params;
std::transform(m.parameters().cbegin(), m.parameters().cend(), std::transform(m.parameters().cbegin(), m.parameters().cend(),
std::back_inserter(params), [this](const auto &mp) { std::back_inserter(params), [this](const auto &mp) {
return mp.to_string(m_config.using_namespace()); return mp.to_string(m_config.using_namespace());
}); });
ostr << fmt::format("{}", fmt::join(params, ", ")); auto args_string = fmt::format("{}", fmt::join(params, ", "));
if (m_config.generate_method_arguments() !=
config::method_arguments::abbreviated) {
args_string = clanguml::util::abbreviate(args_string, 10);
}
ostr << args_string;
} }
ostr << ")"; ostr << ")";

View File

@@ -109,6 +109,22 @@ std::string unqualify(const std::string &s)
return fmt::format("{}", fmt::join(toks, " ")); return fmt::format("{}", fmt::join(toks, " "));
} }
std::string abbreviate(const std::string &s, const unsigned int max_length)
{
if (s.size() <= max_length)
return s;
auto res = s;
res.resize(max_length);
if (res.size() > 3) {
res.replace(res.size() - 3, 3, 3, '.');
}
return res;
}
bool find_element_alias( bool find_element_alias(
const std::string &input, std::tuple<std::string, size_t, size_t> &result) const std::string &input, std::tuple<std::string, size_t, size_t> &result)
{ {

View File

@@ -94,6 +94,16 @@ std::string ns_relative(
*/ */
std::string unqualify(const std::string &s); std::string unqualify(const std::string &s);
/**
* @brief Abbreviate string to max_length, and replace last 3 characters
* with ellipsis.
*
* @param s Input string
* @param max_length Maximum length
* @return Abbreviated string
*/
std::string abbreviate(const std::string &s, const unsigned int max_length);
/** /**
* @brief Find element alias in Puml note * @brief Find element alias in Puml note
* *

View File

@@ -47,6 +47,16 @@ TEST_CASE("Test ns_relative", "[unit-test]")
CHECK(ns_relative({"clanguml::t0"}, "clanguml::t0") == "t0"); CHECK(ns_relative({"clanguml::t0"}, "clanguml::t0") == "t0");
} }
TEST_CASE("Test abbreviate", "[unit-test]")
{
using namespace clanguml::util;
CHECK(abbreviate("", 10) == "");
CHECK(abbreviate("abcd", 10) == "abcd");
CHECK(abbreviate("abcd", 2) == "ab");
CHECK(abbreviate("abcdefg", 5) == "ab...");
}
TEST_CASE("Test replace_all", "[unit-test]") TEST_CASE("Test replace_all", "[unit-test]")
{ {
using namespace clanguml::util; using namespace clanguml::util;