From 5cca610eeac81361f6c16b255624cf982604da16 Mon Sep 17 00:00:00 2001 From: Juan Cruz Viotti Date: Wed, 28 Jan 2026 12:24:12 -0400 Subject: [PATCH] Upgrade Core to `421f999a9c14c33233db481f8caa2e062147873e` Signed-off-by: Juan Cruz Viotti --- DEPENDENCIES | 2 +- src/compiler/compiler.cc | 3 +- src/compiler/mapper/enum_8_bit.h | 1 + src/compiler/mapper/enum_8_bit_top_level.h | 1 + src/compiler/mapper/enum_arbitrary.h | 1 + src/compiler/mapper/enum_singleton.h | 1 + src/compiler/mapper/integer_bounded_8_bit.h | 1 + .../integer_bounded_greater_than_8_bit.h | 1 + .../mapper/integer_bounded_multiplier_8_bit.h | 1 + ...er_bounded_multiplier_greater_than_8_bit.h | 1 + src/compiler/mapper/integer_lower_bound.h | 1 + .../mapper/integer_lower_bound_multiplier.h | 1 + src/compiler/mapper/integer_unbound.h | 1 + .../mapper/integer_unbound_multiplier.h | 1 + src/compiler/mapper/integer_upper_bound.h | 1 + .../mapper/integer_upper_bound_multiplier.h | 1 + src/compiler/mapper/number_arbitrary.h | 1 + .../sourcemeta/core/jsonschema_transform.h | 10 +- .../core/src/core/jsonschema/transformer.cc | 182 ++++++++++-------- .../alterschema/canonicalizer/const_as_enum.h | 1 + .../exclusive_maximum_integer_to_maximum.h | 1 + .../exclusive_minimum_integer_to_minimum.h | 1 + .../canonicalizer/items_implicit.h | 1 + .../max_contains_covered_by_max_items.h | 1 + .../min_items_given_min_contains.h | 1 + .../canonicalizer/min_items_implicit.h | 1 + .../canonicalizer/min_length_implicit.h | 1 + .../min_properties_covered_by_required.h | 1 + .../canonicalizer/min_properties_implicit.h | 1 + .../canonicalizer/multiple_of_implicit.h | 1 + .../alterschema/canonicalizer/no_metadata.h | 1 + .../canonicalizer/properties_implicit.h | 1 + .../canonicalizer/type_array_to_any_of.h | 1 + .../canonicalizer/type_boolean_as_enum.h | 1 + .../canonicalizer/type_null_as_enum.h | 1 + .../canonicalizer/type_union_implicit.h | 1 + .../alterschema/common/allof_false_simplify.h | 1 + .../alterschema/common/anyof_false_simplify.h | 1 + .../common/anyof_remove_false_schemas.h | 1 + .../alterschema/common/anyof_true_simplify.h | 1 + .../alterschema/common/const_with_type.h | 1 + .../content_media_type_without_encoding.h | 1 + .../content_schema_without_media_type.h | 1 + .../common/dependencies_property_tautology.h | 1 + .../common/dependent_required_tautology.h | 1 + ..._official_dialect_without_empty_fragment.h | 1 + .../alterschema/common/draft_ref_siblings.h | 1 + .../common/drop_allof_empty_schemas.h | 1 + .../common/duplicate_allof_branches.h | 1 + .../common/duplicate_anyof_branches.h | 1 + .../common/duplicate_enum_values.h | 1 + .../common/duplicate_required_values.h | 1 + .../extension/alterschema/common/else_empty.h | 1 + .../alterschema/common/else_without_if.h | 1 + .../alterschema/common/empty_object_as_true.h | 1 + .../alterschema/common/enum_with_type.h | 1 + .../common/equal_numeric_bounds_to_enum.h | 1 + .../exclusive_maximum_number_and_maximum.h | 1 + .../exclusive_minimum_number_and_minimum.h | 1 + .../alterschema/common/if_without_then_else.h | 1 + .../alterschema/common/ignored_metaschema.h | 1 + .../common/max_contains_without_contains.h | 1 + .../common/maximum_real_for_integer.h | 1 + .../common/min_contains_without_contains.h | 1 + .../common/minimum_real_for_integer.h | 1 + ...ern_official_dialect_with_empty_fragment.h | 1 + .../common/non_applicable_additional_items.h | 1 + .../non_applicable_enum_validation_keywords.h | 1 + .../non_applicable_type_specific_keywords.h | 1 + .../extension/alterschema/common/not_false.h | 1 + .../alterschema/common/oneof_false_simplify.h | 1 + .../common/oneof_to_anyof_disjoint_types.h | 1 + .../alterschema/common/orphan_definitions.h | 1 + .../required_properties_in_properties.h | 1 + .../alterschema/common/single_type_array.h | 1 + .../extension/alterschema/common/then_empty.h | 1 + .../alterschema/common/then_without_if.h | 1 + .../common/unknown_keywords_prefix.h | 1 + .../alterschema/common/unknown_local_ref.h | 1 + .../unnecessary_allof_ref_wrapper_draft.h | 1 + .../unnecessary_allof_ref_wrapper_modern.h | 1 + .../common/unnecessary_allof_wrapper.h | 1 + .../common/unsatisfiable_drop_validation.h | 1 + .../unsatisfiable_in_place_applicator_type.h | 1 + .../alterschema/linter/comment_trim.h | 1 + .../linter/content_schema_default.h | 1 + .../alterschema/linter/definitions_to_defs.h | 1 + .../alterschema/linter/dependencies_default.h | 1 + .../linter/dependent_required_default.h | 1 + .../linter/description_trailing_period.h | 1 + .../alterschema/linter/description_trim.h | 1 + .../alterschema/linter/duplicate_examples.h | 1 + .../alterschema/linter/enum_to_const.h | 1 + .../linter/equal_numeric_bounds_to_const.h | 1 + .../alterschema/linter/items_array_default.h | 1 + .../alterschema/linter/items_schema_default.h | 1 + .../alterschema/linter/multiple_of_default.h | 1 + .../linter/pattern_properties_default.h | 1 + .../alterschema/linter/properties_default.h | 1 + .../linter/property_names_default.h | 1 + .../linter/property_names_type_default.h | 1 + .../linter/simple_properties_identifiers.h | 1 + .../linter/title_description_equal.h | 1 + .../linter/title_trailing_period.h | 1 + .../extension/alterschema/linter/title_trim.h | 1 + .../linter/top_level_description.h | 1 + .../alterschema/linter/top_level_examples.h | 1 + .../alterschema/linter/top_level_title.h | 1 + .../linter/unevaluated_items_default.h | 1 + .../linter/unevaluated_properties_default.h | 1 + .../linter/unsatisfiable_max_contains.h | 1 + .../linter/unsatisfiable_min_properties.h | 1 + 112 files changed, 220 insertions(+), 85 deletions(-) diff --git a/DEPENDENCIES b/DEPENDENCIES index 52e5e65c..8d21647a 100644 --- a/DEPENDENCIES +++ b/DEPENDENCIES @@ -1,3 +1,3 @@ vendorpull https://github.com/sourcemeta/vendorpull 1dcbac42809cf87cb5b045106b863e17ad84ba02 -core https://github.com/sourcemeta/core 1c2f2011df7c37543265ad5d89153189b4649013 +core https://github.com/sourcemeta/core 421f999a9c14c33233db481f8caa2e062147873e bootstrap https://github.com/twbs/bootstrap 1a6fdfae6be09b09eaced8f0e442ca6f7680a61e diff --git a/src/compiler/compiler.cc b/src/compiler/compiler.cc index c53742d8..9e5b8f36 100644 --- a/src/compiler/compiler.cc +++ b/src/compiler/compiler.cc @@ -6,7 +6,8 @@ #include "encoding.h" -#include // assert +#include // assert +#include // std::true_type static auto transformer_callback_noop(const sourcemeta::core::Pointer &, diff --git a/src/compiler/mapper/enum_8_bit.h b/src/compiler/mapper/enum_8_bit.h index 4348ffad..8b20480c 100644 --- a/src/compiler/mapper/enum_8_bit.h +++ b/src/compiler/mapper/enum_8_bit.h @@ -1,6 +1,7 @@ // TODO: Unit test this mapping once we have container encodings class Enum8Bit final : public sourcemeta::core::SchemaTransformRule { public: + using mutates = std::true_type; Enum8Bit() : sourcemeta::core::SchemaTransformRule{"enum_8_bit", ""} {}; [[nodiscard]] auto diff --git a/src/compiler/mapper/enum_8_bit_top_level.h b/src/compiler/mapper/enum_8_bit_top_level.h index cd3645d8..c1c465d7 100644 --- a/src/compiler/mapper/enum_8_bit_top_level.h +++ b/src/compiler/mapper/enum_8_bit_top_level.h @@ -1,5 +1,6 @@ class Enum8BitTopLevel final : public sourcemeta::core::SchemaTransformRule { public: + using mutates = std::true_type; Enum8BitTopLevel() : sourcemeta::core::SchemaTransformRule{"enum_8_bit_top_level", ""} {}; diff --git a/src/compiler/mapper/enum_arbitrary.h b/src/compiler/mapper/enum_arbitrary.h index 994f48cd..828514bf 100644 --- a/src/compiler/mapper/enum_arbitrary.h +++ b/src/compiler/mapper/enum_arbitrary.h @@ -1,6 +1,7 @@ // TODO: Unit test this mapping once we have container encodings class EnumArbitrary final : public sourcemeta::core::SchemaTransformRule { public: + using mutates = std::true_type; EnumArbitrary() : sourcemeta::core::SchemaTransformRule{"enum_arbitrary", ""} {}; diff --git a/src/compiler/mapper/enum_singleton.h b/src/compiler/mapper/enum_singleton.h index a6e50ba6..1c36b748 100644 --- a/src/compiler/mapper/enum_singleton.h +++ b/src/compiler/mapper/enum_singleton.h @@ -1,5 +1,6 @@ class EnumSingleton final : public sourcemeta::core::SchemaTransformRule { public: + using mutates = std::true_type; EnumSingleton() : sourcemeta::core::SchemaTransformRule{"enum_singleton", ""} {}; diff --git a/src/compiler/mapper/integer_bounded_8_bit.h b/src/compiler/mapper/integer_bounded_8_bit.h index 7dcb63cc..3dc5acd6 100644 --- a/src/compiler/mapper/integer_bounded_8_bit.h +++ b/src/compiler/mapper/integer_bounded_8_bit.h @@ -1,5 +1,6 @@ class IntegerBounded8Bit final : public sourcemeta::core::SchemaTransformRule { public: + using mutates = std::true_type; IntegerBounded8Bit() : sourcemeta::core::SchemaTransformRule{"integer_bounded_8_bit", ""} {}; diff --git a/src/compiler/mapper/integer_bounded_greater_than_8_bit.h b/src/compiler/mapper/integer_bounded_greater_than_8_bit.h index 47cff9c4..67f8835d 100644 --- a/src/compiler/mapper/integer_bounded_greater_than_8_bit.h +++ b/src/compiler/mapper/integer_bounded_greater_than_8_bit.h @@ -1,6 +1,7 @@ class IntegerBoundedGreaterThan8Bit final : public sourcemeta::core::SchemaTransformRule { public: + using mutates = std::true_type; IntegerBoundedGreaterThan8Bit() : sourcemeta::core::SchemaTransformRule{ "integer_bounded_greater_than_8_bit", ""} {}; diff --git a/src/compiler/mapper/integer_bounded_multiplier_8_bit.h b/src/compiler/mapper/integer_bounded_multiplier_8_bit.h index 103ea849..a3af57f4 100644 --- a/src/compiler/mapper/integer_bounded_multiplier_8_bit.h +++ b/src/compiler/mapper/integer_bounded_multiplier_8_bit.h @@ -1,6 +1,7 @@ class IntegerBoundedMultiplier8Bit final : public sourcemeta::core::SchemaTransformRule { public: + using mutates = std::true_type; IntegerBoundedMultiplier8Bit() : sourcemeta::core::SchemaTransformRule{ "integer_bounded_multiplier_8_bit", ""} {}; diff --git a/src/compiler/mapper/integer_bounded_multiplier_greater_than_8_bit.h b/src/compiler/mapper/integer_bounded_multiplier_greater_than_8_bit.h index e4879ec2..706eef72 100644 --- a/src/compiler/mapper/integer_bounded_multiplier_greater_than_8_bit.h +++ b/src/compiler/mapper/integer_bounded_multiplier_greater_than_8_bit.h @@ -1,6 +1,7 @@ class IntegerBoundedMultiplierGreaterThan8Bit final : public sourcemeta::core::SchemaTransformRule { public: + using mutates = std::true_type; IntegerBoundedMultiplierGreaterThan8Bit() : sourcemeta::core::SchemaTransformRule{ "integer_bounded_multiplier_greater_than_8_bit", ""} {}; diff --git a/src/compiler/mapper/integer_lower_bound.h b/src/compiler/mapper/integer_lower_bound.h index 30feef33..018a9853 100644 --- a/src/compiler/mapper/integer_lower_bound.h +++ b/src/compiler/mapper/integer_lower_bound.h @@ -1,5 +1,6 @@ class IntegerLowerBound final : public sourcemeta::core::SchemaTransformRule { public: + using mutates = std::true_type; IntegerLowerBound() : sourcemeta::core::SchemaTransformRule{"integer_lower_bound", ""} {}; diff --git a/src/compiler/mapper/integer_lower_bound_multiplier.h b/src/compiler/mapper/integer_lower_bound_multiplier.h index a69fce4b..12107d3c 100644 --- a/src/compiler/mapper/integer_lower_bound_multiplier.h +++ b/src/compiler/mapper/integer_lower_bound_multiplier.h @@ -1,6 +1,7 @@ class IntegerLowerBoundMultiplier final : public sourcemeta::core::SchemaTransformRule { public: + using mutates = std::true_type; IntegerLowerBoundMultiplier() : sourcemeta::core::SchemaTransformRule{"integer_lower_bound_multiplier", ""} {}; diff --git a/src/compiler/mapper/integer_unbound.h b/src/compiler/mapper/integer_unbound.h index c063c7d3..ada86308 100644 --- a/src/compiler/mapper/integer_unbound.h +++ b/src/compiler/mapper/integer_unbound.h @@ -1,5 +1,6 @@ class IntegerUnbound final : public sourcemeta::core::SchemaTransformRule { public: + using mutates = std::true_type; IntegerUnbound() : sourcemeta::core::SchemaTransformRule{"integer_unbound", ""} {}; diff --git a/src/compiler/mapper/integer_unbound_multiplier.h b/src/compiler/mapper/integer_unbound_multiplier.h index d75ded31..ba97a4b7 100644 --- a/src/compiler/mapper/integer_unbound_multiplier.h +++ b/src/compiler/mapper/integer_unbound_multiplier.h @@ -1,6 +1,7 @@ class IntegerUnboundMultiplier final : public sourcemeta::core::SchemaTransformRule { public: + using mutates = std::true_type; IntegerUnboundMultiplier() : sourcemeta::core::SchemaTransformRule{"integer_unbound_multiplier", ""} {}; diff --git a/src/compiler/mapper/integer_upper_bound.h b/src/compiler/mapper/integer_upper_bound.h index b612423b..51c24ff0 100644 --- a/src/compiler/mapper/integer_upper_bound.h +++ b/src/compiler/mapper/integer_upper_bound.h @@ -1,5 +1,6 @@ class IntegerUpperBound final : public sourcemeta::core::SchemaTransformRule { public: + using mutates = std::true_type; IntegerUpperBound() : sourcemeta::core::SchemaTransformRule{"integer_upper_bound", ""} {}; diff --git a/src/compiler/mapper/integer_upper_bound_multiplier.h b/src/compiler/mapper/integer_upper_bound_multiplier.h index 8a660688..8f5cf89a 100644 --- a/src/compiler/mapper/integer_upper_bound_multiplier.h +++ b/src/compiler/mapper/integer_upper_bound_multiplier.h @@ -1,6 +1,7 @@ class IntegerUpperBoundMultiplier final : public sourcemeta::core::SchemaTransformRule { public: + using mutates = std::true_type; IntegerUpperBoundMultiplier() : sourcemeta::core::SchemaTransformRule{"integer_upper_bound_multiplier", ""} {}; diff --git a/src/compiler/mapper/number_arbitrary.h b/src/compiler/mapper/number_arbitrary.h index 87c84ef3..7a9d35b5 100644 --- a/src/compiler/mapper/number_arbitrary.h +++ b/src/compiler/mapper/number_arbitrary.h @@ -1,5 +1,6 @@ class NumberArbitrary final : public sourcemeta::core::SchemaTransformRule { public: + using mutates = std::true_type; NumberArbitrary() : sourcemeta::core::SchemaTransformRule{"number_arbitrary", ""} {}; diff --git a/vendor/core/src/core/jsonschema/include/sourcemeta/core/jsonschema_transform.h b/vendor/core/src/core/jsonschema/include/sourcemeta/core/jsonschema_transform.h index b4470d35..3b0bfa88 100644 --- a/vendor/core/src/core/jsonschema/include/sourcemeta/core/jsonschema_transform.h +++ b/vendor/core/src/core/jsonschema/include/sourcemeta/core/jsonschema_transform.h @@ -18,6 +18,7 @@ #include // std::set #include // std::string #include // std::string_view +#include // std::is_same_v, std::true_type #include // std::move, std::forward, std::pair #include // std::vector @@ -130,7 +131,7 @@ class SOURCEMETA_CORE_JSONSCHEMA_EXPORT SchemaTransformRule { const SchemaResolver &resolver) const -> Result = 0; /// The rule transformation. If this virtual method is not overriden, - /// then the rule condition is considered to not be fixable. + /// then the rule is considered to not mutate the schema. virtual auto transform(JSON &schema, const Result &result) const -> void; private: @@ -227,7 +228,10 @@ class SOURCEMETA_CORE_JSONSCHEMA_EXPORT SchemaTransformer { /// It is the caller's responsibility to not add duplicate rules. template T, typename... Args> auto add(Args &&...args) -> void { - this->rules.push_back(std::make_unique(std::forward(args)...)); + static_assert(requires { typename T::mutates; }); + this->rules.emplace_back( + std::make_unique(std::forward(args)...), + std::is_same_v); } /// Remove a rule from the bundle @@ -270,7 +274,7 @@ class SOURCEMETA_CORE_JSONSCHEMA_EXPORT SchemaTransformer { #if defined(_MSC_VER) #pragma warning(disable : 4251) #endif - std::vector> rules; + std::vector, bool>> rules; #if defined(_MSC_VER) #pragma warning(default : 4251) #endif diff --git a/vendor/core/src/core/jsonschema/transformer.cc b/vendor/core/src/core/jsonschema/transformer.cc index d857f0b5..8d3052b2 100644 --- a/vendor/core/src/core/jsonschema/transformer.cc +++ b/vendor/core/src/core/jsonschema/transformer.cc @@ -36,6 +36,85 @@ auto calculate_health_percentage(const std::size_t subschemas, return static_cast(result); } +auto check_rules( + const sourcemeta::core::JSON &schema, + const sourcemeta::core::SchemaFrame &frame, + const std::vector< + std::pair, bool>> + &rules, + const sourcemeta::core::SchemaWalker &walker, + const sourcemeta::core::SchemaResolver &resolver, + const sourcemeta::core::SchemaTransformer::Callback &callback, + const sourcemeta::core::JSON::String &exclude_keyword, + const bool non_mutating_only) -> std::pair { + std::unordered_set visited; + bool result{true}; + std::size_t subschema_count{0}; + std::size_t subschema_failures{0}; + + for (const auto &entry : frame.locations()) { + if (entry.second.type != + sourcemeta::core::SchemaFrame::LocationType::Resource && + entry.second.type != + sourcemeta::core::SchemaFrame::LocationType::Subschema) { + continue; + } + + const auto [visited_iterator, inserted] = + visited.insert(sourcemeta::core::to_pointer(entry.second.pointer)); + if (!inserted) { + continue; + } + const auto &entry_pointer{*visited_iterator}; + + subschema_count += 1; + + const auto ¤t{sourcemeta::core::get(schema, entry_pointer)}; + const auto current_vocabularies{frame.vocabularies(entry.second, resolver)}; + + bool subschema_failed{false}; + for (const auto &[rule, mutates] : rules) { + // TODO: In this case, can we avoid framing and the entire subschema loop + // if there will be no rules to execute that match this criteria? + if (non_mutating_only && mutates) { + continue; + } + + const auto outcome{rule->check(current, schema, current_vocabularies, + walker, resolver, frame, entry.second, + exclude_keyword)}; + if (outcome.applies) { + subschema_failed = true; + callback(entry_pointer, rule->name(), rule->message(), outcome); + } + } + + if (subschema_failed) { + subschema_failures += 1; + result = false; + } + } + + return {result, + calculate_health_percentage(subschema_count, subschema_failures)}; +} + +auto analyse_frame(sourcemeta::core::SchemaFrame &frame, + const sourcemeta::core::JSON &schema, + const sourcemeta::core::SchemaWalker &walker, + const sourcemeta::core::SchemaResolver &resolver, + const std::string_view default_dialect, + const std::string_view default_id) -> void { + + // If we use the default id when there is already one, framing will duplicate + // the locations leading to duplicate check reports + if (!sourcemeta::core::identify(schema, resolver, default_dialect).empty()) { + frame.analyse(schema, walker, resolver, default_dialect); + } else { + frame.analyse(schema, walker, resolver, default_dialect, default_id); + } +} + } // namespace namespace sourcemeta::core { @@ -99,57 +178,9 @@ auto SchemaTransformer::check(const JSON &schema, const SchemaWalker &walker, const JSON::String &exclude_keyword) const -> std::pair { SchemaFrame frame{SchemaFrame::Mode::References}; - - // If we use the default id when there is already one, framing will duplicate - // the locations leading to duplicate check reports - if (!sourcemeta::core::identify(schema, resolver, default_dialect).empty()) { - frame.analyse(schema, walker, resolver, default_dialect); - } else { - frame.analyse(schema, walker, resolver, default_dialect, default_id); - } - - std::unordered_set visited; - bool result{true}; - std::size_t subschema_count{0}; - std::size_t subschema_failures{0}; - for (const auto &entry : frame.locations()) { - if (entry.second.type != SchemaFrame::LocationType::Resource && - entry.second.type != SchemaFrame::LocationType::Subschema) { - continue; - } - - // Framing may report resource twice or more given default identifiers and - // nested resources, risking reporting the same errors twice - const auto [visited_iterator, inserted] = - visited.insert(to_pointer(entry.second.pointer)); - if (!inserted) { - continue; - } - const auto &entry_pointer{*visited_iterator}; - - subschema_count += 1; - - const auto ¤t{get(schema, entry_pointer)}; - const auto current_vocabularies{frame.vocabularies(entry.second, resolver)}; - bool subresult{true}; - for (const auto &rule : this->rules) { - const auto outcome{rule->check(current, schema, current_vocabularies, - walker, resolver, frame, entry.second, - exclude_keyword)}; - if (outcome.applies) { - subresult = false; - callback(entry_pointer, rule->name(), rule->message(), outcome); - } - } - - if (!subresult) { - subschema_failures += 1; - result = false; - } - } - - return {result, - calculate_health_percentage(subschema_count, subschema_failures)}; + analyse_frame(frame, schema, walker, resolver, default_dialect, default_id); + return check_rules(schema, frame, this->rules, walker, resolver, callback, + exclude_keyword, false); } auto SchemaTransformer::apply(JSON &schema, const SchemaWalker &walker, @@ -164,10 +195,6 @@ auto SchemaTransformer::apply(JSON &schema, const SchemaWalker &walker, ProcessedRuleHasher> processed_rules; - bool result{true}; - std::size_t subschema_count{0}; - std::size_t subschema_failures{0}; - SchemaFrame frame{SchemaFrame::Mode::References}; struct PotentiallyBrokenReference { @@ -182,13 +209,12 @@ auto SchemaTransformer::apply(JSON &schema, const SchemaWalker &walker, while (true) { if (frame.empty()) { - frame.analyse(schema, walker, resolver, default_dialect, default_id); + analyse_frame(frame, schema, walker, resolver, default_dialect, + default_id); } std::unordered_set visited; bool applied{false}; - subschema_count = 0; - subschema_failures = 0; for (const auto &entry : frame.locations()) { if (entry.second.type != SchemaFrame::LocationType::Resource && @@ -204,15 +230,17 @@ auto SchemaTransformer::apply(JSON &schema, const SchemaWalker &walker, continue; } const auto &entry_pointer{*visited_iterator}; - - subschema_count += 1; - auto ¤t{get(schema, entry_pointer)}; const auto current_vocabularies{ frame.vocabularies(entry.second, resolver)}; - bool subschema_failed{false}; - for (const auto &rule : this->rules) { + for (const auto &[rule, mutates] : this->rules) { + // Only process mutating rules in the main loop. + // Non-mutating rules will be processed once at the end. + if (!mutates) { + continue; + } + auto outcome{rule->check(current, schema, current_vocabularies, walker, resolver, frame, entry.second, exclude_keyword)}; @@ -242,18 +270,12 @@ auto SchemaTransformer::apply(JSON &schema, const SchemaWalker &walker, target.relative_pointer}); } - try { - rule->transform(current, outcome); - } catch (const SchemaAbortError &) { - result = false; - subschema_failed = true; - callback(entry_pointer, rule->name(), rule->message(), outcome); - continue; - } + rule->transform(current, outcome); applied = true; - frame.analyse(schema, walker, resolver, default_dialect, default_id); + analyse_frame(frame, schema, walker, resolver, default_dialect, + default_id); const auto new_location{frame.traverse(to_weak_pointer(entry_pointer))}; // The location should still exist after transform @@ -324,10 +346,6 @@ auto SchemaTransformer::apply(JSON &schema, const SchemaWalker &walker, goto core_transformer_start_again; } - - if (subschema_failed) { - subschema_failures += 1; - } } core_transformer_start_again: @@ -336,13 +354,17 @@ auto SchemaTransformer::apply(JSON &schema, const SchemaWalker &walker, } } - return {result, - calculate_health_percentage(subschema_count, subschema_failures)}; + if (frame.empty()) { + analyse_frame(frame, schema, walker, resolver, default_dialect, default_id); + } + + return check_rules(schema, frame, this->rules, walker, resolver, callback, + exclude_keyword, true); } auto SchemaTransformer::remove(const std::string_view name) -> bool { - return std::erase_if(this->rules, [&name](const auto &rule) { - return rule->name() == name; + return std::erase_if(this->rules, [&name](const auto &entry) { + return entry.first->name() == name; }) > 0; } diff --git a/vendor/core/src/extension/alterschema/canonicalizer/const_as_enum.h b/vendor/core/src/extension/alterschema/canonicalizer/const_as_enum.h index bc9dde04..bdee7d14 100644 --- a/vendor/core/src/extension/alterschema/canonicalizer/const_as_enum.h +++ b/vendor/core/src/extension/alterschema/canonicalizer/const_as_enum.h @@ -1,5 +1,6 @@ class ConstAsEnum final : public SchemaTransformRule { public: + using mutates = std::true_type; ConstAsEnum() : SchemaTransformRule{"const_as_enum", "Setting `const` is syntax sugar for an " diff --git a/vendor/core/src/extension/alterschema/canonicalizer/exclusive_maximum_integer_to_maximum.h b/vendor/core/src/extension/alterschema/canonicalizer/exclusive_maximum_integer_to_maximum.h index 5534bcb2..9a9b6deb 100644 --- a/vendor/core/src/extension/alterschema/canonicalizer/exclusive_maximum_integer_to_maximum.h +++ b/vendor/core/src/extension/alterschema/canonicalizer/exclusive_maximum_integer_to_maximum.h @@ -1,5 +1,6 @@ class ExclusiveMaximumIntegerToMaximum final : public SchemaTransformRule { public: + using mutates = std::true_type; ExclusiveMaximumIntegerToMaximum() : SchemaTransformRule{ "exclusive_maximum_integer_to_maximum", diff --git a/vendor/core/src/extension/alterschema/canonicalizer/exclusive_minimum_integer_to_minimum.h b/vendor/core/src/extension/alterschema/canonicalizer/exclusive_minimum_integer_to_minimum.h index 9fd09f63..ea5a3868 100644 --- a/vendor/core/src/extension/alterschema/canonicalizer/exclusive_minimum_integer_to_minimum.h +++ b/vendor/core/src/extension/alterschema/canonicalizer/exclusive_minimum_integer_to_minimum.h @@ -1,5 +1,6 @@ class ExclusiveMinimumIntegerToMinimum final : public SchemaTransformRule { public: + using mutates = std::true_type; ExclusiveMinimumIntegerToMinimum() : SchemaTransformRule{ "exclusive_minimum_integer_to_minimum", diff --git a/vendor/core/src/extension/alterschema/canonicalizer/items_implicit.h b/vendor/core/src/extension/alterschema/canonicalizer/items_implicit.h index 008a50f9..e41a5423 100644 --- a/vendor/core/src/extension/alterschema/canonicalizer/items_implicit.h +++ b/vendor/core/src/extension/alterschema/canonicalizer/items_implicit.h @@ -1,5 +1,6 @@ class ItemsImplicit final : public SchemaTransformRule { public: + using mutates = std::true_type; ItemsImplicit() : SchemaTransformRule{"items_implicit", "Every array has an implicit `items` " diff --git a/vendor/core/src/extension/alterschema/canonicalizer/max_contains_covered_by_max_items.h b/vendor/core/src/extension/alterschema/canonicalizer/max_contains_covered_by_max_items.h index 3946bcc1..5c46adcb 100644 --- a/vendor/core/src/extension/alterschema/canonicalizer/max_contains_covered_by_max_items.h +++ b/vendor/core/src/extension/alterschema/canonicalizer/max_contains_covered_by_max_items.h @@ -1,5 +1,6 @@ class MaxContainsCoveredByMaxItems final : public SchemaTransformRule { public: + using mutates = std::true_type; MaxContainsCoveredByMaxItems() : SchemaTransformRule{ "max_contains_covered_by_max_items", diff --git a/vendor/core/src/extension/alterschema/canonicalizer/min_items_given_min_contains.h b/vendor/core/src/extension/alterschema/canonicalizer/min_items_given_min_contains.h index c3337f04..a2ea488e 100644 --- a/vendor/core/src/extension/alterschema/canonicalizer/min_items_given_min_contains.h +++ b/vendor/core/src/extension/alterschema/canonicalizer/min_items_given_min_contains.h @@ -1,5 +1,6 @@ class MinItemsGivenMinContains final : public SchemaTransformRule { public: + using mutates = std::true_type; MinItemsGivenMinContains() : SchemaTransformRule{ "min_items_given_min_contains", diff --git a/vendor/core/src/extension/alterschema/canonicalizer/min_items_implicit.h b/vendor/core/src/extension/alterschema/canonicalizer/min_items_implicit.h index ca0d00c8..af88a01b 100644 --- a/vendor/core/src/extension/alterschema/canonicalizer/min_items_implicit.h +++ b/vendor/core/src/extension/alterschema/canonicalizer/min_items_implicit.h @@ -1,5 +1,6 @@ class MinItemsImplicit final : public SchemaTransformRule { public: + using mutates = std::true_type; MinItemsImplicit() : SchemaTransformRule{"min_items_implicit", "Every array has a minimum size of zero items"} {}; diff --git a/vendor/core/src/extension/alterschema/canonicalizer/min_length_implicit.h b/vendor/core/src/extension/alterschema/canonicalizer/min_length_implicit.h index 1eba9e35..18dd44db 100644 --- a/vendor/core/src/extension/alterschema/canonicalizer/min_length_implicit.h +++ b/vendor/core/src/extension/alterschema/canonicalizer/min_length_implicit.h @@ -1,5 +1,6 @@ class MinLengthImplicit final : public SchemaTransformRule { public: + using mutates = std::true_type; MinLengthImplicit() : SchemaTransformRule{ "min_length_implicit", diff --git a/vendor/core/src/extension/alterschema/canonicalizer/min_properties_covered_by_required.h b/vendor/core/src/extension/alterschema/canonicalizer/min_properties_covered_by_required.h index 40f8a613..a0171964 100644 --- a/vendor/core/src/extension/alterschema/canonicalizer/min_properties_covered_by_required.h +++ b/vendor/core/src/extension/alterschema/canonicalizer/min_properties_covered_by_required.h @@ -1,5 +1,6 @@ class MinPropertiesCoveredByRequired final : public SchemaTransformRule { public: + using mutates = std::true_type; MinPropertiesCoveredByRequired() : SchemaTransformRule{ "min_properties_covered_by_required", diff --git a/vendor/core/src/extension/alterschema/canonicalizer/min_properties_implicit.h b/vendor/core/src/extension/alterschema/canonicalizer/min_properties_implicit.h index b1cb98ec..9954e6c8 100644 --- a/vendor/core/src/extension/alterschema/canonicalizer/min_properties_implicit.h +++ b/vendor/core/src/extension/alterschema/canonicalizer/min_properties_implicit.h @@ -1,5 +1,6 @@ class MinPropertiesImplicit final : public SchemaTransformRule { public: + using mutates = std::true_type; MinPropertiesImplicit() : SchemaTransformRule{ "min_properties_implicit", diff --git a/vendor/core/src/extension/alterschema/canonicalizer/multiple_of_implicit.h b/vendor/core/src/extension/alterschema/canonicalizer/multiple_of_implicit.h index 32a2c864..fe809345 100644 --- a/vendor/core/src/extension/alterschema/canonicalizer/multiple_of_implicit.h +++ b/vendor/core/src/extension/alterschema/canonicalizer/multiple_of_implicit.h @@ -1,5 +1,6 @@ class MultipleOfImplicit final : public SchemaTransformRule { public: + using mutates = std::true_type; MultipleOfImplicit() : SchemaTransformRule{"multiple_of_implicit", "The unit of `multipleOf` is the integer 1"} {}; diff --git a/vendor/core/src/extension/alterschema/canonicalizer/no_metadata.h b/vendor/core/src/extension/alterschema/canonicalizer/no_metadata.h index 80b53c25..f2f9dbb6 100644 --- a/vendor/core/src/extension/alterschema/canonicalizer/no_metadata.h +++ b/vendor/core/src/extension/alterschema/canonicalizer/no_metadata.h @@ -1,5 +1,6 @@ class NoMetadata final : public SchemaTransformRule { public: + using mutates = std::true_type; NoMetadata() : SchemaTransformRule{"no_metadata", "Annotations, comments, and unknown keywords have " diff --git a/vendor/core/src/extension/alterschema/canonicalizer/properties_implicit.h b/vendor/core/src/extension/alterschema/canonicalizer/properties_implicit.h index 6b36eb87..5a051e5c 100644 --- a/vendor/core/src/extension/alterschema/canonicalizer/properties_implicit.h +++ b/vendor/core/src/extension/alterschema/canonicalizer/properties_implicit.h @@ -1,5 +1,6 @@ class PropertiesImplicit final : public SchemaTransformRule { public: + using mutates = std::true_type; PropertiesImplicit() : SchemaTransformRule{"properties_implicit", "Every object has an implicit `properties` " diff --git a/vendor/core/src/extension/alterschema/canonicalizer/type_array_to_any_of.h b/vendor/core/src/extension/alterschema/canonicalizer/type_array_to_any_of.h index 7c55c172..7b62a78b 100644 --- a/vendor/core/src/extension/alterschema/canonicalizer/type_array_to_any_of.h +++ b/vendor/core/src/extension/alterschema/canonicalizer/type_array_to_any_of.h @@ -1,5 +1,6 @@ class TypeArrayToAnyOf final : public SchemaTransformRule { public: + using mutates = std::true_type; TypeArrayToAnyOf() : SchemaTransformRule{ "type_array_to_any_of", diff --git a/vendor/core/src/extension/alterschema/canonicalizer/type_boolean_as_enum.h b/vendor/core/src/extension/alterschema/canonicalizer/type_boolean_as_enum.h index 565a65b5..8b7e910c 100644 --- a/vendor/core/src/extension/alterschema/canonicalizer/type_boolean_as_enum.h +++ b/vendor/core/src/extension/alterschema/canonicalizer/type_boolean_as_enum.h @@ -1,5 +1,6 @@ class TypeBooleanAsEnum final : public SchemaTransformRule { public: + using mutates = std::true_type; TypeBooleanAsEnum() : SchemaTransformRule{ "type_boolean_as_enum", diff --git a/vendor/core/src/extension/alterschema/canonicalizer/type_null_as_enum.h b/vendor/core/src/extension/alterschema/canonicalizer/type_null_as_enum.h index 92eb429b..6f8ba8e9 100644 --- a/vendor/core/src/extension/alterschema/canonicalizer/type_null_as_enum.h +++ b/vendor/core/src/extension/alterschema/canonicalizer/type_null_as_enum.h @@ -1,5 +1,6 @@ class TypeNullAsEnum final : public SchemaTransformRule { public: + using mutates = std::true_type; TypeNullAsEnum() : SchemaTransformRule{ "type_null_as_enum", diff --git a/vendor/core/src/extension/alterschema/canonicalizer/type_union_implicit.h b/vendor/core/src/extension/alterschema/canonicalizer/type_union_implicit.h index 11fb779d..7e3239ef 100644 --- a/vendor/core/src/extension/alterschema/canonicalizer/type_union_implicit.h +++ b/vendor/core/src/extension/alterschema/canonicalizer/type_union_implicit.h @@ -1,5 +1,6 @@ class TypeUnionImplicit final : public SchemaTransformRule { public: + using mutates = std::true_type; TypeUnionImplicit() : SchemaTransformRule{ "type_union_implicit", diff --git a/vendor/core/src/extension/alterschema/common/allof_false_simplify.h b/vendor/core/src/extension/alterschema/common/allof_false_simplify.h index d15c983b..38577cdd 100644 --- a/vendor/core/src/extension/alterschema/common/allof_false_simplify.h +++ b/vendor/core/src/extension/alterschema/common/allof_false_simplify.h @@ -1,5 +1,6 @@ class AllOfFalseSimplify final : public SchemaTransformRule { public: + using mutates = std::true_type; AllOfFalseSimplify() : SchemaTransformRule{"allof_false_simplify", "When `allOf` contains a `false` branch, the " diff --git a/vendor/core/src/extension/alterschema/common/anyof_false_simplify.h b/vendor/core/src/extension/alterschema/common/anyof_false_simplify.h index 57584d59..7602de8c 100644 --- a/vendor/core/src/extension/alterschema/common/anyof_false_simplify.h +++ b/vendor/core/src/extension/alterschema/common/anyof_false_simplify.h @@ -1,5 +1,6 @@ class AnyOfFalseSimplify final : public SchemaTransformRule { public: + using mutates = std::true_type; AnyOfFalseSimplify() : SchemaTransformRule{"anyof_false_simplify", "An `anyOf` of a single `false` branch is " diff --git a/vendor/core/src/extension/alterschema/common/anyof_remove_false_schemas.h b/vendor/core/src/extension/alterschema/common/anyof_remove_false_schemas.h index 91c2764c..7e235bbf 100644 --- a/vendor/core/src/extension/alterschema/common/anyof_remove_false_schemas.h +++ b/vendor/core/src/extension/alterschema/common/anyof_remove_false_schemas.h @@ -1,5 +1,6 @@ class AnyOfRemoveFalseSchemas final : public SchemaTransformRule { public: + using mutates = std::true_type; AnyOfRemoveFalseSchemas() : SchemaTransformRule{ "anyof_remove_false_schemas", diff --git a/vendor/core/src/extension/alterschema/common/anyof_true_simplify.h b/vendor/core/src/extension/alterschema/common/anyof_true_simplify.h index aaca78e8..2ee7c30a 100644 --- a/vendor/core/src/extension/alterschema/common/anyof_true_simplify.h +++ b/vendor/core/src/extension/alterschema/common/anyof_true_simplify.h @@ -1,5 +1,6 @@ class AnyOfTrueSimplify final : public SchemaTransformRule { public: + using mutates = std::true_type; AnyOfTrueSimplify() : SchemaTransformRule{ "anyof_true_simplify", diff --git a/vendor/core/src/extension/alterschema/common/const_with_type.h b/vendor/core/src/extension/alterschema/common/const_with_type.h index 261f528f..4cf07ae8 100644 --- a/vendor/core/src/extension/alterschema/common/const_with_type.h +++ b/vendor/core/src/extension/alterschema/common/const_with_type.h @@ -1,5 +1,6 @@ class ConstWithType final : public SchemaTransformRule { public: + using mutates = std::true_type; ConstWithType() : SchemaTransformRule{ "const_with_type", diff --git a/vendor/core/src/extension/alterschema/common/content_media_type_without_encoding.h b/vendor/core/src/extension/alterschema/common/content_media_type_without_encoding.h index 745f3a94..b7168674 100644 --- a/vendor/core/src/extension/alterschema/common/content_media_type_without_encoding.h +++ b/vendor/core/src/extension/alterschema/common/content_media_type_without_encoding.h @@ -1,5 +1,6 @@ class ContentMediaTypeWithoutEncoding final : public SchemaTransformRule { public: + using mutates = std::true_type; ContentMediaTypeWithoutEncoding() : SchemaTransformRule{ "content_media_type_without_encoding", diff --git a/vendor/core/src/extension/alterschema/common/content_schema_without_media_type.h b/vendor/core/src/extension/alterschema/common/content_schema_without_media_type.h index fce5a85e..8f836fa8 100644 --- a/vendor/core/src/extension/alterschema/common/content_schema_without_media_type.h +++ b/vendor/core/src/extension/alterschema/common/content_schema_without_media_type.h @@ -3,6 +3,7 @@ class ContentSchemaWithoutMediaType final : public SchemaTransformRule { static inline const std::string KEYWORD{"contentSchema"}; public: + using mutates = std::true_type; ContentSchemaWithoutMediaType() : SchemaTransformRule{ "content_schema_without_media_type", diff --git a/vendor/core/src/extension/alterschema/common/dependencies_property_tautology.h b/vendor/core/src/extension/alterschema/common/dependencies_property_tautology.h index 125a20fb..f393089b 100644 --- a/vendor/core/src/extension/alterschema/common/dependencies_property_tautology.h +++ b/vendor/core/src/extension/alterschema/common/dependencies_property_tautology.h @@ -1,5 +1,6 @@ class DependenciesPropertyTautology final : public SchemaTransformRule { public: + using mutates = std::true_type; DependenciesPropertyTautology() : SchemaTransformRule{ "dependencies_property_tautology", diff --git a/vendor/core/src/extension/alterschema/common/dependent_required_tautology.h b/vendor/core/src/extension/alterschema/common/dependent_required_tautology.h index 30f174e0..071449eb 100644 --- a/vendor/core/src/extension/alterschema/common/dependent_required_tautology.h +++ b/vendor/core/src/extension/alterschema/common/dependent_required_tautology.h @@ -1,5 +1,6 @@ class DependentRequiredTautology final : public SchemaTransformRule { public: + using mutates = std::true_type; DependentRequiredTautology() : SchemaTransformRule{ "dependent_required_tautology", diff --git a/vendor/core/src/extension/alterschema/common/draft_official_dialect_without_empty_fragment.h b/vendor/core/src/extension/alterschema/common/draft_official_dialect_without_empty_fragment.h index 060752ec..32ac4725 100644 --- a/vendor/core/src/extension/alterschema/common/draft_official_dialect_without_empty_fragment.h +++ b/vendor/core/src/extension/alterschema/common/draft_official_dialect_without_empty_fragment.h @@ -1,6 +1,7 @@ class DraftOfficialDialectWithoutEmptyFragment final : public SchemaTransformRule { public: + using mutates = std::true_type; DraftOfficialDialectWithoutEmptyFragment() : SchemaTransformRule{"draft_official_dialect_without_empty_fragment", "The official dialect URI of Draft 7 and older " diff --git a/vendor/core/src/extension/alterschema/common/draft_ref_siblings.h b/vendor/core/src/extension/alterschema/common/draft_ref_siblings.h index d7203637..c34b9de6 100644 --- a/vendor/core/src/extension/alterschema/common/draft_ref_siblings.h +++ b/vendor/core/src/extension/alterschema/common/draft_ref_siblings.h @@ -1,5 +1,6 @@ class DraftRefSiblings final : public SchemaTransformRule { public: + using mutates = std::true_type; DraftRefSiblings() : SchemaTransformRule{"draft_ref_siblings", "In Draft 7 and older dialects, keywords sibling " diff --git a/vendor/core/src/extension/alterschema/common/drop_allof_empty_schemas.h b/vendor/core/src/extension/alterschema/common/drop_allof_empty_schemas.h index 31abc14e..f607e00b 100644 --- a/vendor/core/src/extension/alterschema/common/drop_allof_empty_schemas.h +++ b/vendor/core/src/extension/alterschema/common/drop_allof_empty_schemas.h @@ -1,5 +1,6 @@ class DropAllOfEmptySchemas final : public SchemaTransformRule { public: + using mutates = std::true_type; DropAllOfEmptySchemas() : SchemaTransformRule{"drop_allof_empty_schemas", "Empty schemas in `allOf` are redundant and can be " diff --git a/vendor/core/src/extension/alterschema/common/duplicate_allof_branches.h b/vendor/core/src/extension/alterschema/common/duplicate_allof_branches.h index cf39f146..ab379c50 100644 --- a/vendor/core/src/extension/alterschema/common/duplicate_allof_branches.h +++ b/vendor/core/src/extension/alterschema/common/duplicate_allof_branches.h @@ -1,5 +1,6 @@ class DuplicateAllOfBranches final : public SchemaTransformRule { public: + using mutates = std::true_type; DuplicateAllOfBranches() : SchemaTransformRule{ "duplicate_allof_branches", diff --git a/vendor/core/src/extension/alterschema/common/duplicate_anyof_branches.h b/vendor/core/src/extension/alterschema/common/duplicate_anyof_branches.h index 1465628b..257d2ab7 100644 --- a/vendor/core/src/extension/alterschema/common/duplicate_anyof_branches.h +++ b/vendor/core/src/extension/alterschema/common/duplicate_anyof_branches.h @@ -1,5 +1,6 @@ class DuplicateAnyOfBranches final : public SchemaTransformRule { public: + using mutates = std::true_type; DuplicateAnyOfBranches() : SchemaTransformRule{ "duplicate_anyof_branches", diff --git a/vendor/core/src/extension/alterschema/common/duplicate_enum_values.h b/vendor/core/src/extension/alterschema/common/duplicate_enum_values.h index c3fec367..75c0e797 100644 --- a/vendor/core/src/extension/alterschema/common/duplicate_enum_values.h +++ b/vendor/core/src/extension/alterschema/common/duplicate_enum_values.h @@ -1,5 +1,6 @@ class DuplicateEnumValues final : public SchemaTransformRule { public: + using mutates = std::true_type; DuplicateEnumValues() : SchemaTransformRule{"duplicate_enum_values", "Setting duplicate values in `enum` is " diff --git a/vendor/core/src/extension/alterschema/common/duplicate_required_values.h b/vendor/core/src/extension/alterschema/common/duplicate_required_values.h index d1fd6ad2..2b08057d 100644 --- a/vendor/core/src/extension/alterschema/common/duplicate_required_values.h +++ b/vendor/core/src/extension/alterschema/common/duplicate_required_values.h @@ -1,5 +1,6 @@ class DuplicateRequiredValues final : public SchemaTransformRule { public: + using mutates = std::true_type; DuplicateRequiredValues() : SchemaTransformRule{ "duplicate_required_values", diff --git a/vendor/core/src/extension/alterschema/common/else_empty.h b/vendor/core/src/extension/alterschema/common/else_empty.h index fe883ad5..a1e8914b 100644 --- a/vendor/core/src/extension/alterschema/common/else_empty.h +++ b/vendor/core/src/extension/alterschema/common/else_empty.h @@ -3,6 +3,7 @@ class ElseEmpty final : public SchemaTransformRule { static inline const std::string KEYWORD{"else"}; public: + using mutates = std::true_type; ElseEmpty() : SchemaTransformRule{"else_empty", "Setting the `else` keyword to the empty schema " diff --git a/vendor/core/src/extension/alterschema/common/else_without_if.h b/vendor/core/src/extension/alterschema/common/else_without_if.h index 7b871dd0..fbca00c1 100644 --- a/vendor/core/src/extension/alterschema/common/else_without_if.h +++ b/vendor/core/src/extension/alterschema/common/else_without_if.h @@ -3,6 +3,7 @@ class ElseWithoutIf final : public SchemaTransformRule { static inline const std::string KEYWORD{"else"}; public: + using mutates = std::true_type; ElseWithoutIf() : SchemaTransformRule{"else_without_if", "The `else` keyword is meaningless " diff --git a/vendor/core/src/extension/alterschema/common/empty_object_as_true.h b/vendor/core/src/extension/alterschema/common/empty_object_as_true.h index 25702228..ead99ce3 100644 --- a/vendor/core/src/extension/alterschema/common/empty_object_as_true.h +++ b/vendor/core/src/extension/alterschema/common/empty_object_as_true.h @@ -1,5 +1,6 @@ class EmptyObjectAsTrue final : public SchemaTransformRule { public: + using mutates = std::true_type; EmptyObjectAsTrue() : SchemaTransformRule{ "empty_object_as_true", diff --git a/vendor/core/src/extension/alterschema/common/enum_with_type.h b/vendor/core/src/extension/alterschema/common/enum_with_type.h index 350f73d8..db8f421f 100644 --- a/vendor/core/src/extension/alterschema/common/enum_with_type.h +++ b/vendor/core/src/extension/alterschema/common/enum_with_type.h @@ -1,5 +1,6 @@ class EnumWithType final : public SchemaTransformRule { public: + using mutates = std::true_type; EnumWithType() : SchemaTransformRule{ "enum_with_type", diff --git a/vendor/core/src/extension/alterschema/common/equal_numeric_bounds_to_enum.h b/vendor/core/src/extension/alterschema/common/equal_numeric_bounds_to_enum.h index 698fa93a..b2a4bf31 100644 --- a/vendor/core/src/extension/alterschema/common/equal_numeric_bounds_to_enum.h +++ b/vendor/core/src/extension/alterschema/common/equal_numeric_bounds_to_enum.h @@ -1,5 +1,6 @@ class EqualNumericBoundsToEnum final : public SchemaTransformRule { public: + using mutates = std::true_type; EqualNumericBoundsToEnum() : SchemaTransformRule{ "equal_numeric_bounds_to_enum", diff --git a/vendor/core/src/extension/alterschema/common/exclusive_maximum_number_and_maximum.h b/vendor/core/src/extension/alterschema/common/exclusive_maximum_number_and_maximum.h index 6a1426b7..a026fe5d 100644 --- a/vendor/core/src/extension/alterschema/common/exclusive_maximum_number_and_maximum.h +++ b/vendor/core/src/extension/alterschema/common/exclusive_maximum_number_and_maximum.h @@ -1,5 +1,6 @@ class ExclusiveMaximumNumberAndMaximum final : public SchemaTransformRule { public: + using mutates = std::true_type; ExclusiveMaximumNumberAndMaximum() : SchemaTransformRule{ "exclusive_maximum_number_and_maximum", diff --git a/vendor/core/src/extension/alterschema/common/exclusive_minimum_number_and_minimum.h b/vendor/core/src/extension/alterschema/common/exclusive_minimum_number_and_minimum.h index 53c0e997..175b5789 100644 --- a/vendor/core/src/extension/alterschema/common/exclusive_minimum_number_and_minimum.h +++ b/vendor/core/src/extension/alterschema/common/exclusive_minimum_number_and_minimum.h @@ -1,5 +1,6 @@ class ExclusiveMinimumNumberAndMinimum final : public SchemaTransformRule { public: + using mutates = std::true_type; ExclusiveMinimumNumberAndMinimum() : SchemaTransformRule{ "exclusive_minimum_number_and_minimum", diff --git a/vendor/core/src/extension/alterschema/common/if_without_then_else.h b/vendor/core/src/extension/alterschema/common/if_without_then_else.h index 3f19961c..377ca87a 100644 --- a/vendor/core/src/extension/alterschema/common/if_without_then_else.h +++ b/vendor/core/src/extension/alterschema/common/if_without_then_else.h @@ -3,6 +3,7 @@ class IfWithoutThenElse final : public SchemaTransformRule { static inline const std::string KEYWORD{"if"}; public: + using mutates = std::true_type; IfWithoutThenElse() : SchemaTransformRule{ "if_without_then_else", diff --git a/vendor/core/src/extension/alterschema/common/ignored_metaschema.h b/vendor/core/src/extension/alterschema/common/ignored_metaschema.h index 4fa07a18..951def6d 100644 --- a/vendor/core/src/extension/alterschema/common/ignored_metaschema.h +++ b/vendor/core/src/extension/alterschema/common/ignored_metaschema.h @@ -1,5 +1,6 @@ class IgnoredMetaschema final : public SchemaTransformRule { public: + using mutates = std::true_type; IgnoredMetaschema() : SchemaTransformRule{ "ignored_metaschema", diff --git a/vendor/core/src/extension/alterschema/common/max_contains_without_contains.h b/vendor/core/src/extension/alterschema/common/max_contains_without_contains.h index 00944a49..1cb43802 100644 --- a/vendor/core/src/extension/alterschema/common/max_contains_without_contains.h +++ b/vendor/core/src/extension/alterschema/common/max_contains_without_contains.h @@ -1,5 +1,6 @@ class MaxContainsWithoutContains final : public SchemaTransformRule { public: + using mutates = std::true_type; MaxContainsWithoutContains() : SchemaTransformRule{"max_contains_without_contains", "The `maxContains` keyword is meaningless " diff --git a/vendor/core/src/extension/alterschema/common/maximum_real_for_integer.h b/vendor/core/src/extension/alterschema/common/maximum_real_for_integer.h index 6494672c..10610dda 100644 --- a/vendor/core/src/extension/alterschema/common/maximum_real_for_integer.h +++ b/vendor/core/src/extension/alterschema/common/maximum_real_for_integer.h @@ -1,5 +1,6 @@ class MaximumRealForInteger final : public SchemaTransformRule { public: + using mutates = std::true_type; MaximumRealForInteger() : SchemaTransformRule{ "maximum_real_for_integer", diff --git a/vendor/core/src/extension/alterschema/common/min_contains_without_contains.h b/vendor/core/src/extension/alterschema/common/min_contains_without_contains.h index 5f14de34..c0845eb1 100644 --- a/vendor/core/src/extension/alterschema/common/min_contains_without_contains.h +++ b/vendor/core/src/extension/alterschema/common/min_contains_without_contains.h @@ -1,5 +1,6 @@ class MinContainsWithoutContains final : public SchemaTransformRule { public: + using mutates = std::true_type; MinContainsWithoutContains() : SchemaTransformRule{"min_contains_without_contains", "The `minContains` keyword is meaningless " diff --git a/vendor/core/src/extension/alterschema/common/minimum_real_for_integer.h b/vendor/core/src/extension/alterschema/common/minimum_real_for_integer.h index 65db9098..2fce6472 100644 --- a/vendor/core/src/extension/alterschema/common/minimum_real_for_integer.h +++ b/vendor/core/src/extension/alterschema/common/minimum_real_for_integer.h @@ -1,5 +1,6 @@ class MinimumRealForInteger final : public SchemaTransformRule { public: + using mutates = std::true_type; MinimumRealForInteger() : SchemaTransformRule{ "minimum_real_for_integer", diff --git a/vendor/core/src/extension/alterschema/common/modern_official_dialect_with_empty_fragment.h b/vendor/core/src/extension/alterschema/common/modern_official_dialect_with_empty_fragment.h index caa12e08..2a7fe5a6 100644 --- a/vendor/core/src/extension/alterschema/common/modern_official_dialect_with_empty_fragment.h +++ b/vendor/core/src/extension/alterschema/common/modern_official_dialect_with_empty_fragment.h @@ -1,6 +1,7 @@ class ModernOfficialDialectWithEmptyFragment final : public SchemaTransformRule { public: + using mutates = std::true_type; ModernOfficialDialectWithEmptyFragment() : SchemaTransformRule{ "modern_official_dialect_with_empty_fragment", diff --git a/vendor/core/src/extension/alterschema/common/non_applicable_additional_items.h b/vendor/core/src/extension/alterschema/common/non_applicable_additional_items.h index 6b7f39e2..0a70a374 100644 --- a/vendor/core/src/extension/alterschema/common/non_applicable_additional_items.h +++ b/vendor/core/src/extension/alterschema/common/non_applicable_additional_items.h @@ -3,6 +3,7 @@ class NonApplicableAdditionalItems final : public SchemaTransformRule { static inline const std::string KEYWORD{"additionalItems"}; public: + using mutates = std::true_type; NonApplicableAdditionalItems() : SchemaTransformRule{ "non_applicable_additional_items", diff --git a/vendor/core/src/extension/alterschema/common/non_applicable_enum_validation_keywords.h b/vendor/core/src/extension/alterschema/common/non_applicable_enum_validation_keywords.h index 6de098fe..32c60648 100644 --- a/vendor/core/src/extension/alterschema/common/non_applicable_enum_validation_keywords.h +++ b/vendor/core/src/extension/alterschema/common/non_applicable_enum_validation_keywords.h @@ -1,5 +1,6 @@ class NonApplicableEnumValidationKeywords final : public SchemaTransformRule { public: + using mutates = std::true_type; NonApplicableEnumValidationKeywords() : SchemaTransformRule{ "non_applicable_enum_validation_keywords", diff --git a/vendor/core/src/extension/alterschema/common/non_applicable_type_specific_keywords.h b/vendor/core/src/extension/alterschema/common/non_applicable_type_specific_keywords.h index 98bebe19..f421f5a3 100644 --- a/vendor/core/src/extension/alterschema/common/non_applicable_type_specific_keywords.h +++ b/vendor/core/src/extension/alterschema/common/non_applicable_type_specific_keywords.h @@ -1,5 +1,6 @@ class NonApplicableTypeSpecificKeywords final : public SchemaTransformRule { public: + using mutates = std::true_type; NonApplicableTypeSpecificKeywords() : SchemaTransformRule{"non_applicable_type_specific_keywords", "Avoid keywords that don't apply to the type or " diff --git a/vendor/core/src/extension/alterschema/common/not_false.h b/vendor/core/src/extension/alterschema/common/not_false.h index f9016890..a8f6fa1f 100644 --- a/vendor/core/src/extension/alterschema/common/not_false.h +++ b/vendor/core/src/extension/alterschema/common/not_false.h @@ -3,6 +3,7 @@ class NotFalse final : public SchemaTransformRule { static inline const std::string KEYWORD{"not"}; public: + using mutates = std::true_type; NotFalse() : SchemaTransformRule{"not_false", "Setting the `not` keyword to `false` imposes no " diff --git a/vendor/core/src/extension/alterschema/common/oneof_false_simplify.h b/vendor/core/src/extension/alterschema/common/oneof_false_simplify.h index 48922bec..aa89fb5f 100644 --- a/vendor/core/src/extension/alterschema/common/oneof_false_simplify.h +++ b/vendor/core/src/extension/alterschema/common/oneof_false_simplify.h @@ -1,5 +1,6 @@ class OneOfFalseSimplify final : public SchemaTransformRule { public: + using mutates = std::true_type; OneOfFalseSimplify() : SchemaTransformRule{"oneof_false_simplify", "A `oneOf` of a single `false` branch is " diff --git a/vendor/core/src/extension/alterschema/common/oneof_to_anyof_disjoint_types.h b/vendor/core/src/extension/alterschema/common/oneof_to_anyof_disjoint_types.h index 2f6ae11f..31657734 100644 --- a/vendor/core/src/extension/alterschema/common/oneof_to_anyof_disjoint_types.h +++ b/vendor/core/src/extension/alterschema/common/oneof_to_anyof_disjoint_types.h @@ -1,5 +1,6 @@ class OneOfToAnyOfDisjointTypes final : public SchemaTransformRule { public: + using mutates = std::true_type; OneOfToAnyOfDisjointTypes() : SchemaTransformRule{ "oneof_to_anyof_disjoint_types", diff --git a/vendor/core/src/extension/alterschema/common/orphan_definitions.h b/vendor/core/src/extension/alterschema/common/orphan_definitions.h index 426cd562..d1054b4b 100644 --- a/vendor/core/src/extension/alterschema/common/orphan_definitions.h +++ b/vendor/core/src/extension/alterschema/common/orphan_definitions.h @@ -1,5 +1,6 @@ class OrphanDefinitions final : public SchemaTransformRule { public: + using mutates = std::true_type; OrphanDefinitions() : SchemaTransformRule{ "orphan_definitions", diff --git a/vendor/core/src/extension/alterschema/common/required_properties_in_properties.h b/vendor/core/src/extension/alterschema/common/required_properties_in_properties.h index 8cddcb46..bf8458b0 100644 --- a/vendor/core/src/extension/alterschema/common/required_properties_in_properties.h +++ b/vendor/core/src/extension/alterschema/common/required_properties_in_properties.h @@ -1,5 +1,6 @@ class RequiredPropertiesInProperties final : public SchemaTransformRule { public: + using mutates = std::true_type; RequiredPropertiesInProperties() : SchemaTransformRule{ "required_properties_in_properties", diff --git a/vendor/core/src/extension/alterschema/common/single_type_array.h b/vendor/core/src/extension/alterschema/common/single_type_array.h index 9aea9a30..e1e9f29f 100644 --- a/vendor/core/src/extension/alterschema/common/single_type_array.h +++ b/vendor/core/src/extension/alterschema/common/single_type_array.h @@ -1,5 +1,6 @@ class SingleTypeArray final : public SchemaTransformRule { public: + using mutates = std::true_type; SingleTypeArray() : SchemaTransformRule{"single_type_array", "Setting `type` to an array of a single type is " diff --git a/vendor/core/src/extension/alterschema/common/then_empty.h b/vendor/core/src/extension/alterschema/common/then_empty.h index 36c1d220..4b0cb78a 100644 --- a/vendor/core/src/extension/alterschema/common/then_empty.h +++ b/vendor/core/src/extension/alterschema/common/then_empty.h @@ -3,6 +3,7 @@ class ThenEmpty final : public SchemaTransformRule { static inline const std::string KEYWORD{"then"}; public: + using mutates = std::true_type; ThenEmpty() : SchemaTransformRule{"then_empty", "Setting the `then` keyword to the empty schema " diff --git a/vendor/core/src/extension/alterschema/common/then_without_if.h b/vendor/core/src/extension/alterschema/common/then_without_if.h index ed557568..b1e33231 100644 --- a/vendor/core/src/extension/alterschema/common/then_without_if.h +++ b/vendor/core/src/extension/alterschema/common/then_without_if.h @@ -3,6 +3,7 @@ class ThenWithoutIf final : public SchemaTransformRule { static inline const std::string KEYWORD{"then"}; public: + using mutates = std::true_type; ThenWithoutIf() : SchemaTransformRule{"then_without_if", "The `then` keyword is meaningless " diff --git a/vendor/core/src/extension/alterschema/common/unknown_keywords_prefix.h b/vendor/core/src/extension/alterschema/common/unknown_keywords_prefix.h index 19c418a4..2c0bf078 100644 --- a/vendor/core/src/extension/alterschema/common/unknown_keywords_prefix.h +++ b/vendor/core/src/extension/alterschema/common/unknown_keywords_prefix.h @@ -1,5 +1,6 @@ class UnknownKeywordsPrefix final : public SchemaTransformRule { public: + using mutates = std::true_type; UnknownKeywordsPrefix() : SchemaTransformRule{ "unknown_keywords_prefix", diff --git a/vendor/core/src/extension/alterschema/common/unknown_local_ref.h b/vendor/core/src/extension/alterschema/common/unknown_local_ref.h index c204a319..ad518c97 100644 --- a/vendor/core/src/extension/alterschema/common/unknown_local_ref.h +++ b/vendor/core/src/extension/alterschema/common/unknown_local_ref.h @@ -3,6 +3,7 @@ class UnknownLocalRef final : public SchemaTransformRule { static inline const std::string KEYWORD{"$ref"}; public: + using mutates = std::true_type; UnknownLocalRef() : SchemaTransformRule{ "unknown_local_ref", diff --git a/vendor/core/src/extension/alterschema/common/unnecessary_allof_ref_wrapper_draft.h b/vendor/core/src/extension/alterschema/common/unnecessary_allof_ref_wrapper_draft.h index e5992307..7f7b6af9 100644 --- a/vendor/core/src/extension/alterschema/common/unnecessary_allof_ref_wrapper_draft.h +++ b/vendor/core/src/extension/alterschema/common/unnecessary_allof_ref_wrapper_draft.h @@ -1,5 +1,6 @@ class UnnecessaryAllOfRefWrapperDraft final : public SchemaTransformRule { public: + using mutates = std::true_type; UnnecessaryAllOfRefWrapperDraft() : SchemaTransformRule{"unnecessary_allof_ref_wrapper_draft", "Wrapping `$ref` in `allOf` is only necessary if " diff --git a/vendor/core/src/extension/alterschema/common/unnecessary_allof_ref_wrapper_modern.h b/vendor/core/src/extension/alterschema/common/unnecessary_allof_ref_wrapper_modern.h index 4f83e63c..816ed877 100644 --- a/vendor/core/src/extension/alterschema/common/unnecessary_allof_ref_wrapper_modern.h +++ b/vendor/core/src/extension/alterschema/common/unnecessary_allof_ref_wrapper_modern.h @@ -1,5 +1,6 @@ class UnnecessaryAllOfRefWrapperModern final : public SchemaTransformRule { public: + using mutates = std::true_type; UnnecessaryAllOfRefWrapperModern() : SchemaTransformRule{"unnecessary_allof_ref_wrapper_modern", "Wrapping `$ref` in `allOf` was only necessary in " diff --git a/vendor/core/src/extension/alterschema/common/unnecessary_allof_wrapper.h b/vendor/core/src/extension/alterschema/common/unnecessary_allof_wrapper.h index 0ab990ba..48d9e62d 100644 --- a/vendor/core/src/extension/alterschema/common/unnecessary_allof_wrapper.h +++ b/vendor/core/src/extension/alterschema/common/unnecessary_allof_wrapper.h @@ -3,6 +3,7 @@ class UnnecessaryAllOfWrapper final : public SchemaTransformRule { static inline const std::string KEYWORD{"allOf"}; public: + using mutates = std::true_type; UnnecessaryAllOfWrapper() : SchemaTransformRule{"unnecessary_allof_wrapper", "Keywords inside `allOf` that do not conflict with " diff --git a/vendor/core/src/extension/alterschema/common/unsatisfiable_drop_validation.h b/vendor/core/src/extension/alterschema/common/unsatisfiable_drop_validation.h index e67fbe8a..4da45d64 100644 --- a/vendor/core/src/extension/alterschema/common/unsatisfiable_drop_validation.h +++ b/vendor/core/src/extension/alterschema/common/unsatisfiable_drop_validation.h @@ -1,5 +1,6 @@ class UnsatisfiableDropValidation final : public SchemaTransformRule { public: + using mutates = std::true_type; UnsatisfiableDropValidation() : SchemaTransformRule{"unsatisfiable_drop_validation", "Do not place assertions or applicators next to an " diff --git a/vendor/core/src/extension/alterschema/common/unsatisfiable_in_place_applicator_type.h b/vendor/core/src/extension/alterschema/common/unsatisfiable_in_place_applicator_type.h index 7c677d39..6b9e81f7 100644 --- a/vendor/core/src/extension/alterschema/common/unsatisfiable_in_place_applicator_type.h +++ b/vendor/core/src/extension/alterschema/common/unsatisfiable_in_place_applicator_type.h @@ -1,5 +1,6 @@ class UnsatisfiableInPlaceApplicatorType final : public SchemaTransformRule { public: + using mutates = std::true_type; UnsatisfiableInPlaceApplicatorType() : SchemaTransformRule{ "unsatisfiable_in_place_applicator_type", diff --git a/vendor/core/src/extension/alterschema/linter/comment_trim.h b/vendor/core/src/extension/alterschema/linter/comment_trim.h index eb9e57e0..3979534b 100644 --- a/vendor/core/src/extension/alterschema/linter/comment_trim.h +++ b/vendor/core/src/extension/alterschema/linter/comment_trim.h @@ -1,5 +1,6 @@ class CommentTrim final : public SchemaTransformRule { public: + using mutates = std::true_type; CommentTrim() : SchemaTransformRule{ "comment_trim", diff --git a/vendor/core/src/extension/alterschema/linter/content_schema_default.h b/vendor/core/src/extension/alterschema/linter/content_schema_default.h index b4827230..c7d12519 100644 --- a/vendor/core/src/extension/alterschema/linter/content_schema_default.h +++ b/vendor/core/src/extension/alterschema/linter/content_schema_default.h @@ -3,6 +3,7 @@ class ContentSchemaDefault final : public SchemaTransformRule { static inline const std::string KEYWORD{"contentSchema"}; public: + using mutates = std::true_type; ContentSchemaDefault() : SchemaTransformRule{ "content_schema_default", diff --git a/vendor/core/src/extension/alterschema/linter/definitions_to_defs.h b/vendor/core/src/extension/alterschema/linter/definitions_to_defs.h index 9efe13e3..560bc450 100644 --- a/vendor/core/src/extension/alterschema/linter/definitions_to_defs.h +++ b/vendor/core/src/extension/alterschema/linter/definitions_to_defs.h @@ -1,5 +1,6 @@ class DefinitionsToDefs final : public SchemaTransformRule { public: + using mutates = std::true_type; DefinitionsToDefs() : SchemaTransformRule{"definitions_to_defs", "`definitions` was superseded by `$defs` in " diff --git a/vendor/core/src/extension/alterschema/linter/dependencies_default.h b/vendor/core/src/extension/alterschema/linter/dependencies_default.h index cb84cfe3..d2cf3572 100644 --- a/vendor/core/src/extension/alterschema/linter/dependencies_default.h +++ b/vendor/core/src/extension/alterschema/linter/dependencies_default.h @@ -3,6 +3,7 @@ class DependenciesDefault final : public SchemaTransformRule { static inline const std::string KEYWORD{"dependencies"}; public: + using mutates = std::true_type; DependenciesDefault() : SchemaTransformRule{ "dependencies_default", diff --git a/vendor/core/src/extension/alterschema/linter/dependent_required_default.h b/vendor/core/src/extension/alterschema/linter/dependent_required_default.h index 9e2a460c..0abb77b0 100644 --- a/vendor/core/src/extension/alterschema/linter/dependent_required_default.h +++ b/vendor/core/src/extension/alterschema/linter/dependent_required_default.h @@ -1,5 +1,6 @@ class DependentRequiredDefault final : public SchemaTransformRule { public: + using mutates = std::true_type; DependentRequiredDefault() : SchemaTransformRule{ "dependent_required_default", diff --git a/vendor/core/src/extension/alterschema/linter/description_trailing_period.h b/vendor/core/src/extension/alterschema/linter/description_trailing_period.h index 125cc330..e1b55949 100644 --- a/vendor/core/src/extension/alterschema/linter/description_trailing_period.h +++ b/vendor/core/src/extension/alterschema/linter/description_trailing_period.h @@ -1,5 +1,6 @@ class DescriptionTrailingPeriod final : public SchemaTransformRule { public: + using mutates = std::true_type; DescriptionTrailingPeriod() : SchemaTransformRule{ "description_trailing_period", diff --git a/vendor/core/src/extension/alterschema/linter/description_trim.h b/vendor/core/src/extension/alterschema/linter/description_trim.h index b7ff154a..304c4b90 100644 --- a/vendor/core/src/extension/alterschema/linter/description_trim.h +++ b/vendor/core/src/extension/alterschema/linter/description_trim.h @@ -1,5 +1,6 @@ class DescriptionTrim final : public SchemaTransformRule { public: + using mutates = std::true_type; DescriptionTrim() : SchemaTransformRule{ "description_trim", diff --git a/vendor/core/src/extension/alterschema/linter/duplicate_examples.h b/vendor/core/src/extension/alterschema/linter/duplicate_examples.h index 8cba86b6..2c1a4d92 100644 --- a/vendor/core/src/extension/alterschema/linter/duplicate_examples.h +++ b/vendor/core/src/extension/alterschema/linter/duplicate_examples.h @@ -1,5 +1,6 @@ class DuplicateExamples final : public SchemaTransformRule { public: + using mutates = std::true_type; DuplicateExamples() : SchemaTransformRule{ "duplicate_examples", diff --git a/vendor/core/src/extension/alterschema/linter/enum_to_const.h b/vendor/core/src/extension/alterschema/linter/enum_to_const.h index 930ec6fb..dda365e9 100644 --- a/vendor/core/src/extension/alterschema/linter/enum_to_const.h +++ b/vendor/core/src/extension/alterschema/linter/enum_to_const.h @@ -1,5 +1,6 @@ class EnumToConst final : public SchemaTransformRule { public: + using mutates = std::true_type; EnumToConst() : SchemaTransformRule{ "enum_to_const", diff --git a/vendor/core/src/extension/alterschema/linter/equal_numeric_bounds_to_const.h b/vendor/core/src/extension/alterschema/linter/equal_numeric_bounds_to_const.h index 041f9ed3..509b9510 100644 --- a/vendor/core/src/extension/alterschema/linter/equal_numeric_bounds_to_const.h +++ b/vendor/core/src/extension/alterschema/linter/equal_numeric_bounds_to_const.h @@ -1,5 +1,6 @@ class EqualNumericBoundsToConst final : public SchemaTransformRule { public: + using mutates = std::true_type; EqualNumericBoundsToConst() : SchemaTransformRule{ "equal_numeric_bounds_to_const", diff --git a/vendor/core/src/extension/alterschema/linter/items_array_default.h b/vendor/core/src/extension/alterschema/linter/items_array_default.h index a21bd02a..f5133a14 100644 --- a/vendor/core/src/extension/alterschema/linter/items_array_default.h +++ b/vendor/core/src/extension/alterschema/linter/items_array_default.h @@ -1,5 +1,6 @@ class ItemsArrayDefault final : public SchemaTransformRule { public: + using mutates = std::true_type; ItemsArrayDefault() : SchemaTransformRule{"items_array_default", "Setting the `items` keyword to the empty array " diff --git a/vendor/core/src/extension/alterschema/linter/items_schema_default.h b/vendor/core/src/extension/alterschema/linter/items_schema_default.h index 8d77ee8a..e3ab492a 100644 --- a/vendor/core/src/extension/alterschema/linter/items_schema_default.h +++ b/vendor/core/src/extension/alterschema/linter/items_schema_default.h @@ -3,6 +3,7 @@ class ItemsSchemaDefault final : public SchemaTransformRule { static inline const std::string KEYWORD{"items"}; public: + using mutates = std::true_type; ItemsSchemaDefault() : SchemaTransformRule{"items_schema_default", "Setting the `items` keyword to the true schema " diff --git a/vendor/core/src/extension/alterschema/linter/multiple_of_default.h b/vendor/core/src/extension/alterschema/linter/multiple_of_default.h index 3f9c4778..196ee9a5 100644 --- a/vendor/core/src/extension/alterschema/linter/multiple_of_default.h +++ b/vendor/core/src/extension/alterschema/linter/multiple_of_default.h @@ -1,5 +1,6 @@ class MultipleOfDefault final : public SchemaTransformRule { public: + using mutates = std::true_type; MultipleOfDefault() : SchemaTransformRule{ "multiple_of_default", diff --git a/vendor/core/src/extension/alterschema/linter/pattern_properties_default.h b/vendor/core/src/extension/alterschema/linter/pattern_properties_default.h index d3e437b8..be80b5c1 100644 --- a/vendor/core/src/extension/alterschema/linter/pattern_properties_default.h +++ b/vendor/core/src/extension/alterschema/linter/pattern_properties_default.h @@ -1,5 +1,6 @@ class PatternPropertiesDefault final : public SchemaTransformRule { public: + using mutates = std::true_type; PatternPropertiesDefault() : SchemaTransformRule{ "pattern_properties_default", diff --git a/vendor/core/src/extension/alterschema/linter/properties_default.h b/vendor/core/src/extension/alterschema/linter/properties_default.h index 5c824185..6b85f05a 100644 --- a/vendor/core/src/extension/alterschema/linter/properties_default.h +++ b/vendor/core/src/extension/alterschema/linter/properties_default.h @@ -1,5 +1,6 @@ class PropertiesDefault final : public SchemaTransformRule { public: + using mutates = std::true_type; PropertiesDefault() : SchemaTransformRule{ "properties_default", diff --git a/vendor/core/src/extension/alterschema/linter/property_names_default.h b/vendor/core/src/extension/alterschema/linter/property_names_default.h index 49cd48f0..94c60a02 100644 --- a/vendor/core/src/extension/alterschema/linter/property_names_default.h +++ b/vendor/core/src/extension/alterschema/linter/property_names_default.h @@ -3,6 +3,7 @@ class PropertyNamesDefault final : public SchemaTransformRule { static inline const std::string KEYWORD{"propertyNames"}; public: + using mutates = std::true_type; PropertyNamesDefault() : SchemaTransformRule{ "property_names_default", diff --git a/vendor/core/src/extension/alterschema/linter/property_names_type_default.h b/vendor/core/src/extension/alterschema/linter/property_names_type_default.h index 7bb20ddf..9aaeedd8 100644 --- a/vendor/core/src/extension/alterschema/linter/property_names_type_default.h +++ b/vendor/core/src/extension/alterschema/linter/property_names_type_default.h @@ -1,5 +1,6 @@ class PropertyNamesTypeDefault final : public SchemaTransformRule { public: + using mutates = std::true_type; PropertyNamesTypeDefault() : SchemaTransformRule{ "property_names_type_default", diff --git a/vendor/core/src/extension/alterschema/linter/simple_properties_identifiers.h b/vendor/core/src/extension/alterschema/linter/simple_properties_identifiers.h index 07cf73ef..d9a1d4e4 100644 --- a/vendor/core/src/extension/alterschema/linter/simple_properties_identifiers.h +++ b/vendor/core/src/extension/alterschema/linter/simple_properties_identifiers.h @@ -1,5 +1,6 @@ class SimplePropertiesIdentifiers final : public SchemaTransformRule { public: + using mutates = std::false_type; SimplePropertiesIdentifiers() // Inspired by // https://json-structure.github.io/core/draft-vasters-json-structure-core.html#section-3.6 diff --git a/vendor/core/src/extension/alterschema/linter/title_description_equal.h b/vendor/core/src/extension/alterschema/linter/title_description_equal.h index 9c6cc520..4a5cfa9d 100644 --- a/vendor/core/src/extension/alterschema/linter/title_description_equal.h +++ b/vendor/core/src/extension/alterschema/linter/title_description_equal.h @@ -1,5 +1,6 @@ class TitleDescriptionEqual final : public SchemaTransformRule { public: + using mutates = std::true_type; TitleDescriptionEqual() : SchemaTransformRule{ "title_description_equal", diff --git a/vendor/core/src/extension/alterschema/linter/title_trailing_period.h b/vendor/core/src/extension/alterschema/linter/title_trailing_period.h index b8c81588..c1e783a4 100644 --- a/vendor/core/src/extension/alterschema/linter/title_trailing_period.h +++ b/vendor/core/src/extension/alterschema/linter/title_trailing_period.h @@ -1,5 +1,6 @@ class TitleTrailingPeriod final : public SchemaTransformRule { public: + using mutates = std::true_type; TitleTrailingPeriod() : SchemaTransformRule{ "title_trailing_period", diff --git a/vendor/core/src/extension/alterschema/linter/title_trim.h b/vendor/core/src/extension/alterschema/linter/title_trim.h index e523fc88..2ffeb78a 100644 --- a/vendor/core/src/extension/alterschema/linter/title_trim.h +++ b/vendor/core/src/extension/alterschema/linter/title_trim.h @@ -1,5 +1,6 @@ class TitleTrim final : public SchemaTransformRule { public: + using mutates = std::true_type; TitleTrim() : SchemaTransformRule{ "title_trim", diff --git a/vendor/core/src/extension/alterschema/linter/top_level_description.h b/vendor/core/src/extension/alterschema/linter/top_level_description.h index b9034e23..72c04f00 100644 --- a/vendor/core/src/extension/alterschema/linter/top_level_description.h +++ b/vendor/core/src/extension/alterschema/linter/top_level_description.h @@ -1,5 +1,6 @@ class TopLevelDescription final : public SchemaTransformRule { public: + using mutates = std::false_type; TopLevelDescription() : SchemaTransformRule{ "top_level_description", diff --git a/vendor/core/src/extension/alterschema/linter/top_level_examples.h b/vendor/core/src/extension/alterschema/linter/top_level_examples.h index 2a453fab..ce5c60fd 100644 --- a/vendor/core/src/extension/alterschema/linter/top_level_examples.h +++ b/vendor/core/src/extension/alterschema/linter/top_level_examples.h @@ -1,5 +1,6 @@ class TopLevelExamples final : public SchemaTransformRule { public: + using mutates = std::false_type; TopLevelExamples() : SchemaTransformRule{ "top_level_examples", diff --git a/vendor/core/src/extension/alterschema/linter/top_level_title.h b/vendor/core/src/extension/alterschema/linter/top_level_title.h index 1f56d083..df8bf549 100644 --- a/vendor/core/src/extension/alterschema/linter/top_level_title.h +++ b/vendor/core/src/extension/alterschema/linter/top_level_title.h @@ -1,5 +1,6 @@ class TopLevelTitle final : public SchemaTransformRule { public: + using mutates = std::false_type; TopLevelTitle() : SchemaTransformRule{ "top_level_title", diff --git a/vendor/core/src/extension/alterschema/linter/unevaluated_items_default.h b/vendor/core/src/extension/alterschema/linter/unevaluated_items_default.h index 7139b483..3e987ff9 100644 --- a/vendor/core/src/extension/alterschema/linter/unevaluated_items_default.h +++ b/vendor/core/src/extension/alterschema/linter/unevaluated_items_default.h @@ -3,6 +3,7 @@ class UnevaluatedItemsDefault final : public SchemaTransformRule { static inline const std::string KEYWORD{"unevaluatedItems"}; public: + using mutates = std::true_type; UnevaluatedItemsDefault() : SchemaTransformRule{ "unevaluated_items_default", diff --git a/vendor/core/src/extension/alterschema/linter/unevaluated_properties_default.h b/vendor/core/src/extension/alterschema/linter/unevaluated_properties_default.h index f241c66f..ce933bad 100644 --- a/vendor/core/src/extension/alterschema/linter/unevaluated_properties_default.h +++ b/vendor/core/src/extension/alterschema/linter/unevaluated_properties_default.h @@ -3,6 +3,7 @@ class UnevaluatedPropertiesDefault final : public SchemaTransformRule { static inline const std::string KEYWORD{"unevaluatedProperties"}; public: + using mutates = std::true_type; UnevaluatedPropertiesDefault() : SchemaTransformRule{ "unevaluated_properties_default", diff --git a/vendor/core/src/extension/alterschema/linter/unsatisfiable_max_contains.h b/vendor/core/src/extension/alterschema/linter/unsatisfiable_max_contains.h index e206f2e9..86de22d8 100644 --- a/vendor/core/src/extension/alterschema/linter/unsatisfiable_max_contains.h +++ b/vendor/core/src/extension/alterschema/linter/unsatisfiable_max_contains.h @@ -1,5 +1,6 @@ class UnsatisfiableMaxContains final : public SchemaTransformRule { public: + using mutates = std::true_type; UnsatisfiableMaxContains() : SchemaTransformRule{ "unsatisfiable_max_contains", diff --git a/vendor/core/src/extension/alterschema/linter/unsatisfiable_min_properties.h b/vendor/core/src/extension/alterschema/linter/unsatisfiable_min_properties.h index fb63ac19..30ce832a 100644 --- a/vendor/core/src/extension/alterschema/linter/unsatisfiable_min_properties.h +++ b/vendor/core/src/extension/alterschema/linter/unsatisfiable_min_properties.h @@ -1,5 +1,6 @@ class UnsatisfiableMinProperties final : public SchemaTransformRule { public: + using mutates = std::true_type; UnsatisfiableMinProperties() : SchemaTransformRule{ "unsatisfiable_min_properties",