mirror of
https://github.com/bkryza/clang-uml.git
synced 2025-05-16 02:32:31 +08:00
Added generate_method_arguments config option
This commit is contained in:
parent
8f35a194e1
commit
786ecbdd1d
@ -3,7 +3,6 @@ BasedOnStyle: WebKit
|
|||||||
BreakConstructorInitializersBeforeComma: true
|
BreakConstructorInitializersBeforeComma: true
|
||||||
ColumnLimit: 80
|
ColumnLimit: 80
|
||||||
Cpp11BracedListStyle: true
|
Cpp11BracedListStyle: true
|
||||||
IndentCaseLabels: true
|
|
||||||
NamespaceIndentation: None
|
NamespaceIndentation: None
|
||||||
PointerBindsToType: false
|
PointerBindsToType: false
|
||||||
Standard: Cpp11
|
Standard: Cpp11
|
||||||
|
@ -67,25 +67,14 @@ void plantuml::append(const plantuml &r)
|
|||||||
void inheritable_diagram_options::inherit(
|
void inheritable_diagram_options::inherit(
|
||||||
const inheritable_diagram_options &parent)
|
const inheritable_diagram_options &parent)
|
||||||
{
|
{
|
||||||
if (!glob.has_value && parent.glob.has_value)
|
glob.override(parent.glob);
|
||||||
glob.append(parent.glob());
|
using_namespace.override(parent.using_namespace);
|
||||||
|
include_relations_also_as_members.override(
|
||||||
if (!using_namespace.has_value && parent.using_namespace.has_value)
|
parent.include_relations_also_as_members);
|
||||||
using_namespace.append(parent.using_namespace());
|
include.override(parent.include);
|
||||||
|
exclude.override(parent.exclude);
|
||||||
if (!include_relations_also_as_members.has_value &&
|
puml.override(parent.puml);
|
||||||
parent.include_relations_also_as_members.has_value)
|
generate_method_arguments.override(parent.generate_method_arguments);
|
||||||
include_relations_also_as_members.append(
|
|
||||||
parent.include_relations_also_as_members());
|
|
||||||
|
|
||||||
if (!include.has_value && parent.include.has_value)
|
|
||||||
include.append(parent.include());
|
|
||||||
|
|
||||||
if (!exclude.has_value && parent.exclude.has_value)
|
|
||||||
exclude.append(parent.exclude());
|
|
||||||
|
|
||||||
if (!puml.has_value && parent.puml.has_value)
|
|
||||||
puml.append(parent.puml());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool diagram::should_include_entities(const std::string &ent)
|
bool diagram::should_include_entities(const std::string &ent)
|
||||||
@ -202,6 +191,7 @@ void append_value<std::vector<std::string>>(
|
|||||||
{
|
{
|
||||||
l.insert(l.end(), r.begin(), r.end());
|
l.insert(l.end(), r.begin(), r.end());
|
||||||
}
|
}
|
||||||
|
|
||||||
template <> void append_value<plantuml>(plantuml &l, const plantuml &r)
|
template <> void append_value<plantuml>(plantuml &l, const plantuml &r)
|
||||||
{
|
{
|
||||||
l.append(r);
|
l.append(r);
|
||||||
@ -214,6 +204,7 @@ using clanguml::common::model::scope_t;
|
|||||||
using clanguml::config::class_diagram;
|
using clanguml::config::class_diagram;
|
||||||
using clanguml::config::config;
|
using clanguml::config::config;
|
||||||
using clanguml::config::filter;
|
using clanguml::config::filter;
|
||||||
|
using clanguml::config::method_arguments;
|
||||||
using clanguml::config::package_diagram;
|
using clanguml::config::package_diagram;
|
||||||
using clanguml::config::plantuml;
|
using clanguml::config::plantuml;
|
||||||
using clanguml::config::sequence_diagram;
|
using clanguml::config::sequence_diagram;
|
||||||
@ -232,7 +223,25 @@ template <typename T>
|
|||||||
void get_option(const Node &node, clanguml::config::option<T> &option)
|
void get_option(const Node &node, clanguml::config::option<T> &option)
|
||||||
{
|
{
|
||||||
if (node[option.name])
|
if (node[option.name])
|
||||||
option.append(node[option.name].template as<T>());
|
option.set(node[option.name].template as<T>());
|
||||||
|
}
|
||||||
|
|
||||||
|
template <>
|
||||||
|
void get_option<method_arguments>(
|
||||||
|
const Node &node, clanguml::config::option<method_arguments> &option)
|
||||||
|
{
|
||||||
|
if (node[option.name]) {
|
||||||
|
const auto &val = node[option.name].as<std::string>();
|
||||||
|
if (val == "full")
|
||||||
|
option.set(method_arguments::full);
|
||||||
|
else if (val == "abbreviated")
|
||||||
|
option.set(method_arguments::abbreviated);
|
||||||
|
else if (val == "none")
|
||||||
|
option.set(method_arguments::none);
|
||||||
|
else
|
||||||
|
throw std::runtime_error(
|
||||||
|
"Invalid generate_method_arguments value: " + val);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
std::shared_ptr<clanguml::config::diagram> parse_diagram_config(const Node &d)
|
std::shared_ptr<clanguml::config::diagram> parse_diagram_config(const Node &d)
|
||||||
@ -367,6 +376,7 @@ template <> struct convert<class_diagram> {
|
|||||||
|
|
||||||
get_option(node, rhs.classes);
|
get_option(node, rhs.classes);
|
||||||
get_option(node, rhs.include_relations_also_as_members);
|
get_option(node, rhs.include_relations_also_as_members);
|
||||||
|
get_option(node, rhs.generate_method_arguments);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -413,6 +423,7 @@ template <> struct convert<config> {
|
|||||||
get_option(node, rhs.compilation_database_dir);
|
get_option(node, rhs.compilation_database_dir);
|
||||||
get_option(node, rhs.include_relations_also_as_members);
|
get_option(node, rhs.include_relations_also_as_members);
|
||||||
get_option(node, rhs.puml);
|
get_option(node, rhs.puml);
|
||||||
|
get_option(node, rhs.generate_method_arguments);
|
||||||
|
|
||||||
auto diagrams = node["diagrams"];
|
auto diagrams = node["diagrams"];
|
||||||
|
|
||||||
|
@ -34,6 +34,9 @@
|
|||||||
namespace clanguml {
|
namespace clanguml {
|
||||||
namespace config {
|
namespace config {
|
||||||
|
|
||||||
|
enum class diagram_type { class_diagram, sequence_diagram, package_diagram };
|
||||||
|
enum class method_arguments { full, abbreviated, none };
|
||||||
|
|
||||||
struct plantuml {
|
struct plantuml {
|
||||||
std::vector<std::string> before;
|
std::vector<std::string> before;
|
||||||
std::vector<std::string> after;
|
std::vector<std::string> after;
|
||||||
@ -61,35 +64,42 @@ struct filter {
|
|||||||
std::vector<common::model::scope_t> scopes;
|
std::vector<common::model::scope_t> scopes;
|
||||||
};
|
};
|
||||||
|
|
||||||
enum class diagram_type { class_diagram, sequence_diagram, package_diagram };
|
|
||||||
|
|
||||||
std::string to_string(const diagram_type t);
|
std::string to_string(const diagram_type t);
|
||||||
|
|
||||||
template <typename T> void append_value(T &l, const T &r) { l = r; }
|
template <typename T> void append_value(T &l, const T &r) { l = r; }
|
||||||
|
|
||||||
|
enum class option_inherit_mode { override, append };
|
||||||
|
|
||||||
template <typename T> struct option {
|
template <typename T> struct option {
|
||||||
option(const std::string &name_)
|
option(const std::string &name_,
|
||||||
|
option_inherit_mode im = option_inherit_mode::override)
|
||||||
: name{name_}
|
: name{name_}
|
||||||
|
, value{{}}
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
option(const std::string &name_, const T &initial_value)
|
option(const std::string &name_, const T &initial_value,
|
||||||
|
option_inherit_mode im = option_inherit_mode::override)
|
||||||
: name{name_}
|
: name{name_}
|
||||||
, value{initial_value}
|
, value{initial_value}
|
||||||
, has_value{true}
|
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
void append(const T &r)
|
void set(const T &v)
|
||||||
{
|
{
|
||||||
append_value(value, r);
|
value = v;
|
||||||
has_value = true;
|
is_declared = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
option<T> &operator+=(const T &r)
|
void override(const option<T> &o)
|
||||||
{
|
{
|
||||||
append_value(value, r);
|
if (!is_declared && o.is_declared) {
|
||||||
has_value = true;
|
if (inheritance_mode == option_inherit_mode::append)
|
||||||
return *this;
|
append_value(value, o.value);
|
||||||
|
else
|
||||||
|
value = o.value;
|
||||||
|
|
||||||
|
is_declared = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
T &operator()() { return value; }
|
T &operator()() { return value; }
|
||||||
@ -98,7 +108,8 @@ template <typename T> struct option {
|
|||||||
|
|
||||||
std::string name;
|
std::string name;
|
||||||
T value;
|
T value;
|
||||||
bool has_value{false};
|
bool is_declared{false};
|
||||||
|
option_inherit_mode inheritance_mode;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct inheritable_diagram_options {
|
struct inheritable_diagram_options {
|
||||||
@ -108,7 +119,9 @@ struct inheritable_diagram_options {
|
|||||||
"include_relations_also_as_members", true};
|
"include_relations_also_as_members", true};
|
||||||
option<filter> include{"include"};
|
option<filter> include{"include"};
|
||||||
option<filter> exclude{"exclude"};
|
option<filter> exclude{"exclude"};
|
||||||
option<plantuml> puml{"plantuml"};
|
option<plantuml> puml{"plantuml", option_inherit_mode::append};
|
||||||
|
option<method_arguments> generate_method_arguments{
|
||||||
|
"generate_method_arguments", method_arguments::full};
|
||||||
|
|
||||||
void inherit(const inheritable_diagram_options &parent);
|
void inherit(const inheritable_diagram_options &parent);
|
||||||
};
|
};
|
||||||
|
@ -31,6 +31,8 @@ TEST_CASE("Test config simple", "[unit-test]")
|
|||||||
CHECK(diagram.type() == clanguml::config::diagram_type::class_diagram);
|
CHECK(diagram.type() == clanguml::config::diagram_type::class_diagram);
|
||||||
CHECK(diagram.glob().size() == 2);
|
CHECK(diagram.glob().size() == 2);
|
||||||
CHECK(clanguml::util::contains(diagram.using_namespace(), "clanguml"));
|
CHECK(clanguml::util::contains(diagram.using_namespace(), "clanguml"));
|
||||||
|
CHECK(diagram.generate_method_arguments() ==
|
||||||
|
clanguml::config::method_arguments::full);
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_CASE("Test config inherited", "[unit-test]")
|
TEST_CASE("Test config inherited", "[unit-test]")
|
||||||
@ -64,6 +66,8 @@ TEST_CASE("Test config includes", "[unit-test]")
|
|||||||
CHECK(def.glob()[0] == "src/**/*.cc");
|
CHECK(def.glob()[0] == "src/**/*.cc");
|
||||||
CHECK(def.glob()[1] == "src/**/*.h");
|
CHECK(def.glob()[1] == "src/**/*.h");
|
||||||
CHECK(clanguml::util::contains(def.using_namespace(), "clanguml"));
|
CHECK(clanguml::util::contains(def.using_namespace(), "clanguml"));
|
||||||
|
CHECK(def.generate_method_arguments() ==
|
||||||
|
clanguml::config::method_arguments::none);
|
||||||
|
|
||||||
auto &cus = *cfg.diagrams["class_2"];
|
auto &cus = *cfg.diagrams["class_2"];
|
||||||
CHECK(cus.type() == clanguml::config::diagram_type::class_diagram);
|
CHECK(cus.type() == clanguml::config::diagram_type::class_diagram);
|
||||||
@ -71,4 +75,6 @@ TEST_CASE("Test config includes", "[unit-test]")
|
|||||||
CHECK(cus.glob()[0] == "src/main.cc");
|
CHECK(cus.glob()[0] == "src/main.cc");
|
||||||
CHECK(clanguml::util::contains(cus.using_namespace(), "clanguml::ns1"));
|
CHECK(clanguml::util::contains(cus.using_namespace(), "clanguml::ns1"));
|
||||||
CHECK(cus.include_relations_also_as_members());
|
CHECK(cus.include_relations_also_as_members());
|
||||||
|
CHECK(cus.generate_method_arguments() ==
|
||||||
|
clanguml::config::method_arguments::none);
|
||||||
}
|
}
|
@ -1,6 +1,7 @@
|
|||||||
compilation_database_dir: debug
|
compilation_database_dir: debug
|
||||||
output_directory: output
|
output_directory: output
|
||||||
include_relations_also_as_members: false
|
include_relations_also_as_members: false
|
||||||
|
generate_method_arguments: none
|
||||||
using_namespace:
|
using_namespace:
|
||||||
- clanguml
|
- clanguml
|
||||||
include:
|
include:
|
||||||
|
@ -8,6 +8,7 @@ diagrams:
|
|||||||
- src/**/*.h
|
- src/**/*.h
|
||||||
using_namespace:
|
using_namespace:
|
||||||
- clanguml
|
- clanguml
|
||||||
|
generate_method_arguments: full
|
||||||
include:
|
include:
|
||||||
namespaces:
|
namespaces:
|
||||||
- clanguml
|
- clanguml
|
||||||
|
Loading…
x
Reference in New Issue
Block a user