From b931845ad096096dd6a1747ee4fb91db428b876b Mon Sep 17 00:00:00 2001 From: Bartek Kryza Date: Sat, 22 Jan 2022 23:35:46 +0100 Subject: [PATCH] Fixed relative package diagram generation based on using_namespace --- docs/test_cases/t30001.md | 5 ++-- docs/test_cases/t30001_package.png | Bin 13198 -> 9010 bytes .../plantuml/package_diagram_generator.cc | 13 ++++------ .../visitor/translation_unit_visitor.cc | 23 +++++++++++++----- src/util/util.h | 9 +++++++ 5 files changed, 33 insertions(+), 17 deletions(-) diff --git a/docs/test_cases/t30001.md b/docs/test_cases/t30001.md index 8ebf3588..87bf01a4 100644 --- a/docs/test_cases/t30001.md +++ b/docs/test_cases/t30001.md @@ -25,7 +25,6 @@ diagrams: ## Source code File t30001.cc ```cpp - namespace clanguml { namespace t30001 { namespace A { @@ -48,8 +47,8 @@ namespace BBB { namespace BB { } // namespace BB } // namespace B -} -} +} // namespace t30001 +} // namespace clanguml ``` ## Generated UML diagrams diff --git a/docs/test_cases/t30001_package.png b/docs/test_cases/t30001_package.png index 4fcac29d30814b4243446ca10c6ecd4aba9bc4d3..3b1bb436fa4aefae99ee77800a1e5157ea17f803 100644 GIT binary patch literal 9010 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 diff --git a/src/package_diagram/generators/plantuml/package_diagram_generator.cc b/src/package_diagram/generators/plantuml/package_diagram_generator.cc index 6aa4b146..7545466e 100644 --- a/src/package_diagram/generators/plantuml/package_diagram_generator.cc +++ b/src/package_diagram/generators/plantuml/package_diagram_generator.cc @@ -1,5 +1,5 @@ /** - * src/class_diagram/generators/plantuml/class_diagram_generator.cc + * src/package_diagram/generators/plantuml/package_diagram_generator.cc * * Copyright (c) 2021-2022 Bartek Kryza * @@ -79,7 +79,8 @@ std::string generator::name(relationship_t r) const } } -void generator::generate(const package &p, std::ostream &ostr) const +void generator::generate( + const package &p, std::ostream &ostr) const { const auto uns = m_config.using_namespace; @@ -143,12 +144,8 @@ void generator::generate(std::ostream &ostr) const std::string note{b}; std::tuple alias_match; while (util::find_element_alias(note, alias_match)) { - auto full_name = - fmt::format("{}::{}", fmt::join(m_config.using_namespace, "::"), - ns_relative( - m_config.using_namespace, std::get<0>(alias_match))); - - auto alias = m_model.to_alias(full_name); + auto alias = m_model.to_alias(ns_relative( + m_config.using_namespace, std::get<0>(alias_match))); note.replace( std::get<1>(alias_match), std::get<2>(alias_match), alias); } diff --git a/src/package_diagram/visitor/translation_unit_visitor.cc b/src/package_diagram/visitor/translation_unit_visitor.cc index 2c5b660e..6a8c428b 100644 --- a/src/package_diagram/visitor/translation_unit_visitor.cc +++ b/src/package_diagram/visitor/translation_unit_visitor.cc @@ -90,12 +90,23 @@ void translation_unit_visitor::operator()(const cppast::cpp_entity &file) if (!ns_declaration.is_anonymous() && !ns_declaration.is_inline()) { - auto p = std::make_unique( - ctx.config().using_namespace); - p->set_name(e.name()); - p->set_namespace(ctx.get_namespace()); - ctx.diagram().add_package( - ctx.get_namespace(), std::move(p)); + auto package_path = ctx.get_namespace(); + package_path.push_back(e.name()); + + auto usn = + util::split(ctx.config().using_namespace[0], "::"); + + if (!starts_with(usn, package_path)) { + auto p = std::make_unique( + ctx.config().using_namespace); + remove_prefix(package_path, usn); + package_path.pop_back(); + + p->set_name(e.name()); + p->set_namespace(package_path); + ctx.diagram().add_package( + package_path, std::move(p)); + } ctx.push_namespace(e.name()); } diff --git a/src/util/util.h b/src/util/util.h index f773823a..da9f2544 100644 --- a/src/util/util.h +++ b/src/util/util.h @@ -145,4 +145,13 @@ bool starts_with(const std::vector &col, const std::vector &prefix) return std::vector(prefix.begin(), prefix.end()) == std::vector(col.begin(), col.begin() + prefix.size()); } + +template +void remove_prefix(std::vector &col, const std::vector &prefix) +{ + if(!starts_with(col, prefix)) + return; + + col = std::vector(col.begin()+prefix.size(), col.end()); +} }