Added PlantUML links generation in class diagrams

This commit is contained in:
Bartek Kryza
2022-03-20 22:57:17 +01:00
parent 3c30350edc
commit d7e27841bc
15 changed files with 351 additions and 14 deletions

View File

@@ -32,6 +32,19 @@ config load(const std::string &config_file)
doc.force_insert(
"__parent_path", config_file_path.parent_path().string());
// If the current directory is also a git repository,
// load some config values which can be included in the
// generated diagrams
if(util::is_git_repository() && !doc["git"]) {
YAML::Node git_config{YAML::NodeType::Map};
git_config["branch"] = util::get_git_branch();
git_config["revision"] = util::get_git_revision();
git_config["commit"] = util::get_git_commit();
git_config["toplevel"] = util::get_git_toplevel_dir();
doc["git"] = git_config;
}
return doc.as<config>();
}
catch (YAML::BadFile &e) {
@@ -92,6 +105,7 @@ void inheritable_diagram_options::inherit(
puml.override(parent.puml);
generate_method_arguments.override(parent.generate_method_arguments);
generate_links.override(parent.generate_links);
git.override(parent.git);
}
bool diagram::should_include_entities(const std::string &ent)
@@ -277,6 +291,7 @@ using clanguml::config::package_diagram;
using clanguml::config::plantuml;
using clanguml::config::sequence_diagram;
using clanguml::config::source_location;
using clanguml::config::git_config;
inline bool has_key(const YAML::Node &n, const std::string &key)
{
@@ -447,8 +462,33 @@ template <> struct convert<filter> {
template <> struct convert<generate_links_config> {
static bool decode(const Node &node, generate_links_config &rhs)
{
if (node["prefix"])
rhs.prefix = node["prefix"].as<decltype(rhs.prefix)>();
if (node["link"])
rhs.link = node["link"].as<decltype(rhs.link)>();
if (node["tooltip"])
rhs.tooltip = node["tooltip"].as<decltype(rhs.tooltip)>();
return true;
}
};
//
// git_config Yaml decoder
//
template <> struct convert<git_config> {
static bool decode(const Node &node, git_config &rhs)
{
if (node["branch"])
rhs.branch = node["branch"].as<decltype(rhs.branch)>();
if (node["revision"])
rhs.revision = node["revision"].as<decltype(rhs.revision)>();
if (node["commit"])
rhs.commit = node["commit"].as<decltype(rhs.commit)>();
if (node["toplevel"])
rhs.toplevel = node["toplevel"].as<decltype(rhs.toplevel)>();
return true;
}
@@ -461,6 +501,8 @@ template <typename T> bool decode_diagram(const Node &node, T &rhs)
get_option(node, rhs.include);
get_option(node, rhs.exclude);
get_option(node, rhs.puml);
get_option(node, rhs.git);
get_option(node, rhs.generate_links);
return true;
}
@@ -479,7 +521,6 @@ template <> struct convert<class_diagram> {
get_option(node, rhs.include_relations_also_as_members);
get_option(node, rhs.generate_method_arguments);
get_option(node, rhs.generate_packages);
get_option(node, rhs.generate_links);
return true;
}
@@ -495,7 +536,6 @@ template <> struct convert<sequence_diagram> {
return false;
get_option(node, rhs.start_from);
get_option(node, rhs.generate_links);
return true;
}
@@ -511,7 +551,6 @@ template <> struct convert<package_diagram> {
return false;
get_option(node, rhs.layout);
get_option(node, rhs.generate_links);
return true;
}
@@ -564,6 +603,7 @@ template <> struct convert<config> {
get_option(node, rhs.generate_method_arguments);
get_option(node, rhs.generate_packages);
get_option(node, rhs.generate_links);
get_option(node, rhs.git);
auto diagrams = node["diagrams"];