Added include! directive to config files allowing nesting diagram configs
This commit is contained in:
120
.clang-uml
120
.clang-uml
@@ -2,122 +2,18 @@ compilation_database_dir: debug
|
||||
output_directory: docs/diagrams
|
||||
diagrams:
|
||||
main_package:
|
||||
type: package
|
||||
glob:
|
||||
- src/**/*.h
|
||||
- src/**/*.cc
|
||||
include:
|
||||
namespaces:
|
||||
- clanguml
|
||||
using_namespace:
|
||||
- clanguml
|
||||
plantuml:
|
||||
before:
|
||||
- 'title clang-uml namespaces'
|
||||
include!: uml/main_package_diagram.yml
|
||||
config_class:
|
||||
type: class
|
||||
include_relations_also_as_members: false
|
||||
glob:
|
||||
- src/config/config.h
|
||||
- src/config/config.cc
|
||||
include:
|
||||
namespaces:
|
||||
- clanguml::config
|
||||
using_namespace:
|
||||
- clanguml::config
|
||||
plantuml:
|
||||
before:
|
||||
- 'title clang-uml configuration model'
|
||||
include!: uml/config_class_diagram.yml
|
||||
decorators_class:
|
||||
type: class
|
||||
include_relations_also_as_members: false
|
||||
glob:
|
||||
- src/decorators/decorators.h
|
||||
- src/decorators/decorators.cc
|
||||
include:
|
||||
namespaces:
|
||||
- clanguml::decorators
|
||||
using_namespace:
|
||||
- clanguml::decorators
|
||||
plantuml:
|
||||
before:
|
||||
- 'title clang-uml decorators model'
|
||||
include!: uml/decorators_class_diagram.yml
|
||||
common_model_class:
|
||||
type: class
|
||||
include_relations_also_as_members: false
|
||||
glob:
|
||||
- src/common/model/*.h
|
||||
- src/common/model/*.cc
|
||||
include:
|
||||
namespaces:
|
||||
- clanguml::common::model
|
||||
using_namespace:
|
||||
- clanguml::common::model
|
||||
plantuml:
|
||||
before:
|
||||
- 'title clang-uml common diagram model'
|
||||
include!: uml/common_model_class_diagram.yml
|
||||
class_model_class:
|
||||
type: class
|
||||
include_relations_also_as_members: false
|
||||
glob:
|
||||
- src/class_diagram/model/*.h
|
||||
- src/class_diagram/model/*.cc
|
||||
include:
|
||||
namespaces:
|
||||
- clanguml::class_diagram::model
|
||||
using_namespace:
|
||||
- clanguml::class_diagram::model
|
||||
plantuml:
|
||||
before:
|
||||
- 'title clang-uml class diagram model'
|
||||
include!: uml/class_model_class_diagram.yml
|
||||
sequence_model_class:
|
||||
type: class
|
||||
include_relations_also_as_members: false
|
||||
glob:
|
||||
- src/sequence_diagram/model/*.h
|
||||
- src/sequence_diagram/model/*.cc
|
||||
include:
|
||||
namespaces:
|
||||
- clanguml::sequence_diagram::model
|
||||
using_namespace:
|
||||
- clanguml::sequence_diagram::model
|
||||
plantuml:
|
||||
before:
|
||||
- 'title clang-uml sequence diagram model'
|
||||
include!: uml/sequence_model_class_diagram.yml
|
||||
package_model_class:
|
||||
type: class
|
||||
include_relations_also_as_members: false
|
||||
glob:
|
||||
- src/package_diagram/model/*.h
|
||||
- src/package_diagram/model/*.cc
|
||||
include:
|
||||
namespaces:
|
||||
- clanguml::package_diagram::model
|
||||
using_namespace:
|
||||
- clanguml::package_diagram::model
|
||||
plantuml:
|
||||
before:
|
||||
- 'title clang-uml package diagram model'
|
||||
include!: uml/package_model_class_diagram.yml
|
||||
diagram_model_class:
|
||||
type: class
|
||||
include_relations_also_as_members: false
|
||||
glob:
|
||||
- src/common/model/*.h
|
||||
- src/common/model/*.cc
|
||||
- src/class_diagram/model/*.h
|
||||
- src/class_diagram/model/*.cc
|
||||
- src/sequence_diagram/model/*.h
|
||||
- src/sequence_diagram/model/*.cc
|
||||
- src/package_diagram/model/*.h
|
||||
- src/package_diagram/model/*.cc
|
||||
include:
|
||||
namespaces:
|
||||
- clanguml::common::model
|
||||
- clanguml::class_diagram::model
|
||||
- clanguml::sequence_diagram::model
|
||||
- clanguml::package_diagram::model
|
||||
using_namespace:
|
||||
- clanguml
|
||||
plantuml:
|
||||
before:
|
||||
- 'title clang-uml diagram model'
|
||||
include!: uml/diagram_model_class_diagram.yml
|
||||
@@ -1,39 +0,0 @@
|
||||
compilation_database_dir: build
|
||||
output_directory: puml
|
||||
diagrams:
|
||||
myproject_class:
|
||||
type: class
|
||||
glob:
|
||||
- src/**.h
|
||||
- src/**.cc
|
||||
using_namespace:
|
||||
- myproject
|
||||
include:
|
||||
namespaces:
|
||||
- myproject
|
||||
exclude:
|
||||
namespaces:
|
||||
- myproject::detail
|
||||
plantuml:
|
||||
after:
|
||||
- 'note left of @A(MyProjectMain) : Main class of myproject library.'
|
||||
main_sequence_diagram:
|
||||
type: sequence
|
||||
glob:
|
||||
- src/main.cc
|
||||
using_namespace:
|
||||
- ""
|
||||
start_from:
|
||||
- function: "main()"
|
||||
include:
|
||||
namespaces:
|
||||
- clanguml
|
||||
exclude:
|
||||
namespaces:
|
||||
- std
|
||||
- CLI
|
||||
plantuml:
|
||||
before:
|
||||
- "' main test sequence diagram"
|
||||
after:
|
||||
- "' end"
|
||||
@@ -22,9 +22,19 @@ namespace config {
|
||||
|
||||
config load(const std::string &config_file)
|
||||
{
|
||||
try {
|
||||
YAML::Node doc = YAML::LoadFile(config_file);
|
||||
|
||||
return doc.as<config>();
|
||||
}
|
||||
catch (YAML::BadFile &e) {
|
||||
throw std::runtime_error(fmt::format(
|
||||
"Could not open config file {}: {}", config_file, e.what()));
|
||||
}
|
||||
catch (YAML::Exception &e) {
|
||||
throw std::runtime_error(fmt::format(
|
||||
"Cannot parse YAML file {}: {}", config_file, e.what()));
|
||||
}
|
||||
}
|
||||
|
||||
std::string to_string(const diagram_type t)
|
||||
@@ -321,6 +331,34 @@ template <> struct convert<package_diagram> {
|
||||
}
|
||||
};
|
||||
|
||||
std::shared_ptr<clanguml::config::diagram> parse_diagram_config(const Node &d)
|
||||
{
|
||||
const auto diagram_type = d["type"].as<std::string>();
|
||||
|
||||
if (diagram_type == "class") {
|
||||
return std::make_shared<class_diagram>(d.as<class_diagram>());
|
||||
}
|
||||
else if (diagram_type == "sequence") {
|
||||
return std::make_shared<sequence_diagram>(d.as<sequence_diagram>());
|
||||
}
|
||||
else if (diagram_type == "package") {
|
||||
return std::make_shared<package_diagram>(d.as<package_diagram>());
|
||||
}
|
||||
|
||||
LOG_WARN("Diagrams of type {} are not supported... ", diagram_type);
|
||||
|
||||
return {};
|
||||
}
|
||||
|
||||
inline bool has_key(const YAML::Node &n, const std::string &key)
|
||||
{
|
||||
assert(n.Type() == NodeType::Map);
|
||||
|
||||
return std::count_if(n.begin(), n.end(), [&key](auto &&n) {
|
||||
return n.first.template as<std::string>() == key;
|
||||
}) > 0;
|
||||
}
|
||||
|
||||
//
|
||||
// config Yaml decoder
|
||||
//
|
||||
@@ -342,26 +380,23 @@ template <> struct convert<config> {
|
||||
assert(diagrams.Type() == NodeType::Map);
|
||||
|
||||
for (const auto &d : diagrams) {
|
||||
const auto diagram_type = d.second["type"].as<std::string>();
|
||||
auto name = d.first.as<std::string>();
|
||||
if (diagram_type == "class") {
|
||||
rhs.diagrams[name] = std::make_shared<class_diagram>(
|
||||
d.second.as<class_diagram>());
|
||||
}
|
||||
else if (diagram_type == "sequence") {
|
||||
rhs.diagrams[name] = std::make_shared<sequence_diagram>(
|
||||
d.second.as<sequence_diagram>());
|
||||
}
|
||||
else if (diagram_type == "package") {
|
||||
rhs.diagrams[name] = std::make_shared<package_diagram>(
|
||||
d.second.as<package_diagram>());
|
||||
std::shared_ptr<clanguml::config::diagram> diagram_config;
|
||||
|
||||
if (has_key(d.second, "include!")) {
|
||||
YAML::Node node =
|
||||
YAML::LoadFile(d.second["include!"].as<std::string>());
|
||||
|
||||
diagram_config = parse_diagram_config(node);
|
||||
}
|
||||
else {
|
||||
LOG_WARN(
|
||||
"Diagrams of type {} are not supported at the moment... ",
|
||||
diagram_type);
|
||||
diagram_config = parse_diagram_config(d.second);
|
||||
}
|
||||
|
||||
if (diagram_config) {
|
||||
diagram_config->name = name;
|
||||
rhs.diagrams[name] = diagram_config;
|
||||
}
|
||||
rhs.diagrams[name]->name = name;
|
||||
}
|
||||
|
||||
return true;
|
||||
|
||||
@@ -74,7 +74,14 @@ int main(int argc, const char *argv[])
|
||||
|
||||
LOG_INFO("Loading clang-uml config from {}", config_path);
|
||||
|
||||
auto config = clanguml::config::load(config_path);
|
||||
clanguml::config::config config;
|
||||
try {
|
||||
config = clanguml::config::load(config_path);
|
||||
}
|
||||
catch (std::runtime_error &e) {
|
||||
LOG_ERROR(e.what());
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (list_diagrams) {
|
||||
print_diagrams_list(config);
|
||||
|
||||
@@ -181,9 +181,10 @@ bool contains(const T &container, const E &element)
|
||||
container.end();
|
||||
}
|
||||
else {
|
||||
return std::find(container.cbegin(), container.cend(), element) !=
|
||||
container.cend();
|
||||
return std::find(container.begin(), container.end(), element) !=
|
||||
container.end();
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace util
|
||||
} // namespace clanguml
|
||||
13
uml/class_model_class_diagram.yml
Normal file
13
uml/class_model_class_diagram.yml
Normal file
@@ -0,0 +1,13 @@
|
||||
type: class
|
||||
include_relations_also_as_members: false
|
||||
glob:
|
||||
- src/class_diagram/model/*.h
|
||||
- src/class_diagram/model/*.cc
|
||||
include:
|
||||
namespaces:
|
||||
- clanguml::class_diagram::model
|
||||
using_namespace:
|
||||
- clanguml::class_diagram::model
|
||||
plantuml:
|
||||
before:
|
||||
- 'title clang-uml class diagram model'
|
||||
13
uml/common_model_class_diagram.yml
Normal file
13
uml/common_model_class_diagram.yml
Normal file
@@ -0,0 +1,13 @@
|
||||
type: class
|
||||
include_relations_also_as_members: false
|
||||
glob:
|
||||
- src/common/model/*.h
|
||||
- src/common/model/*.cc
|
||||
include:
|
||||
namespaces:
|
||||
- clanguml::common::model
|
||||
using_namespace:
|
||||
- clanguml::common::model
|
||||
plantuml:
|
||||
before:
|
||||
- 'title clang-uml common diagram model'
|
||||
13
uml/config_class_diagram.yml
Normal file
13
uml/config_class_diagram.yml
Normal file
@@ -0,0 +1,13 @@
|
||||
type: class
|
||||
include_relations_also_as_members: false
|
||||
glob:
|
||||
- src/config/config.h
|
||||
- src/config/config.cc
|
||||
include:
|
||||
namespaces:
|
||||
- clanguml::config
|
||||
using_namespace:
|
||||
- clanguml::config
|
||||
plantuml:
|
||||
before:
|
||||
- 'title clang-uml configuration model'
|
||||
13
uml/decorators_class_diagram.yml
Normal file
13
uml/decorators_class_diagram.yml
Normal file
@@ -0,0 +1,13 @@
|
||||
type: class
|
||||
include_relations_also_as_members: false
|
||||
glob:
|
||||
- src/decorators/decorators.h
|
||||
- src/decorators/decorators.cc
|
||||
include:
|
||||
namespaces:
|
||||
- clanguml::decorators
|
||||
using_namespace:
|
||||
- clanguml::decorators
|
||||
plantuml:
|
||||
before:
|
||||
- 'title clang-uml decorators model'
|
||||
22
uml/diagram_model_class_diagram.yml
Normal file
22
uml/diagram_model_class_diagram.yml
Normal file
@@ -0,0 +1,22 @@
|
||||
type: class
|
||||
include_relations_also_as_members: false
|
||||
glob:
|
||||
- src/common/model/*.h
|
||||
- src/common/model/*.cc
|
||||
- src/class_diagram/model/*.h
|
||||
- src/class_diagram/model/*.cc
|
||||
- src/sequence_diagram/model/*.h
|
||||
- src/sequence_diagram/model/*.cc
|
||||
- src/package_diagram/model/*.h
|
||||
- src/package_diagram/model/*.cc
|
||||
include:
|
||||
namespaces:
|
||||
- clanguml::common::model
|
||||
- clanguml::class_diagram::model
|
||||
- clanguml::sequence_diagram::model
|
||||
- clanguml::package_diagram::model
|
||||
using_namespace:
|
||||
- clanguml
|
||||
plantuml:
|
||||
before:
|
||||
- 'title clang-uml diagram model'
|
||||
12
uml/main_package_diagram.yml
Normal file
12
uml/main_package_diagram.yml
Normal file
@@ -0,0 +1,12 @@
|
||||
type: package
|
||||
glob:
|
||||
- src/**/*.h
|
||||
- src/**/*.cc
|
||||
include:
|
||||
namespaces:
|
||||
- clanguml
|
||||
using_namespace:
|
||||
- clanguml
|
||||
plantuml:
|
||||
before:
|
||||
- 'title clang-uml namespaces'
|
||||
13
uml/package_model_class_diagram.yml
Normal file
13
uml/package_model_class_diagram.yml
Normal file
@@ -0,0 +1,13 @@
|
||||
type: class
|
||||
include_relations_also_as_members: false
|
||||
glob:
|
||||
- src/package_diagram/model/*.h
|
||||
- src/package_diagram/model/*.cc
|
||||
include:
|
||||
namespaces:
|
||||
- clanguml::package_diagram::model
|
||||
using_namespace:
|
||||
- clanguml::package_diagram::model
|
||||
plantuml:
|
||||
before:
|
||||
- 'title clang-uml package diagram model'
|
||||
13
uml/sequence_model_class_diagram.yml
Normal file
13
uml/sequence_model_class_diagram.yml
Normal file
@@ -0,0 +1,13 @@
|
||||
type: class
|
||||
include_relations_also_as_members: false
|
||||
glob:
|
||||
- src/sequence_diagram/model/*.h
|
||||
- src/sequence_diagram/model/*.cc
|
||||
include:
|
||||
namespaces:
|
||||
- clanguml::sequence_diagram::model
|
||||
using_namespace:
|
||||
- clanguml::sequence_diagram::model
|
||||
plantuml:
|
||||
before:
|
||||
- 'title clang-uml sequence diagram model'
|
||||
Reference in New Issue
Block a user