Skip to content

Commit 2d2b843

Browse files
authored
Better handle open objects in 2020-12 documentation (#744)
Signed-off-by: Juan Cruz Viotti <jv@jviotti.com>
1 parent 29dbce2 commit 2d2b843

3 files changed

Lines changed: 3022 additions & 1378 deletions

File tree

src/documentation/documentation.cc

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -704,6 +704,13 @@ auto walk_properties(const sourcemeta::core::JSON &schema,
704704
frame, root, visited, next_identifier);
705705
walk_wildcard_keyword(resolved, "unevaluatedProperties", path, rows,
706706
frame, root, visited, next_identifier);
707+
if (!resolved.defines("additionalProperties") &&
708+
!resolved.defines("unevaluatedProperties")) {
709+
auto open_path{path};
710+
open_path.push_back(make_path_segment("wildcard", "*"));
711+
emit_row(sourcemeta::core::JSON{true}, std::move(open_path), rows,
712+
frame, root, visited, next_identifier);
713+
}
707714
visited.erase(&resolved);
708715
} else if (resolved_type == "array" && resolved.defines("items") &&
709716
resolved.at("items").is_object() &&
@@ -732,6 +739,13 @@ auto walk_properties(const sourcemeta::core::JSON &schema,
732739
walk_wildcard_keyword(items_schema, "unevaluatedProperties",
733740
wildcard_path, rows, frame, root, visited,
734741
next_identifier);
742+
if (!items_schema.defines("additionalProperties") &&
743+
!items_schema.defines("unevaluatedProperties")) {
744+
auto open_path{wildcard_path};
745+
open_path.push_back(make_path_segment("wildcard", "*"));
746+
emit_row(sourcemeta::core::JSON{true}, std::move(open_path), rows,
747+
frame, root, visited, next_identifier);
748+
}
735749
visited.erase(&items_schema);
736750
}
737751
}
@@ -1225,6 +1239,15 @@ auto walk_schema(const sourcemeta::core::JSON &schema, const bool include_root,
12251239
next_identifier);
12261240
walk_wildcard_keyword(schema, "additionalProperties", empty_path, rows, frame,
12271241
root, visited, next_identifier);
1242+
if (schema.defines("type") && schema.at("type").is_string() &&
1243+
schema.at("type").to_string() == "object" &&
1244+
!schema.defines("additionalProperties") &&
1245+
!schema.defines("unevaluatedProperties")) {
1246+
auto open_path{empty_path};
1247+
open_path.push_back(make_path_segment("wildcard", "*"));
1248+
emit_row(sourcemeta::core::JSON{true}, std::move(open_path), rows, frame,
1249+
root, visited, next_identifier);
1250+
}
12281251
walk_prefix_items(schema, empty_path, rows, doc_children, frame, root,
12291252
visited, next_identifier);
12301253

@@ -1252,6 +1275,13 @@ auto walk_schema(const sourcemeta::core::JSON &schema, const bool include_root,
12521275
walk_wildcard_keyword(items_schema, "unevaluatedProperties",
12531276
wildcard_path, rows, frame, root, visited,
12541277
next_identifier);
1278+
if (!items_schema.defines("additionalProperties") &&
1279+
!items_schema.defines("unevaluatedProperties")) {
1280+
auto open_path{wildcard_path};
1281+
open_path.push_back(make_path_segment("wildcard", "*"));
1282+
emit_row(sourcemeta::core::JSON{true}, std::move(open_path), rows,
1283+
frame, root, visited, next_identifier);
1284+
}
12551285
visited.erase(&items_schema);
12561286
}
12571287
}

0 commit comments

Comments
 (0)