Skip to content

Commit 16fbfca

Browse files
authored
feat(ls): add lint rules for OpenAPI 2.0 Schema Object (#3706)
Refs #3613
1 parent c35aa51 commit 16fbfca

File tree

87 files changed

+390
-266
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

87 files changed

+390
-266
lines changed

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

+1
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ enum ApilintCodes {
6767
SCHEMA_TYPE_OPENAPI_3_0,
6868
SCHEMA_NULLABLE_NOT_RECOMMENDED,
6969
SCHEMA_MISSING_CORE_FIELDS,
70+
SCHEMA_NULLABLE,
7071

7172
DUPLICATE_KEYS = 14999,
7273
NOT_ALLOWED_FIELDS = 15000,

packages/apidom-ls/src/config/common/schema/lint/$id--format-uri.ts

+3
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ import { DiagnosticSeverity } from 'vscode-languageserver-types';
22

33
import ApilintCodes from '../../../codes';
44
import { LinterMeta } from '../../../../apidom-language-types';
5+
import { AsyncAPI2 } from '../../../asyncapi/target-specs';
6+
import { OpenAPI3 } from '../../../openapi/target-specs';
57

68
const $idFormatURILint: LinterMeta = {
79
code: ApilintCodes.SCHEMA_ID,
@@ -12,6 +14,7 @@ const $idFormatURILint: LinterMeta = {
1214
marker: 'value',
1315
target: '$id',
1416
data: {},
17+
targetSpecs: [...AsyncAPI2, ...OpenAPI3],
1518
};
1619

1720
export default $idFormatURILint;

packages/apidom-ls/src/config/common/schema/lint/$ref--no-siblings.ts

+3-9
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ import { DiagnosticSeverity } from 'vscode-languageserver-types';
22

33
import ApilintCodes from '../../../codes';
44
import { LinterMeta } from '../../../../apidom-language-types';
5+
import { AsyncAPI2 } from '../../../asyncapi/target-specs';
6+
import { OpenAPI2 } from '../../../openapi/target-specs';
57

68
const $refNoSiblingsLint: LinterMeta = {
79
code: ApilintCodes.SCHEMA_REF_NOSIBLINGS,
@@ -11,15 +13,6 @@ const $refNoSiblingsLint: LinterMeta = {
1113
linterFunction: 'allowedFields',
1214
linterParams: [['$ref']],
1315
marker: 'key',
14-
targetSpecs: [
15-
{ namespace: 'asyncapi', version: '2.0.0' },
16-
{ namespace: 'asyncapi', version: '2.1.0' },
17-
{ namespace: 'asyncapi', version: '2.2.0' },
18-
{ namespace: 'asyncapi', version: '2.3.0' },
19-
{ namespace: 'asyncapi', version: '2.4.0' },
20-
{ namespace: 'asyncapi', version: '2.5.0' },
21-
{ namespace: 'asyncapi', version: '2.6.0' },
22-
],
2316
conditions: [
2417
{
2518
function: 'existFields',
@@ -36,6 +29,7 @@ const $refNoSiblingsLint: LinterMeta = {
3629
},
3730
],
3831
},
32+
targetSpecs: [...AsyncAPI2, ...OpenAPI2],
3933
};
4034

4135
export default $refNoSiblingsLint;

packages/apidom-ls/src/config/common/schema/lint/$ref--valid.ts

+3
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ import { DiagnosticSeverity } from 'vscode-languageserver-types';
22

33
import ApilintCodes from '../../../codes';
44
import { LinterMeta } from '../../../../apidom-language-types';
5+
import { AsyncAPI2 } from '../../../asyncapi/target-specs';
6+
import { OpenAPI2, OpenAPI3 } from '../../../openapi/target-specs';
57

68
const $refValidLint: LinterMeta = {
79
code: ApilintCodes.SCHEMA_REF,
@@ -12,6 +14,7 @@ const $refValidLint: LinterMeta = {
1214
marker: 'value',
1315
target: '$ref',
1416
data: {},
17+
targetSpecs: [...AsyncAPI2, ...OpenAPI2, ...OpenAPI3],
1518
};
1619

1720
export default $refValidLint;

packages/apidom-ls/src/config/common/schema/lint/additional-items--non-array.ts

+3
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ import { DiagnosticSeverity } from 'vscode-languageserver-types';
22

33
import ApilintCodes from '../../../codes';
44
import { LinterMeta } from '../../../../apidom-language-types';
5+
import { AsyncAPI2 } from '../../../asyncapi/target-specs';
6+
import { OpenAPI3 } from '../../../openapi/target-specs';
57

68
const additionalItemsNonArrayLint: LinterMeta = {
79
code: ApilintCodes.SCHEMA_ADDITIONALITEMS_NONARRAY,
@@ -30,6 +32,7 @@ const additionalItemsNonArrayLint: LinterMeta = {
3032
},
3133
],
3234
},
35+
targetSpecs: [...AsyncAPI2, ...OpenAPI3],
3336
};
3437

3538
export default additionalItemsNonArrayLint;

packages/apidom-ls/src/config/common/schema/lint/additional-items--type-openapi-3-1-asyncapi-2.ts renamed to packages/apidom-ls/src/config/common/schema/lint/additional-items--type-openapi-3-1--asyncapi-2.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import { AsyncAPI2 } from '../../../asyncapi/target-specs';
66
import { OpenAPI31 } from '../../../openapi/target-specs';
77

88
// eslint-disable-next-line @typescript-eslint/naming-convention
9-
const additionalItemsTypeOpenAPI3_1_AsyncAPI2Lint: LinterMeta = {
9+
const additionalItemsTypeOpenAPI3_1__AsyncAPI2Lint: LinterMeta = {
1010
code: ApilintCodes.SCHEMA_ADDITIONALITEMS,
1111
source: 'apilint',
1212
message: 'additionalItems must be a schema object or a boolean JSON schema',
@@ -19,4 +19,4 @@ const additionalItemsTypeOpenAPI3_1_AsyncAPI2Lint: LinterMeta = {
1919
targetSpecs: [...OpenAPI31, ...AsyncAPI2],
2020
};
2121

22-
export default additionalItemsTypeOpenAPI3_1_AsyncAPI2Lint;
22+
export default additionalItemsTypeOpenAPI3_1__AsyncAPI2Lint;

packages/apidom-ls/src/config/common/schema/lint/additional-items--type.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { DiagnosticSeverity } from 'vscode-languageserver-types';
22

33
import ApilintCodes from '../../../codes';
44
import { LinterMeta } from '../../../../apidom-language-types';
5-
import { OpenAPI2, OpenAPI30 } from '../../../openapi/target-specs';
5+
import { OpenAPI30 } from '../../../openapi/target-specs';
66

77
const additionalItemsTypeLint: LinterMeta = {
88
code: ApilintCodes.SCHEMA_ADDITIONALITEMS,
@@ -14,7 +14,7 @@ const additionalItemsTypeLint: LinterMeta = {
1414
marker: 'value',
1515
target: 'additionalItems',
1616
data: {},
17-
targetSpecs: [...OpenAPI2, ...OpenAPI30],
17+
targetSpecs: OpenAPI30,
1818
};
1919

2020
export default additionalItemsTypeLint;

packages/apidom-ls/src/config/common/schema/lint/additional-properties--non-object.ts

+3
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ import { DiagnosticSeverity } from 'vscode-languageserver-types';
22

33
import ApilintCodes from '../../../codes';
44
import { LinterMeta } from '../../../../apidom-language-types';
5+
import { AsyncAPI2 } from '../../../asyncapi/target-specs';
6+
import { OpenAPI2, OpenAPI3 } from '../../../openapi/target-specs';
57

68
const additionalPropertiesNonObjectLint: LinterMeta = {
79
code: ApilintCodes.SCHEMA_ADDITIONALPROPERTIES_NONOBJECT,
@@ -30,6 +32,7 @@ const additionalPropertiesNonObjectLint: LinterMeta = {
3032
},
3133
],
3234
},
35+
targetSpecs: [...AsyncAPI2, ...OpenAPI2, ...OpenAPI3],
3336
};
3437

3538
export default additionalPropertiesNonObjectLint;

packages/apidom-ls/src/config/common/schema/lint/additional-properties--type.ts

+3
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ import { DiagnosticSeverity } from 'vscode-languageserver-types';
22

33
import ApilintCodes from '../../../codes';
44
import { LinterMeta } from '../../../../apidom-language-types';
5+
import { AsyncAPI2 } from '../../../asyncapi/target-specs';
6+
import { OpenAPI2, OpenAPI3 } from '../../../openapi/target-specs';
57

68
const additionalPropertiesTypeLint: LinterMeta = {
79
code: ApilintCodes.SCHEMA_ADDITIONALPROPERTIES,
@@ -13,6 +15,7 @@ const additionalPropertiesTypeLint: LinterMeta = {
1315
marker: 'value',
1416
target: 'additionalProperties',
1517
data: {},
18+
targetSpecs: [...AsyncAPI2, ...OpenAPI2, ...OpenAPI3],
1619
};
1720

1821
export default additionalPropertiesTypeLint;

packages/apidom-ls/src/config/common/schema/lint/all-of--type-openapi-3-1-asyncapi-2.ts renamed to packages/apidom-ls/src/config/common/schema/lint/all-of--type-openapi-3-1--asyncapi-2.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import { AsyncAPI2 } from '../../../asyncapi/target-specs';
66
import { OpenAPI31 } from '../../../openapi/target-specs';
77

88
// eslint-disable-next-line @typescript-eslint/naming-convention
9-
const allOfTypeOpenAPI3_1_AsyncAPI2Lint: LinterMeta = {
9+
const allOfTypeOpenAPI3_1__AsyncAPI2Lint: LinterMeta = {
1010
code: ApilintCodes.SCHEMA_ALLOF,
1111
source: 'apilint',
1212
message: 'allOf must be a non-empty array of schema objects or boolean JSON schemas',
@@ -19,4 +19,4 @@ const allOfTypeOpenAPI3_1_AsyncAPI2Lint: LinterMeta = {
1919
targetSpecs: [...OpenAPI31, ...AsyncAPI2],
2020
};
2121

22-
export default allOfTypeOpenAPI3_1_AsyncAPI2Lint;
22+
export default allOfTypeOpenAPI3_1__AsyncAPI2Lint;

packages/apidom-ls/src/config/common/schema/lint/any-of--type-openapi-3-1-asyncapi-2.ts renamed to packages/apidom-ls/src/config/common/schema/lint/any-of--type-openapi-3-1--asyncapi-2.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import { AsyncAPI2 } from '../../../asyncapi/target-specs';
66
import { OpenAPI31 } from '../../../openapi/target-specs';
77

88
// eslint-disable-next-line @typescript-eslint/naming-convention
9-
const anyOfTypeOpenAPI3_1_AsyncAPI2Lint: LinterMeta = {
9+
const anyOfTypeOpenAPI3_1__AsyncAPI2Lint: LinterMeta = {
1010
code: ApilintCodes.SCHEMA_ANYOF,
1111
source: 'apilint',
1212
message: 'anyOf must be a non-empty array of schema objects or boolean JSON schemas',
@@ -19,4 +19,4 @@ const anyOfTypeOpenAPI3_1_AsyncAPI2Lint: LinterMeta = {
1919
targetSpecs: [...OpenAPI31, ...AsyncAPI2],
2020
};
2121

22-
export default anyOfTypeOpenAPI3_1_AsyncAPI2Lint;
22+
export default anyOfTypeOpenAPI3_1__AsyncAPI2Lint;

packages/apidom-ls/src/config/common/schema/lint/any-of--type.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { DiagnosticSeverity } from 'vscode-languageserver-types';
22

33
import ApilintCodes from '../../../codes';
44
import { LinterMeta } from '../../../../apidom-language-types';
5-
import { OpenAPI2, OpenAPI30 } from '../../../openapi/target-specs';
5+
import { OpenAPI30 } from '../../../openapi/target-specs';
66

77
const anyOfTypeLint: LinterMeta = {
88
code: ApilintCodes.SCHEMA_ANYOF,
@@ -14,7 +14,7 @@ const anyOfTypeLint: LinterMeta = {
1414
marker: 'key',
1515
target: 'anyOf',
1616
data: {},
17-
targetSpecs: [...OpenAPI2, ...OpenAPI30],
17+
targetSpecs: OpenAPI30,
1818
};
1919

2020
export default anyOfTypeLint;

packages/apidom-ls/src/config/common/schema/lint/contains--non-array.ts

+3
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ import { DiagnosticSeverity } from 'vscode-languageserver-types';
22

33
import ApilintCodes from '../../../codes';
44
import { LinterMeta } from '../../../../apidom-language-types';
5+
import { OpenAPI3 } from '../../../openapi/target-specs';
6+
import { AsyncAPI2 } from '../../../asyncapi/target-specs';
57

68
const containsNonArrayLint: LinterMeta = {
79
code: ApilintCodes.SCHEMA_CONTAINS_NONARRAY,
@@ -30,6 +32,7 @@ const containsNonArrayLint: LinterMeta = {
3032
},
3133
],
3234
},
35+
targetSpecs: [...AsyncAPI2, ...OpenAPI3],
3336
};
3437

3538
export default containsNonArrayLint;

packages/apidom-ls/src/config/common/schema/lint/contains--type-openapi-3-1-asyncapi-2.ts renamed to packages/apidom-ls/src/config/common/schema/lint/contains--type-openapi-3-1--asyncapi-2.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import { AsyncAPI2 } from '../../../asyncapi/target-specs';
66
import { OpenAPI31 } from '../../../openapi/target-specs';
77

88
// eslint-disable-next-line @typescript-eslint/naming-convention
9-
const containsTypeOpenAPI3_1_AsyncAPI2Lint: LinterMeta = {
9+
const containsTypeOpenAPI3_1__AsyncAPI2Lint: LinterMeta = {
1010
code: ApilintCodes.SCHEMA_CONTAINS,
1111
source: 'apilint',
1212
message: 'contains must be a schema object or a boolean JSON schema',
@@ -19,4 +19,4 @@ const containsTypeOpenAPI3_1_AsyncAPI2Lint: LinterMeta = {
1919
targetSpecs: [...OpenAPI31, ...AsyncAPI2],
2020
};
2121

22-
export default containsTypeOpenAPI3_1_AsyncAPI2Lint;
22+
export default containsTypeOpenAPI3_1__AsyncAPI2Lint;

packages/apidom-ls/src/config/common/schema/lint/contains--type.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { DiagnosticSeverity } from 'vscode-languageserver-types';
22

33
import ApilintCodes from '../../../codes';
44
import { LinterMeta } from '../../../../apidom-language-types';
5-
import { OpenAPI2, OpenAPI30 } from '../../../openapi/target-specs';
5+
import { OpenAPI30 } from '../../../openapi/target-specs';
66

77
const containsTypeLint: LinterMeta = {
88
code: ApilintCodes.SCHEMA_CONTAINS,
@@ -14,7 +14,7 @@ const containsTypeLint: LinterMeta = {
1414
marker: 'value',
1515
target: 'contains',
1616
data: {},
17-
targetSpecs: [...OpenAPI2, ...OpenAPI30],
17+
targetSpecs: OpenAPI30,
1818
};
1919

2020
export default containsTypeLint;

packages/apidom-ls/src/config/common/schema/lint/deprecated--type.ts

+3-9
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ import { DiagnosticSeverity } from 'vscode-languageserver-types';
22

33
import ApilintCodes from '../../../codes';
44
import { LinterMeta } from '../../../../apidom-language-types';
5+
import { AsyncAPI2 } from '../../../asyncapi/target-specs';
6+
import { OpenAPI3 } from '../../../openapi/target-specs';
57

68
const deprecatedTypeLint: LinterMeta = {
79
code: ApilintCodes.SCHEMA_READONLY,
@@ -12,15 +14,7 @@ const deprecatedTypeLint: LinterMeta = {
1214
linterParams: ['boolean'],
1315
marker: 'value',
1416
target: 'deprecated',
15-
targetSpecs: [
16-
{ namespace: 'asyncapi', version: '2.0.0' },
17-
{ namespace: 'asyncapi', version: '2.1.0' },
18-
{ namespace: 'asyncapi', version: '2.2.0' },
19-
{ namespace: 'asyncapi', version: '2.3.0' },
20-
{ namespace: 'asyncapi', version: '2.4.0' },
21-
{ namespace: 'asyncapi', version: '2.5.0' },
22-
{ namespace: 'asyncapi', version: '2.6.0' },
23-
],
17+
targetSpecs: [...AsyncAPI2, ...OpenAPI3],
2418
data: {},
2519
};
2620

packages/apidom-ls/src/config/common/schema/lint/description--type.ts

+3
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ import { DiagnosticSeverity } from 'vscode-languageserver-types';
22

33
import ApilintCodes from '../../../codes';
44
import { LinterMeta } from '../../../../apidom-language-types';
5+
import { AsyncAPI2 } from '../../../asyncapi/target-specs';
6+
import { OpenAPI2, OpenAPI3 } from '../../../openapi/target-specs';
57

68
const descriptionTypeLint: LinterMeta = {
79
code: ApilintCodes.SCHEMA_DESCRIPTION,
@@ -13,6 +15,7 @@ const descriptionTypeLint: LinterMeta = {
1315
marker: 'value',
1416
target: 'description',
1517
data: {},
18+
targetSpecs: [...AsyncAPI2, ...OpenAPI2, ...OpenAPI3],
1619
};
1720

1821
export default descriptionTypeLint;

packages/apidom-ls/src/config/common/schema/lint/discriminator--exist-in-required.ts

+2-9
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import { DiagnosticSeverity } from 'vscode-languageserver-types';
22

33
import ApilintCodes from '../../../codes';
44
import { LinterMeta } from '../../../../apidom-language-types';
5+
import { AsyncAPI2 } from '../../../asyncapi/target-specs';
56

67
const discriminatorExistInRequiredLint: LinterMeta = {
78
code: ApilintCodes.SCHEMA_DISCRIMINATOR_EXIST,
@@ -11,15 +12,7 @@ const discriminatorExistInRequiredLint: LinterMeta = {
1112
linterFunction: 'apilintDiscriminator',
1213
marker: 'value',
1314
target: 'discriminator',
14-
targetSpecs: [
15-
{ namespace: 'asyncapi', version: '2.0.0' },
16-
{ namespace: 'asyncapi', version: '2.1.0' },
17-
{ namespace: 'asyncapi', version: '2.2.0' },
18-
{ namespace: 'asyncapi', version: '2.3.0' },
19-
{ namespace: 'asyncapi', version: '2.4.0' },
20-
{ namespace: 'asyncapi', version: '2.5.0' },
21-
{ namespace: 'asyncapi', version: '2.6.0' },
22-
],
15+
targetSpecs: AsyncAPI2,
2316
data: {},
2417
};
2518

packages/apidom-ls/src/config/common/schema/lint/discriminator--type-asyncapi-2-0--2-4.ts renamed to packages/apidom-ls/src/config/common/schema/lint/discriminator--type-openapi-2--asyncapi-2.ts

+6-11
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,11 @@ import { DiagnosticSeverity } from 'vscode-languageserver-types';
22

33
import ApilintCodes from '../../../codes';
44
import { LinterMeta } from '../../../../apidom-language-types';
5+
import { AsyncAPI2 } from '../../../asyncapi/target-specs';
6+
import { OpenAPI2 } from '../../../openapi/target-specs';
57

6-
const discriminatorTypeLint: LinterMeta = {
8+
// eslint-disable-next-line @typescript-eslint/naming-convention
9+
const discriminatorTypeOpenAPI2__AsyncAPI2Lint: LinterMeta = {
710
code: ApilintCodes.SCHEMA_DISCRIMINATOR,
811
source: 'apilint',
912
message: "'discriminator' value must be a string",
@@ -13,15 +16,7 @@ const discriminatorTypeLint: LinterMeta = {
1316
marker: 'value',
1417
target: 'discriminator',
1518
data: {},
16-
targetSpecs: [
17-
{ namespace: 'asyncapi', version: '2.0.0' },
18-
{ namespace: 'asyncapi', version: '2.1.0' },
19-
{ namespace: 'asyncapi', version: '2.2.0' },
20-
{ namespace: 'asyncapi', version: '2.3.0' },
21-
{ namespace: 'asyncapi', version: '2.4.0' },
22-
{ namespace: 'asyncapi', version: '2.5.0' },
23-
{ namespace: 'asyncapi', version: '2.6.0' },
24-
],
19+
targetSpecs: [...AsyncAPI2, ...OpenAPI2],
2520
};
2621

27-
export default discriminatorTypeLint;
22+
export default discriminatorTypeOpenAPI2__AsyncAPI2Lint;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import { DiagnosticSeverity } from 'vscode-languageserver-types';
2+
3+
import ApilintCodes from '../../../codes';
4+
import { LinterMeta } from '../../../../apidom-language-types';
5+
import { OpenAPI3 } from '../../../openapi/target-specs';
6+
7+
const discriminatorTypeOpenAPI3Lint: LinterMeta = {
8+
code: ApilintCodes.SCHEMA_DISCRIMINATOR,
9+
source: 'apilint',
10+
message: "'discriminator' value must be an object",
11+
severity: DiagnosticSeverity.Error,
12+
linterFunction: 'apilintType',
13+
linterParams: ['discriminator'],
14+
marker: 'value',
15+
target: 'discriminator',
16+
data: {},
17+
targetSpecs: OpenAPI3,
18+
};
19+
20+
export default discriminatorTypeOpenAPI3Lint;

packages/apidom-ls/src/config/common/schema/lint/else--non-if.ts

+3
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ import { DiagnosticSeverity } from 'vscode-languageserver-types';
22

33
import ApilintCodes from '../../../codes';
44
import { LinterMeta } from '../../../../apidom-language-types';
5+
import { AsyncAPI2 } from '../../../asyncapi/target-specs';
6+
import { OpenAPI31 } from '../../../openapi/target-specs';
57

68
const elseNonIfLint: LinterMeta = {
79
code: ApilintCodes.SCHEMA_ELSE_NONIF,
@@ -28,6 +30,7 @@ const elseNonIfLint: LinterMeta = {
2830
},
2931
],
3032
},
33+
targetSpecs: [...AsyncAPI2, ...OpenAPI31],
3134
};
3235

3336
export default elseNonIfLint;

0 commit comments

Comments
 (0)