This issue tracks leftover tasks or future enhancements for the JSON Schema linter and canonicalizer. These were identified during GSoC work and should be considered for future development.
1. Documentation
2. Reference Handling
3. Non-auto-fixable Rules
Implement rules that cannot be safely auto-fixed, but should instead produce a clear user-friendly lint message.
5. Autofixable rules
6. Additional Rule Enhancements
6. TODOs Inside Existing Rules
Specifically in UnnecessaryAllOfWrapperModern:
This issue tracks leftover tasks or future enhancements for the JSON Schema linter and canonicalizer. These were identified during GSoC work and should be considered for future development.
1. Documentation
2. Reference Handling
rereference()in rules that transform applicators, to ensure$refpointers stay correct.3. Non-auto-fixable Rules
Implement rules that cannot be safely auto-fixed, but should instead produce a clear user-friendly lint message.
conflicting_readonly_writeonly.jsonconst_and_enum_conflict.jsonexamples_must_validate.jsonforbid_empty_enum.jsonformat_type_mismatch.jsonincoherent_exclusive_limits.jsonincoherent_inclusive_limits.jsonmincontains_greater_than_maxcontains.jsonmincontains_zero_without_maxcontains.jsonno_actionable_text_in_title_description.jsononeof_min_branches.jsonrequire_absolute_draft_uri.jsonrequire_description_title.jsonrequire_schema_declaration.jsontop_level_id_must_be_absolute.jsonunbounded_collection_limits.jsonunique_branches_in_oneof.jsonunresolved_ref_pointer.json$schemasibling to$refin JSON Schema Draft 7 and older (we can't just remove it otherwise the linter evaluation breaks given it doesn't know the dialect?)$anchorin a saved definition (not randomly)$refmust not point to a random schema location, but to$defs, or an anchor, or a schema resource5. Autofixable rules
$ref)allOfbranches that already exist outside are duplicating work and can be removedpropertiesin anallOfbranch while the outer schema hasadditionalProperties: falseand noproperties/patternPropertiescan be removed. This is one case where we know keywords would never match. Like dead code?$schemathat doe not have$id/id(maybe just check if the parent location is a resource?)6. Additional Rule Enhancements
unnecessary_allof_wrapper_propertiesto work on older dialects, not just modern ones.duplicate_anyof_branchesby highlighting which specific branches are duplicated.duplicate_enum_valuesby highlighting which specific enum entries are duplicated.contentMediaTypeorcontentSchemawithoutcontentEncodingifcontentEncodingis available through a$refpatternalongsideenumorconstpatternandpatternPropertiesonly have ECMA-262 compliant regexes6. TODOs Inside Existing Rules
Specifically in
UnnecessaryAllOfWrapperModern:typearrays, not just direct equality.