10107 lines
318 KiB
TypeScript
10107 lines
318 KiB
TypeScript
/******************************************************************
|
||
MIT License http://www.opensource.org/licenses/mit-license.php
|
||
Author Qiming Zhao <chemzqm@gmail> (https://github.com/chemzqm)
|
||
*******************************************************************/
|
||
|
||
/// <reference types="node" />
|
||
import cp from 'child_process'
|
||
|
||
declare module 'coc.nvim' {
|
||
// Language server protocol interfaces {{
|
||
export interface Thenable<T> {
|
||
then<TResult>(onfulfilled?: (value: T) => TResult | Thenable<TResult>, onrejected?: (reason: any) => TResult | Thenable<TResult>): Thenable<TResult>
|
||
// eslint-disable-next-line @typescript-eslint/unified-signatures
|
||
then<TResult>(onfulfilled?: (value: T) => TResult | Thenable<TResult>, onrejected?: (reason: any) => void): Thenable<TResult>
|
||
}
|
||
|
||
export interface Disposable {
|
||
/**
|
||
* Dispose this object.
|
||
*/
|
||
dispose(): void
|
||
}
|
||
|
||
export namespace Disposable {
|
||
function create(func: () => void): Disposable
|
||
}
|
||
/**
|
||
* The declaration of a symbol representation as one or many [locations](#Location).
|
||
*/
|
||
export type Declaration = Location | Location[]
|
||
/**
|
||
* Information about where a symbol is declared.
|
||
*
|
||
* Provides additional metadata over normal [location](#Location) declarations, including the range of
|
||
* the declaring symbol.
|
||
*
|
||
* Servers should prefer returning `DeclarationLink` over `Declaration` if supported
|
||
* by the client.
|
||
*/
|
||
export type DeclarationLink = LocationLink
|
||
|
||
export type ProgressToken = number | string
|
||
|
||
export interface WorkDoneProgressBegin {
|
||
kind: 'begin'
|
||
/**
|
||
* Mandatory title of the progress operation. Used to briefly inform about
|
||
* the kind of operation being performed.
|
||
*
|
||
* Examples: "Indexing" or "Linking dependencies".
|
||
*/
|
||
title: string
|
||
/**
|
||
* Controls if a cancel button should show to allow the user to cancel the
|
||
* long running operation. Clients that don't support cancellation are allowed
|
||
* to ignore the setting.
|
||
*/
|
||
cancellable?: boolean
|
||
/**
|
||
* Optional, more detailed associated progress message. Contains
|
||
* complementary information to the `title`.
|
||
*
|
||
* Examples: "3/25 files", "project/src/module2", "node_modules/some_dep".
|
||
* If unset, the previous progress message (if any) is still valid.
|
||
*/
|
||
message?: string
|
||
/**
|
||
* Optional progress percentage to display (value 100 is considered 100%).
|
||
* If not provided infinite progress is assumed and clients are allowed
|
||
* to ignore the `percentage` value in subsequent in report notifications.
|
||
*
|
||
* The value should be steadily rising. Clients are free to ignore values
|
||
* that are not following this rule.
|
||
*/
|
||
percentage?: number
|
||
}
|
||
|
||
export interface WorkDoneProgressReport {
|
||
kind: 'report'
|
||
/**
|
||
* Controls enablement state of a cancel button. This property is only valid if a cancel
|
||
* button got requested in the `WorkDoneProgressStart` payload.
|
||
*
|
||
* Clients that don't support cancellation or don't support control the button's
|
||
* enablement state are allowed to ignore the setting.
|
||
*/
|
||
cancellable?: boolean
|
||
/**
|
||
* Optional, more detailed associated progress message. Contains
|
||
* complementary information to the `title`.
|
||
*
|
||
* Examples: "3/25 files", "project/src/module2", "node_modules/some_dep".
|
||
* If unset, the previous progress message (if any) is still valid.
|
||
*/
|
||
message?: string
|
||
/**
|
||
* Optional progress percentage to display (value 100 is considered 100%).
|
||
* If not provided infinite progress is assumed and clients are allowed
|
||
* to ignore the `percentage` value in subsequent in report notifications.
|
||
*
|
||
* The value should be steadily rising. Clients are free to ignore values
|
||
* that are not following this rule.
|
||
*/
|
||
percentage?: number
|
||
}
|
||
|
||
/**
|
||
* The file event type
|
||
*/
|
||
export namespace FileChangeType {
|
||
/**
|
||
* The file got created.
|
||
*/
|
||
const Created = 1
|
||
/**
|
||
* The file got changed.
|
||
*/
|
||
const Changed = 2
|
||
/**
|
||
* The file got deleted.
|
||
*/
|
||
const Deleted = 3
|
||
}
|
||
|
||
export type FileChangeType = 1 | 2 | 3
|
||
|
||
/**
|
||
* An event describing a file change.
|
||
*/
|
||
export interface FileEvent {
|
||
/**
|
||
* The file's uri.
|
||
*/
|
||
uri: string
|
||
/**
|
||
* The change type.
|
||
*/
|
||
type: FileChangeType
|
||
}
|
||
|
||
export interface WorkDoneProgressEnd {
|
||
kind: 'end'
|
||
/**
|
||
* Optional, a final message indicating to for example indicate the outcome
|
||
* of the operation.
|
||
*/
|
||
message?: string
|
||
}
|
||
|
||
/**
|
||
* A literal to identify a text document in the client.
|
||
*/
|
||
export interface TextDocumentIdentifier {
|
||
/**
|
||
* The text document's uri.
|
||
*/
|
||
uri: string
|
||
}
|
||
|
||
/**
|
||
* A parameter literal used in requests to pass a text document and a position inside that
|
||
* document.
|
||
*/
|
||
export interface TextDocumentPositionParams {
|
||
/**
|
||
* The text document.
|
||
*/
|
||
textDocument: TextDocumentIdentifier
|
||
/**
|
||
* The position inside the text document.
|
||
*/
|
||
position: Position
|
||
}
|
||
|
||
export interface WorkspaceFolder {
|
||
/**
|
||
* The associated URI for this workspace folder.
|
||
*/
|
||
uri: string
|
||
/**
|
||
* The name of the workspace folder. Used to refer to this
|
||
* workspace folder in the user interface.
|
||
*/
|
||
name: string
|
||
}
|
||
|
||
/**
|
||
* An event describing a change to a text document.
|
||
*/
|
||
export interface TextDocumentContentChange {
|
||
/**
|
||
* The range of the document that changed.
|
||
*/
|
||
range: Range
|
||
/**
|
||
* The new text for the provided range.
|
||
*/
|
||
text: string
|
||
}
|
||
|
||
/**
|
||
* The workspace folder change event.
|
||
*/
|
||
export interface WorkspaceFoldersChangeEvent {
|
||
/**
|
||
* The array of added workspace folders
|
||
*/
|
||
added: WorkspaceFolder[]
|
||
/**
|
||
* The array of the removed workspace folders
|
||
*/
|
||
removed: WorkspaceFolder[]
|
||
}
|
||
|
||
/**
|
||
* An event that is fired when a [document](#LinesTextDocument) will be saved.
|
||
*
|
||
* To make modifications to the document before it is being saved, call the
|
||
* [`waitUntil`](#TextDocumentWillSaveEvent.waitUntil)-function with a thenable
|
||
* that resolves to an array of [text edits](#TextEdit).
|
||
*/
|
||
export interface TextDocumentWillSaveEvent {
|
||
|
||
/**
|
||
* The document that will be saved.
|
||
*/
|
||
document: LinesTextDocument
|
||
|
||
/**
|
||
* The reason why save was triggered.
|
||
*/
|
||
reason: 1 | 2 | 3
|
||
}
|
||
|
||
/**
|
||
* A document filter denotes a document by different properties like
|
||
* the [language](#LinesTextDocument.languageId), the [scheme](#Uri.scheme) of
|
||
* its resource, or a glob-pattern that is applied to the [path](#LinesTextDocument.fileName).
|
||
*
|
||
* Glob patterns can have the following syntax:
|
||
* - `*` to match one or more characters in a path segment
|
||
* - `?` to match on one character in a path segment
|
||
* - `**` to match any number of path segments, including none
|
||
* - `{}` to group conditions (e.g. `**/*.{ts,js}` matches all TypeScript and JavaScript files)
|
||
* - `[]` to declare a range of characters to match in a path segment (e.g., `example.[0-9]` to match on `example.0`, `example.1`, …)
|
||
* - `[!...]` to negate a range of characters to match in a path segment (e.g., `example.[!0-9]` to match on `example.a`, `example.b`, but not `example.0`)
|
||
*
|
||
* @sample A language filter that applies to typescript files on disk: `{ language: 'typescript', scheme: 'file' }`
|
||
* @sample A language filter that applies to all package.json paths: `{ language: 'json', pattern: '**package.json' }`
|
||
*/
|
||
export type DocumentFilter = {
|
||
/** A language id, like `typescript`. */
|
||
language: string
|
||
/** A Uri [scheme](#Uri.scheme), like `file` or `untitled`. */
|
||
scheme?: string
|
||
/** A glob pattern, like `*.{ts,js}`. */
|
||
pattern?: string
|
||
} | {
|
||
/** A language id, like `typescript`. */
|
||
language?: string
|
||
/** A Uri [scheme](#Uri.scheme), like `file` or `untitled`. */
|
||
scheme: string
|
||
/** A glob pattern, like `*.{ts,js}`. */
|
||
pattern?: string
|
||
} | {
|
||
/** A language id, like `typescript`. */
|
||
language?: string
|
||
/** A Uri [scheme](#Uri.scheme), like `file` or `untitled`. */
|
||
scheme?: string
|
||
/** A glob pattern, like `*.{ts,js}`. */
|
||
pattern: string
|
||
}
|
||
/**
|
||
* A document selector is the combination of one or many document filters.
|
||
*
|
||
* @sample `let sel:DocumentSelector = [{ language: 'typescript' }, { language: 'json', pattern: '**∕tsconfig.json' }]`;
|
||
*/
|
||
export type DocumentSelector = (string | DocumentFilter)[]
|
||
/**
|
||
* A selection range represents a part of a selection hierarchy. A selection range
|
||
* may have a parent selection range that contains it.
|
||
*/
|
||
export interface SelectionRange {
|
||
/**
|
||
* The [range](#Range) of this selection range.
|
||
*/
|
||
range: Range
|
||
/**
|
||
* The parent selection range containing this range. Therefore `parent.range` must contain `this.range`.
|
||
*/
|
||
parent?: SelectionRange
|
||
}
|
||
|
||
/**
|
||
* MarkedString can be used to render human readable text. It is either a markdown string
|
||
* or a code-block that provides a language and a code snippet. The language identifier
|
||
* is semantically equal to the optional language identifier in fenced code blocks in GitHub
|
||
* issues. See https://help.github.com/articles/creating-and-highlighting-code-blocks/#syntax-highlighting
|
||
*
|
||
* The pair of a language and a value is an equivalent to markdown:
|
||
* ```${language}
|
||
* ${value}
|
||
* ```
|
||
*
|
||
* Note that markdown strings will be sanitized - that means html will be escaped.
|
||
* @deprecated use MarkupContent instead.
|
||
*/
|
||
export type MarkedString = string | {
|
||
language: string
|
||
value: string
|
||
}
|
||
/**
|
||
* The result of a hover request.
|
||
*/
|
||
export interface Hover {
|
||
/**
|
||
* The hover's content
|
||
*/
|
||
contents: MarkupContent | MarkedString | MarkedString[]
|
||
/**
|
||
* An optional range
|
||
*/
|
||
range?: Range
|
||
}
|
||
|
||
/**
|
||
* The definition of a symbol represented as one or many [locations](#Location).
|
||
* For most programming languages there is only one location at which a symbol is
|
||
* defined.
|
||
*
|
||
* Servers should prefer returning `DefinitionLink` over `Definition` if supported
|
||
* by the client.
|
||
*/
|
||
export type Definition = Location | Location[]
|
||
|
||
/**
|
||
* Information about where a symbol is defined.
|
||
*
|
||
* Provides additional metadata over normal [location](#Location) definitions, including the range of
|
||
* the defining symbol
|
||
*/
|
||
export type DefinitionLink = LocationLink
|
||
|
||
/**
|
||
* How a signature help was triggered.
|
||
*/
|
||
export namespace SignatureHelpTriggerKind {
|
||
/**
|
||
* Signature help was invoked manually by the user or by a command.
|
||
*/
|
||
const Invoked: 1
|
||
/**
|
||
* Signature help was triggered by a trigger character.
|
||
*/
|
||
const TriggerCharacter: 2
|
||
/**
|
||
* Signature help was triggered by the cursor moving or by the document content changing.
|
||
*/
|
||
const ContentChange: 3
|
||
}
|
||
|
||
export type SignatureHelpTriggerKind = 1 | 2 | 3
|
||
|
||
/**
|
||
* Represents the signature of something callable. A signature
|
||
* can have a label, like a function-name, a doc-comment, and
|
||
* a set of parameters.
|
||
*/
|
||
export interface SignatureInformation {
|
||
/**
|
||
* The label of this signature. Will be shown in
|
||
* the UI.
|
||
*/
|
||
label: string
|
||
/**
|
||
* The human-readable doc-comment of this signature. Will be shown
|
||
* in the UI but can be omitted.
|
||
*/
|
||
documentation?: string | MarkupContent
|
||
/**
|
||
* The parameters of this signature.
|
||
*/
|
||
parameters?: ParameterInformation[]
|
||
}
|
||
|
||
/**
|
||
* Represents a parameter of a callable-signature. A parameter can
|
||
* have a label and a doc-comment.
|
||
*/
|
||
export interface ParameterInformation {
|
||
/**
|
||
* The label of this parameter information.
|
||
*
|
||
* Either a string or an inclusive start and exclusive end offsets within its containing
|
||
* signature label. (see SignatureInformation.label). The offsets are based on a UTF-16
|
||
* string representation as `Position` and `Range` does.
|
||
*
|
||
* *Note*: a label of type string should be a substring of its containing signature label.
|
||
* Its intended use case is to highlight the parameter label part in the `SignatureInformation.label`.
|
||
*/
|
||
label: string | [number, number]
|
||
/**
|
||
* The human-readable doc-comment of this signature. Will be shown
|
||
* in the UI but can be omitted.
|
||
*/
|
||
documentation?: string | MarkupContent
|
||
}
|
||
|
||
/**
|
||
* Signature help represents the signature of something
|
||
* callable. There can be multiple signature but only one
|
||
* active and only one active parameter.
|
||
*/
|
||
export interface SignatureHelp {
|
||
/**
|
||
* One or more signatures.
|
||
*/
|
||
signatures: SignatureInformation[]
|
||
/**
|
||
* The active signature. Set to `null` if no
|
||
* signatures exist.
|
||
*/
|
||
activeSignature: number | null
|
||
/**
|
||
* The active parameter of the active signature. Set to `null`
|
||
* if the active signature has no parameters.
|
||
*/
|
||
activeParameter: number | null
|
||
}
|
||
/**
|
||
* Additional information about the context in which a signature help request was triggered.
|
||
*
|
||
* @since 3.15.0
|
||
*/
|
||
export interface SignatureHelpContext {
|
||
/**
|
||
* Action that caused signature help to be triggered.
|
||
*/
|
||
triggerKind: SignatureHelpTriggerKind
|
||
/**
|
||
* Character that caused signature help to be triggered.
|
||
*
|
||
* This is undefined when `triggerKind !== SignatureHelpTriggerKind.TriggerCharacter`
|
||
*/
|
||
triggerCharacter?: string
|
||
/**
|
||
* `true` if signature help was already showing when it was triggered.
|
||
*
|
||
* Retriggers occur when the signature help is already active and can be caused by actions such as
|
||
* typing a trigger character, a cursor move, or document content changes.
|
||
*/
|
||
isRetrigger: boolean
|
||
/**
|
||
* The currently active `SignatureHelp`.
|
||
*
|
||
* The `activeSignatureHelp` has its `SignatureHelp.activeSignature` field updated based on
|
||
* the user navigating through available signatures.
|
||
*/
|
||
activeSignatureHelp?: SignatureHelp
|
||
}
|
||
|
||
/**
|
||
* Represents a folding range.
|
||
*/
|
||
export interface FoldingRange {
|
||
/**
|
||
* The zero-based line number from where the folded range starts.
|
||
*/
|
||
startLine: number
|
||
/**
|
||
* The zero-based character offset from where the folded range starts. If not defined, defaults to the length of the start line.
|
||
*/
|
||
startCharacter?: number
|
||
/**
|
||
* The zero-based line number where the folded range ends.
|
||
*/
|
||
endLine: number
|
||
/**
|
||
* The zero-based character offset before the folded range ends. If not defined, defaults to the length of the end line.
|
||
*/
|
||
endCharacter?: number
|
||
/**
|
||
* Describes the kind of the folding range such as `comment' or 'region'. The kind
|
||
* is used to categorize folding ranges and used by commands like 'Fold all comments'. See
|
||
* [FoldingRangeKind](#FoldingRangeKind) for an enumeration of standardized kinds.
|
||
*/
|
||
kind?: string
|
||
}
|
||
|
||
/**
|
||
* A symbol kind.
|
||
*/
|
||
export namespace SymbolKind {
|
||
const File: 1
|
||
const Module: 2
|
||
const Namespace: 3
|
||
const Package: 4
|
||
const Class: 5
|
||
const Method: 6
|
||
const Property: 7
|
||
const Field: 8
|
||
const Constructor: 9
|
||
const Enum: 10
|
||
const Interface: 11
|
||
const Function: 12
|
||
const Variable: 13
|
||
const Constant: 14
|
||
const String: 15
|
||
const Number: 16
|
||
const Boolean: 17
|
||
const Array: 18
|
||
const Object: 19
|
||
const Key: 20
|
||
const Null: 21
|
||
const EnumMember: 22
|
||
const Struct: 23
|
||
const Event: 24
|
||
const Operator: 25
|
||
const TypeParameter: 26
|
||
}
|
||
|
||
export type SymbolKind = 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26
|
||
|
||
/**
|
||
* Represents information about programming constructs like variables, classes,
|
||
* interfaces etc.
|
||
*/
|
||
export interface SymbolInformation {
|
||
/**
|
||
* The name of this symbol.
|
||
*/
|
||
name: string
|
||
/**
|
||
* The kind of this symbol.
|
||
*/
|
||
kind: SymbolKind
|
||
/**
|
||
* Indicates if this symbol is deprecated.
|
||
*/
|
||
deprecated?: boolean
|
||
/**
|
||
* The location of this symbol. The location's range is used by a tool
|
||
* to reveal the location in the editor. If the symbol is selected in the
|
||
* tool the range's start information is used to position the cursor. So
|
||
* the range usually spans more than the actual symbol's name and does
|
||
* normally include thinks like visibility modifiers.
|
||
*
|
||
* The range doesn't have to denote a node range in the sense of a abstract
|
||
* syntax tree. It can therefore not be used to re-construct a hierarchy of
|
||
* the symbols.
|
||
*/
|
||
location: Location
|
||
/**
|
||
* The name of the symbol containing this symbol. This information is for
|
||
* user interface purposes (e.g. to render a qualifier in the user interface
|
||
* if necessary). It can't be used to re-infer a hierarchy for the document
|
||
* symbols.
|
||
*/
|
||
containerName?: string
|
||
}
|
||
|
||
/**
|
||
* Represents programming constructs like variables, classes, interfaces etc.
|
||
* that appear in a document. Document symbols can be hierarchical and they
|
||
* have two ranges: one that encloses its definition and one that points to
|
||
* its most interesting range, e.g. the range of an identifier.
|
||
*/
|
||
export interface DocumentSymbol {
|
||
/**
|
||
* The name of this symbol. Will be displayed in the user interface and therefore must not be
|
||
* an empty string or a string only consisting of white spaces.
|
||
*/
|
||
name: string
|
||
/**
|
||
* More detail for this symbol, e.g the signature of a function.
|
||
*/
|
||
detail?: string
|
||
/**
|
||
* The kind of this symbol.
|
||
*/
|
||
kind: SymbolKind
|
||
/**
|
||
* Indicates if this symbol is deprecated.
|
||
*/
|
||
deprecated?: boolean
|
||
/**
|
||
* The range enclosing this symbol not including leading/trailing whitespace but everything else
|
||
* like comments. This information is typically used to determine if the the clients cursor is
|
||
* inside the symbol to reveal in the symbol in the UI.
|
||
*/
|
||
range: Range
|
||
/**
|
||
* The range that should be selected and revealed when this symbol is being picked, e.g the name of a function.
|
||
* Must be contained by the the `range`.
|
||
*/
|
||
selectionRange: Range
|
||
/**
|
||
* Children of this symbol, e.g. properties of a class.
|
||
*/
|
||
children?: DocumentSymbol[]
|
||
}
|
||
|
||
export interface FormattingOptions {
|
||
/**
|
||
* If indentation is based on spaces (`insertSpaces` = true), the number of spaces that make an indent.
|
||
*/
|
||
tabSize: number
|
||
/**
|
||
* Is indentation based on spaces?
|
||
*/
|
||
insertSpaces: boolean
|
||
/**
|
||
* Trim trailing whitespaces on a line.
|
||
*
|
||
* @since 3.15.0
|
||
*/
|
||
trimTrailingWhitespace?: boolean
|
||
/**
|
||
* Insert a newline character at the end of the file if one does not exist.
|
||
*
|
||
* @since 3.15.0
|
||
*/
|
||
insertFinalNewline?: boolean
|
||
/**
|
||
* Trim all newlines after the final newline at the end of the file.
|
||
*
|
||
* @since 3.15.0
|
||
*/
|
||
trimFinalNewlines?: boolean
|
||
}
|
||
|
||
/**
|
||
* Contains additional diagnostic information about the context in which
|
||
* a [code action](#CodeActionProvider.provideCodeActions) is run.
|
||
*/
|
||
export interface CodeActionContext {
|
||
/**
|
||
* An array of diagnostics known on the client side overlapping the range provided to the
|
||
* `textDocument/codeAction` request. They are provided so that the server knows which
|
||
* errors are currently presented to the user for the given range. There is no guarantee
|
||
* that these accurately reflect the error state of the resource. The primary parameter
|
||
* to compute code actions is the provided range.
|
||
*/
|
||
diagnostics: Diagnostic[]
|
||
/**
|
||
* Requested kind of actions to return.
|
||
*
|
||
* Actions not of this kind are filtered out by the client before being shown. So servers
|
||
* can omit computing them.
|
||
*/
|
||
only?: string[]
|
||
}
|
||
|
||
|
||
/**
|
||
* A document highlight kind.
|
||
*/
|
||
export namespace DocumentHighlightKind {
|
||
/**
|
||
* A textual occurrence.
|
||
*/
|
||
const Text: 1
|
||
/**
|
||
* Read-access of a symbol, like reading a variable.
|
||
*/
|
||
const Read: 2
|
||
/**
|
||
* Write-access of a symbol, like writing to a variable.
|
||
*/
|
||
const Write: 3
|
||
}
|
||
|
||
export type DocumentHighlightKind = 1 | 2 | 3
|
||
/**
|
||
* A document highlight is a range inside a text document which deserves
|
||
* special attention. Usually a document highlight is visualized by changing
|
||
* the background color of its range.
|
||
*/
|
||
export interface DocumentHighlight {
|
||
/**
|
||
* The range this highlight applies to.
|
||
*/
|
||
range: Range
|
||
/**
|
||
* The highlight kind, default is [text](#DocumentHighlightKind.Text).
|
||
*/
|
||
kind?: DocumentHighlightKind
|
||
}
|
||
|
||
/**
|
||
* A document link is a range in a text document that links to an internal or external resource, like another
|
||
* text document or a web site.
|
||
*/
|
||
export interface DocumentLink {
|
||
/**
|
||
* The range this link applies to.
|
||
*/
|
||
range: Range
|
||
/**
|
||
* The uri this link points to.
|
||
*/
|
||
target?: string
|
||
/**
|
||
* The tooltip text when you hover over this link.
|
||
*
|
||
* If a tooltip is provided, is will be displayed in a string that includes instructions on how to
|
||
* trigger the link, such as `{0} (ctrl + click)`. The specific instructions vary depending on OS,
|
||
* user settings, and localization.
|
||
*
|
||
* @since 3.15.0
|
||
*/
|
||
tooltip?: string
|
||
/**
|
||
* A data entry field that is preserved on a document link between a
|
||
* DocumentLinkRequest and a DocumentLinkResolveRequest.
|
||
*/
|
||
data?: any
|
||
}
|
||
|
||
/**
|
||
* Represents a color in RGBA space.
|
||
*/
|
||
export interface Color {
|
||
/**
|
||
* The red component of this color in the range [0-1].
|
||
*/
|
||
readonly red: number
|
||
/**
|
||
* The green component of this color in the range [0-1].
|
||
*/
|
||
readonly green: number
|
||
/**
|
||
* The blue component of this color in the range [0-1].
|
||
*/
|
||
readonly blue: number
|
||
/**
|
||
* The alpha component of this color in the range [0-1].
|
||
*/
|
||
readonly alpha: number
|
||
}
|
||
|
||
/**
|
||
* Represents a color range from a document.
|
||
*/
|
||
export interface ColorInformation {
|
||
/**
|
||
* The range in the document where this color appears.
|
||
*/
|
||
range: Range
|
||
/**
|
||
* The actual color value for this color range.
|
||
*/
|
||
color: Color
|
||
}
|
||
|
||
export interface ColorPresentation {
|
||
/**
|
||
* The label of this color presentation. It will be shown on the color
|
||
* picker header. By default this is also the text that is inserted when selecting
|
||
* this color presentation.
|
||
*/
|
||
label: string
|
||
/**
|
||
* An [edit](#TextEdit) which is applied to a document when selecting
|
||
* this presentation for the color. When `falsy` the [label](#ColorPresentation.label)
|
||
* is used.
|
||
*/
|
||
textEdit?: TextEdit
|
||
/**
|
||
* An optional array of additional [text edits](#TextEdit) that are applied when
|
||
* selecting this color presentation. Edits must not overlap with the main [edit](#ColorPresentation.textEdit) nor with themselves.
|
||
*/
|
||
additionalTextEdits?: TextEdit[]
|
||
}
|
||
|
||
/**
|
||
* A code lens represents a [command](#Command) that should be shown along with
|
||
* source text, like the number of references, a way to run tests, etc.
|
||
*
|
||
* A code lens is _unresolved_ when no command is associated to it. For performance
|
||
* reasons the creation of a code lens and resolving should be done to two stages.
|
||
*/
|
||
export interface CodeLens {
|
||
/**
|
||
* The range in which this code lens is valid. Should only span a single line.
|
||
*/
|
||
range: Range
|
||
/**
|
||
* The command this code lens represents.
|
||
*/
|
||
command?: Command
|
||
/**
|
||
* An data entry field that is preserved on a code lens item between
|
||
* a [CodeLensRequest](#CodeLensRequest) and a [CodeLensResolveRequest]
|
||
* (#CodeLensResolveRequest)
|
||
*/
|
||
data?: any
|
||
}
|
||
|
||
/**
|
||
* Represents the connection of two locations. Provides additional metadata over normal [locations](#Location),
|
||
* including an origin range.
|
||
*/
|
||
export interface LocationLink {
|
||
/**
|
||
* Span of the origin of this link.
|
||
*
|
||
* Used as the underlined span for mouse definition hover. Defaults to the word range at
|
||
* the definition position.
|
||
*/
|
||
originSelectionRange?: Range
|
||
/**
|
||
* The target resource identifier of this link.
|
||
*/
|
||
targetUri: string
|
||
/**
|
||
* The full target range of this link. If the target for example is a symbol then target range is the
|
||
* range enclosing this symbol not including leading/trailing whitespace but everything else
|
||
* like comments. This information is typically used to highlight the range in the editor.
|
||
*/
|
||
targetRange: Range
|
||
/**
|
||
* The range that should be selected and revealed when this link is being followed, e.g the name of a function.
|
||
* Must be contained by the the `targetRange`. See also `DocumentSymbol#range`
|
||
*/
|
||
targetSelectionRange: Range
|
||
}
|
||
|
||
/**
|
||
* The LocationLink namespace provides helper functions to work with
|
||
* [LocationLink](#LocationLink) literals.
|
||
*/
|
||
export namespace LocationLink {
|
||
/**
|
||
* Creates a LocationLink literal.
|
||
* @param targetUri The definition's uri.
|
||
* @param targetRange The full range of the definition.
|
||
* @param targetSelectionRange The span of the symbol definition at the target.
|
||
* @param originSelectionRange The span of the symbol being defined in the originating source file.
|
||
*/
|
||
function create(targetUri: string, targetRange: Range, targetSelectionRange: Range, originSelectionRange?: Range): LocationLink
|
||
/**
|
||
* Checks whether the given literal conforms to the [LocationLink](#LocationLink) interface.
|
||
*/
|
||
function is(value: any): value is LocationLink
|
||
}
|
||
|
||
export type MarkupKind = 'plaintext' | 'markdown'
|
||
|
||
/**
|
||
* Describes the content type that a client supports in various
|
||
* result literals like `Hover`, `ParameterInfo` or `CompletionItem`.
|
||
*
|
||
* Please note that `MarkupKinds` must not start with a `$`. This kinds
|
||
* are reserved for internal usage.
|
||
*/
|
||
export namespace MarkupKind {
|
||
/**
|
||
* Plain text is supported as a content format
|
||
*/
|
||
const PlainText: 'plaintext'
|
||
/**
|
||
* Markdown is supported as a content format
|
||
*/
|
||
const Markdown: 'markdown'
|
||
}
|
||
/**
|
||
* A `MarkupContent` literal represents a string value which content is interpreted base on its
|
||
* kind flag. Currently the protocol supports `plaintext` and `markdown` as markup kinds.
|
||
*
|
||
* If the kind is `markdown` then the value can contain fenced code blocks like in GitHub issues.
|
||
* See https://help.github.com/articles/creating-and-highlighting-code-blocks/#syntax-highlighting
|
||
*
|
||
* Here is an example how such a string can be constructed using JavaScript / TypeScript:
|
||
* ```ts
|
||
* let markdown: MarkdownContent = {
|
||
* kind: MarkupKind.Markdown,
|
||
* value: [
|
||
* '# Header',
|
||
* 'Some text',
|
||
* '```typescript',
|
||
* 'someCode();',
|
||
* '```'
|
||
* ].join('\n')
|
||
* };
|
||
* ```
|
||
*
|
||
* *Please Note* that clients might sanitize the return markdown. A client could decide to
|
||
* remove HTML from the markdown to avoid script execution.
|
||
*/
|
||
export interface MarkupContent {
|
||
/**
|
||
* The type of the Markup
|
||
*/
|
||
kind: MarkupKind
|
||
/**
|
||
* The content itself
|
||
*/
|
||
value: string
|
||
}
|
||
|
||
/**
|
||
* The kind of a completion entry.
|
||
*/
|
||
export namespace CompletionItemKind {
|
||
const Text: 1
|
||
const Method: 2
|
||
const Function: 3
|
||
const Constructor: 4
|
||
const Field: 5
|
||
const Variable: 6
|
||
const Class: 7
|
||
const Interface: 8
|
||
const Module: 9
|
||
const Property: 10
|
||
const Unit: 11
|
||
const Value: 12
|
||
const Enum: 13
|
||
const Keyword: 14
|
||
const Snippet: 15
|
||
const Color: 16
|
||
const File: 17
|
||
const Reference: 18
|
||
const Folder: 19
|
||
const EnumMember: 20
|
||
const Constant: 21
|
||
const Struct: 22
|
||
const Event: 23
|
||
const Operator: 24
|
||
const TypeParameter: 25
|
||
}
|
||
|
||
export type CompletionItemKind = 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25
|
||
|
||
/**
|
||
* Defines whether the insert text in a completion item should be interpreted as
|
||
* plain text or a snippet.
|
||
*/
|
||
export namespace InsertTextFormat {
|
||
/**
|
||
* The primary text to be inserted is treated as a plain string.
|
||
*/
|
||
const PlainText: 1
|
||
/**
|
||
* The primary text to be inserted is treated as a snippet.
|
||
*
|
||
* A snippet can define tab stops and placeholders with `$1`, `$2`
|
||
* and `${3:foo}`. `$0` defines the final tab stop, it defaults to
|
||
* the end of the snippet. Placeholders with equal identifiers are linked,
|
||
* that is typing in one will update others too.
|
||
*
|
||
* See also: https://github.com/microsoft/vscode/blob/main/src/vs/editor/contrib/snippet/snippet.md
|
||
*/
|
||
const Snippet: 2
|
||
}
|
||
export type InsertTextFormat = 1 | 2
|
||
|
||
/**
|
||
* A completion item represents a text snippet that is
|
||
* proposed to complete text that is being typed.
|
||
*/
|
||
export interface CompletionItem {
|
||
/**
|
||
* The label of this completion item. By default
|
||
* also the text that is inserted when selecting
|
||
* this completion.
|
||
*/
|
||
label: string
|
||
/**
|
||
* The kind of this completion item. Based of the kind
|
||
* an icon is chosen by the editor.
|
||
*/
|
||
kind?: CompletionItemKind
|
||
/**
|
||
* Tags for this completion item.
|
||
*
|
||
* @since 3.15.0
|
||
*/
|
||
tags?: number[]
|
||
/**
|
||
* A human-readable string with additional information
|
||
* about this item, like type or symbol information.
|
||
*/
|
||
detail?: string
|
||
/**
|
||
* A human-readable string that represents a doc-comment.
|
||
*/
|
||
documentation?: string | MarkupContent
|
||
/**
|
||
* Indicates if this item is deprecated.
|
||
* @deprecated Use `tags` instead.
|
||
*/
|
||
deprecated?: boolean
|
||
/**
|
||
* Select this item when showing.
|
||
*
|
||
* *Note* that only one completion item can be selected and that the
|
||
* tool / client decides which item that is. The rule is that the *first*
|
||
* item of those that match best is selected.
|
||
*/
|
||
preselect?: boolean
|
||
/**
|
||
* A string that should be used when comparing this item
|
||
* with other items. When `falsy` the [label](#CompletionItem.label)
|
||
* is used.
|
||
*/
|
||
sortText?: string
|
||
/**
|
||
* A string that should be used when filtering a set of
|
||
* completion items. When `falsy` the [label](#CompletionItem.label)
|
||
* is used.
|
||
*/
|
||
filterText?: string
|
||
/**
|
||
* A string that should be inserted into a document when selecting
|
||
* this completion. When `falsy` the [label](#CompletionItem.label)
|
||
* is used.
|
||
*
|
||
* The `insertText` is subject to interpretation by the client side.
|
||
* Some tools might not take the string literally. For example
|
||
* VS Code when code complete is requested in this example `con<cursor position>`
|
||
* and a completion item with an `insertText` of `console` is provided it
|
||
* will only insert `sole`. Therefore it is recommended to use `textEdit` instead
|
||
* since it avoids additional client side interpretation.
|
||
*/
|
||
insertText?: string
|
||
/**
|
||
* The format of the insert text. The format applies to both the `insertText` property
|
||
* and the `newText` property of a provided `textEdit`. If omitted defaults to
|
||
* `InsertTextFormat.PlainText`.
|
||
*/
|
||
insertTextFormat?: InsertTextFormat
|
||
/**
|
||
* An [edit](#TextEdit) which is applied to a document when selecting
|
||
* this completion. When an edit is provided the value of
|
||
* [insertText](#CompletionItem.insertText) is ignored.
|
||
*
|
||
* *Note:* The text edit's range must be a [single line] and it must contain the position
|
||
* at which completion has been requested.
|
||
*/
|
||
textEdit?: TextEdit
|
||
/**
|
||
* An optional array of additional [text edits](#TextEdit) that are applied when
|
||
* selecting this completion. Edits must not overlap (including the same insert position)
|
||
* with the main [edit](#CompletionItem.textEdit) nor with themselves.
|
||
*
|
||
* Additional text edits should be used to change text unrelated to the current cursor position
|
||
* (for example adding an import statement at the top of the file if the completion item will
|
||
* insert an unqualified type).
|
||
*/
|
||
additionalTextEdits?: TextEdit[]
|
||
/**
|
||
* An optional set of characters that when pressed while this completion is active will accept it first and
|
||
* then type that character. *Note* that all commit characters should have `length=1` and that superfluous
|
||
* characters will be ignored.
|
||
*/
|
||
commitCharacters?: string[]
|
||
/**
|
||
* An optional [command](#Command) that is executed *after* inserting this completion. *Note* that
|
||
* additional modifications to the current document should be described with the
|
||
* [additionalTextEdits](#CompletionItem.additionalTextEdits)-property.
|
||
*/
|
||
command?: Command
|
||
/**
|
||
* An data entry field that is preserved on a completion item between
|
||
* a [CompletionRequest](#CompletionRequest) and a [CompletionResolveRequest]
|
||
* (#CompletionResolveRequest)
|
||
*/
|
||
data?: any
|
||
}
|
||
|
||
/**
|
||
* Represents a collection of [completion items](#CompletionItem) to be presented
|
||
* in the editor.
|
||
*/
|
||
export interface CompletionList {
|
||
/**
|
||
* This list it not complete. Further typing results in recomputing this list.
|
||
*/
|
||
isIncomplete: boolean
|
||
/**
|
||
* The completion items.
|
||
*/
|
||
items: CompletionItem[]
|
||
}
|
||
|
||
/**
|
||
* How a completion was triggered
|
||
*/
|
||
export namespace CompletionTriggerKind {
|
||
/**
|
||
* Completion was triggered by typing an identifier (24x7 code
|
||
* complete), manual invocation (e.g Ctrl+Space) or via API.
|
||
*/
|
||
const Invoked: 1
|
||
/**
|
||
* Completion was triggered by a trigger character specified by
|
||
* the `triggerCharacters` properties of the `CompletionRegistrationOptions`.
|
||
*/
|
||
const TriggerCharacter: 2
|
||
/**
|
||
* Completion was re-triggered as current completion list is incomplete
|
||
*/
|
||
const TriggerForIncompleteCompletions: 3
|
||
}
|
||
|
||
export type CompletionTriggerKind = 1 | 2 | 3
|
||
|
||
/**
|
||
* Contains additional information about the context in which a completion request is triggered.
|
||
*/
|
||
export interface CompletionContext {
|
||
/**
|
||
* How the completion was triggered.
|
||
*/
|
||
triggerKind: CompletionTriggerKind,
|
||
/**
|
||
* The trigger character (a single character) that has trigger code complete.
|
||
* Is undefined if `triggerKind !== CompletionTriggerKind.TriggerCharacter`
|
||
*/
|
||
triggerCharacter?: string
|
||
|
||
option?: CompleteOption
|
||
}
|
||
|
||
/**
|
||
* Represents a reference to a command. Provides a title which
|
||
* will be used to represent a command in the UI and, optionally,
|
||
* an array of arguments which will be passed to the command handler
|
||
* function when invoked.
|
||
*/
|
||
export interface Command {
|
||
/**
|
||
* Title of the command, like `save`.
|
||
*/
|
||
title: string
|
||
/**
|
||
* The identifier of the actual command handler.
|
||
*/
|
||
command: string
|
||
/**
|
||
* Arguments that the command handler should be
|
||
* invoked with.
|
||
*/
|
||
arguments?: any[]
|
||
}
|
||
|
||
export interface TextDocumentEdit {
|
||
/**
|
||
* The text document to change.
|
||
*/
|
||
textDocument: {
|
||
uri: string
|
||
version: number | null
|
||
}
|
||
/**
|
||
* The edits to be applied.
|
||
*/
|
||
edits: TextEdit[]
|
||
}
|
||
|
||
/**
|
||
* A workspace edit represents changes to many resources managed in the workspace. The edit
|
||
* should either provide `changes` or `documentChanges`. If documentChanges are present
|
||
* they are preferred over `changes` if the client can handle versioned document edits.
|
||
*/
|
||
export interface WorkspaceEdit {
|
||
/**
|
||
* Holds changes to existing resources.
|
||
*/
|
||
changes?: {
|
||
[uri: string]: TextEdit[]
|
||
}
|
||
/**
|
||
* Depending on the client capability `workspace.workspaceEdit.resourceOperations` document changes
|
||
* are either an array of `TextDocumentEdit`s to express changes to n different text documents
|
||
* where each text document edit addresses a specific version of a text document. Or it can contain
|
||
* above `TextDocumentEdit`s mixed with create, rename and delete file / folder operations.
|
||
*
|
||
* Whether a client supports versioned document edits is expressed via
|
||
* `workspace.workspaceEdit.documentChanges` client capability.
|
||
*
|
||
* If a client neither supports `documentChanges` nor `workspace.workspaceEdit.resourceOperations` then
|
||
* only plain `TextEdit`s using the `changes` property are supported.
|
||
*/
|
||
documentChanges?: (TextDocumentEdit | CreateFile | RenameFile | DeleteFile)[]
|
||
}
|
||
|
||
interface ResourceOperation {
|
||
kind: string
|
||
}
|
||
|
||
/**
|
||
* Delete file options
|
||
*/
|
||
export interface DeleteFileOptions {
|
||
/**
|
||
* Delete the content recursively if a folder is denoted.
|
||
*/
|
||
recursive?: boolean
|
||
/**
|
||
* Ignore the operation if the file doesn't exist.
|
||
*/
|
||
ignoreIfNotExists?: boolean
|
||
}
|
||
/**
|
||
* Delete file operation
|
||
*/
|
||
export interface DeleteFile extends ResourceOperation {
|
||
/**
|
||
* A delete
|
||
*/
|
||
kind: 'delete'
|
||
/**
|
||
* The file to delete.
|
||
*/
|
||
uri: string
|
||
/**
|
||
* Delete options.
|
||
*/
|
||
options?: DeleteFileOptions
|
||
}
|
||
|
||
/**
|
||
* Options to create a file.
|
||
*/
|
||
export interface CreateFileOptions {
|
||
/**
|
||
* Overwrite existing file. Overwrite wins over `ignoreIfExists`
|
||
*/
|
||
overwrite?: boolean
|
||
/**
|
||
* Ignore if exists.
|
||
*/
|
||
ignoreIfExists?: boolean
|
||
}
|
||
/**
|
||
* Create file operation.
|
||
*/
|
||
export interface CreateFile extends ResourceOperation {
|
||
/**
|
||
* A create
|
||
*/
|
||
kind: 'create'
|
||
/**
|
||
* The resource to create.
|
||
*/
|
||
uri: string
|
||
/**
|
||
* Additional options
|
||
*/
|
||
options?: CreateFileOptions
|
||
}
|
||
|
||
/**
|
||
* Rename file options
|
||
*/
|
||
export interface RenameFileOptions {
|
||
/**
|
||
* Overwrite target if existing. Overwrite wins over `ignoreIfExists`
|
||
*/
|
||
overwrite?: boolean
|
||
/**
|
||
* Ignores if target exists.
|
||
*/
|
||
ignoreIfExists?: boolean
|
||
}
|
||
/**
|
||
* Rename file operation
|
||
*/
|
||
export interface RenameFile extends ResourceOperation {
|
||
/**
|
||
* A rename
|
||
*/
|
||
kind: 'rename'
|
||
/**
|
||
* The old (existing) location.
|
||
*/
|
||
oldUri: string
|
||
/**
|
||
* The new location.
|
||
*/
|
||
newUri: string
|
||
/**
|
||
* Rename options.
|
||
*/
|
||
options?: RenameFileOptions
|
||
}
|
||
/**
|
||
* Represents a related message and source code location for a diagnostic. This should be
|
||
* used to point to code locations that cause or related to a diagnostics, e.g when duplicating
|
||
* a symbol in a scope.
|
||
*/
|
||
export interface DiagnosticRelatedInformation {
|
||
/**
|
||
* The location of this related diagnostic information.
|
||
*/
|
||
location: Location
|
||
/**
|
||
* The message of this related diagnostic information.
|
||
*/
|
||
message: string
|
||
}
|
||
|
||
/**
|
||
* The diagnostic's severity.
|
||
*/
|
||
export namespace DiagnosticSeverity {
|
||
/**
|
||
* Reports an error.
|
||
*/
|
||
const Error: 1
|
||
/**
|
||
* Reports a warning.
|
||
*/
|
||
const Warning: 2
|
||
/**
|
||
* Reports an information.
|
||
*/
|
||
const Information: 3
|
||
/**
|
||
* Reports a hint.
|
||
*/
|
||
const Hint: 4
|
||
}
|
||
|
||
export type DiagnosticSeverity = 1 | 2 | 3 | 4
|
||
|
||
/**
|
||
* The diagnostic tags.
|
||
*
|
||
* @since 3.15.0
|
||
*/
|
||
export namespace DiagnosticTag {
|
||
/**
|
||
* Unused or unnecessary code.
|
||
*
|
||
* Clients are allowed to render diagnostics with this tag faded out instead of having
|
||
* an error squiggle.
|
||
*/
|
||
const Unnecessary: 1
|
||
/**
|
||
* Deprecated or obsolete code.
|
||
*
|
||
* Clients are allowed to rendered diagnostics with this tag strike through.
|
||
*/
|
||
const Deprecated: 2
|
||
}
|
||
|
||
export type DiagnosticTag = 1 | 2
|
||
|
||
/**
|
||
* Represents a diagnostic, such as a compiler error or warning. Diagnostic objects
|
||
* are only valid in the scope of a resource.
|
||
*/
|
||
export interface Diagnostic {
|
||
/**
|
||
* The range at which the message applies
|
||
*/
|
||
range: Range
|
||
/**
|
||
* The diagnostic's severity. Can be omitted. If omitted it is up to the
|
||
* client to interpret diagnostics as error, warning, info or hint.
|
||
*/
|
||
severity?: DiagnosticSeverity
|
||
/**
|
||
* The diagnostic's code, which usually appear in the user interface.
|
||
*/
|
||
code?: number | string
|
||
/**
|
||
* A human-readable string describing the source of this
|
||
* diagnostic, e.g. 'typescript' or 'super lint'. It usually
|
||
* appears in the user interface.
|
||
*/
|
||
source?: string
|
||
/**
|
||
* The diagnostic's message. It usually appears in the user interface
|
||
*/
|
||
message: string
|
||
/**
|
||
* Additional metadata about the diagnostic.
|
||
*/
|
||
tags?: DiagnosticTag[]
|
||
/**
|
||
* An array of related diagnostic information, e.g. when symbol-names within
|
||
* a scope collide all definitions can be marked via this property.
|
||
*/
|
||
relatedInformation?: DiagnosticRelatedInformation[]
|
||
}
|
||
|
||
/**
|
||
* The Diagnostic namespace provides helper functions to work with
|
||
* [Diagnostic](#Diagnostic) literals.
|
||
*/
|
||
export namespace Diagnostic {
|
||
/**
|
||
* Creates a new Diagnostic literal.
|
||
*/
|
||
function create(range: Range, message: string, severity?: DiagnosticSeverity, code?: number | string, source?: string, relatedInformation?: DiagnosticRelatedInformation[]): Diagnostic
|
||
/**
|
||
* Checks whether the given literal conforms to the [Diagnostic](#Diagnostic) interface.
|
||
*/
|
||
function is(value: any): value is Diagnostic
|
||
}
|
||
|
||
/**
|
||
* A code action represents a change that can be performed in code, e.g. to fix a problem or
|
||
* to refactor code.
|
||
*
|
||
* A CodeAction must set either `edit` and/or a `command`. If both are supplied, the `edit` is applied first, then the `command` is executed.
|
||
*/
|
||
export interface CodeAction {
|
||
/**
|
||
* A short, human-readable, title for this code action.
|
||
*/
|
||
title: string
|
||
/**
|
||
* The kind of the code action.
|
||
*
|
||
* Used to filter code actions.
|
||
*/
|
||
kind?: CodeActionKind
|
||
/**
|
||
* The diagnostics that this code action resolves.
|
||
*/
|
||
diagnostics?: Diagnostic[]
|
||
/**
|
||
* Marks this as a preferred action. Preferred actions are used by the `auto fix` command and can be targeted
|
||
* by keybindings.
|
||
*
|
||
* A quick fix should be marked preferred if it properly addresses the underlying error.
|
||
* A refactoring should be marked preferred if it is the most reasonable choice of actions to take.
|
||
*
|
||
* @since 3.15.0
|
||
*/
|
||
isPreferred?: boolean
|
||
/**
|
||
* The workspace edit this code action performs.
|
||
*/
|
||
edit?: WorkspaceEdit
|
||
/**
|
||
* A command this code action executes. If a code action
|
||
* provides a edit and a command, first the edit is
|
||
* executed and then the command.
|
||
*/
|
||
command?: Command
|
||
/**
|
||
* Id of client that provide codeAction.
|
||
*/
|
||
clientId?: string
|
||
}
|
||
|
||
/**
|
||
* The kind of a code action.
|
||
*
|
||
* Kinds are a hierarchical list of identifiers separated by `.`, e.g. `"refactor.extract.function"`.
|
||
*
|
||
* The set of kinds is open and client needs to announce the kinds it supports to the server during
|
||
* initialization.
|
||
*/
|
||
export type CodeActionKind = string
|
||
/**
|
||
* A set of predefined code action kinds
|
||
*/
|
||
export namespace CodeActionKind {
|
||
/**
|
||
* Empty kind.
|
||
*/
|
||
const Empty: CodeActionKind
|
||
/**
|
||
* Base kind for quickfix actions: 'quickfix'
|
||
*/
|
||
const QuickFix: CodeActionKind
|
||
/**
|
||
* Base kind for refactoring actions: 'refactor'
|
||
*/
|
||
const Refactor: CodeActionKind
|
||
/**
|
||
* Base kind for refactoring extraction actions: 'refactor.extract'
|
||
*
|
||
* Example extract actions:
|
||
*
|
||
* - Extract method
|
||
* - Extract function
|
||
* - Extract variable
|
||
* - Extract interface from class
|
||
* - ...
|
||
*/
|
||
const RefactorExtract: CodeActionKind
|
||
/**
|
||
* Base kind for refactoring inline actions: 'refactor.inline'
|
||
*
|
||
* Example inline actions:
|
||
*
|
||
* - Inline function
|
||
* - Inline variable
|
||
* - Inline constant
|
||
* - ...
|
||
*/
|
||
const RefactorInline: CodeActionKind
|
||
/**
|
||
* Base kind for refactoring rewrite actions: 'refactor.rewrite'
|
||
*
|
||
* Example rewrite actions:
|
||
*
|
||
* - Convert JavaScript function to class
|
||
* - Add or remove parameter
|
||
* - Encapsulate field
|
||
* - Make method static
|
||
* - Move method to base class
|
||
* - ...
|
||
*/
|
||
const RefactorRewrite: CodeActionKind
|
||
/**
|
||
* Base kind for source actions: `source`
|
||
*
|
||
* Source code actions apply to the entire file.
|
||
*/
|
||
const Source: CodeActionKind
|
||
/**
|
||
* Base kind for an organize imports source action: `source.organizeImports`
|
||
*/
|
||
const SourceOrganizeImports: CodeActionKind
|
||
/**
|
||
* Base kind for auto-fix source actions: `source.fixAll`.
|
||
*
|
||
* Fix all actions automatically fix errors that have a clear fix that do not require user input.
|
||
* They should not suppress errors or perform unsafe fixes such as generating new types or classes.
|
||
*
|
||
* @since 3.15.0
|
||
*/
|
||
const SourceFixAll: CodeActionKind
|
||
}
|
||
|
||
/**
|
||
* Position in a text document expressed as zero-based line and character offset.
|
||
* The offsets are based on a UTF-16 string representation. So a string of the form
|
||
* `a𐐀b` the character offset of the character `a` is 0, the character offset of `𐐀`
|
||
* is 1 and the character offset of b is 3 since `𐐀` is represented using two code
|
||
* units in UTF-16.
|
||
*
|
||
* Positions are line end character agnostic. So you can not specify a position that
|
||
* denotes `\r|\n` or `\n|` where `|` represents the character offset.
|
||
*/
|
||
export interface Position {
|
||
/**
|
||
* Line position in a document (zero-based).
|
||
* If a line number is greater than the number of lines in a document, it defaults back to the number of lines in the document.
|
||
* If a line number is negative, it defaults to 0.
|
||
*/
|
||
line: number
|
||
/**
|
||
* Character offset on a line in a document (zero-based). Assuming that the line is
|
||
* represented as a string, the `character` value represents the gap between the
|
||
* `character` and `character + 1`.
|
||
*
|
||
* If the character value is greater than the line length it defaults back to the
|
||
* line length.
|
||
* If a line number is negative, it defaults to 0.
|
||
*/
|
||
character: number
|
||
}
|
||
|
||
/**
|
||
* The Position namespace provides helper functions to work with
|
||
* [Position](#Position) literals.
|
||
*/
|
||
export namespace Position {
|
||
/**
|
||
* Creates a new Position literal from the given line and character.
|
||
* @param line The position's line.
|
||
* @param character The position's character.
|
||
*/
|
||
function create(line: number, character: number): Position
|
||
/**
|
||
* Checks whether the given liternal conforms to the [Position](#Position) interface.
|
||
*/
|
||
function is(value: any): value is Position
|
||
}
|
||
|
||
/**
|
||
* Represents a typed event.
|
||
*
|
||
* A function that represents an event to which you subscribe by calling it with
|
||
* a listener function as argument.
|
||
*
|
||
* @example
|
||
* item.onDidChange(function(event) { console.log("Event happened: " + event); });
|
||
*/
|
||
export interface Event<T> {
|
||
|
||
/**
|
||
* A function that represents an event to which you subscribe by calling it with
|
||
* a listener function as argument.
|
||
*
|
||
* @param listener The listener function will be called when the event happens.
|
||
* @param thisArgs The `this`-argument which will be used when calling the event listener.
|
||
* @param disposables An array to which a [disposable](#Disposable) will be added.
|
||
* @return A disposable which unsubscribes the event listener.
|
||
*/
|
||
(listener: (e: T) => any, thisArgs?: any, disposables?: Disposable[]): Disposable
|
||
}
|
||
|
||
export namespace Event {
|
||
const None: Event<any>
|
||
}
|
||
|
||
export interface EmitterOptions {
|
||
onFirstListenerAdd?: Function
|
||
onLastListenerRemove?: Function
|
||
}
|
||
|
||
export class Emitter<T> {
|
||
constructor(_options?: EmitterOptions | undefined)
|
||
/**
|
||
* For the public to allow to subscribe
|
||
* to events from this Emitter
|
||
*/
|
||
get event(): Event<T>
|
||
/**
|
||
* To be kept private to fire an event to
|
||
* subscribers
|
||
*/
|
||
fire(event: T): any
|
||
dispose(): void
|
||
}
|
||
|
||
/**
|
||
* Represents a location inside a resource, such as a line
|
||
* inside a text file.
|
||
*/
|
||
export interface Location {
|
||
uri: string
|
||
range: Range
|
||
}
|
||
|
||
/**
|
||
* The Location namespace provides helper functions to work with
|
||
* [Location](#Location) literals.
|
||
*/
|
||
export namespace Location {
|
||
/**
|
||
* Creates a Location literal.
|
||
* @param uri The location's uri.
|
||
* @param range The location's range.
|
||
*/
|
||
function create(uri: string, range: Range): Location
|
||
/**
|
||
* Checks whether the given literal conforms to the [Location](#Location) interface.
|
||
*/
|
||
function is(value: any): value is Location
|
||
}
|
||
|
||
/**
|
||
* A range in a text document expressed as (zero-based) start and end positions.
|
||
*
|
||
* If you want to specify a range that contains a line including the line ending
|
||
* character(s) then use an end position denoting the start of the next line.
|
||
* For example:
|
||
* ```ts
|
||
* {
|
||
* start: { line: 5, character: 23 }
|
||
* end : { line 6, character : 0 }
|
||
* }
|
||
* ```
|
||
*/
|
||
export interface Range {
|
||
/**
|
||
* The range's start position
|
||
*/
|
||
start: Position
|
||
/**
|
||
* The range's end position.
|
||
*/
|
||
end: Position
|
||
}
|
||
|
||
/**
|
||
* The Range namespace provides helper functions to work with
|
||
* [Range](#Range) literals.
|
||
*/
|
||
export namespace Range {
|
||
/**
|
||
* Create a new Range liternal.
|
||
* @param start The range's start position.
|
||
* @param end The range's end position.
|
||
*/
|
||
function create(start: Position, end: Position): Range
|
||
/**
|
||
* Create a new Range liternal.
|
||
* @param startLine The start line number.
|
||
* @param startCharacter The start character.
|
||
* @param endLine The end line number.
|
||
* @param endCharacter The end character.
|
||
*/
|
||
function create(startLine: number, startCharacter: number, endLine: number, endCharacter: number): Range
|
||
/**
|
||
* Checks whether the given literal conforms to the [Range](#Range) interface.
|
||
*/
|
||
function is(value: any): value is Range
|
||
}
|
||
|
||
/**
|
||
* A text edit applicable to a text document.
|
||
*/
|
||
export interface TextEdit {
|
||
/**
|
||
* The range of the text document to be manipulated. To insert
|
||
* text into a document create a range where start === end.
|
||
*/
|
||
range: Range
|
||
/**
|
||
* The string to be inserted. For delete operations use an
|
||
* empty string.
|
||
*/
|
||
newText: string
|
||
}
|
||
|
||
/**
|
||
* The TextEdit namespace provides helper function to create replace,
|
||
* insert and delete edits more easily.
|
||
*/
|
||
export namespace TextEdit {
|
||
/**
|
||
* Creates a replace text edit.
|
||
* @param range The range of text to be replaced.
|
||
* @param newText The new text.
|
||
*/
|
||
function replace(range: Range, newText: string): TextEdit
|
||
/**
|
||
* Creates a insert text edit.
|
||
* @param position The position to insert the text at.
|
||
* @param newText The text to be inserted.
|
||
*/
|
||
function insert(position: Position, newText: string): TextEdit
|
||
/**
|
||
* Creates a delete text edit.
|
||
* @param range The range of text to be deleted.
|
||
*/
|
||
function del(range: Range): TextEdit
|
||
function is(value: any): value is TextEdit
|
||
}
|
||
|
||
/**
|
||
* Defines a CancellationToken. This interface is not
|
||
* intended to be implemented. A CancellationToken must
|
||
* be created via a CancellationTokenSource.
|
||
*/
|
||
export interface CancellationToken {
|
||
/**
|
||
* Is `true` when the token has been cancelled, `false` otherwise.
|
||
*/
|
||
readonly isCancellationRequested: boolean
|
||
/**
|
||
* An [event](#Event) which fires upon cancellation.
|
||
*/
|
||
readonly onCancellationRequested: Event<any>
|
||
}
|
||
|
||
export namespace CancellationToken {
|
||
const None: CancellationToken
|
||
const Cancelled: CancellationToken
|
||
function is(value: any): value is CancellationToken
|
||
}
|
||
|
||
export class CancellationTokenSource {
|
||
get token(): CancellationToken
|
||
cancel(): void
|
||
dispose(): void
|
||
}
|
||
|
||
/**
|
||
* Represents a line of text, such as a line of source code.
|
||
*
|
||
* TextLine objects are __immutable__. When a {@link LinesTextDocument document} changes,
|
||
* previously retrieved lines will not represent the latest state.
|
||
*/
|
||
export interface TextLine {
|
||
/**
|
||
* The zero-based line number.
|
||
*/
|
||
readonly lineNumber: number
|
||
|
||
/**
|
||
* The text of this line without the line separator characters.
|
||
*/
|
||
readonly text: string
|
||
|
||
/**
|
||
* The range this line covers without the line separator characters.
|
||
*/
|
||
readonly range: Range
|
||
|
||
/**
|
||
* The range this line covers with the line separator characters.
|
||
*/
|
||
readonly rangeIncludingLineBreak: Range
|
||
|
||
/**
|
||
* The offset of the first character which is not a whitespace character as defined
|
||
* by `/\s/`. **Note** that if a line is all whitespace the length of the line is returned.
|
||
*/
|
||
readonly firstNonWhitespaceCharacterIndex: number
|
||
|
||
/**
|
||
* Whether this line is whitespace only, shorthand
|
||
* for {@link TextLine.firstNonWhitespaceCharacterIndex} === {@link TextLine.text TextLine.text.length}.
|
||
*/
|
||
readonly isEmptyOrWhitespace: boolean
|
||
}
|
||
|
||
/**
|
||
* A simple text document. Not to be implemented. The document keeps the content
|
||
* as string.
|
||
*/
|
||
export interface TextDocument {
|
||
/**
|
||
* The associated URI for this document. Most documents have the __file__-scheme, indicating that they
|
||
* represent files on disk. However, some documents may have other schemes indicating that they are not
|
||
* available on disk.
|
||
*
|
||
* @readonly
|
||
*/
|
||
readonly uri: string
|
||
/**
|
||
* The identifier of the language associated with this document.
|
||
*
|
||
* @readonly
|
||
*/
|
||
readonly languageId: string
|
||
/**
|
||
* The version number of this document (it will increase after each
|
||
* change, including undo/redo).
|
||
*
|
||
* @readonly
|
||
*/
|
||
readonly version: number
|
||
/**
|
||
* Get the text of this document. A substring can be retrieved by
|
||
* providing a range.
|
||
*
|
||
* @param range (optional) An range within the document to return.
|
||
* If no range is passed, the full content is returned.
|
||
* Invalid range positions are adjusted as described in [Position.line](#Position.line)
|
||
* and [Position.character](#Position.character).
|
||
* If the start range position is greater than the end range position,
|
||
* then the effect of getText is as if the two positions were swapped.
|
||
|
||
* @return The text of this document or a substring of the text if a
|
||
* range is provided.
|
||
*/
|
||
getText(range?: Range): string
|
||
/**
|
||
* Converts a zero-based offset to a position.
|
||
*
|
||
* @param offset A zero-based offset.
|
||
* @return A valid [position](#Position).
|
||
*/
|
||
positionAt(offset: number): Position
|
||
/**
|
||
* Converts the position to a zero-based offset.
|
||
* Invalid positions are adjusted as described in [Position.line](#Position.line)
|
||
* and [Position.character](#Position.character).
|
||
*
|
||
* @param position A position.
|
||
* @return A valid zero-based offset.
|
||
*/
|
||
offsetAt(position: Position): number
|
||
/**
|
||
* The number of lines in this document.
|
||
*
|
||
* @readonly
|
||
*/
|
||
readonly lineCount: number
|
||
}
|
||
|
||
export interface LinesTextDocument extends TextDocument {
|
||
/**
|
||
* Total length of TextDocument.
|
||
*/
|
||
readonly length: number
|
||
/**
|
||
* End position of TextDocument.
|
||
*/
|
||
readonly end: Position
|
||
/**
|
||
* 'eol' option of related buffer. When enabled additional `\n` will be
|
||
* added to the end of document content
|
||
*/
|
||
readonly rol: boolean
|
||
/**
|
||
* Lines of TextDocument.
|
||
*/
|
||
readonly lines: ReadonlyArray<string>
|
||
/**
|
||
* Returns a text line denoted by the line number. Note
|
||
* that the returned object is *not* live and changes to the
|
||
* document are not reflected.
|
||
*
|
||
* @param line or position
|
||
* @return A {@link TextLine line}.
|
||
*/
|
||
lineAt(lineOrPos: number | Position): TextLine
|
||
}
|
||
|
||
/**
|
||
* @since 3.16.0
|
||
*/
|
||
export interface SemanticTokensLegend {
|
||
/**
|
||
* The token types a server uses.
|
||
*/
|
||
tokenTypes: string[]
|
||
/**
|
||
* The token modifiers a server uses.
|
||
*/
|
||
tokenModifiers: string[]
|
||
}
|
||
|
||
/**
|
||
* @since 3.16.0
|
||
*/
|
||
export interface SemanticTokens {
|
||
/**
|
||
* An optional result id. If provided and clients support delta updating
|
||
* the client will include the result id in the next semantic token request.
|
||
* A server can then instead of computing all semantic tokens again simply
|
||
* send a delta.
|
||
*/
|
||
resultId?: string
|
||
/**
|
||
* The actual tokens.
|
||
*/
|
||
data: number[]
|
||
}
|
||
|
||
/**
|
||
* @since 3.16.0
|
||
*/
|
||
export interface SemanticTokensEdit {
|
||
/**
|
||
* The start offset of the edit.
|
||
*/
|
||
start: number
|
||
/**
|
||
* The count of elements to remove.
|
||
*/
|
||
deleteCount: number
|
||
/**
|
||
* The elements to insert.
|
||
*/
|
||
data?: number[]
|
||
}
|
||
|
||
/**
|
||
* @since 3.16.0
|
||
*/
|
||
export interface SemanticTokensDelta {
|
||
readonly resultId?: string
|
||
/**
|
||
* The semantic token edits to transform a previous result into a new result.
|
||
*/
|
||
edits: SemanticTokensEdit[]
|
||
}
|
||
|
||
/**
|
||
* The result of a linked editing range request.
|
||
*
|
||
* @since 3.16.0
|
||
*/
|
||
export interface LinkedEditingRanges {
|
||
/**
|
||
* A list of ranges that can be edited together. The ranges must have
|
||
* identical length and contain identical text content. The ranges cannot overlap.
|
||
*/
|
||
ranges: Range[]
|
||
/**
|
||
* An optional word pattern (regular expression) that describes valid contents for
|
||
* the given ranges. If no pattern is provided, the client configuration's word
|
||
* pattern will be used.
|
||
*/
|
||
wordPattern?: string
|
||
}
|
||
|
||
/**
|
||
* Represents programming constructs like functions or constructors in the context
|
||
* of call hierarchy.
|
||
*
|
||
* @since 3.16.0
|
||
*/
|
||
export interface CallHierarchyItem {
|
||
/**
|
||
* The name of this item.
|
||
*/
|
||
name: string
|
||
/**
|
||
* The kind of this item.
|
||
*/
|
||
kind: SymbolKind
|
||
/**
|
||
* Tags for this item.
|
||
*/
|
||
tags?: number[]
|
||
/**
|
||
* More detail for this item, e.g. the signature of a function.
|
||
*/
|
||
detail?: string
|
||
/**
|
||
* The resource identifier of this item.
|
||
*/
|
||
uri: string
|
||
/**
|
||
* The range enclosing this symbol not including leading/trailing whitespace but everything else, e.g. comments and code.
|
||
*/
|
||
range: Range
|
||
/**
|
||
* The range that should be selected and revealed when this symbol is being picked, e.g. the name of a function.
|
||
* Must be contained by the [`range`](#CallHierarchyItem.range).
|
||
*/
|
||
selectionRange: Range
|
||
/**
|
||
* A data entry field that is preserved between a call hierarchy prepare and
|
||
* incoming calls or outgoing calls requests.
|
||
*/
|
||
data?: unknown
|
||
}
|
||
|
||
/**
|
||
* Represents an incoming call, e.g. a caller of a method or constructor.
|
||
*
|
||
* @since 3.16.0
|
||
*/
|
||
export interface CallHierarchyIncomingCall {
|
||
/**
|
||
* The item that makes the call.
|
||
*/
|
||
from: CallHierarchyItem
|
||
/**
|
||
* The ranges at which the calls appear. This is relative to the caller
|
||
* denoted by [`this.from`](#CallHierarchyIncomingCall.from).
|
||
*/
|
||
fromRanges: Range[]
|
||
}
|
||
/**
|
||
* Represents an outgoing call, e.g. calling a getter from a method or a method from a constructor etc.
|
||
*
|
||
* @since 3.16.0
|
||
*/
|
||
export interface CallHierarchyOutgoingCall {
|
||
/**
|
||
* The item that is called.
|
||
*/
|
||
to: CallHierarchyItem
|
||
/**
|
||
* The range at which this item is called. This is the range relative to the caller, e.g the item
|
||
* passed to [`provideCallHierarchyOutgoingCalls`](#CallHierarchyItemProvider.provideCallHierarchyOutgoingCalls)
|
||
* and not [`this.to`](#CallHierarchyOutgoingCall.to).
|
||
*/
|
||
fromRanges: Range[]
|
||
}
|
||
|
||
/**
|
||
* Moniker uniqueness level to define scope of the moniker.
|
||
*
|
||
* @since 3.16.0
|
||
*/
|
||
export namespace UniquenessLevel {
|
||
/**
|
||
* The moniker is only unique inside a document
|
||
*/
|
||
export const document = 'document'
|
||
|
||
/**
|
||
* The moniker is unique inside a project for which a dump got created
|
||
*/
|
||
export const project = 'project'
|
||
|
||
/**
|
||
* The moniker is unique inside the group to which a project belongs
|
||
*/
|
||
export const group = 'group'
|
||
|
||
/**
|
||
* The moniker is unique inside the moniker scheme.
|
||
*/
|
||
export const scheme = 'scheme'
|
||
|
||
/**
|
||
* The moniker is globally unique
|
||
*/
|
||
export const global = 'global'
|
||
}
|
||
|
||
export type UniquenessLevel = 'document' | 'project' | 'group' | 'scheme' | 'global'
|
||
|
||
/**
|
||
* The moniker kind.
|
||
*
|
||
* @since 3.16.0
|
||
*/
|
||
export enum MonikerKind {
|
||
/**
|
||
* The moniker represent a symbol that is imported into a project
|
||
*/
|
||
import = 'import',
|
||
|
||
/**
|
||
* The moniker represents a symbol that is exported from a project
|
||
*/
|
||
export = 'export',
|
||
|
||
/**
|
||
* The moniker represents a symbol that is local to a project (e.g. a local
|
||
* variable of a function, a class not visible outside the project, ...)
|
||
*/
|
||
local = 'local'
|
||
}
|
||
|
||
/**
|
||
* Moniker definition to match LSIF 0.5 moniker definition.
|
||
*
|
||
* @since 3.16.0
|
||
*/
|
||
export interface Moniker {
|
||
/**
|
||
* The scheme of the moniker. For example tsc or .Net
|
||
*/
|
||
scheme: string
|
||
|
||
/**
|
||
* The identifier of the moniker. The value is opaque in LSIF however
|
||
* schema owners are allowed to define the structure if they want.
|
||
*/
|
||
identifier: string
|
||
|
||
/**
|
||
* The scope in which the moniker is unique
|
||
*/
|
||
unique: UniquenessLevel
|
||
|
||
/**
|
||
* The moniker kind if known.
|
||
*/
|
||
kind?: MonikerKind
|
||
}
|
||
|
||
export type InlayHintKind = 1 | 2
|
||
|
||
/**
|
||
* An inlay hint label part allows for interactive and composite labels
|
||
* of inlay hints.
|
||
*
|
||
* @since 3.17.0
|
||
* @proposed
|
||
*/
|
||
export interface InlayHintLabelPart {
|
||
|
||
/**
|
||
* The value of this label part.
|
||
*/
|
||
value: string
|
||
|
||
/**
|
||
* The tooltip text when you hover over this label part. Depending on
|
||
* the client capability `inlayHint.resolveSupport` clients might resolve
|
||
* this property late using the resolve request.
|
||
*/
|
||
tooltip?: string | MarkupContent
|
||
|
||
/**
|
||
* An optional source code location that represents this
|
||
* label part.
|
||
*
|
||
* The editor will use this location for the hover and for code navigation
|
||
* features: This part will become a clickable link that resolves to the
|
||
* definition of the symbol at the given location (not necessarily the
|
||
* location itself), it shows the hover that shows at the given location,
|
||
* and it shows a context menu with further code navigation commands.
|
||
*
|
||
* Depending on the client capability `inlayHint.resolveSupport` clients
|
||
* might resolve this property late using the resolve request.
|
||
*/
|
||
location?: Location
|
||
|
||
/**
|
||
* An optional command for this label part.
|
||
*
|
||
* Depending on the client capability `inlayHint.resolveSupport` clients
|
||
* might resolve this property late using the resolve request.
|
||
*/
|
||
command?: Command
|
||
}
|
||
|
||
/**
|
||
* Inlay hint information.
|
||
*
|
||
* @since 3.17.0
|
||
* @proposed
|
||
*/
|
||
export interface InlayHint {
|
||
|
||
/**
|
||
* The position of this hint.
|
||
*/
|
||
position: Position
|
||
|
||
/**
|
||
* The label of this hint. A human readable string or an array of
|
||
* InlayHintLabelPart label parts.
|
||
*
|
||
* *Note* that neither the string nor the label part can be empty.
|
||
*/
|
||
label: string | InlayHintLabelPart[]
|
||
|
||
/**
|
||
* The kind of this hint. Can be omitted in which case the client
|
||
* should fall back to a reasonable default.
|
||
*/
|
||
kind?: InlayHintKind
|
||
|
||
/**
|
||
* Optional text edits that are performed when accepting this inlay hint.
|
||
*
|
||
* *Note* that edits are expected to change the document so that the inlay
|
||
* hint (or its nearest variant) is now part of the document and the inlay
|
||
* hint itself is now obsolete.
|
||
*/
|
||
textEdits?: TextEdit[]
|
||
|
||
/**
|
||
* The tooltip text when you hover over this item.
|
||
*/
|
||
tooltip?: string | MarkupContent
|
||
|
||
/**
|
||
* Render padding before the hint.
|
||
*
|
||
* Note: Padding should use the editor's background color, not the
|
||
* background color of the hint itself. That means padding can be used
|
||
* to visually align/separate an inlay hint.
|
||
*/
|
||
paddingLeft?: boolean
|
||
|
||
/**
|
||
* Render padding after the hint.
|
||
*
|
||
* Note: Padding should use the editor's background color, not the
|
||
* background color of the hint itself. That means padding can be used
|
||
* to visually align/separate an inlay hint.
|
||
*/
|
||
paddingRight?: boolean
|
||
|
||
/**
|
||
* A data entry field that is preserved on a inlay hint between
|
||
* a `textDocument/inlayHint` and a `inlayHint/resolve` request.
|
||
*/
|
||
data?: any
|
||
}
|
||
// }}
|
||
|
||
// nvim interfaces {{
|
||
type VimValue =
|
||
| number
|
||
| boolean
|
||
| string
|
||
| number[]
|
||
| { [key: string]: any }
|
||
|
||
// see `:h nvim_set_client_info()` for details.
|
||
export interface VimClientInfo {
|
||
name: string
|
||
version: {
|
||
major?: number
|
||
minor?: number
|
||
patch?: number
|
||
prerelease?: string
|
||
commit?: string
|
||
}
|
||
type: 'remote' | 'embedder' | 'host'
|
||
methods?: {
|
||
[index: string]: any
|
||
}
|
||
attributes?: {
|
||
[index: string]: any
|
||
}
|
||
}
|
||
|
||
export interface UiAttachOptions {
|
||
rgb?: boolean
|
||
ext_popupmenu?: boolean
|
||
ext_tabline?: boolean
|
||
ext_wildmenu?: boolean
|
||
ext_cmdline?: boolean
|
||
ext_linegrid?: boolean
|
||
ext_hlstate?: boolean
|
||
}
|
||
|
||
export interface ChanInfo {
|
||
id: number
|
||
stream: 'stdio' | 'stderr' | 'socket' | 'job'
|
||
mode: 'bytes' | 'terminal' | 'rpc'
|
||
pty?: number
|
||
buffer?: number
|
||
client?: VimClientInfo
|
||
}
|
||
|
||
/**
|
||
* Returned by nvim_get_commands api.
|
||
*/
|
||
export interface VimCommandDescription {
|
||
name: string
|
||
bang: boolean
|
||
bar: boolean
|
||
register: boolean
|
||
definition: string
|
||
count?: number | null
|
||
script_id: number
|
||
complete?: string
|
||
nargs?: string
|
||
range?: string
|
||
complete_arg?: string
|
||
}
|
||
|
||
export interface NvimFloatOptions {
|
||
standalone?: boolean
|
||
focusable?: boolean
|
||
relative?: 'editor' | 'cursor' | 'win'
|
||
anchor?: 'NW' | 'NE' | 'SW' | 'SE'
|
||
height: number
|
||
width: number
|
||
row: number
|
||
col: number
|
||
}
|
||
|
||
export interface ExtmarkOptions {
|
||
id?: number
|
||
// 0-based inclusive.
|
||
end_line?: number
|
||
// 0-based exclusive.
|
||
end_col?: number
|
||
// name of the highlight group used to highlight this mark.
|
||
hl_group?: string
|
||
hl_mode?: 'replace' | 'combine' | 'blend'
|
||
hl_eol?: boolean
|
||
// A list of [text, highlight] tuples
|
||
virt_text?: [string, string | string[]][]
|
||
virt_text_pos?: 'eol' | 'overlay' | 'right_align'
|
||
virt_text_win_col?: number
|
||
virt_text_hide?: boolean
|
||
virt_lines?: [string, string | string[]][][]
|
||
virt_lines_above?: boolean
|
||
virt_lines_leftcol?: boolean
|
||
right_gravity?: boolean
|
||
end_right_gravity?: boolean
|
||
priority?: number
|
||
}
|
||
|
||
export interface ExtmarkDetails {
|
||
end_col: number
|
||
end_row: number
|
||
priority: number
|
||
hl_group?: string
|
||
virt_text?: [string, string][]
|
||
virt_lines?: [string, string | string][][]
|
||
}
|
||
|
||
export interface NvimProc {
|
||
ppid: number
|
||
name: string
|
||
pid: number
|
||
}
|
||
|
||
export interface SignPlaceOption {
|
||
id?: number
|
||
group?: string
|
||
name: string
|
||
lnum: number
|
||
priority?: number
|
||
}
|
||
|
||
export interface SignUnplaceOption {
|
||
group?: string
|
||
id?: number
|
||
}
|
||
|
||
export interface SignPlacedOption {
|
||
/**
|
||
* Use '*' for all group, default to '' as unnamed group.
|
||
*/
|
||
group?: string
|
||
id?: number
|
||
lnum?: number
|
||
}
|
||
|
||
export interface SignItem {
|
||
group: string
|
||
id: number
|
||
lnum: number
|
||
name: string
|
||
priority: number
|
||
}
|
||
|
||
export interface HighlightItem {
|
||
hlGroup: string
|
||
/**
|
||
* 0 based
|
||
*/
|
||
lnum: number
|
||
/**
|
||
* 0 based
|
||
*/
|
||
colStart: number
|
||
/**
|
||
* 0 based
|
||
*/
|
||
colEnd: number
|
||
}
|
||
|
||
export interface ExtendedHighlightItem extends HighlightItem {
|
||
combine?: boolean
|
||
start_incl?: boolean
|
||
end_incl?: boolean
|
||
}
|
||
|
||
export interface HighlightOption {
|
||
/**
|
||
* 0 based start line, default to 0.
|
||
*/
|
||
start?: number
|
||
/**
|
||
* 0 based end line, default to 0.
|
||
*/
|
||
end?: number
|
||
/**
|
||
* Default to 0 on vim8, 4096 on neovim
|
||
*/
|
||
priority?: number
|
||
/**
|
||
* Buffer changedtick to match.
|
||
*/
|
||
changedtick?: number
|
||
}
|
||
|
||
export interface BufferKeymapOption {
|
||
nowait?: boolean
|
||
silent?: boolean
|
||
script?: boolean
|
||
expr?: boolean
|
||
unique?: boolean
|
||
}
|
||
|
||
export interface BufferHighlight {
|
||
/**
|
||
* Name of the highlight group to use
|
||
*/
|
||
hlGroup?: string
|
||
/**
|
||
* Namespace to use or -1 for ungrouped highlight
|
||
*/
|
||
srcId?: number
|
||
/**
|
||
* Line to highlight (zero-indexed)
|
||
*/
|
||
line?: number
|
||
/**
|
||
* Start of (byte-indexed) column range to highlight
|
||
*/
|
||
colStart?: number
|
||
/**
|
||
* End of (byte-indexed) column range to highlight, or -1 to highlight to end of line
|
||
*/
|
||
colEnd?: number
|
||
}
|
||
|
||
export interface BufferClearHighlight {
|
||
srcId?: number
|
||
lineStart?: number
|
||
lineEnd?: number
|
||
}
|
||
|
||
interface BaseApi<T> {
|
||
/**
|
||
* unique identify number
|
||
*/
|
||
id: number
|
||
|
||
/**
|
||
* Check if same by compare id.
|
||
*/
|
||
equals(other: T): boolean
|
||
|
||
/**
|
||
* Request to vim, name need to be nvim_ prefixed and supported by vim.
|
||
*
|
||
* @param {string} name - nvim function name
|
||
* @param {VimValue[]} args
|
||
* @returns {Promise<VimValue>}
|
||
*/
|
||
request(name: string, args?: VimValue[]): Promise<any>
|
||
|
||
/**
|
||
* Send notification to vim, name need to be nvim_ prefixed and supported
|
||
* by vim
|
||
*/
|
||
notify(name: string, args?: VimValue[]): void
|
||
|
||
/**
|
||
* Retrieves scoped variable, returns null when value doesn't exist.
|
||
*/
|
||
getVar(name: string): Promise<VimValue | null>
|
||
|
||
/**
|
||
* Set scoped variable by request.
|
||
*
|
||
* @param {string} name
|
||
* @param {VimValue} value
|
||
* @returns {Promise<void>}
|
||
*/
|
||
setVar(name: string, value: VimValue): Promise<void>
|
||
|
||
/**
|
||
* Set scoped variable by notification.
|
||
*/
|
||
setVar(name: string, value: VimValue, isNotify: true): void
|
||
|
||
/**
|
||
* Delete scoped variable by notification.
|
||
*/
|
||
deleteVar(name: string): void
|
||
|
||
/**
|
||
* Retrieves a scoped option, doesn't exist for tabpage.
|
||
*/
|
||
getOption(name: string): Promise<VimValue>
|
||
|
||
/**
|
||
* Set scoped option by request, doesn't exist for tabpage.
|
||
*/
|
||
setOption(name: string, value: VimValue): Promise<void>
|
||
|
||
/**
|
||
* Set scoped variable by notification, doesn't exist for tabpage.
|
||
*/
|
||
setOption(name: string, value: VimValue, isNotify: true): void
|
||
}
|
||
|
||
export interface Neovim extends BaseApi<Neovim> {
|
||
|
||
/**
|
||
* Echo error message to vim and log error stack.
|
||
*/
|
||
echoError(msg: unknown): void
|
||
|
||
/**
|
||
* Check if `nvim_` function exists.
|
||
*/
|
||
hasFunction(name: string): boolean
|
||
|
||
/**
|
||
* Get channelid used by coc.nvim.
|
||
*/
|
||
channelId: Promise<number>
|
||
|
||
/**
|
||
* Create buffer instance by id.
|
||
*/
|
||
createBuffer(id: number): Buffer
|
||
|
||
/**
|
||
* Create window instance by id.
|
||
*/
|
||
createWindow(id: number): Window
|
||
|
||
/**
|
||
* Create tabpage instance by id.
|
||
*/
|
||
createTabpage(id: number): Tabpage
|
||
|
||
/**
|
||
* Stop send subsequent notifications.
|
||
* This method **must** be paired with `nvim.resumeNotification` in a sync manner.
|
||
*/
|
||
pauseNotification(): void
|
||
|
||
/**
|
||
* Send paused notifications by nvim_call_atomic request
|
||
*
|
||
* @param {boolean} redrawVim Redraw vim on vim8 to update the screen
|
||
*
|
||
* **Note**: avoid call async function between pauseNotification and
|
||
* resumeNotification.
|
||
*/
|
||
resumeNotification(redrawVim?: boolean): Promise<[VimValue[], [string, number, string] | null]>
|
||
|
||
/**
|
||
* Send paused notifications by nvim_call_atomic notification
|
||
*
|
||
* @param {boolean} redrawVim Redraw vim to update the screen
|
||
* @param {true} notify
|
||
* @returns {void}
|
||
*/
|
||
resumeNotification(redrawVim: boolean, notify: true): void
|
||
|
||
/**
|
||
* Send redraw command to vim, does nothing on neovim since it's not necessary on most cases.
|
||
*/
|
||
redrawVim(): void
|
||
|
||
/**
|
||
* Get list of current buffers.
|
||
*/
|
||
buffers: Promise<Buffer[]>
|
||
|
||
/**
|
||
* Get current buffer.
|
||
*/
|
||
buffer: Promise<Buffer>
|
||
|
||
/**
|
||
* Set current buffer
|
||
*/
|
||
setBuffer(buffer: Buffer): Promise<void>
|
||
|
||
/**
|
||
* Get list of current tabpages.
|
||
*/
|
||
tabpages: Promise<Tabpage[]>
|
||
|
||
/**
|
||
* Get current tabpage.
|
||
*/
|
||
tabpage: Promise<Tabpage>
|
||
|
||
/**
|
||
* Set current tabpage
|
||
*/
|
||
setTabpage(tabpage: Tabpage): Promise<void>
|
||
|
||
/**
|
||
* Get list of current windows.
|
||
*/
|
||
windows: Promise<Window[]>
|
||
|
||
/**
|
||
* Get current window.
|
||
*/
|
||
window: Promise<Window>
|
||
|
||
/**
|
||
* Set current window.
|
||
*/
|
||
setWindow(window: Window): Promise<void>
|
||
|
||
/**
|
||
* Get information of all channels,
|
||
* **Note:** works on neovim only.
|
||
*/
|
||
chans: Promise<ChanInfo[]>
|
||
|
||
/**
|
||
* Get information of channel by id,
|
||
* **Note:** works on neovim only.
|
||
*/
|
||
getChanInfo(id: number): Promise<ChanInfo>
|
||
|
||
/**
|
||
* Creates a new namespace, or gets an existing one.
|
||
* `:h nvim_create_namespace()`
|
||
*/
|
||
createNamespace(name?: string): Promise<number>
|
||
|
||
/**
|
||
* Gets existing, non-anonymous namespaces.
|
||
*
|
||
* @return dict that maps from names to namespace ids.
|
||
*/
|
||
namespaces: Promise<{ [name: string]: number }>
|
||
|
||
/**
|
||
* Gets a map of global (non-buffer-local) Ex commands.
|
||
*
|
||
* @return Map of maps describing commands.
|
||
*/
|
||
getCommands(opt?: { builtin: boolean }): Promise<{ [name: string]: VimCommandDescription }>
|
||
|
||
/**
|
||
* Get list of all runtime paths
|
||
*/
|
||
runtimePaths: Promise<string[]>
|
||
|
||
/**
|
||
* Set global working directory.
|
||
* **Note:** works on neovim only.
|
||
*/
|
||
setDirectory(dir: string): Promise<void>
|
||
|
||
/**
|
||
* Get current line.
|
||
*/
|
||
line: Promise<string>
|
||
|
||
/**
|
||
* Creates a new, empty, unnamed buffer.
|
||
*
|
||
* **Note:** works on neovim only.
|
||
*/
|
||
createNewBuffer(listed?: boolean, scratch?: boolean): Promise<Buffer>
|
||
|
||
/**
|
||
* Create float window of neovim.
|
||
*
|
||
* **Note:** works on neovim only, use high level api provided by window
|
||
* module is recommended.
|
||
*/
|
||
openFloatWindow(buffer: Buffer, enter: boolean, options: NvimFloatOptions): Promise<Window>
|
||
|
||
/**
|
||
* Set current line.
|
||
*/
|
||
setLine(line: string): Promise<void>
|
||
|
||
/**
|
||
* Gets a list of global (non-buffer-local) |mapping| definitions.
|
||
* `:h nvim_get_keymap`
|
||
*
|
||
* **Note:** works on neovim only.
|
||
*/
|
||
getKeymap(mode: string): Promise<object[]>
|
||
|
||
/**
|
||
* Gets the current mode. |mode()| "blocking" is true if Nvim is waiting for input.
|
||
*
|
||
* **Note:** blocking would always be false when used with vim.
|
||
*/
|
||
mode: Promise<{ mode: string; blocking: boolean }>
|
||
|
||
/**
|
||
* Returns a map of color names and RGB values.
|
||
*
|
||
* **Note:** works on neovim only.
|
||
*/
|
||
colorMap(): Promise<{ [name: string]: number }>
|
||
|
||
/**
|
||
* Returns the 24-bit RGB value of a |nvim_get_color_map()| color name or
|
||
* "#rrggbb" hexadecimal string.
|
||
*
|
||
* **Note:** works on neovim only.
|
||
*/
|
||
getColorByName(name: string): Promise<number>
|
||
|
||
/**
|
||
* Gets a highlight definition by id. |hlID()|
|
||
*
|
||
* **Note:** works on neovim only.
|
||
*/
|
||
getHighlight(nameOrId: string | number, isRgb?: boolean): Promise<object>
|
||
|
||
/**
|
||
* Get a highlight by name, return rgb by default.
|
||
*
|
||
* **Note:** works on neovim only.
|
||
*/
|
||
getHighlightByName(name: string, isRgb?: boolean): Promise<object>
|
||
|
||
/**
|
||
* Get a highlight by id, return rgb by default.
|
||
*
|
||
* **Note:** works on neovim only.
|
||
*/
|
||
getHighlightById(id: number, isRgb?: boolean): Promise<object>
|
||
|
||
/**
|
||
* Delete current line in buffer.
|
||
*/
|
||
deleteCurrentLine(): Promise<void>
|
||
|
||
/**
|
||
* Evaluates a VimL expression (:help expression). Dictionaries
|
||
* and Lists are recursively expanded. On VimL error: Returns a
|
||
* generic error; v:errmsg is not updated.
|
||
*
|
||
*/
|
||
eval(expr: string): Promise<VimValue>
|
||
|
||
/**
|
||
* Executes lua, it's possible neovim client does not support this
|
||
*
|
||
* **Note:** works on neovim only.
|
||
*/
|
||
lua(code: string, args?: VimValue[]): Promise<object>
|
||
|
||
/**
|
||
* Calls a VimL |Dictionary-function| with the given arguments.
|
||
*/
|
||
callDictFunction(dict: object | string, fname: string, args: VimValue | VimValue[]): Promise<object>
|
||
|
||
/**
|
||
* Call a vim function.
|
||
*
|
||
* @param {string} fname - function name
|
||
* @param {VimValue | VimValue[]} args
|
||
* @returns {Promise<any>}
|
||
*/
|
||
call(fname: string, args?: VimValue | VimValue[]): Promise<any>
|
||
|
||
/**
|
||
* Call a vim function by notification.
|
||
*/
|
||
call(fname: string, args: VimValue | VimValue[], isNotify: true): void
|
||
|
||
/**
|
||
* Call a vim function with timer of timeout 0.
|
||
*
|
||
* @param {string} fname - function name
|
||
* @param {VimValue | VimValue[]} args
|
||
* @returns {Promise<any>}
|
||
*/
|
||
callTimer(fname: string, args?: VimValue | VimValue[]): Promise<void>
|
||
|
||
/**
|
||
* Call a vim function with timer of timeout 0 by notification.
|
||
*/
|
||
callTimer(fname: string, args: VimValue | VimValue[], isNotify: true): void
|
||
|
||
/**
|
||
* Call async vim function that accept callback as argument
|
||
* by using notifications.
|
||
*/
|
||
callAsync(fname: string, args?: VimValue | VimValue[]): Promise<unknown>
|
||
|
||
/**
|
||
* Calls many API methods atomically.
|
||
*/
|
||
callAtomic(calls: [string, VimValue[]][]): Promise<[any[], any[] | null]>
|
||
|
||
/**
|
||
* Executes an ex-command by request.
|
||
*/
|
||
command(arg: string): Promise<void>
|
||
|
||
/**
|
||
* Executes an ex-command by notification.
|
||
*/
|
||
command(arg: string, isNotify: true): void
|
||
|
||
/**
|
||
* Runs a command and returns output.
|
||
*
|
||
* @deprecated Use exec() instead.
|
||
*/
|
||
commandOutput(arg: string): Promise<string>
|
||
|
||
/**
|
||
* Executes Vimscript (multiline block of Ex-commands), like
|
||
* anonymous |:source|
|
||
*/
|
||
exec(src: string, output?: boolean): Promise<string>
|
||
|
||
/**
|
||
* Gets a v: variable.
|
||
*/
|
||
getVvar(name: string): Promise<VimValue>
|
||
|
||
/**
|
||
* `:h nvim_feedkeys`
|
||
*/
|
||
feedKeys(keys: string, mode: string, escapeCsi: boolean): Promise<void>
|
||
|
||
/**
|
||
* Queues raw user-input. Unlike |nvim_feedkeys()|, this uses a
|
||
* low-level input buffer and the call is non-blocking (input is
|
||
* processed asynchronously by the eventloop).
|
||
*
|
||
* On execution error: does not fail, but updates v:errmsg.
|
||
*
|
||
* **Note:** works on neovim only.
|
||
*/
|
||
input(keys: string): Promise<number>
|
||
|
||
/**
|
||
* Parse a VimL Expression.
|
||
*/
|
||
parseExpression(expr: string, flags: string, highlight: boolean): Promise<object>
|
||
|
||
/**
|
||
* Get process info, neovim only.
|
||
*
|
||
* **Note:** works on neovim only.
|
||
*/
|
||
getProc(pid: number): Promise<NvimProc>
|
||
|
||
/**
|
||
* Gets the immediate children of process `pid`.
|
||
*
|
||
* **Note:** works on neovim only.
|
||
*/
|
||
getProcChildren(pid: number): Promise<NvimProc[]>
|
||
|
||
/**
|
||
* Replaces terminal codes and |keycodes| (<CR>, <Esc>, ...)
|
||
* in a string with the internal representation.
|
||
*
|
||
* **Note:** works on neovim only.
|
||
*/
|
||
replaceTermcodes(str: string, fromPart: boolean, doIt: boolean, special: boolean): Promise<string>
|
||
|
||
/**
|
||
* Gets width(display cells) of string.
|
||
*/
|
||
strWidth(str: string): Promise<number>
|
||
|
||
/**
|
||
* Gets a list of dictionaries representing attached UIs.
|
||
*
|
||
* **Note:** works on neovim only.
|
||
*/
|
||
uis: Promise<any[]>
|
||
|
||
/**
|
||
* Subscribe to nvim event broadcasts.
|
||
*
|
||
* **Note:** works on neovim only.
|
||
*/
|
||
subscribe(event: string): Promise<void>
|
||
|
||
/**
|
||
* Unsubscribe to nvim event broadcasts
|
||
*
|
||
* **Note:** works on neovim only.
|
||
*/
|
||
unsubscribe(event: string): Promise<void>
|
||
|
||
/**
|
||
* Activates UI events on the channel.
|
||
*
|
||
* **Note:** works on neovim only.
|
||
*/
|
||
uiAttach(width: number, height: number, options: UiAttachOptions): Promise<void>
|
||
|
||
/**
|
||
* `:h nvim_ui_try_resize`
|
||
*
|
||
* **Note:** works on neovim only.
|
||
*/
|
||
uiTryResize(width: number, height: number): Promise<void>
|
||
|
||
/**
|
||
* Deactivates UI events on the channel.
|
||
*
|
||
* **Note:** works on neovim only.
|
||
*/
|
||
uiDetach(): Promise<void>
|
||
|
||
/**
|
||
* Quit vim.
|
||
*/
|
||
quit(): Promise<void>
|
||
}
|
||
|
||
export interface Buffer extends BaseApi<Buffer> {
|
||
id: number
|
||
|
||
/** Total number of lines in buffer */
|
||
length: Promise<number>
|
||
|
||
/**
|
||
* Get lines of buffer.
|
||
*/
|
||
lines: Promise<string[]>
|
||
|
||
/**
|
||
* Get changedtick of buffer.
|
||
*/
|
||
changedtick: Promise<number>
|
||
|
||
/**
|
||
* Add buffer keymap by notification.
|
||
*/
|
||
setKeymap(mode: string, lhs: string, rhs: string, opts?: BufferKeymapOption): void
|
||
|
||
/**
|
||
* Removes an ext mark by notification.
|
||
*
|
||
* @public
|
||
* @param {number} ns_id - Namespace id
|
||
* @param {number} id - Extmark id
|
||
*/
|
||
deleteExtMark(ns_id: number, id: number): void
|
||
|
||
/**
|
||
* Gets the position (0-indexed) of an extmark.
|
||
*
|
||
* @param {number} ns_id - Namespace id
|
||
* @param {number} id - Extmark id
|
||
* @param {Object} opts - Optional parameters.
|
||
* @returns {Promise<[] | [number, number] | [number, number, ExtmarkDetails]>}
|
||
*/
|
||
getExtMarkById(ns_id: number, id: number, opts?: {
|
||
details?: boolean
|
||
}): Promise<[] | [number, number] | [number, number, ExtmarkDetails]>
|
||
|
||
/**
|
||
* Gets extmarks in "traversal order" from a |charwise| region defined by
|
||
* buffer positions (inclusive, 0-indexed |api-indexing|).
|
||
*
|
||
* Region can be given as (row,col) tuples, or valid extmark ids (whose
|
||
* positions define the bounds). 0 and -1 are understood as (0,0) and (-1,-1)
|
||
* respectively, thus the following are equivalent:
|
||
*
|
||
* nvim_buf_get_extmarks(0, my_ns, 0, -1, {})
|
||
* nvim_buf_get_extmarks(0, my_ns, [0,0], [-1,-1], {})
|
||
*
|
||
* @param {number} ns_id - Namespace id
|
||
* @param {[number, number] | number} start
|
||
* @param {[number, number] | number} end
|
||
* @param {Object} opts
|
||
* @returns {Promise<[number, number, number, ExtmarkDetails?][]>}
|
||
*/
|
||
getExtMarks(ns_id: number, start: [number, number] | number, end: [number, number] | number, opts?: {
|
||
details?: boolean
|
||
limit?: number
|
||
}): Promise<[number, number, number, ExtmarkDetails?][]>
|
||
|
||
/**
|
||
* Creates or updates an extmark by notification, `:h nvim_buf_set_extmark`.
|
||
*
|
||
* @param {number} ns_id
|
||
* @param {number} line
|
||
* @param {number} col
|
||
* @param {ExtmarkOptions} opts
|
||
* @returns {void}
|
||
*/
|
||
setExtMark(ns_id: number, line: number, col: number, opts?: ExtmarkOptions): void
|
||
|
||
/**
|
||
* Add sign to buffer by notification.
|
||
*
|
||
* @param {SignPlaceOption} sign
|
||
*/
|
||
placeSign(sign: SignPlaceOption): void
|
||
|
||
/**
|
||
* Unplace signs by notification
|
||
*/
|
||
unplaceSign(opts: SignUnplaceOption): void
|
||
|
||
/**
|
||
* Get signs by group name or id and lnum.
|
||
*
|
||
* @param {SignPlacedOption} opts
|
||
*/
|
||
getSigns(opts: SignPlacedOption): Promise<SignItem[]>
|
||
|
||
/**
|
||
* Get highlight items by namespace (end inclusive).
|
||
*
|
||
* @param {string} ns Namespace key or id.
|
||
* @param {number} start 0 based line number, default to 0.
|
||
* @param {number} end 0 based line number, default to -1.
|
||
*/
|
||
getHighlights(ns: string, start?: number, end?: number): Promise<HighlightItem[]>
|
||
|
||
/**
|
||
* Update namespaced highlights in range by notification.
|
||
* Priority default to 0 on vim and 4096 on neovim.
|
||
* Note: timer used for whole buffer highlights for better performance.
|
||
*
|
||
* @param {string} ns Namespace key.
|
||
* @param {HighlightItem[]} highlights Highlight items.
|
||
* @param {HighlightOption} opts Highlight options.
|
||
*/
|
||
updateHighlights(ns: string, highlights: ExtendedHighlightItem[], opts?: HighlightOption): void
|
||
|
||
/**
|
||
* Gets a map of buffer-local |user-commands|.
|
||
*
|
||
* **Note:** works on neovim only.
|
||
*/
|
||
getCommands(options?: {}): Promise<Object>
|
||
|
||
/**
|
||
* Get lines of buffer, get all lines by default.
|
||
*/
|
||
getLines(opts?: { start: number, end: number, strictIndexing?: boolean }): Promise<string[]>
|
||
|
||
/**
|
||
* Set lines of buffer given indices use request.
|
||
*/
|
||
setLines(lines: string[], opts?: { start: number, end: number, strictIndexing?: boolean }): Promise<void>
|
||
|
||
/**
|
||
* Set lines of buffer given indices use notification.
|
||
*/
|
||
setLines(lines: string[], opts: { start: number, end: number, strictIndexing?: boolean }, isNotify: true): void
|
||
|
||
/**
|
||
* Set virtual text for a line
|
||
*
|
||
* @public
|
||
* @deprecated Use `setExtMark()` instead.
|
||
* @param {number} src_id - Source group to use or 0 to use a new group, or -1
|
||
* @param {number} line - Line to annotate with virtual text (zero-indexed)
|
||
* @param {Chunk[]} chunks - List with [text, hl_group]
|
||
* @param {[index} opts
|
||
* @returns {Promise<number>}
|
||
*/
|
||
setVirtualText(src_id: number, line: number, chunks: [string, string][], opts?: { [index: string]: any }): Promise<number>
|
||
|
||
/**
|
||
* Append a string or list of lines to end of buffer
|
||
*/
|
||
append(lines: string[] | string): Promise<void>
|
||
|
||
/**
|
||
* Get buffer name.
|
||
*/
|
||
name: Promise<string>
|
||
|
||
/**
|
||
* Set buffer name.
|
||
*/
|
||
setName(name: string): Promise<void>
|
||
|
||
/**
|
||
* Check if buffer valid.
|
||
*/
|
||
valid: Promise<boolean>
|
||
|
||
/**
|
||
* Get mark position given mark name
|
||
*
|
||
* **Note:** works on neovim only.
|
||
*/
|
||
mark(name: string): Promise<[number, number]>
|
||
|
||
/**
|
||
* Gets a list of buffer-local |mapping| definitions.
|
||
*
|
||
* @return Array of maparg()-like dictionaries describing mappings.
|
||
* The "buffer" key holds the associated buffer handle.
|
||
*/
|
||
getKeymap(mode: string): Promise<object[]>
|
||
|
||
/**
|
||
* Check if buffer loaded.
|
||
*/
|
||
loaded: Promise<boolean>
|
||
|
||
/**
|
||
* Returns the byte offset for a line.
|
||
*
|
||
* Line 1 (index=0) has offset 0. UTF-8 bytes are counted. EOL is
|
||
* one byte. 'fileformat' and 'fileencoding' are ignored. The
|
||
* line index just after the last line gives the total byte-count
|
||
* of the buffer. A final EOL byte is counted if it would be
|
||
* written, see 'eol'.
|
||
*
|
||
* Unlike |line2byte()|, throws error for out-of-bounds indexing.
|
||
* Returns -1 for unloaded buffer.
|
||
*
|
||
* @return {Number} Integer byte offset, or -1 for unloaded buffer.
|
||
*/
|
||
getOffset(index: number): Promise<number>
|
||
|
||
/**
|
||
* Adds a highlight to buffer, checkout |nvim_buf_add_highlight|.
|
||
*
|
||
* Note: when `srcId = 0`, request is made for new `srcId`, otherwire, use notification.
|
||
* Note: `hlGroup` as empty string is not supported.
|
||
*
|
||
* @deprecated use `highlightRanges()` instead.
|
||
*/
|
||
addHighlight(opts: BufferHighlight): Promise<number | null>
|
||
|
||
/**
|
||
* Clear highlights of specified lins.
|
||
*
|
||
* @deprecated use clearNamespace() instead.
|
||
*/
|
||
clearHighlight(args?: BufferClearHighlight)
|
||
|
||
/**
|
||
* Add highlight to ranges by notification, works on both vim & neovim.
|
||
*
|
||
* Works on neovim and `workspace.isVim && workspace.env.textprop` is true
|
||
*
|
||
* @param {string | number} srcId Unique key or namespace number.
|
||
* @param {string} hlGroup Highlight group.
|
||
* @param {Range[]} ranges List of highlight ranges
|
||
*/
|
||
highlightRanges(srcId: string | number, hlGroup: string, ranges: Range[]): void
|
||
|
||
/**
|
||
* Clear namespace by id or name by notification, works on both vim & neovim.
|
||
*
|
||
* Works on neovim and `workspace.isVim && workspace.env.textprop` is true
|
||
*
|
||
* @param key Unique key or namespace number, use -1 for all namespaces
|
||
* @param lineStart Start of line, 0 based, default to 0.
|
||
* @param lineEnd End of line, 0 based, default to -1.
|
||
*/
|
||
clearNamespace(key: number | string, lineStart?: number, lineEnd?: number)
|
||
}
|
||
|
||
export interface Window extends BaseApi<Window> {
|
||
/**
|
||
* The windowid that not change within a Vim session
|
||
*/
|
||
id: number
|
||
|
||
/**
|
||
* Buffer in window.
|
||
*/
|
||
buffer: Promise<Buffer>
|
||
|
||
/**
|
||
* Tabpage contains window.
|
||
*/
|
||
tabpage: Promise<Tabpage>
|
||
|
||
/**
|
||
* Cursor position as [line, col], 1 based.
|
||
*/
|
||
cursor: Promise<[number, number]>
|
||
|
||
/**
|
||
* Window height.
|
||
*/
|
||
height: Promise<number>
|
||
|
||
/**
|
||
* Window width.
|
||
*/
|
||
width: Promise<number>
|
||
|
||
/**
|
||
* Set cursor position by request.
|
||
*/
|
||
setCursor(pos: [number, number]): Promise<void>
|
||
|
||
/**
|
||
* Set cursor position by notification.
|
||
*/
|
||
setCursor(pos: [number, number], isNotify: true): void
|
||
|
||
/**
|
||
* Set height
|
||
*/
|
||
setHeight(height: number): Promise<void>
|
||
|
||
/**
|
||
* Set height by notification.
|
||
*/
|
||
setHeight(height: number, isNotify: true): void
|
||
|
||
/**
|
||
* Set width.
|
||
*/
|
||
setWidth(width: number): Promise<void>
|
||
|
||
/**
|
||
* Set width by notification.
|
||
*/
|
||
setWidth(width: number, isNotify: true): void
|
||
|
||
/**
|
||
* Get window position, not work with vim8's popup.
|
||
*/
|
||
position: Promise<[number, number]>
|
||
|
||
/** 0-indexed, on-screen window position(row) in display cells. */
|
||
row: Promise<number>
|
||
|
||
/** 0-indexed, on-screen window position(col) in display cells. */
|
||
col: Promise<number>
|
||
|
||
/**
|
||
* Check if window valid.
|
||
*/
|
||
valid: Promise<boolean>
|
||
|
||
/**
|
||
* Get window number, throws for invalid window.
|
||
*/
|
||
number: Promise<number>
|
||
|
||
/**
|
||
* Config float window with options.
|
||
*
|
||
* **Note:** works on neovim only.
|
||
*/
|
||
setConfig(options: NvimFloatOptions): Promise<void>
|
||
|
||
/**
|
||
* Config float window with options by send notification.
|
||
*
|
||
* **Note:** works on neovim only.
|
||
*/
|
||
setConfig(options: NvimFloatOptions, isNotify: true): void
|
||
|
||
/**
|
||
* Gets window configuration.
|
||
*
|
||
* **Note:** works on neovim only.
|
||
*
|
||
* @returns Map defining the window configuration, see |nvim_open_win()|
|
||
*/
|
||
getConfig(): Promise<NvimFloatOptions>
|
||
|
||
/**
|
||
* Close window by send request.
|
||
*/
|
||
close(force: boolean): Promise<void>
|
||
|
||
/**
|
||
* Close window by send notification.
|
||
*/
|
||
close(force: boolean, isNotify: true): void
|
||
|
||
/**
|
||
* Add highlight to ranges by request (matchaddpos is used)
|
||
*
|
||
* @return {Promise<number[]>} match ids.
|
||
*/
|
||
highlightRanges(hlGroup: string, ranges: Range[], priority?: number): Promise<number[]>
|
||
|
||
/**
|
||
* Add highlight to ranges by notification (matchaddpos is used)
|
||
*/
|
||
highlightRanges(hlGroup: string, ranges: Range[], priority: number, isNotify: true): void
|
||
|
||
/**
|
||
* Clear match of highlight group by send notification.
|
||
*/
|
||
clearMatchGroup(hlGroup: string): void
|
||
|
||
/**
|
||
* Clear match of match ids by send notification.
|
||
*/
|
||
clearMatches(ids: number[]): void
|
||
}
|
||
|
||
export interface Tabpage extends BaseApi<Tabpage> {
|
||
/**
|
||
* tabpage number.
|
||
*/
|
||
number: Promise<number>
|
||
|
||
/**
|
||
* Is current tabpage valid.
|
||
*/
|
||
valid: Promise<boolean>
|
||
|
||
/**
|
||
* Returns all windows of tabpage.
|
||
*/
|
||
windows: Promise<Window[]>
|
||
|
||
/**
|
||
* Current window of tabpage.
|
||
*/
|
||
window: Promise<Window>
|
||
}
|
||
// }}
|
||
|
||
// vscode-uri {{
|
||
export interface UriComponents {
|
||
scheme: string
|
||
authority: string
|
||
path: string
|
||
query: string
|
||
fragment: string
|
||
}
|
||
/**
|
||
* Uniform Resource Identifier (URI) http://tools.ietf.org/html/rfc3986.
|
||
* This class is a simple parser which creates the basic component parts
|
||
* (http://tools.ietf.org/html/rfc3986#section-3) with minimal validation
|
||
* and encoding.
|
||
*
|
||
* ```txt
|
||
* foo://example.com:8042/over/there?name=ferret#nose
|
||
* \_/ \______________/\_________/ \_________/ \__/
|
||
* | | | | |
|
||
* scheme authority path query fragment
|
||
* | _____________________|__
|
||
* / \ / \
|
||
* urn:example:animal:ferret:nose
|
||
* ```
|
||
*/
|
||
export class Uri implements UriComponents {
|
||
static isUri(thing: any): thing is Uri
|
||
/**
|
||
* scheme is the 'http' part of 'http://www.msft.com/some/path?query#fragment'.
|
||
* The part before the first colon.
|
||
*/
|
||
readonly scheme: string
|
||
/**
|
||
* authority is the 'www.msft.com' part of 'http://www.msft.com/some/path?query#fragment'.
|
||
* The part between the first double slashes and the next slash.
|
||
*/
|
||
readonly authority: string
|
||
/**
|
||
* path is the '/some/path' part of 'http://www.msft.com/some/path?query#fragment'.
|
||
*/
|
||
readonly path: string
|
||
/**
|
||
* query is the 'query' part of 'http://www.msft.com/some/path?query#fragment'.
|
||
*/
|
||
readonly query: string
|
||
/**
|
||
* fragment is the 'fragment' part of 'http://www.msft.com/some/path?query#fragment'.
|
||
*/
|
||
readonly fragment: string
|
||
/**
|
||
* @internal
|
||
*/
|
||
protected constructor(scheme: string, authority?: string, path?: string, query?: string, fragment?: string, _strict?: boolean)
|
||
/**
|
||
* @internal
|
||
*/
|
||
protected constructor(components: UriComponents)
|
||
/**
|
||
* Returns a string representing the corresponding file system path of this URI.
|
||
* Will handle UNC paths, normalizes windows drive letters to lower-case, and uses the
|
||
* platform specific path separator.
|
||
*
|
||
* * Will *not* validate the path for invalid characters and semantics.
|
||
* * Will *not* look at the scheme of this URI.
|
||
* * The result shall *not* be used for display purposes but for accessing a file on disk.
|
||
*
|
||
*
|
||
* The *difference* to `URI#path` is the use of the platform specific separator and the handling
|
||
* of UNC paths. See the below sample of a file-uri with an authority (UNC path).
|
||
*
|
||
* ```ts
|
||
const u = URI.parse('file://server/c$/folder/file.txt')
|
||
u.authority === 'server'
|
||
u.path === '/shares/c$/file.txt'
|
||
u.fsPath === '\\server\c$\folder\file.txt'
|
||
```
|
||
*
|
||
* Using `URI#path` to read a file (using fs-apis) would not be enough because parts of the path,
|
||
* namely the server name, would be missing. Therefore `URI#fsPath` exists - it's sugar to ease working
|
||
* with URIs that represent files on disk (`file` scheme).
|
||
*/
|
||
readonly fsPath: string
|
||
with(change: {
|
||
scheme?: string
|
||
authority?: string | null
|
||
path?: string | null
|
||
query?: string | null
|
||
fragment?: string | null
|
||
}): Uri
|
||
/**
|
||
* Creates a new URI from a string, e.g. `http://www.msft.com/some/path`,
|
||
* `file:///usr/home`, or `scheme:with/path`.
|
||
*
|
||
* @param value A string which represents an URI (see `URI#toString`).
|
||
*/
|
||
static parse(value: string, _strict?: boolean): Uri
|
||
/**
|
||
* Creates a new URI from a file system path, e.g. `c:\my\files`,
|
||
* `/usr/home`, or `\\server\share\some\path`.
|
||
*
|
||
* The *difference* between `URI#parse` and `URI#file` is that the latter treats the argument
|
||
* as path, not as stringified-uri. E.g. `URI.file(path)` is **not the same as**
|
||
* `URI.parse('file://' + path)` because the path might contain characters that are
|
||
* interpreted (# and ?). See the following sample:
|
||
* ```ts
|
||
const good = URI.file('/coding/c#/project1');
|
||
good.scheme === 'file';
|
||
good.path === '/coding/c#/project1';
|
||
good.fragment === '';
|
||
const bad = URI.parse('file://' + '/coding/c#/project1');
|
||
bad.scheme === 'file';
|
||
bad.path === '/coding/c'; // path is now broken
|
||
bad.fragment === '/project1';
|
||
```
|
||
*
|
||
* @param path A file system path (see `URI#fsPath`)
|
||
*/
|
||
static file(path: string): Uri
|
||
static from(components: {
|
||
scheme: string
|
||
authority?: string
|
||
path?: string
|
||
query?: string
|
||
fragment?: string
|
||
}): Uri
|
||
/**
|
||
* Creates a string representation for this URI. It's guaranteed that calling
|
||
* `URI.parse` with the result of this function creates an URI which is equal
|
||
* to this URI.
|
||
*
|
||
* * The result shall *not* be used for display purposes but for externalization or transport.
|
||
* * The result will be encoded using the percentage encoding and encoding happens mostly
|
||
* ignore the scheme-specific encoding rules.
|
||
*
|
||
* @param skipEncoding Do not encode the result, default is `false`
|
||
*/
|
||
toString(skipEncoding?: boolean): string
|
||
toJSON(): UriComponents
|
||
}
|
||
// }}
|
||
|
||
// vim interfaces {{
|
||
/**
|
||
* See `:h complete-items`
|
||
*/
|
||
export interface VimCompleteItem {
|
||
word: string
|
||
abbr?: string
|
||
menu?: string
|
||
info?: string
|
||
kind?: string
|
||
icase?: number
|
||
equal?: number
|
||
dup?: number
|
||
empty?: number
|
||
user_data?: string
|
||
}
|
||
|
||
export interface LocationListItem {
|
||
bufnr: number
|
||
lnum: number
|
||
end_lnum: number
|
||
col: number
|
||
end_col: number
|
||
text: string
|
||
type: string
|
||
}
|
||
|
||
export interface QuickfixItem {
|
||
uri?: string
|
||
module?: string
|
||
range?: Range
|
||
text?: string
|
||
type?: string
|
||
filename?: string
|
||
bufnr?: number
|
||
lnum?: number
|
||
end_lnum?: number
|
||
col?: number
|
||
end_col?: number
|
||
valid?: boolean
|
||
nr?: number
|
||
}
|
||
// }}
|
||
|
||
// provider interfaces {{
|
||
/**
|
||
* A provider result represents the values a provider, like the [`HoverProvider`](#HoverProvider),
|
||
* may return. For once this is the actual result type `T`, like `Hover`, or a thenable that resolves
|
||
* to that type `T`. In addition, `null` and `undefined` can be returned - either directly or from a
|
||
* thenable.
|
||
*
|
||
* The snippets below are all valid implementations of the [`HoverProvider`](#HoverProvider):
|
||
*
|
||
* ```ts
|
||
* let a: HoverProvider = {
|
||
* provideHover(doc, pos, token): ProviderResult<Hover> {
|
||
* return new Hover('Hello World')
|
||
* }
|
||
* }
|
||
*
|
||
* let b: HoverProvider = {
|
||
* provideHover(doc, pos, token): ProviderResult<Hover> {
|
||
* return new Promise(resolve => {
|
||
* resolve(new Hover('Hello World'))
|
||
* })
|
||
* }
|
||
* }
|
||
*
|
||
* let c: HoverProvider = {
|
||
* provideHover(doc, pos, token): ProviderResult<Hover> {
|
||
* return; // undefined
|
||
* }
|
||
* }
|
||
* ```
|
||
*/
|
||
export type ProviderResult<T> =
|
||
| T
|
||
| undefined
|
||
| null
|
||
| Thenable<T | undefined | null>
|
||
|
||
/**
|
||
* Supported provider names.
|
||
*/
|
||
export type ProviderName = 'rename' | 'onTypeEdit' | 'documentLink' | 'documentColor'
|
||
| 'foldingRange' | 'format' | 'codeAction' | 'workspaceSymbols' | 'formatRange' | 'formatOnType'
|
||
| 'hover' | 'signature' | 'documentSymbol' | 'documentHighlight' | 'definition'
|
||
| 'declaration' | 'typeDefinition' | 'reference' | 'implementation'
|
||
| 'codeLens' | 'selectionRange' | 'callHierarchy' | 'semanticTokens' | 'linkedEditing'
|
||
|
||
/**
|
||
* The completion item provider interface defines the contract between extensions and
|
||
* [IntelliSense](https://code.visualstudio.com/docs/editor/intellisense).
|
||
*
|
||
* Providers can delay the computation of the [`detail`](#CompletionItem.detail)
|
||
* and [`documentation`](#CompletionItem.documentation) properties by implementing the
|
||
* [`resolveCompletionItem`](#CompletionItemProvider.resolveCompletionItem)-function. However, properties that
|
||
* are needed for the initial sorting and filtering, like `sortText`, `filterText`, `insertText`, and `range`, must
|
||
* not be changed during resolve.
|
||
*
|
||
* Providers are asked for completions either explicitly by a user gesture or -depending on the configuration-
|
||
* implicitly when typing words or trigger characters.
|
||
*/
|
||
export interface CompletionItemProvider {
|
||
/**
|
||
* Provide completion items for the given position and document.
|
||
*
|
||
* @param document The document in which the command was invoked.
|
||
* @param position The position at which the command was invoked.
|
||
* @param token A cancellation token.
|
||
* @param context How the completion was triggered.
|
||
*
|
||
* @return An array of completions, a [completion list](#CompletionList), or a thenable that resolves to either.
|
||
* The lack of a result can be signaled by returning `undefined`, `null`, or an empty array.
|
||
*/
|
||
provideCompletionItems(
|
||
document: LinesTextDocument,
|
||
position: Position,
|
||
token: CancellationToken,
|
||
context?: CompletionContext
|
||
): ProviderResult<CompletionItem[] | CompletionList>
|
||
|
||
/**
|
||
* Given a completion item fill in more data, like [doc-comment](#CompletionItem.documentation)
|
||
* or [details](#CompletionItem.detail).
|
||
*
|
||
* The editor will only resolve a completion item once.
|
||
*
|
||
* @param item A completion item currently active in the UI.
|
||
* @param token A cancellation token.
|
||
* @return The resolved completion item or a thenable that resolves to of such. It is OK to return the given
|
||
* `item`. When no result is returned, the given `item` will be used.
|
||
*/
|
||
resolveCompletionItem?(
|
||
item: CompletionItem,
|
||
token: CancellationToken
|
||
): ProviderResult<CompletionItem>
|
||
}
|
||
|
||
/**
|
||
* The hover provider interface defines the contract between extensions and
|
||
* the [hover](https://code.visualstudio.com/docs/editor/intellisense)-feature.
|
||
*/
|
||
export interface HoverProvider {
|
||
/**
|
||
* Provide a hover for the given position and document. Multiple hovers at the same
|
||
* position will be merged by the editor. A hover can have a range which defaults
|
||
* to the word range at the position when omitted.
|
||
*
|
||
* @param document The document in which the command was invoked.
|
||
* @param position The position at which the command was invoked.
|
||
* @param token A cancellation token.
|
||
* @return A hover or a thenable that resolves to such. The lack of a result can be
|
||
* signaled by returning `undefined` or `null`.
|
||
*/
|
||
provideHover(
|
||
document: LinesTextDocument,
|
||
position: Position,
|
||
token: CancellationToken
|
||
): ProviderResult<Hover>
|
||
}
|
||
|
||
/**
|
||
* The definition provider interface defines the contract between extensions and
|
||
* the [go to definition](https://code.visualstudio.com/docs/editor/editingevolved#_go-to-definition)
|
||
* and peek definition features.
|
||
*/
|
||
export interface DefinitionProvider {
|
||
/**
|
||
* Provide the definition of the symbol at the given position and document.
|
||
*
|
||
* @param document The document in which the command was invoked.
|
||
* @param position The position at which the command was invoked.
|
||
* @param token A cancellation token.
|
||
* @return A definition or a thenable that resolves to such. The lack of a result can be
|
||
* signaled by returning `undefined` or `null`.
|
||
*/
|
||
provideDefinition(
|
||
document: LinesTextDocument,
|
||
position: Position,
|
||
token: CancellationToken
|
||
): ProviderResult<Definition | DefinitionLink[]>
|
||
}
|
||
|
||
/**
|
||
* The definition provider interface defines the contract between extensions and
|
||
* the [go to definition](https://code.visualstudio.com/docs/editor/editingevolved#_go-to-definition)
|
||
* and peek definition features.
|
||
*/
|
||
export interface DeclarationProvider {
|
||
/**
|
||
* Provide the declaration of the symbol at the given position and document.
|
||
*/
|
||
provideDeclaration(
|
||
document: LinesTextDocument,
|
||
position: Position,
|
||
token: CancellationToken
|
||
): ProviderResult<Definition | DefinitionLink[]>
|
||
}
|
||
|
||
/**
|
||
* The signature help provider interface defines the contract between extensions and
|
||
* the [parameter hints](https://code.visualstudio.com/docs/editor/intellisense)-feature.
|
||
*/
|
||
export interface SignatureHelpProvider {
|
||
/**
|
||
* Provide help for the signature at the given position and document.
|
||
*
|
||
* @param document The document in which the command was invoked.
|
||
* @param position The position at which the command was invoked.
|
||
* @param token A cancellation token.
|
||
* @return Signature help or a thenable that resolves to such. The lack of a result can be
|
||
* signaled by returning `undefined` or `null`.
|
||
*/
|
||
provideSignatureHelp(
|
||
document: LinesTextDocument,
|
||
position: Position,
|
||
token: CancellationToken,
|
||
context: SignatureHelpContext
|
||
): ProviderResult<SignatureHelp>
|
||
}
|
||
|
||
/**
|
||
* The type definition provider defines the contract between extensions and
|
||
* the go to type definition feature.
|
||
*/
|
||
export interface TypeDefinitionProvider {
|
||
/**
|
||
* Provide the type definition of the symbol at the given position and document.
|
||
*
|
||
* @param document The document in which the command was invoked.
|
||
* @param position The position at which the command was invoked.
|
||
* @param token A cancellation token.
|
||
* @return A definition or a thenable that resolves to such. The lack of a result can be
|
||
* signaled by returning `undefined` or `null`.
|
||
*/
|
||
provideTypeDefinition(
|
||
document: LinesTextDocument,
|
||
position: Position,
|
||
token: CancellationToken
|
||
): ProviderResult<Definition | DefinitionLink[]>
|
||
}
|
||
|
||
/**
|
||
* Value-object that contains additional information when
|
||
* requesting references.
|
||
*/
|
||
export interface ReferenceContext {
|
||
/**
|
||
* Include the declaration of the current symbol.
|
||
*/
|
||
includeDeclaration: boolean
|
||
}
|
||
|
||
/**
|
||
* The reference provider interface defines the contract between extensions and
|
||
* the [find references](https://code.visualstudio.com/docs/editor/editingevolved#_peek)-feature.
|
||
*/
|
||
export interface ReferenceProvider {
|
||
/**
|
||
* Provide a set of project-wide references for the given position and document.
|
||
*
|
||
* @param document The document in which the command was invoked.
|
||
* @param position The position at which the command was invoked.
|
||
* @param context
|
||
* @param token A cancellation token.
|
||
* @return An array of locations or a thenable that resolves to such. The lack of a result can be
|
||
* signaled by returning `undefined`, `null`, or an empty array.
|
||
*/
|
||
provideReferences(
|
||
document: LinesTextDocument,
|
||
position: Position,
|
||
context: ReferenceContext,
|
||
token: CancellationToken
|
||
): ProviderResult<Location[]>
|
||
}
|
||
|
||
/**
|
||
* Folding context (for future use)
|
||
*/
|
||
export interface FoldingContext {}
|
||
|
||
/**
|
||
* The folding range provider interface defines the contract between extensions and
|
||
* [Folding](https://code.visualstudio.com/docs/editor/codebasics#_folding) in the editor.
|
||
*/
|
||
export interface FoldingRangeProvider {
|
||
/**
|
||
* Returns a list of folding ranges or null and undefined if the provider
|
||
* does not want to participate or was cancelled.
|
||
*
|
||
* @param document The document in which the command was invoked.
|
||
* @param context Additional context information (for future use)
|
||
* @param token A cancellation token.
|
||
*/
|
||
provideFoldingRanges(
|
||
document: LinesTextDocument,
|
||
context: FoldingContext,
|
||
token: CancellationToken
|
||
): ProviderResult<FoldingRange[]>
|
||
}
|
||
|
||
/**
|
||
* The document symbol provider interface defines the contract between extensions and
|
||
* the [go to symbol](https://code.visualstudio.com/docs/editor/editingevolved#_go-to-symbol)-feature.
|
||
*/
|
||
export interface DocumentSymbolProvider {
|
||
/**
|
||
* Provide symbol information for the given document.
|
||
*
|
||
* @param document The document in which the command was invoked.
|
||
* @param token A cancellation token.
|
||
* @return An array of document highlights or a thenable that resolves to such. The lack of a result can be
|
||
* signaled by returning `undefined`, `null`, or an empty array.
|
||
*/
|
||
provideDocumentSymbols(
|
||
document: LinesTextDocument,
|
||
token: CancellationToken
|
||
): ProviderResult<SymbolInformation[] | DocumentSymbol[]>
|
||
}
|
||
|
||
/**
|
||
* The implementation provider interface defines the contract between extensions and
|
||
* the go to implementation feature.
|
||
*/
|
||
export interface ImplementationProvider {
|
||
/**
|
||
* Provide the implementations of the symbol at the given position and document.
|
||
*
|
||
* @param document The document in which the command was invoked.
|
||
* @param position The position at which the command was invoked.
|
||
* @param token A cancellation token.
|
||
* @return A definition or a thenable that resolves to such. The lack of a result can be
|
||
* signaled by returning `undefined` or `null`.
|
||
*/
|
||
provideImplementation(
|
||
document: LinesTextDocument,
|
||
position: Position,
|
||
token: CancellationToken
|
||
): ProviderResult<Definition | DefinitionLink[]>
|
||
}
|
||
|
||
/**
|
||
* The workspace symbol provider interface defines the contract between extensions and
|
||
* the [symbol search](https://code.visualstudio.com/docs/editor/editingevolved#_open-symbol-by-name)-feature.
|
||
*/
|
||
export interface WorkspaceSymbolProvider {
|
||
/**
|
||
* Project-wide search for a symbol matching the given query string. It is up to the provider
|
||
* how to search given the query string, like substring, indexOf etc. To improve performance implementors can
|
||
* skip the [location](#SymbolInformation.location) of symbols and implement `resolveWorkspaceSymbol` to do that
|
||
* later.
|
||
*
|
||
* The `query`-parameter should be interpreted in a *relaxed way* as the editor will apply its own highlighting
|
||
* and scoring on the results. A good rule of thumb is to match case-insensitive and to simply check that the
|
||
* characters of *query* appear in their order in a candidate symbol. Don't use prefix, substring, or similar
|
||
* strict matching.
|
||
*
|
||
* @param query A non-empty query string.
|
||
* @param token A cancellation token.
|
||
* @return An array of document highlights or a thenable that resolves to such. The lack of a result can be
|
||
* signaled by returning `undefined`, `null`, or an empty array.
|
||
*/
|
||
provideWorkspaceSymbols(
|
||
query: string,
|
||
token: CancellationToken
|
||
): ProviderResult<SymbolInformation[]>
|
||
|
||
/**
|
||
* Given a symbol fill in its [location](#SymbolInformation.location). This method is called whenever a symbol
|
||
* is selected in the UI. Providers can implement this method and return incomplete symbols from
|
||
* [`provideWorkspaceSymbols`](#WorkspaceSymbolProvider.provideWorkspaceSymbols) which often helps to improve
|
||
* performance.
|
||
*
|
||
* @param symbol The symbol that is to be resolved. Guaranteed to be an instance of an object returned from an
|
||
* earlier call to `provideWorkspaceSymbols`.
|
||
* @param token A cancellation token.
|
||
* @return The resolved symbol or a thenable that resolves to that. When no result is returned,
|
||
* the given `symbol` is used.
|
||
*/
|
||
resolveWorkspaceSymbol?(
|
||
symbol: SymbolInformation,
|
||
token: CancellationToken
|
||
): ProviderResult<SymbolInformation>
|
||
}
|
||
|
||
/**
|
||
* The rename provider interface defines the contract between extensions and
|
||
* the [rename](https://code.visualstudio.com/docs/editor/editingevolved#_rename-symbol)-feature.
|
||
*/
|
||
export interface RenameProvider {
|
||
/**
|
||
* Provide an edit that describes changes that have to be made to one
|
||
* or many resources to rename a symbol to a different name.
|
||
*
|
||
* @param document The document in which the command was invoked.
|
||
* @param position The position at which the command was invoked.
|
||
* @param newName The new name of the symbol. If the given name is not valid, the provider must return a rejected promise.
|
||
* @param token A cancellation token.
|
||
* @return A workspace edit or a thenable that resolves to such. The lack of a result can be
|
||
* signaled by returning `undefined` or `null`.
|
||
*/
|
||
provideRenameEdits(
|
||
document: LinesTextDocument,
|
||
position: Position,
|
||
newName: string,
|
||
token: CancellationToken
|
||
): ProviderResult<WorkspaceEdit>
|
||
|
||
/**
|
||
* Optional function for resolving and validating a position *before* running rename. The result can
|
||
* be a range or a range and a placeholder text. The placeholder text should be the identifier of the symbol
|
||
* which is being renamed - when omitted the text in the returned range is used.
|
||
*
|
||
* @param document The document in which rename will be invoked.
|
||
* @param position The position at which rename will be invoked.
|
||
* @param token A cancellation token.
|
||
* @return The range or range and placeholder text of the identifier that is to be renamed. The lack of a result can signaled by returning `undefined` or `null`.
|
||
*/
|
||
prepareRename?(
|
||
document: LinesTextDocument,
|
||
position: Position,
|
||
token: CancellationToken
|
||
): ProviderResult<Range | { range: Range; placeholder: string }>
|
||
}
|
||
|
||
/**
|
||
* The document formatting provider interface defines the contract between extensions and
|
||
* the formatting-feature.
|
||
*/
|
||
export interface DocumentFormattingEditProvider {
|
||
/**
|
||
* Provide formatting edits for a whole document.
|
||
*
|
||
* @param document The document in which the command was invoked.
|
||
* @param options Options controlling formatting.
|
||
* @param token A cancellation token.
|
||
* @return A set of text edits or a thenable that resolves to such. The lack of a result can be
|
||
* signaled by returning `undefined`, `null`, or an empty array.
|
||
*/
|
||
provideDocumentFormattingEdits(
|
||
document: LinesTextDocument,
|
||
options: FormattingOptions,
|
||
token: CancellationToken
|
||
): ProviderResult<TextEdit[]>
|
||
}
|
||
|
||
/**
|
||
* The document formatting provider interface defines the contract between extensions and
|
||
* the formatting-feature.
|
||
*/
|
||
export interface DocumentRangeFormattingEditProvider {
|
||
/**
|
||
* Provide formatting edits for a range in a document.
|
||
*
|
||
* The given range is a hint and providers can decide to format a smaller
|
||
* or larger range. Often this is done by adjusting the start and end
|
||
* of the range to full syntax nodes.
|
||
*
|
||
* @param document The document in which the command was invoked.
|
||
* @param range The range which should be formatted.
|
||
* @param options Options controlling formatting.
|
||
* @param token A cancellation token.
|
||
* @return A set of text edits or a thenable that resolves to such. The lack of a result can be
|
||
* signaled by returning `undefined`, `null`, or an empty array.
|
||
*/
|
||
provideDocumentRangeFormattingEdits(
|
||
document: LinesTextDocument,
|
||
range: Range,
|
||
options: FormattingOptions,
|
||
token: CancellationToken
|
||
): ProviderResult<TextEdit[]>
|
||
}
|
||
|
||
/**
|
||
* The code action interface defines the contract between extensions and
|
||
* the [light bulb](https://code.visualstudio.com/docs/editor/editingevolved#_code-action) feature.
|
||
*
|
||
* A code action can be any command that is [known](#commands.getCommands) to the system.
|
||
*/
|
||
export interface CodeActionProvider<T extends CodeAction = CodeAction> {
|
||
/**
|
||
* Provide commands for the given document and range.
|
||
*
|
||
* @param document The document in which the command was invoked.
|
||
* @param range The selector or range for which the command was invoked. This will always be a selection if
|
||
* there is a currently active editor.
|
||
* @param context Context carrying additional information.
|
||
* @param token A cancellation token.
|
||
* @return An array of commands, quick fixes, or refactorings or a thenable of such. The lack of a result can be
|
||
* signaled by returning `undefined`, `null`, or an empty array.
|
||
*/
|
||
provideCodeActions(
|
||
document: LinesTextDocument,
|
||
range: Range,
|
||
context: CodeActionContext,
|
||
token: CancellationToken
|
||
): ProviderResult<(Command | CodeAction)[]>
|
||
|
||
/**
|
||
* Given a code action fill in its [`edit`](#CodeAction.edit)-property. Changes to
|
||
* all other properties, like title, are ignored. A code action that has an edit
|
||
* will not be resolved.
|
||
*
|
||
* @param codeAction A code action.
|
||
* @param token A cancellation token.
|
||
* @return The resolved code action or a thenable that resolves to such. It is OK to return the given
|
||
* `item`. When no result is returned, the given `item` will be used.
|
||
*/
|
||
resolveCodeAction?(codeAction: T, token: CancellationToken): ProviderResult<T>
|
||
}
|
||
|
||
/**
|
||
* Metadata about the type of code actions that a [CodeActionProvider](#CodeActionProvider) providers
|
||
*/
|
||
export interface CodeActionProviderMetadata {
|
||
/**
|
||
* [CodeActionKinds](#CodeActionKind) that this provider may return.
|
||
*
|
||
* The list of kinds may be generic, such as `CodeActionKind.Refactor`, or the provider
|
||
* may list our every specific kind they provide, such as `CodeActionKind.Refactor.Extract.append('function`)`
|
||
*/
|
||
readonly providedCodeActionKinds?: ReadonlyArray<string>
|
||
}
|
||
|
||
/**
|
||
* The document highlight provider interface defines the contract between extensions and
|
||
* the word-highlight-feature.
|
||
*/
|
||
export interface DocumentHighlightProvider {
|
||
|
||
/**
|
||
* Provide a set of document highlights, like all occurrences of a variable or
|
||
* all exit-points of a function.
|
||
*
|
||
* @param document The document in which the command was invoked.
|
||
* @param position The position at which the command was invoked.
|
||
* @param token A cancellation token.
|
||
* @return An array of document highlights or a thenable that resolves to such. The lack of a result can be
|
||
* signaled by returning `undefined`, `null`, or an empty array.
|
||
*/
|
||
provideDocumentHighlights(
|
||
document: LinesTextDocument,
|
||
position: Position,
|
||
token: CancellationToken
|
||
): ProviderResult<DocumentHighlight[]>
|
||
}
|
||
|
||
/**
|
||
* The document link provider defines the contract between extensions and feature of showing
|
||
* links in the editor.
|
||
*/
|
||
export interface DocumentLinkProvider {
|
||
|
||
/**
|
||
* Provide links for the given document. Note that the editor ships with a default provider that detects
|
||
* `http(s)` and `file` links.
|
||
*
|
||
* @param document The document in which the command was invoked.
|
||
* @param token A cancellation token.
|
||
* @return An array of [document links](#DocumentLink) or a thenable that resolves to such. The lack of a result
|
||
* can be signaled by returning `undefined`, `null`, or an empty array.
|
||
*/
|
||
provideDocumentLinks(document: LinesTextDocument, token: CancellationToken): ProviderResult<DocumentLink[]>
|
||
|
||
/**
|
||
* Given a link fill in its [target](#DocumentLink.target). This method is called when an incomplete
|
||
* link is selected in the UI. Providers can implement this method and return incomple links
|
||
* (without target) from the [`provideDocumentLinks`](#DocumentLinkProvider.provideDocumentLinks) method which
|
||
* often helps to improve performance.
|
||
*
|
||
* @param link The link that is to be resolved.
|
||
* @param token A cancellation token.
|
||
*/
|
||
resolveDocumentLink?(link: DocumentLink, token: CancellationToken): ProviderResult<DocumentLink>
|
||
}
|
||
|
||
/**
|
||
* A code lens provider adds [commands](#Command) to source text. The commands will be shown
|
||
* as dedicated horizontal lines in between the source text.
|
||
*/
|
||
export interface CodeLensProvider {
|
||
|
||
/**
|
||
* Compute a list of [lenses](#CodeLens). This call should return as fast as possible and if
|
||
* computing the commands is expensive implementors should only return code lens objects with the
|
||
* range set and implement [resolve](#CodeLensProvider.resolveCodeLens).
|
||
*
|
||
* @param document The document in which the command was invoked.
|
||
* @param token A cancellation token.
|
||
* @return An array of code lenses or a thenable that resolves to such. The lack of a result can be
|
||
* signaled by returning `undefined`, `null`, or an empty array.
|
||
*/
|
||
provideCodeLenses(document: LinesTextDocument, token: CancellationToken): ProviderResult<CodeLens[]>
|
||
|
||
/**
|
||
* This function will be called for each visible code lens, usually when scrolling and after
|
||
* calls to [compute](#CodeLensProvider.provideCodeLenses)-lenses.
|
||
*
|
||
* @param codeLens code lens that must be resolved.
|
||
* @param token A cancellation token.
|
||
* @return The given, resolved code lens or thenable that resolves to such.
|
||
*/
|
||
resolveCodeLens?(codeLens: CodeLens, token: CancellationToken): ProviderResult<CodeLens>
|
||
}
|
||
|
||
/**
|
||
* The document formatting provider interface defines the contract between extensions and
|
||
* the formatting-feature.
|
||
*/
|
||
export interface OnTypeFormattingEditProvider {
|
||
|
||
/**
|
||
* Provide formatting edits after a character has been typed.
|
||
*
|
||
* The given position and character should hint to the provider
|
||
* what range the position to expand to, like find the matching `{`
|
||
* when `}` has been entered.
|
||
*
|
||
* @param document The document in which the command was invoked.
|
||
* @param position The position at which the command was invoked.
|
||
* @param ch The character that has been typed.
|
||
* @param options Options controlling formatting.
|
||
* @param token A cancellation token.
|
||
* @return A set of text edits or a thenable that resolves to such. The lack of a result can be
|
||
* signaled by returning `undefined`, `null`, or an empty array.
|
||
*/
|
||
provideOnTypeFormattingEdits(document: LinesTextDocument, position: Position, ch: string, options: FormattingOptions, token: CancellationToken): ProviderResult<TextEdit[]>
|
||
}
|
||
|
||
/**
|
||
* The document color provider defines the contract between extensions and feature of
|
||
* picking and modifying colors in the editor.
|
||
*/
|
||
export interface DocumentColorProvider {
|
||
|
||
/**
|
||
* Provide colors for the given document.
|
||
*
|
||
* @param document The document in which the command was invoked.
|
||
* @param token A cancellation token.
|
||
* @return An array of [color information](#ColorInformation) or a thenable that resolves to such. The lack of a result
|
||
* can be signaled by returning `undefined`, `null`, or an empty array.
|
||
*/
|
||
provideDocumentColors(document: LinesTextDocument, token: CancellationToken): ProviderResult<ColorInformation[]>
|
||
|
||
/**
|
||
* Provide [representations](#ColorPresentation) for a color.
|
||
*
|
||
* @param color The color to show and insert.
|
||
* @param context A context object with additional information
|
||
* @param token A cancellation token.
|
||
* @return An array of color presentations or a thenable that resolves to such. The lack of a result
|
||
* can be signaled by returning `undefined`, `null`, or an empty array.
|
||
*/
|
||
provideColorPresentations(color: Color, context: { document: LinesTextDocument; range: Range }, token: CancellationToken): ProviderResult<ColorPresentation[]>
|
||
}
|
||
|
||
export interface TextDocumentContentProvider {
|
||
|
||
/**
|
||
* An event to signal a resource has changed.
|
||
*/
|
||
onDidChange?: Event<Uri>
|
||
|
||
/**
|
||
* Provide textual content for a given uri.
|
||
*
|
||
* The editor will use the returned string-content to create a readonly
|
||
* [document](#LinesTextDocument). Resources allocated should be released when
|
||
* the corresponding document has been [closed](#workspace.onDidCloseTextDocument).
|
||
*
|
||
* @param uri An uri which scheme matches the scheme this provider was [registered](#workspace.registerTextDocumentContentProvider) for.
|
||
* @param token A cancellation token.
|
||
* @return A string or a thenable that resolves to such.
|
||
*/
|
||
provideTextDocumentContent(uri: Uri, token: CancellationToken): ProviderResult<string>
|
||
}
|
||
|
||
export interface SelectionRangeProvider {
|
||
/**
|
||
* Provide selection ranges starting at a given position. The first range must [contain](#Range.contains)
|
||
* position and subsequent ranges must contain the previous range.
|
||
*/
|
||
provideSelectionRanges(document: LinesTextDocument, positions: Position[], token: CancellationToken): ProviderResult<SelectionRange[]>
|
||
}
|
||
|
||
/**
|
||
* The call hierarchy provider interface describes the contract between extensions
|
||
* and the call hierarchy feature which allows to browse calls and caller of function,
|
||
* methods, constructor etc.
|
||
*/
|
||
export interface CallHierarchyProvider {
|
||
|
||
/**
|
||
* Bootstraps call hierarchy by returning the item that is denoted by the given document
|
||
* and position. This item will be used as entry into the call graph. Providers should
|
||
* return `undefined` or `null` when there is no item at the given location.
|
||
*
|
||
* @param document The document in which the command was invoked.
|
||
* @param position The position at which the command was invoked.
|
||
* @param token A cancellation token.
|
||
* @returns A call hierarchy item or a thenable that resolves to such. The lack of a result can be
|
||
* signaled by returning `undefined` or `null`.
|
||
*/
|
||
prepareCallHierarchy(document: LinesTextDocument, position: Position, token: CancellationToken): ProviderResult<CallHierarchyItem | CallHierarchyItem[]>
|
||
|
||
/**
|
||
* Provide all incoming calls for an item, e.g all callers for a method. In graph terms this describes directed
|
||
* and annotated edges inside the call graph, e.g the given item is the starting node and the result is the nodes
|
||
* that can be reached.
|
||
*
|
||
* @param item The hierarchy item for which incoming calls should be computed.
|
||
* @param token A cancellation token.
|
||
* @returns A set of incoming calls or a thenable that resolves to such. The lack of a result can be
|
||
* signaled by returning `undefined` or `null`.
|
||
*/
|
||
provideCallHierarchyIncomingCalls(item: CallHierarchyItem, token: CancellationToken): ProviderResult<CallHierarchyIncomingCall[]>
|
||
|
||
/**
|
||
* Provide all outgoing calls for an item, e.g call calls to functions, methods, or constructors from the given item. In
|
||
* graph terms this describes directed and annotated edges inside the call graph, e.g the given item is the starting
|
||
* node and the result is the nodes that can be reached.
|
||
*
|
||
* @param item The hierarchy item for which outgoing calls should be computed.
|
||
* @param token A cancellation token.
|
||
* @returns A set of outgoing calls or a thenable that resolves to such. The lack of a result can be
|
||
* signaled by returning `undefined` or `null`.
|
||
*/
|
||
provideCallHierarchyOutgoingCalls(item: CallHierarchyItem, token: CancellationToken): ProviderResult<CallHierarchyOutgoingCall[]>
|
||
}
|
||
|
||
/**
|
||
* The document semantic tokens provider interface defines the contract between extensions and
|
||
* semantic tokens.
|
||
*/
|
||
export interface DocumentSemanticTokensProvider {
|
||
/**
|
||
* An optional event to signal that the semantic tokens from this provider have changed.
|
||
*/
|
||
// TODO: SemantiTokens
|
||
onDidChangeSemanticTokens?: Event<void>
|
||
|
||
/**
|
||
* Tokens in a file are represented as an array of integers. The position of each token is expressed relative to
|
||
* the token before it, because most tokens remain stable relative to each other when edits are made in a file.
|
||
*
|
||
* ---
|
||
* In short, each token takes 5 integers to represent, so a specific token `i` in the file consists of the following array indices:
|
||
*
|
||
* - at index `5*i` - `deltaLine`: token line number, relative to the previous token
|
||
* - at index `5*i+1` - `deltaStart`: token start character, relative to the previous token (relative to 0 or the previous token's start if they are on the same line)
|
||
* - at index `5*i+2` - `length`: the length of the token. A token cannot be multiline.
|
||
* - at index `5*i+3` - `tokenType`: will be looked up in `SemanticTokensLegend.tokenTypes`. We currently ask that `tokenType` < 65536.
|
||
* - at index `5*i+4` - `tokenModifiers`: each set bit will be looked up in `SemanticTokensLegend.tokenModifiers`
|
||
*
|
||
* ---
|
||
* ### How to encode tokens
|
||
*
|
||
* Here is an example for encoding a file with 3 tokens in a uint32 array:
|
||
* ```
|
||
* { line: 2, startChar: 5, length: 3, tokenType: "property", tokenModifiers: ["private", "static"] },
|
||
* { line: 2, startChar: 10, length: 4, tokenType: "type", tokenModifiers: [] },
|
||
* { line: 5, startChar: 2, length: 7, tokenType: "class", tokenModifiers: [] }
|
||
* ```
|
||
*
|
||
* 1. First of all, a legend must be devised. This legend must be provided up-front and capture all possible token types.
|
||
* For this example, we will choose the following legend which must be passed in when registering the provider:
|
||
* ```
|
||
* tokenTypes: ['property', 'type', 'class'],
|
||
* tokenModifiers: ['private', 'static']
|
||
* ```
|
||
*
|
||
* 2. The first transformation step is to encode `tokenType` and `tokenModifiers` as integers using the legend. Token types are looked
|
||
* up by index, so a `tokenType` value of `1` means `tokenTypes[1]`. Multiple token modifiers can be set by using bit flags,
|
||
* so a `tokenModifier` value of `3` is first viewed as binary `0b00000011`, which means `[tokenModifiers[0], tokenModifiers[1]]` because
|
||
* bits 0 and 1 are set. Using this legend, the tokens now are:
|
||
* ```
|
||
* { line: 2, startChar: 5, length: 3, tokenType: 0, tokenModifiers: 3 },
|
||
* { line: 2, startChar: 10, length: 4, tokenType: 1, tokenModifiers: 0 },
|
||
* { line: 5, startChar: 2, length: 7, tokenType: 2, tokenModifiers: 0 }
|
||
* ```
|
||
*
|
||
* 3. The next step is to represent each token relative to the previous token in the file. In this case, the second token
|
||
* is on the same line as the first token, so the `startChar` of the second token is made relative to the `startChar`
|
||
* of the first token, so it will be `10 - 5`. The third token is on a different line than the second token, so the
|
||
* `startChar` of the third token will not be altered:
|
||
* ```
|
||
* { deltaLine: 2, deltaStartChar: 5, length: 3, tokenType: 0, tokenModifiers: 3 },
|
||
* { deltaLine: 0, deltaStartChar: 5, length: 4, tokenType: 1, tokenModifiers: 0 },
|
||
* { deltaLine: 3, deltaStartChar: 2, length: 7, tokenType: 2, tokenModifiers: 0 }
|
||
* ```
|
||
*
|
||
* 4. Finally, the last step is to inline each of the 5 fields for a token in a single array, which is a memory friendly representation:
|
||
* ```
|
||
* // 1st token, 2nd token, 3rd token
|
||
* [ 2,5,3,0,3, 0,5,4,1,0, 3,2,7,2,0 ]
|
||
* ```
|
||
*
|
||
* @see [SemanticTokensBuilder](#SemanticTokensBuilder) for a helper to encode tokens as integers.
|
||
* *NOTE*: When doing edits, it is possible that multiple edits occur until VS Code decides to invoke the semantic tokens provider.
|
||
* *NOTE*: If the provider cannot temporarily compute semantic tokens, it can indicate this by throwing an error with the message 'Busy'.
|
||
*/
|
||
provideDocumentSemanticTokens(document: LinesTextDocument, token: CancellationToken): ProviderResult<SemanticTokens>
|
||
|
||
/**
|
||
* Instead of always returning all the tokens in a file, it is possible for a `DocumentSemanticTokensProvider` to implement
|
||
* this method (`provideDocumentSemanticTokensEdits`) and then return incremental updates to the previously provided semantic tokens.
|
||
*
|
||
* ---
|
||
* ### How tokens change when the document changes
|
||
*
|
||
* Suppose that `provideDocumentSemanticTokens` has previously returned the following semantic tokens:
|
||
* ```
|
||
* // 1st token, 2nd token, 3rd token
|
||
* [ 2,5,3,0,3, 0,5,4,1,0, 3,2,7,2,0 ]
|
||
* ```
|
||
*
|
||
* Also suppose that after some edits, the new semantic tokens in a file are:
|
||
* ```
|
||
* // 1st token, 2nd token, 3rd token
|
||
* [ 3,5,3,0,3, 0,5,4,1,0, 3,2,7,2,0 ]
|
||
* ```
|
||
* It is possible to express these new tokens in terms of an edit applied to the previous tokens:
|
||
* ```
|
||
* [ 2,5,3,0,3, 0,5,4,1,0, 3,2,7,2,0 ] // old tokens
|
||
* [ 3,5,3,0,3, 0,5,4,1,0, 3,2,7,2,0 ] // new tokens
|
||
*
|
||
* edit: { start: 0, deleteCount: 1, data: [3] } // replace integer at offset 0 with 3
|
||
* ```
|
||
*
|
||
* *NOTE*: If the provider cannot compute `SemanticTokensEdits`, it can "give up" and return all the tokens in the document again.
|
||
* *NOTE*: All edits in `SemanticTokensEdits` contain indices in the old integers array, so they all refer to the previous result state.
|
||
*/
|
||
provideDocumentSemanticTokensEdits?(document: LinesTextDocument, previousResultId: string, token: CancellationToken): ProviderResult<SemanticTokens | SemanticTokensDelta>
|
||
}
|
||
|
||
/**
|
||
* The document range semantic tokens provider interface defines the contract between extensions and
|
||
* semantic tokens.
|
||
*/
|
||
export interface DocumentRangeSemanticTokensProvider {
|
||
/**
|
||
* @see [provideDocumentSemanticTokens](#DocumentSemanticTokensProvider.provideDocumentSemanticTokens).
|
||
*/
|
||
provideDocumentRangeSemanticTokens(document: LinesTextDocument, range: Range, token: CancellationToken): ProviderResult<SemanticTokens>
|
||
}
|
||
|
||
export interface LinkedEditingRangeProvider {
|
||
/**
|
||
* For a given position in a document, returns the range of the symbol at the position and all ranges
|
||
* that have the same content. A change to one of the ranges can be applied to all other ranges if the new content
|
||
* is valid. An optional word pattern can be returned with the result to describe valid contents.
|
||
* If no result-specific word pattern is provided, the word pattern from the language configuration is used.
|
||
*
|
||
* @param document The document in which the provider was invoked.
|
||
* @param position The position at which the provider was invoked.
|
||
* @param token A cancellation token.
|
||
* @return A list of ranges that can be edited together
|
||
*/
|
||
provideLinkedEditingRanges(document: LinesTextDocument, position: Position, token: CancellationToken): ProviderResult<LinkedEditingRanges>
|
||
}
|
||
|
||
/**
|
||
* The inlay hints provider interface defines the contract between extensions and
|
||
* the inlay hints feature.
|
||
*/
|
||
export interface InlayHintsProvider<T extends InlayHint = InlayHint> {
|
||
|
||
/**
|
||
* An optional event to signal that inlay hints from this provider have changed.
|
||
*/
|
||
onDidChangeInlayHints?: Event<void>
|
||
|
||
/**
|
||
* Provide inlay hints for the given range and document.
|
||
*
|
||
* *Note* that inlay hints that are not {@link Range.contains contained} by the given range are ignored.
|
||
*
|
||
* @param document The document in which the command was invoked.
|
||
* @param range The range for which inlay hints should be computed.
|
||
* @param token A cancellation token.
|
||
* @return An array of inlay hints or a thenable that resolves to such.
|
||
*/
|
||
provideInlayHints(document: TextDocument, range: Range, token: CancellationToken): ProviderResult<T[]>
|
||
|
||
/**
|
||
* Given an inlay hint fill in {@link InlayHint.tooltip tooltip}, {@link InlayHint.textEdits text edits},
|
||
* or complete label {@link InlayHintLabelPart parts}.
|
||
*
|
||
* *Note* that the editor will resolve an inlay hint at most once.
|
||
*
|
||
* @param hint An inlay hint.
|
||
* @param token A cancellation token.
|
||
* @return The resolved inlay hint or a thenable that resolves to such. It is OK to return the given `item`. When no result is returned, the given `item` will be used.
|
||
*/
|
||
resolveInlayHint?(hint: T, token: CancellationToken): ProviderResult<T>
|
||
}
|
||
// }}
|
||
|
||
// Classes {{
|
||
/**
|
||
* A semantic tokens builder can help with creating a `SemanticTokens` instance
|
||
* which contains delta encoded semantic tokens.
|
||
*/
|
||
export class SemanticTokensBuilder {
|
||
constructor(legend?: SemanticTokensLegend)
|
||
|
||
/**
|
||
* Add another token.
|
||
*
|
||
* @public
|
||
* @param line The token start line number (absolute value).
|
||
* @param char The token start character (absolute value).
|
||
* @param length The token length in characters.
|
||
* @param tokenType The encoded token type.
|
||
* @param tokenModifiers The encoded token modifiers.
|
||
*/
|
||
push(line: number, char: number, length: number, tokenType: number, tokenModifiers?: number): void
|
||
/**
|
||
* Add another token. Use only when providing a legend.
|
||
*
|
||
* @public
|
||
* @param range The range of the token. Must be single-line.
|
||
* @param tokenType The token type.
|
||
* @param tokenModifiers The token modifiers.
|
||
*/
|
||
push(range: Range, tokenType: string, tokenModifiers?: string[]): void
|
||
|
||
/**
|
||
* Finish and create a `SemanticTokens` instance.
|
||
*
|
||
* @public
|
||
*/
|
||
build(resultId?: string): SemanticTokens
|
||
}
|
||
|
||
export interface Document {
|
||
readonly buffer: Buffer
|
||
/**
|
||
* Document is attached to vim.
|
||
*/
|
||
readonly attached: boolean
|
||
/**
|
||
* Is command line document.
|
||
*/
|
||
readonly isCommandLine: boolean
|
||
/**
|
||
* `buftype` option of buffer.
|
||
*/
|
||
readonly buftype: string
|
||
/**
|
||
* Text document that synchronized.
|
||
*/
|
||
readonly textDocument: LinesTextDocument
|
||
/**
|
||
* Fired when document change.
|
||
*/
|
||
readonly onDocumentChange: Event<DidChangeTextDocumentParams>
|
||
/**
|
||
* Get current buffer changedtick.
|
||
*/
|
||
readonly changedtick: number
|
||
/**
|
||
* Scheme of document.
|
||
*/
|
||
readonly schema: string
|
||
/**
|
||
* Line count of current buffer.
|
||
*/
|
||
readonly lineCount: number
|
||
/**
|
||
* Window ID when buffer create, could be -1 when no window associated.
|
||
*/
|
||
readonly winid: number
|
||
/**
|
||
* Returns if current document is opended with previewwindow
|
||
*/
|
||
readonly previewwindow: boolean
|
||
/**
|
||
* Check if document changed after last synchronize
|
||
*/
|
||
readonly dirty: boolean
|
||
/**
|
||
* Buffer number
|
||
*/
|
||
readonly bufnr: number
|
||
/**
|
||
* Content of textDocument.
|
||
*/
|
||
readonly content: string
|
||
/**
|
||
* Converted filetype.
|
||
*/
|
||
readonly filetype: string
|
||
/**
|
||
* Main filetype of buffer, first part when buffer filetype contains dots.
|
||
* Same as filetype most of the time.
|
||
*/
|
||
readonly languageId: string
|
||
readonly uri: string
|
||
readonly version: number
|
||
/**
|
||
* Apply text edits to document. `nvim_buf_set_text()` is used when possible
|
||
*
|
||
* @param {TextEdit[]} edits
|
||
* @param {boolean} joinUndo - Join further changes with the previous undo block by `:undojoin`.
|
||
* @param {boolean | Position} move - Move the cursor when true or from custom position.
|
||
* @returns {Promise<void>}
|
||
*/
|
||
applyEdits(edits: TextEdit[], joinUndo?: boolean, move?: boolean | Position): Promise<void>
|
||
|
||
/**
|
||
* Change individual lines.
|
||
*
|
||
* @param {[number, string][]} lines
|
||
* @returns {void}
|
||
*/
|
||
changeLines(lines: [number, string][]): Promise<void>
|
||
|
||
/**
|
||
* Get offset from lnum & col
|
||
*/
|
||
getOffset(lnum: number, col: number): number
|
||
|
||
/**
|
||
* Check string is word.
|
||
*/
|
||
isWord(word: string): boolean
|
||
|
||
/**
|
||
* Word range at position.
|
||
*
|
||
* @param {Position} position
|
||
* @param {string} extraChars Extra characters that should be keyword.
|
||
* @param {boolean} current Use current lines instead of textDocument, default to true.
|
||
* @returns {Range | null}
|
||
*/
|
||
getWordRangeAtPosition(position: Position, extraChars?: string, current?: boolean): Range | null
|
||
|
||
/**
|
||
* Get ranges of word in textDocument.
|
||
*/
|
||
getSymbolRanges(word: string): Range[]
|
||
|
||
/**
|
||
* Get line for buffer
|
||
*
|
||
* @param {number} line 0 based line index.
|
||
* @param {boolean} current Use textDocument lines when false, default to true.
|
||
* @returns {string}
|
||
*/
|
||
getline(line: number, current?: boolean): string
|
||
|
||
/**
|
||
* Get range of current lines, zero indexed, end exclude.
|
||
*/
|
||
getLines(start?: number, end?: number): string[]
|
||
|
||
/**
|
||
* Get variable value by key, defined by `b:coc_{key}`
|
||
*/
|
||
getVar<T>(key: string, defaultValue?: T): T
|
||
|
||
/**
|
||
* Get position from lnum & col
|
||
*/
|
||
getPosition(lnum: number, col: number): Position
|
||
|
||
/**
|
||
* Adjust col with new valid character before position.
|
||
*/
|
||
fixStartcol(position: Position, valids: string[]): number
|
||
|
||
/**
|
||
* Get current content text.
|
||
*/
|
||
getDocumentContent(): string
|
||
}
|
||
|
||
/**
|
||
* Represents a {@link TextEditor text editor}'s {@link TextEditor.options options}.
|
||
*/
|
||
export interface TextEditorOptions {
|
||
/**
|
||
* The size in spaces a tab takes. This is used for two purposes:
|
||
* - the rendering width of a tab character;
|
||
* - the number of spaces to insert when {@link TextEditorOptions.insertSpaces insertSpaces} is true.
|
||
*
|
||
* When getting a text editor's options, this property will always be a number (resolved).
|
||
*/
|
||
tabSize: number
|
||
/**
|
||
* When pressing Tab insert {@link TextEditorOptions.tabSize n} spaces.
|
||
* When getting a text editor's options, this property will always be a boolean (resolved).
|
||
*/
|
||
insertSpaces: boolean
|
||
}
|
||
|
||
/**
|
||
* Represents an editor that is attached to a {@link TextDocument document}.
|
||
*/
|
||
export interface TextEditor {
|
||
/**
|
||
* The tabpagenr of current editor.
|
||
*/
|
||
readonly tabpagenr: number
|
||
/**
|
||
* The window id of current editor.
|
||
*/
|
||
readonly winid: number
|
||
/**
|
||
* The window number of current editor.
|
||
*/
|
||
readonly winnr: number
|
||
/**
|
||
* The document associated with this text editor. The document will be the same for the entire lifetime of this text editor.
|
||
*/
|
||
readonly document: Document
|
||
/**
|
||
* The current visible ranges in the editor (vertically).
|
||
* This accounts only for vertical scrolling, and not for horizontal scrolling.
|
||
*/
|
||
readonly visibleRanges: readonly Range[]
|
||
/**
|
||
* Text editor options.
|
||
*/
|
||
readonly options: TextEditorOptions
|
||
}
|
||
|
||
export interface FloatWinConfig {
|
||
maxHeight?: number
|
||
maxWidth?: number
|
||
preferTop?: boolean
|
||
autoHide?: boolean
|
||
offsetX?: number
|
||
title?: string
|
||
border?: number[]
|
||
cursorline?: boolean
|
||
close?: boolean
|
||
highlight?: string
|
||
borderhighlight?: string
|
||
modes?: string[]
|
||
shadow?: boolean
|
||
winblend?: number
|
||
focusable?: boolean
|
||
excludeImages?: boolean
|
||
}
|
||
|
||
export interface Documentation {
|
||
/**
|
||
* Filetype used for highlight, markdown is supported.
|
||
*/
|
||
filetype: string
|
||
/**
|
||
* Content of document.
|
||
*/
|
||
content: string
|
||
/**
|
||
* Byte offset (0 based) that should be undelined.
|
||
*/
|
||
active?: [number, number]
|
||
highlights?: HighlightItem[]
|
||
}
|
||
|
||
/**
|
||
* Float window factory for create float around current cursor, works on vim and neovim.
|
||
* Use `workspace.floatSupported` to check if float could work.
|
||
*
|
||
* Float windows are automatic reused and hidden on specific events including:
|
||
* - BufEnter
|
||
* - InsertEnter
|
||
* - InsertLeave
|
||
* - MenuPopupChanged
|
||
* - CursorMoved
|
||
* - CursorMovedI
|
||
*/
|
||
export class FloatFactory implements Disposable {
|
||
get bufnr(): number | undefined
|
||
get buffer(): Buffer | null
|
||
get window(): Window | null
|
||
activated(): Promise<boolean>
|
||
|
||
constructor(nvim: Neovim)
|
||
|
||
/**
|
||
* Show documentations in float window/popup around cursor.
|
||
* Window and buffer are reused when possible.
|
||
* Window is closed automatically on change buffer, InsertEnter, CursorMoved and CursorMovedI.
|
||
*
|
||
* @param docs List of documentations.
|
||
* @param config Configuration for floating window/popup.
|
||
*/
|
||
show(docs: Documentation[], config?: FloatWinConfig): Promise<void>
|
||
|
||
/**
|
||
* Close float window.
|
||
*/
|
||
close(): void
|
||
dispose(): void
|
||
}
|
||
|
||
|
||
/**
|
||
* A file glob pattern to match file paths against. This can either be a glob pattern string
|
||
* (like `**/*.{ts,js}` or `*.{ts,js}`) or a {@link RelativePattern relative pattern}.
|
||
*
|
||
* Glob patterns can have the following syntax:
|
||
* * `*` to match one or more characters in a path segment
|
||
* * `?` to match on one character in a path segment
|
||
* * `**` to match any number of path segments, including none
|
||
* * `{}` to group conditions (e.g. `**/*.{ts,js}` matches all TypeScript and JavaScript files)
|
||
* * `[]` to declare a range of characters to match in a path segment (e.g., `example.[0-9]` to match on `example.0`, `example.1`, …)
|
||
* * `[!...]` to negate a range of characters to match in a path segment (e.g., `example.[!0-9]` to match on `example.a`, `example.b`, but not `example.0`)
|
||
*
|
||
* Note: a backslash (`\`) is not valid within a glob pattern. If you have an existing file
|
||
* path to match against, consider to use the {@link RelativePattern relative pattern} support
|
||
* that takes care of converting any backslash into slash. Otherwise, make sure to convert
|
||
* any backslash to slash when creating the glob pattern.
|
||
*/
|
||
export type GlobPattern = string | RelativePattern
|
||
|
||
/**
|
||
* A relative pattern is a helper to construct glob patterns that are matched
|
||
* relatively to a base file path. The base path can either be an absolute file
|
||
* path as string or uri or a {@link WorkspaceFolder workspace folder}, which is the
|
||
* preferred way of creating the relative pattern.
|
||
*/
|
||
export class RelativePattern {
|
||
|
||
/**
|
||
* A base file path to which this pattern will be matched against relatively.
|
||
*/
|
||
baseUri: Uri
|
||
|
||
/**
|
||
* A file glob pattern like `*.{ts,js}` that will be matched on file paths
|
||
* relative to the base path.
|
||
*
|
||
* Example: Given a base of `/home/work/folder` and a file path of `/home/work/folder/index.js`,
|
||
* the file glob pattern will match on `index.js`.
|
||
*/
|
||
pattern: string
|
||
|
||
/**
|
||
* Creates a new relative pattern object with a base file path and pattern to match. This pattern
|
||
* will be matched on file paths relative to the base.
|
||
*
|
||
* Example:
|
||
* ```ts
|
||
* const folder = vscode.workspace.workspaceFolders?.[0];
|
||
* if (folder) {
|
||
*
|
||
* // Match any TypeScript file in the root of this workspace folder
|
||
* const pattern1 = new vscode.RelativePattern(folder, '*.ts');
|
||
*
|
||
* // Match any TypeScript file in `someFolder` inside this workspace folder
|
||
* const pattern2 = new vscode.RelativePattern(folder, 'someFolder/*.ts');
|
||
* }
|
||
* ```
|
||
*
|
||
* @param base A base to which this pattern will be matched against relatively. It is recommended
|
||
* to pass in a {@link WorkspaceFolder workspace folder} if the pattern should match inside the workspace.
|
||
* Otherwise, a uri or string should only be used if the pattern is for a file path outside the workspace.
|
||
* @param pattern A file glob pattern like `*.{ts,js}` that will be matched on paths relative to the base.
|
||
*/
|
||
constructor(base: WorkspaceFolder | Uri | string, pattern: string)
|
||
}
|
||
|
||
/**
|
||
* Build buffer with lines and highlights
|
||
*/
|
||
export class Highlighter {
|
||
constructor(srcId?: number)
|
||
/**
|
||
* Add a line with highlight group.
|
||
*/
|
||
addLine(line: string, hlGroup?: string): void
|
||
/**
|
||
* Add lines without highlights.
|
||
*/
|
||
addLines(lines: string[]): void
|
||
/**
|
||
* Add text with highlight.
|
||
*/
|
||
addText(text: string, hlGroup?: string): void
|
||
/**
|
||
* Get line count
|
||
*/
|
||
get length(): number
|
||
/**
|
||
* Render lines to buffer at specified range.
|
||
* Since notifications is used, use `nvim.pauseNotification` & `nvim.resumeNotification`
|
||
* when you need to wait for the request finish.
|
||
*
|
||
* @param {Buffer} buffer
|
||
* @param {number} start
|
||
* @param {number} end
|
||
* @returns {void}
|
||
*/
|
||
render(buffer: Buffer, start?: number, end?: number): void
|
||
}
|
||
|
||
export interface ListConfiguration {
|
||
get<T>(key: string, defaultValue?: T): T
|
||
previousKey(): string
|
||
nextKey(): string
|
||
dispose(): void
|
||
}
|
||
|
||
export interface ListActionOptions {
|
||
/**
|
||
* No prompt stop and window switch when invoked.
|
||
*/
|
||
persist?: boolean
|
||
/**
|
||
* Reload list after action invoked.
|
||
*/
|
||
reload?: boolean
|
||
/**
|
||
* Support multiple items as execute argument.
|
||
*/
|
||
parallel?: boolean
|
||
/**
|
||
* Tab positioned list should be persisted (no window switch) on action invoke.
|
||
*/
|
||
tabPersist?: boolean
|
||
}
|
||
|
||
export interface CommandTaskOption {
|
||
/**
|
||
* Command to run.
|
||
*/
|
||
cmd: string
|
||
/**
|
||
* Arguments of command.
|
||
*/
|
||
args: string[]
|
||
/**
|
||
* Current working directory.
|
||
*/
|
||
cwd?: string
|
||
env?: NodeJS.ProcessEnv
|
||
/**
|
||
* Runs for each line, return undefined for invalid item.
|
||
*/
|
||
onLine: (line: string) => ListItem | undefined
|
||
}
|
||
|
||
export abstract class BasicList implements IList {
|
||
/**
|
||
* Unique name, must be provided by implementation class.
|
||
*/
|
||
name: string
|
||
/**
|
||
* Default action name invoked by <cr> by default, must be provided by implementation class.
|
||
*/
|
||
defaultAction: string
|
||
/**
|
||
* Registered actions.
|
||
*/
|
||
readonly actions: ListAction[]
|
||
/**
|
||
* Arguments configuration of list.
|
||
*/
|
||
options: ListArgument[]
|
||
protected nvim: Neovim
|
||
protected disposables: Disposable[]
|
||
protected config: ListConfiguration
|
||
constructor(nvim: Neovim)
|
||
/**
|
||
* Should align columns when true.
|
||
*/
|
||
get alignColumns(): boolean
|
||
get hlGroup(): string
|
||
get previewHeight(): string
|
||
get splitRight(): boolean
|
||
/**
|
||
* Parse argument string array for argument object from `this.options`.
|
||
* Could be used inside `this.loadItems()`
|
||
*/
|
||
protected parseArguments(args: string[]): { [key: string]: string | boolean }
|
||
/**
|
||
* Get configurations of current list
|
||
*/
|
||
protected getConfig(): WorkspaceConfiguration
|
||
/**
|
||
* Add an action
|
||
*/
|
||
protected addAction(name: string, fn: (item: ListItem, context: ListContext) => ProviderResult<void>, options?: ListActionOptions): void
|
||
/**
|
||
* Add action that support multiple selection.
|
||
*/
|
||
protected addMultipleAction(name: string, fn: (item: ListItem[], context: ListContext) => ProviderResult<void>, options?: ListActionOptions): void
|
||
/**
|
||
* Create task from command task option.
|
||
*/
|
||
protected createCommandTask(opt: CommandTaskOption): ListTask
|
||
/**
|
||
* Add location related actions, should be called in constructor.
|
||
*/
|
||
protected addLocationActions(): void
|
||
protected convertLocation(location: Location | LocationWithLine | string): Promise<Location>
|
||
/**
|
||
* Jump to location
|
||
*
|
||
* @method
|
||
*/
|
||
protected jumpTo(location: Location | LocationWithLine | string, command?: string): Promise<void>
|
||
/**
|
||
* Preview location.
|
||
*
|
||
* @method
|
||
*/
|
||
protected previewLocation(location: Location, context: ListContext): Promise<void>
|
||
/**
|
||
* Preview lines.
|
||
*
|
||
* @method
|
||
*/
|
||
protected preview(options: PreviewOptions, context: ListContext): Promise<void>
|
||
/**
|
||
* Use for syntax highlights, invoked after buffer loaded.
|
||
*/
|
||
doHighlight(): void
|
||
/**
|
||
* Invoked for listItems or listTask, could throw error when failed to load.
|
||
*/
|
||
abstract loadItems(context: ListContext, token?: CancellationToken): Promise<ListItem[] | ListTask | null | undefined>
|
||
}
|
||
|
||
export class Mutex {
|
||
/**
|
||
* Returns true when task is running.
|
||
*/
|
||
get busy(): boolean
|
||
/**
|
||
* Resolved release function that must be called after task finish.
|
||
*/
|
||
acquire(): Promise<() => void>
|
||
/**
|
||
* Captrue the async task function that ensures to be executed one by one.
|
||
*/
|
||
use<T>(f: () => Promise<T>): Promise<T>
|
||
}
|
||
// }}
|
||
|
||
// functions {{
|
||
|
||
export interface AnsiItem {
|
||
foreground?: string
|
||
background?: string
|
||
bold?: boolean
|
||
italic?: boolean
|
||
underline?: boolean
|
||
text: string
|
||
}
|
||
|
||
export interface ParsedUrlQueryInput {
|
||
[key: string]: unknown
|
||
}
|
||
|
||
export interface FetchOptions {
|
||
/**
|
||
* Default to 'GET'
|
||
*/
|
||
method?: string
|
||
/**
|
||
* Default no timeout
|
||
*/
|
||
timeout?: number
|
||
/**
|
||
* Always return buffer instead of parsed response.
|
||
*/
|
||
buffer?: boolean
|
||
/**
|
||
* Data send to server.
|
||
*/
|
||
data?: string | { [key: string]: any } | Buffer
|
||
/**
|
||
* Plain object added as query of url
|
||
*/
|
||
query?: ParsedUrlQueryInput
|
||
headers?: any
|
||
/**
|
||
* User for http basic auth, should use with password
|
||
*/
|
||
user?: string
|
||
/**
|
||
* Password for http basic auth, should use with user
|
||
*/
|
||
password?: string
|
||
}
|
||
|
||
export interface DownloadOptions extends Omit<FetchOptions, 'buffer'> {
|
||
/**
|
||
* Folder that contains downloaded file or extracted files by untar or unzip
|
||
*/
|
||
dest: string
|
||
/**
|
||
* Remove the specified number of leading path elements for *untar* only, default to `1`.
|
||
*/
|
||
strip?: number
|
||
/**
|
||
* If true, use untar for `.tar.gz` filename
|
||
*/
|
||
extract?: boolean | 'untar' | 'unzip'
|
||
onProgress?: (percent: string) => void
|
||
}
|
||
|
||
export type ResponseResult = string | Buffer | {
|
||
[name: string]: any
|
||
}
|
||
|
||
/**
|
||
* Parse ansi result from string contains ansi characters.
|
||
*/
|
||
export function ansiparse(str: string): AnsiItem[]
|
||
|
||
/**
|
||
* Send request to server for response, supports:
|
||
*
|
||
* - Send json data and parse json response.
|
||
* - Throw error for failed response statusCode.
|
||
* - Timeout support (no timeout by default).
|
||
* - Send buffer (as data) and receive data (as response).
|
||
* - Proxy support from user configuration & environment.
|
||
* - Redirect support, limited to 3.
|
||
* - Support of gzip & deflate response content.
|
||
*
|
||
* @return Parsed object if response content type is application/json, text if content type starts with `text/`
|
||
*/
|
||
export function fetch(url: string, options?: FetchOptions, token?: CancellationToken): Promise<ResponseResult>
|
||
|
||
/**
|
||
* Download file from url, with optional untar/unzip support.
|
||
*
|
||
* Note: you may need to set `strip` to 0 when using untar as extract method.
|
||
*
|
||
* @param {string} url
|
||
* @param {DownloadOptions} options contains dest folder and optional onProgress callback
|
||
*/
|
||
export function download(url: string, options: DownloadOptions, token?: CancellationToken): Promise<string>
|
||
|
||
interface ExecOptions {
|
||
cwd?: string
|
||
env?: NodeJS.ProcessEnv
|
||
shell?: string
|
||
timeout?: number
|
||
maxBuffer?: number
|
||
killSignal?: string
|
||
uid?: number
|
||
gid?: number
|
||
windowsHide?: boolean
|
||
}
|
||
|
||
/**
|
||
* Dispose all disposables.
|
||
*/
|
||
export function disposeAll(disposables: Disposable[]): void
|
||
|
||
/**
|
||
* Concurrent run async functions with limit support.
|
||
*/
|
||
export function concurrent<T>(arr: T[], fn: (val: T) => Promise<void>, limit?: number): Promise<void>
|
||
|
||
/**
|
||
* Create promise resolved after ms milliseconds.
|
||
*/
|
||
export function wait(ms: number): Promise<any>
|
||
|
||
/**
|
||
* Run command with `child_process.exec`
|
||
*/
|
||
export function runCommand(cmd: string, opts?: ExecOptions, timeout?: number): Promise<string>
|
||
|
||
/**
|
||
* Check if process with pid is running
|
||
*/
|
||
export function isRunning(pid: number): boolean
|
||
|
||
/**
|
||
* Check if command is executable.
|
||
*/
|
||
export function executable(command: string): boolean
|
||
|
||
/**
|
||
* Watch single file for change, the filepath needs to be exists file.
|
||
*
|
||
* @param filepath Full path of file.
|
||
* @param onChange Handler on file change detected.
|
||
*/
|
||
export function watchFile(filepath: string, onChange: () => void): Disposable
|
||
// }}
|
||
|
||
// commands module {{
|
||
export interface CommandItem {
|
||
id: string
|
||
internal?: boolean
|
||
execute(...args: any[]): any
|
||
}
|
||
/**
|
||
* Namespace for dealing with commands of coc.nvim
|
||
*/
|
||
export namespace commands {
|
||
/**
|
||
* Registered commands.
|
||
*/
|
||
export const commandList: CommandItem[]
|
||
|
||
/**
|
||
* Execute specified command.
|
||
*
|
||
* @deprecated use `executeCommand()` instead.
|
||
*/
|
||
export function execute(command: { name: string, arguments?: any[] }): void
|
||
|
||
/**
|
||
* Check if command is registered.
|
||
*
|
||
* @param id Unique id of command.
|
||
*/
|
||
export function has(id: string): boolean
|
||
|
||
/**
|
||
* Registers a command that can be invoked via a keyboard shortcut,
|
||
* a menu item, an action, or directly.
|
||
*
|
||
* Registering a command with an existing command identifier twice
|
||
* will cause an error.
|
||
*
|
||
* @param command A unique identifier for the command.
|
||
* @param impl A command handler function.
|
||
* @param thisArg The `this` context used when invoking the handler function.
|
||
* @return Disposable which unregisters this command on disposal.
|
||
*/
|
||
export function registerCommand(id: string, impl: (...args: any[]) => void, thisArg?: any, internal?: boolean): Disposable
|
||
|
||
/**
|
||
* Executes the command denoted by the given command identifier.
|
||
*
|
||
* * *Note 1:* When executing an editor command not all types are allowed to
|
||
* be passed as arguments. Allowed are the primitive types `string`, `boolean`,
|
||
* `number`, `undefined`, and `null`, as well as [`Position`](#Position), [`Range`](#Range), [`URI`](#URI) and [`Location`](#Location).
|
||
* * *Note 2:* There are no restrictions when executing commands that have been contributed
|
||
* by extensions.
|
||
*
|
||
* @param command Identifier of the command to execute.
|
||
* @param rest Parameters passed to the command function.
|
||
* @return A promise that resolves to the returned value of the given command. `undefined` when
|
||
* the command handler function doesn't return anything.
|
||
*/
|
||
export function executeCommand<T>(command: string, ...rest: any[]): Promise<T>
|
||
|
||
/**
|
||
* Open uri with external tool, use `open` on mac, use `xdg-open` on linux.
|
||
*/
|
||
export function executeCommand(command: 'vscode.open', uri: string | Uri): Promise<void>
|
||
|
||
/**
|
||
* Reload current buffer by `:edit` command.
|
||
*/
|
||
export function executeCommand(command: 'workbench.action.reloadWindow'): Promise<void>
|
||
|
||
/**
|
||
* Insert snippet at range of current buffer.
|
||
*
|
||
* @param edit Contains snippet text and range to replace.
|
||
*/
|
||
export function executeCommand(command: 'editor.action.insertSnippet', edit: TextEdit, ultisnip?: UltiSnippetOption): Promise<boolean>
|
||
|
||
/**
|
||
* Invoke specified code action.
|
||
*/
|
||
export function executeCommand(command: 'editor.action.doCodeAction', action: CodeAction): Promise<void>
|
||
|
||
/**
|
||
* Trigger coc.nvim's completion at current cursor position.
|
||
*/
|
||
export function executeCommand(command: 'editor.action.triggerSuggest'): Promise<void>
|
||
|
||
/**
|
||
* Trigger signature help at current cursor position.
|
||
*/
|
||
export function executeCommand(command: 'editor.action.triggerParameterHints'): Promise<void>
|
||
|
||
/**
|
||
* Add ranges to cursors session for multiple cursors.
|
||
*/
|
||
export function executeCommand(command: 'editor.action.addRanges', ranges: Range[]): Promise<void>
|
||
|
||
/**
|
||
* Restart coc.nvim service by `:CocRestart` command.
|
||
*/
|
||
export function executeCommand(command: 'editor.action.restart'): Promise<void>
|
||
|
||
/**
|
||
* Show locations by location list or vim's quickfix list.
|
||
*/
|
||
export function executeCommand(command: 'editor.action.showReferences', filepath: string | undefined, position: Position | undefined, locations: Location[]): Promise<void>
|
||
|
||
/**
|
||
* Invoke rename action at position of specified uri.
|
||
*/
|
||
export function executeCommand(command: 'editor.action.rename', uri: string, position: Position): Promise<void>
|
||
|
||
/**
|
||
* Run format action for current buffer.
|
||
*/
|
||
export function executeCommand(command: 'editor.action.format'): Promise<void>
|
||
}
|
||
// }}
|
||
|
||
// events module {{
|
||
type EventResult = void | Promise<void>
|
||
type MoveEvents = 'CursorMoved' | 'CursorMovedI' | 'CursorHold' | 'CursorHoldI'
|
||
type BufEvents = 'BufHidden' | 'BufEnter' | 'BufWritePost'
|
||
| 'InsertLeave' | 'TermOpen' | 'InsertEnter'
|
||
| 'BufCreate' | 'BufUnload' | 'BufWritePre' | 'Enter'
|
||
type EmptyEvents = 'FocusGained' | 'FocusLost' | 'InsertSnippet'
|
||
type InsertChangeEvents = 'TextChangedP' | 'TextChangedI'
|
||
type TaskEvents = 'TaskExit' | 'TaskStderr' | 'TaskStdout'
|
||
type WindowEvents = 'WinLeave' | 'WinEnter'
|
||
type AllEvents = BufEvents | EmptyEvents | MoveEvents | TaskEvents | WindowEvents | InsertChangeEvents | 'CompleteDone' | 'TextChanged' | 'MenuPopupChanged' | 'InsertCharPre' | 'FileType' | 'BufWinEnter' | 'BufWinLeave' | 'VimResized' | 'DirChanged' | 'OptionSet' | 'Command' | 'BufReadCmd' | 'GlobalChange' | 'InputChar' | 'WinLeave' | 'MenuInput' | 'PromptInsert' | 'FloatBtnClick' | 'InsertSnippet' | 'PromptKeyPress'
|
||
type OptionValue = string | number | boolean
|
||
type PromptWidowKeys = 'C-j' | 'C-k' | 'C-n' | 'C-p' | 'up' | 'down'
|
||
|
||
export interface CursorPosition {
|
||
readonly bufnr: number
|
||
readonly lnum: number
|
||
readonly col: number
|
||
readonly insert: boolean
|
||
}
|
||
|
||
export interface InsertChange {
|
||
/**
|
||
* 1 based line number
|
||
*/
|
||
readonly lnum: number
|
||
/**
|
||
* 1 based column number
|
||
*/
|
||
readonly col: number
|
||
/**
|
||
* Text before cursor.
|
||
*/
|
||
readonly pre: string
|
||
/**
|
||
* Insert character that cause change of this time.
|
||
*/
|
||
readonly insertChar: string | undefined
|
||
readonly changedtick: number
|
||
}
|
||
|
||
export interface PopupChangeEvent {
|
||
readonly completed_item: VimCompleteItem
|
||
readonly height: number
|
||
readonly width: number
|
||
readonly row: number
|
||
readonly col: number
|
||
readonly size: number
|
||
readonly scrollbar: boolean
|
||
}
|
||
|
||
/**
|
||
* Used for listen to events send from vim.
|
||
*/
|
||
export namespace events {
|
||
/**
|
||
* Latest cursor position.
|
||
*/
|
||
export const cursor: Readonly<CursorPosition>
|
||
/**
|
||
* Latest pum position, is true when pum positioned above current line.
|
||
*/
|
||
export const pumAlignTop: boolean
|
||
/**
|
||
* Insert mode detected by latest events.
|
||
*/
|
||
export const insertMode: boolean
|
||
|
||
/**
|
||
* Popup menu is visible.
|
||
*/
|
||
export const pumvisible: boolean
|
||
|
||
/**
|
||
* Wait for any of event in events to fire, resolve undefined when timeout or CancellationToken requested.
|
||
* @param events Event names to wait.
|
||
* @param timeoutOrToken Timeout in miniseconds or CancellationToken.
|
||
* @return A [disposable](#Disposable) that unregisters this provider when being disposed.
|
||
*/
|
||
export function race(events: AllEvents[], timeoutOrToken?: number | CancellationToken): Promise<{ name: AllEvents, args: unknown[] } | undefined>
|
||
|
||
/**
|
||
* Attach handler to buffer events.
|
||
*/
|
||
export function on(event: BufEvents, handler: (bufnr: number) => EventResult, thisArg?: any, disposables?: Disposable[]): Disposable
|
||
/**
|
||
* Attach handler to mouse move events.
|
||
*/
|
||
export function on(event: MoveEvents, handler: (bufnr: number, cursor: [number, number]) => EventResult, thisArg?: any, disposables?: Disposable[]): Disposable
|
||
/**
|
||
* Attach handler to TextChangedI or TextChangedP.
|
||
*/
|
||
export function on(event: InsertChangeEvents, handler: (bufnr: number, info: InsertChange) => EventResult, thisArg?: any, disposables?: Disposable[]): Disposable
|
||
/**
|
||
* Attach handler to window event.
|
||
*/
|
||
export function on(event: WindowEvents, handler: (winid: number) => EventResult, thisArg?: any, disposables?: Disposable[]): Disposable
|
||
/**
|
||
* Attach handler to float button click.
|
||
*/
|
||
export function on(event: 'FloatBtnClick', handler: (bufnr: number, index: number) => EventResult, thisArg?: any, disposables?: Disposable[]): Disposable
|
||
/**
|
||
* Attach handler to keypress in prompt window.
|
||
* Key could only be 'C-j', 'C-k', 'C-n', 'C-p', 'up' and 'down'
|
||
*/
|
||
export function on(event: 'PromptKeyPress', handler: (bufnr: number, key: PromptWidowKeys) => EventResult, thisArg?: any, disposables?: Disposable[]): Disposable
|
||
/**
|
||
* Fired on vim's TextChanged event.
|
||
*/
|
||
export function on(event: 'TextChanged', handler: (bufnr: number, changedtick: number) => EventResult, thisArg?: any, disposables?: Disposable[]): Disposable
|
||
export function on(event: 'TaskExit', handler: (id: string, code: number) => EventResult, thisArg?: any, disposables?: Disposable[]): Disposable
|
||
export function on(event: 'TaskStderr' | 'TaskStdout', handler: (id: string, lines: string[]) => EventResult, thisArg?: any, disposables?: Disposable[]): Disposable
|
||
/**
|
||
* Fired on vim's BufReadCmd event.
|
||
*/
|
||
export function on(event: 'BufReadCmd', handler: (scheme: string, fullpath: string) => EventResult, thisArg?: any, disposables?: Disposable[]): Disposable
|
||
/**
|
||
* Fired on vim's VimResized event.
|
||
*/
|
||
export function on(event: 'VimResized', handler: (columns: number, lines: number) => EventResult, thisArg?: any, disposables?: Disposable[]): Disposable
|
||
export function on(event: 'MenuPopupChanged', handler: (event: PopupChangeEvent, cursorline: number) => EventResult, thisArg?: any, disposables?: Disposable[]): Disposable
|
||
export function on(event: 'CompleteDone', handler: (item: VimCompleteItem) => EventResult, thisArg?: any, disposables?: Disposable[]): Disposable
|
||
export function on(event: 'InsertCharPre', handler: (character: string) => EventResult, thisArg?: any, disposables?: Disposable[]): Disposable
|
||
export function on(event: 'FileType', handler: (filetype: string, bufnr: number) => EventResult, thisArg?: any, disposables?: Disposable[]): Disposable
|
||
export function on(event: 'BufWinEnter' | 'BufWinLeave', handler: (bufnr: number, winid: number) => EventResult, thisArg?: any, disposables?: Disposable[]): Disposable
|
||
export function on(event: 'DirChanged', handler: (cwd: string) => EventResult, thisArg?: any, disposables?: Disposable[]): Disposable
|
||
export function on(event: 'OptionSet' | 'GlobalChange', handler: (option: string, oldVal: OptionValue, newVal: OptionValue) => EventResult, thisArg?: any, disposables?: Disposable[]): Disposable
|
||
export function on(event: 'InputChar', handler: (session: string, character: string, mode: number) => EventResult, thisArg?: any, disposables?: Disposable[]): Disposable
|
||
export function on(event: 'PromptInsert', handler: (value: string, bufnr: number) => EventResult, thisArg?: any, disposables?: Disposable[]): Disposable
|
||
export function on(event: 'Command', handler: (name: string) => EventResult, thisArg?: any, disposables?: Disposable[]): Disposable
|
||
|
||
/**
|
||
* Fired after user insert character and made change to the buffer.
|
||
* Fired after TextChangedI & TextChangedP event.
|
||
*/
|
||
export function on(event: 'TextInsert', handler: (bufnr: number, info: InsertChange, character: string) => EventResult, thisArg?: any, disposables?: Disposable[]): Disposable
|
||
|
||
export function on(event: EmptyEvents, handler: () => EventResult, thisArg?: any, disposables?: Disposable[]): Disposable
|
||
|
||
export function on(event: AllEvents[], handler: (...args: unknown[]) => EventResult, thisArg?: any, disposables?: Disposable[]): Disposable
|
||
}
|
||
// }}
|
||
|
||
// file events {{
|
||
/**
|
||
* An event that is fired after files are created.
|
||
*/
|
||
export interface FileCreateEvent {
|
||
|
||
/**
|
||
* The files that got created.
|
||
*/
|
||
readonly files: ReadonlyArray<Uri>
|
||
}
|
||
|
||
/**
|
||
* An event that is fired when files are going to be created.
|
||
*
|
||
* To make modifications to the workspace before the files are created,
|
||
* call the [`waitUntil](#FileWillCreateEvent.waitUntil)-function with a
|
||
* thenable that resolves to a [workspace edit](#WorkspaceEdit).
|
||
*/
|
||
export interface FileWillCreateEvent {
|
||
|
||
/**
|
||
* A cancellation token.
|
||
*/
|
||
readonly token: CancellationToken
|
||
|
||
/**
|
||
* The files that are going to be created.
|
||
*/
|
||
readonly files: ReadonlyArray<Uri>
|
||
|
||
/**
|
||
* Allows to pause the event and to apply a [workspace edit](#WorkspaceEdit).
|
||
*
|
||
* *Note:* This function can only be called during event dispatch and not
|
||
* in an asynchronous manner:
|
||
*
|
||
* ```ts
|
||
* workspace.onWillCreateFiles(event => {
|
||
* // async, will *throw* an error
|
||
* setTimeout(() => event.waitUntil(promise));
|
||
*
|
||
* // sync, OK
|
||
* event.waitUntil(promise);
|
||
* })
|
||
* ```
|
||
*
|
||
* @param thenable A thenable that delays saving.
|
||
*/
|
||
waitUntil(thenable: Thenable<WorkspaceEdit | any>): void
|
||
}
|
||
|
||
/**
|
||
* An event that is fired when files are going to be deleted.
|
||
*
|
||
* To make modifications to the workspace before the files are deleted,
|
||
* call the [`waitUntil](#FileWillCreateEvent.waitUntil)-function with a
|
||
* thenable that resolves to a [workspace edit](#WorkspaceEdit).
|
||
*/
|
||
export interface FileWillDeleteEvent {
|
||
|
||
/**
|
||
* The files that are going to be deleted.
|
||
*/
|
||
readonly files: ReadonlyArray<Uri>
|
||
|
||
/**
|
||
* Allows to pause the event and to apply a [workspace edit](#WorkspaceEdit).
|
||
*
|
||
* *Note:* This function can only be called during event dispatch and not
|
||
* in an asynchronous manner:
|
||
*
|
||
* ```ts
|
||
* workspace.onWillCreateFiles(event => {
|
||
* // async, will *throw* an error
|
||
* setTimeout(() => event.waitUntil(promise));
|
||
*
|
||
* // sync, OK
|
||
* event.waitUntil(promise);
|
||
* })
|
||
* ```
|
||
*
|
||
* @param thenable A thenable that delays saving.
|
||
*/
|
||
waitUntil(thenable: Thenable<WorkspaceEdit | any>): void
|
||
}
|
||
|
||
/**
|
||
* An event that is fired after files are deleted.
|
||
*/
|
||
export interface FileDeleteEvent {
|
||
|
||
/**
|
||
* The files that got deleted.
|
||
*/
|
||
readonly files: ReadonlyArray<Uri>
|
||
}
|
||
|
||
/**
|
||
* An event that is fired after files are renamed.
|
||
*/
|
||
export interface FileRenameEvent {
|
||
|
||
/**
|
||
* The files that got renamed.
|
||
*/
|
||
readonly files: ReadonlyArray<{ oldUri: Uri, newUri: Uri }>
|
||
}
|
||
|
||
/**
|
||
* An event that is fired when files are going to be renamed.
|
||
*
|
||
* To make modifications to the workspace before the files are renamed,
|
||
* call the [`waitUntil](#FileWillCreateEvent.waitUntil)-function with a
|
||
* thenable that resolves to a [workspace edit](#WorkspaceEdit).
|
||
*/
|
||
export interface FileWillRenameEvent {
|
||
|
||
/**
|
||
* The files that are going to be renamed.
|
||
*/
|
||
readonly files: ReadonlyArray<{ oldUri: Uri, newUri: Uri }>
|
||
|
||
/**
|
||
* Allows to pause the event and to apply a [workspace edit](#WorkspaceEdit).
|
||
*
|
||
* *Note:* This function can only be called during event dispatch and not
|
||
* in an asynchronous manner:
|
||
*
|
||
* ```ts
|
||
* workspace.onWillCreateFiles(event => {
|
||
* // async, will *throw* an error
|
||
* setTimeout(() => event.waitUntil(promise));
|
||
*
|
||
* // sync, OK
|
||
* event.waitUntil(promise);
|
||
* })
|
||
* ```
|
||
*
|
||
* @param thenable A thenable that delays saving.
|
||
*/
|
||
waitUntil(thenable: Thenable<WorkspaceEdit | any>): void
|
||
}
|
||
// }}
|
||
|
||
// languages module {{
|
||
export interface DocumentSymbolProviderMetadata {
|
||
/**
|
||
* A human-readable string that is shown when multiple outlines trees show for one document.
|
||
*/
|
||
label?: string
|
||
}
|
||
|
||
export namespace languages {
|
||
/**
|
||
* Create a diagnostics collection.
|
||
*
|
||
* @param name The [name](#DiagnosticCollection.name) of the collection.
|
||
* @return A new diagnostic collection.
|
||
*/
|
||
export function createDiagnosticCollection(name?: string): DiagnosticCollection
|
||
|
||
/**
|
||
* Register a formatting provider that works on type. The provider is active when the user enables the setting `coc.preferences.formatOnType`.
|
||
*
|
||
* Multiple providers can be registered for a language. In that case providers are sorted
|
||
* by their [score](#languages.match) and the best-matching provider is used. Failure
|
||
* of the selected provider will cause a failure of the whole operation.
|
||
*
|
||
* @param selector A selector that defines the documents this provider is applicable to.
|
||
* @param provider An on type formatting edit provider.
|
||
* @param triggerCharacters Trigger character that should trigger format on type.
|
||
* @return A [disposable](#Disposable) that unregisters this provider when being disposed.
|
||
*/
|
||
export function registerOnTypeFormattingEditProvider(selector: DocumentSelector, provider: OnTypeFormattingEditProvider, triggerCharacters: string[]): Disposable
|
||
|
||
/**
|
||
* Register a completion provider.
|
||
*
|
||
* Multiple providers can be registered for a language. In that case providers are sorted
|
||
* by their [score](#languages.match) and groups of equal score are sequentially asked for
|
||
* completion items. The process stops when one or many providers of a group return a
|
||
* result. A failing provider (rejected promise or exception) will not fail the whole
|
||
* operation.
|
||
*
|
||
* A completion item provider can be associated with a set of `triggerCharacters`. When trigger
|
||
* characters are being typed, completions are requested but only from providers that registered
|
||
* the typed character. Because of that trigger characters should be different than [word characters](#LanguageConfiguration.wordPattern),
|
||
* a common trigger character is `.` to trigger member completions.
|
||
*
|
||
* @param name Name of completion source.
|
||
* @param shortcut Shortcut used in completion menu.
|
||
* @param selector Document selector of created completion source.
|
||
* @param provider A completion provider.
|
||
* @param triggerCharacters Trigger completion when the user types one of the characters.
|
||
* @param priority Higher priority would shown first.
|
||
* @param allCommitCharacters Commit characters of completion source.
|
||
* @return A [disposable](#Disposable) that unregisters this provider when being disposed.
|
||
*/
|
||
export function registerCompletionItemProvider(name: string, shortcut: string, selector: DocumentSelector | null, provider: CompletionItemProvider, triggerCharacters?: string[], priority?: number, allCommitCharacters?: string[]): Disposable
|
||
|
||
/**
|
||
* Register a code action provider.
|
||
*
|
||
* Multiple providers can be registered for a language. In that case providers are asked in
|
||
* parallel and the results are merged. A failing provider (rejected promise or exception) will
|
||
* not cause a failure of the whole operation.
|
||
*
|
||
* @param selector A selector that defines the documents this provider is applicable to.
|
||
* @param provider A code action provider.
|
||
* @param clientId Optional id of language client.
|
||
* @param codeActionKinds Optional supported code action kinds.
|
||
* @return A [disposable](#Disposable) that unregisters this provider when being disposed.
|
||
*/
|
||
export function registerCodeActionProvider(selector: DocumentSelector, provider: CodeActionProvider, clientId: string | undefined, codeActionKinds?: string[]): Disposable
|
||
|
||
/**
|
||
* Register a hover provider.
|
||
*
|
||
* Multiple providers can be registered for a language. In that case providers are asked in
|
||
* parallel and the results are merged. A failing provider (rejected promise or exception) will
|
||
* not cause a failure of the whole operation.
|
||
*
|
||
* @param selector A selector that defines the documents this provider is applicable to.
|
||
* @param provider A hover provider.
|
||
* @return A [disposable](#Disposable) that unregisters this provider when being disposed.
|
||
*/
|
||
export function registerHoverProvider(selector: DocumentSelector, provider: HoverProvider): Disposable
|
||
|
||
/**
|
||
* Register a selection range provider.
|
||
*
|
||
* Multiple providers can be registered for a language. In that case providers are asked in
|
||
* parallel and the results are merged. A failing provider (rejected promise or exception) will
|
||
* not cause a failure of the whole operation.
|
||
*
|
||
* @param selector A selector that defines the documents this provider is applicable to.
|
||
* @param provider A selection range provider.
|
||
* @return A [disposable](#Disposable) that unregisters this provider when being disposed.
|
||
*/
|
||
export function registerSelectionRangeProvider(selector: DocumentSelector, provider: SelectionRangeProvider): Disposable
|
||
|
||
/**
|
||
* Register a signature help provider.
|
||
*
|
||
* Multiple providers can be registered for a language. In that case providers are sorted
|
||
* by their [score](#languages.match) and called sequentially until a provider returns a
|
||
* valid result.
|
||
*
|
||
* @param selector A selector that defines the documents this provider is applicable to.
|
||
* @param provider A signature help provider.
|
||
* @param triggerCharacters Trigger signature help when the user types one of the characters, like `,` or `(`.
|
||
* @param metadata Information about the provider.
|
||
* @return A [disposable](#Disposable) that unregisters this provider when being disposed.
|
||
*/
|
||
export function registerSignatureHelpProvider(selector: DocumentSelector, provider: SignatureHelpProvider, triggerCharacters?: string[]): Disposable
|
||
|
||
/**
|
||
* Register a document symbol provider.
|
||
*
|
||
* Multiple providers can be registered for a language. In that case providers only first provider
|
||
* are asked for result.
|
||
*
|
||
* @param selector A selector that defines the documents this provider is applicable to.
|
||
* @param provider A document symbol provider.
|
||
* @param metadata Optional meta data.
|
||
* @return A [disposable](#Disposable) that unregisters this provider when being disposed.
|
||
*/
|
||
export function registerDocumentSymbolProvider(selector: DocumentSelector, provider: DocumentSymbolProvider, metadata?: DocumentSymbolProviderMetadata): Disposable
|
||
|
||
/**
|
||
* Register a folding range provider.
|
||
*
|
||
* Multiple providers can be registered for a language. In that case providers only first provider
|
||
* are asked for result.
|
||
*
|
||
* A failing provider (rejected promise or exception) will
|
||
* not cause a failure of the whole operation.
|
||
*
|
||
* @param selector A selector that defines the documents this provider is applicable to.
|
||
* @param provider A folding range provider.
|
||
* @return A [disposable](#Disposable) that unregisters this provider when being disposed.
|
||
*/
|
||
export function registerFoldingRangeProvider(selector: DocumentSelector, provider: FoldingRangeProvider): Disposable
|
||
|
||
/**
|
||
* Register a document highlight provider.
|
||
*
|
||
* Multiple providers can be registered for a language. In that case providers are sorted
|
||
* by their [score](#languages.match) and groups sequentially asked for document highlights.
|
||
* The process stops when a provider returns a `non-falsy` or `non-failure` result.
|
||
*
|
||
* @param selector A selector that defines the documents this provider is applicable to.
|
||
* @param provider A document highlight provider.
|
||
* @return A [disposable](#Disposable) that unregisters this provider when being disposed.
|
||
*/
|
||
export function registerDocumentHighlightProvider(selector: DocumentSelector, provider: any): Disposable
|
||
|
||
/**
|
||
* Register a code lens provider.
|
||
*
|
||
* Multiple providers can be registered for a language. In that case providers are asked in
|
||
* parallel and the results are merged. A failing provider (rejected promise or exception) will
|
||
* not cause a failure of the whole operation.
|
||
*
|
||
* @param selector A selector that defines the documents this provider is applicable to.
|
||
* @param provider A code lens provider.
|
||
* @return A [disposable](#Disposable) that unregisters this provider when being disposed.
|
||
*/
|
||
export function registerCodeLensProvider(selector: DocumentSelector, provider: CodeLensProvider): Disposable
|
||
|
||
/**
|
||
* Register a document link provider.
|
||
*
|
||
* Multiple providers can be registered for a language. In that case providers are asked in
|
||
* parallel and the results are merged. A failing provider (rejected promise or exception) will
|
||
* not cause a failure of the whole operation.
|
||
*
|
||
* @param selector A selector that defines the documents this provider is applicable to.
|
||
* @param provider A document link provider.
|
||
* @return A [disposable](#Disposable) that unregisters this provider when being disposed.
|
||
*/
|
||
export function registerDocumentLinkProvider(selector: DocumentSelector, provider: DocumentLinkProvider): Disposable
|
||
|
||
/**
|
||
* Register a color provider.
|
||
*
|
||
* Multiple providers can be registered for a language. In that case providers are asked in
|
||
* parallel and the results are merged. A failing provider (rejected promise or exception) will
|
||
* not cause a failure of the whole operation.
|
||
*
|
||
* @param selector A selector that defines the documents this provider is applicable to.
|
||
* @param provider A color provider.
|
||
* @return A [disposable](#Disposable) that unregisters this provider when being disposed.
|
||
*/
|
||
export function registerDocumentColorProvider(selector: DocumentSelector, provider: DocumentColorProvider): Disposable
|
||
|
||
/**
|
||
* Register a definition provider.
|
||
*
|
||
* Multiple providers can be registered for a language. In that case providers are asked in
|
||
* parallel and the results are merged. A failing provider (rejected promise or exception) will
|
||
* not cause a failure of the whole operation.
|
||
*
|
||
* @param selector A selector that defines the documents this provider is applicable to.
|
||
* @param provider A definition provider.
|
||
* @return A [disposable](#Disposable) that unregisters this provider when being disposed.
|
||
*/
|
||
export function registerDefinitionProvider(selector: DocumentSelector, provider: DefinitionProvider): Disposable
|
||
|
||
/**
|
||
* Register a declaration provider.
|
||
*
|
||
* Multiple providers can be registered for a language. In that case providers are asked in
|
||
* parallel and the results are merged. A failing provider (rejected promise or exception) will
|
||
* not cause a failure of the whole operation.
|
||
*
|
||
* @param selector A selector that defines the documents this provider is applicable to.
|
||
* @param provider A declaration provider.
|
||
* @return A [disposable](#Disposable) that unregisters this provider when being disposed.
|
||
*/
|
||
export function registerDeclarationProvider(selector: DocumentSelector, provider: DeclarationProvider): Disposable
|
||
|
||
|
||
/**
|
||
* Register a type definition provider.
|
||
*
|
||
* Multiple providers can be registered for a language. In that case providers are asked in
|
||
* parallel and the results are merged. A failing provider (rejected promise or exception) will
|
||
* not cause a failure of the whole operation.
|
||
*
|
||
* @param selector A selector that defines the documents this provider is applicable to.
|
||
* @param provider A type definition provider.
|
||
* @return A [disposable](#Disposable) that unregisters this provider when being disposed.
|
||
*/
|
||
export function registerTypeDefinitionProvider(selector: DocumentSelector, provider: TypeDefinitionProvider): Disposable
|
||
|
||
/**
|
||
* Register an implementation provider.
|
||
*
|
||
* Multiple providers can be registered for a language. In that case providers are asked in
|
||
* parallel and the results are merged. A failing provider (rejected promise or exception) will
|
||
* not cause a failure of the whole operation.
|
||
*
|
||
* @param selector A selector that defines the documents this provider is applicable to.
|
||
* @param provider An implementation provider.
|
||
* @return A [disposable](#Disposable) that unregisters this provider when being disposed.
|
||
*/
|
||
export function registerImplementationProvider(selector: DocumentSelector, provider: ImplementationProvider): Disposable
|
||
|
||
/**
|
||
* Register a reference provider.
|
||
*
|
||
* Multiple providers can be registered for a language. In that case providers are asked in
|
||
* parallel and the results are merged. A failing provider (rejected promise or exception) will
|
||
* not cause a failure of the whole operation.
|
||
*
|
||
* @param selector A selector that defines the documents this provider is applicable to.
|
||
* @param provider A reference provider.
|
||
* @return A [disposable](#Disposable) that unregisters this provider when being disposed.
|
||
*/
|
||
export function registerReferencesProvider(selector: DocumentSelector, provider: ReferenceProvider): Disposable
|
||
|
||
/**
|
||
* Register a rename provider.
|
||
*
|
||
* Multiple providers can be registered for a language. In that case providers are sorted
|
||
* by their [score](#workspace.match) and asked in sequence. The first provider producing a result
|
||
* defines the result of the whole operation.
|
||
*
|
||
* @param selector A selector that defines the documents this provider is applicable to.
|
||
* @param provider A rename provider.
|
||
* @return A [disposable](#Disposable) that unregisters this provider when being disposed.
|
||
*/
|
||
export function registerRenameProvider(selector: DocumentSelector, provider: RenameProvider): Disposable
|
||
|
||
/**
|
||
* Register a workspace symbol provider.
|
||
*
|
||
* Multiple providers can be registered. In that case providers are asked in parallel and
|
||
* the results are merged. A failing provider (rejected promise or exception) will not cause
|
||
* a failure of the whole operation.
|
||
*
|
||
* @param provider A workspace symbol provider.
|
||
* @return A [disposable](#Disposable) that unregisters this provider when being disposed.
|
||
*/
|
||
export function registerWorkspaceSymbolProvider(provider: WorkspaceSymbolProvider): Disposable
|
||
|
||
/**
|
||
* Register a formatting provider for a document.
|
||
*
|
||
* Multiple providers can be registered for a language. In that case providers are sorted
|
||
* by their priority. Failure of the selected provider will cause a failure of the whole operation.
|
||
*
|
||
* @param selector A selector that defines the documents this provider is applicable to.
|
||
* @param provider A document formatting edit provider.
|
||
* @param priority default to 0.
|
||
* @return A [disposable](#Disposable) that unregisters this provider when being disposed.
|
||
*/
|
||
export function registerDocumentFormatProvider(selector: DocumentSelector, provider: DocumentFormattingEditProvider, priority?: number): Disposable
|
||
|
||
/**
|
||
* Register a formatting provider for a document range.
|
||
*
|
||
* *Note:* A document range provider is also a [document formatter](#DocumentFormattingEditProvider)
|
||
* which means there is no need to [register](#languages.registerDocumentFormattingEditProvider) a document
|
||
* formatter when also registering a range provider.
|
||
*
|
||
* Multiple providers can be registered for a language. In that case provider with highest priority is used.
|
||
* Failure of the selected provider will cause a failure of the whole operation.
|
||
*
|
||
* @param selector A selector that defines the documents this provider is applicable to.
|
||
* @param provider A document range formatting edit provider.
|
||
* @param priority default to 0.
|
||
* @return A [disposable](#Disposable) that unregisters this provider when being disposed.
|
||
*/
|
||
export function registerDocumentRangeFormatProvider(selector: DocumentSelector, provider: DocumentRangeFormattingEditProvider, priority?: number): Disposable
|
||
|
||
/**
|
||
* Register a call hierarchy provider.
|
||
*
|
||
* @param selector A selector that defines the documents this provider is applicable to.
|
||
* @param provider A call hierarchy provider.
|
||
* @return A {@link Disposable} that unregisters this provider when being disposed.
|
||
*/
|
||
export function registerCallHierarchyProvider(selector: DocumentSelector, provider: CallHierarchyProvider): Disposable
|
||
|
||
/**
|
||
* Register a semantic tokens provider for a whole document.
|
||
*
|
||
* Multiple providers can be registered for a language. In that case providers are sorted
|
||
* by their {@link languages.match score} and the best-matching provider is used. Failure
|
||
* of the selected provider will cause a failure of the whole operation.
|
||
*
|
||
* @param selector A selector that defines the documents this provider is applicable to.
|
||
* @param provider A document semantic tokens provider.
|
||
* @return A {@link Disposable} that unregisters this provider when being disposed.
|
||
*/
|
||
export function registerDocumentSemanticTokensProvider(selector: DocumentSelector, provider: DocumentSemanticTokensProvider, legend: SemanticTokensLegend): Disposable
|
||
|
||
/**
|
||
* Register a semantic tokens provider for a document range.
|
||
*
|
||
* *Note:* If a document has both a `DocumentSemanticTokensProvider` and a `DocumentRangeSemanticTokensProvider`,
|
||
* the range provider will be invoked only initially, for the time in which the full document provider takes
|
||
* to resolve the first request. Once the full document provider resolves the first request, the semantic tokens
|
||
* provided via the range provider will be discarded and from that point forward, only the document provider
|
||
* will be used.
|
||
*
|
||
* Multiple providers can be registered for a language. In that case providers are sorted
|
||
* by their {@link languages.match score} and the best-matching provider is used. Failure
|
||
* of the selected provider will cause a failure of the whole operation.
|
||
*
|
||
* @param selector A selector that defines the documents this provider is applicable to.
|
||
* @param provider A document range semantic tokens provider.
|
||
* @return A {@link Disposable} that unregisters this provider when being disposed.
|
||
*/
|
||
export function registerDocumentRangeSemanticTokensProvider(selector: DocumentSelector, provider: DocumentRangeSemanticTokensProvider, legend: SemanticTokensLegend): Disposable
|
||
|
||
/**
|
||
* Register a linked editing range provider.
|
||
*
|
||
* Multiple providers can be registered for a language. In that case providers are sorted
|
||
* by their {@link languages.match score} and the best-matching provider that has a result is used. Failure
|
||
* of the selected provider will cause a failure of the whole operation.
|
||
*
|
||
* @param selector A selector that defines the documents this provider is applicable to.
|
||
* @param provider A linked editing range provider.
|
||
* @return A {@link Disposable} that unregisters this provider when being disposed.
|
||
*/
|
||
export function registerLinkedEditingRangeProvider(selector: DocumentSelector, provider: LinkedEditingRangeProvider): Disposable
|
||
|
||
/**
|
||
* Register a inlay hints provider.
|
||
*
|
||
* Multiple providers can be registered for a language. In that case providers are asked in
|
||
* parallel and the results are merged. A failing provider (rejected promise or exception) will
|
||
* not cause a failure of the whole operation.
|
||
*
|
||
* @param selector A selector that defines the documents this provider is applicable to.
|
||
* @param provider An inlay hints provider.
|
||
* @return A {@link Disposable} that unregisters this provider when being disposed.
|
||
*/
|
||
export function registerInlayHintsProvider(selector: DocumentSelector, provider: InlayHintsProvider): Disposable
|
||
}
|
||
// }}
|
||
|
||
// services module {{
|
||
export enum ServiceStat {
|
||
Initial,
|
||
Starting,
|
||
StartFailed,
|
||
Running,
|
||
Stopping,
|
||
Stopped,
|
||
}
|
||
|
||
export interface IServiceProvider {
|
||
// unique service id
|
||
id: string
|
||
name: string
|
||
client?: LanguageClient
|
||
selector: DocumentSelector
|
||
// current state
|
||
state: ServiceStat
|
||
start(): Promise<void>
|
||
dispose(): void
|
||
stop(): Promise<void> | void
|
||
restart(): Promise<void> | void
|
||
onServiceReady: Event<void>
|
||
}
|
||
|
||
export namespace services {
|
||
/**
|
||
* Register languageClient as service provider.
|
||
*/
|
||
export function registLanguageClient(client: LanguageClient): Disposable
|
||
/**
|
||
* Register service, nothing happens when `service.id` already exists.
|
||
*/
|
||
export function regist(service: IServiceProvider): Disposable
|
||
/**
|
||
* Get service by id.
|
||
*/
|
||
export function getService(id: string): IServiceProvider
|
||
/**
|
||
* Stop service by id.
|
||
*/
|
||
export function stop(id: string): Promise<void>
|
||
/**
|
||
* Stop running service or start stopped service.
|
||
*/
|
||
export function toggle(id: string): Promise<void>
|
||
}
|
||
// }}
|
||
|
||
// sources module {{
|
||
/**
|
||
* Source options to create source that could respect configuration from `coc.source.{name}`
|
||
*/
|
||
export type SourceConfig = Omit<ISource, 'shortcut' | 'priority' | 'triggerOnly' | 'triggerCharacters' | 'triggerPatterns' | 'enable' | 'filetypes' | 'disableSyntaxes'>
|
||
|
||
export interface SourceStat {
|
||
name: string
|
||
priority: number
|
||
triggerCharacters: string[]
|
||
type: 'native' | 'remote' | 'service'
|
||
shortcut: string
|
||
filepath: string
|
||
disabled: boolean
|
||
filetypes: string[]
|
||
}
|
||
|
||
export enum SourceType {
|
||
Native,
|
||
Remote,
|
||
Service,
|
||
}
|
||
|
||
export interface CompleteResult {
|
||
items: VimCompleteItem[]
|
||
isIncomplete?: boolean
|
||
startcol?: number
|
||
source?: string
|
||
priority?: number
|
||
}
|
||
|
||
// option on complete & should_complete
|
||
export interface CompleteOption {
|
||
/**
|
||
* Current buffer number.
|
||
*/
|
||
readonly bufnr: number
|
||
/**
|
||
* Current line.
|
||
*/
|
||
readonly line: string
|
||
/**
|
||
* Column to start completion, determined by iskeyword options of buffer.
|
||
*/
|
||
readonly col: number
|
||
/**
|
||
* Input text.
|
||
*/
|
||
readonly input: string
|
||
readonly filetype: string
|
||
readonly filepath: string
|
||
/**
|
||
* Word under cursor.
|
||
*/
|
||
readonly word: string
|
||
/**
|
||
* Trigger character, could be empty string.
|
||
*/
|
||
readonly triggerCharacter: string
|
||
/**
|
||
* Col of cursor, 1 based.
|
||
*/
|
||
readonly colnr: number
|
||
readonly linenr: number
|
||
readonly synname: string
|
||
/**
|
||
* Black list words specified by user.
|
||
*/
|
||
readonly blacklist: string[]
|
||
/**
|
||
* Buffer changetick
|
||
*/
|
||
readonly changedtick: number
|
||
/**
|
||
* Is trigger for in complete completion.
|
||
*/
|
||
readonly triggerForInComplete?: boolean
|
||
}
|
||
|
||
export interface ISource {
|
||
/**
|
||
* Identifier name
|
||
*/
|
||
name: string
|
||
/**
|
||
* @deprecated use documentSelector instead.
|
||
*/
|
||
filetypes?: string[]
|
||
/**
|
||
* Filters of document.
|
||
*/
|
||
documentSelector?: DocumentSelector
|
||
enable?: boolean
|
||
shortcut?: string
|
||
priority?: number
|
||
sourceType?: SourceType
|
||
/**
|
||
* Should only be used when completion is triggered, requirs `triggerPatterns` or `triggerCharacters` defined.
|
||
*/
|
||
triggerOnly?: boolean
|
||
triggerCharacters?: string[]
|
||
// regex to detect trigger completion, ignored when triggerCharacters exists.
|
||
triggerPatterns?: RegExp[]
|
||
disableSyntaxes?: string[]
|
||
filepath?: string
|
||
// should the first character always match
|
||
firstMatch?: boolean
|
||
refresh?(): Promise<void>
|
||
/**
|
||
* For disable/enable
|
||
*/
|
||
toggle?(): void
|
||
|
||
/**
|
||
* Triggered on BufEnter, used for cache normally
|
||
*/
|
||
onEnter?(bufnr: number): void
|
||
|
||
/**
|
||
* Check if this source should doComplete
|
||
*
|
||
* @public
|
||
* @param {CompleteOption} opt
|
||
* @returns {Promise<boolean> }
|
||
*/
|
||
shouldComplete?(opt: CompleteOption): Promise<boolean>
|
||
|
||
/**
|
||
* Run completion
|
||
*
|
||
* @public
|
||
* @param {CompleteOption} opt
|
||
* @param {CancellationToken} token
|
||
* @returns {Promise<CompleteResult | null>}
|
||
*/
|
||
doComplete(opt: CompleteOption, token: CancellationToken): ProviderResult<CompleteResult>
|
||
|
||
/**
|
||
* Action for complete item on complete item selected
|
||
*
|
||
* @public
|
||
* @param {VimCompleteItem} item
|
||
* @param {CancellationToken} token
|
||
* @returns {Promise<void>}
|
||
*/
|
||
onCompleteResolve?(item: VimCompleteItem, token: CancellationToken): ProviderResult<void>
|
||
|
||
/**
|
||
* Action for complete item on complete done
|
||
*
|
||
* @public
|
||
* @param {VimCompleteItem} item
|
||
* @returns {Promise<void>}
|
||
*/
|
||
onCompleteDone?(item: VimCompleteItem, opt: CompleteOption): ProviderResult<void>
|
||
|
||
shouldCommit?(item: VimCompleteItem, character: string): boolean
|
||
}
|
||
|
||
export namespace sources {
|
||
/**
|
||
* Names of registered sources.
|
||
*/
|
||
export const names: ReadonlyArray<string>
|
||
export const sources: ReadonlyArray<ISource>
|
||
/**
|
||
* Check if source exists by name.
|
||
*/
|
||
export function has(name: string): boolean
|
||
/**
|
||
* Get source by name.
|
||
*/
|
||
export function getSource(name: string): ISource | null
|
||
|
||
/**
|
||
* Add source to sources list.
|
||
*
|
||
* Note: Use `sources.createSource()` for regist new source is recommended for
|
||
* user configuration support.
|
||
*/
|
||
export function addSource(source: ISource): Disposable
|
||
|
||
/**
|
||
* Create source by source config, configurations starts with `coc.source.{name}`
|
||
* are automatically supported.
|
||
*
|
||
* `name` and `doComplete()` must be provided in config.
|
||
*/
|
||
export function createSource(config: SourceConfig): Disposable
|
||
|
||
/**
|
||
* Get list of all source stats.
|
||
*/
|
||
export function sourceStats(): SourceStat[]
|
||
|
||
/**
|
||
* Call refresh for _name_ source or all sources.
|
||
*/
|
||
export function refresh(name?: string): Promise<void>
|
||
|
||
/**
|
||
* Toggle state of _name_ source.
|
||
*/
|
||
export function toggleSource(name: string): void
|
||
|
||
/**
|
||
* Remove source by name.
|
||
*/
|
||
export function removeSource(name: string): void
|
||
}
|
||
// }}
|
||
|
||
// TreeView related {{
|
||
export interface TreeItemLabel {
|
||
label: string
|
||
highlights?: [number, number][]
|
||
}
|
||
|
||
export interface TreeItemIcon {
|
||
text: string
|
||
hlGroup: string
|
||
}
|
||
|
||
/**
|
||
* Collapsible state of the tree item
|
||
*/
|
||
export enum TreeItemCollapsibleState {
|
||
/**
|
||
* Determines an item can be neither collapsed nor expanded. Implies it has no children.
|
||
*/
|
||
None = 0,
|
||
/**
|
||
* Determines an item is collapsed
|
||
*/
|
||
Collapsed = 1,
|
||
/**
|
||
* Determines an item is expanded
|
||
*/
|
||
Expanded = 2
|
||
}
|
||
|
||
export class TreeItem {
|
||
/**
|
||
* A human-readable string describing this item. When `falsy`, it is derived from {@link TreeItem.resourceUri resourceUri}.
|
||
*/
|
||
label?: string | TreeItemLabel
|
||
|
||
/**
|
||
* Description rendered less prominently after label.
|
||
*/
|
||
description?: string
|
||
|
||
/**
|
||
* The icon path or {@link ThemeIcon} for the tree item.
|
||
* When `falsy`, {@link ThemeIcon.Folder Folder Theme Icon} is assigned, if item is collapsible otherwise {@link ThemeIcon.File File Theme Icon}.
|
||
* When a file or folder {@link ThemeIcon} is specified, icon is derived from the current file icon theme for the specified theme icon using {@link TreeItem.resourceUri resourceUri} (if provided).
|
||
*/
|
||
icon?: TreeItemIcon
|
||
|
||
/**
|
||
* Optional id for the tree item that has to be unique across tree. The id is used to preserve the selection and expansion state of the tree item.
|
||
*
|
||
* If not provided, an id is generated using the tree item's resourceUri when exists. **Note** that when labels change, ids will change and that selection and expansion state cannot be kept stable anymore.
|
||
*/
|
||
id?: string
|
||
|
||
/**
|
||
* The {@link Uri} of the resource representing this item.
|
||
*
|
||
* Will be used to derive the {@link TreeItem.label label}, when it is not provided.
|
||
* Will be used to derive the icon from current file icon theme, when {@link TreeItem.iconPath iconPath} has {@link ThemeIcon} value.
|
||
*/
|
||
resourceUri?: Uri
|
||
|
||
/**
|
||
* The tooltip text when you hover over this item.
|
||
*/
|
||
tooltip?: string | MarkupContent
|
||
|
||
/**
|
||
* The {@link Command} that should be executed when the tree item is selected.
|
||
*
|
||
* Please use `vscode.open` or `vscode.diff` as command IDs when the tree item is opening
|
||
* something in the editor. Using these commands ensures that the resulting editor will
|
||
* appear consistent with how other built-in trees open editors.
|
||
*/
|
||
command?: Command
|
||
|
||
/**
|
||
* {@link TreeItemCollapsibleState} of the tree item.
|
||
*/
|
||
collapsibleState?: TreeItemCollapsibleState
|
||
|
||
/**
|
||
* @param label A human-readable string describing this item
|
||
* @param collapsibleState {@link TreeItemCollapsibleState} of the tree item. Default is {@link TreeItemCollapsibleState.None}
|
||
*/
|
||
constructor(label: string | TreeItemLabel, collapsibleState?: TreeItemCollapsibleState)
|
||
|
||
/**
|
||
* @param resourceUri The {@link Uri} of the resource representing this item.
|
||
* @param collapsibleState {@link TreeItemCollapsibleState} of the tree item. Default is {@link TreeItemCollapsibleState.None}
|
||
*/
|
||
constructor(resourceUri: Uri, collapsibleState?: TreeItemCollapsibleState)
|
||
}
|
||
|
||
/**
|
||
* Action resolved by {@link TreeDataProvider}
|
||
*/
|
||
export interface TreeItemAction<T> {
|
||
/**
|
||
* Label text in menu.
|
||
*/
|
||
title: string
|
||
handler: (item: T) => ProviderResult<void>
|
||
}
|
||
|
||
/**
|
||
* Options for creating a {@link TreeView}
|
||
*/
|
||
export interface TreeViewOptions<T> {
|
||
/**
|
||
* bufhidden option for TreeView, default to 'wipe'
|
||
*/
|
||
bufhidden?: 'hide' | 'unload' | 'delete' | 'wipe'
|
||
/**
|
||
* Fixed width for window, default to true
|
||
*/
|
||
winfixwidth?: boolean
|
||
/**
|
||
* Enable filter feature, default to false
|
||
*/
|
||
enableFilter?: boolean
|
||
/**
|
||
* Disable indent of leaves without children, default to false
|
||
*/
|
||
disableLeafIndent?: boolean
|
||
/**
|
||
* A data provider that provides tree data.
|
||
*/
|
||
treeDataProvider: TreeDataProvider<T>
|
||
/**
|
||
* Whether the tree supports multi-select. When the tree supports multi-select and a command is executed from the tree,
|
||
* the first argument to the command is the tree item that the command was executed on and the second argument is an
|
||
* array containing all selected tree items.
|
||
*/
|
||
canSelectMany?: boolean
|
||
}
|
||
|
||
/**
|
||
* The event that is fired when an element in the {@link TreeView} is expanded or collapsed
|
||
*/
|
||
export interface TreeViewExpansionEvent<T> {
|
||
|
||
/**
|
||
* Element that is expanded or collapsed.
|
||
*/
|
||
readonly element: T
|
||
|
||
}
|
||
|
||
/**
|
||
* The event that is fired when there is a change in {@link TreeView.selection tree view's selection}
|
||
*/
|
||
export interface TreeViewSelectionChangeEvent<T> {
|
||
|
||
/**
|
||
* Selected elements.
|
||
*/
|
||
readonly selection: T[]
|
||
|
||
}
|
||
|
||
/**
|
||
* The event that is fired when there is a change in {@link TreeView.visible tree view's visibility}
|
||
*/
|
||
export interface TreeViewVisibilityChangeEvent {
|
||
|
||
/**
|
||
* `true` if the {@link TreeView tree view} is visible otherwise `false`.
|
||
*/
|
||
readonly visible: boolean
|
||
|
||
}
|
||
|
||
/**
|
||
* Represents a Tree view
|
||
*/
|
||
export interface TreeView<T> extends Disposable {
|
||
|
||
/**
|
||
* Event that is fired when an element is expanded
|
||
*/
|
||
readonly onDidExpandElement: Event<TreeViewExpansionEvent<T>>
|
||
|
||
/**
|
||
* Event that is fired when an element is collapsed
|
||
*/
|
||
readonly onDidCollapseElement: Event<TreeViewExpansionEvent<T>>
|
||
|
||
/**
|
||
* Currently selected elements.
|
||
*/
|
||
readonly selection: T[]
|
||
|
||
/**
|
||
* Event that is fired when the {@link TreeView.selection selection} has changed
|
||
*/
|
||
readonly onDidChangeSelection: Event<TreeViewSelectionChangeEvent<T>>
|
||
|
||
/**
|
||
* Event that is fired when {@link TreeView.visible visibility} has changed
|
||
*/
|
||
readonly onDidChangeVisibility: Event<TreeViewVisibilityChangeEvent>
|
||
|
||
/**
|
||
* `true` if the {@link TreeView tree view} is visible otherwise `false`.
|
||
*
|
||
* **NOTE:** is `true` when TreeView visible on other tab.
|
||
*/
|
||
readonly visible: boolean
|
||
|
||
/**
|
||
* Window id used by TreeView.
|
||
*/
|
||
readonly windowId: number | undefined
|
||
|
||
/**
|
||
* An optional human-readable message that will be rendered in the view.
|
||
* Setting the message to null, undefined, or empty string will remove the message from the view.
|
||
*/
|
||
message?: string
|
||
|
||
/**
|
||
* The tree view title is initially taken from viewId of TreeView
|
||
* Changes to the title property will be properly reflected in the UI in the title of the view.
|
||
*/
|
||
title?: string
|
||
|
||
/**
|
||
* An optional human-readable description which is rendered less prominently in the title of the view.
|
||
* Setting the title description to null, undefined, or empty string will remove the description from the view.
|
||
*/
|
||
description?: string
|
||
|
||
/**
|
||
* Reveals the given element in the tree view.
|
||
* If the tree view is not visible then the tree view is shown and element is revealed.
|
||
*
|
||
* By default revealed element is selected.
|
||
* In order to not to select, set the option `select` to `false`.
|
||
* In order to focus, set the option `focus` to `true`.
|
||
* In order to expand the revealed element, set the option `expand` to `true`. To expand recursively set `expand` to the number of levels to expand.
|
||
* **NOTE:** You can expand only to 3 levels maximum.
|
||
*
|
||
* **NOTE:** The {@link TreeDataProvider} that the `TreeView` {@link window.createTreeView is registered with} with must implement {@link TreeDataProvider.getParent getParent} method to access this API.
|
||
*/
|
||
reveal(element: T, options?: { select?: boolean, focus?: boolean, expand?: boolean | number }): Thenable<void>
|
||
|
||
/**
|
||
* Create tree view in new window.
|
||
*
|
||
* **NOTE:** TreeView with same viewId in current tab would be disposed.
|
||
*
|
||
* @param splitCommand The command to open TreeView window, default to 'belowright 30vs'
|
||
* @return `true` if window shown.
|
||
*/
|
||
show(splitCommand?: string): Promise<boolean>
|
||
}
|
||
|
||
/**
|
||
* A data provider that provides tree data
|
||
*/
|
||
export interface TreeDataProvider<T> {
|
||
/**
|
||
* An optional event to signal that an element or root has changed.
|
||
* This will trigger the view to update the changed element/root and its children recursively (if shown).
|
||
* To signal that root has changed, do not pass any argument or pass `undefined` or `null`.
|
||
*/
|
||
onDidChangeTreeData?: Event<T | undefined | null | void>
|
||
|
||
/**
|
||
* Get {@link TreeItem} representation of the `element`
|
||
*
|
||
* @param element The element for which {@link TreeItem} representation is asked for.
|
||
* @return {@link TreeItem} representation of the element
|
||
*/
|
||
getTreeItem(element: T): TreeItem | Thenable<TreeItem>
|
||
|
||
/**
|
||
* Get the children of `element` or root if no element is passed.
|
||
*
|
||
* @param element The element from which the provider gets children. Can be `undefined`.
|
||
* @return Children of `element` or root if no element is passed.
|
||
*/
|
||
getChildren(element?: T): ProviderResult<T[]>
|
||
|
||
/**
|
||
* Optional method to return the parent of `element`.
|
||
* Return `null` or `undefined` if `element` is a child of root.
|
||
*
|
||
* **NOTE:** This method should be implemented in order to access {@link TreeView.reveal reveal} API.
|
||
*
|
||
* @param element The element for which the parent has to be returned.
|
||
* @return Parent of `element`.
|
||
*/
|
||
getParent?(element: T): ProviderResult<T>
|
||
|
||
/**
|
||
* Called on hover to resolve the {@link TreeItem.tooltip TreeItem} property if it is undefined.
|
||
* Called on tree item click/open to resolve the {@link TreeItem.command TreeItem} property if it is undefined.
|
||
* Only properties that were undefined can be resolved in `resolveTreeItem`.
|
||
* Functionality may be expanded later to include being called to resolve other missing
|
||
* properties on selection and/or on open.
|
||
*
|
||
* Will only ever be called once per TreeItem.
|
||
*
|
||
* onDidChangeTreeData should not be triggered from within resolveTreeItem.
|
||
*
|
||
* *Note* that this function is called when tree items are already showing in the UI.
|
||
* Because of that, no property that changes the presentation (label, description, etc.)
|
||
* can be changed.
|
||
*
|
||
* @param item Undefined properties of `item` should be set then `item` should be returned.
|
||
* @param element The object associated with the TreeItem.
|
||
* @param token A cancellation token.
|
||
* @return The resolved tree item or a thenable that resolves to such. It is OK to return the given
|
||
* `item`. When no result is returned, the given `item` will be used.
|
||
*/
|
||
resolveTreeItem?(item: TreeItem, element: T, token: CancellationToken): ProviderResult<TreeItem>
|
||
|
||
/**
|
||
* Called with current element to resolve actions.
|
||
* Called when user press 'actions' key.
|
||
*
|
||
* @param item Resolved item.
|
||
* @param element The object under cursor.
|
||
*/
|
||
resolveActions?(item: TreeItem, element: T): ProviderResult<TreeItemAction<T>[]>
|
||
}
|
||
// }}
|
||
|
||
// workspace module {{
|
||
/**
|
||
* An event describing the change in Configuration
|
||
*/
|
||
export interface ConfigurationChangeEvent {
|
||
|
||
/**
|
||
* Returns `true` if the given section for the given resource (if provided) is affected.
|
||
*
|
||
* @param section Configuration name, supports _dotted_ names.
|
||
* @param resource A resource URI.
|
||
* @return `true` if the given section for the given resource (if provided) is affected.
|
||
*/
|
||
affectsConfiguration(section: string, resource?: string): boolean
|
||
}
|
||
|
||
export interface WillSaveEvent extends TextDocumentWillSaveEvent {
|
||
/**
|
||
* Allows to pause the event loop and to apply [pre-save-edits](#TextEdit).
|
||
* Edits of subsequent calls to this function will be applied in order. The
|
||
* edits will be *ignored* if concurrent modifications of the document happened.
|
||
*
|
||
* *Note:* This function can only be called during event dispatch and not
|
||
* in an asynchronous manner:
|
||
*
|
||
* ```ts
|
||
* workspace.onWillSaveTextDocument(event => {
|
||
* // async, will *throw* an error
|
||
* setTimeout(() => event.waitUntil(promise));
|
||
*
|
||
* // sync, OK
|
||
* event.waitUntil(promise);
|
||
* })
|
||
* ```
|
||
*
|
||
* @param thenable A thenable that resolves to [pre-save-edits](#TextEdit).
|
||
*/
|
||
waitUntil(thenable: Thenable<TextEdit[] | any>): void
|
||
}
|
||
|
||
export interface KeymapOption {
|
||
/**
|
||
* Use request instead of notify, default true
|
||
*/
|
||
sync: boolean
|
||
/**
|
||
* Cancel completion before invoke callback, default true
|
||
*/
|
||
cancel: boolean
|
||
/**
|
||
* Use <silent> for keymap, default false
|
||
*/
|
||
silent: boolean
|
||
/**
|
||
* Enable repeat support for repeat.vim, default false
|
||
*/
|
||
repeat: boolean
|
||
}
|
||
|
||
export interface DidChangeTextDocumentParams {
|
||
/**
|
||
* The document that did change. The version number points
|
||
* to the version after all provided content changes have
|
||
* been applied.
|
||
*/
|
||
readonly textDocument: {
|
||
version: number
|
||
uri: string
|
||
}
|
||
/**
|
||
* The actual content changes. The content changes describe single state changes
|
||
* to the document. So if there are two content changes c1 (at array index 0) and
|
||
* c2 (at array index 1) for a document in state S then c1 moves the document from
|
||
* S to S' and c2 from S' to S''. So c1 is computed on the state S and c2 is computed
|
||
* on the state S'.
|
||
*/
|
||
readonly contentChanges: ReadonlyArray<TextDocumentContentChange>
|
||
/**
|
||
* Buffer number of document.
|
||
*/
|
||
readonly bufnr: number
|
||
/**
|
||
* Original content before change
|
||
*/
|
||
readonly original: string
|
||
/**
|
||
* Original lines before change
|
||
*/
|
||
readonly originalLines: ReadonlyArray<string>
|
||
}
|
||
|
||
export interface EditerState {
|
||
document: LinesTextDocument
|
||
position: Position
|
||
}
|
||
|
||
export type MapMode = 'n' | 'i' | 'v' | 'x' | 's' | 'o'
|
||
|
||
export interface Autocmd {
|
||
/**
|
||
* Vim event or event set.
|
||
*/
|
||
event: string | string[]
|
||
/**
|
||
* Callback functions that called with evaled arguments.
|
||
*/
|
||
callback: Function
|
||
/**
|
||
* Match pattern, default to `*`.
|
||
*/
|
||
pattern?: string
|
||
/**
|
||
* Vim expression that eval to arguments of callback, default to `[]`
|
||
*/
|
||
arglist?: string[]
|
||
/**
|
||
* Use request when `true`, use notification by default.
|
||
*/
|
||
request?: boolean
|
||
/**
|
||
* `this` of callback.
|
||
*/
|
||
thisArg?: any
|
||
}
|
||
|
||
export interface Env {
|
||
/**
|
||
* |completeopt| option of (neo)vim.
|
||
*/
|
||
readonly completeOpt: string
|
||
/**
|
||
* |runtimepath| option of (neo)vim.
|
||
*/
|
||
readonly runtimepath: string
|
||
/**
|
||
* |guicursor| option of (neo)vim
|
||
*/
|
||
readonly guicursor: string
|
||
/**
|
||
* Could use float window on neovim, always false on vim.
|
||
*/
|
||
readonly floating: boolean
|
||
/**
|
||
* |sign_place()| and |sign_unplace()| can be used when true.
|
||
*/
|
||
readonly sign: boolean
|
||
/**
|
||
* Root directory of extensions.
|
||
*/
|
||
readonly extensionRoot: string
|
||
/**
|
||
* Process id of (neo)vim.
|
||
*/
|
||
readonly pid: number
|
||
/**
|
||
* Total columns of screen.
|
||
*/
|
||
readonly columns: number
|
||
/**
|
||
* Total lines of screen.
|
||
*/
|
||
readonly lines: number
|
||
/**
|
||
* Is true when |CompleteChanged| event is supported.
|
||
*/
|
||
readonly pumevent: boolean
|
||
/**
|
||
* |cmdheight| option of (neo)vim.
|
||
*/
|
||
readonly cmdheight: number
|
||
/**
|
||
* Value of |g:coc_filetype_map|
|
||
*/
|
||
readonly filetypeMap: { [index: string]: string }
|
||
/**
|
||
* Is true when not using neovim.
|
||
*/
|
||
readonly isVim: boolean
|
||
/**
|
||
* Is cygvim when true.
|
||
*/
|
||
readonly isCygwin: boolean
|
||
/**
|
||
* Is macvim when true.
|
||
*/
|
||
readonly isMacvim: boolean
|
||
/**
|
||
* Is true when iTerm.app is used on mac.
|
||
*/
|
||
readonly isiTerm: boolean
|
||
/**
|
||
* version of (neo)vim, on vim it's like: 8020750, on neoivm it's like: 0.5.0
|
||
*/
|
||
readonly version: string
|
||
/**
|
||
* |v:progpath| value, could be empty.
|
||
*/
|
||
readonly progpath: string
|
||
/**
|
||
* Is true when dialog feature is supported, which need vim >= 8.2.750 or neovim >= 0.4.0
|
||
*/
|
||
readonly dialog: boolean
|
||
/**
|
||
* Is true when vim's textprop is supported.
|
||
*/
|
||
readonly textprop: boolean
|
||
}
|
||
|
||
/**
|
||
* Store & retrieve most recent used items.
|
||
*/
|
||
export interface Mru {
|
||
/**
|
||
* Load iems from mru file
|
||
*/
|
||
|
||
load(): Promise<string[]>
|
||
/**
|
||
* Add item to mru file.
|
||
*/
|
||
add(item: string): Promise<void>
|
||
|
||
/**
|
||
* Remove item from mru file.
|
||
*/
|
||
|
||
remove(item: string): Promise<void>
|
||
|
||
/**
|
||
* Remove the data file.
|
||
*/
|
||
clean(): Promise<void>
|
||
}
|
||
|
||
/**
|
||
* Option to create task that runs in (neo)vim.
|
||
*/
|
||
export interface TaskOptions {
|
||
/**
|
||
* The command to run, without arguments
|
||
*/
|
||
cmd: string
|
||
/**
|
||
* Arguments of command.
|
||
*/
|
||
args?: string[]
|
||
/**
|
||
* Current working directory of the task, Default to current vim's cwd.
|
||
*/
|
||
cwd?: string
|
||
/**
|
||
* Additional environment key-value pairs.
|
||
*/
|
||
env?: { [key: string]: string }
|
||
/**
|
||
* Use pty when true.
|
||
*/
|
||
pty?: boolean
|
||
/**
|
||
* Detach child process when true.
|
||
*/
|
||
detach?: boolean
|
||
}
|
||
|
||
/**
|
||
* Controls long running task started by (neo)vim.
|
||
* Useful to keep the task running after CocRestart.
|
||
*/
|
||
export interface Task extends Disposable {
|
||
/**
|
||
* Fired on task exit with exit code.
|
||
*/
|
||
onExit: Event<number>
|
||
/**
|
||
* Fired with lines on stdout received.
|
||
*/
|
||
onStdout: Event<string[]>
|
||
/**
|
||
* Fired with lines on stderr received.
|
||
*/
|
||
onStderr: Event<string[]>
|
||
/**
|
||
* Start task, task will be restarted when already running.
|
||
*
|
||
* @param {TaskOptions} opts
|
||
* @returns {Promise<boolean>}
|
||
*/
|
||
start(opts: TaskOptions): Promise<boolean>
|
||
/**
|
||
* Stop task by SIGTERM or SIGKILL
|
||
*/
|
||
stop(): Promise<void>
|
||
/**
|
||
* Check if the task is running.
|
||
*/
|
||
running: Promise<boolean>
|
||
}
|
||
|
||
/**
|
||
* A simple json database.
|
||
*/
|
||
export interface JsonDB {
|
||
filepath: string
|
||
/**
|
||
* Get data by key.
|
||
*
|
||
* @param {string} key unique key allows dot notation.
|
||
* @returns {any}
|
||
*/
|
||
fetch(key: string): any
|
||
/**
|
||
* Check if key exists
|
||
*
|
||
* @param {string} key unique key allows dot notation.
|
||
*/
|
||
exists(key: string): boolean
|
||
/**
|
||
* Delete data by key
|
||
*
|
||
* @param {string} key unique key allows dot notation.
|
||
*/
|
||
delete(key: string): void
|
||
/**
|
||
* Save data with key
|
||
*/
|
||
push(key: string, data: number | null | boolean | string | { [index: string]: any }): void
|
||
/**
|
||
* Empty db file.
|
||
*/
|
||
clear(): void
|
||
/**
|
||
* Remove db file.
|
||
*/
|
||
destroy(): void
|
||
}
|
||
|
||
export interface RenameEvent {
|
||
oldUri: Uri
|
||
newUri: Uri
|
||
}
|
||
|
||
export interface FileSystemWatcher {
|
||
readonly ignoreCreateEvents: boolean
|
||
readonly ignoreChangeEvents: boolean
|
||
readonly ignoreDeleteEvents: boolean
|
||
readonly onDidCreate: Event<Uri>
|
||
readonly onDidChange: Event<Uri>
|
||
readonly onDidDelete: Event<Uri>
|
||
readonly onDidRename: Event<RenameEvent>
|
||
dispose(): void
|
||
}
|
||
|
||
export interface ConfigurationInspect<T> {
|
||
key: string
|
||
defaultValue?: T
|
||
globalValue?: T
|
||
workspaceValue?: T
|
||
}
|
||
|
||
export interface WorkspaceConfiguration {
|
||
/**
|
||
* Return a value from this configuration.
|
||
*
|
||
* @param section Configuration name, supports _dotted_ names.
|
||
* @return The value `section` denotes or `undefined`.
|
||
*/
|
||
get<T>(section: string): T | undefined
|
||
|
||
/**
|
||
* Return a value from this configuration.
|
||
*
|
||
* @param section Configuration name, supports _dotted_ names.
|
||
* @param defaultValue A value should be returned when no value could be found, is `undefined`.
|
||
* @return The value `section` denotes or the default.
|
||
*/
|
||
get<T>(section: string, defaultValue: T): T
|
||
|
||
/**
|
||
* Check if this configuration has a certain value.
|
||
*
|
||
* @param section Configuration name, supports _dotted_ names.
|
||
* @return `true` if the section doesn't resolve to `undefined`.
|
||
*/
|
||
has(section: string): boolean
|
||
|
||
/**
|
||
* Retrieve all information about a configuration setting. A configuration value
|
||
* often consists of a *default* value, a global or installation-wide value,
|
||
* a workspace-specific value
|
||
*
|
||
* *Note:* The configuration name must denote a leaf in the configuration tree
|
||
* (`editor.fontSize` vs `editor`) otherwise no result is returned.
|
||
*
|
||
* @param section Configuration name, supports _dotted_ names.
|
||
* @return Information about a configuration setting or `undefined`.
|
||
*/
|
||
inspect<T>(section: string): ConfigurationInspect<T> | undefined
|
||
/**
|
||
* Update a configuration value. The updated configuration values are persisted.
|
||
*
|
||
*
|
||
* @param section Configuration name, supports _dotted_ names.
|
||
* @param value The new value.
|
||
* @param isUser if true, always update user configuration
|
||
*/
|
||
update(section: string, value: any, isUser?: boolean): void
|
||
|
||
/**
|
||
* Readable dictionary that backs this configuration.
|
||
*/
|
||
readonly [key: string]: any
|
||
}
|
||
|
||
export interface BufferSyncItem {
|
||
/**
|
||
* Called on buffer unload.
|
||
*/
|
||
dispose: () => void
|
||
/**
|
||
* Called on buffer content change.
|
||
*/
|
||
onChange?(e: DidChangeTextDocumentParams): void
|
||
/**
|
||
* Called on TextChangedI & TextChanged events.
|
||
*/
|
||
onTextChange?(): void
|
||
}
|
||
|
||
export interface BufferSync<T extends BufferSyncItem> {
|
||
/**
|
||
* Current items.
|
||
*/
|
||
readonly items: Iterable<T>
|
||
/**
|
||
* Get created item by uri
|
||
*/
|
||
getItem(uri: string): T | undefined
|
||
/**
|
||
* Get created item by bufnr
|
||
*/
|
||
getItem(bufnr: number): T | undefined
|
||
dispose: () => void
|
||
}
|
||
|
||
export namespace workspace {
|
||
export const nvim: Neovim
|
||
/**
|
||
* Current buffer number, could be wrong since vim could not send autocmd as expected.
|
||
*
|
||
* @deprecated will be removed in the feature.
|
||
*/
|
||
export const bufnr: number
|
||
/**
|
||
* Current document.
|
||
*/
|
||
export const document: Promise<Document>
|
||
/**
|
||
* Environments or current (neo)vim.
|
||
*/
|
||
export const env: Env
|
||
/**
|
||
* Float window or popup can work.
|
||
*/
|
||
export const floatSupported: boolean
|
||
/**
|
||
* Current working directory of vim.
|
||
*/
|
||
export const cwd: string
|
||
/**
|
||
* Current workspace root.
|
||
*/
|
||
export const root: string
|
||
/**
|
||
* @deprecated aliased to root.
|
||
*/
|
||
export const rootPath: string
|
||
/**
|
||
* Not neovim when true.
|
||
*/
|
||
export const isVim: boolean
|
||
/**
|
||
* Is neovim when true.
|
||
*/
|
||
export const isNvim: boolean
|
||
/**
|
||
* All filetypes of loaded documents.
|
||
*/
|
||
export const filetypes: ReadonlySet<string>
|
||
/**
|
||
* All languageIds of loaded documents.
|
||
*/
|
||
export const languageIds: ReadonlySet<string>
|
||
/**
|
||
* Root directory of coc.nvim
|
||
*/
|
||
export const pluginRoot: string
|
||
/**
|
||
* Current `&completeopt` of vim, may not correct.
|
||
*/
|
||
export const completeOpt: string
|
||
/**
|
||
* Exists channel names.
|
||
*/
|
||
export const channelNames: ReadonlyArray<string>
|
||
/**
|
||
* Loaded documents that attached.
|
||
*/
|
||
export const documents: ReadonlyArray<Document>
|
||
/**
|
||
* Current document array.
|
||
*/
|
||
export const textDocuments: ReadonlyArray<LinesTextDocument>
|
||
/**
|
||
* Current workspace folders.
|
||
*/
|
||
export const workspaceFolders: ReadonlyArray<WorkspaceFolder>
|
||
/**
|
||
* Directory paths of workspaceFolders.
|
||
*/
|
||
export const folderPaths: ReadonlyArray<string>
|
||
/**
|
||
* Current workspace folder, could be null when vim started from user's home.
|
||
*
|
||
* @deprecated
|
||
*/
|
||
export const workspaceFolder: WorkspaceFolder | null
|
||
export const onDidCreateFiles: Event<FileCreateEvent>
|
||
export const onDidRenameFiles: Event<FileRenameEvent>
|
||
export const onDidDeleteFiles: Event<FileDeleteEvent>
|
||
export const onWillCreateFiles: Event<FileWillCreateEvent>
|
||
export const onWillRenameFiles: Event<FileWillRenameEvent>
|
||
export const onWillDeleteFiles: Event<FileWillDeleteEvent>
|
||
/**
|
||
* Event fired on workspace folder change.
|
||
*/
|
||
export const onDidChangeWorkspaceFolders: Event<WorkspaceFoldersChangeEvent>
|
||
/**
|
||
* Event fired after document create.
|
||
*/
|
||
export const onDidOpenTextDocument: Event<LinesTextDocument & { bufnr: number }>
|
||
/**
|
||
* Event fired after document unload.
|
||
*/
|
||
export const onDidCloseTextDocument: Event<LinesTextDocument & { bufnr: number }>
|
||
/**
|
||
* Event fired on document change.
|
||
*/
|
||
export const onDidChangeTextDocument: Event<DidChangeTextDocumentParams>
|
||
/**
|
||
* Event fired before document save.
|
||
*/
|
||
export const onWillSaveTextDocument: Event<WillSaveEvent>
|
||
/**
|
||
* Event fired after document save.
|
||
*/
|
||
export const onDidSaveTextDocument: Event<LinesTextDocument>
|
||
|
||
/**
|
||
* Event fired on configuration change. Configuration change could by many
|
||
* reasons, including:
|
||
*
|
||
* - Changes detected from `coc-settings.json`.
|
||
* - Change to document that using another configuration file.
|
||
* - Configuration change by call update API of WorkspaceConfiguration.
|
||
*/
|
||
export const onDidChangeConfiguration: Event<ConfigurationChangeEvent>
|
||
|
||
/**
|
||
* Fired when vim's runtimepath change detected.
|
||
*/
|
||
export const onDidRuntimePathChange: Event<ReadonlyArray<string>>
|
||
|
||
/**
|
||
* Returns a path that is relative to the workspace folder or folders.
|
||
*
|
||
* When there are no {@link workspace.workspaceFolders workspace folders} or when the path
|
||
* is not contained in them, the input is returned.
|
||
*
|
||
* @param pathOrUri A path or uri. When a uri is given its {@link Uri.fsPath fsPath} is used.
|
||
* @param includeWorkspaceFolder When `true` and when the given path is contained inside a
|
||
* workspace folder the name of the workspace is prepended. Defaults to `true` when there are
|
||
* multiple workspace folders and `false` otherwise.
|
||
* @return A path relative to the root or the input.
|
||
*/
|
||
export function asRelativePath(pathOrUri: string | Uri, includeWorkspaceFolder?: boolean): string
|
||
|
||
/**
|
||
* Opens a document. Will return early if this document is already open. Otherwise
|
||
* the document is loaded and the {@link workspace.onDidOpenTextDocument didOpen}-event fires.
|
||
*
|
||
* The document is denoted by an {@link Uri}. Depending on the {@link Uri.scheme scheme} the
|
||
* following rules apply:
|
||
* * `file`-scheme: Open a file on disk (`openTextDocument(Uri.file(path))`). Will be rejected if the file
|
||
* does not exist or cannot be loaded.
|
||
* * `untitled`-scheme: Open a blank untitled file with associated path (`openTextDocument(Uri.file(path).with({ scheme: 'untitled' }))`).
|
||
* The language will be derived from the file name.
|
||
* * For all other schemes contributed {@link TextDocumentContentProvider text document content providers} and
|
||
* {@link FileSystemProvider file system providers} are consulted.
|
||
*
|
||
* *Note* that the lifecycle of the returned document is owned by the editor and not by the extension. That means an
|
||
* {@linkcode workspace.onDidCloseTextDocument onDidClose}-event can occur at any time after opening it.
|
||
*
|
||
* @param uri Identifies the resource to open.
|
||
* @return A promise that resolves to a {@link Document document}.
|
||
*/
|
||
export function openTextDocument(uri: Uri): Thenable<Document>
|
||
|
||
/**
|
||
* A short-hand for `openTextDocument(Uri.file(fileName))`.
|
||
*
|
||
* @see {@link openTextDocument}
|
||
* @param fileName A name of a file on disk.
|
||
* @return A promise that resolves to a {@link Document document}.
|
||
*/
|
||
export function openTextDocument(fileName: string): Thenable<Document>
|
||
|
||
/**
|
||
* Create new namespace id by name.
|
||
*
|
||
* @deprecated Latest neovim requires namespace created by neoivm.
|
||
*/
|
||
export function createNameSpace(name: string): number
|
||
|
||
/**
|
||
* Like vim's has(), but for version check only.
|
||
* Check patch on neovim and check nvim on vim would return false.
|
||
*
|
||
* For example:
|
||
* - has('nvim-0.6.0')
|
||
* - has('patch-7.4.248')
|
||
*/
|
||
export function has(feature: string): boolean
|
||
|
||
/**
|
||
* Register autocmd on vim.
|
||
*
|
||
* Note: avoid request autocmd when possible since vim could be blocked
|
||
* forever when request triggered during request.
|
||
*/
|
||
export function registerAutocmd(autocmd: Autocmd): Disposable
|
||
|
||
/**
|
||
* Watch for vim's global option change.
|
||
*/
|
||
export function watchOption(key: string, callback: (oldValue: any, newValue: any) => Thenable<void> | void, disposables?: Disposable[]): void
|
||
|
||
/**
|
||
* Watch for vim's global variable change, works on neovim only.
|
||
*/
|
||
export function watchGlobal(key: string, callback?: (oldValue: any, newValue: any) => Thenable<void> | void, disposables?: Disposable[]): void
|
||
|
||
/**
|
||
* Check if selector match document.
|
||
*/
|
||
export function match(selector: DocumentSelector, document: LinesTextDocument): number
|
||
|
||
/**
|
||
* Findup from filename or filenames from current filepath or root.
|
||
*
|
||
* @return fullpath of file or null when not found.
|
||
*/
|
||
export function findUp(filename: string | string[]): Promise<string | null>
|
||
|
||
/**
|
||
* Get possible watchman binary path.
|
||
*/
|
||
export function getWatchmanPath(): string | null
|
||
|
||
/**
|
||
* Get configuration by section and optional resource uri.
|
||
*/
|
||
export function getConfiguration(section?: string, resource?: string): WorkspaceConfiguration
|
||
|
||
/**
|
||
* Get created document by uri or bufnr.
|
||
*/
|
||
export function getDocument(uri: number | string): Document
|
||
|
||
/**
|
||
* Apply WorkspaceEdit.
|
||
*/
|
||
export function applyEdit(edit: WorkspaceEdit): Promise<boolean>
|
||
|
||
/**
|
||
* Convert location to quickfix item.
|
||
*/
|
||
export function getQuickfixItem(loc: Location | LocationLink, text?: string, type?: string, module?: string): Promise<QuickfixItem>
|
||
|
||
/**
|
||
* Convert locations to quickfix list.
|
||
*/
|
||
export function getQuickfixList(locations: Location[]): Promise<ReadonlyArray<QuickfixItem>>
|
||
|
||
/**
|
||
* Populate locations to UI.
|
||
*/
|
||
export function showLocations(locations: Location[]): Promise<void>
|
||
|
||
/**
|
||
* Get content of line by uri and line.
|
||
*/
|
||
export function getLine(uri: string, line: number): Promise<string>
|
||
|
||
/**
|
||
* Get WorkspaceFolder of uri
|
||
*/
|
||
export function getWorkspaceFolder(uri: string): WorkspaceFolder | undefined
|
||
|
||
/**
|
||
* Get content from buffer or file by uri.
|
||
*/
|
||
export function readFile(uri: string): Promise<string>
|
||
|
||
/**
|
||
* Get current document and position.
|
||
*/
|
||
export function getCurrentState(): Promise<EditerState>
|
||
|
||
/**
|
||
* Get format options of uri or current buffer.
|
||
*/
|
||
export function getFormatOptions(uri?: string): Promise<FormattingOptions>
|
||
|
||
/**
|
||
* Jump to location.
|
||
*/
|
||
export function jumpTo(uri: string, position?: Position | null, openCommand?: string): Promise<void>
|
||
|
||
/**
|
||
* Create a file in vim and disk
|
||
*/
|
||
export function createFile(filepath: string, opts?: CreateFileOptions): Promise<void>
|
||
|
||
/**
|
||
* Load uri as document, buffer would be invisible if not loaded.
|
||
*/
|
||
export function loadFile(uri: string): Promise<Document>
|
||
|
||
/**
|
||
* Load the files that not loaded
|
||
*/
|
||
export function loadFiles(uris: string[]): Promise<void>
|
||
|
||
/**
|
||
* Rename file in vim and disk
|
||
*/
|
||
export function renameFile(oldPath: string, newPath: string, opts?: RenameFileOptions): Promise<void>
|
||
|
||
/**
|
||
* Delete file from vim and disk.
|
||
*/
|
||
export function deleteFile(filepath: string, opts?: DeleteFileOptions): Promise<void>
|
||
|
||
/**
|
||
* Open resource by uri
|
||
*/
|
||
export function openResource(uri: string): Promise<void>
|
||
|
||
/**
|
||
* Resolve full path of module from yarn or npm global directory.
|
||
*/
|
||
export function resolveModule(name: string): Promise<string>
|
||
|
||
/**
|
||
* Run nodejs command
|
||
*/
|
||
export function runCommand(cmd: string, cwd?: string, timeout?: number): Promise<string>
|
||
|
||
/**
|
||
* Expand filepath with `~` and/or environment placeholders
|
||
*/
|
||
export function expand(filepath: string): string
|
||
|
||
/**
|
||
* Call a function by use notifications, useful for functions like |input| that could block vim.
|
||
*/
|
||
export function callAsync<T>(method: string, args: any[]): Promise<T>
|
||
|
||
/**
|
||
* registerTextDocumentContentProvider
|
||
*/
|
||
export function registerTextDocumentContentProvider(scheme: string, provider: TextDocumentContentProvider): Disposable
|
||
|
||
/**
|
||
* Register unique keymap uses `<Plug>(coc-{key})` as lhs
|
||
* Throw error when {key} already exists.
|
||
*
|
||
* @param {MapMode[]} modes - array of 'n' | 'i' | 'v' | 'x' | 's' | 'o'
|
||
* @param {string} key - unique name
|
||
* @param {Function} fn - callback function
|
||
* @param {Partial} opts
|
||
* @returns {Disposable}
|
||
*/
|
||
export function registerKeymap(modes: MapMode[], key: string, fn: () => ProviderResult<any>, opts?: Partial<KeymapOption>): Disposable
|
||
|
||
/**
|
||
* Register expr key-mapping.
|
||
*/
|
||
export function registerExprKeymap(mode: 'i' | 'n' | 'v' | 's' | 'x', key: string, fn: () => ProviderResult<string>, buffer?: boolean): Disposable
|
||
|
||
/**
|
||
* Register local key-mapping.
|
||
*/
|
||
export function registerLocalKeymap(mode: 'n' | 'v' | 's' | 'x', key: string, fn: () => ProviderResult<any>, notify?: boolean): Disposable
|
||
|
||
/**
|
||
* Register for buffer sync objects, created item should be disposable
|
||
* and provide optional `onChange` which called when document change.
|
||
*
|
||
* The document is always attached and not command line buffer.
|
||
*
|
||
* @param create Called for each attached document and on document create.
|
||
* @returns Disposable
|
||
*/
|
||
export function registerBufferSync<T extends BufferSyncItem>(create: (doc: Document) => T | undefined): BufferSync<T>
|
||
|
||
/**
|
||
* Create a FileSystemWatcher instance, when watchman doesn't exist, the
|
||
* returned FileSystemWatcher can still be used, but not work at all.
|
||
*/
|
||
export function createFileSystemWatcher(globPattern: string, ignoreCreate?: boolean, ignoreChange?: boolean, ignoreDelete?: boolean): FileSystemWatcher
|
||
/**
|
||
* Find files across all {@link workspace.workspaceFolders workspace folders} in the workspace.
|
||
*
|
||
* @example
|
||
* findFiles('**/*.js', '**/node_modules/**', 10)
|
||
*
|
||
* @param include A {@link GlobPattern glob pattern} that defines the files to search for. The glob pattern
|
||
* will be matched against the file paths of resulting matches relative to their workspace.
|
||
* Use a {@link RelativePattern relative pattern} to restrict the search results to a {@link WorkspaceFolder workspace folder}.
|
||
* @param exclude A {@link GlobPattern glob pattern} that defines files and folders to exclude. The glob pattern
|
||
* will be matched against the file paths of resulting matches relative to their workspace. When `undefined` or`null`,
|
||
* no excludes will apply.
|
||
* @param maxResults An upper-bound for the result.
|
||
* @param token A token that can be used to signal cancellation to the underlying search engine.
|
||
* @return A thenable that resolves to an array of resource identifiers. Will return no results if no
|
||
* {@link workspace.workspaceFolders workspace folders} are opened.
|
||
*/
|
||
export function findFiles(include: GlobPattern, exclude?: GlobPattern | null, maxResults?: number, token?: CancellationToken): Thenable<Uri[]>
|
||
|
||
/**
|
||
* Create persistence Mru instance.
|
||
*/
|
||
export function createMru(name: string): Mru
|
||
|
||
/**
|
||
* Create Task instance that runs in (neo)vim, no shell.
|
||
*
|
||
* @param id Unique id string, like `TSC`
|
||
*/
|
||
export function createTask(id: string): Task
|
||
|
||
/**
|
||
* Create DB instance at extension root.
|
||
*/
|
||
export function createDatabase(name: string): JsonDB
|
||
}
|
||
// }}
|
||
|
||
// window module {{
|
||
/**
|
||
* Represents how a terminal exited.
|
||
*/
|
||
export interface TerminalExitStatus {
|
||
/**
|
||
* The exit code that a terminal exited with, it can have the following values:
|
||
* - Zero: the terminal process or custom execution succeeded.
|
||
* - Non-zero: the terminal process or custom execution failed.
|
||
* - `undefined`: the user forcibly closed the terminal or a custom execution exited
|
||
* without providing an exit code.
|
||
*/
|
||
readonly code: number | undefined
|
||
}
|
||
|
||
export interface TerminalOptions {
|
||
/**
|
||
* A human-readable string which will be used to represent the terminal in the UI.
|
||
*/
|
||
name?: string
|
||
|
||
/**
|
||
* A path to a custom shell executable to be used in the terminal.
|
||
*/
|
||
shellPath?: string
|
||
|
||
/**
|
||
* Args for the custom shell executable, this does not work on Windows (see #8429)
|
||
*/
|
||
shellArgs?: string[]
|
||
|
||
/**
|
||
* A path or URI for the current working directory to be used for the terminal.
|
||
*/
|
||
cwd?: string
|
||
|
||
/**
|
||
* Object with environment variables that will be added to the VS Code process.
|
||
*/
|
||
env?: { [key: string]: string | null }
|
||
|
||
/**
|
||
* Whether the terminal process environment should be exactly as provided in
|
||
* `TerminalOptions.env`. When this is false (default), the environment will be based on the
|
||
* window's environment and also apply configured platform settings like
|
||
* `terminal.integrated.windows.env` on top. When this is true, the complete environment
|
||
* must be provided as nothing will be inherited from the process or any configuration.
|
||
* Neovim only.
|
||
*/
|
||
strictEnv?: boolean
|
||
}
|
||
|
||
/**
|
||
* An individual terminal instance within the integrated terminal.
|
||
*/
|
||
export interface Terminal {
|
||
|
||
/**
|
||
* The bufnr of terminal buffer.
|
||
*/
|
||
readonly bufnr: number
|
||
|
||
/**
|
||
* The name of the terminal.
|
||
*/
|
||
readonly name: string
|
||
|
||
/**
|
||
* The process ID of the shell process.
|
||
*/
|
||
readonly processId: Promise<number>
|
||
|
||
/**
|
||
* The exit status of the terminal, this will be undefined while the terminal is active.
|
||
*
|
||
* **Example:** Show a notification with the exit code when the terminal exits with a
|
||
* non-zero exit code.
|
||
* ```typescript
|
||
* window.onDidCloseTerminal(t => {
|
||
* if (t.exitStatus && t.exitStatus.code) {
|
||
* vscode.window.showInformationMessage(`Exit code: ${t.exitStatus.code}`);
|
||
* }
|
||
* });
|
||
* ```
|
||
*/
|
||
readonly exitStatus: TerminalExitStatus | undefined
|
||
|
||
/**
|
||
* Send text to the terminal. The text is written to the stdin of the underlying pty process
|
||
* (shell) of the terminal.
|
||
*
|
||
* @param text The text to send.
|
||
* @param addNewLine Whether to add a new line to the text being sent, this is normally
|
||
* required to run a command in the terminal. The character(s) added are \n or \r\n
|
||
* depending on the platform. This defaults to `true`.
|
||
*/
|
||
sendText(text: string, addNewLine?: boolean): void
|
||
|
||
/**
|
||
* Show the terminal panel and reveal this terminal in the UI, return false when failed.
|
||
*
|
||
* @param preserveFocus When `true` the terminal will not take focus.
|
||
*/
|
||
show(preserveFocus?: boolean): Promise<boolean>
|
||
|
||
/**
|
||
* Hide the terminal panel if this terminal is currently showing.
|
||
*/
|
||
hide(): void
|
||
|
||
/**
|
||
* Dispose and free associated resources.
|
||
*/
|
||
dispose(): void
|
||
}
|
||
|
||
/**
|
||
* Option for create status item.
|
||
*/
|
||
export interface StatusItemOption {
|
||
progress?: boolean
|
||
}
|
||
|
||
/**
|
||
* Status item that included in `g:coc_status`
|
||
*/
|
||
export interface StatusBarItem {
|
||
/**
|
||
* The priority of this item. Higher value means the item should
|
||
* be shown more to the left.
|
||
*/
|
||
readonly priority: number
|
||
|
||
isProgress: boolean
|
||
|
||
/**
|
||
* The text to show for the entry. You can embed icons in the text by leveraging the syntax:
|
||
*
|
||
* `My text $(icon-name) contains icons like $(icon-name) this one.`
|
||
*
|
||
* Where the icon-name is taken from the [octicon](https://octicons.github.com) icon set, e.g.
|
||
* `light-bulb`, `thumbsup`, `zap` etc.
|
||
*/
|
||
text: string
|
||
|
||
/**
|
||
* Shows the entry in the status bar.
|
||
*/
|
||
show(): void
|
||
|
||
/**
|
||
* Hide the entry in the status bar.
|
||
*/
|
||
hide(): void
|
||
|
||
/**
|
||
* Dispose and free associated resources. Call
|
||
* [hide](#StatusBarItem.hide).
|
||
*/
|
||
dispose(): void
|
||
}
|
||
|
||
/**
|
||
* Value-object describing where and how progress should show.
|
||
*/
|
||
export interface ProgressOptions {
|
||
|
||
/**
|
||
* A human-readable string which will be used to describe the
|
||
* operation.
|
||
*/
|
||
title?: string
|
||
|
||
/**
|
||
* Controls if a cancel button should show to allow the user to
|
||
* cancel the long running operation.
|
||
*/
|
||
cancellable?: boolean
|
||
}
|
||
|
||
/**
|
||
* Defines a generalized way of reporting progress updates.
|
||
*/
|
||
export interface Progress<T> {
|
||
|
||
/**
|
||
* Report a progress update.
|
||
*
|
||
* @param value A progress item, like a message and/or an
|
||
* report on how much work finished
|
||
*/
|
||
report(value: T): void
|
||
}
|
||
|
||
/**
|
||
* Represents an action that is shown with an information, warning, or
|
||
* error message.
|
||
*
|
||
* @see [showInformationMessage](#window.showInformationMessage)
|
||
* @see [showWarningMessage](#window.showWarningMessage)
|
||
* @see [showErrorMessage](#window.showErrorMessage)
|
||
*/
|
||
export interface MessageItem {
|
||
|
||
/**
|
||
* A short title like 'Retry', 'Open Log' etc.
|
||
*/
|
||
title: string
|
||
|
||
/**
|
||
* A hint for modal dialogs that the item should be triggered
|
||
* when the user cancels the dialog (e.g. by pressing the ESC
|
||
* key).
|
||
*
|
||
* Note: this option is ignored for non-modal messages.
|
||
* Note: not used by coc.nvim for now.
|
||
*/
|
||
isCloseAffordance?: boolean
|
||
}
|
||
|
||
export interface DialogButton {
|
||
/**
|
||
* Use by callback, should >= 0
|
||
*/
|
||
index: number
|
||
text: string
|
||
/**
|
||
* Not shown when true
|
||
*/
|
||
disabled?: boolean
|
||
}
|
||
|
||
export interface DialogConfig {
|
||
/**
|
||
* Content shown in window.
|
||
*/
|
||
content: string
|
||
/**
|
||
* Optional title text.
|
||
*/
|
||
title?: string
|
||
/**
|
||
* show close button, default to true when not specified.
|
||
*/
|
||
close?: boolean
|
||
/**
|
||
* highlight group for dialog window, default to `"dialog.floatHighlight"` or 'CocFlating'
|
||
*/
|
||
highlight?: string
|
||
/**
|
||
* highlight items of content.
|
||
*/
|
||
highlights?: ReadonlyArray<HighlightItem>
|
||
/**
|
||
* highlight groups for border, default to `"dialog.borderhighlight"` or 'CocFlating'
|
||
*/
|
||
borderhighlight?: string
|
||
/**
|
||
* Buttons as bottom of dialog.
|
||
*/
|
||
buttons?: DialogButton[]
|
||
/**
|
||
* index is -1 for window close without button click
|
||
*/
|
||
callback?: (index: number) => void
|
||
}
|
||
|
||
export type NotificationKind = 'error' | 'info' | 'warning' | 'progress'
|
||
|
||
export interface NotificationConfig {
|
||
kind?: NotificationKind
|
||
|
||
content?: string
|
||
/**
|
||
* Optional title text.
|
||
*/
|
||
title?: string
|
||
/**
|
||
* Buttons as bottom of dialog.
|
||
*/
|
||
buttons?: DialogButton[]
|
||
/**
|
||
* index is -1 for window close without button click
|
||
*/
|
||
callback?: (index: number) => void
|
||
}
|
||
|
||
/**
|
||
* Options to configure the behavior of the quick pick UI.
|
||
*/
|
||
export interface QuickPickOptions {
|
||
|
||
/**
|
||
* An optional string that represents the title of the quick pick.
|
||
*/
|
||
title?: string
|
||
|
||
/**
|
||
* An optional flag to include the description when filtering the picks.
|
||
*/
|
||
matchOnDescription?: boolean
|
||
|
||
/**
|
||
* An optional flag to make the picker accept multiple selections, if true the result is an array of picks.
|
||
*/
|
||
canPickMany?: boolean
|
||
}
|
||
|
||
/**
|
||
* Represents an item that can be selected from
|
||
* a list of items.
|
||
*/
|
||
export interface QuickPickItem {
|
||
/**
|
||
* A human-readable string which is rendered prominent
|
||
*/
|
||
label: string
|
||
/**
|
||
* A human-readable string which is rendered less prominent in the same line
|
||
*/
|
||
description?: string
|
||
/**
|
||
* Optional flag indicating if this item is picked initially.
|
||
*/
|
||
picked?: boolean
|
||
}
|
||
|
||
export interface QuickPickConfig<T extends QuickPickItem> {
|
||
/**
|
||
* An optional title.
|
||
*/
|
||
title?: string
|
||
/**
|
||
* Items to pick from.
|
||
*/
|
||
items: readonly T[]
|
||
/**
|
||
* Initial value of the filter text.
|
||
*/
|
||
value?: string
|
||
/**
|
||
* If multiple items can be selected at the same time. Defaults to false.
|
||
*/
|
||
canSelectMany?: boolean
|
||
/**
|
||
* Max height of list window.
|
||
*/
|
||
maxHeight?: number
|
||
}
|
||
|
||
export interface QuickPick<T extends QuickPickItem> {
|
||
/**
|
||
* An optional title.
|
||
*/
|
||
title: string | undefined
|
||
/**
|
||
* If the UI should show a progress indicator. Defaults to false.
|
||
*
|
||
* Change this to true, e.g., while loading more data or validating
|
||
* user input.
|
||
*/
|
||
loading: boolean
|
||
/**
|
||
* Items to pick from. This can be read and updated by the extension.
|
||
*/
|
||
items: readonly T[]
|
||
/**
|
||
* Active items. This can be read and updated by the extension.
|
||
*/
|
||
activeItems: readonly T[]
|
||
/**
|
||
* If the filter text should also be matched against the description of the items. Defaults to false.
|
||
*/
|
||
matchOnDescription: boolean
|
||
/**
|
||
* Current input value
|
||
*/
|
||
readonly value: string
|
||
/**
|
||
* An event signaling when QuickPick closed, fired with selected items or null when canceled.
|
||
*/
|
||
readonly onDidFinish: Event<T[] | null>
|
||
/**
|
||
* An event signaling when the value of the filter text has changed.
|
||
*/
|
||
readonly onDidChangeValue: Event<string>
|
||
/**
|
||
* An event signaling when the selected items have changed.
|
||
*/
|
||
readonly onDidChangeSelection: Event<readonly T[]>
|
||
}
|
||
|
||
export interface ScreenPosition {
|
||
row: number
|
||
col: number
|
||
}
|
||
|
||
export type MsgTypes = 'error' | 'warning' | 'more'
|
||
|
||
export interface OpenTerminalOption {
|
||
/**
|
||
* Cwd of terminal, default to result of |getcwd()|
|
||
*/
|
||
cwd?: string
|
||
/**
|
||
* Close terminal on job finish, default to true.
|
||
*/
|
||
autoclose?: boolean
|
||
/**
|
||
* Keep focus current window, default to false.
|
||
*/
|
||
keepfocus?: boolean
|
||
/**
|
||
* Position of terminal window, default to 'right'.
|
||
*/
|
||
position?: 'bottom' | 'right'
|
||
}
|
||
|
||
/**
|
||
* An output channel is a container for readonly textual information.
|
||
*
|
||
* To get an instance of an `OutputChannel` use
|
||
* [createOutputChannel](#window.createOutputChannel).
|
||
*/
|
||
export interface OutputChannel {
|
||
|
||
/**
|
||
* The human-readable name of this output channel.
|
||
*/
|
||
readonly name: string
|
||
|
||
readonly content: string
|
||
/**
|
||
* Append the given value to the channel.
|
||
*
|
||
* @param value A string, falsy values will not be printed.
|
||
*/
|
||
append(value: string): void
|
||
|
||
/**
|
||
* Append the given value and a line feed character
|
||
* to the channel.
|
||
*
|
||
* @param value A string, falsy values will be printed.
|
||
*/
|
||
appendLine(value: string): void
|
||
|
||
/**
|
||
* Removes output from the channel. Latest `keep` lines will be remained.
|
||
*/
|
||
clear(keep?: number): void
|
||
|
||
/**
|
||
* Reveal this channel in the UI.
|
||
*
|
||
* @param preserveFocus When `true` the channel will not take focus.
|
||
*/
|
||
show(preserveFocus?: boolean): void
|
||
|
||
/**
|
||
* Hide this channel from the UI.
|
||
*/
|
||
hide(): void
|
||
|
||
/**
|
||
* Dispose and free associated resources.
|
||
*/
|
||
dispose(): void
|
||
}
|
||
|
||
export interface TerminalResult {
|
||
bufnr: number
|
||
success: boolean
|
||
content?: string
|
||
}
|
||
|
||
export interface Dialog {
|
||
/**
|
||
* Buffer number of dialog.
|
||
*/
|
||
bufnr: number
|
||
/**
|
||
* Window id of dialog.
|
||
*/
|
||
winid: Promise<number | null>
|
||
dispose: () => void
|
||
}
|
||
|
||
export type HighlightItemDef = [string, number, number, number, number?, number?, number?]
|
||
|
||
export interface HighlightDiff {
|
||
remove: number[]
|
||
removeMarkers: number[]
|
||
add: HighlightItemDef[]
|
||
}
|
||
|
||
export interface MenuItem {
|
||
text: string
|
||
disabled?: boolean | { reason: string }
|
||
}
|
||
|
||
export interface MenuOption {
|
||
/**
|
||
* Title in menu window.
|
||
*/
|
||
title?: string,
|
||
/**
|
||
* Content in menu window as normal text.
|
||
*/
|
||
content?: string
|
||
/**
|
||
* Create and highlight shortcut characters.
|
||
*/
|
||
shortcuts?: boolean
|
||
/**
|
||
* Position of menu, default to 'cursor'
|
||
*/
|
||
position?: 'center' | 'cursor'
|
||
}
|
||
|
||
export interface InputOptions {
|
||
/**
|
||
* Position to show input, default to 'cursor'
|
||
*/
|
||
position?: 'cursor' | 'center'
|
||
/**
|
||
* Margin top editor when position is 'center'
|
||
*/
|
||
marginTop?: number
|
||
/**
|
||
* Border highlight of float window/popup, configuration `dialog.borderhighlight` used as default.
|
||
*/
|
||
borderhighlight?: string
|
||
/**
|
||
* Create key-mappings for quickpick list.
|
||
*/
|
||
list?: boolean
|
||
}
|
||
|
||
export interface InputPreference extends InputOptions {
|
||
/**
|
||
* Top, right, bottom, left border existence, default to [1,1,1,1]
|
||
*/
|
||
border?: [0 | 1, 0 | 1, 0 | 1, 0 | 1]
|
||
/**
|
||
* Rounded border, default to true, configuration `dialog.rounded` used as default.
|
||
*/
|
||
rounded?: boolean
|
||
/**
|
||
* Minimal window width, `g:coc_prompt_win_width` or 32 used as default.
|
||
*/
|
||
minWidth?: number
|
||
/**
|
||
* Maximum window width, configuration `dialog.maxWidth` used as default.
|
||
*/
|
||
maxWidth?: number
|
||
}
|
||
|
||
export interface InputDimension {
|
||
readonly width: number
|
||
readonly height: number
|
||
/**
|
||
* 0 based screen row
|
||
*/
|
||
readonly row: number
|
||
/**
|
||
* O based screen col
|
||
*/
|
||
readonly col: number
|
||
}
|
||
|
||
export interface InputBox {
|
||
/**
|
||
* Change or get title of input box.
|
||
*/
|
||
title: string
|
||
/**
|
||
* Change or get loading state of input box.
|
||
*/
|
||
loading: boolean
|
||
/**
|
||
* Change or get borderhighlight of input box.
|
||
*/
|
||
borderhighlight: string
|
||
/**
|
||
* Dimension of float window/popup
|
||
*/
|
||
readonly dimension: InputDimension
|
||
/**
|
||
* Buffer number of float window/popup
|
||
*/
|
||
readonly bufnr: number
|
||
/**
|
||
* An event signaling when the value has changed.
|
||
*/
|
||
readonly onDidChange: Event<string>
|
||
/**
|
||
* An event signaling input finished, emit input value or null when canceled.
|
||
*/
|
||
readonly onDidFinish: Event<string | null>
|
||
}
|
||
|
||
export namespace window {
|
||
/**
|
||
* The currently active editor or `undefined`. The active editor is the one
|
||
* that currently has focus or, when none has focus, the one that has changed
|
||
* input most recently.
|
||
*/
|
||
export const activeTextEditor: TextEditor | undefined
|
||
|
||
/**
|
||
* The currently visible editors or an empty array.
|
||
*/
|
||
export const visibleTextEditors: readonly TextEditor[]
|
||
|
||
/**
|
||
* An {@link Event} which fires when the {@link window.activeTextEditor active editor}
|
||
* has changed. *Note* that the event also fires when the active editor changes
|
||
* to `undefined`.
|
||
*/
|
||
export const onDidChangeActiveTextEditor: Event<TextEditor | undefined>
|
||
|
||
/**
|
||
* An {@link Event} which fires when the array of {@link window.visibleTextEditors visible editors}
|
||
* has changed.
|
||
*/
|
||
export const onDidChangeVisibleTextEditors: Event<readonly TextEditor[]>
|
||
|
||
/**
|
||
* The currently opened terminals or an empty array.
|
||
*/
|
||
export const terminals: readonly Terminal[]
|
||
/**
|
||
* onDidChangeTerminalState doesn't exist since we can't detect window resize on vim.
|
||
*/
|
||
/**
|
||
* Event fired after terminal created, only fired with Terminal that
|
||
* created by `window.createTerminal`
|
||
*/
|
||
export const onDidOpenTerminal: Event<Terminal>
|
||
/**
|
||
* Event fired on terminal close, only fired with Terminal that created by
|
||
* `window.createTerminal`
|
||
*/
|
||
export const onDidCloseTerminal: Event<Terminal>
|
||
/**
|
||
* Creates a {@link Terminal} with a backing shell process.
|
||
* The terminal is created by (neo)vim.
|
||
*
|
||
* @param options A TerminalOptions object describing the characteristics of the new terminal.
|
||
* @return A new Terminal.
|
||
* @throws When running in an environment where a new process cannot be started.
|
||
*/
|
||
export function createTerminal(opts: TerminalOptions): Promise<Terminal>
|
||
|
||
/**
|
||
* Reveal message with message type.
|
||
*
|
||
* @deprecated Use `window.showErrorMessage`, `window.showWarningMessage` and `window.showInformationMessage` instead.
|
||
* @param msg Message text to show.
|
||
* @param messageType Type of message, could be `error` `warning` and `more`, default to `more`
|
||
*/
|
||
export function showMessage(msg: string, messageType?: MsgTypes): void
|
||
|
||
/**
|
||
* Run command in vim terminal for result
|
||
*
|
||
* @param cmd Command to run.
|
||
* @param cwd Cwd of terminal, default to result of |getcwd()|.
|
||
*/
|
||
export function runTerminalCommand(cmd: string, cwd?: string, keepfocus?: boolean): Promise<TerminalResult>
|
||
|
||
/**
|
||
* Open terminal window.
|
||
*
|
||
* @param cmd Command to run.
|
||
* @param opts Terminal option.
|
||
* @returns buffer number of terminal.
|
||
*/
|
||
export function openTerminal(cmd: string, opts?: OpenTerminalOption): Promise<number>
|
||
|
||
/**
|
||
* Show quickpick for single item, use `window.menuPick` for menu at current current position.
|
||
* Use `window.showPickerDialog()` for multiple selection.
|
||
*
|
||
* @param items Label list.
|
||
* @param placeholder Prompt text, default to 'choose by number'.
|
||
* @returns Index of selected item, or -1 when canceled.
|
||
*/
|
||
export function showQuickpick(items: string[], placeholder?: string): Promise<number>
|
||
|
||
/**
|
||
* Shows a selection list allowing multiple selections.
|
||
* Throw error when 'workspace.env.dialog' is not true.
|
||
*
|
||
* @param items An array of strings, or a promise that resolves to an array of strings.
|
||
* @param options Configures the behavior of the selection list.
|
||
* @param token A token that can be used to signal cancellation.
|
||
* @return A promise that resolves to the selected items or `undefined`.
|
||
*/
|
||
export function showQuickPick(items: readonly string[] | Thenable<readonly string[]>, options: QuickPickOptions & { canPickMany: true }, token?: CancellationToken): Thenable<string[] | undefined>
|
||
|
||
/**
|
||
* Shows a selection list.
|
||
* Throw error when 'workspace.env.dialog' is not true.
|
||
*
|
||
* @param items An array of strings, or a promise that resolves to an array of strings.
|
||
* @param options Configures the behavior of the selection list.
|
||
* @param token A token that can be used to signal cancellation.
|
||
* @return A promise that resolves to the selection or `undefined`.
|
||
*/
|
||
export function showQuickPick(items: readonly string[] | Thenable<readonly string[]>, options?: QuickPickOptions, token?: CancellationToken): Thenable<string | undefined>
|
||
|
||
/**
|
||
* Shows a selection list allowing multiple selections.
|
||
* Throw error when 'workspace.env.dialog' is not true.
|
||
*
|
||
* @param items An array of items, or a promise that resolves to an array of items.
|
||
* @param options Configures the behavior of the selection list.
|
||
* @param token A token that can be used to signal cancellation.
|
||
* @return A promise that resolves to the selected items or `undefined`.
|
||
*/
|
||
export function showQuickPick<T extends QuickPickItem>(items: readonly T[] | Thenable<readonly T[]>, options: QuickPickOptions & { canPickMany: true }, token?: CancellationToken): Thenable<T[] | undefined>
|
||
|
||
/**
|
||
* Shows a selection list.
|
||
* Throw error when `workspace.env.dialog` not true.
|
||
*
|
||
* @param items An array of items, or a promise that resolves to an array of items.
|
||
* @param options Configures the behavior of the selection list.
|
||
* @param token A token that can be used to signal cancellation.
|
||
* @return A promise that resolves to the selected item or `undefined`.
|
||
*/
|
||
export function showQuickPick<T extends QuickPickItem>(items: readonly T[] | Thenable<readonly T[]>, options?: QuickPickOptions, token?: CancellationToken): Thenable<T | undefined>
|
||
|
||
/**
|
||
* Show menu picker at current cursor position, |inputlist()| is used as fallback.
|
||
* Throw error when `workspace.env.dialog` not true.
|
||
*
|
||
* @param items Array of texts or menu items.
|
||
* @param title Optional title of float/popup window.
|
||
* @param token A token that can be used to signal cancellation.
|
||
* @returns Selected index (0 based), -1 when canceled.
|
||
*/
|
||
export function showMenuPicker(items: string[] | MenuItem[], option?: MenuOption | string, token?: CancellationToken): Promise<number>
|
||
|
||
/**
|
||
* Prompt user for confirm, a float/popup window would be used when possible,
|
||
* use vim's |confirm()| function as callback.
|
||
*
|
||
* @param title The prompt text.
|
||
* @returns Result of confirm.
|
||
*/
|
||
export function showPrompt(title: string): Promise<boolean>
|
||
|
||
/**
|
||
* Show dialog window at the center of screen.
|
||
* Note that the dialog would always be closed after button click.
|
||
* Throw error when `workspace.env.dialog` not true.
|
||
*
|
||
* @param config Dialog configuration.
|
||
* @returns Dialog or null when dialog can't work.
|
||
*/
|
||
export function showDialog(config: DialogConfig): Promise<Dialog | null>
|
||
|
||
/**
|
||
* Request input from user, `input()` is used when `window.env.dialog` not true.
|
||
*
|
||
* @param title Title text of prompt window.
|
||
* @param defaultValue Default value of input, empty text by default.
|
||
* @param {InputOptions} option for input window, other preferences are read from user configuration.
|
||
*/
|
||
export function requestInput(title: string, defaultValue?: string, option?: InputOptions): Promise<string>
|
||
|
||
/**
|
||
* Creates and show a {@link InputBox} to let the user enter some text input.
|
||
* Throw error when `workspace.env.dialog` not true.
|
||
*
|
||
* @return A new {@link InputBox}.
|
||
*/
|
||
export function createInputBox(title: string, defaultValue: string | undefined, option: InputPreference): Promise<InputBox>
|
||
|
||
/**
|
||
* Creates and show a {@link QuickPick} to let the user pick an item or items from a
|
||
* list of items of type T.
|
||
* Throw error when `workspace.env.dialog` not true.
|
||
*
|
||
* Note that in many cases the more convenient {@link window.showQuickPick}
|
||
* is easier to use. {@link window.createQuickPick} should be used
|
||
* when {@link window.showQuickPick} does not offer the required flexibility.
|
||
*
|
||
* @return A new {@link QuickPick}.
|
||
*/
|
||
export function createQuickPick<T extends QuickPickItem>(config: QuickPickConfig<T>): Promise<QuickPick<T>>
|
||
|
||
/**
|
||
* Create statusbar item that would be included in `g:coc_status`.
|
||
*
|
||
* @param priority Higher priority item would be shown right.
|
||
* @param option
|
||
* @return A new status bar item.
|
||
*/
|
||
export function createStatusBarItem(priority?: number, option?: StatusItemOption): StatusBarItem
|
||
|
||
/**
|
||
* Open local config file
|
||
*/
|
||
export function openLocalConfig(): Promise<void>
|
||
|
||
/**
|
||
* Create a new output channel
|
||
*
|
||
* @param name Unique name of output channel.
|
||
* @returns A new output channel.
|
||
*/
|
||
export function createOutputChannel(name: string): OutputChannel
|
||
|
||
/**
|
||
* Create a {@link TreeView} instance, call `show()` method to render.
|
||
*
|
||
* @param viewId Id of the view, used as title of TreeView when title doesn't exist.
|
||
* @param options Options for creating the {@link TreeView}
|
||
* @returns a {@link TreeView}.
|
||
*/
|
||
export function createTreeView<T>(viewId: string, options: TreeViewOptions<T>): TreeView<T>
|
||
|
||
/**
|
||
* Reveal buffer of output channel.
|
||
*
|
||
* @param name Name of output channel.
|
||
* @param preserveFocus Preserve window focus when true.
|
||
*/
|
||
export function showOutputChannel(name: string, preserveFocus: boolean): void
|
||
|
||
/**
|
||
* Echo lines at the bottom of vim.
|
||
*
|
||
* @param lines Line list.
|
||
* @param truncate Truncate the lines to avoid 'press enter to continue' when true
|
||
*/
|
||
export function echoLines(lines: string[], truncate?: boolean): Promise<void>
|
||
|
||
/**
|
||
* Get current cursor position (line, character both 0 based).
|
||
*
|
||
* @returns Cursor position.
|
||
*/
|
||
export function getCursorPosition(): Promise<Position>
|
||
|
||
/**
|
||
* Move cursor to position (line, character both 0 based).
|
||
*
|
||
* @param position LSP position.
|
||
*/
|
||
export function moveTo(position: Position): Promise<void>
|
||
|
||
/**
|
||
* Get current cursor character offset in document,
|
||
* length of line break would always be 1.
|
||
*
|
||
* @returns Character offset.
|
||
*/
|
||
export function getOffset(): Promise<number>
|
||
|
||
/**
|
||
* Get screen position of current cursor(relative to editor),
|
||
* both `row` and `col` are 0 based.
|
||
*
|
||
* @returns Cursor screen position.
|
||
*/
|
||
export function getCursorScreenPosition(): Promise<ScreenPosition>
|
||
|
||
/**
|
||
* Show multiple picker at center of screen.
|
||
* Use `workspace.env.dialog` to check if dialog could work.
|
||
*
|
||
* @param items A set of items that will be rendered as actions in the message.
|
||
* @param title Title of picker dialog.
|
||
* @param token A token that can be used to signal cancellation.
|
||
* @return A promise that resolves to the selected items or `undefined`.
|
||
*/
|
||
export function showPickerDialog(items: string[], title: string, token?: CancellationToken): Promise<string[] | undefined>
|
||
|
||
/**
|
||
* Show multiple picker at center of screen.
|
||
* Use `workspace.env.dialog` to check if dialog could work.
|
||
*
|
||
* @param items A set of items that will be rendered as actions in the message.
|
||
* @param title Title of picker dialog.
|
||
* @param token A token that can be used to signal cancellation.
|
||
* @return A promise that resolves to the selected items or `undefined`.
|
||
*/
|
||
export function showPickerDialog<T extends QuickPickItem>(items: T[], title: string, token?: CancellationToken): Promise<T[] | undefined>
|
||
|
||
/**
|
||
* Show an information message to users. Optionally provide an array of items which will be presented as
|
||
* clickable buttons.
|
||
*
|
||
* @param message The message to show.
|
||
* @param items A set of items that will be rendered as actions in the message.
|
||
* @return Promise that resolves to the selected item or `undefined` when being dismissed.
|
||
*/
|
||
export function showInformationMessage(message: string, ...items: string[]): Promise<string | undefined>
|
||
/**
|
||
* Show an information message to users. Optionally provide an array of items which will be presented as
|
||
* clickable buttons.
|
||
*
|
||
* @param message The message to show.
|
||
* @param items A set of items that will be rendered as actions in the message.
|
||
* @return Promise that resolves to the selected item or `undefined` when being dismissed.
|
||
*/
|
||
export function showInformationMessage<T extends MessageItem>(message: string, ...items: T[]): Promise<T | undefined>
|
||
|
||
/**
|
||
* Show an warning message to users. Optionally provide an array of items which will be presented as
|
||
* clickable buttons.
|
||
*
|
||
* @param message The message to show.
|
||
* @param items A set of items that will be rendered as actions in the message.
|
||
* @return Promise that resolves to the selected item or `undefined` when being dismissed.
|
||
*/
|
||
export function showWarningMessage(message: string, ...items: string[]): Promise<string | undefined>
|
||
/**
|
||
* Show an warning message to users. Optionally provide an array of items which will be presented as
|
||
* clickable buttons.
|
||
*
|
||
* @param message The message to show.
|
||
* @param items A set of items that will be rendered as actions in the message.
|
||
* @return Promise that resolves to the selected item or `undefined` when being dismissed.
|
||
*/
|
||
export function showWarningMessage<T extends MessageItem>(message: string, ...items: T[]): Promise<T | undefined>
|
||
|
||
/**
|
||
* Show an error message to users. Optionally provide an array of items which will be presented as
|
||
* clickable buttons.
|
||
*
|
||
* @param message The message to show.
|
||
* @param items A set of items that will be rendered as actions in the message.
|
||
* @return Promise that resolves to the selected item or `undefined` when being dismissed.
|
||
*/
|
||
export function showErrorMessage(message: string, ...items: string[]): Promise<string | undefined>
|
||
/**
|
||
* Show an error message to users. Optionally provide an array of items which will be presented as
|
||
* clickable buttons.
|
||
*
|
||
* @param message The message to show.
|
||
* @param items A set of items that will be rendered as actions in the message.
|
||
* @return Promise that resolves to the selected item or `undefined` when being dismissed.
|
||
*/
|
||
export function showErrorMessage<T extends MessageItem>(message: string, ...items: T[]): Promise<T | undefined>
|
||
|
||
/**
|
||
* Show notification window at bottom right of screen.
|
||
*/
|
||
export function showNotification(config: NotificationConfig): Promise<void>
|
||
|
||
/**
|
||
* Show progress in the editor. Progress is shown while running the given callback
|
||
* and while the promise it returned isn't resolved nor rejected.
|
||
*
|
||
* @param task A callback returning a promise. Progress state can be reported with
|
||
* the provided [progress](#Progress)-object.
|
||
*
|
||
* To report discrete progress, use `increment` to indicate how much work has been completed. Each call with
|
||
* a `increment` value will be summed up and reflected as overall progress until 100% is reached (a value of
|
||
* e.g. `10` accounts for `10%` of work done).
|
||
*
|
||
* To monitor if the operation has been cancelled by the user, use the provided [`CancellationToken`](#CancellationToken).
|
||
*
|
||
* @return The thenable the task-callback returned.
|
||
*/
|
||
export function withProgress<R>(options: ProgressOptions, task: (progress: Progress<{
|
||
message?: string
|
||
increment?: number
|
||
}>, token: CancellationToken) => Thenable<R>): Promise<R>
|
||
|
||
/**
|
||
* Get selected range for current document
|
||
*/
|
||
export function getSelectedRange(visualmode: string): Promise<Range | null>
|
||
|
||
/**
|
||
* Visual select range of current document
|
||
*/
|
||
export function selectRange(range: Range): Promise<void>
|
||
|
||
/**
|
||
* Get diff between new highlight items and current highlights requested from vim
|
||
*
|
||
* @param {number} bufnr - Buffer number
|
||
* @param {string} ns - Highlight namespace
|
||
* @param {HighlightItem[]} items - Highlight items
|
||
* @param {[number, number] | undefined} - region 0 based start line and end line (end exclusive)
|
||
* @param {CancellationToken} token - CancellationToken
|
||
* @returns {Promise<HighlightDiff>}
|
||
*/
|
||
export function diffHighlights(bufnr: number, ns: string, items: ExtendedHighlightItem[], region?: [number, number] | undefined, token?: CancellationToken): Promise<HighlightDiff | null>
|
||
|
||
/**
|
||
* Apply highlight diffs, normally used with `window.diffHighlights`
|
||
*
|
||
* Timer is used to add highlights when there're too many highlight items to add,
|
||
* the highlight process won't be finished on that case.
|
||
*
|
||
* @param {number} bufnr - Buffer name
|
||
* @param {string} ns - Namespace
|
||
* @param {number} priority
|
||
* @param {HighlightDiff} diff
|
||
* @param {boolean} notify - Use notification, default false.
|
||
* @returns {Promise<void>}
|
||
*/
|
||
export function applyDiffHighlights(bufnr: number, ns: string, priority: number, diff: HighlightDiff, notify?: boolean): Promise<void>
|
||
}
|
||
// }}
|
||
|
||
// extensions module {{
|
||
export interface Logger {
|
||
readonly category: string
|
||
readonly level: string
|
||
log(...args: any[]): void
|
||
trace(message: any, ...args: any[]): void
|
||
debug(message: any, ...args: any[]): void
|
||
info(message: any, ...args: any[]): void
|
||
warn(message: any, ...args: any[]): void
|
||
error(message: any, ...args: any[]): void
|
||
fatal(message: any, ...args: any[]): void
|
||
mark(message: any, ...args: any[]): void
|
||
}
|
||
|
||
/**
|
||
* A memento represents a storage utility. It can store and retrieve
|
||
* values.
|
||
*/
|
||
export interface Memento {
|
||
|
||
/**
|
||
* Return a value.
|
||
*
|
||
* @param key A string.
|
||
* @return The stored value or `undefined`.
|
||
*/
|
||
get<T>(key: string): T | undefined
|
||
|
||
/**
|
||
* Return a value.
|
||
*
|
||
* @param key A string.
|
||
* @param defaultValue A value that should be returned when there is no
|
||
* value (`undefined`) with the given key.
|
||
* @return The stored value or the defaultValue.
|
||
*/
|
||
get<T>(key: string, defaultValue: T): T
|
||
|
||
/**
|
||
* Store a value. The value must be JSON-stringifyable.
|
||
*
|
||
* @param key A string.
|
||
* @param value A value. MUST not contain cyclic references.
|
||
*/
|
||
update(key: string, value: any): Promise<void>
|
||
}
|
||
|
||
export type ExtensionState = 'disabled' | 'loaded' | 'activated' | 'unknown'
|
||
|
||
export enum ExtensionType {
|
||
Global,
|
||
Local,
|
||
SingleFile,
|
||
Internal
|
||
}
|
||
|
||
export interface ExtensionJson {
|
||
name: string
|
||
main?: string
|
||
engines: {
|
||
[key: string]: string
|
||
}
|
||
version?: string
|
||
[key: string]: any
|
||
}
|
||
|
||
export interface ExtensionInfo {
|
||
id: string
|
||
version: string
|
||
description: string
|
||
root: string
|
||
exotic: boolean
|
||
uri?: string
|
||
state: ExtensionState
|
||
isLocal: boolean
|
||
packageJSON: Readonly<ExtensionJson>
|
||
}
|
||
|
||
/**
|
||
* Represents an extension.
|
||
*
|
||
* To get an instance of an `Extension` use [getExtension](#extensions.getExtension).
|
||
*/
|
||
export interface Extension<T> {
|
||
|
||
/**
|
||
* The canonical extension identifier in the form of: `publisher.name`.
|
||
*/
|
||
readonly id: string
|
||
|
||
/**
|
||
* The absolute file path of the directory containing this extension.
|
||
*/
|
||
readonly extensionPath: string
|
||
|
||
/**
|
||
* `true` if the extension has been activated.
|
||
*/
|
||
readonly isActive: boolean
|
||
|
||
/**
|
||
* The parsed contents of the extension's package.json.
|
||
*/
|
||
readonly packageJSON: any
|
||
|
||
/**
|
||
* The public API exported by this extension. It is an invalid action
|
||
* to access this field before this extension has been activated.
|
||
*/
|
||
readonly exports: T
|
||
|
||
/**
|
||
* Activates this extension and returns its public API.
|
||
*
|
||
* @return A promise that will resolve when this extension has been activated.
|
||
*/
|
||
activate(): Promise<T>
|
||
}
|
||
|
||
/**
|
||
* An extension context is a collection of utilities private to an
|
||
* extension.
|
||
*
|
||
* An instance of an `ExtensionContext` is provided as the first
|
||
* parameter to the `activate`-call of an extension.
|
||
*/
|
||
export interface ExtensionContext {
|
||
|
||
/**
|
||
* An array to which disposables can be added. When this
|
||
* extension is deactivated the disposables will be disposed.
|
||
*/
|
||
subscriptions: Disposable[]
|
||
|
||
/**
|
||
* The absolute file path of the directory containing the extension.
|
||
*/
|
||
extensionPath: string
|
||
|
||
/**
|
||
* Get the absolute path of a resource contained in the extension.
|
||
*
|
||
* @param relativePath A relative path to a resource contained in the extension.
|
||
* @return The absolute path of the resource.
|
||
*/
|
||
asAbsolutePath(relativePath: string): string
|
||
|
||
/**
|
||
* The absolute directory path for extension to download persist data.
|
||
* The directory might not exist.
|
||
*/
|
||
storagePath: string
|
||
|
||
/**
|
||
* A memento object that stores state in the context
|
||
* of the currently opened [workspace](#workspace.workspaceFolders).
|
||
*/
|
||
workspaceState: Memento
|
||
|
||
/**
|
||
* A memento object that stores state independent
|
||
* of the current opened [workspace](#workspace.workspaceFolders).
|
||
*/
|
||
globalState: Memento
|
||
|
||
logger: Logger
|
||
}
|
||
|
||
export type ExtensionApi = {
|
||
[index: string]: any
|
||
} | void | null | undefined
|
||
|
||
export interface PropertyScheme {
|
||
type: string
|
||
default: any
|
||
description: string
|
||
enum?: string[]
|
||
items?: any
|
||
[key: string]: any
|
||
}
|
||
|
||
export namespace extensions {
|
||
/**
|
||
* Fired on extension loaded, extension not activated yet.
|
||
*/
|
||
export const onDidLoadExtension: Event<Extension<ExtensionApi>>
|
||
|
||
/**
|
||
* Fired on extension activated.
|
||
*/
|
||
export const onDidActiveExtension: Event<Extension<ExtensionApi>>
|
||
|
||
/**
|
||
* Fired with extension id on extension unload.
|
||
*/
|
||
export const onDidUnloadExtension: Event<string>
|
||
|
||
/**
|
||
* Get all loaded extensions, without disabled extensions, extension may not activated.
|
||
*/
|
||
export const all: ReadonlyArray<Extension<ExtensionApi>>
|
||
|
||
/**
|
||
* Get state of specific extension.
|
||
*/
|
||
export function getExtensionState(id: string): ExtensionState
|
||
|
||
/**
|
||
* Get state of all extensions, including disabled extensions.
|
||
*/
|
||
export function getExtensionStates(): Promise<ExtensionInfo[]>
|
||
|
||
/**
|
||
* Check if extension is activated.
|
||
*/
|
||
export function isActivated(id: string): boolean
|
||
|
||
/**
|
||
* Dynamic add custom json schemes without using package.json.
|
||
*/
|
||
export function addSchemeProperty(key: string, def: PropertyScheme): void
|
||
}
|
||
// }}
|
||
|
||
// listManager module {{
|
||
export interface LocationWithLine {
|
||
uri: string
|
||
/**
|
||
* Match text of line.
|
||
*/
|
||
line: string
|
||
/**
|
||
* Highlight text in line.
|
||
*/
|
||
text?: string
|
||
}
|
||
|
||
export interface AnsiHighlight {
|
||
/**
|
||
* Byte indexes, 0 based.
|
||
*/
|
||
span: [number, number]
|
||
hlGroup: string
|
||
}
|
||
|
||
export interface ListItem {
|
||
label: string
|
||
preselect?: boolean
|
||
filterText?: string
|
||
/**
|
||
* A string that should be used when comparing this item
|
||
* with other items, only used for fuzzy filter.
|
||
*/
|
||
sortText?: string
|
||
location?: Location | LocationWithLine | string
|
||
data?: any
|
||
ansiHighlights?: AnsiHighlight[]
|
||
resolved?: boolean
|
||
}
|
||
|
||
export interface ListHighlights {
|
||
/**
|
||
* Byte indexes list, 0 based.
|
||
*/
|
||
spans: [number, number][]
|
||
/**
|
||
* `CocListSearch` is used when it not exist.
|
||
*/
|
||
hlGroup?: string
|
||
}
|
||
|
||
export type ListMode = 'normal' | 'insert'
|
||
|
||
export type ListMatcher = 'strict' | 'fuzzy' | 'regex'
|
||
|
||
export interface ListOptions {
|
||
position: string
|
||
reverse: boolean
|
||
input: string
|
||
ignorecase: boolean
|
||
interactive: boolean
|
||
sort: boolean
|
||
mode: ListMode
|
||
matcher: ListMatcher
|
||
autoPreview: boolean
|
||
numberSelect: boolean
|
||
noQuit: boolean
|
||
first: boolean
|
||
}
|
||
|
||
export interface ListContext {
|
||
/**
|
||
* Input on list activated.
|
||
*/
|
||
input: string
|
||
/**
|
||
* Current work directory on activated.
|
||
*/
|
||
cwd: string
|
||
/**
|
||
* Options of list.
|
||
*/
|
||
options: ListOptions
|
||
/**
|
||
* Arguments passed to list.
|
||
*/
|
||
args: string[]
|
||
/**
|
||
* Original window on list invoke.
|
||
*/
|
||
window: Window
|
||
/**
|
||
* Original buffer on list invoke.
|
||
*/
|
||
buffer: Buffer
|
||
listWindow: Window | null
|
||
}
|
||
|
||
export interface ListAction {
|
||
/**
|
||
* Action name
|
||
*/
|
||
name: string
|
||
/**
|
||
* Should persist list window on invoke.
|
||
*/
|
||
persist?: boolean
|
||
/**
|
||
* Should reload list after invoke.
|
||
*/
|
||
reload?: boolean
|
||
/**
|
||
* Inovke all selected items in parallel.
|
||
*/
|
||
parallel?: boolean
|
||
/**
|
||
* Support handle multiple items at once.
|
||
*/
|
||
multiple?: boolean
|
||
/**
|
||
* Tab positioned list should be persisted (no window switch) on action invoke.
|
||
*/
|
||
tabPersist?: boolean
|
||
/**
|
||
* Item is array of selected items when multiple is true.
|
||
*/
|
||
execute: (item: ListItem | ListItem[], context: ListContext) => ProviderResult<void>
|
||
}
|
||
|
||
export interface MultipleListAction extends Omit<ListAction, 'execute'> {
|
||
multiple: true
|
||
execute: (item: ListItem[], context: ListContext) => ProviderResult<void>
|
||
}
|
||
|
||
export interface ListTask {
|
||
on(event: 'data', callback: (item: ListItem) => void): void
|
||
on(event: 'end', callback: () => void): void
|
||
on(event: 'error', callback: (msg: string | Error) => void): void
|
||
dispose(): void
|
||
}
|
||
|
||
export interface ListArgument {
|
||
key?: string
|
||
hasValue?: boolean
|
||
name: string
|
||
description: string
|
||
}
|
||
|
||
export interface IList {
|
||
/**
|
||
* Unique name of list.
|
||
*/
|
||
name: string
|
||
/**
|
||
* Default action name.
|
||
*/
|
||
defaultAction: string
|
||
/**
|
||
* Action list.
|
||
*/
|
||
actions: ListAction[]
|
||
/**
|
||
* Load list items.
|
||
*/
|
||
loadItems(context: ListContext, token: CancellationToken): Promise<ListItem[] | ListTask | null | undefined>
|
||
/**
|
||
* Should be true when interactive is supported.
|
||
*/
|
||
interactive?: boolean
|
||
/**
|
||
* Description of list.
|
||
*/
|
||
description?: string
|
||
/**
|
||
* Detail description, shown in help.
|
||
*/
|
||
detail?: string
|
||
/**
|
||
* Options supported by list.
|
||
*/
|
||
options?: ListArgument[]
|
||
/**
|
||
* Resolve list item.
|
||
*/
|
||
resolveItem?(item: ListItem): Promise<ListItem | null>
|
||
/**
|
||
* Highlight buffer by vim's syntax commands.
|
||
*/
|
||
doHighlight?(): void
|
||
/**
|
||
* Called on list unregistered.
|
||
*/
|
||
dispose?(): void
|
||
}
|
||
|
||
export interface PreviewOptions {
|
||
bufname?: string
|
||
lines: string[]
|
||
filetype: string
|
||
lnum?: number
|
||
range?: Range
|
||
/**
|
||
* @deprecated not used
|
||
*/
|
||
sketch?: boolean
|
||
}
|
||
|
||
export namespace listManager {
|
||
/**
|
||
* Registered list names set.
|
||
*/
|
||
export const names: ReadonlyArray<string>
|
||
/**
|
||
* Register list, list session can be created by `CocList [name]` after registered.
|
||
*/
|
||
export function registerList(list: IList): Disposable
|
||
}
|
||
// }}
|
||
|
||
// snippetManager module {{
|
||
export interface SnippetSession {
|
||
isActive: boolean
|
||
}
|
||
|
||
export interface UltiSnippetOption {
|
||
regex?: string
|
||
context?: string
|
||
}
|
||
|
||
/**
|
||
* A snippet string is a template which allows to insert text
|
||
* and to control the editor cursor when insertion happens.
|
||
*
|
||
* A snippet can define tab stops and placeholders with `$1`, `$2`
|
||
* and `${3:foo}`. `$0` defines the final tab stop, it defaults to
|
||
* the end of the snippet. Variables are defined with `$name` and
|
||
* `${name:default value}`. The full snippet syntax is documented
|
||
* [here](https://code.visualstudio.com/docs/editor/userdefinedsnippets#_creating-your-own-snippets).
|
||
*/
|
||
export class SnippetString {
|
||
/**
|
||
* The snippet string.
|
||
*/
|
||
value: string
|
||
|
||
constructor(
|
||
/**
|
||
* The default snippet string.
|
||
*/
|
||
value?: string
|
||
)
|
||
|
||
/**
|
||
* Builder-function that appends the given string to
|
||
* the {@link SnippetString.value `value`} of this snippet string.
|
||
*
|
||
* @param string A value to append 'as given'. The string will be escaped.
|
||
* @return This snippet string.
|
||
*/
|
||
appendText(string: string): SnippetString
|
||
|
||
/**
|
||
* Builder-function that appends a tabstop (`$1`, `$2` etc) to
|
||
* the {@link SnippetString.value `value`} of this snippet string.
|
||
*
|
||
* @param number The number of this tabstop, defaults to an auto-increment
|
||
* value starting at 1.
|
||
* @return This snippet string.
|
||
*/
|
||
appendTabstop(number?: number): SnippetString
|
||
|
||
/**
|
||
* Builder-function that appends a placeholder (`${1:value}`) to
|
||
* the {@link SnippetString.value `value`} of this snippet string.
|
||
*
|
||
* @param value The value of this placeholder - either a string or a function
|
||
* with which a nested snippet can be created.
|
||
* @param number The number of this tabstop, defaults to an auto-increment
|
||
* value starting at 1.
|
||
* @return This snippet string.
|
||
*/
|
||
appendPlaceholder(value: string | ((snippet: SnippetString) => any), number?: number): SnippetString
|
||
|
||
/**
|
||
* Builder-function that appends a choice (`${1|a,b,c|}`) to
|
||
* the {@link SnippetString.value `value`} of this snippet string.
|
||
*
|
||
* @param values The values for choices - the array of strings
|
||
* @param number The number of this tabstop, defaults to an auto-increment
|
||
* value starting at 1.
|
||
* @return This snippet string.
|
||
*/
|
||
appendChoice(values: string[], number?: number): SnippetString
|
||
|
||
/**
|
||
* Builder-function that appends a variable (`${VAR}`) to
|
||
* the {@link SnippetString.value `value`} of this snippet string.
|
||
*
|
||
* @param name The name of the variable - excluding the `$`.
|
||
* @param defaultValue The default value which is used when the variable name cannot
|
||
* be resolved - either a string or a function with which a nested snippet can be created.
|
||
* @return This snippet string.
|
||
*/
|
||
appendVariable(name: string, defaultValue: string | ((snippet: SnippetString) => any)): SnippetString
|
||
}
|
||
/**
|
||
* Manage snippet sessions.
|
||
*/
|
||
export namespace snippetManager {
|
||
/**
|
||
* Get snippet session by bufnr.
|
||
*/
|
||
export function getSession(bufnr: number): SnippetSession | undefined
|
||
/**
|
||
* Resolve snippet string to text.
|
||
*/
|
||
export function resolveSnippet(body: string, ultisnip?: UltiSnippetOption): Promise<string>
|
||
/**
|
||
* Insert snippet at current buffer.
|
||
*
|
||
* @param {string} snippet Textmate snippet string.
|
||
* @param {boolean} select Not select first placeholder when false, default `true`.
|
||
* @param {Range} range Repalce range, insert to current cursor position when undefined.
|
||
* @returns {Promise<boolean>} true when insert success.
|
||
*/
|
||
export function insertSnippet(snippet: string | SnippetString, select?: boolean, range?: Range, ultisnip?: boolean): Promise<boolean>
|
||
|
||
/**
|
||
* Jump to next placeholder, only works when snippet session activated.
|
||
*/
|
||
export function nextPlaceholder(): Promise<void>
|
||
/**
|
||
* Jump to previous placeholder, only works when snippet session activated.
|
||
*/
|
||
export function previousPlaceholder(): Promise<void>
|
||
/**
|
||
* Cancel snippet session of current buffer, does nothing when no session activated.
|
||
*/
|
||
export function cancel(): void
|
||
/**
|
||
* Check if snippet activated for bufnr.
|
||
*/
|
||
export function isActivated(bufnr: number): boolean
|
||
}
|
||
// }}
|
||
|
||
// diagnosticManager module {{
|
||
export interface DiagnosticItem {
|
||
file: string
|
||
lnum: number
|
||
col: number
|
||
source: string
|
||
code: string | number
|
||
message: string
|
||
severity: string
|
||
level: number
|
||
location: Location
|
||
}
|
||
|
||
export enum DiagnosticKind {
|
||
Syntax,
|
||
Semantic,
|
||
Suggestion,
|
||
}
|
||
|
||
/**
|
||
* A diagnostics collection is a container that manages a set of
|
||
* [diagnostics](#Diagnostic). Diagnostics are always scopes to a
|
||
* diagnostics collection and a resource.
|
||
*
|
||
* To get an instance of a `DiagnosticCollection` use
|
||
* [createDiagnosticCollection](#languages.createDiagnosticCollection).
|
||
*/
|
||
export interface DiagnosticCollection {
|
||
|
||
/**
|
||
* The name of this diagnostic collection, for instance `typescript`. Every diagnostic
|
||
* from this collection will be associated with this name. Also, the task framework uses this
|
||
* name when defining [problem matchers](https://code.visualstudio.com/docs/editor/tasks#_defining-a-problem-matcher).
|
||
*/
|
||
readonly name: string
|
||
|
||
/**
|
||
* Assign diagnostics for given resource. Will replace
|
||
* existing diagnostics for that resource.
|
||
*
|
||
* @param uri A resource identifier.
|
||
* @param diagnostics Array of diagnostics or `undefined`
|
||
*/
|
||
set(uri: string, diagnostics: Diagnostic[] | null): void
|
||
/**
|
||
* Replace all entries in this collection.
|
||
*
|
||
* Diagnostics of multiple tuples of the same uri will be merged, e.g
|
||
* `[[file1, [d1]], [file1, [d2]]]` is equivalent to `[[file1, [d1, d2]]]`.
|
||
* If a diagnostics item is `undefined` as in `[file1, undefined]`
|
||
* all previous but not subsequent diagnostics are removed.
|
||
*
|
||
* @param entries An array of tuples, like `[[file1, [d1, d2]], [file2, [d3, d4, d5]]]`, or `undefined`.
|
||
*/
|
||
set(entries: [string, Diagnostic[] | null][] | string, diagnostics?: Diagnostic[]): void
|
||
|
||
/**
|
||
* Remove all diagnostics from this collection that belong
|
||
* to the provided `uri`. The same as `#set(uri, undefined)`.
|
||
*
|
||
* @param uri A resource identifier.
|
||
*/
|
||
delete(uri: string): void
|
||
|
||
/**
|
||
* Remove all diagnostics from this collection. The same
|
||
* as calling `#set(undefined)`
|
||
*/
|
||
clear(): void
|
||
|
||
/**
|
||
* Iterate over each entry in this collection.
|
||
*
|
||
* @param callback Function to execute for each entry.
|
||
* @param thisArg The `this` context used when invoking the handler function.
|
||
*/
|
||
forEach(callback: (uri: string, diagnostics: Diagnostic[], collection: DiagnosticCollection) => any, thisArg?: any): void
|
||
|
||
/**
|
||
* Get the diagnostics for a given resource. *Note* that you cannot
|
||
* modify the diagnostics-array returned from this call.
|
||
*
|
||
* @param uri A resource identifier.
|
||
* @returns An immutable array of [diagnostics](#Diagnostic) or `undefined`.
|
||
*/
|
||
get(uri: string): Diagnostic[] | undefined
|
||
|
||
/**
|
||
* Check if this collection contains diagnostics for a
|
||
* given resource.
|
||
*
|
||
* @param uri A resource identifier.
|
||
* @returns `true` if this collection has diagnostic for the given resource.
|
||
*/
|
||
has(uri: string): boolean
|
||
|
||
/**
|
||
* Dispose and free associated resources. Calls
|
||
* [clear](#DiagnosticCollection.clear).
|
||
*/
|
||
dispose(): void
|
||
}
|
||
|
||
export interface DiagnosticEventParams {
|
||
bufnr: number
|
||
uri: string
|
||
diagnostics: ReadonlyArray<Diagnostic>
|
||
}
|
||
|
||
export namespace diagnosticManager {
|
||
|
||
export const onDidRefresh: Event<DiagnosticEventParams>
|
||
/**
|
||
* Create collection by name
|
||
*/
|
||
export function create(name: string): DiagnosticCollection
|
||
|
||
/**
|
||
* Get readonly diagnostics for uri
|
||
*/
|
||
export function getDiagnostics(uri: string): { [collection: string]: Diagnostic[] }
|
||
|
||
/**
|
||
* Get readonly diagnostics by document and range.
|
||
*/
|
||
export function getDiagnosticsInRange(doc: TextDocumentIdentifier, range: Range): ReadonlyArray<Diagnostic>
|
||
/**
|
||
* Get all sorted diagnostics
|
||
*/
|
||
export function getDiagnosticList(): Promise<ReadonlyArray<DiagnosticItem>>
|
||
|
||
/**
|
||
* All diagnostics at current cursor position.
|
||
*/
|
||
export function getCurrentDiagnostics(): Promise<ReadonlyArray<Diagnostic>>
|
||
|
||
/**
|
||
* Get diagnostic collection.
|
||
*/
|
||
export function getCollectionByName(name: string): DiagnosticCollection
|
||
}
|
||
// }}
|
||
|
||
// language client {{
|
||
/**
|
||
* An action to be performed when the connection is producing errors.
|
||
*/
|
||
export enum ErrorAction {
|
||
/**
|
||
* Continue running the server.
|
||
*/
|
||
Continue = 1,
|
||
/**
|
||
* Shutdown the server.
|
||
*/
|
||
Shutdown = 2
|
||
}
|
||
/**
|
||
* An action to be performed when the connection to a server got closed.
|
||
*/
|
||
export enum CloseAction {
|
||
/**
|
||
* Don't restart the server. The connection stays closed.
|
||
*/
|
||
DoNotRestart = 1,
|
||
/**
|
||
* Restart the server.
|
||
*/
|
||
Restart = 2
|
||
}
|
||
/**
|
||
* A pluggable error handler that is invoked when the connection is either
|
||
* producing errors or got closed.
|
||
*/
|
||
export interface ErrorHandler {
|
||
/**
|
||
* An error has occurred while writing or reading from the connection.
|
||
*
|
||
* @param error - the error received
|
||
* @param message - the message to be delivered to the server if know.
|
||
* @param count - a count indicating how often an error is received. Will
|
||
* be reset if a message got successfully send or received.
|
||
*/
|
||
error(error: Error, message: { jsonrpc: string }, count: number): ErrorAction
|
||
/**
|
||
* The connection to the server got closed.
|
||
*/
|
||
closed(): CloseAction
|
||
}
|
||
export interface InitializationFailedHandler {
|
||
(error: Error | any): boolean
|
||
}
|
||
|
||
export interface SynchronizeOptions {
|
||
configurationSection?: string | string[]
|
||
fileEvents?: FileSystemWatcher | FileSystemWatcher[]
|
||
}
|
||
|
||
export enum RevealOutputChannelOn {
|
||
Info = 1,
|
||
Warn = 2,
|
||
Error = 3,
|
||
Never = 4
|
||
}
|
||
export interface ConfigurationItem {
|
||
/**
|
||
* The scope to get the configuration section for.
|
||
*/
|
||
scopeUri?: string
|
||
/**
|
||
* The configuration section asked for.
|
||
*/
|
||
section?: string
|
||
}
|
||
export interface ResponseError<D> {
|
||
code: number
|
||
data: D | undefined
|
||
}
|
||
|
||
export type HandlerResult<R, E> = R | ResponseError<E> | Thenable<R> | Thenable<ResponseError<E>> | Thenable<R | ResponseError<E>>
|
||
|
||
export interface RequestHandler<P, R, E> {
|
||
(params: P, token: CancellationToken): HandlerResult<R, E>
|
||
}
|
||
|
||
export interface RequestHandler0<R, E> {
|
||
(token: CancellationToken): HandlerResult<R, E>
|
||
}
|
||
/**
|
||
* The parameters of a configuration request.
|
||
*/
|
||
export interface ConfigurationParams {
|
||
items: ConfigurationItem[]
|
||
}
|
||
|
||
export interface ConfigurationWorkspaceMiddleware {
|
||
configuration?: (params: ConfigurationParams, token: CancellationToken, next: RequestHandler<ConfigurationParams, any[], void>) => HandlerResult<any[], void>
|
||
}
|
||
|
||
export interface WorkspaceFolderWorkspaceMiddleware {
|
||
workspaceFolders?: (token: CancellationToken, next: RequestHandler0<WorkspaceFolder[] | null, void>) => HandlerResult<WorkspaceFolder[] | null, void>
|
||
didChangeWorkspaceFolders?: NextSignature<WorkspaceFoldersChangeEvent, void>
|
||
}
|
||
|
||
export interface ProvideTypeDefinitionSignature {
|
||
(
|
||
this: void,
|
||
document: LinesTextDocument,
|
||
position: Position,
|
||
token: CancellationToken
|
||
): ProviderResult<Definition | DefinitionLink[]>
|
||
}
|
||
|
||
export interface TypeDefinitionMiddleware {
|
||
provideTypeDefinition?: (
|
||
this: void,
|
||
document: LinesTextDocument,
|
||
position: Position,
|
||
token: CancellationToken,
|
||
next: ProvideTypeDefinitionSignature
|
||
) => ProviderResult<Definition | DefinitionLink[]>
|
||
}
|
||
|
||
export interface ProvideImplementationSignature {
|
||
(this: void, document: LinesTextDocument, position: Position, token: CancellationToken): ProviderResult<Definition | DefinitionLink[]>
|
||
}
|
||
|
||
export interface ImplementationMiddleware {
|
||
provideImplementation?: (this: void, document: LinesTextDocument, position: Position, token: CancellationToken, next: ProvideImplementationSignature) => ProviderResult<Definition | DefinitionLink[]>
|
||
}
|
||
export type ProvideDocumentColorsSignature = (document: LinesTextDocument, token: CancellationToken) => ProviderResult<ColorInformation[]>
|
||
|
||
export type ProvideColorPresentationSignature = (
|
||
color: Color,
|
||
context: { document: LinesTextDocument; range: Range },
|
||
token: CancellationToken
|
||
) => ProviderResult<ColorPresentation[]>
|
||
|
||
export interface ColorProviderMiddleware {
|
||
provideDocumentColors?: (
|
||
this: void,
|
||
document: LinesTextDocument,
|
||
token: CancellationToken,
|
||
next: ProvideDocumentColorsSignature
|
||
) => ProviderResult<ColorInformation[]>
|
||
provideColorPresentations?: (
|
||
this: void,
|
||
color: Color,
|
||
context: { document: LinesTextDocument; range: Range },
|
||
token: CancellationToken,
|
||
next: ProvideColorPresentationSignature
|
||
) => ProviderResult<ColorPresentation[]>
|
||
}
|
||
|
||
export interface ProvideDeclarationSignature {
|
||
(this: void, document: LinesTextDocument, position: Position, token: CancellationToken): ProviderResult<Declaration | DeclarationLink[]>
|
||
}
|
||
|
||
export interface DeclarationMiddleware {
|
||
provideDeclaration?: (this: void, document: LinesTextDocument, position: Position, token: CancellationToken, next: ProvideDeclarationSignature) => ProviderResult<Declaration | DeclarationLink[]>
|
||
}
|
||
|
||
export type ProvideFoldingRangeSignature = (
|
||
this: void,
|
||
document: LinesTextDocument,
|
||
context: FoldingContext,
|
||
token: CancellationToken
|
||
) => ProviderResult<FoldingRange[]>
|
||
|
||
export interface FoldingRangeProviderMiddleware {
|
||
provideFoldingRanges?: (
|
||
this: void,
|
||
document: LinesTextDocument,
|
||
context: FoldingContext,
|
||
token: CancellationToken,
|
||
next: ProvideFoldingRangeSignature
|
||
) => ProviderResult<FoldingRange[]>
|
||
}
|
||
|
||
export interface PrepareCallHierarchySignature {
|
||
(this: void, document: LinesTextDocument, position: Position, token: CancellationToken): ProviderResult<CallHierarchyItem | CallHierarchyItem[]>
|
||
}
|
||
|
||
export interface CallHierarchyIncomingCallsSignature {
|
||
(this: void, item: CallHierarchyItem, token: CancellationToken): ProviderResult<CallHierarchyIncomingCall[]>
|
||
}
|
||
|
||
export interface CallHierarchyOutgoingCallsSignature {
|
||
(this: void, item: CallHierarchyItem, token: CancellationToken): ProviderResult<CallHierarchyOutgoingCall[]>
|
||
}
|
||
export interface CallHierarchyMiddleware {
|
||
prepareCallHierarchy?: (
|
||
this: void,
|
||
document: LinesTextDocument,
|
||
positions: Position,
|
||
token: CancellationToken,
|
||
next: PrepareCallHierarchySignature
|
||
) => ProviderResult<CallHierarchyItem | CallHierarchyItem[]>
|
||
provideCallHierarchyIncomingCalls?: (
|
||
this: void,
|
||
item: CallHierarchyItem,
|
||
token: CancellationToken,
|
||
next: CallHierarchyIncomingCallsSignature
|
||
) => ProviderResult<CallHierarchyIncomingCall[]>
|
||
provideCallHierarchyOutgoingCalls?: (
|
||
this: void,
|
||
item: CallHierarchyItem,
|
||
token: CancellationToken,
|
||
next: CallHierarchyOutgoingCallsSignature
|
||
) => ProviderResult<CallHierarchyOutgoingCall[]>
|
||
}
|
||
|
||
export interface DocumentSemanticsTokensSignature {
|
||
(this: void, document: LinesTextDocument, token: CancellationToken): ProviderResult<SemanticTokens>
|
||
}
|
||
|
||
export interface DocumentSemanticsTokensEditsSignature {
|
||
(this: void, document: LinesTextDocument, previousResultId: string, token: CancellationToken): ProviderResult<SemanticTokens | SemanticTokensDelta>
|
||
}
|
||
|
||
export interface DocumentRangeSemanticTokensSignature {
|
||
(this: void, document: LinesTextDocument, range: Range, token: CancellationToken): ProviderResult<SemanticTokens>
|
||
}
|
||
|
||
export interface SemanticTokensMiddleware {
|
||
provideDocumentSemanticTokens?: (
|
||
this: void,
|
||
document: LinesTextDocument,
|
||
token: CancellationToken,
|
||
next: DocumentSemanticsTokensSignature
|
||
) => ProviderResult<SemanticTokens>
|
||
provideDocumentSemanticTokensEdits?: (
|
||
this: void,
|
||
document: LinesTextDocument,
|
||
previousResultId: string,
|
||
token: CancellationToken,
|
||
next: DocumentSemanticsTokensEditsSignature
|
||
) => ProviderResult<SemanticTokens | SemanticTokensDelta>
|
||
provideDocumentRangeSemanticTokens?: (
|
||
this: void,
|
||
document: LinesTextDocument,
|
||
range: Range,
|
||
token: CancellationToken,
|
||
next: DocumentRangeSemanticTokensSignature
|
||
) => ProviderResult<SemanticTokens>
|
||
}
|
||
|
||
|
||
/**
|
||
* File operation middleware
|
||
* @since 3.16.0
|
||
*/
|
||
export interface FileOperationsMiddleware {
|
||
didCreateFiles?: NextSignature<FileCreateEvent, void>
|
||
willCreateFiles?: NextSignature<FileWillCreateEvent, Thenable<WorkspaceEdit | null | undefined>>
|
||
didRenameFiles?: NextSignature<FileRenameEvent, void>
|
||
willRenameFiles?: NextSignature<FileWillRenameEvent, Thenable<WorkspaceEdit | null | undefined>>
|
||
didDeleteFiles?: NextSignature<FileDeleteEvent, void>
|
||
willDeleteFiles?: NextSignature<FileWillDeleteEvent, Thenable<WorkspaceEdit | null | undefined>>
|
||
}
|
||
|
||
export interface ProvideLinkedEditingRangeSignature {
|
||
(this: void, document: LinesTextDocument, position: Position, token: CancellationToken): ProviderResult<LinkedEditingRanges>
|
||
}
|
||
|
||
export interface LinkedEditingRangeMiddleware {
|
||
provideLinkedEditingRange?: (
|
||
this: void,
|
||
document: LinesTextDocument,
|
||
position: Position,
|
||
token: CancellationToken,
|
||
next: ProvideLinkedEditingRangeSignature
|
||
) => ProviderResult<LinkedEditingRanges>
|
||
}
|
||
|
||
export interface ProvideSelectionRangeSignature {
|
||
(this: void, document: LinesTextDocument, positions: Position[], token: CancellationToken): ProviderResult<SelectionRange[]>
|
||
}
|
||
|
||
export interface SelectionRangeProviderMiddleware {
|
||
provideSelectionRanges?: (this: void, document: LinesTextDocument, positions: Position[], token: CancellationToken, next: ProvideSelectionRangeSignature) => ProviderResult<SelectionRange[]>
|
||
}
|
||
|
||
export interface HandleWorkDoneProgressSignature {
|
||
(this: void, token: ProgressToken, params: WorkDoneProgressBegin | WorkDoneProgressReport | WorkDoneProgressEnd): void
|
||
}
|
||
|
||
export interface HandleDiagnosticsSignature {
|
||
(this: void, uri: string, diagnostics: Diagnostic[]): void
|
||
}
|
||
|
||
export interface ProvideCompletionItemsSignature {
|
||
(this: void, document: LinesTextDocument, position: Position, context: CompletionContext, token: CancellationToken): ProviderResult<CompletionItem[] | CompletionList | null>
|
||
}
|
||
|
||
export interface ResolveCompletionItemSignature {
|
||
(this: void, item: CompletionItem, token: CancellationToken): ProviderResult<CompletionItem>
|
||
}
|
||
|
||
export interface ProvideHoverSignature {
|
||
(this: void, document: LinesTextDocument, position: Position, token: CancellationToken): ProviderResult<Hover>
|
||
}
|
||
|
||
export interface ProvideSignatureHelpSignature {
|
||
(this: void, document: LinesTextDocument, position: Position, context: SignatureHelpContext, token: CancellationToken): ProviderResult<SignatureHelp>
|
||
}
|
||
|
||
export interface ProvideDefinitionSignature {
|
||
(this: void, document: LinesTextDocument, position: Position, token: CancellationToken): ProviderResult<Definition | DefinitionLink[]>
|
||
}
|
||
|
||
export interface ProvideReferencesSignature {
|
||
(this: void, document: LinesTextDocument, position: Position, options: {
|
||
includeDeclaration: boolean
|
||
}, token: CancellationToken): ProviderResult<Location[]>
|
||
}
|
||
|
||
export interface ProvideDocumentHighlightsSignature {
|
||
(this: void, document: LinesTextDocument, position: Position, token: CancellationToken): ProviderResult<DocumentHighlight[]>
|
||
}
|
||
|
||
export interface ProvideDocumentSymbolsSignature {
|
||
(this: void, document: LinesTextDocument, token: CancellationToken): ProviderResult<SymbolInformation[] | DocumentSymbol[]>
|
||
}
|
||
|
||
export interface ProvideWorkspaceSymbolsSignature {
|
||
(this: void, query: string, token: CancellationToken): ProviderResult<SymbolInformation[]>
|
||
}
|
||
|
||
export interface ProvideCodeActionsSignature {
|
||
(this: void, document: LinesTextDocument, range: Range, context: CodeActionContext, token: CancellationToken): ProviderResult<(Command | CodeAction)[]>
|
||
}
|
||
|
||
export interface ResolveCodeActionSignature {
|
||
(this: void, item: CodeAction, token: CancellationToken): ProviderResult<CodeAction>
|
||
}
|
||
|
||
export interface ProvideCodeLensesSignature {
|
||
(this: void, document: LinesTextDocument, token: CancellationToken): ProviderResult<CodeLens[]>
|
||
}
|
||
|
||
export interface ResolveCodeLensSignature {
|
||
(this: void, codeLens: CodeLens, token: CancellationToken): ProviderResult<CodeLens>
|
||
}
|
||
|
||
export interface ProvideDocumentFormattingEditsSignature {
|
||
(this: void, document: LinesTextDocument, options: FormattingOptions, token: CancellationToken): ProviderResult<TextEdit[]>
|
||
}
|
||
|
||
export interface ProvideDocumentRangeFormattingEditsSignature {
|
||
(this: void, document: LinesTextDocument, range: Range, options: FormattingOptions, token: CancellationToken): ProviderResult<TextEdit[]>
|
||
}
|
||
|
||
export interface ProvideOnTypeFormattingEditsSignature {
|
||
(this: void, document: LinesTextDocument, position: Position, ch: string, options: FormattingOptions, token: CancellationToken): ProviderResult<TextEdit[]>
|
||
}
|
||
|
||
export interface PrepareRenameSignature {
|
||
(this: void, document: LinesTextDocument, position: Position, token: CancellationToken): ProviderResult<Range | {
|
||
range: Range
|
||
placeholder: string
|
||
}>
|
||
}
|
||
|
||
export interface ProvideRenameEditsSignature {
|
||
(this: void, document: LinesTextDocument, position: Position, newName: string, token: CancellationToken): ProviderResult<WorkspaceEdit>
|
||
}
|
||
|
||
export interface ProvideDocumentLinksSignature {
|
||
(this: void, document: LinesTextDocument, token: CancellationToken): ProviderResult<DocumentLink[]>
|
||
}
|
||
|
||
export interface ResolveDocumentLinkSignature {
|
||
(this: void, link: DocumentLink, token: CancellationToken): ProviderResult<DocumentLink>
|
||
}
|
||
|
||
export interface ExecuteCommandSignature {
|
||
(this: void, command: string, args: any[]): ProviderResult<any>
|
||
}
|
||
|
||
export interface NextSignature<P, R> {
|
||
(this: void, data: P, next: (data: P) => R): R
|
||
}
|
||
|
||
export interface DidChangeConfigurationSignature {
|
||
(this: void, sections: string[] | undefined): void
|
||
}
|
||
|
||
export interface DidChangeWatchedFileSignature {
|
||
(this: void, event: FileEvent): void
|
||
}
|
||
|
||
export interface _WorkspaceMiddleware {
|
||
didChangeConfiguration?: (this: void, sections: string[] | undefined, next: DidChangeConfigurationSignature) => void
|
||
didChangeWatchedFile?: (this: void, event: FileEvent, next: DidChangeWatchedFileSignature) => void
|
||
}
|
||
|
||
export type WorkspaceMiddleware = _WorkspaceMiddleware & ConfigurationWorkspaceMiddleware & WorkspaceFolderWorkspaceMiddleware & FileOperationsMiddleware
|
||
|
||
/**
|
||
* Params to show a document.
|
||
*
|
||
* @since 3.16.0
|
||
*/
|
||
export interface ShowDocumentParams {
|
||
/**
|
||
* The document uri to show.
|
||
*/
|
||
uri: string
|
||
/**
|
||
* Indicates to show the resource in an external program.
|
||
* To show for example `https://code.visualstudio.com/`
|
||
* in the default WEB browser set `external` to `true`.
|
||
*/
|
||
external?: boolean
|
||
/**
|
||
* An optional property to indicate whether the editor
|
||
* showing the document should take focus or not.
|
||
* Clients might ignore this property if an external
|
||
* program in started.
|
||
*/
|
||
takeFocus?: boolean
|
||
/**
|
||
* An optional selection range if the document is a text
|
||
* document. Clients might ignore the property if an
|
||
* external program is started or the file is not a text
|
||
* file.
|
||
*/
|
||
selection?: Range
|
||
}
|
||
/**
|
||
* The result of an show document request.
|
||
*
|
||
* @since 3.16.0
|
||
*/
|
||
export interface ShowDocumentResult {
|
||
/**
|
||
* A boolean indicating if the show was successful.
|
||
*/
|
||
success: boolean
|
||
}
|
||
|
||
export interface _WindowMiddleware {
|
||
showDocument?: (
|
||
this: void,
|
||
params: ShowDocumentParams,
|
||
next: RequestHandler<ShowDocumentParams, ShowDocumentResult, void>
|
||
) => Promise<ShowDocumentResult>
|
||
}
|
||
export type WindowMiddleware = _WindowMiddleware
|
||
|
||
/**
|
||
* The Middleware lets extensions intercept the request and notifications send and received
|
||
* from the server
|
||
*/
|
||
interface _Middleware {
|
||
didOpen?: NextSignature<LinesTextDocument, void>
|
||
didChange?: NextSignature<DidChangeTextDocumentParams, void>
|
||
willSave?: NextSignature<TextDocumentWillSaveEvent, void>
|
||
willSaveWaitUntil?: NextSignature<TextDocumentWillSaveEvent, Thenable<TextEdit[]>>
|
||
didSave?: NextSignature<LinesTextDocument, void>
|
||
didClose?: NextSignature<LinesTextDocument, void>
|
||
handleDiagnostics?: (this: void, uri: string, diagnostics: Diagnostic[], next: HandleDiagnosticsSignature) => void
|
||
provideCompletionItem?: (this: void, document: LinesTextDocument, position: Position, context: CompletionContext, token: CancellationToken, next: ProvideCompletionItemsSignature) => ProviderResult<CompletionItem[] | CompletionList | null>
|
||
resolveCompletionItem?: (this: void, item: CompletionItem, token: CancellationToken, next: ResolveCompletionItemSignature) => ProviderResult<CompletionItem>
|
||
provideHover?: (this: void, document: LinesTextDocument, position: Position, token: CancellationToken, next: ProvideHoverSignature) => ProviderResult<Hover>
|
||
provideSignatureHelp?: (this: void, document: LinesTextDocument, position: Position, context: SignatureHelpContext, token: CancellationToken, next: ProvideSignatureHelpSignature) => ProviderResult<SignatureHelp>
|
||
provideDefinition?: (this: void, document: LinesTextDocument, position: Position, token: CancellationToken, next: ProvideDefinitionSignature) => ProviderResult<Definition | DefinitionLink[]>
|
||
provideReferences?: (this: void, document: LinesTextDocument, position: Position, options: {
|
||
includeDeclaration: boolean
|
||
}, token: CancellationToken, next: ProvideReferencesSignature) => ProviderResult<Location[]>
|
||
provideDocumentHighlights?: (this: void, document: LinesTextDocument, position: Position, token: CancellationToken, next: ProvideDocumentHighlightsSignature) => ProviderResult<DocumentHighlight[]>
|
||
provideDocumentSymbols?: (this: void, document: LinesTextDocument, token: CancellationToken, next: ProvideDocumentSymbolsSignature) => ProviderResult<SymbolInformation[] | DocumentSymbol[]>
|
||
provideWorkspaceSymbols?: (this: void, query: string, token: CancellationToken, next: ProvideWorkspaceSymbolsSignature) => ProviderResult<SymbolInformation[]>
|
||
provideCodeActions?: (this: void, document: LinesTextDocument, range: Range, context: CodeActionContext, token: CancellationToken, next: ProvideCodeActionsSignature) => ProviderResult<(Command | CodeAction)[]>
|
||
handleWorkDoneProgress?: (this: void, token: ProgressToken, params: WorkDoneProgressBegin | WorkDoneProgressReport | WorkDoneProgressEnd, next: HandleWorkDoneProgressSignature) => void
|
||
resolveCodeAction?: (this: void, item: CodeAction, token: CancellationToken, next: ResolveCodeActionSignature) => ProviderResult<CodeAction>
|
||
provideCodeLenses?: (this: void, document: LinesTextDocument, token: CancellationToken, next: ProvideCodeLensesSignature) => ProviderResult<CodeLens[]>
|
||
resolveCodeLens?: (this: void, codeLens: CodeLens, token: CancellationToken, next: ResolveCodeLensSignature) => ProviderResult<CodeLens>
|
||
provideDocumentFormattingEdits?: (this: void, document: LinesTextDocument, options: FormattingOptions, token: CancellationToken, next: ProvideDocumentFormattingEditsSignature) => ProviderResult<TextEdit[]>
|
||
provideDocumentRangeFormattingEdits?: (this: void, document: LinesTextDocument, range: Range, options: FormattingOptions, token: CancellationToken, next: ProvideDocumentRangeFormattingEditsSignature) => ProviderResult<TextEdit[]>
|
||
provideOnTypeFormattingEdits?: (this: void, document: LinesTextDocument, position: Position, ch: string, options: FormattingOptions, token: CancellationToken, next: ProvideOnTypeFormattingEditsSignature) => ProviderResult<TextEdit[]>
|
||
prepareRename?: (this: void, document: LinesTextDocument, position: Position, token: CancellationToken, next: PrepareRenameSignature) => ProviderResult<Range | {
|
||
range: Range
|
||
placeholder: string
|
||
}>
|
||
provideRenameEdits?: (this: void, document: LinesTextDocument, position: Position, newName: string, token: CancellationToken, next: ProvideRenameEditsSignature) => ProviderResult<WorkspaceEdit>
|
||
provideDocumentLinks?: (this: void, document: LinesTextDocument, token: CancellationToken, next: ProvideDocumentLinksSignature) => ProviderResult<DocumentLink[]>
|
||
resolveDocumentLink?: (this: void, link: DocumentLink, token: CancellationToken, next: ResolveDocumentLinkSignature) => ProviderResult<DocumentLink>
|
||
executeCommand?: (this: void, command: string, args: any[], next: ExecuteCommandSignature) => ProviderResult<any>
|
||
workspace?: WorkspaceMiddleware
|
||
window?: WindowMiddleware
|
||
}
|
||
export type Middleware = _Middleware & TypeDefinitionMiddleware & ImplementationMiddleware & ColorProviderMiddleware & DeclarationMiddleware & FoldingRangeProviderMiddleware & CallHierarchyMiddleware & SemanticTokensMiddleware & LinkedEditingRangeMiddleware & SelectionRangeProviderMiddleware
|
||
|
||
export interface ConnectionOptions {
|
||
// cancellationStrategy: CancellationStrategy
|
||
maxRestartCount?: number
|
||
}
|
||
|
||
export interface LanguageClientOptions {
|
||
ignoredRootPaths?: string[]
|
||
disableSnippetCompletion?: boolean
|
||
disableDynamicRegister?: boolean
|
||
disabledFeatures?: string[]
|
||
formatterPriority?: number
|
||
documentSelector?: DocumentSelector | string[]
|
||
synchronize?: SynchronizeOptions
|
||
diagnosticCollectionName?: string
|
||
outputChannelName?: string
|
||
outputChannel?: OutputChannel
|
||
revealOutputChannelOn?: RevealOutputChannelOn
|
||
/**
|
||
* The encoding use to read stdout and stderr. Defaults
|
||
* to 'utf8' if omitted.
|
||
*/
|
||
stdioEncoding?: string
|
||
initializationOptions?: any | (() => any)
|
||
initializationFailedHandler?: InitializationFailedHandler
|
||
progressOnInitialization?: boolean
|
||
errorHandler?: ErrorHandler
|
||
middleware?: Middleware
|
||
workspaceFolder?: WorkspaceFolder
|
||
connectionOptions?: ConnectionOptions
|
||
markdown?: {
|
||
isTrusted: boolean
|
||
}
|
||
}
|
||
export enum State {
|
||
Stopped = 1,
|
||
Running = 2,
|
||
Starting = 3
|
||
}
|
||
export interface StateChangeEvent {
|
||
oldState: State
|
||
newState: State
|
||
}
|
||
export enum ClientState {
|
||
Initial = 0,
|
||
Starting = 1,
|
||
StartFailed = 2,
|
||
Running = 3,
|
||
Stopping = 4,
|
||
Stopped = 5
|
||
}
|
||
export interface RegistrationData<T> {
|
||
id: string
|
||
registerOptions: T
|
||
}
|
||
/**
|
||
* A static feature. A static feature can't be dynamically activate via the
|
||
* server. It is wired during the initialize sequence.
|
||
*/
|
||
export interface StaticFeature {
|
||
/**
|
||
* Called to fill the initialize params.
|
||
*
|
||
* @params the initialize params.
|
||
*/
|
||
fillInitializeParams?: (params: any) => void
|
||
/**
|
||
* Called to fill in the client capabilities this feature implements.
|
||
*
|
||
* @param capabilities The client capabilities to fill.
|
||
*/
|
||
fillClientCapabilities(capabilities: any): void
|
||
/**
|
||
* Initialize the feature. This method is called on a feature instance
|
||
* when the client has successfully received the initialize request from
|
||
* the server and before the client sends the initialized notification
|
||
* to the server.
|
||
*
|
||
* @param capabilities the server capabilities
|
||
* @param documentSelector the document selector pass to the client's constructor.
|
||
* May be `undefined` if the client was created without a selector.
|
||
*/
|
||
initialize(capabilities: any, documentSelector: DocumentSelector | undefined): void
|
||
/**
|
||
* Called when the client is stopped to dispose this feature. Usually a feature
|
||
* unregisters listeners registered hooked up with the VS Code extension host.
|
||
*/
|
||
dispose(): void
|
||
}
|
||
|
||
class ParameterStructures {
|
||
private readonly kind
|
||
/**
|
||
* The parameter structure is automatically inferred on the number of parameters
|
||
* and the parameter type in case of a single param.
|
||
*/
|
||
static readonly auto: ParameterStructures
|
||
/**
|
||
* Forces `byPosition` parameter structure. This is useful if you have a single
|
||
* parameter which has a literal type.
|
||
*/
|
||
static readonly byPosition: ParameterStructures
|
||
/**
|
||
* Forces `byName` parameter structure. This is only useful when having a single
|
||
* parameter. The library will report errors if used with a different number of
|
||
* parameters.
|
||
*/
|
||
static readonly byName: ParameterStructures
|
||
private constructor()
|
||
static is(value: any): value is ParameterStructures
|
||
toString(): string
|
||
}
|
||
/**
|
||
* An interface to type messages.
|
||
*/
|
||
export interface MessageSignature {
|
||
readonly method: string
|
||
readonly numberOfParams: number
|
||
readonly parameterStructures: ParameterStructures
|
||
}
|
||
|
||
/**
|
||
*
|
||
* An abstract implementation of a MessageType.
|
||
*/
|
||
abstract class AbstractMessageSignature implements MessageSignature {
|
||
readonly method: string
|
||
readonly numberOfParams: number
|
||
constructor(method: string, numberOfParams: number)
|
||
get parameterStructures(): ParameterStructures
|
||
}
|
||
|
||
/**
|
||
* Classes to type request response pairs
|
||
*/
|
||
export class RequestType0<R, E> extends AbstractMessageSignature {
|
||
/**
|
||
* Clients must not use this property. It is here to ensure correct typing.
|
||
*/
|
||
readonly _: [R, E, _EM] | undefined
|
||
constructor(method: string)
|
||
}
|
||
|
||
export class RequestType<P, R, E> extends AbstractMessageSignature {
|
||
private _parameterStructures
|
||
/**
|
||
* Clients must not use this property. It is here to ensure correct typing.
|
||
*/
|
||
readonly _: [P, R, E, _EM] | undefined
|
||
constructor(method: string, _parameterStructures?: ParameterStructures)
|
||
get parameterStructures(): ParameterStructures
|
||
}
|
||
|
||
export class NotificationType<P> extends AbstractMessageSignature {
|
||
/**
|
||
* Clients must not use this property. It is here to ensure correct typing.
|
||
*/
|
||
readonly _: [P, _EM] | undefined
|
||
constructor(method: string)
|
||
}
|
||
|
||
export class NotificationType0 extends AbstractMessageSignature {
|
||
/**
|
||
* Clients must not use this property. It is here to ensure correct typing.
|
||
*/
|
||
readonly _: [_EM] | undefined
|
||
constructor(method: string)
|
||
}
|
||
|
||
export interface InitializeParams {
|
||
/**
|
||
* The process Id of the parent process that started
|
||
* the server.
|
||
*/
|
||
processId: number | null
|
||
/**
|
||
* Information about the client
|
||
*
|
||
* @since 3.15.0
|
||
*/
|
||
clientInfo?: {
|
||
/**
|
||
* The name of the client as defined by the client.
|
||
*/
|
||
name: string
|
||
/**
|
||
* The client's version as defined by the client.
|
||
*/
|
||
version?: string
|
||
}
|
||
/**
|
||
* The rootPath of the workspace. Is null
|
||
* if no folder is open.
|
||
*
|
||
* @deprecated in favour of rootUri.
|
||
*/
|
||
rootPath?: string | null
|
||
/**
|
||
* The rootUri of the workspace. Is null if no
|
||
* folder is open. If both `rootPath` and `rootUri` are set
|
||
* `rootUri` wins.
|
||
*
|
||
* @deprecated in favour of workspaceFolders.
|
||
*/
|
||
rootUri: string | null
|
||
/**
|
||
* The capabilities provided by the client (editor or tool)
|
||
*/
|
||
capabilities: any
|
||
/**
|
||
* User provided initialization options.
|
||
*/
|
||
initializationOptions?: any
|
||
/**
|
||
* The initial trace setting. If omitted trace is disabled ('off').
|
||
*/
|
||
trace?: 'off' | 'messages' | 'verbose'
|
||
/**
|
||
* An optional token that a server can use to report work done progress.
|
||
*/
|
||
workDoneToken?: ProgressToken
|
||
}
|
||
class RegistrationType<RO> {
|
||
/**
|
||
* Clients must not use this property. It is here to ensure correct typing.
|
||
*/
|
||
readonly ____: [RO, _EM] | undefined
|
||
readonly method: string
|
||
constructor(method: string)
|
||
}
|
||
/**
|
||
* The result returned from an initialize request.
|
||
*/
|
||
export interface InitializeResult {
|
||
/**
|
||
* The capabilities the language server provides.
|
||
*/
|
||
capabilities: any
|
||
/**
|
||
* Information about the server.
|
||
*
|
||
* @since 3.15.0
|
||
*/
|
||
serverInfo?: {
|
||
/**
|
||
* The name of the server as defined by the server.
|
||
*/
|
||
name: string
|
||
/**
|
||
* The servers's version as defined by the server.
|
||
*/
|
||
version?: string
|
||
}
|
||
/**
|
||
* Custom initialization results.
|
||
*/
|
||
[custom: string]: any
|
||
}
|
||
|
||
export interface DynamicFeature<RO> {
|
||
/**
|
||
* Called to fill the initialize params.
|
||
*
|
||
* @params the initialize params.
|
||
*/
|
||
fillInitializeParams?: (params: InitializeParams) => void
|
||
/**
|
||
* Called to fill in the client capabilities this feature implements.
|
||
*
|
||
* @param capabilities The client capabilities to fill.
|
||
*/
|
||
fillClientCapabilities(capabilities: any): void
|
||
/**
|
||
* Initialize the feature. This method is called on a feature instance
|
||
* when the client has successfully received the initialize request from
|
||
* the server and before the client sends the initialized notification
|
||
* to the server.
|
||
*
|
||
* @param capabilities the server capabilities.
|
||
* @param documentSelector the document selector pass to the client's constructor.
|
||
* May be `undefined` if the client was created without a selector.
|
||
*/
|
||
initialize(capabilities: any, documentSelector: DocumentSelector | undefined): void
|
||
/**
|
||
* The signature (e.g. method) for which this features support dynamic activation / registration.
|
||
*/
|
||
registrationType: RegistrationType<RO>
|
||
/**
|
||
* Is called when the server send a register request for the given message.
|
||
*
|
||
* @param data additional registration data as defined in the protocol.
|
||
*/
|
||
register(data: RegistrationData<RO>): void
|
||
/**
|
||
* Is called when the server wants to unregister a feature.
|
||
*
|
||
* @param id the id used when registering the feature.
|
||
*/
|
||
unregister(id: string): void
|
||
/**
|
||
* Called when the client is stopped to dispose this feature. Usually a feature
|
||
* unregisters listeners registered hooked up with the VS Code extension host.
|
||
*/
|
||
dispose(): void
|
||
}
|
||
|
||
export interface NotificationFeature<T extends Function> {
|
||
/**
|
||
* Triggers the corresponding RPC method.
|
||
*/
|
||
getProvider(document: TextDocument): {
|
||
send: T
|
||
}
|
||
}
|
||
|
||
export interface ExecutableOptions {
|
||
cwd?: string
|
||
env?: any
|
||
detached?: boolean
|
||
shell?: boolean
|
||
}
|
||
|
||
export interface Executable {
|
||
command: string
|
||
args?: string[]
|
||
options?: ExecutableOptions
|
||
}
|
||
|
||
export interface ForkOptions {
|
||
cwd?: string
|
||
env?: any
|
||
execPath?: string
|
||
encoding?: string
|
||
execArgv?: string[]
|
||
}
|
||
|
||
export interface StreamInfo {
|
||
writer: NodeJS.WritableStream
|
||
reader: NodeJS.ReadableStream
|
||
detached?: boolean
|
||
}
|
||
|
||
export enum TransportKind {
|
||
stdio = 0,
|
||
ipc = 1,
|
||
pipe = 2,
|
||
socket = 3
|
||
}
|
||
|
||
export interface SocketTransport {
|
||
kind: TransportKind.socket
|
||
port: number
|
||
}
|
||
|
||
export interface NodeModule {
|
||
module: string
|
||
transport?: TransportKind | SocketTransport
|
||
args?: string[]
|
||
runtime?: string
|
||
options?: ForkOptions
|
||
}
|
||
|
||
export interface ChildProcessInfo {
|
||
process: cp.ChildProcess
|
||
detached: boolean
|
||
}
|
||
|
||
export interface PartialMessageInfo {
|
||
readonly messageToken: number
|
||
readonly waitingTime: number
|
||
}
|
||
|
||
export interface MessageReader {
|
||
readonly onError: Event<Error>
|
||
readonly onClose: Event<void>
|
||
readonly onPartialMessage: Event<PartialMessageInfo>
|
||
listen(callback: (data: { jsonrpc: string }) => void): void
|
||
dispose(): void
|
||
}
|
||
|
||
export interface MessageWriter {
|
||
readonly onError: Event<[Error, { jsonrpc: string } | undefined, number | undefined]>
|
||
readonly onClose: Event<void>
|
||
write(msg: { jsonrpc: string }): void
|
||
dispose(): void
|
||
}
|
||
|
||
export class NullLogger {
|
||
constructor()
|
||
error(message: string): void
|
||
warn(message: string): void
|
||
info(message: string): void
|
||
log(message: string): void
|
||
}
|
||
|
||
export interface MessageTransports {
|
||
reader: MessageReader
|
||
writer: MessageWriter
|
||
detached?: boolean
|
||
}
|
||
|
||
export namespace MessageTransports {
|
||
/**
|
||
* Checks whether the given value conforms to the [MessageTransports](#MessageTransports) interface.
|
||
*/
|
||
function is(value: any): value is MessageTransports
|
||
}
|
||
|
||
export type ServerOptions = Executable | NodeModule | {
|
||
run: Executable
|
||
debug: Executable
|
||
} | {
|
||
run: NodeModule
|
||
debug: NodeModule
|
||
} | (() => Promise<cp.ChildProcess | StreamInfo | MessageTransports | ChildProcessInfo>)
|
||
|
||
export interface _EM {
|
||
_$endMarker$_: number
|
||
}
|
||
|
||
export class ProgressType<P> {
|
||
/**
|
||
* Clients must not use this property. It is here to ensure correct typing.
|
||
*/
|
||
readonly __?: [P, _EM]
|
||
constructor()
|
||
}
|
||
|
||
export enum Trace {
|
||
Off = 0,
|
||
Messages = 1,
|
||
Verbose = 2
|
||
}
|
||
|
||
/**
|
||
* A language server for manage a language server.
|
||
* It's recommended to use `services.registLanguageClient` for regist language client to serviers,
|
||
* you can have language client listed in `CocList services` and services could start the language client
|
||
* by `documentselector` of `clientOptions`.
|
||
*/
|
||
export class LanguageClient {
|
||
readonly id: string
|
||
readonly name: string
|
||
constructor(id: string, name: string, serverOptions: ServerOptions, clientOptions: LanguageClientOptions, forceDebug?: boolean)
|
||
/**
|
||
* Create language client by name and options, don't forget regist language client
|
||
* to services by `services.registLanguageClient`
|
||
*/
|
||
constructor(name: string, serverOptions: ServerOptions, clientOptions: LanguageClientOptions, forceDebug?: boolean)
|
||
/**
|
||
* R => result
|
||
* E => Error result
|
||
*/
|
||
sendRequest<R, E>(type: RequestType0<R, E>, token?: CancellationToken): Promise<R>
|
||
/**
|
||
* P => params
|
||
* R => result
|
||
* E => Error result
|
||
*/
|
||
sendRequest<P, R, E>(type: RequestType<P, R, E>, params: P, token?: CancellationToken): Promise<R>
|
||
sendRequest<R>(method: string, token?: CancellationToken): Promise<R>
|
||
sendRequest<R>(method: string, param: any, token?: CancellationToken): Promise<R>
|
||
|
||
onRequest<R, E>(type: RequestType0<R, E>, handler: RequestHandler0<R, E>): Disposable
|
||
onRequest<P, R, E>(type: RequestType<P, R, E>, handler: RequestHandler<P, R, E>): Disposable
|
||
onRequest<R, E>(method: string, handler: (...params: any[]) => HandlerResult<R, E>): Disposable
|
||
|
||
sendNotification(type: NotificationType0): void
|
||
sendNotification<P>(type: NotificationType<P>, params?: P): void
|
||
sendNotification(method: string): void
|
||
sendNotification(method: string, params: any): void
|
||
|
||
onNotification(type: NotificationType0, handler: () => void): Disposable
|
||
onNotification<P>(type: NotificationType<P>, handler: (params: P) => void): Disposable
|
||
onNotification(method: string, handler: (...params: any[]) => void): Disposable
|
||
|
||
onProgress<P>(type: ProgressType<any>, token: string | number, handler: (params: P) => void): Disposable
|
||
sendProgress<P>(type: ProgressType<P>, token: string | number, value: P): void
|
||
|
||
/**
|
||
* Append info to outputChannel
|
||
*/
|
||
info(message: string, data?: any): void
|
||
/**
|
||
* Append warning to outputChannel
|
||
*/
|
||
warn(message: string, data?: any): void
|
||
/**
|
||
* append error to outputChannel
|
||
*/
|
||
error(message: string, data?: any): void
|
||
getPublicState(): State
|
||
get initializeResult(): InitializeResult | undefined
|
||
|
||
get clientOptions(): LanguageClientOptions
|
||
/**
|
||
* Fired on language server state change.
|
||
*/
|
||
get onDidChangeState(): Event<StateChangeEvent>
|
||
get outputChannel(): OutputChannel
|
||
get diagnostics(): DiagnosticCollection | undefined
|
||
|
||
/**
|
||
* Current running state.
|
||
*/
|
||
get serviceState(): ServiceStat
|
||
/**
|
||
* Check if server could start.
|
||
*/
|
||
needsStart(): boolean
|
||
/**
|
||
* Check if server could stop.
|
||
*/
|
||
needsStop(): boolean
|
||
onReady(): Promise<void>
|
||
get started(): boolean
|
||
set trace(value: Trace)
|
||
|
||
/**
|
||
* Stop language server.
|
||
*/
|
||
stop(): Promise<void>
|
||
|
||
/**
|
||
* Start language server, not needed when registered to services by `services.registLanguageClient`
|
||
*/
|
||
start(): Disposable
|
||
/**
|
||
* Restart language client.
|
||
*/
|
||
restart(): void
|
||
|
||
/**
|
||
* Register custom feature.
|
||
*/
|
||
registerFeature(feature: StaticFeature | DynamicFeature<any>): void
|
||
|
||
/**
|
||
* Log failed request to outputChannel.
|
||
*/
|
||
handleFailedRequest<T>(type: MessageSignature, token: CancellationToken | undefined, error: any, defaultValue: T)
|
||
}
|
||
|
||
/**
|
||
* Monitor for setting change, restart language server when specified setting changed.
|
||
*/
|
||
export class SettingMonitor {
|
||
constructor(client: LanguageClient, setting: string)
|
||
start(): Disposable
|
||
}
|
||
// }}
|
||
}
|
||
// vim: set sw=2 ts=2 sts=2 et foldmarker={{,}} foldmethod=marker foldlevel=0 nofen:
|