Don't lint default and examples siblings to $ref in Draft 7 and older#597
Open
staging-devin-ai-integration[bot] wants to merge 1 commit intomainfrom
Open
Don't lint default and examples siblings to $ref in Draft 7 and older#597staging-devin-ai-integration[bot] wants to merge 1 commit intomainfrom
default and examples siblings to $ref in Draft 7 and older#597staging-devin-ai-integration[bot] wants to merge 1 commit intomainfrom
Conversation
In Draft 7 and older, JSON Schema implementations MUST ignore any keyword that is a sibling to $ref. Update ValidDefault and ValidExamples lint rules to skip validation when default/examples are siblings to $ref in Draft 4, Draft 6, and Draft 7. For 2019-09 and 2020-12, $ref siblings are processed normally, so the lint rules still validate and remove invalid default/examples values. Co-Authored-By: bot_apk <apk@cognition.ai>
Author
🤖 Devin AI EngineerI'll be helping with this pull request! Here's what you should know: ✅ I will automatically:
Note: I can only respond to comments from users who have write access to this repository. ⚙️ Control Options:
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Don't lint
defaultandexamplessiblings to$refin Draft 7 and olderSummary
In JSON Schema Draft 7 and older, implementations MUST ignore any keyword that is a sibling to
$ref. TheValidDefaultandValidExampleslint rules were incorrectly validating (and potentially removing)default/exampleskeywords when they appeared alongside$refin Draft 4, Draft 6, and Draft 7 schemas.This PR adds an early-return check in both
ValidDefault::condition()andValidExamples::condition(): if the schema object defines$refand the active vocabulary is not 2019-09 or 2020-12 (where$refsiblings are processed normally), the lint rule is skipped entirely.The check is placed after the existing vocabulary gate, so it only applies to the five known draft vocabularies. If the vocabulary is not 2019-09/2020-12 at that point, it must be Draft 4/6/7, which correctly maps to the "ignore siblings" behavior.
Fixes: sourcemeta/jsonschema#425
Review & Testing Checklist for Human
!2020-12 && !2019-09) is the preferred pattern in this codebase vs. positively checking for old draft URIs — the logic is equivalent given the earlier vocabulary gate, but confirm it matches project conventions$ref+ validdefault/examplessiblings (testsvalid_default_10,valid_default_11,valid_examples_11,valid_examples_12) still pass and aren't affected by the new guardmakeend-to-end to confirm all 7 test suites pass with no formatting driftNotes
make configure compileproduces no formatting changes