Skip to content

Linter: Future Enhancements and follow up tasks #1975

@Karan-Palan

Description

@Karan-Palan

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

  • Move existing rule documentations to the JSON Schema CLI repo for now, so they are more visible and semi-official until we upstream them properly.

2. Reference Handling

  • Break schemas when necessary and use rereference() in rules that transform applicators, to ensure $ref pointers 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.json
  • const_and_enum_conflict.json
  • examples_must_validate.json
  • forbid_empty_enum.json
  • format_type_mismatch.json
  • incoherent_exclusive_limits.json
  • incoherent_inclusive_limits.json
  • mincontains_greater_than_maxcontains.json
  • mincontains_zero_without_maxcontains.json
  • no_actionable_text_in_title_description.json
  • oneof_min_branches.json
  • require_absolute_draft_uri.json
  • require_description_title.json
  • require_schema_declaration.json
  • top_level_id_must_be_absolute.json
  • unbounded_collection_limits.json
  • unique_branches_in_oneof.json
  • unresolved_ref_pointer.json

4. Additional Rule Enhancements

  • Extend unnecessary_allof_wrapper_properties to work on older dialects, not just modern ones.
  • Improve diagnostics in duplicate_anyof_branches by highlighting which specific branches are duplicated.
  • Improve diagnostics in duplicate_enum_values by highlighting which specific enum entries are duplicated.

5. TODOs Inside Existing Rules

Specifically in UnnecessaryAllOfWrapperModern:

  • Add logic to check for type intersections in type arrays, not just direct equality.
  • Create a separate rule that removes a keyword if it is exactly equal to an instance of the same keyword already present outside the wrapper.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions