From 773931b0ea1f48c664783d00b93f9b0c1d8dd091 Mon Sep 17 00:00:00 2001 From: Vladimir Gorej Date: Thu, 29 Sep 2022 12:12:26 +0200 Subject: [PATCH 1/4] feat(ls): provide OpenAPI 3.0.x Contact lint rules Refs #2033 --- packages/apidom-ls/src/config/codes.ts | 8 +++++--- .../config/openapi/contact/lint/email--format-email.ts | 2 +- .../src/config/openapi/contact/lint/name--type.ts | 2 +- .../src/config/openapi/contact/lint/url--format-uri.ts | 2 +- 4 files changed, 8 insertions(+), 6 deletions(-) diff --git a/packages/apidom-ls/src/config/codes.ts b/packages/apidom-ls/src/config/codes.ts index ee8d25751a..15fe2a3d86 100644 --- a/packages/apidom-ls/src/config/codes.ts +++ b/packages/apidom-ls/src/config/codes.ts @@ -565,9 +565,6 @@ enum ApilintCodes { OPENAPI2 = 3000000, OPENAPI2_CONTACT = 3010000, - OPENAPI2_CONTACT_FIELD_NAME_TYPE = 3010100, - OPENAPI2_CONTACT_FIELD_URL_FORMAT_URI = 3010200, - OPENAPI2_CONTACT_FIELD_EMAIL_FORMAT_EMAIL = 3010300, OPENAPI2_INFO = 3020000, @@ -603,6 +600,11 @@ enum ApilintCodes { OPENAPI3_0_INFO_FIELD_CONTACT_TYPE = 5020400, OPENAPI3_0_INFO_FIELD_LICENSE_TYPE = 5020500, + OPENAPI3_0_CONTACT = 5030000, + OPENAPI3_0_CONTACT_FIELD_NAME_TYPE = 5030100, + OPENAPI3_0_CONTACT_FIELD_URL_FORMAT_URI = 5030200, + OPENAPI3_0_CONTACT_FIELD_EMAIL_FORMAT_EMAIL = 5030300, + OPENAPI3_1 = 7000000, OPENAPI3_1_OPENAPI_VALUE_PATTERN_3_1_0 = 7000100, diff --git a/packages/apidom-ls/src/config/openapi/contact/lint/email--format-email.ts b/packages/apidom-ls/src/config/openapi/contact/lint/email--format-email.ts index c9863050df..e3f88326bf 100644 --- a/packages/apidom-ls/src/config/openapi/contact/lint/email--format-email.ts +++ b/packages/apidom-ls/src/config/openapi/contact/lint/email--format-email.ts @@ -2,7 +2,7 @@ import ApilintCodes from '../../../codes'; import { LinterMeta } from '../../../../apidom-language-types'; const emailFormatEmailLint: LinterMeta = { - code: ApilintCodes.OPENAPI2_CONTACT_FIELD_EMAIL_FORMAT_EMAIL, + code: ApilintCodes.OPENAPI3_0_CONTACT_FIELD_EMAIL_FORMAT_EMAIL, source: 'apilint', message: "'email' must be a valid email", severity: 1, diff --git a/packages/apidom-ls/src/config/openapi/contact/lint/name--type.ts b/packages/apidom-ls/src/config/openapi/contact/lint/name--type.ts index b2e19caa2b..8308572a6a 100644 --- a/packages/apidom-ls/src/config/openapi/contact/lint/name--type.ts +++ b/packages/apidom-ls/src/config/openapi/contact/lint/name--type.ts @@ -2,7 +2,7 @@ import ApilintCodes from '../../../codes'; import { LinterMeta } from '../../../../apidom-language-types'; const nameTypeLint: LinterMeta = { - code: ApilintCodes.OPENAPI2_CONTACT_FIELD_NAME_TYPE, + code: ApilintCodes.OPENAPI3_0_CONTACT_FIELD_NAME_TYPE, source: 'apilint', message: "'name' must be a string", severity: 1, diff --git a/packages/apidom-ls/src/config/openapi/contact/lint/url--format-uri.ts b/packages/apidom-ls/src/config/openapi/contact/lint/url--format-uri.ts index 9128372e94..e33866542d 100644 --- a/packages/apidom-ls/src/config/openapi/contact/lint/url--format-uri.ts +++ b/packages/apidom-ls/src/config/openapi/contact/lint/url--format-uri.ts @@ -2,7 +2,7 @@ import ApilintCodes from '../../../codes'; import { LinterMeta } from '../../../../apidom-language-types'; const urlFormatURILint: LinterMeta = { - code: ApilintCodes.OPENAPI2_CONTACT_FIELD_URL_FORMAT_URI, + code: ApilintCodes.OPENAPI3_0_CONTACT_FIELD_URL_FORMAT_URI, source: 'apilint', message: "'url' value must be a valid URL", severity: 1, From f0d18ac3b1c33b6cee78366f82e09063d4fadb95 Mon Sep 17 00:00:00 2001 From: Vladimir Gorej Date: Thu, 29 Sep 2022 12:23:13 +0200 Subject: [PATCH 2/4] feat(ls): provide OpenAPI 3.0.x License lint rules Refs #2033 --- packages/apidom-ls/src/config/codes.ts | 5 ++++ .../license/lint/allowed-fields-3-0.ts | 15 ++++++++++++ .../src/config/openapi/license/lint/index.ts | 8 +++++++ .../openapi/license/lint/name--required.ts | 24 +++++++++++++++++++ .../config/openapi/license/lint/name--type.ts | 16 +++++++++++++ .../openapi/license/lint/url--format-uri.ts | 15 ++++++++++++ .../src/config/openapi/license/meta.ts | 2 ++ 7 files changed, 85 insertions(+) create mode 100644 packages/apidom-ls/src/config/openapi/license/lint/allowed-fields-3-0.ts create mode 100644 packages/apidom-ls/src/config/openapi/license/lint/index.ts create mode 100644 packages/apidom-ls/src/config/openapi/license/lint/name--required.ts create mode 100644 packages/apidom-ls/src/config/openapi/license/lint/name--type.ts create mode 100644 packages/apidom-ls/src/config/openapi/license/lint/url--format-uri.ts diff --git a/packages/apidom-ls/src/config/codes.ts b/packages/apidom-ls/src/config/codes.ts index 15fe2a3d86..eda9f89714 100644 --- a/packages/apidom-ls/src/config/codes.ts +++ b/packages/apidom-ls/src/config/codes.ts @@ -605,6 +605,11 @@ enum ApilintCodes { OPENAPI3_0_CONTACT_FIELD_URL_FORMAT_URI = 5030200, OPENAPI3_0_CONTACT_FIELD_EMAIL_FORMAT_EMAIL = 5030300, + OPENAPI3_0_LICENSE = 5040000, + OPENAPI3_0_LICENSE_FIELD_NAME_TYPE = 5040100, + OPENAPI3_0_LICENSE_FIELD_NAME_REQUIRED, + OPENAPI3_0_LICENSE_FIELD_URL_FORMAT_URI = 5040200, + OPENAPI3_1 = 7000000, OPENAPI3_1_OPENAPI_VALUE_PATTERN_3_1_0 = 7000100, diff --git a/packages/apidom-ls/src/config/openapi/license/lint/allowed-fields-3-0.ts b/packages/apidom-ls/src/config/openapi/license/lint/allowed-fields-3-0.ts new file mode 100644 index 0000000000..09c4d6e84b --- /dev/null +++ b/packages/apidom-ls/src/config/openapi/license/lint/allowed-fields-3-0.ts @@ -0,0 +1,15 @@ +import ApilintCodes from '../../../codes'; +import { LinterMeta } from '../../../../apidom-language-types'; + +// eslint-disable-next-line @typescript-eslint/naming-convention +const allowedFields3_0Lint: LinterMeta = { + code: ApilintCodes.NOT_ALLOWED_FIELDS, + source: 'apilint', + message: 'Object includes not allowed fields', + severity: 1, + linterFunction: 'allowedFields', + linterParams: [['name', 'url'], 'x-'], + marker: 'key', +}; + +export default allowedFields3_0Lint; diff --git a/packages/apidom-ls/src/config/openapi/license/lint/index.ts b/packages/apidom-ls/src/config/openapi/license/lint/index.ts new file mode 100644 index 0000000000..8daee026f2 --- /dev/null +++ b/packages/apidom-ls/src/config/openapi/license/lint/index.ts @@ -0,0 +1,8 @@ +import allowedFields3_0Lint from './allowed-fields-3-0'; +import nameTypeLint from './name--type'; +import nameRequiredLint from './name--required'; +import urlFormatURILint from './url--format-uri'; + +const contactLints = [nameTypeLint, nameRequiredLint, urlFormatURILint, allowedFields3_0Lint]; + +export default contactLints; diff --git a/packages/apidom-ls/src/config/openapi/license/lint/name--required.ts b/packages/apidom-ls/src/config/openapi/license/lint/name--required.ts new file mode 100644 index 0000000000..e0429d8bdc --- /dev/null +++ b/packages/apidom-ls/src/config/openapi/license/lint/name--required.ts @@ -0,0 +1,24 @@ +import ApilintCodes from '../../../codes'; +import { LinterMeta } from '../../../../apidom-language-types'; + +const nameRequiredLint: LinterMeta = { + code: ApilintCodes.OPENAPI3_0_LICENSE_FIELD_NAME_REQUIRED, + source: 'apilint', + message: "should always have a 'name'", + severity: 1, + linterFunction: 'hasRequiredField', + linterParams: ['name'], + marker: 'key', + data: { + quickFix: [ + { + message: "add 'name' field", + action: 'addChild', + snippetYaml: 'name: \n ', + snippetJson: '"name": "",\n ', + }, + ], + }, +}; + +export default nameRequiredLint; diff --git a/packages/apidom-ls/src/config/openapi/license/lint/name--type.ts b/packages/apidom-ls/src/config/openapi/license/lint/name--type.ts new file mode 100644 index 0000000000..e066c6253b --- /dev/null +++ b/packages/apidom-ls/src/config/openapi/license/lint/name--type.ts @@ -0,0 +1,16 @@ +import ApilintCodes from '../../../codes'; +import { LinterMeta } from '../../../../apidom-language-types'; + +const nameTypeLint: LinterMeta = { + code: ApilintCodes.OPENAPI3_0_LICENSE_FIELD_NAME_TYPE, + source: 'apilint', + message: "'name' must be a string", + severity: 1, + linterFunction: 'apilintType', + linterParams: ['string'], + marker: 'value', + target: 'name', + data: {}, +}; + +export default nameTypeLint; diff --git a/packages/apidom-ls/src/config/openapi/license/lint/url--format-uri.ts b/packages/apidom-ls/src/config/openapi/license/lint/url--format-uri.ts new file mode 100644 index 0000000000..6e24357950 --- /dev/null +++ b/packages/apidom-ls/src/config/openapi/license/lint/url--format-uri.ts @@ -0,0 +1,15 @@ +import ApilintCodes from '../../../codes'; +import { LinterMeta } from '../../../../apidom-language-types'; + +const urlFormatURILint: LinterMeta = { + code: ApilintCodes.OPENAPI3_0_LICENSE_FIELD_URL_FORMAT_URI, + source: 'apilint', + message: "'url' value must be a valid URL", + severity: 1, + linterFunction: 'apilintValidURI', + marker: 'value', + target: 'url', + data: {}, +}; + +export default urlFormatURILint; diff --git a/packages/apidom-ls/src/config/openapi/license/meta.ts b/packages/apidom-ls/src/config/openapi/license/meta.ts index 7ad2bb2cad..381bda653d 100644 --- a/packages/apidom-ls/src/config/openapi/license/meta.ts +++ b/packages/apidom-ls/src/config/openapi/license/meta.ts @@ -1,8 +1,10 @@ +import lint from './lint'; import completion from './completion'; import documentation from './documentation'; import { FormatMeta } from '../../../apidom-language-types'; const meta: FormatMeta = { + lint, completion, documentation, }; From 380b6acd1b96d4cf596cf93b0678deffed2c5f6f Mon Sep 17 00:00:00 2001 From: Vladimir Gorej Date: Thu, 29 Sep 2022 12:31:07 +0200 Subject: [PATCH 3/4] feat(ls): provide OpenAPI 3.0.x External Docs lint rules Refs #2033 --- packages/apidom-ls/src/config/codes.ts | 5 ++++ .../lint/allowed-fields.ts | 14 +++++++++++ .../lint/description--type.ts | 16 +++++++++++++ .../external-documentation/lint/index.ts | 8 +++++++ .../lint/url--format-uri.ts | 15 ++++++++++++ .../lint/url--required.ts | 24 +++++++++++++++++++ .../openapi/external-documentation/meta.ts | 2 ++ 7 files changed, 84 insertions(+) create mode 100644 packages/apidom-ls/src/config/openapi/external-documentation/lint/allowed-fields.ts create mode 100644 packages/apidom-ls/src/config/openapi/external-documentation/lint/description--type.ts create mode 100644 packages/apidom-ls/src/config/openapi/external-documentation/lint/index.ts create mode 100644 packages/apidom-ls/src/config/openapi/external-documentation/lint/url--format-uri.ts create mode 100644 packages/apidom-ls/src/config/openapi/external-documentation/lint/url--required.ts diff --git a/packages/apidom-ls/src/config/codes.ts b/packages/apidom-ls/src/config/codes.ts index eda9f89714..32ce1d620b 100644 --- a/packages/apidom-ls/src/config/codes.ts +++ b/packages/apidom-ls/src/config/codes.ts @@ -610,6 +610,11 @@ enum ApilintCodes { OPENAPI3_0_LICENSE_FIELD_NAME_REQUIRED, OPENAPI3_0_LICENSE_FIELD_URL_FORMAT_URI = 5040200, + OPENAPI3_0_EXTERNAL_DOCUMENTATION = 5050000, + OPENAPI3_0_EXTERNAL_DOCUMENTATION_FIELD_DESCRIPTION_TYPE = 5050100, + OPENAPI3_0_EXTERNAL_DOCUMENTATION_FIELD_URL_FORMAT_URI = 5050200, + OPENAPI3_0_EXTERNAL_DOCUMENTATION_FIELD_URL_REQUIRED, + OPENAPI3_1 = 7000000, OPENAPI3_1_OPENAPI_VALUE_PATTERN_3_1_0 = 7000100, diff --git a/packages/apidom-ls/src/config/openapi/external-documentation/lint/allowed-fields.ts b/packages/apidom-ls/src/config/openapi/external-documentation/lint/allowed-fields.ts new file mode 100644 index 0000000000..0d6619e407 --- /dev/null +++ b/packages/apidom-ls/src/config/openapi/external-documentation/lint/allowed-fields.ts @@ -0,0 +1,14 @@ +import ApilintCodes from '../../../codes'; +import { LinterMeta } from '../../../../apidom-language-types'; + +const allowedFieldsLint: LinterMeta = { + code: ApilintCodes.NOT_ALLOWED_FIELDS, + source: 'apilint', + message: 'Object includes not allowed fields', + severity: 1, + linterFunction: 'allowedFields', + linterParams: [['description', 'url'], 'x-'], + marker: 'key', +}; + +export default allowedFieldsLint; diff --git a/packages/apidom-ls/src/config/openapi/external-documentation/lint/description--type.ts b/packages/apidom-ls/src/config/openapi/external-documentation/lint/description--type.ts new file mode 100644 index 0000000000..0e2863978f --- /dev/null +++ b/packages/apidom-ls/src/config/openapi/external-documentation/lint/description--type.ts @@ -0,0 +1,16 @@ +import ApilintCodes from '../../../codes'; +import { LinterMeta } from '../../../../apidom-language-types'; + +const descriptionTypeLint: LinterMeta = { + code: ApilintCodes.OPENAPI3_0_EXTERNAL_DOCUMENTATION_FIELD_DESCRIPTION_TYPE, + source: 'apilint', + message: "'description' must be a string", + severity: 1, + linterFunction: 'apilintType', + linterParams: ['string'], + marker: 'value', + target: 'description', + data: {}, +}; + +export default descriptionTypeLint; diff --git a/packages/apidom-ls/src/config/openapi/external-documentation/lint/index.ts b/packages/apidom-ls/src/config/openapi/external-documentation/lint/index.ts new file mode 100644 index 0000000000..88c2b2c45a --- /dev/null +++ b/packages/apidom-ls/src/config/openapi/external-documentation/lint/index.ts @@ -0,0 +1,8 @@ +import allowedFieldsLint from './allowed-fields'; +import descriptionTypeLint from './description--type'; +import urlRequiredLint from './url--required'; +import urlFormatURILint from './url--format-uri'; + +const contactLints = [descriptionTypeLint, urlRequiredLint, urlFormatURILint, allowedFieldsLint]; + +export default contactLints; diff --git a/packages/apidom-ls/src/config/openapi/external-documentation/lint/url--format-uri.ts b/packages/apidom-ls/src/config/openapi/external-documentation/lint/url--format-uri.ts new file mode 100644 index 0000000000..bcca1723d3 --- /dev/null +++ b/packages/apidom-ls/src/config/openapi/external-documentation/lint/url--format-uri.ts @@ -0,0 +1,15 @@ +import ApilintCodes from '../../../codes'; +import { LinterMeta } from '../../../../apidom-language-types'; + +const urlFormatURILint: LinterMeta = { + code: ApilintCodes.OPENAPI3_0_EXTERNAL_DOCUMENTATION_FIELD_URL_FORMAT_URI, + source: 'apilint', + message: "'url' value must be a valid URL", + severity: 1, + linterFunction: 'apilintValidURI', + marker: 'value', + target: 'url', + data: {}, +}; + +export default urlFormatURILint; diff --git a/packages/apidom-ls/src/config/openapi/external-documentation/lint/url--required.ts b/packages/apidom-ls/src/config/openapi/external-documentation/lint/url--required.ts new file mode 100644 index 0000000000..d3913242de --- /dev/null +++ b/packages/apidom-ls/src/config/openapi/external-documentation/lint/url--required.ts @@ -0,0 +1,24 @@ +import ApilintCodes from '../../../codes'; +import { LinterMeta } from '../../../../apidom-language-types'; + +const urlRequiredLint: LinterMeta = { + code: ApilintCodes.OPENAPI3_0_EXTERNAL_DOCUMENTATION_FIELD_URL_REQUIRED, + source: 'apilint', + message: "should always have an 'url'", + severity: 1, + linterFunction: 'hasRequiredField', + linterParams: ['url'], + marker: 'key', + data: { + quickFix: [ + { + message: "add 'url' field", + action: 'addChild', + snippetYaml: 'url: \n ', + snippetJson: '"url": "",\n ', + }, + ], + }, +}; + +export default urlRequiredLint; diff --git a/packages/apidom-ls/src/config/openapi/external-documentation/meta.ts b/packages/apidom-ls/src/config/openapi/external-documentation/meta.ts index 7ad2bb2cad..381bda653d 100644 --- a/packages/apidom-ls/src/config/openapi/external-documentation/meta.ts +++ b/packages/apidom-ls/src/config/openapi/external-documentation/meta.ts @@ -1,8 +1,10 @@ +import lint from './lint'; import completion from './completion'; import documentation from './documentation'; import { FormatMeta } from '../../../apidom-language-types'; const meta: FormatMeta = { + lint, completion, documentation, }; From 21ac23e38d6d208abacc05e179c0d533ae63f8ac Mon Sep 17 00:00:00 2001 From: Vladimir Gorej Date: Thu, 29 Sep 2022 13:05:41 +0200 Subject: [PATCH 4/4] feat(ls): provide OpenAPI 3.0.x Components lint rules Refs #2033 --- packages/apidom-ls/src/config/codes.ts | 12 +++++++ .../components/lint/allowed-fields-3-0.ts | 34 +++++++++++++++++++ .../components/lint/callbacks--values-type.ts | 17 ++++++++++ .../components/lint/examples--values-type.ts | 17 ++++++++++ .../components/lint/headers--values-type.ts | 17 ++++++++++ .../config/openapi/components/lint/index.ts | 27 +++++++++++++++ .../openapi/components/lint/keys--pattern.ts | 15 ++++++++ .../components/lint/links--values-type.ts | 17 ++++++++++ .../lint/parameters--values-type.ts | 17 ++++++++++ .../lint/request-bodies--values-type.ts | 17 ++++++++++ .../components/lint/responses--values-type.ts | 17 ++++++++++ .../components/lint/schemas--values-type.ts | 17 ++++++++++ .../lint/security-schemes--values-type.ts | 17 ++++++++++ .../src/config/openapi/components/meta.ts | 2 ++ .../license/lint/allowed-fields-3-0.ts | 6 ++++ 15 files changed, 249 insertions(+) create mode 100644 packages/apidom-ls/src/config/openapi/components/lint/allowed-fields-3-0.ts create mode 100644 packages/apidom-ls/src/config/openapi/components/lint/callbacks--values-type.ts create mode 100644 packages/apidom-ls/src/config/openapi/components/lint/examples--values-type.ts create mode 100644 packages/apidom-ls/src/config/openapi/components/lint/headers--values-type.ts create mode 100644 packages/apidom-ls/src/config/openapi/components/lint/index.ts create mode 100644 packages/apidom-ls/src/config/openapi/components/lint/keys--pattern.ts create mode 100644 packages/apidom-ls/src/config/openapi/components/lint/links--values-type.ts create mode 100644 packages/apidom-ls/src/config/openapi/components/lint/parameters--values-type.ts create mode 100644 packages/apidom-ls/src/config/openapi/components/lint/request-bodies--values-type.ts create mode 100644 packages/apidom-ls/src/config/openapi/components/lint/responses--values-type.ts create mode 100644 packages/apidom-ls/src/config/openapi/components/lint/schemas--values-type.ts create mode 100644 packages/apidom-ls/src/config/openapi/components/lint/security-schemes--values-type.ts diff --git a/packages/apidom-ls/src/config/codes.ts b/packages/apidom-ls/src/config/codes.ts index 32ce1d620b..4a1034b398 100644 --- a/packages/apidom-ls/src/config/codes.ts +++ b/packages/apidom-ls/src/config/codes.ts @@ -615,6 +615,18 @@ enum ApilintCodes { OPENAPI3_0_EXTERNAL_DOCUMENTATION_FIELD_URL_FORMAT_URI = 5050200, OPENAPI3_0_EXTERNAL_DOCUMENTATION_FIELD_URL_REQUIRED, + OPENAPI3_0_COMPONENTS = 5060000, + OPENAPI3_0_COMPONENTS_KEYS_PATTERN, + OPENAPI3_0_COMPONENTS_FIELD_SCHEMAS_VALUES_TYPE = 5060100, + OPENAPI3_0_COMPONENTS_FIELD_RESPONSES_VALUES_TYPE = 5060200, + OPENAPI3_0_COMPONENTS_FIELD_PARAMETERS_VALUES_TYPE = 5060300, + OPENAPI3_0_COMPONENTS_FIELD_EXAMPLES_VALUES_TYPE = 5060400, + OPENAPI3_0_COMPONENTS_FIELD_REQUEST_BODIES_VALUES_TYPE = 5060500, + OPENAPI3_0_COMPONENTS_FIELD_HEADERS_VALUES_TYPE = 5060600, + OPENAPI3_0_COMPONENTS_FIELD_SECURITY_SCHEMES_VALUES_TYPE = 5060700, + OPENAPI3_0_COMPONENTS_FIELD_LINKS_VALUES_TYPE = 5060800, + OPENAPI3_0_COMPONENTS_FIELD_CALLBACKS_VALUES_TYPE = 5060900, + OPENAPI3_1 = 7000000, OPENAPI3_1_OPENAPI_VALUE_PATTERN_3_1_0 = 7000100, diff --git a/packages/apidom-ls/src/config/openapi/components/lint/allowed-fields-3-0.ts b/packages/apidom-ls/src/config/openapi/components/lint/allowed-fields-3-0.ts new file mode 100644 index 0000000000..2bedbf6b1a --- /dev/null +++ b/packages/apidom-ls/src/config/openapi/components/lint/allowed-fields-3-0.ts @@ -0,0 +1,34 @@ +import ApilintCodes from '../../../codes'; +import { LinterMeta } from '../../../../apidom-language-types'; + +// eslint-disable-next-line @typescript-eslint/naming-convention +const allowedFieldsLint3_0: LinterMeta = { + code: ApilintCodes.NOT_ALLOWED_FIELDS, + source: 'apilint', + message: 'Object includes not allowed fields', + severity: 1, + linterFunction: 'allowedFields', + linterParams: [ + [ + 'schemas', + 'responses', + 'parameters', + 'examples', + 'requestBodies', + 'headers', + 'securitySchemes', + 'links', + 'callbacks', + ], + 'x-', + ], + marker: 'key', + targetSpecs: [ + { namespace: 'openapi', version: '3.0.0' }, + { namespace: 'openapi', version: '3.0.1' }, + { namespace: 'openapi', version: '3.0.2' }, + { namespace: 'openapi', version: '3.0.3' }, + ], +}; + +export default allowedFieldsLint3_0; diff --git a/packages/apidom-ls/src/config/openapi/components/lint/callbacks--values-type.ts b/packages/apidom-ls/src/config/openapi/components/lint/callbacks--values-type.ts new file mode 100644 index 0000000000..13c76375b4 --- /dev/null +++ b/packages/apidom-ls/src/config/openapi/components/lint/callbacks--values-type.ts @@ -0,0 +1,17 @@ +import ApilintCodes from '../../../codes'; +import { LinterMeta } from '../../../../apidom-language-types'; + +const callbacksValuesTypeLint: LinterMeta = { + code: ApilintCodes.OPENAPI3_0_COMPONENTS_FIELD_CALLBACKS_VALUES_TYPE, + source: 'apilint', + message: '"callbacks" members must be Callback Object', + severity: 1, + linterFunction: 'apilintChildrenOfElementsOrClasses', + linterParams: [['callback']], + marker: 'key', + markerTarget: 'callbacks', + target: 'callbacks', + data: {}, +}; + +export default callbacksValuesTypeLint; diff --git a/packages/apidom-ls/src/config/openapi/components/lint/examples--values-type.ts b/packages/apidom-ls/src/config/openapi/components/lint/examples--values-type.ts new file mode 100644 index 0000000000..82bb7dc3fe --- /dev/null +++ b/packages/apidom-ls/src/config/openapi/components/lint/examples--values-type.ts @@ -0,0 +1,17 @@ +import ApilintCodes from '../../../codes'; +import { LinterMeta } from '../../../../apidom-language-types'; + +const examplesValuesTypeLint: LinterMeta = { + code: ApilintCodes.OPENAPI3_0_COMPONENTS_FIELD_EXAMPLES_VALUES_TYPE, + source: 'apilint', + message: '"examples" members must be Example Object', + severity: 1, + linterFunction: 'apilintChildrenOfElementsOrClasses', + linterParams: [['example']], + marker: 'key', + markerTarget: 'examples', + target: 'examples', + data: {}, +}; + +export default examplesValuesTypeLint; diff --git a/packages/apidom-ls/src/config/openapi/components/lint/headers--values-type.ts b/packages/apidom-ls/src/config/openapi/components/lint/headers--values-type.ts new file mode 100644 index 0000000000..aae44b6bd6 --- /dev/null +++ b/packages/apidom-ls/src/config/openapi/components/lint/headers--values-type.ts @@ -0,0 +1,17 @@ +import ApilintCodes from '../../../codes'; +import { LinterMeta } from '../../../../apidom-language-types'; + +const headersValuesTypeLint: LinterMeta = { + code: ApilintCodes.OPENAPI3_0_COMPONENTS_FIELD_HEADERS_VALUES_TYPE, + source: 'apilint', + message: '"headers" members must be Parameter Object', + severity: 1, + linterFunction: 'apilintChildrenOfElementsOrClasses', + linterParams: [['header']], + marker: 'key', + markerTarget: 'headers', + target: 'headers', + data: {}, +}; + +export default headersValuesTypeLint; diff --git a/packages/apidom-ls/src/config/openapi/components/lint/index.ts b/packages/apidom-ls/src/config/openapi/components/lint/index.ts new file mode 100644 index 0000000000..c3b856401c --- /dev/null +++ b/packages/apidom-ls/src/config/openapi/components/lint/index.ts @@ -0,0 +1,27 @@ +import allowedFields3_0Lint from './allowed-fields-3-0'; +import schemasValuesTypeLint from './schemas--values-type'; +import responsesValuesTypeLint from './responses--values-type'; +import parametersValuesTypeLint from './parameters--values-type'; +import examplesValuesTypeLint from './examples--values-type'; +import requestBodiesValuesTypeLint from './request-bodies--values-type'; +import headersValuesTypeLint from './headers--values-type'; +import securitySchemesValuesType from './security-schemes--values-type'; +import linksValuesTypeLint from './links--values-type'; +import callbacksValuesTypeLint from './callbacks--values-type'; +import keysPatternLint from './keys--pattern'; + +const lints = [ + schemasValuesTypeLint, + responsesValuesTypeLint, + parametersValuesTypeLint, + examplesValuesTypeLint, + requestBodiesValuesTypeLint, + headersValuesTypeLint, + securitySchemesValuesType, + linksValuesTypeLint, + callbacksValuesTypeLint, + keysPatternLint, + allowedFields3_0Lint, +]; + +export default lints; diff --git a/packages/apidom-ls/src/config/openapi/components/lint/keys--pattern.ts b/packages/apidom-ls/src/config/openapi/components/lint/keys--pattern.ts new file mode 100644 index 0000000000..316ff17f21 --- /dev/null +++ b/packages/apidom-ls/src/config/openapi/components/lint/keys--pattern.ts @@ -0,0 +1,15 @@ +import ApilintCodes from '../../../codes'; +import { LinterMeta } from '../../../../apidom-language-types'; + +const keysPatternLint: LinterMeta = { + code: ApilintCodes.OPENAPI3_0_COMPONENTS_KEYS_PATTERN, + source: 'apilint', + message: 'components keys must match the regular expression: `^[a-zA-Z0-9\\.\\-_]+$`', + severity: 1, + linterFunction: 'apilintMembersKeysRegex', + linterParams: ['^[a-zA-Z0-9\\.\\-_]+$'], + marker: 'key', + data: {}, +}; + +export default keysPatternLint; diff --git a/packages/apidom-ls/src/config/openapi/components/lint/links--values-type.ts b/packages/apidom-ls/src/config/openapi/components/lint/links--values-type.ts new file mode 100644 index 0000000000..dd8eda95b2 --- /dev/null +++ b/packages/apidom-ls/src/config/openapi/components/lint/links--values-type.ts @@ -0,0 +1,17 @@ +import ApilintCodes from '../../../codes'; +import { LinterMeta } from '../../../../apidom-language-types'; + +const linksValuesTypeLint: LinterMeta = { + code: ApilintCodes.OPENAPI3_0_COMPONENTS_FIELD_LINKS_VALUES_TYPE, + source: 'apilint', + message: '"links" members must be Link Object', + severity: 1, + linterFunction: 'apilintChildrenOfElementsOrClasses', + linterParams: [['link']], + marker: 'key', + markerTarget: 'links', + target: 'links', + data: {}, +}; + +export default linksValuesTypeLint; diff --git a/packages/apidom-ls/src/config/openapi/components/lint/parameters--values-type.ts b/packages/apidom-ls/src/config/openapi/components/lint/parameters--values-type.ts new file mode 100644 index 0000000000..ef62c3f807 --- /dev/null +++ b/packages/apidom-ls/src/config/openapi/components/lint/parameters--values-type.ts @@ -0,0 +1,17 @@ +import ApilintCodes from '../../../codes'; +import { LinterMeta } from '../../../../apidom-language-types'; + +const parametersValuesTypeLint: LinterMeta = { + code: ApilintCodes.OPENAPI3_0_COMPONENTS_FIELD_PARAMETERS_VALUES_TYPE, + source: 'apilint', + message: '"parameters" members must be Parameter Object', + severity: 1, + linterFunction: 'apilintChildrenOfElementsOrClasses', + linterParams: [['parameter']], + marker: 'key', + markerTarget: 'parameters', + target: 'parameters', + data: {}, +}; + +export default parametersValuesTypeLint; diff --git a/packages/apidom-ls/src/config/openapi/components/lint/request-bodies--values-type.ts b/packages/apidom-ls/src/config/openapi/components/lint/request-bodies--values-type.ts new file mode 100644 index 0000000000..4ae97fc218 --- /dev/null +++ b/packages/apidom-ls/src/config/openapi/components/lint/request-bodies--values-type.ts @@ -0,0 +1,17 @@ +import ApilintCodes from '../../../codes'; +import { LinterMeta } from '../../../../apidom-language-types'; + +const requestBodiesValuesTypeLint: LinterMeta = { + code: ApilintCodes.OPENAPI3_0_COMPONENTS_FIELD_REQUEST_BODIES_VALUES_TYPE, + source: 'apilint', + message: '"requestBodies" members must be Request Body Object', + severity: 1, + linterFunction: 'apilintChildrenOfElementsOrClasses', + linterParams: [['requestBody']], + marker: 'key', + markerTarget: 'requestBodies', + target: 'requestBodies', + data: {}, +}; + +export default requestBodiesValuesTypeLint; diff --git a/packages/apidom-ls/src/config/openapi/components/lint/responses--values-type.ts b/packages/apidom-ls/src/config/openapi/components/lint/responses--values-type.ts new file mode 100644 index 0000000000..1e0505284d --- /dev/null +++ b/packages/apidom-ls/src/config/openapi/components/lint/responses--values-type.ts @@ -0,0 +1,17 @@ +import ApilintCodes from '../../../codes'; +import { LinterMeta } from '../../../../apidom-language-types'; + +const responsesValuesTypeLint: LinterMeta = { + code: ApilintCodes.OPENAPI3_0_COMPONENTS_FIELD_RESPONSES_VALUES_TYPE, + source: 'apilint', + message: '"responses" members must be Response Object', + severity: 1, + linterFunction: 'apilintChildrenOfElementsOrClasses', + linterParams: [['response']], + marker: 'key', + markerTarget: 'responses', + target: 'responses', + data: {}, +}; + +export default responsesValuesTypeLint; diff --git a/packages/apidom-ls/src/config/openapi/components/lint/schemas--values-type.ts b/packages/apidom-ls/src/config/openapi/components/lint/schemas--values-type.ts new file mode 100644 index 0000000000..9c9202ef54 --- /dev/null +++ b/packages/apidom-ls/src/config/openapi/components/lint/schemas--values-type.ts @@ -0,0 +1,17 @@ +import ApilintCodes from '../../../codes'; +import { LinterMeta } from '../../../../apidom-language-types'; + +const schemasValuesTypeLint: LinterMeta = { + code: ApilintCodes.OPENAPI3_0_COMPONENTS_FIELD_SCHEMAS_VALUES_TYPE, + source: 'apilint', + message: '"schemas" members must be Schema Object', + severity: 1, + linterFunction: 'apilintChildrenOfElementsOrClasses', + linterParams: [['schema']], + marker: 'key', + markerTarget: 'schemas', + target: 'schemas', + data: {}, +}; + +export default schemasValuesTypeLint; diff --git a/packages/apidom-ls/src/config/openapi/components/lint/security-schemes--values-type.ts b/packages/apidom-ls/src/config/openapi/components/lint/security-schemes--values-type.ts new file mode 100644 index 0000000000..4a32421f43 --- /dev/null +++ b/packages/apidom-ls/src/config/openapi/components/lint/security-schemes--values-type.ts @@ -0,0 +1,17 @@ +import ApilintCodes from '../../../codes'; +import { LinterMeta } from '../../../../apidom-language-types'; + +const securitySchemesValuesTypeLint: LinterMeta = { + code: ApilintCodes.OPENAPI3_0_COMPONENTS_FIELD_SECURITY_SCHEMES_VALUES_TYPE, + source: 'apilint', + message: '"securitySchemes" members must be Security Scheme Object', + severity: 1, + linterFunction: 'apilintChildrenOfElementsOrClasses', + linterParams: [['securityScheme']], + marker: 'key', + markerTarget: 'securitySchemes', + target: 'securitySchemes', + data: {}, +}; + +export default securitySchemesValuesTypeLint; diff --git a/packages/apidom-ls/src/config/openapi/components/meta.ts b/packages/apidom-ls/src/config/openapi/components/meta.ts index 7ad2bb2cad..381bda653d 100644 --- a/packages/apidom-ls/src/config/openapi/components/meta.ts +++ b/packages/apidom-ls/src/config/openapi/components/meta.ts @@ -1,8 +1,10 @@ +import lint from './lint'; import completion from './completion'; import documentation from './documentation'; import { FormatMeta } from '../../../apidom-language-types'; const meta: FormatMeta = { + lint, completion, documentation, }; diff --git a/packages/apidom-ls/src/config/openapi/license/lint/allowed-fields-3-0.ts b/packages/apidom-ls/src/config/openapi/license/lint/allowed-fields-3-0.ts index 09c4d6e84b..58915dd9b3 100644 --- a/packages/apidom-ls/src/config/openapi/license/lint/allowed-fields-3-0.ts +++ b/packages/apidom-ls/src/config/openapi/license/lint/allowed-fields-3-0.ts @@ -10,6 +10,12 @@ const allowedFields3_0Lint: LinterMeta = { linterFunction: 'allowedFields', linterParams: [['name', 'url'], 'x-'], marker: 'key', + targetSpecs: [ + { namespace: 'openapi', version: '3.0.0' }, + { namespace: 'openapi', version: '3.0.1' }, + { namespace: 'openapi', version: '3.0.2' }, + { namespace: 'openapi', version: '3.0.3' }, + ], }; export default allowedFields3_0Lint;