Преглед изворни кода

refactor: annotate regex-engine name

Sam Jaffe пре 2 недеља
родитељ
комит
4a272cec67

+ 3 - 0
include/jvalidate/forward.h

@@ -1,8 +1,10 @@
 #pragma once
 
+#include <concepts>
 #include <functional>
 #include <iosfwd>
 #include <string>
+#include <string_view>
 #include <type_traits>
 #include <variant>
 
@@ -171,6 +173,7 @@ concept MutableAdapter = Adapter<A> && requires(A const a) {
 
 template <typename R>
 concept RegexEngine = requires(R & regex) {
+  { regex.engine_name() } -> std::convertible_to<std::string_view>;
   { regex.search("" /* pattern */, "" /* text */) } -> std::same_as<bool>;
 };
 

+ 2 - 1
include/jvalidate/validation_visitor.h

@@ -290,6 +290,7 @@ public:
     NOOP_UNLESS_TYPE(String);
 
     std::string const str = document.as_string();
+    annotate(regex_.engine_name());
     if (regex_.search(cons.regex, str)) {
       return result(Status::Accept, "string matches pattern /", cons.regex, "/");
     }
@@ -687,7 +688,7 @@ private:
   // Optimization to avoid running string-like objects through a
   // std::stringstream in fmtlist.
   static std::string fmt(S const & str) {
-    return str;
+    return std::string(str);
   }
 
   // Format va_args into a single string to annotate or mark an error message

+ 1 - 0
include/jvalidate/validator.h

@@ -28,6 +28,7 @@ private:
   std::unordered_map<std::string, std::regex> cache_;
 
 public:
+  static std::string_view engine_name() { return "std::regex[ECMAScript]"; }
   bool search(std::string const & regex, std::string const & text) {
     auto const & re = cache_.try_emplace(regex, regex).first->second;
     return std::regex_search(text, re);