26#include "../../char8_t_remediation.hpp"
29#include "../identifier_param.hpp"
30#include "../literal_string.hpp"
31#include "extract_keyword.hpp"
32#include "extraction_param.hpp"
33#include "get_signature_suffix_size.hpp"
34#include "language_tokens.hpp"
43namespace essence::meta::detail {
49 constexpr std::string_view get_short_identifier_name(std::string_view raw_name)
noexcept {
50 return extract_keyword<find_mode_type::full_match_reverse>(
51 raw_name, language_tokens::scope, extraction_param{.ensure_correctness =
false});
61 constexpr std::string_view parse_raw_identifier_name(
62 std::string_view prefix, std::string_view signature,
const identifier_param& param = {})
noexcept {
64 const auto keyword = prefix;
65#elif defined(__llvm__) && defined(__clang__)
66 const std::string_view keyword{param.type ? U8(
"[T = ") : U8(
"[Value = ")};
67#elif defined(__GNUC__)
68 const std::string_view keyword{param.type ? U8(
"[with T = ") : U8(
"[with auto Value = ")};
70#error "Unsupported compiler."
73 const auto result = extract_keyword<find_mode_type::full_match>(signature, keyword,
75 .preview_first_character = param.preview_first_character,
76 .ensure_correctness = param.ensure_correctness,
77 .suffix_size = get_signature_suffix_size(signature),
78 .extra_size_func = [](std::string_view str, std::size_t prefix_size) -> std::size_t {
82 [&, size = std::size_t{}](
const auto&... args)
mutable {
83 return ((str.compare(prefix_size, args.size(), args) == 0 ? (size = args.size()) : 0U), ...,
86 language_tokens::type_prefixes);
89 return str[prefix_size] == language_tokens::reference.front();
94 if (param.shortened && !param.preview_first_character) {
95 return get_short_identifier_name(result);