Changed JSON generator paths to relative

This commit is contained in:
Bartek Kryza
2023-03-17 00:39:52 +01:00
parent f13ce56840
commit 4e404a362e
9 changed files with 172 additions and 260 deletions

View File

@@ -97,7 +97,7 @@ document_test_cases: test_plantuml
clanguml_diagrams: debug clanguml_diagrams: debug
mkdir -p docs/diagrams mkdir -p docs/diagrams
debug/src/clang-uml debug/src/clang-uml -g plantuml -g json
plantuml -tsvg -nometadata docs/diagrams/*.puml plantuml -tsvg -nometadata docs/diagrams/*.puml
python3 util/format_svg.py docs/diagrams/*.svg python3 util/format_svg.py docs/diagrams/*.svg

View File

@@ -25,7 +25,7 @@ using nlohmann::json;
void to_json(nlohmann::json &j, const source_location &sl) void to_json(nlohmann::json &j, const source_location &sl)
{ {
j = json{{"file", sl.file()}, {"line", sl.line()}}; j = json{{"file", sl.file_relative()}, {"line", sl.line()}};
} }
void to_json(nlohmann::json &j, const element &c) void to_json(nlohmann::json &j, const element &c)
@@ -37,9 +37,10 @@ void to_json(nlohmann::json &j, const element &c)
if (const auto &comment = c.comment(); comment) if (const auto &comment = c.comment(); comment)
j["comment"] = comment.value(); j["comment"] = comment.value();
if (!c.file().empty()) if (!c.file().empty()) {
j["source_location"] = j["source_location"] =
dynamic_cast<const common::model::source_location &>(c); dynamic_cast<const common::model::source_location &>(c);
}
} }
void to_json(nlohmann::json &j, const template_parameter &c) void to_json(nlohmann::json &j, const template_parameter &c)

View File

@@ -36,6 +36,10 @@ public:
void set_file(const std::string &file) { file_ = file; } void set_file(const std::string &file) { file_ = file; }
const std::string &file_relative() const { return file_relative_; }
void set_file_relative(const std::string &file) { file_relative_ = file; }
unsigned int line() const { return line_; } unsigned int line() const { return line_; }
void set_line(const unsigned line) { line_ = line; } void set_line(const unsigned line) { line_ = line; }
@@ -46,6 +50,7 @@ public:
private: private:
std::string file_; std::string file_;
std::string file_relative_;
unsigned int line_{0}; unsigned int line_{0};
unsigned int hash_{0}; unsigned int hash_{0};
}; };

View File

@@ -26,6 +26,7 @@ namespace clanguml::common::visitor {
translation_unit_visitor::translation_unit_visitor( translation_unit_visitor::translation_unit_visitor(
clang::SourceManager &sm, const clanguml::config::diagram &config) clang::SourceManager &sm, const clanguml::config::diagram &config)
: source_manager_{sm} : source_manager_{sm}
, relative_to_path_{config.relative_to()}
{ {
if (config.comment_parser() == config::comment_parser_t::plain) { if (config.comment_parser() == config::comment_parser_t::plain) {
comment_visitor_ = comment_visitor_ =
@@ -86,6 +87,9 @@ void translation_unit_visitor::set_source_location(
{ {
if (location.isValid()) { if (location.isValid()) {
element.set_file(source_manager_.getFilename(location).str()); element.set_file(source_manager_.getFilename(location).str());
element.set_file_relative(util::path_to_url(
std::filesystem::relative(element.file(), relative_to_path_)
.string()));
element.set_line(source_manager_.getSpellingLineNumber(location)); element.set_line(source_manager_.getSpellingLineNumber(location));
element.set_location_id(location.getHashValue()); element.set_location_id(location.getHashValue());
} }

View File

@@ -106,5 +106,7 @@ private:
clang::SourceManager &source_manager_; clang::SourceManager &source_manager_;
std::unique_ptr<comment::comment_visitor> comment_visitor_; std::unique_ptr<comment::comment_visitor> comment_visitor_;
std::filesystem::path relative_to_path_;
}; };
} // namespace clanguml::common::visitor } // namespace clanguml::common::visitor

View File

@@ -144,7 +144,7 @@ TEST_CASE("t00002", "[test-case][class]")
"name": "A", "name": "A",
"namespace": "clanguml::t00002", "namespace": "clanguml::t00002",
"source_location": { "source_location": {
"file": "/home/bartek/devel/clang-uml/tests/t00002/t00002.cc", "file": "../../tests/t00002/t00002.cc",
"line": 7 "line": 7
}, },
"template_parameters": [], "template_parameters": [],
@@ -195,7 +195,7 @@ TEST_CASE("t00002", "[test-case][class]")
"name": "B", "name": "B",
"namespace": "clanguml::t00002", "namespace": "clanguml::t00002",
"source_location": { "source_location": {
"file": "/home/bartek/devel/clang-uml/tests/t00002/t00002.cc", "file": "../../tests/t00002/t00002.cc",
"line": 16 "line": 16
}, },
"template_parameters": [], "template_parameters": [],
@@ -255,7 +255,7 @@ TEST_CASE("t00002", "[test-case][class]")
"name": "C", "name": "C",
"namespace": "clanguml::t00002", "namespace": "clanguml::t00002",
"source_location": { "source_location": {
"file": "/home/bartek/devel/clang-uml/tests/t00002/t00002.cc", "file": "../../tests/t00002/t00002.cc",
"line": 27 "line": 27
}, },
"template_parameters": [], "template_parameters": [],
@@ -305,7 +305,7 @@ TEST_CASE("t00002", "[test-case][class]")
"is_static": false, "is_static": false,
"name": "as", "name": "as",
"source_location": { "source_location": {
"file": "/home/bartek/devel/clang-uml/tests/t00002/t00002.cc", "file": "../../tests/t00002/t00002.cc",
"line": 58 "line": 58
}, },
"type": "std::vector<A *>" "type": "std::vector<A *>"
@@ -356,7 +356,7 @@ TEST_CASE("t00002", "[test-case][class]")
"name": "D", "name": "D",
"namespace": "clanguml::t00002", "namespace": "clanguml::t00002",
"source_location": { "source_location": {
"file": "/home/bartek/devel/clang-uml/tests/t00002/t00002.cc", "file": "../../tests/t00002/t00002.cc",
"line": 36 "line": 36
}, },
"template_parameters": [], "template_parameters": [],
@@ -398,7 +398,7 @@ TEST_CASE("t00002", "[test-case][class]")
"is_static": false, "is_static": false,
"name": "as", "name": "as",
"source_location": { "source_location": {
"file": "/home/bartek/devel/clang-uml/tests/t00002/t00002.cc", "file": "../../tests/t00002/t00002.cc",
"line": 83 "line": 83
}, },
"type": "std::vector<A *>" "type": "std::vector<A *>"
@@ -449,7 +449,7 @@ TEST_CASE("t00002", "[test-case][class]")
"name": "E", "name": "E",
"namespace": "clanguml::t00002", "namespace": "clanguml::t00002",
"source_location": { "source_location": {
"file": "/home/bartek/devel/clang-uml/tests/t00002/t00002.cc", "file": "../../tests/t00002/t00002.cc",
"line": 61 "line": 61
}, },
"template_parameters": [], "template_parameters": [],
@@ -512,7 +512,7 @@ TEST_CASE("t00002", "[test-case][class]")
)##"; )##";
auto j = generate_class_json(diagram, *model); auto j = generate_class_json(diagram, *model);
// REQUIRE(j == nlohmann::json::parse(expected_json)); REQUIRE(j == nlohmann::json::parse(expected_json));
save_json(config.output_directory() + "/" + diagram->name + ".json", j); save_json(config.output_directory() + "/" + diagram->name + ".json", j);
} }

File diff suppressed because it is too large Load Diff

View File

@@ -64,7 +64,7 @@ TEST_CASE("t00036", "[test-case][class]")
"name": "E", "name": "E",
"namespace": "clanguml::t00036::ns1", "namespace": "clanguml::t00036::ns1",
"source_location": { "source_location": {
"file": "/home/bartek/devel/clang-uml/tests/t00036/t00036.cc", "file": "../../tests/t00036/t00036.cc",
"line": 6 "line": 6
}, },
"type": "enum" "type": "enum"
@@ -87,7 +87,7 @@ TEST_CASE("t00036", "[test-case][class]")
"is_static": false, "is_static": false,
"name": "a", "name": "a",
"source_location": { "source_location": {
"file": "/home/bartek/devel/clang-uml/tests/t00036/t00036.cc", "file": "../../tests/t00036/t00036.cc",
"line": 11 "line": 11
}, },
"type": "T" "type": "T"
@@ -97,16 +97,14 @@ TEST_CASE("t00036", "[test-case][class]")
"name": "A", "name": "A",
"namespace": "clanguml::t00036::ns1::ns11", "namespace": "clanguml::t00036::ns1::ns11",
"source_location": { "source_location": {
"file": "/home/bartek/devel/clang-uml/tests/t00036/t00036.cc", "file": "../../tests/t00036/t00036.cc",
"line": 10 "line": 10
}, },
"template_parameters": [ "template_parameters": [
{ {
"is_template_parameter": true,
"is_template_template_parameter": false,
"is_variadic": false, "is_variadic": false,
"name": "T", "kind": "template_type",
"type": "" "name": "T"
} }
], ],
"type": "class" "type": "class"
@@ -129,7 +127,7 @@ TEST_CASE("t00036", "[test-case][class]")
"is_static": false, "is_static": false,
"name": "a_int", "name": "a_int",
"source_location": { "source_location": {
"file": "/home/bartek/devel/clang-uml/tests/t00036/t00036.cc", "file": "../../tests/t00036/t00036.cc",
"line": 17 "line": 17
}, },
"type": "A<int>" "type": "A<int>"
@@ -139,7 +137,7 @@ TEST_CASE("t00036", "[test-case][class]")
"name": "B", "name": "B",
"namespace": "clanguml::t00036::ns1::ns11::ns111", "namespace": "clanguml::t00036::ns1::ns11::ns111",
"source_location": { "source_location": {
"file": "/home/bartek/devel/clang-uml/tests/t00036/t00036.cc", "file": "../../tests/t00036/t00036.cc",
"line": 16 "line": 16
}, },
"template_parameters": [], "template_parameters": [],
@@ -164,11 +162,9 @@ TEST_CASE("t00036", "[test-case][class]")
"namespace": "clanguml::t00036::ns1::ns11", "namespace": "clanguml::t00036::ns1::ns11",
"template_parameters": [ "template_parameters": [
{ {
"is_template_parameter": false,
"is_template_template_parameter": false,
"is_variadic": false, "is_variadic": false,
"name": "int", "kind": "argument",
"type": "" "type": "int"
} }
], ],
"type": "class" "type": "class"
@@ -201,7 +197,7 @@ TEST_CASE("t00036", "[test-case][class]")
"name": "C", "name": "C",
"namespace": "clanguml::t00036::ns2::ns22", "namespace": "clanguml::t00036::ns2::ns22",
"source_location": { "source_location": {
"file": "/home/bartek/devel/clang-uml/tests/t00036/t00036.cc", "file": "../../tests/t00036/t00036.cc",
"line": 28 "line": 28
}, },
"template_parameters": [], "template_parameters": [],
@@ -236,7 +232,7 @@ TEST_CASE("t00036", "[test-case][class]")
auto j = generate_class_json(diagram, *model); auto j = generate_class_json(diagram, *model);
// REQUIRE(j == nlohmann::json::parse(expected_json)); REQUIRE(j == nlohmann::json::parse(expected_json));
save_json(config.output_directory() + "/" + diagram->name + ".json", j); save_json(config.output_directory() + "/" + diagram->name + ".json", j);
} }

View File

@@ -125,7 +125,7 @@ TEST_CASE("t00056", "[test-case][class]")
"namespace": "clanguml::t00056", "namespace": "clanguml::t00056",
"parameters": [], "parameters": [],
"source_location": { "source_location": {
"file": "/home/bartek/devel/clang-uml/tests/t00056/t00056.cc", "file": "../../tests/t00056/t00056.cc",
"line": 7 "line": 7
}, },
"statements": [], "statements": [],
@@ -147,7 +147,7 @@ TEST_CASE("t00056", "[test-case][class]")
} }
], ],
"source_location": { "source_location": {
"file": "/home/bartek/devel/clang-uml/tests/t00056/t00056.cc", "file": "../../tests/t00056/t00056.cc",
"line": 10 "line": 10
}, },
"statements": [ "statements": [
@@ -162,7 +162,7 @@ TEST_CASE("t00056", "[test-case][class]")
"namespace": "clanguml::t00056", "namespace": "clanguml::t00056",
"parameters": [], "parameters": [],
"source_location": { "source_location": {
"file": "/home/bartek/devel/clang-uml/tests/t00056/t00056.cc", "file": "../../tests/t00056/t00056.cc",
"line": 15 "line": 15
}, },
"statements": [], "statements": [],
@@ -180,7 +180,7 @@ TEST_CASE("t00056", "[test-case][class]")
} }
], ],
"source_location": { "source_location": {
"file": "/home/bartek/devel/clang-uml/tests/t00056/t00056.cc", "file": "../../tests/t00056/t00056.cc",
"line": 19 "line": 19
}, },
"statements": [ "statements": [
@@ -196,7 +196,7 @@ TEST_CASE("t00056", "[test-case][class]")
"namespace": "clanguml::t00056", "namespace": "clanguml::t00056",
"parameters": [], "parameters": [],
"source_location": { "source_location": {
"file": "/home/bartek/devel/clang-uml/tests/t00056/t00056.cc", "file": "../../tests/t00056/t00056.cc",
"line": 26 "line": 26
}, },
"statements": [ "statements": [
@@ -216,7 +216,7 @@ TEST_CASE("t00056", "[test-case][class]")
} }
], ],
"source_location": { "source_location": {
"file": "/home/bartek/devel/clang-uml/tests/t00056/t00056.cc", "file": "../../tests/t00056/t00056.cc",
"line": 29 "line": 29
}, },
"statements": [ "statements": [
@@ -233,7 +233,7 @@ TEST_CASE("t00056", "[test-case][class]")
"namespace": "clanguml::t00056", "namespace": "clanguml::t00056",
"parameters": [], "parameters": [],
"source_location": { "source_location": {
"file": "/home/bartek/devel/clang-uml/tests/t00056/t00056.cc", "file": "../../tests/t00056/t00056.cc",
"line": 45 "line": 45
}, },
"statements": [], "statements": [],
@@ -246,7 +246,7 @@ TEST_CASE("t00056", "[test-case][class]")
"namespace": "clanguml::t00056", "namespace": "clanguml::t00056",
"parameters": [], "parameters": [],
"source_location": { "source_location": {
"file": "/home/bartek/devel/clang-uml/tests/t00056/t00056.cc", "file": "../../tests/t00056/t00056.cc",
"line": 48 "line": 48
}, },
"statements": [], "statements": [],
@@ -267,7 +267,7 @@ TEST_CASE("t00056", "[test-case][class]")
"is_static": false, "is_static": false,
"name": "a", "name": "a",
"source_location": { "source_location": {
"file": "/home/bartek/devel/clang-uml/tests/t00056/t00056.cc", "file": "../../tests/t00056/t00056.cc",
"line": 53 "line": 53
}, },
"type": "T" "type": "T"
@@ -277,17 +277,14 @@ TEST_CASE("t00056", "[test-case][class]")
"name": "A", "name": "A",
"namespace": "clanguml::t00056", "namespace": "clanguml::t00056",
"source_location": { "source_location": {
"file": "/home/bartek/devel/clang-uml/tests/t00056/t00056.cc", "file": "../../tests/t00056/t00056.cc",
"line": 52 "line": 52
}, },
"template_parameters": [ "template_parameters": [
{ {
"concept_constraint": "clanguml::t00056::max_four_bytes",
"is_template_parameter": true,
"is_template_template_parameter": false,
"is_variadic": false, "is_variadic": false,
"name": "T", "kind": "template_type",
"type": "" "name": "T"
} }
], ],
"type": "class" "type": "class"
@@ -307,7 +304,7 @@ TEST_CASE("t00056", "[test-case][class]")
"is_static": false, "is_static": false,
"name": "b", "name": "b",
"source_location": { "source_location": {
"file": "/home/bartek/devel/clang-uml/tests/t00056/t00056.cc", "file": "../../tests/t00056/t00056.cc",
"line": 60 "line": 60
}, },
"type": "T" "type": "T"
@@ -317,16 +314,14 @@ TEST_CASE("t00056", "[test-case][class]")
"name": "B", "name": "B",
"namespace": "clanguml::t00056", "namespace": "clanguml::t00056",
"source_location": { "source_location": {
"file": "/home/bartek/devel/clang-uml/tests/t00056/t00056.cc", "file": "../../tests/t00056/t00056.cc",
"line": 59 "line": 59
}, },
"template_parameters": [ "template_parameters": [
{ {
"is_template_parameter": true,
"is_template_template_parameter": false,
"is_variadic": false, "is_variadic": false,
"name": "T", "kind": "template_type",
"type": "" "name": "T"
} }
], ],
"type": "class" "type": "class"
@@ -346,7 +341,7 @@ TEST_CASE("t00056", "[test-case][class]")
"is_static": false, "is_static": false,
"name": "c", "name": "c",
"source_location": { "source_location": {
"file": "/home/bartek/devel/clang-uml/tests/t00056/t00056.cc", "file": "../../tests/t00056/t00056.cc",
"line": 70 "line": 70
}, },
"type": "T" "type": "T"
@@ -356,17 +351,14 @@ TEST_CASE("t00056", "[test-case][class]")
"name": "C", "name": "C",
"namespace": "clanguml::t00056", "namespace": "clanguml::t00056",
"source_location": { "source_location": {
"file": "/home/bartek/devel/clang-uml/tests/t00056/t00056.cc", "file": "../../tests/t00056/t00056.cc",
"line": 69 "line": 69
}, },
"template_parameters": [ "template_parameters": [
{ {
"concept_constraint": "clanguml::t00056::convertible_to_string",
"is_template_parameter": true,
"is_template_template_parameter": false,
"is_variadic": false, "is_variadic": false,
"name": "T", "kind": "template_type",
"type": "" "name": "T"
} }
], ],
"type": "class" "type": "class"
@@ -385,46 +377,34 @@ TEST_CASE("t00056", "[test-case][class]")
"name": "D", "name": "D",
"namespace": "clanguml::t00056", "namespace": "clanguml::t00056",
"source_location": { "source_location": {
"file": "/home/bartek/devel/clang-uml/tests/t00056/t00056.cc", "file": "../../tests/t00056/t00056.cc",
"line": 75 "line": 75
}, },
"template_parameters": [ "template_parameters": [
{ {
"concept_constraint": "clanguml::t00056::iterable",
"is_template_parameter": true,
"is_template_template_parameter": false,
"is_variadic": false, "is_variadic": false,
"name": "T1", "kind": "template_type",
"type": "" "name": "T1"
}, },
{ {
"is_template_parameter": true,
"is_template_template_parameter": false,
"is_variadic": false, "is_variadic": false,
"name": "T2", "kind": "template_type",
"type": "" "name": "T2"
}, },
{ {
"concept_constraint": "clanguml::t00056::iterable",
"is_template_parameter": true,
"is_template_template_parameter": false,
"is_variadic": false, "is_variadic": false,
"name": "T3", "kind": "template_type",
"type": "" "name": "T3"
}, },
{ {
"is_template_parameter": true,
"is_template_template_parameter": false,
"is_variadic": false, "is_variadic": false,
"name": "T4", "kind": "template_type",
"type": "" "name": "T4"
}, },
{ {
"is_template_parameter": true,
"is_template_template_parameter": false,
"is_variadic": false, "is_variadic": false,
"name": "T5", "kind": "template_type",
"type": "" "name": "T5"
} }
], ],
"type": "class" "type": "class"
@@ -444,7 +424,7 @@ TEST_CASE("t00056", "[test-case][class]")
"is_static": false, "is_static": false,
"name": "e1", "name": "e1",
"source_location": { "source_location": {
"file": "/home/bartek/devel/clang-uml/tests/t00056/t00056.cc", "file": "../../tests/t00056/t00056.cc",
"line": 80 "line": 80
}, },
"type": "T1" "type": "T1"
@@ -454,7 +434,7 @@ TEST_CASE("t00056", "[test-case][class]")
"is_static": false, "is_static": false,
"name": "e2", "name": "e2",
"source_location": { "source_location": {
"file": "/home/bartek/devel/clang-uml/tests/t00056/t00056.cc", "file": "../../tests/t00056/t00056.cc",
"line": 81 "line": 81
}, },
"type": "T2" "type": "T2"
@@ -464,7 +444,7 @@ TEST_CASE("t00056", "[test-case][class]")
"is_static": false, "is_static": false,
"name": "e3", "name": "e3",
"source_location": { "source_location": {
"file": "/home/bartek/devel/clang-uml/tests/t00056/t00056.cc", "file": "../../tests/t00056/t00056.cc",
"line": 82 "line": 82
}, },
"type": "T3" "type": "T3"
@@ -474,30 +454,24 @@ TEST_CASE("t00056", "[test-case][class]")
"name": "E", "name": "E",
"namespace": "clanguml::t00056", "namespace": "clanguml::t00056",
"source_location": { "source_location": {
"file": "/home/bartek/devel/clang-uml/tests/t00056/t00056.cc", "file": "../../tests/t00056/t00056.cc",
"line": 79 "line": 79
}, },
"template_parameters": [ "template_parameters": [
{ {
"is_template_parameter": true,
"is_template_template_parameter": false,
"is_variadic": false, "is_variadic": false,
"name": "T1", "kind": "template_type",
"type": "" "name": "T1"
}, },
{ {
"is_template_parameter": true,
"is_template_template_parameter": false,
"is_variadic": false, "is_variadic": false,
"name": "T2", "kind": "template_type",
"type": "" "name": "T2"
}, },
{ {
"is_template_parameter": true,
"is_template_template_parameter": false,
"is_variadic": false, "is_variadic": false,
"name": "T3", "kind": "template_type",
"type": "" "name": "T3"
} }
], ],
"type": "class" "type": "class"
@@ -517,7 +491,7 @@ TEST_CASE("t00056", "[test-case][class]")
"is_static": false, "is_static": false,
"name": "f1", "name": "f1",
"source_location": { "source_location": {
"file": "/home/bartek/devel/clang-uml/tests/t00056/t00056.cc", "file": "../../tests/t00056/t00056.cc",
"line": 88 "line": 88
}, },
"type": "T1" "type": "T1"
@@ -527,7 +501,7 @@ TEST_CASE("t00056", "[test-case][class]")
"is_static": false, "is_static": false,
"name": "f2", "name": "f2",
"source_location": { "source_location": {
"file": "/home/bartek/devel/clang-uml/tests/t00056/t00056.cc", "file": "../../tests/t00056/t00056.cc",
"line": 89 "line": 89
}, },
"type": "T2" "type": "T2"
@@ -537,7 +511,7 @@ TEST_CASE("t00056", "[test-case][class]")
"is_static": false, "is_static": false,
"name": "f3", "name": "f3",
"source_location": { "source_location": {
"file": "/home/bartek/devel/clang-uml/tests/t00056/t00056.cc", "file": "../../tests/t00056/t00056.cc",
"line": 90 "line": 90
}, },
"type": "T3" "type": "T3"
@@ -547,30 +521,24 @@ TEST_CASE("t00056", "[test-case][class]")
"name": "F", "name": "F",
"namespace": "clanguml::t00056", "namespace": "clanguml::t00056",
"source_location": { "source_location": {
"file": "/home/bartek/devel/clang-uml/tests/t00056/t00056.cc", "file": "../../tests/t00056/t00056.cc",
"line": 87 "line": 87
}, },
"template_parameters": [ "template_parameters": [
{ {
"is_template_parameter": true,
"is_template_template_parameter": false,
"is_variadic": false, "is_variadic": false,
"name": "T1", "kind": "template_type",
"type": "" "name": "T1"
}, },
{ {
"is_template_parameter": true,
"is_template_template_parameter": false,
"is_variadic": false, "is_variadic": false,
"name": "T2", "kind": "template_type",
"type": "" "name": "T2"
}, },
{ {
"is_template_parameter": true,
"is_template_template_parameter": false,
"is_variadic": false, "is_variadic": false,
"name": "T3", "kind": "template_type",
"type": "" "name": "T3"
} }
], ],
"type": "class" "type": "class"
@@ -666,7 +634,7 @@ TEST_CASE("t00056", "[test-case][class]")
)##"; )##";
auto j = generate_class_json(diagram, *model); auto j = generate_class_json(diagram, *model);
// REQUIRE(j == nlohmann::json::parse(expected_json)); REQUIRE(j == nlohmann::json::parse(expected_json));
save_json(config.output_directory() + "/" + diagram->name + ".json", j); save_json(config.output_directory() + "/" + diagram->name + ".json", j);
} }