11#include < sourcemeta/blaze/compiler.h>
22
3+ #include " vocabulary_lookup.h"
4+
35namespace {
46using namespace sourcemeta ::core;
7+ using sourcemeta::blaze::has_vocabulary;
58
69auto find_adjacent_dependencies (
710 const JSON::String ¤t, const JSON &schema, const SchemaFrame &frame,
@@ -22,7 +25,8 @@ auto find_adjacent_dependencies(
2225 continue ;
2326 } else if (keywords.contains (property.first )) {
2427 // In 2019-09, `additionalItems` takes no effect without `items`
25- if (subschema_vocabularies.contains (
28+ if (has_vocabulary (
29+ subschema_vocabularies,
2630 " https://json-schema.org/draft/2019-09/vocab/applicator" ) &&
2731 property.first == " additionalItems" && !subschema.defines (" items" )) {
2832 continue ;
@@ -154,9 +158,11 @@ auto unevaluated(const JSON &schema, const SchemaFrame &frame,
154158 const auto keyword_uri{frame.uri (entry.second , {pair.first })};
155159 SchemaUnevaluatedEntry unevaluated;
156160
157- if ((subschema_vocabularies.contains (
161+ if ((has_vocabulary (
162+ subschema_vocabularies,
158163 " https://json-schema.org/draft/2020-12/vocab/unevaluated" ) &&
159- subschema_vocabularies.contains (
164+ has_vocabulary (
165+ subschema_vocabularies,
160166 " https://json-schema.org/draft/2020-12/vocab/applicator" )) &&
161167 // NOLINTNEXTLINE(bugprone-branch-clone)
162168 pair.first == " unevaluatedProperties" ) {
@@ -167,29 +173,31 @@ auto unevaluated(const JSON &schema, const SchemaFrame &frame,
167173 entry.second , entry.second , true , unevaluated);
168174 result.emplace (keyword_uri, std::move (unevaluated));
169175 } else if (
170- (subschema_vocabularies.contains (
176+ (has_vocabulary (
177+ subschema_vocabularies,
171178 " https://json-schema.org/draft/2020-12/vocab/unevaluated" ) &&
172- subschema_vocabularies.contains (
179+ has_vocabulary (
180+ subschema_vocabularies,
173181 " https://json-schema.org/draft/2020-12/vocab/applicator" )) &&
174182 pair.first == " unevaluatedItems" ) {
175183 find_adjacent_dependencies (
176184 pair.first , schema, frame, walker, resolver,
177185 {" prefixItems" , " items" , " contains" , " unevaluatedItems" },
178186 entry.second , entry.second , true , unevaluated);
179187 result.emplace (keyword_uri, std::move (unevaluated));
180- } else if (subschema_vocabularies. contains (
181- " https://json-schema.org/draft/2019-09/vocab/"
182- " applicator" ) &&
188+ } else if (has_vocabulary (subschema_vocabularies,
189+ " https://json-schema.org/draft/2019-09/vocab/"
190+ " applicator" ) &&
183191 pair.first == " unevaluatedProperties" ) {
184192 find_adjacent_dependencies (
185193 pair.first , schema, frame, walker, resolver,
186194 {" properties" , " patternProperties" , " additionalProperties" ,
187195 " unevaluatedProperties" },
188196 entry.second , entry.second , true , unevaluated);
189197 result.emplace (keyword_uri, std::move (unevaluated));
190- } else if (subschema_vocabularies. contains (
191- " https://json-schema.org/draft/2019-09/vocab/"
192- " applicator" ) &&
198+ } else if (has_vocabulary (subschema_vocabularies,
199+ " https://json-schema.org/draft/2019-09/vocab/"
200+ " applicator" ) &&
193201 pair.first == " unevaluatedItems" ) {
194202 find_adjacent_dependencies (
195203 pair.first , schema, frame, walker, resolver,
0 commit comments