Skip to content

Commit 5313955

Browse files
committed
Support JSON Schema versions from schemastore
Signed-off-by: Yevhen Vydolob <yvydolob@redhat.com>
1 parent b0fee20 commit 5313955

File tree

7 files changed

+28
-8
lines changed

7 files changed

+28
-8
lines changed

src/languageserver/handlers/schemaSelectionHandlers.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ export class JSONSchemaSelection {
3232
name: val[1].title,
3333
uri: val[0],
3434
description: val[1].description,
35+
versions: val[1].versions,
3536
};
3637
});
3738

@@ -71,6 +72,7 @@ export class JSONSchemaSelection {
7172
usedForCurrentFile: true,
7273
name: val[1].title,
7374
description: val[1].description,
75+
versions: val[1].versions,
7476
};
7577
});
7678
const result = [];

src/languageserver/handlers/settingsHandlers.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -210,6 +210,7 @@ export class SettingsHandler {
210210
priority: SchemaPriority.SchemaStore,
211211
name: schema.name,
212212
description: schema.description,
213+
versions: schema.versions,
213214
});
214215
}
215216
}

src/languageservice/jsonSchema.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
*--------------------------------------------------------------------------------------------*/
55

66
import { CompletionItemKind } from 'vscode-json-languageservice';
7+
import { SchemaVersions } from './yamlTypes';
78

89
export type JSONSchemaRef = JSONSchema | boolean;
910

@@ -15,6 +16,7 @@ export interface JSONSchema {
1516
type?: string | string[];
1617
title?: string;
1718
closestTitle?: string;
19+
versions?: SchemaVersions;
1820
// eslint-disable-next-line @typescript-eslint/no-explicit-any
1921
default?: any;
2022
definitions?: { [name: string]: JSONSchema };

src/languageservice/services/yamlSchemaService.ts

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ import { parse } from 'yaml';
2626
import * as path from 'path';
2727
import { getSchemaFromModeline } from './modelineUtil';
2828
import { JSONSchemaDescriptionExt } from '../../requestTypes';
29+
import { SchemaVersions } from '../yamlTypes';
2930

3031
const localize = nls.loadMessageBundle();
3132

@@ -84,7 +85,11 @@ export class FilePatternAssociation {
8485
return this.schemas;
8586
}
8687
}
87-
88+
interface SchemaStoreSchema {
89+
name: string;
90+
description: string;
91+
versions?: SchemaVersions;
92+
}
8893
export class YAMLSchemaService extends JSONSchemaService {
8994
// To allow to use schemasById from super.
9095
// eslint-disable-next-line @typescript-eslint/no-explicit-any
@@ -96,7 +101,7 @@ export class YAMLSchemaService extends JSONSchemaService {
96101
private requestService: SchemaRequestService;
97102
public schemaPriorityMapping: Map<string, Set<SchemaPriority>>;
98103

99-
private schemaUriToNameAndDescription = new Map<string, [string, string]>();
104+
private schemaUriToNameAndDescription = new Map<string, SchemaStoreSchema>();
100105

101106
constructor(
102107
requestService: SchemaRequestService,
@@ -129,10 +134,11 @@ export class YAMLSchemaService extends JSONSchemaService {
129134
};
130135

131136
if (this.schemaUriToNameAndDescription.has(schemaUri)) {
132-
const [name, description] = this.schemaUriToNameAndDescription.get(schemaUri);
137+
const { name, description, versions } = this.schemaUriToNameAndDescription.get(schemaUri);
133138
schemaHandle.name = name;
134139
schemaHandle.description = description;
135140
schemaHandle.fromStore = true;
141+
schemaHandle.versions = versions;
136142
}
137143
result.push(schemaHandle);
138144
}
@@ -653,9 +659,10 @@ export class YAMLSchemaService extends JSONSchemaService {
653659
}
654660
unresolvedJsonSchema.uri = schemaUri;
655661
if (this.schemaUriToNameAndDescription.has(schemaUri)) {
656-
const [name, description] = this.schemaUriToNameAndDescription.get(schemaUri);
662+
const { name, description, versions } = this.schemaUriToNameAndDescription.get(schemaUri);
657663
unresolvedJsonSchema.schema.title = name ?? unresolvedJsonSchema.schema.title;
658664
unresolvedJsonSchema.schema.description = description ?? unresolvedJsonSchema.schema.description;
665+
unresolvedJsonSchema.schema.versions = versions ?? unresolvedJsonSchema.schema.versions;
659666
}
660667
return unresolvedJsonSchema;
661668
});
@@ -666,10 +673,11 @@ export class YAMLSchemaService extends JSONSchemaService {
666673
filePatterns?: string[],
667674
unresolvedSchema?: JSONSchema,
668675
name?: string,
669-
description?: string
676+
description?: string,
677+
versions?: SchemaVersions
670678
): SchemaHandle {
671679
if (name || description) {
672-
this.schemaUriToNameAndDescription.set(uri, [name, description]);
680+
this.schemaUriToNameAndDescription.set(uri, { name, description, versions });
673681
}
674682
return super.registerExternalSchema(uri, filePatterns, unresolvedSchema);
675683
}

src/languageservice/yamlLanguageService.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ import {
4242
} from 'vscode-languageserver/node';
4343
import { TextDocument } from 'vscode-languageserver-textdocument';
4444
import { getFoldingRanges } from './services/yamlFolding';
45-
import { FoldingRangesContext } from './yamlTypes';
45+
import { FoldingRangesContext, SchemaVersions } from './yamlTypes';
4646
import { YamlCodeActions } from './services/yamlCodeActions';
4747
import { commandExecutor } from '../languageserver/commandExecutor';
4848
import { doDocumentOnTypeFormatting } from './services/yamlOnTypeFormatting';
@@ -70,6 +70,7 @@ export interface SchemasSettings {
7070
uri: string;
7171
name?: string;
7272
description?: string;
73+
versions?: SchemaVersions;
7374
}
7475

7576
export interface LanguageSettings {
@@ -198,7 +199,8 @@ export function getLanguageService(
198199
settings.fileMatch,
199200
settings.schema,
200201
settings.name,
201-
settings.description
202+
settings.description,
203+
settings.versions
202204
);
203205
});
204206
}

src/languageservice/yamlTypes.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,3 +18,5 @@ export interface FoldingRangesContext {
1818
*/
1919
lineFoldingOnly?: boolean;
2020
}
21+
22+
export type SchemaVersions = { [version: string]: string };

src/requestTypes.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import { NotificationType, RequestType } from 'vscode-languageserver';
44
import { SchemaAdditions, SchemaDeletions } from './languageservice/services/yamlSchemaService';
55
import { SchemaConfiguration } from './languageservice/yamlLanguageService';
6+
import { SchemaVersions } from './languageservice/yamlTypes';
67

78
export type ISchemaAssociations = Record<string, string[]>;
89

@@ -30,6 +31,8 @@ export interface JSONSchemaDescriptionExt extends JSONSchemaDescription {
3031
* Is schema from schema store
3132
*/
3233
fromStore: boolean;
34+
35+
versions?: SchemaVersions;
3336
}
3437

3538
export namespace SchemaAssociationNotification {

0 commit comments

Comments
 (0)