Added comment() function support in package diagrams

This commit is contained in:
Bartek Kryza
2022-04-02 15:47:32 +02:00
parent 2d9f7c88f5
commit ffc6d56c4d
8 changed files with 52 additions and 18 deletions

View File

@@ -37,19 +37,6 @@ std::string package::full_name(bool relative) const
return (get_namespace().relative_to(using_namespace()) | name())
.to_string();
// auto fn = get_namespace();
// auto ns = using_namespace();
//
// if (relative && (fn.size() >= ns.size())) {
// if (fn.starts_with(using_namespace())
// fn = std::vector<std::string>(fn.begin() + ns.size(),
// fn.end());
// }
//
// fn.push_back(name());
//
// return fmt::format("{}", fmt::join(fn, "::"));
}
bool package::is_deprecated() const { return is_deprecated_; }

View File

@@ -48,6 +48,8 @@ public:
void set_deprecated(bool deprecated);
void add_package(std::unique_ptr<common::model::package> &&p);
private:
bool is_deprecated_{false};
};

View File

@@ -28,10 +28,33 @@ common::model::diagram_t diagram::type() const
return common::model::diagram_t::kPackage;
}
void diagram::add_package(std::unique_ptr<common::model::package> &&p)
{
LOG_DBG("Adding package: {}, {}", p->name(), p->full_name(true));
auto ns = p->get_relative_namespace();
packages_.emplace_back(*p);
add_element(ns, std::move(p));
}
type_safe::optional_ref<const common::model::package> diagram::get_package(
const std::string &name) const
{
for (const auto &p : packages_) {
if (p.get().full_name(false) == name) {
return {p};
}
}
return type_safe::nullopt;
}
type_safe::optional_ref<const clanguml::common::model::element> diagram::get(
const std::string &full_name) const
{
return {};
return get_package(full_name);
}
std::string diagram::to_alias(const std::string &full_name) const

View File

@@ -40,9 +40,18 @@ public:
common::model::diagram_t type() const override;
type_safe::optional_ref<const clanguml::common::model::element> get(
type_safe::optional_ref<const common::model::element> get(
const std::string &full_name) const;
void add_package(std::unique_ptr<common::model::package> &&p);
type_safe::optional_ref<const common::model::package> get_package(
const std::string &name) const;
std::string to_alias(const std::string &full_name) const;
private:
std::vector<type_safe::object_ref<const common::model::package, false>>
packages_;
};
}

View File

@@ -106,9 +106,12 @@ void translation_unit_visitor::operator()(const cppast::cpp_entity &file)
p->set_namespace(package_parent);
if (ctx.diagram().should_include(*p)) {
if (ns_declaration.comment().has_value())
if (ns_declaration.comment().has_value()) {
p->set_comment(
ns_declaration.comment().value());
p->add_decorators(decorators::parse(
ns_declaration.comment().value()));
}
p->set_style(p->style_spec());
@@ -123,7 +126,7 @@ void translation_unit_visitor::operator()(const cppast::cpp_entity &file)
if (!p->skip()) {
auto rns = p->get_relative_namespace();
ctx.diagram().add_element(rns, std::move(p));
ctx.diagram().add_package(std::move(p));
ctx.set_current_package(
ctx.diagram().get_element<package>(
package_path));

View File

@@ -18,3 +18,5 @@ diagrams:
- "' t30001 test package diagram"
after:
- 'note right of {{ alias("A::AA::AAA") }}: A AAA note...'
- 'note top of {{ alias("A::AA") }} : {{ comment("A::AA") }}'
- 'note top of {{ alias("B::AA") }} : {{ comment("B::AA") }}'

View File

@@ -1,6 +1,7 @@
namespace clanguml {
namespace t30001 {
namespace A {
/// This is namespace AA in namespace A
namespace AA {
namespace AAA {
} // namespace AAA
@@ -11,6 +12,7 @@ namespace BB {
} // namespace BB
} // namespace A
namespace B {
/// This is namespace AA in namespace B
namespace AA {
namespace AAA {
} // namespace AAA

View File

@@ -42,6 +42,12 @@ TEST_CASE("t30001", "[test-case][package]")
REQUIRE_THAT(puml, IsPackage("AAA"));
REQUIRE_THAT(puml, IsPackage("AAA"));
// TODO: Fix _A() to handle fully qualified names, right
// now it only finds the first element with unqalified
// name match
REQUIRE_THAT(
puml, HasNote(_A("AA"), "top", "This is namespace AA in namespace A"));
save_puml(
"./" + config.output_directory() + "/" + diagram->name + ".puml", puml);
}