diff --git a/packages/apidom-ls/src/config/codes.ts b/packages/apidom-ls/src/config/codes.ts index b975aa80e0..8286313513 100644 --- a/packages/apidom-ls/src/config/codes.ts +++ b/packages/apidom-ls/src/config/codes.ts @@ -830,6 +830,7 @@ enum ApilintCodes { OPENAPI3_0_LINK_FIELD_SERVER_TYPE = 5270400, OPENAPI3_0_HEADER = 5280000, + OPENAPI3_0_HEADER_REQUIRED_FIELDS, OPENAPI3_0_HEADER_FIELD_DESCRIPTION_TYPE = 5280100, OPENAPI3_0_HEADER_FIELD_REQUIRED_TYPE = 5280200, OPENAPI3_0_HEADER_FIELD_DEPRECATED_TYPE = 5280300, diff --git a/packages/apidom-ls/src/config/openapi/header/lint/index.ts b/packages/apidom-ls/src/config/openapi/header/lint/index.ts index 65bd4d52fd..2e4984a6cd 100644 --- a/packages/apidom-ls/src/config/openapi/header/lint/index.ts +++ b/packages/apidom-ls/src/config/openapi/header/lint/index.ts @@ -1,5 +1,6 @@ import allowedFields3_0Lint from './allowed-fields-3-0'; import allowedFields3_1Lint from './allowed-fields-3-1'; +import requiredFieldsLint from './required-fields'; import descriptionTypeLint from './description--type'; import requiredTypeLint from './required--type'; import deprecatedTypeLint from './deprecated--type'; @@ -26,6 +27,7 @@ const lints = [ examplesValuesTypeLint, examplesMutuallyExclusiveLint, contentValuesTypeLint, + requiredFieldsLint, allowedFields3_0Lint, allowedFields3_1Lint, ]; diff --git a/packages/apidom-ls/src/config/openapi/header/lint/required-fields.ts b/packages/apidom-ls/src/config/openapi/header/lint/required-fields.ts new file mode 100644 index 0000000000..fb8fdb20f8 --- /dev/null +++ b/packages/apidom-ls/src/config/openapi/header/lint/required-fields.ts @@ -0,0 +1,32 @@ +import { DiagnosticSeverity } from 'vscode-languageserver-types'; + +import ApilintCodes from '../../../codes'; +import { LinterMeta } from '../../../../apidom-language-types'; + +const requiredFieldsLint: LinterMeta = { + code: ApilintCodes.OPENAPI3_0_HEADER_REQUIRED_FIELDS, + source: 'apilint', + message: 'Header Object must contain one the following fields: content, schema', + severity: DiagnosticSeverity.Error, + linterFunction: 'hasRequiredField', + linterParams: ['content'], + marker: 'key', + conditions: [ + { + function: 'missingFields', + params: [['content', 'schema']], + }, + ], + data: { + quickFix: [ + { + message: "add 'content' section", + action: 'addChild', + snippetYaml: 'content: \n \n', + snippetJson: '"content": {\n \n },\n', + }, + ], + }, +}; + +export default requiredFieldsLint;