Skip to content

Commit f758bca

Browse files
committed
feat(ls): additional oas31 lint rules
1 parent 766f74a commit f758bca

12 files changed

+199
-4
lines changed

packages/apidom-ls/src/config/codes.ts

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -696,10 +696,20 @@ enum ApilintCodes {
696696
OPENAPI3_1_OPENAPI_VALUE_PATTERN_3_1_0 = 7000100,
697697

698698
OPENAPI3_1_OPEN_API = 7010000,
699-
OPENAPI3_1_OPEN_API_FIELD_WEBHOOKS_TYPE = 7010100,
700-
OPENAPI3_1_OPEN_API_FIELD_JSON_SCHEMA_FORMAT_URI = 7010200,
701-
OPENAPI3_1_OPEN_API_FIELD_INFO_TYPE = 7010300,
699+
OPENAPI3_1_OPEN_API_FIELD_INFO_TYPE = 7010100,
702700
OPENAPI3_1_OPEN_API_FIELD_INFO_TYPE_REQUIRED,
701+
OPENAPI3_1_OPEN_API_FIELD_SERVERS_TYPE = 7010200,
702+
OPENAPI3_1_OPEN_API_FIELD_SERVERS_ITEMS_TYPE,
703+
OPENAPI3_1_OPEN_API_FIELD_PATHS_TYPE = 7010300,
704+
OPENAPI3_1_OPEN_API_FIELD_PATHS_REQUIRED,
705+
OPENAPI3_1_OPEN_API_FIELD_COMPONENTS_TYPE = 7010400,
706+
OPENAPI3_1_OPEN_API_FIELD_SECURITY_TYPE = 7010500,
707+
OPENAPI3_1_OPEN_API_FIELD_SECURITY_ITEMS_TYPE,
708+
OPENAPI3_1_OPEN_API_FIELD_TAGS_TYPE = 7010600,
709+
OPENAPI3_1_OPEN_API_FIELD_TAGS_ITEMS_TYPE,
710+
OPENAPI3_1_OPEN_API_FIELD_EXTERNAL_DOCS_TYPE = 7010700,
711+
OPENAPI3_1_OPEN_API_FIELD_WEBHOOKS_TYPE = 7010800,
712+
OPENAPI3_1_OPEN_API_FIELD_JSON_SCHEMA_FORMAT_URI = 7010900,
703713

704714
OPENAPI3_1_INFO = 7020000,
705715
OPENAPI3_1_INFO_FIELD_SUMMARY_TYPE = 7020100,
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import ApilintCodes from '../../../codes';
2+
import { LinterMeta } from '../../../../apidom-language-types';
3+
4+
const componentsTypeLint: LinterMeta = {
5+
code: ApilintCodes.OPENAPI3_1_OPEN_API_FIELD_COMPONENTS_TYPE,
6+
source: 'apilint',
7+
message: 'components must be an object',
8+
severity: 1,
9+
linterFunction: 'apilintElementOrClass',
10+
linterParams: ['components'],
11+
marker: 'value',
12+
target: 'components',
13+
data: {},
14+
};
15+
16+
export default componentsTypeLint;
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import ApilintCodes from '../../../codes';
2+
import { LinterMeta } from '../../../../apidom-language-types';
3+
4+
const externalDocsTypeLint: LinterMeta = {
5+
code: ApilintCodes.OPENAPI3_1_OPEN_API_FIELD_EXTERNAL_DOCS_TYPE,
6+
source: 'apilint',
7+
message: 'externalDocs must be an object',
8+
severity: 1,
9+
linterFunction: 'apilintElementOrClass',
10+
linterParams: ['externalDocumentation'],
11+
marker: 'value',
12+
target: 'externalDocs',
13+
data: {},
14+
};
15+
16+
export default externalDocsTypeLint;
Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,33 @@
11
import allowedFieldsLint from './allowed-fields';
2+
import componentsTypeLint from './components--type';
3+
import externalDocsTypeLint from './external-docs--type';
24
import infoRequiredLint from './info--required';
5+
import infoTypeLint from './info--type';
36
import jsonSchemaDialectFormatURILint from './jsonSchemaDialect--format-uri';
7+
import pathsTypeLint from './paths--type';
8+
import securityItemsTypeLint from './security--items-type';
9+
import securityTypeLint from './security--type';
10+
import serversItemsTypeLint from './servers--items-type';
11+
import serversTypeLint from './servers--type';
12+
import tagsItemsTypeLint from './tags--items-type';
13+
import tagsTypeLint from './tags--type';
414
import webhooksLint from './webhooks--type';
515

6-
const lints = [allowedFieldsLint, infoRequiredLint, jsonSchemaDialectFormatURILint, webhooksLint];
16+
const lints = [
17+
allowedFieldsLint,
18+
componentsTypeLint,
19+
externalDocsTypeLint,
20+
infoRequiredLint,
21+
infoTypeLint,
22+
jsonSchemaDialectFormatURILint,
23+
pathsTypeLint,
24+
securityItemsTypeLint,
25+
securityTypeLint,
26+
serversItemsTypeLint,
27+
serversTypeLint,
28+
tagsItemsTypeLint,
29+
tagsTypeLint,
30+
webhooksLint,
31+
];
732

833
export default lints;
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import ApilintCodes from '../../../codes';
2+
import { LinterMeta } from '../../../../apidom-language-types';
3+
4+
const infoTypeLint: LinterMeta = {
5+
code: ApilintCodes.OPENAPI3_1_OPEN_API_FIELD_INFO_TYPE,
6+
source: 'apilint',
7+
message: 'info must be an object',
8+
severity: 1,
9+
linterFunction: 'apilintElementOrClass',
10+
linterParams: ['info'],
11+
marker: 'value',
12+
target: 'info',
13+
data: {},
14+
};
15+
16+
export default infoTypeLint;
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import ApilintCodes from '../../../codes';
2+
import { LinterMeta } from '../../../../apidom-language-types';
3+
4+
const pathsTypeLint: LinterMeta = {
5+
code: ApilintCodes.OPENAPI3_1_OPEN_API_FIELD_PATHS_TYPE,
6+
source: 'apilint',
7+
message: 'paths must be an object',
8+
severity: 1,
9+
linterFunction: 'apilintElementOrClass',
10+
linterParams: ['paths'],
11+
marker: 'value',
12+
target: 'paths',
13+
data: {},
14+
};
15+
16+
export default pathsTypeLint;
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import ApilintCodes from '../../../codes';
2+
import { LinterMeta } from '../../../../apidom-language-types';
3+
4+
const securityItemsTypeLint: LinterMeta = {
5+
code: ApilintCodes.OPENAPI3_1_OPEN_API_FIELD_SECURITY_ITEMS_TYPE,
6+
source: 'apilint',
7+
message: 'security must be an array of Security Requirement Objects',
8+
severity: 1,
9+
linterFunction: 'apilintArrayOfElementsOrClasses',
10+
linterParams: [['securityRequirement']],
11+
marker: 'key',
12+
target: 'security',
13+
data: {},
14+
};
15+
16+
export default securityItemsTypeLint;
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import ApilintCodes from '../../../codes';
2+
import { LinterMeta } from '../../../../apidom-language-types';
3+
4+
const securityTypeLint: LinterMeta = {
5+
code: ApilintCodes.OPENAPI3_1_OPEN_API_FIELD_SECURITY_TYPE,
6+
source: 'apilint',
7+
message: 'security must be an array',
8+
severity: 1,
9+
linterFunction: 'apilintElementOrClass',
10+
linterParams: ['security'],
11+
marker: 'value',
12+
target: 'security',
13+
data: {},
14+
};
15+
16+
export default securityTypeLint;
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import ApilintCodes from '../../../codes';
2+
import { LinterMeta } from '../../../../apidom-language-types';
3+
4+
const serverItemsTypeLint: LinterMeta = {
5+
code: ApilintCodes.OPENAPI3_1_OPEN_API_FIELD_SERVERS_ITEMS_TYPE,
6+
source: 'apilint',
7+
message: 'servers must be an array of Server Objects',
8+
severity: 1,
9+
linterFunction: 'apilintArrayOfElementsOrClasses',
10+
linterParams: [['server']],
11+
marker: 'key',
12+
target: 'servers',
13+
data: {},
14+
};
15+
16+
export default serverItemsTypeLint;
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import ApilintCodes from '../../../codes';
2+
import { LinterMeta } from '../../../../apidom-language-types';
3+
4+
const serversTypeLint: LinterMeta = {
5+
code: ApilintCodes.OPENAPI3_1_OPEN_API_FIELD_SERVERS_TYPE,
6+
source: 'apilint',
7+
message: 'servers must be an array',
8+
severity: 1,
9+
linterFunction: 'apilintElementOrClass',
10+
linterParams: ['servers'],
11+
marker: 'value',
12+
target: 'servers',
13+
data: {},
14+
};
15+
16+
export default serversTypeLint;
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import ApilintCodes from '../../../codes';
2+
import { LinterMeta } from '../../../../apidom-language-types';
3+
4+
const tagsItemsTypeLint: LinterMeta = {
5+
code: ApilintCodes.OPENAPI3_1_OPEN_API_FIELD_TAGS_ITEMS_TYPE,
6+
source: 'apilint',
7+
message: 'tags must be an array of Tag Objects',
8+
severity: 1,
9+
linterFunction: 'apilintArrayOfElementsOrClasses',
10+
linterParams: [['tag']],
11+
marker: 'key',
12+
target: 'tags',
13+
data: {},
14+
};
15+
16+
export default tagsItemsTypeLint;
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import ApilintCodes from '../../../codes';
2+
import { LinterMeta } from '../../../../apidom-language-types';
3+
4+
const tagsTypeLint: LinterMeta = {
5+
code: ApilintCodes.OPENAPI3_1_OPEN_API_FIELD_TAGS_TYPE,
6+
source: 'apilint',
7+
message: 'tags must be an array',
8+
severity: 1,
9+
linterFunction: 'apilintElementOrClass',
10+
linterParams: ['tags'],
11+
marker: 'value',
12+
target: 'tags',
13+
data: {},
14+
};
15+
16+
export default tagsTypeLint;

0 commit comments

Comments
 (0)