From ed151f45e1dfc84e7eb3c33a6f904c52a1a79ef0 Mon Sep 17 00:00:00 2001 From: Bartek Kryza Date: Mon, 26 Jun 2023 16:15:10 +0200 Subject: [PATCH] Fixed class method links in PlantUML diagrams --- .../visitor/translation_unit_visitor.cc | 3 +++ tests/t00002/test_case.h | 14 ++++++++++++++ tests/test_cases.h | 9 +++++++++ 3 files changed, 26 insertions(+) diff --git a/src/class_diagram/visitor/translation_unit_visitor.cc b/src/class_diagram/visitor/translation_unit_visitor.cc index c335c201..321a004d 100644 --- a/src/class_diagram/visitor/translation_unit_visitor.cc +++ b/src/class_diagram/visitor/translation_unit_visitor.cc @@ -1268,6 +1268,9 @@ void translation_unit_visitor::process_method( process_comment(mf, method); + // Register the source location of the field declaration + set_source_location(mf, method); + if (method.skip()) return; diff --git a/tests/t00002/test_case.h b/tests/t00002/test_case.h index 3b612247..4cfd2cfd 100644 --- a/tests/t00002/test_case.h +++ b/tests/t00002/test_case.h @@ -71,6 +71,20 @@ TEST_CASE("t00002", "[test-case][class]") clanguml::util::get_git_commit()), "This is class B")); + REQUIRE_THAT(puml, + HasMemberLink("+foo_a() : void", + fmt::format("https://github.com/bkryza/clang-uml/blob/{}/tests/" + "t00002/t00002.cc#L18", + clanguml::util::get_git_commit()), + "foo_a")); + + REQUIRE_THAT(puml, + HasMemberLink("-as : std::vector", + fmt::format("https://github.com/bkryza/clang-uml/blob/{}/tests/" + "t00002/t00002.cc#L83", + clanguml::util::get_git_commit()), + "as")); + save_puml( config.output_directory() + "/" + diagram->name + ".puml", puml); } diff --git a/tests/test_cases.h b/tests/test_cases.h index f3b9b8ae..1b825b1f 100644 --- a/tests/test_cases.h +++ b/tests/test_cases.h @@ -515,6 +515,15 @@ ContainsMatcher HasLink(std::string const &alias, std::string const &link, fmt::format("{} [[{}{{{}}}]]", alias, link, tooltip), caseSensitivity)); } +ContainsMatcher HasMemberLink(std::string const &method, + std::string const &link, std::string const &tooltip, + CaseSensitive::Choice caseSensitivity = CaseSensitive::Yes) +{ + return ContainsMatcher( + CasedString(fmt::format("{} [[[{}{{{}}}]]]", method, link, tooltip), + caseSensitivity)); +} + template ContainsMatcher IsMethod(std::string const &name, std::string const &type = "void", std::string const ¶ms = "",