Skip to content

Commit 9e4df07

Browse files
authored
Consider jsonschema.json extensions when loading direct schema paths (#561)
Signed-off-by: Juan Cruz Viotti <[email protected]>
1 parent 12f6546 commit 9e4df07

19 files changed

+295
-12
lines changed

DEPENDENCIES

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
vendorpull https://github.com/sourcemeta/vendorpull 1dcbac42809cf87cb5b045106b863e17ad84ba02
2-
core https://github.com/sourcemeta/core 626949ede75fb77ac4a919a24af0ade6f776751d
2+
core https://github.com/sourcemeta/core 81cf10ad7243e799991e5c692cd3d4a6a6e5cc9f
33
jsonbinpack https://github.com/sourcemeta/jsonbinpack abd40e41050d14d74af1fddb5c397de5cca3b13c
44
blaze https://github.com/sourcemeta/blaze 53d6ba77c26e613b2803f044c2852d4441bfb0a1
55
hydra https://github.com/sourcemeta/hydra af9f2c54709d620872ead0c3f8f683c15a0fa702

src/command_bundle.cc

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,8 @@ auto sourcemeta::jsonschema::bundle(const sourcemeta::core::Options &options)
2323

2424
const std::filesystem::path schema_path{options.positional().front()};
2525
const auto configuration_path{find_configuration(schema_path)};
26-
const auto &configuration{read_configuration(options, configuration_path)};
26+
const auto &configuration{
27+
read_configuration(options, configuration_path, schema_path)};
2728
const auto dialect{default_dialect(options, configuration)};
2829
auto schema{sourcemeta::core::read_yaml_or_json(schema_path)};
2930

src/command_compile.cc

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,8 @@ auto sourcemeta::jsonschema::compile(const sourcemeta::core::Options &options)
2222

2323
const auto &schema_path{options.positional().at(0)};
2424
const auto configuration_path{find_configuration(schema_path)};
25-
const auto &configuration{read_configuration(options, configuration_path)};
25+
const auto &configuration{
26+
read_configuration(options, configuration_path, schema_path)};
2627
const auto dialect{default_dialect(options, configuration)};
2728

2829
const auto schema{sourcemeta::core::read_yaml_or_json(schema_path)};

src/command_fmt.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ auto sourcemeta::jsonschema::fmt(const sourcemeta::core::Options &options)
3636
try {
3737
const auto configuration_path{find_configuration(entry.first)};
3838
const auto &configuration{
39-
read_configuration(options, configuration_path)};
39+
read_configuration(options, configuration_path, entry.first)};
4040
const auto dialect{default_dialect(options, configuration)};
4141
const auto &custom_resolver{
4242
resolver(options, options.contains("http"), dialect, configuration)};

src/command_inspect.cc

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,8 @@ auto sourcemeta::jsonschema::inspect(const sourcemeta::core::Options &options)
157157
sourcemeta::core::read_yaml_or_json(schema_path, std::ref(positions))};
158158

159159
const auto configuration_path{find_configuration(schema_path)};
160-
const auto &configuration{read_configuration(options, configuration_path)};
160+
const auto &configuration{
161+
read_configuration(options, configuration_path, schema_path)};
161162
const auto dialect{default_dialect(options, configuration)};
162163

163164
sourcemeta::core::SchemaFrame frame{

src/command_lint.cc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -196,7 +196,7 @@ auto sourcemeta::jsonschema::lint(const sourcemeta::core::Options &options)
196196
for (const auto &entry : for_each_json(options)) {
197197
const auto configuration_path{find_configuration(entry.first)};
198198
const auto &configuration{
199-
read_configuration(options, configuration_path)};
199+
read_configuration(options, configuration_path, entry.first)};
200200
const auto dialect{default_dialect(options, configuration)};
201201

202202
const auto &custom_resolver{
@@ -255,7 +255,7 @@ auto sourcemeta::jsonschema::lint(const sourcemeta::core::Options &options)
255255
for (const auto &entry : for_each_json(options)) {
256256
const auto configuration_path{find_configuration(entry.first)};
257257
const auto &configuration{
258-
read_configuration(options, configuration_path)};
258+
read_configuration(options, configuration_path, entry.first)};
259259
const auto dialect{default_dialect(options, configuration)};
260260
const auto &custom_resolver{
261261
resolver(options, options.contains("http"), dialect, configuration)};

src/command_metaschema.cc

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,8 @@ auto sourcemeta::jsonschema::metaschema(
3636
}
3737

3838
const auto configuration_path{find_configuration(entry.first)};
39-
const auto &configuration{read_configuration(options, configuration_path)};
39+
const auto &configuration{
40+
read_configuration(options, configuration_path, entry.first)};
4041
const auto default_dialect_option{default_dialect(options, configuration)};
4142

4243
const auto &custom_resolver{resolver(options, options.contains("http"),

src/command_validate.cc

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,8 @@ auto sourcemeta::jsonschema::validate(const sourcemeta::core::Options &options)
149149
}
150150

151151
const auto configuration_path{find_configuration(schema_path)};
152-
const auto &configuration{read_configuration(options, configuration_path)};
152+
const auto &configuration{
153+
read_configuration(options, configuration_path, schema_path)};
153154
const auto dialect{default_dialect(options, configuration)};
154155

155156
const auto schema{sourcemeta::core::read_yaml_or_json(schema_path)};

src/configuration.h

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,8 @@ inline auto find_configuration(const std::filesystem::path &path)
2121

2222
inline auto read_configuration(
2323
const sourcemeta::core::Options &options,
24-
const std::optional<std::filesystem::path> &configuration_path)
24+
const std::optional<std::filesystem::path> &configuration_path,
25+
const std::optional<std::filesystem::path> &schema_path = std::nullopt)
2526
-> const std::optional<sourcemeta::core::SchemaConfig> & {
2627
using CacheKey = std::optional<std::filesystem::path>;
2728
static std::map<CacheKey, std::optional<sourcemeta::core::SchemaConfig>>
@@ -48,6 +49,17 @@ inline auto read_configuration(
4849
throw FileError<sourcemeta::core::SchemaConfigParseError>(
4950
configuration_path.value(), error);
5051
}
52+
53+
assert(result.has_value());
54+
if (schema_path.has_value() &&
55+
!result.value().applies_to(schema_path.value())) {
56+
LOG_VERBOSE(options)
57+
<< "Ignoring configuration file given extensions mismatch: "
58+
<< sourcemeta::core::weakly_canonical(configuration_path.value())
59+
.string()
60+
<< "\n";
61+
result = std::nullopt;
62+
}
5163
}
5264

5365
auto [inserted_iterator, inserted] =

src/input.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -156,6 +156,7 @@ inline auto for_each_json(const std::vector<std::string_view> &arguments,
156156
const auto configuration_path{find_configuration(current_path)};
157157
const auto &configuration{read_configuration(options, configuration_path)};
158158
const auto extensions{parse_extensions(options, configuration)};
159+
159160
handle_json_entry(configuration.has_value()
160161
? configuration.value().absolute_path
161162
: current_path,

0 commit comments

Comments
 (0)