610 lines
11 KiB
TypeScript
610 lines
11 KiB
TypeScript
/* --------------------------------------------------------------------------------------------
|
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
* Licensed under the MIT License. See License.txt in the project root for license information.
|
|
* ------------------------------------------------------------------------------------------ */
|
|
|
|
export type BaseTypes = 'URI' | 'DocumentUri' | 'integer' | 'uinteger' | 'decimal' | 'RegExp' | 'string' | 'boolean' | 'null';
|
|
|
|
export type TypeKind = 'base' | 'reference' | 'array' | 'map' | 'and' | 'or' | 'tuple' | 'literal' | 'stringLiteral' | 'integerLiteral' | 'booleanLiteral';
|
|
|
|
/**
|
|
* Indicates in which direction a message is sent in the protocol.
|
|
*/
|
|
export type MessageDirection = 'clientToServer' | 'serverToClient' | 'both';
|
|
|
|
/**
|
|
* Represents a base type like `string` or `DocumentUri`.
|
|
*/
|
|
export type BaseType = {
|
|
kind: 'base';
|
|
name: BaseTypes;
|
|
};
|
|
|
|
/**
|
|
* Represents a reference to another type (e.g. `TextDocument`).
|
|
* This is either a `Structure`, a `Enumeration` or a `TypeAlias`
|
|
* in the same meta model.
|
|
*/
|
|
export type ReferenceType = {
|
|
kind: 'reference';
|
|
name: string;
|
|
};
|
|
|
|
/**
|
|
* Represents an array type (e.g. `TextDocument[]`).
|
|
*/
|
|
export type ArrayType = {
|
|
kind: 'array';
|
|
element: Type;
|
|
};
|
|
|
|
/**
|
|
* Represents a type that can be used as a key in a
|
|
* map type. If a reference type is used then the
|
|
* type must either resolve to a `string` or `integer`
|
|
* type. (e.g. `type ChangeAnnotationIdentifier === string`).
|
|
*/
|
|
export type MapKeyType = { kind: 'base'; name: 'URI' | 'DocumentUri' | 'string' | 'integer' } | ReferenceType;
|
|
|
|
/**
|
|
* Represents a JSON object map
|
|
* (e.g. `interface Map<K extends string | integer, V> { [key: K] => V; }`).
|
|
*/
|
|
export type MapType = {
|
|
kind: 'map';
|
|
key: MapKeyType;
|
|
value: Type;
|
|
};
|
|
|
|
/**
|
|
* Represents an `and`type
|
|
* (e.g. TextDocumentParams & WorkDoneProgressParams`).
|
|
*/
|
|
export type AndType = {
|
|
kind: 'and';
|
|
items: Type[];
|
|
};
|
|
|
|
/**
|
|
* Represents an `or` type
|
|
* (e.g. `Location | LocationLink`).
|
|
*/
|
|
export type OrType = {
|
|
kind: 'or';
|
|
items: Type[];
|
|
};
|
|
|
|
/**
|
|
* Represents a `tuple` type
|
|
* (e.g. `[integer, integer]`).
|
|
*/
|
|
export type TupleType = {
|
|
kind: 'tuple';
|
|
items: Type[];
|
|
};
|
|
|
|
/**
|
|
* Represents a literal structure
|
|
* (e.g. `property: { start: uinteger; end: uinteger; }`).
|
|
*/
|
|
export type StructureLiteralType = {
|
|
kind: 'literal';
|
|
value: StructureLiteral;
|
|
};
|
|
|
|
/**
|
|
* Represents a string literal type
|
|
* (e.g. `kind: 'rename'`).
|
|
*/
|
|
export type StringLiteralType = {
|
|
kind: 'stringLiteral';
|
|
value: string;
|
|
};
|
|
|
|
export type IntegerLiteralType = {
|
|
/**
|
|
* Represents an integer literal type
|
|
* (e.g. `kind: 1`).
|
|
*/
|
|
kind: 'integerLiteral';
|
|
value: number;
|
|
};
|
|
|
|
/**
|
|
* Represents a boolean literal type
|
|
* (e.g. `kind: true`).
|
|
*/
|
|
export type BooleanLiteralType = {
|
|
kind: 'booleanLiteral';
|
|
value: boolean;
|
|
};
|
|
|
|
export type Type = BaseType | ReferenceType | ArrayType | MapType | AndType | OrType | TupleType | StructureLiteralType | StringLiteralType | IntegerLiteralType | BooleanLiteralType;
|
|
|
|
/**
|
|
* Represents a LSP request
|
|
*/
|
|
export type Request = {
|
|
/**
|
|
* The request's method name.
|
|
*/
|
|
method: string;
|
|
|
|
/**
|
|
* The type name of the request if any.
|
|
*/
|
|
typeName?: string;
|
|
|
|
/**
|
|
* The parameter type(s) if any.
|
|
*/
|
|
params?: Type | Type[];
|
|
|
|
/**
|
|
* The result type.
|
|
*/
|
|
result: Type;
|
|
|
|
/**
|
|
* Optional partial result type if the request
|
|
* supports partial result reporting.
|
|
*/
|
|
partialResult?: Type;
|
|
|
|
/**
|
|
* An optional error data type.
|
|
*/
|
|
errorData?: Type;
|
|
|
|
/**
|
|
* Optional a dynamic registration method if it
|
|
* different from the request's method.
|
|
*/
|
|
registrationMethod?: string;
|
|
|
|
/**
|
|
* Optional registration options if the request
|
|
* supports dynamic registration.
|
|
*/
|
|
registrationOptions?: Type;
|
|
|
|
/**
|
|
* The direction in which this request is sent
|
|
* in the protocol.
|
|
*/
|
|
messageDirection: MessageDirection;
|
|
|
|
/**
|
|
* An optional documentation;
|
|
*/
|
|
documentation?: string;
|
|
|
|
/**
|
|
* Since when (release number) this request is
|
|
* available. Is undefined if not known.
|
|
*/
|
|
since?: string;
|
|
|
|
/**
|
|
* All since tags in case there was more than one tag.
|
|
* Is undefined if not known.
|
|
*/
|
|
sinceTags?: string[];
|
|
|
|
/**
|
|
* Whether this is a proposed feature. If omitted
|
|
* the feature is final.
|
|
*/
|
|
proposed?: boolean;
|
|
|
|
/**
|
|
* Whether the request is deprecated or not. If deprecated
|
|
* the property contains the deprecation message.
|
|
*/
|
|
deprecated?: string;
|
|
};
|
|
|
|
/**
|
|
* Represents a LSP notification
|
|
*/
|
|
export type Notification = {
|
|
/**
|
|
* The notifications's method name.
|
|
*/
|
|
method: string;
|
|
|
|
/**
|
|
* The type name of the notifications if any.
|
|
*/
|
|
typeName?: string;
|
|
|
|
/**
|
|
* The parameter type(s) if any.
|
|
*/
|
|
params?: Type | Type[];
|
|
|
|
/**
|
|
* Optional a dynamic registration method if it
|
|
* different from the notifications's method.
|
|
*/
|
|
registrationMethod?: string;
|
|
|
|
/**
|
|
* Optional registration options if the notification
|
|
* supports dynamic registration.
|
|
*/
|
|
registrationOptions?: Type;
|
|
|
|
/**
|
|
* The direction in which this notification is sent
|
|
* in the protocol.
|
|
*/
|
|
messageDirection: MessageDirection;
|
|
|
|
/**
|
|
* An optional documentation;
|
|
*/
|
|
documentation?: string;
|
|
|
|
/**
|
|
* Since when (release number) this notification is
|
|
* available. Is undefined if not known.
|
|
*/
|
|
since?: string;
|
|
|
|
/**
|
|
* All since tags in case there was more than one tag.
|
|
* Is undefined if not known.
|
|
*/
|
|
sinceTags?: string[];
|
|
|
|
/**
|
|
* Whether this is a proposed notification. If omitted
|
|
* the notification is final.
|
|
*/
|
|
proposed?: boolean;
|
|
|
|
/**
|
|
* Whether the notification is deprecated or not. If deprecated
|
|
* the property contains the deprecation message.
|
|
*/
|
|
deprecated?: string;
|
|
};
|
|
|
|
/**
|
|
* Represents an object property.
|
|
*/
|
|
export type Property = {
|
|
/**
|
|
* The property name;
|
|
*/
|
|
name: string;
|
|
|
|
/**
|
|
* The type of the property
|
|
*/
|
|
type: Type;
|
|
|
|
/**
|
|
* Whether the property is optional. If
|
|
* omitted, the property is mandatory.
|
|
*/
|
|
optional?: boolean;
|
|
|
|
/**
|
|
* An optional documentation.
|
|
*/
|
|
documentation?: string;
|
|
|
|
/**
|
|
* Since when (release number) this property is
|
|
* available. Is undefined if not known.
|
|
*/
|
|
since?: string;
|
|
|
|
/**
|
|
* All since tags in case there was more than one tag.
|
|
* Is undefined if not known.
|
|
*/
|
|
sinceTags?: string[];
|
|
|
|
/**
|
|
* Whether this is a proposed property. If omitted,
|
|
* the structure is final.
|
|
*/
|
|
proposed?: boolean;
|
|
|
|
/**
|
|
* Whether the property is deprecated or not. If deprecated
|
|
* the property contains the deprecation message.
|
|
*/
|
|
deprecated?: string;
|
|
};
|
|
|
|
/**
|
|
* Defines the structure of an object literal.
|
|
*/
|
|
export type Structure = {
|
|
/**
|
|
* The name of the structure.
|
|
*/
|
|
name: string;
|
|
|
|
/**
|
|
* Structures extended from. This structures form
|
|
* a polymorphic type hierarchy.
|
|
*/
|
|
extends?: Type[];
|
|
|
|
/**
|
|
* Structures to mix in. The properties of these
|
|
* structures are `copied` into this structure.
|
|
* Mixins don't form a polymorphic type hierarchy in
|
|
* LSP.
|
|
*/
|
|
mixins?: Type[];
|
|
|
|
/**
|
|
* The properties.
|
|
*/
|
|
properties: Property[];
|
|
|
|
/**
|
|
* An optional documentation;
|
|
*/
|
|
documentation?: string;
|
|
|
|
/**
|
|
* Since when (release number) this structure is
|
|
* available. Is undefined if not known.
|
|
*/
|
|
since?: string;
|
|
|
|
/**
|
|
* All since tags in case there was more than one tag.
|
|
* Is undefined if not known.
|
|
*/
|
|
sinceTags?: string[];
|
|
|
|
/**
|
|
* Whether this is a proposed structure. If omitted,
|
|
* the structure is final.
|
|
*/
|
|
proposed?: boolean;
|
|
|
|
/**
|
|
* Whether the structure is deprecated or not. If deprecated
|
|
* the property contains the deprecation message.
|
|
*/
|
|
deprecated?: string;
|
|
};
|
|
|
|
/**
|
|
* Defines an unnamed structure of an object literal.
|
|
*/
|
|
export type StructureLiteral = {
|
|
|
|
/**
|
|
* The properties.
|
|
*/
|
|
properties: Property[];
|
|
|
|
/**
|
|
* An optional documentation.
|
|
*/
|
|
documentation?: string;
|
|
|
|
/**
|
|
* Since when (release number) this structure is
|
|
* available. Is undefined if not known.
|
|
*/
|
|
since?: string;
|
|
|
|
/**
|
|
* All since tags in case there was more than one tag.
|
|
* Is undefined if not known.
|
|
*/
|
|
sinceTags?: string[];
|
|
|
|
/**
|
|
* Whether this is a proposed structure. If omitted,
|
|
* the structure is final.
|
|
*/
|
|
proposed?: boolean;
|
|
|
|
/**
|
|
* Whether the literal is deprecated or not. If deprecated
|
|
* the property contains the deprecation message.
|
|
*/
|
|
deprecated?: string;
|
|
};
|
|
|
|
/**
|
|
* Defines a type alias.
|
|
* (e.g. `type Definition = Location | LocationLink`)
|
|
*/
|
|
export type TypeAlias = {
|
|
/**
|
|
* The name of the type alias.
|
|
*/
|
|
name: string;
|
|
|
|
/**
|
|
* The aliased type.
|
|
*/
|
|
type: Type;
|
|
|
|
/**
|
|
* An optional documentation.
|
|
*/
|
|
documentation?: string;
|
|
|
|
/**
|
|
* Since when (release number) this structure is
|
|
* available. Is undefined if not known.
|
|
*/
|
|
since?: string;
|
|
|
|
/**
|
|
* All since tags in case there was more than one tag.
|
|
* Is undefined if not known.
|
|
*/
|
|
sinceTags?: string[];
|
|
|
|
/**
|
|
* Whether this is a proposed type alias. If omitted,
|
|
* the type alias is final.
|
|
*/
|
|
proposed?: boolean;
|
|
|
|
/**
|
|
* Whether the type alias is deprecated or not. If deprecated
|
|
* the property contains the deprecation message.
|
|
*/
|
|
deprecated?: string;
|
|
};
|
|
|
|
/**
|
|
* Defines an enumeration entry.
|
|
*/
|
|
export type EnumerationEntry = {
|
|
/**
|
|
* The name of the enum item.
|
|
*/
|
|
name: string;
|
|
|
|
/**
|
|
* The value.
|
|
*/
|
|
value: string | number;
|
|
|
|
/**
|
|
* An optional documentation.
|
|
*/
|
|
documentation?: string;
|
|
|
|
/**
|
|
* Since when (release number) this enumeration entry is
|
|
* available. Is undefined if not known.
|
|
*/
|
|
since?: string;
|
|
|
|
/**
|
|
* All since tags in case there was more than one tag.
|
|
* Is undefined if not known.
|
|
*/
|
|
sinceTags?: string[];
|
|
|
|
/**
|
|
* Whether this is a proposed enumeration entry. If omitted,
|
|
* the enumeration entry is final.
|
|
*/
|
|
proposed?: boolean;
|
|
|
|
/**
|
|
* Whether the enum entry is deprecated or not. If deprecated
|
|
* the property contains the deprecation message.
|
|
*/
|
|
deprecated?: string;
|
|
};
|
|
|
|
export type EnumerationType = { kind: 'base'; name: 'string' | 'integer' | 'uinteger' };
|
|
|
|
/**
|
|
* Defines an enumeration.
|
|
*/
|
|
export type Enumeration = {
|
|
/**
|
|
* The name of the enumeration.
|
|
*/
|
|
name: string;
|
|
|
|
/**
|
|
* The type of the elements.
|
|
*/
|
|
type: EnumerationType;
|
|
|
|
/**
|
|
* The enum values.
|
|
*/
|
|
values: EnumerationEntry[];
|
|
|
|
/**
|
|
* Whether the enumeration supports custom values (e.g. values which are not
|
|
* part of the set defined in `values`). If omitted no custom values are
|
|
* supported.
|
|
*/
|
|
supportsCustomValues?: boolean;
|
|
|
|
/**
|
|
* An optional documentation.
|
|
*/
|
|
documentation?: string;
|
|
|
|
/**
|
|
* Since when (release number) this enumeration is
|
|
* available. Is undefined if not known.
|
|
*/
|
|
since?: string;
|
|
|
|
/**
|
|
* All since tags in case there was more than one tag.
|
|
* Is undefined if not known.
|
|
*/
|
|
sinceTags?: string[];
|
|
|
|
/**
|
|
* Whether this is a proposed enumeration. If omitted,
|
|
* the enumeration is final.
|
|
*/
|
|
proposed?: boolean;
|
|
|
|
/**
|
|
* Whether the enumeration is deprecated or not. If deprecated
|
|
* the property contains the deprecation message.
|
|
*/
|
|
deprecated?: string;
|
|
};
|
|
|
|
export type MetaData = {
|
|
/**
|
|
* The protocol version.
|
|
*/
|
|
version: string;
|
|
};
|
|
|
|
/**
|
|
* The actual meta model.
|
|
*/
|
|
export type MetaModel = {
|
|
/**
|
|
* Additional meta data.
|
|
*/
|
|
metaData: MetaData;
|
|
|
|
/**
|
|
* The requests.
|
|
*/
|
|
requests: Request[];
|
|
|
|
/**
|
|
* The notifications.
|
|
*/
|
|
notifications: Notification[];
|
|
|
|
/**
|
|
* The structures.
|
|
*/
|
|
structures: Structure[];
|
|
|
|
/**
|
|
* The enumerations.
|
|
*/
|
|
enumerations: Enumeration[];
|
|
|
|
/**
|
|
* The type aliases.
|
|
*/
|
|
typeAliases: TypeAlias[];
|
|
};
|