diff --git a/.clang-tidy b/.clang-tidy index e4dfeb10..484040d8 100644 --- a/.clang-tidy +++ b/.clang-tidy @@ -18,6 +18,7 @@ Checks: >- -google-readability-todo, -google-default-arguments, -google-explicit-constructor, + -google-build-using-namespace, -hicpp-signed-bitwise, -hicpp-explicit-conversions, -llvmlibc-*, diff --git a/src/class_diagram/generators/plantuml/class_diagram_generator.cc b/src/class_diagram/generators/plantuml/class_diagram_generator.cc index 0cdcce46..abd3b854 100644 --- a/src/class_diagram/generators/plantuml/class_diagram_generator.cc +++ b/src/class_diagram/generators/plantuml/class_diagram_generator.cc @@ -101,6 +101,8 @@ void generator::generate(const class_ &c, std::ostream &ostr) const { namespace plantuml_common = clanguml::common::generators::plantuml; + constexpr auto kAbbreviatedMethodArgumentsLength{15}; + const auto &uns = m_config.using_namespace(); std::string class_type{"class"}; @@ -148,7 +150,8 @@ void generator::generate(const class_ &c, std::ostream &ostr) const auto args_string = fmt::format("{}", fmt::join(params, ", ")); if (m_config.generate_method_arguments() == config::method_arguments::abbreviated) { - args_string = clanguml::util::abbreviate(args_string, 10); + args_string = clanguml::util::abbreviate( + args_string, kAbbreviatedMethodArgumentsLength); } ostr << args_string; } diff --git a/src/common/model/namespace.h b/src/common/model/namespace.h index a591cda9..ab1c9d67 100644 --- a/src/common/model/namespace.h +++ b/src/common/model/namespace.h @@ -42,8 +42,8 @@ template <> struct hash { std::size_t seed = key.size(); for (const auto &ns : key) { - seed ^= std::hash{}(ns) + 0x6a3712b5 + (seed << 6) + - (seed >> 2); + seed ^= + std::hash{}(ns) + clanguml::util::hash_seed(seed); } return seed; diff --git a/src/common/model/source_file.h b/src/common/model/source_file.h index f3c96a9e..c0b7399f 100644 --- a/src/common/model/source_file.h +++ b/src/common/model/source_file.h @@ -131,8 +131,8 @@ template <> struct hash { std::size_t seed = key.size(); for (const auto &ns : key) { - seed ^= std::hash{}(ns) + 0x6a3712b5 + (seed << 6) + - (seed >> 2); + seed ^= + std::hash{}(ns) + clanguml::util::hash_seed(seed); } return seed; diff --git a/src/main.cc b/src/main.cc index aabfccb8..290bd1f8 100644 --- a/src/main.cc +++ b/src/main.cc @@ -403,11 +403,14 @@ bool ensure_output_directory_exists(const std::string &dir) void print_version() { + constexpr auto kLLVMBackendPackageStringLength{5}; std::cout << "clang-uml " << clanguml::version::CLANG_UML_VERSION << '\n'; std::cout << "Copyright (C) 2021-2022 Bartek Kryza " << '\n'; std::cout << "Built with LLVM version: " - << std::string{BACKEND_PACKAGE_STRING}.substr(5) << std::endl; + << std::string{BACKEND_PACKAGE_STRING}.substr( + kLLVMBackendPackageStringLength) + << std::endl; std::cout << "Using LLVM version: " << clang::getClangFullVersion() << std::endl; } diff --git a/src/sequence_diagram/model/participant.cc b/src/sequence_diagram/model/participant.cc index 3d103d45..959e4b22 100644 --- a/src/sequence_diagram/model/participant.cc +++ b/src/sequence_diagram/model/participant.cc @@ -193,13 +193,16 @@ std::string function::full_name_no_ns() const std::string function::message_name(message_render_mode mode) const { + constexpr auto kAbbreviatedMethodArgumentsLength{15}; + if (mode == message_render_mode::no_arguments) { return fmt::format("{}(){}", name(), is_const() ? " const" : ""); } else if (mode == message_render_mode::abbreviated) { return fmt::format("{}({}){}", name(), clanguml::util::abbreviate( - fmt::format("{}", fmt::join(parameters_, ",")), 15), + fmt::format("{}", fmt::join(parameters_, ",")), + kAbbreviatedMethodArgumentsLength), is_const() ? " const" : ""); } @@ -259,6 +262,8 @@ std::string method::full_name(bool /*relative*/) const std::string method::message_name(message_render_mode mode) const { + constexpr auto kAbbreviatedMethodArgumentsLength{15}; + const std::string style = is_static() ? "__" : ""; if (mode == message_render_mode::no_arguments) { @@ -268,7 +273,8 @@ std::string method::message_name(message_render_mode mode) const else if (mode == message_render_mode::abbreviated) { return fmt::format("{}({}){}", name(), clanguml::util::abbreviate( - fmt::format("{}", fmt::join(parameters(), ",")), 15), + fmt::format("{}", fmt::join(parameters(), ",")), + kAbbreviatedMethodArgumentsLength), is_const() ? " const" : ""); } @@ -334,6 +340,8 @@ std::string function_template::full_name_no_ns() const std::string function_template::message_name(message_render_mode mode) const { + constexpr auto kAbbreviatedMethodArgumentsLength{15}; + std::ostringstream s; render_template_params(s, using_namespace(), true); std::string template_params = s.str(); @@ -345,7 +353,8 @@ std::string function_template::message_name(message_render_mode mode) const else if (mode == message_render_mode::abbreviated) { return fmt::format("{}({}){}", name(), clanguml::util::abbreviate( - fmt::format("{}", fmt::join(parameters(), ",")), 15), + fmt::format("{}", fmt::join(parameters(), ",")), + kAbbreviatedMethodArgumentsLength), is_const() ? " const" : ""); } diff --git a/src/util/util.cc b/src/util/util.cc index ace86166..ac5105ba 100644 --- a/src/util/util.cc +++ b/src/util/util.cc @@ -281,4 +281,13 @@ template <> bool ends_with(const std::string &value, const std::string &suffix) return std::equal(suffix.rbegin(), suffix.rend(), value.rbegin()); } +std::size_t hash_seed(std::size_t seed) +{ + constexpr auto kSeedStart{0x6a3712b5}; + constexpr auto kSeedShiftFirst{6}; + constexpr auto kSeedShiftSecond{2}; + + return kSeedStart + (seed << kSeedShiftFirst) + (seed >> kSeedShiftSecond); +} + } // namespace clanguml::util diff --git a/src/util/util.h b/src/util/util.h index ad10816f..599ee3a6 100644 --- a/src/util/util.h +++ b/src/util/util.h @@ -27,8 +27,7 @@ #include #include -namespace clanguml { -namespace util { +namespace clanguml::util { std::string ltrim(const std::string &s); std::string rtrim(const std::string &s); @@ -247,5 +246,6 @@ void for_each_if(const T &collection, C &&cond, F &&func) }); } -} // namespace util -} // namespace clanguml \ No newline at end of file +std::size_t hash_seed(std::size_t seed); + +} // namespace clanguml::util \ No newline at end of file