diff --git a/extensions/json-language-features/server/README.md b/extensions/json-language-features/server/README.md index d04ff913e92..090232c6379 100644 --- a/extensions/json-language-features/server/README.md +++ b/extensions/json-language-features/server/README.md @@ -143,15 +143,34 @@ In addition to the settings, schemas associations can also be provided through a Notification: - method: 'json/schemaAssociations' -- params: `ISchemaAssociations` defined as follows +- params: `ISchemaAssociations | SchemaConfiguration[]` defined as follows ```ts -interface ISchemaAssociations { - [pattern: string]: string[]; +/** + * An object where: + * - keys are file names or file paths (separated by `/`). `*` can be used as a wildcard. + * - values ar an arrays of schema URLs + */ +type ISchemaAssociations = Record + +interface SchemaConfiguration { + /** + * The URI of the schema, which is also the identifier of the schema. + */ + uri: string; + /** + * A list of file path patterns that are associated to the schema. The '*' wildcard can be used. Exclusion patterns starting with '!'. + * For example '*.schema.json', 'package.json', '!foo*.schema.json'. + * A match succeeds when there is at least one pattern matching and last matching pattern does not start with '!'. + */ + fileMatch?: string[]; + /** + * The schema for the given URI. + * If no schema is provided, the schema will be fetched with the schema request service (if available). + */ + schema?: JSONSchema; } ``` - - keys: a file names or file path (separated by `/`). `*` can be used as a wildcard. - - values: An array of schema URLs Notification: - method: 'json/schemaContent' diff --git a/extensions/json-language-features/server/src/jsonServer.ts b/extensions/json-language-features/server/src/jsonServer.ts index 78151f746e7..761e638a9f3 100644 --- a/extensions/json-language-features/server/src/jsonServer.ts +++ b/extensions/json-language-features/server/src/jsonServer.ts @@ -14,17 +14,10 @@ import { TextDocument, JSONDocument, JSONSchema, getLanguageService, DocumentLan import { getLanguageModelCache } from './languageModelCache'; import { RequestService, basename, resolvePath } from './requests'; -interface ISchemaAssociations { - [pattern: string]: string[]; -} - -interface ISchemaAssociation { - fileMatch: string[]; - uri: string; -} +type ISchemaAssociations = Record; namespace SchemaAssociationNotification { - export const type: NotificationType = new NotificationType('json/schemaAssociations'); + export const type: NotificationType = new NotificationType('json/schemaAssociations'); } namespace VSCodeContentRequest { @@ -212,7 +205,7 @@ export function startServer(connection: Connection, runtime: RuntimeEnvironment) }(); let jsonConfigurationSettings: JSONSchemaSettings[] | undefined = undefined; - let schemaAssociations: ISchemaAssociations | ISchemaAssociation[] | undefined = undefined; + let schemaAssociations: ISchemaAssociations | SchemaConfiguration[] | undefined = undefined; let formatterRegistration: Thenable | null = null; // The settings have changed. Is send on server activation as well.