Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(rulesets): add new rule that requires sibling items field for type array #2632

Merged
merged 5 commits into from
Jun 7, 2024

Conversation

rainum
Copy link
Contributor

@rainum rainum commented Jun 3, 2024

Fixes #2595.

This PR adds a new array-items rule for OAS 3.0.x which requires schemas with "type: array" to have a sibling "items" field.

There are some additional changes present that make tests more stable.

Checklist

  • Tests added / updated
  • Docs added / updated

Does this PR introduce a breaking change?

  • Yes
  • No

@rainum rainum requested review from a team as code owners June 3, 2024 15:40
@rainum rainum requested review from billiegoose and mnaumanali94 and removed request for billiegoose June 3, 2024 15:40
@stoplight-qa stoplight-qa force-pushed the feat/rulesets/require-type-array-items-field branch from 8d67845 to 271d950 Compare June 3, 2024 15:50
@@ -361,6 +361,18 @@ const ruleset = {
function: refSiblings,
},
},
'array-items': {
formats: [oas3_0],
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

should this be 3.1 as well?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah, we discussed this with @mnaumanali94. We agreed to fix one version at a time. We can address 3.1 if there will be any interest in the community.

resolved: false,
given: "$..[?(@.type === 'array')]",
then: {
function: truthy,
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

should this detect a child schema?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

daniel-white
daniel-white previously approved these changes Jun 4, 2024
mnaumanali94
mnaumanali94 previously approved these changes Jun 7, 2024
Copy link
Contributor

@mnaumanali94 mnaumanali94 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good. @rainum Can we add a quick line here: https://github.com/stoplightio/spectral/blob/develop/docs/reference/openapi-rules.md

I can add it if you want.

@rainum
Copy link
Contributor Author

rainum commented Jun 7, 2024

Looks good. @rainum Can we add a quick line here: https://github.com/stoplightio/spectral/blob/develop/docs/reference/openapi-rules.md

Oh, certainly! I completely forgot to do this, thanks for reminding me!

@rainum
Copy link
Contributor Author

rainum commented Jun 7, 2024

@mnaumanali94, I modified docs in 5bee343 👌

@rainum rainum requested a review from mnaumanali94 June 7, 2024 12:54
@mnaumanali94
Copy link
Contributor

LGTM!

@rainum rainum merged commit 24198bc into develop Jun 7, 2024
9 checks passed
@rainum rainum deleted the feat/rulesets/require-type-array-items-field branch June 7, 2024 13:47
stoplight-bot pushed a commit that referenced this pull request Jun 7, 2024
# @stoplight/spectral-rulesets [1.19.0](https://github.com/stoplightio/spectral/compare/@stoplight/spectral-rulesets-1.18.1...@stoplight/spectral-rulesets-1.19.0) (2024-06-07)

### Bug Fixes

* **rulesets:** example validation for required readOnly and writeOnly properties ([#2573](#2573)) ([ae1fea5](ae1fea5))

### Features

* **rulesets:** add new rule that requires sibling items field for type array ([#2632](#2632)) ([24198bc](24198bc))
* **rulesets:** add oas3_1-servers-in-webhook and oas3_1-callbacks-in… ([#2581](#2581)) ([7a8cc0e](7a8cc0e))
* **rulesets:** improve {oas2,oas3}-valid-schema rule ([#2574](#2574)) ([8df2c36](8df2c36))
stoplight-bot pushed a commit that referenced this pull request Jun 7, 2024
# [1.8.0](https://github.com/stoplightio/spectral/compare/@stoplight/spectral-functions-v1.7.2...@stoplight/spectral-functions-1.8.0) (2024-06-07)

### Bug Fixes

* **cli:** choose proxy agent based on requester protocol ([#2521](#2521)) ([056f2e1](056f2e1))
* **cli:** clarify usage of --format ([#2575](#2575)) ([96eee89](96eee89))
* **core:** dedupe paths containing special characters correctly ([758de21](758de21))
* **core:** invalid then produced by Rule#toJSON ([#2496](#2496)) ([db91553](db91553))
* **core:** more accurate ruleset error paths ([66b3ca7](66b3ca7))
* **core:** pointer in overrides are applied too broadly ([#2511](#2511)) ([69403c1](69403c1))
* **core:** reset path in fn context ([#2389](#2389)) ([3d47ec4](3d47ec4))
* **parsers:** update @stoplight/json from ~3.20.1 to ~3.21.0 ([e906d20](e906d20))
* **parsers:** update @stoplight/yaml from ~4.2.3 to ~4.3.0 ([91fdded](91fdded))
* **ref-resolver:** bump @stoplight/json-ref-resolver from ~3.1.4 to ~3.1.5 ([#3635](https://github.com/stoplightio/spectral/issues/3635)) ([215ae93](215ae93))
* **ref-resolver:** update @stoplight/json-ref-resolver from ~3.1.5 to ~3.1.6 ([6f73151](6f73151))
* **ruleset-bundler:** defaults should be last one ([#2403](#2403)) ([8780cfa](8780cfa))
* **ruleset-bundler:** remove extraneous 'external dependency' warnings ([#2475](#2475)) ([e791534](e791534))
* **ruleset-migrator:** correct package.json's browser field ([#2497](#2497)) ([89a6a67](89a6a67))
* **ruleset-migrator:** transform functions under overrides ([#2459](#2459)) ([45e817f](45e817f))
* **ruleset-migrator:** update @stoplight/json from ~3.20.1 to ~3.21.0 ([3f7eebc](3f7eebc))
* **ruleset-migrator:** use module for require.resolve ([#2405](#2405)) ([d7c0fa4](d7c0fa4))
* **rulesets:** avoid false errors from ajv ([#2408](#2408)) ([92dab78](92dab78))
* **rulesets:** example validation for required readOnly and writeOnly properties ([#2573](#2573)) ([ae1fea5](ae1fea5))
* **rulesets:** oasExample should clean id fields from non-schema objects ([#2561](#2561)) ([7f7583e](7f7583e))
* **rulesets:** tweak server variables function ([#2533](#2533)) ([244cbda](244cbda))

### Features

* **cli:** add sarif formatter ([#2532](#2532)) ([959a86a](959a86a))
* **cli:** require newer version of all Spectral dependencies ([10ddd97](10ddd97))
* **cli:** use hpagent ([#2513](#2513)) ([9b2d347](9b2d347))
* **core:** relax formats validation ([#2151](#2151)) ([de16b4c](de16b4c))
* **core:** support x- extensions in the ruleset ([#2440](#2440)) ([964151e](964151e))
* **formats:** jsonSchemaLoose format should search for enum keyword ([#2551](#2551)) ([0835545](0835545))
* **formats:** support AsyncAPI 2.6.0 ([#2391](#2391)) ([b8e51b4](b8e51b4))
* **formatters:** add export entrypoint for utils ([#2482](#2482)) ([d4b883c](d4b883c))
* **formatters:** add GitHub Actions formatter ([#2508](#2508)) ([6904927](6904927))
* **formatters:** add sarif formatter ([#2532](#2532)) ([908c308](908c308))
* **formatters:** move formatters to a separate package ([#2468](#2468)) ([664e259](664e259))
* **rulesets:** add multiple xor ([#2614](#2614)) ([af9c742](af9c742))
* **rulesets:** add new rule that requires sibling items field for type array ([#2632](#2632)) ([24198bc](24198bc))
* **rulesets:** add oas3_1-servers-in-webhook and oas3_1-callbacks-in… ([#2581](#2581)) ([7a8cc0e](7a8cc0e))
* **rulesets:** add oas3-server-variables rule ([#2526](#2526)) ([4c4de85](4c4de85))
* **rulesets:** add scope validation to oas{2,3}-operation-security-defined rules ([#2538](#2538)) ([68aacd6](68aacd6))
* **rulesets:** add traits array path to headers rule ([#2460](#2460)) ([9ceabca](9ceabca))
* **rulesets:** improve {oas2,oas3}-valid-schema rule ([#2574](#2574)) ([8df2c36](8df2c36))
* **rulesets:** support AsyncAPI 2.6.0 ([#2391](#2391)) ([94a7801](94a7801))
@stoplight-bot
Copy link
Collaborator

🎉 This PR is included in version 1.19.0 🎉

The release is available on @stoplight/spectral-rulesets-1.19.0

Your semantic-release bot 📦🚀

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Wrongly declared array not caught as error
4 participants