Added option to exclude dependencies from template arguments (Fixes #141)

This commit is contained in:
Bartek Kryza
2023-08-02 00:04:11 +02:00
parent c119a622fa
commit f6efb7941f
12 changed files with 67 additions and 14 deletions

View File

@@ -616,7 +616,7 @@ bool template_builder::find_relationships_in_unexposed_template_params(
}
auto element_opt = diagram().get(type_with_namespace.value().to_string());
if (element_opt) {
if (config_.generate_template_argument_dependencies() && element_opt) {
relationships.emplace_back(
element_opt.value().id(), relationship_t::kDependency);
found = true;
@@ -1035,16 +1035,19 @@ template_builder::try_as_template_specialization_type(
if (nested_template_instantiation &&
diagram().should_include(
namespace_{nested_template_instantiation_full_name})) {
if (diagram().should_include(
namespace_{template_decl->getQualifiedNameAsString()})) {
template_instantiation.add_relationship(
{relationship_t::kDependency,
nested_template_instantiation->id()});
}
else {
if (parent.has_value())
parent.value()->add_relationship({relationship_t::kDependency,
nested_template_instantiation->id()});
if (config_.generate_template_argument_dependencies()) {
if (diagram().should_include(
namespace_{template_decl->getQualifiedNameAsString()})) {
template_instantiation.add_relationship(
{relationship_t::kDependency,
nested_template_instantiation->id()});
}
else {
if (parent.has_value())
parent.value()->add_relationship(
{relationship_t::kDependency,
nested_template_instantiation->id()});
}
}
}
@@ -1159,7 +1162,8 @@ std::optional<template_parameter> template_builder::try_as_record_type(
template_instantiation.add_relationship(std::move(r));
}
if (diagram().should_include(tag_argument->get_namespace())) {
if (config_.generate_template_argument_dependencies() &&
diagram().should_include(tag_argument->get_namespace())) {
if (parent.has_value())
parent.value()->add_relationship(
{relationship_t::kDependency, tag_argument->id()});
@@ -1170,7 +1174,8 @@ std::optional<template_parameter> template_builder::try_as_record_type(
}
else if (const auto *record_type_decl = record_type->getAsRecordDecl();
record_type_decl != nullptr) {
if (diagram().should_include(namespace_{type_name})) {
if (config_.generate_template_argument_dependencies() &&
diagram().should_include(namespace_{type_name})) {
// Add dependency relationship to the parent
// template
template_instantiation.add_relationship(
@@ -1200,7 +1205,8 @@ std::optional<template_parameter> template_builder::try_as_enum_type(
const auto type_id = common::to_id(type_name);
argument.set_id(type_id);
if (enum_type->getAsTagDecl() != nullptr) {
if (enum_type->getAsTagDecl() != nullptr &&
config_.generate_template_argument_dependencies()) {
template_instantiation.add_relationship(
{relationship_t::kDependency, type_id});
}

View File

@@ -184,7 +184,11 @@ void inheritable_diagram_options::inherit(
puml.override(parent.puml);
generate_method_arguments.override(parent.generate_method_arguments);
generate_packages.override(parent.generate_packages);
generate_template_argument_dependencies.override(
parent.generate_template_argument_dependencies);
package_type.override(parent.package_type);
generate_template_argument_dependencies.override(
parent.generate_template_argument_dependencies);
generate_links.override(parent.generate_links);
generate_system_headers.override(parent.generate_system_headers);
git.override(parent.git);

View File

@@ -438,6 +438,8 @@ struct inheritable_diagram_options {
option<bool> generate_packages{"generate_packages", false};
option<package_type_t> package_type{
"package_type", package_type_t::kNamespace};
option<bool> generate_template_argument_dependencies{
"generate_template_argument_dependencies", true};
option<generate_links_config> generate_links{"generate_links"};
option<git_config> git{"git"};
option<layout_hints> layout{"layout"};

View File

@@ -159,6 +159,7 @@ types:
generate_method_arguments: !optional generate_method_arguments_t
generate_packages: !optional bool
package_type: !optional package_type_t
generate_template_argument_dependencies: !optional bool
member_order: !optional member_order_t
group_methods: !optional bool
type_aliases: !optional map_t<string;string>
@@ -290,6 +291,7 @@ root:
generate_packages: !optional bool
group_methods: !optional bool
package_type: !optional package_type_t
generate_template_argument_dependencies: !optional bool
)";
} // namespace clanguml::config

View File

@@ -551,6 +551,7 @@ template <> struct convert<class_diagram> {
get_option(node, rhs.member_order);
get_option(node, rhs.generate_packages);
get_option(node, rhs.package_type);
get_option(node, rhs.generate_template_argument_dependencies);
get_option(node, rhs.relationship_hints);
get_option(node, rhs.type_aliases);
get_option(node, rhs.relative_to);
@@ -755,6 +756,7 @@ template <> struct convert<config> {
get_option(node, rhs.generate_method_arguments);
get_option(node, rhs.generate_packages);
get_option(node, rhs.package_type);
get_option(node, rhs.generate_template_argument_dependencies);
get_option(node, rhs.generate_links);
get_option(node, rhs.generate_system_headers);
get_option(node, rhs.git);

View File

@@ -312,6 +312,7 @@ YAML::Emitter &operator<<(
}
out << c.member_order;
out << c.package_type;
out << c.generate_template_argument_dependencies;
}
else if (dynamic_cast<const sequence_diagram *>(&c) != nullptr) {
out << c.combine_free_functions_into_file_participants;