/*!----------------------------------------------------------- * Copyright (c) Microsoft Corporation. All rights reserved. * Type definitions for monaco-editor * Released under the MIT license *-----------------------------------------------------------*/ /*--------------------------------------------------------------------------------------------- * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ // eslint-disable-next-line no-var declare var MonacoEnvironment: monaco.Environment | undefined; export type Thenable = PromiseLike; export interface Environment { /** * Define a global `monaco` symbol. * This is true by default in AMD and false by default in ESM. */ globalAPI?: boolean; /** * The base url where the editor sources are found (which contains the vs folder) */ baseUrl?: string; /** * A web worker factory. * NOTE: If `getWorker` is defined, `getWorkerUrl` is not invoked. */ getWorker?(workerId: string, label: string): Promise | Worker; /** * Return the location for web worker scripts. * NOTE: If `getWorker` is defined, `getWorkerUrl` is not invoked. */ getWorkerUrl?(workerId: string, label: string): string; /** * Create a trusted types policy (same API as window.trustedTypes.createPolicy) */ createTrustedTypesPolicy?( policyName: string, policyOptions?: ITrustedTypePolicyOptions, ): undefined | ITrustedTypePolicy; } export interface ITrustedTypePolicyOptions { createHTML?: (input: string, ...arguments: any[]) => string; createScript?: (input: string, ...arguments: any[]) => string; createScriptURL?: (input: string, ...arguments: any[]) => string; } export interface ITrustedTypePolicy { readonly name: string; createHTML?(input: string): any; createScript?(input: string): any; createScriptURL?(input: string): any; } export interface IDisposable { dispose(): void; } export interface IEvent { (listener: (e: T) => any, thisArg?: any): IDisposable; } /** * A helper that allows to emit and listen to typed events */ export class Emitter { constructor(); readonly event: IEvent; fire(event: T): void; dispose(): void; } export enum MarkerTag { Unnecessary = 1, Deprecated = 2 } export enum MarkerSeverity { Hint = 1, Info = 2, Warning = 4, Error = 8 } export class CancellationTokenSource { constructor(parent?: CancellationToken); get token(): CancellationToken; cancel(): void; dispose(cancel?: boolean): void; } export interface CancellationToken { /** * A flag signalling is cancellation has been requested. */ readonly isCancellationRequested: boolean; /** * An event which fires when cancellation is requested. This event * only ever fires `once` as cancellation can only happen once. Listeners * that are registered after cancellation will be called (next event loop run), * but also only once. * * @event */ readonly onCancellationRequested: (listener: (e: any) => any, thisArgs?: any, disposables?: IDisposable[]) => IDisposable; } /** * 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: unknown): thing is Uri; /** * scheme is the 'http' part of 'http://www.example.com/some/path?query#fragment'. * The part before the first colon. */ readonly scheme: string; /** * authority is the 'www.example.com' part of 'http://www.example.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.example.com/some/path?query#fragment'. */ readonly path: string; /** * query is the 'query' part of 'http://www.example.com/some/path?query#fragment'. */ readonly query: string; /** * fragment is the 'fragment' part of 'http://www.example.com/some/path?query#fragment'. */ readonly fragment: string; /** * 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). */ get 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.example.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; /** * Creates new Uri from uri components. * * Unless `strict` is `true` the scheme is defaults to be `file`. This function performs * validation and should be used for untrusted uri components retrieved from storage, * user input, command arguments etc */ static from(components: UriComponents, strict?: boolean): Uri; /** * Join a Uri path with path fragments and normalizes the resulting path. * * @param uri The input Uri. * @param pathFragment The path fragment to add to the Uri path. * @returns The resulting Uri. */ static joinPath(uri: Uri, ...pathFragment: 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; /** * A helper function to revive URIs. * * **Note** that this function should only be used when receiving Uri#toJSON generated data * and that it doesn't do any validation. Use {@link Uri.from} when received "untrusted" * uri components such as command arguments or data from storage. * * @param data The Uri components or Uri to revive. * @returns The revived Uri or undefined or null. */ static revive(data: UriComponents | Uri): Uri; static revive(data: UriComponents | Uri | undefined): Uri | undefined; static revive(data: UriComponents | Uri | null): Uri | null; static revive(data: UriComponents | Uri | undefined | null): Uri | undefined | null; } export interface UriComponents { scheme: string; authority?: string; path?: string; query?: string; fragment?: string; } /** * Virtual Key Codes, the value does not hold any inherent meaning. * Inspired somewhat from https://msdn.microsoft.com/en-us/library/windows/desktop/dd375731(v=vs.85).aspx * But these are "more general", as they should work across browsers & OS`s. */ export enum KeyCode { DependsOnKbLayout = -1, /** * Placed first to cover the 0 value of the enum. */ Unknown = 0, Backspace = 1, Tab = 2, Enter = 3, Shift = 4, Ctrl = 5, Alt = 6, PauseBreak = 7, CapsLock = 8, Escape = 9, Space = 10, PageUp = 11, PageDown = 12, End = 13, Home = 14, LeftArrow = 15, UpArrow = 16, RightArrow = 17, DownArrow = 18, Insert = 19, Delete = 20, Digit0 = 21, Digit1 = 22, Digit2 = 23, Digit3 = 24, Digit4 = 25, Digit5 = 26, Digit6 = 27, Digit7 = 28, Digit8 = 29, Digit9 = 30, KeyA = 31, KeyB = 32, KeyC = 33, KeyD = 34, KeyE = 35, KeyF = 36, KeyG = 37, KeyH = 38, KeyI = 39, KeyJ = 40, KeyK = 41, KeyL = 42, KeyM = 43, KeyN = 44, KeyO = 45, KeyP = 46, KeyQ = 47, KeyR = 48, KeyS = 49, KeyT = 50, KeyU = 51, KeyV = 52, KeyW = 53, KeyX = 54, KeyY = 55, KeyZ = 56, Meta = 57, ContextMenu = 58, F1 = 59, F2 = 60, F3 = 61, F4 = 62, F5 = 63, F6 = 64, F7 = 65, F8 = 66, F9 = 67, F10 = 68, F11 = 69, F12 = 70, F13 = 71, F14 = 72, F15 = 73, F16 = 74, F17 = 75, F18 = 76, F19 = 77, F20 = 78, F21 = 79, F22 = 80, F23 = 81, F24 = 82, NumLock = 83, ScrollLock = 84, /** * Used for miscellaneous characters; it can vary by keyboard. * For the US standard keyboard, the ';:' key */ Semicolon = 85, /** * For any country/region, the '+' key * For the US standard keyboard, the '=+' key */ Equal = 86, /** * For any country/region, the ',' key * For the US standard keyboard, the ',<' key */ Comma = 87, /** * For any country/region, the '-' key * For the US standard keyboard, the '-_' key */ Minus = 88, /** * For any country/region, the '.' key * For the US standard keyboard, the '.>' key */ Period = 89, /** * Used for miscellaneous characters; it can vary by keyboard. * For the US standard keyboard, the '/?' key */ Slash = 90, /** * Used for miscellaneous characters; it can vary by keyboard. * For the US standard keyboard, the '`~' key */ Backquote = 91, /** * Used for miscellaneous characters; it can vary by keyboard. * For the US standard keyboard, the '[{' key */ BracketLeft = 92, /** * Used for miscellaneous characters; it can vary by keyboard. * For the US standard keyboard, the '\|' key */ Backslash = 93, /** * Used for miscellaneous characters; it can vary by keyboard. * For the US standard keyboard, the ']}' key */ BracketRight = 94, /** * Used for miscellaneous characters; it can vary by keyboard. * For the US standard keyboard, the ''"' key */ Quote = 95, /** * Used for miscellaneous characters; it can vary by keyboard. */ OEM_8 = 96, /** * Either the angle bracket key or the backslash key on the RT 102-key keyboard. */ IntlBackslash = 97, Numpad0 = 98,// VK_NUMPAD0, 0x60, Numeric keypad 0 key Numpad1 = 99,// VK_NUMPAD1, 0x61, Numeric keypad 1 key Numpad2 = 100,// VK_NUMPAD2, 0x62, Numeric keypad 2 key Numpad3 = 101,// VK_NUMPAD3, 0x63, Numeric keypad 3 key Numpad4 = 102,// VK_NUMPAD4, 0x64, Numeric keypad 4 key Numpad5 = 103,// VK_NUMPAD5, 0x65, Numeric keypad 5 key Numpad6 = 104,// VK_NUMPAD6, 0x66, Numeric keypad 6 key Numpad7 = 105,// VK_NUMPAD7, 0x67, Numeric keypad 7 key Numpad8 = 106,// VK_NUMPAD8, 0x68, Numeric keypad 8 key Numpad9 = 107,// VK_NUMPAD9, 0x69, Numeric keypad 9 key NumpadMultiply = 108,// VK_MULTIPLY, 0x6A, Multiply key NumpadAdd = 109,// VK_ADD, 0x6B, Add key NUMPAD_SEPARATOR = 110,// VK_SEPARATOR, 0x6C, Separator key NumpadSubtract = 111,// VK_SUBTRACT, 0x6D, Subtract key NumpadDecimal = 112,// VK_DECIMAL, 0x6E, Decimal key NumpadDivide = 113,// VK_DIVIDE, 0x6F, /** * Cover all key codes when IME is processing input. */ KEY_IN_COMPOSITION = 114, ABNT_C1 = 115,// Brazilian (ABNT) Keyboard ABNT_C2 = 116,// Brazilian (ABNT) Keyboard AudioVolumeMute = 117, AudioVolumeUp = 118, AudioVolumeDown = 119, BrowserSearch = 120, BrowserHome = 121, BrowserBack = 122, BrowserForward = 123, MediaTrackNext = 124, MediaTrackPrevious = 125, MediaStop = 126, MediaPlayPause = 127, LaunchMediaPlayer = 128, LaunchMail = 129, LaunchApp2 = 130, /** * VK_CLEAR, 0x0C, CLEAR key */ Clear = 131, /** * Placed last to cover the length of the enum. * Please do not depend on this value! */ MAX_VALUE = 132 } export class KeyMod { static readonly CtrlCmd: number; static readonly Shift: number; static readonly Alt: number; static readonly WinCtrl: number; static chord(firstPart: number, secondPart: number): number; } export interface IMarkdownString { readonly value: string; readonly isTrusted?: boolean | MarkdownStringTrustedOptions; readonly supportThemeIcons?: boolean; readonly supportHtml?: boolean; readonly baseUri?: UriComponents; uris?: { [href: string]: UriComponents; }; } export interface MarkdownStringTrustedOptions { readonly enabledCommands: readonly string[]; } export interface IKeyboardEvent { readonly _standardKeyboardEventBrand: true; readonly browserEvent: KeyboardEvent; readonly target: HTMLElement; readonly ctrlKey: boolean; readonly shiftKey: boolean; readonly altKey: boolean; readonly metaKey: boolean; readonly altGraphKey: boolean; readonly keyCode: KeyCode; readonly code: string; equals(keybinding: number): boolean; preventDefault(): void; stopPropagation(): void; } export interface IMouseEvent { readonly browserEvent: MouseEvent; readonly leftButton: boolean; readonly middleButton: boolean; readonly rightButton: boolean; readonly buttons: number; readonly target: HTMLElement; readonly detail: number; readonly posx: number; readonly posy: number; readonly ctrlKey: boolean; readonly shiftKey: boolean; readonly altKey: boolean; readonly metaKey: boolean; readonly timestamp: number; readonly defaultPrevented: boolean; preventDefault(): void; stopPropagation(): void; } export interface IScrollEvent { readonly scrollTop: number; readonly scrollLeft: number; readonly scrollWidth: number; readonly scrollHeight: number; readonly scrollTopChanged: boolean; readonly scrollLeftChanged: boolean; readonly scrollWidthChanged: boolean; readonly scrollHeightChanged: boolean; } /** * A position in the editor. This interface is suitable for serialization. */ export interface IPosition { /** * line number (starts at 1) */ readonly lineNumber: number; /** * column (the first character in a line is between column 1 and column 2) */ readonly column: number; } /** * A position in the editor. */ export class Position { /** * line number (starts at 1) */ readonly lineNumber: number; /** * column (the first character in a line is between column 1 and column 2) */ readonly column: number; constructor(lineNumber: number, column: number); /** * Create a new position from this position. * * @param newLineNumber new line number * @param newColumn new column */ with(newLineNumber?: number, newColumn?: number): Position; /** * Derive a new position from this position. * * @param deltaLineNumber line number delta * @param deltaColumn column delta */ delta(deltaLineNumber?: number, deltaColumn?: number): Position; /** * Test if this position equals other position */ equals(other: IPosition): boolean; /** * Test if position `a` equals position `b` */ static equals(a: IPosition | null, b: IPosition | null): boolean; /** * Test if this position is before other position. * If the two positions are equal, the result will be false. */ isBefore(other: IPosition): boolean; /** * Test if position `a` is before position `b`. * If the two positions are equal, the result will be false. */ static isBefore(a: IPosition, b: IPosition): boolean; /** * Test if this position is before other position. * If the two positions are equal, the result will be true. */ isBeforeOrEqual(other: IPosition): boolean; /** * Test if position `a` is before position `b`. * If the two positions are equal, the result will be true. */ static isBeforeOrEqual(a: IPosition, b: IPosition): boolean; /** * A function that compares positions, useful for sorting */ static compare(a: IPosition, b: IPosition): number; /** * Clone this position. */ clone(): Position; /** * Convert to a human-readable representation. */ toString(): string; /** * Create a `Position` from an `IPosition`. */ static lift(pos: IPosition): Position; /** * Test if `obj` is an `IPosition`. */ static isIPosition(obj: any): obj is IPosition; toJSON(): IPosition; } /** * A range in the editor. This interface is suitable for serialization. */ export interface IRange { /** * Line number on which the range starts (starts at 1). */ readonly startLineNumber: number; /** * Column on which the range starts in line `startLineNumber` (starts at 1). */ readonly startColumn: number; /** * Line number on which the range ends. */ readonly endLineNumber: number; /** * Column on which the range ends in line `endLineNumber`. */ readonly endColumn: number; } /** * A range in the editor. (startLineNumber,startColumn) is <= (endLineNumber,endColumn) */ export class Range { /** * Line number on which the range starts (starts at 1). */ readonly startLineNumber: number; /** * Column on which the range starts in line `startLineNumber` (starts at 1). */ readonly startColumn: number; /** * Line number on which the range ends. */ readonly endLineNumber: number; /** * Column on which the range ends in line `endLineNumber`. */ readonly endColumn: number; constructor(startLineNumber: number, startColumn: number, endLineNumber: number, endColumn: number); /** * Test if this range is empty. */ isEmpty(): boolean; /** * Test if `range` is empty. */ static isEmpty(range: IRange): boolean; /** * Test if position is in this range. If the position is at the edges, will return true. */ containsPosition(position: IPosition): boolean; /** * Test if `position` is in `range`. If the position is at the edges, will return true. */ static containsPosition(range: IRange, position: IPosition): boolean; /** * Test if range is in this range. If the range is equal to this range, will return true. */ containsRange(range: IRange): boolean; /** * Test if `otherRange` is in `range`. If the ranges are equal, will return true. */ static containsRange(range: IRange, otherRange: IRange): boolean; /** * Test if `range` is strictly in this range. `range` must start after and end before this range for the result to be true. */ strictContainsRange(range: IRange): boolean; /** * Test if `otherRange` is strictly in `range` (must start after, and end before). If the ranges are equal, will return false. */ static strictContainsRange(range: IRange, otherRange: IRange): boolean; /** * A reunion of the two ranges. * The smallest position will be used as the start point, and the largest one as the end point. */ plusRange(range: IRange): Range; /** * A reunion of the two ranges. * The smallest position will be used as the start point, and the largest one as the end point. */ static plusRange(a: IRange, b: IRange): Range; /** * A intersection of the two ranges. */ intersectRanges(range: IRange): Range | null; /** * A intersection of the two ranges. */ static intersectRanges(a: IRange, b: IRange): Range | null; /** * Test if this range equals other. */ equalsRange(other: IRange | null | undefined): boolean; /** * Test if range `a` equals `b`. */ static equalsRange(a: IRange | null | undefined, b: IRange | null | undefined): boolean; /** * Return the end position (which will be after or equal to the start position) */ getEndPosition(): Position; /** * Return the end position (which will be after or equal to the start position) */ static getEndPosition(range: IRange): Position; /** * Return the start position (which will be before or equal to the end position) */ getStartPosition(): Position; /** * Return the start position (which will be before or equal to the end position) */ static getStartPosition(range: IRange): Position; /** * Transform to a user presentable string representation. */ toString(): string; /** * Create a new range using this range's start position, and using endLineNumber and endColumn as the end position. */ setEndPosition(endLineNumber: number, endColumn: number): Range; /** * Create a new range using this range's end position, and using startLineNumber and startColumn as the start position. */ setStartPosition(startLineNumber: number, startColumn: number): Range; /** * Create a new empty range using this range's start position. */ collapseToStart(): Range; /** * Create a new empty range using this range's start position. */ static collapseToStart(range: IRange): Range; /** * Create a new empty range using this range's end position. */ collapseToEnd(): Range; /** * Create a new empty range using this range's end position. */ static collapseToEnd(range: IRange): Range; /** * Moves the range by the given amount of lines. */ delta(lineCount: number): Range; isSingleLine(): boolean; static fromPositions(start: IPosition, end?: IPosition): Range; /** * Create a `Range` from an `IRange`. */ static lift(range: undefined | null): null; static lift(range: IRange): Range; static lift(range: IRange | undefined | null): Range | null; /** * Test if `obj` is an `IRange`. */ static isIRange(obj: any): obj is IRange; /** * Test if the two ranges are touching in any way. */ static areIntersectingOrTouching(a: IRange, b: IRange): boolean; /** * Test if the two ranges are intersecting. If the ranges are touching it returns true. */ static areIntersecting(a: IRange, b: IRange): boolean; /** * Test if the two ranges are intersecting, but not touching at all. */ static areOnlyIntersecting(a: IRange, b: IRange): boolean; /** * A function that compares ranges, useful for sorting ranges * It will first compare ranges on the startPosition and then on the endPosition */ static compareRangesUsingStarts(a: IRange | null | undefined, b: IRange | null | undefined): number; /** * A function that compares ranges, useful for sorting ranges * It will first compare ranges on the endPosition and then on the startPosition */ static compareRangesUsingEnds(a: IRange, b: IRange): number; /** * Test if the range spans multiple lines. */ static spansMultipleLines(range: IRange): boolean; toJSON(): IRange; } /** * A selection in the editor. * The selection is a range that has an orientation. */ export interface ISelection { /** * The line number on which the selection has started. */ readonly selectionStartLineNumber: number; /** * The column on `selectionStartLineNumber` where the selection has started. */ readonly selectionStartColumn: number; /** * The line number on which the selection has ended. */ readonly positionLineNumber: number; /** * The column on `positionLineNumber` where the selection has ended. */ readonly positionColumn: number; } /** * A selection in the editor. * The selection is a range that has an orientation. */ export class Selection extends Range { /** * The line number on which the selection has started. */ readonly selectionStartLineNumber: number; /** * The column on `selectionStartLineNumber` where the selection has started. */ readonly selectionStartColumn: number; /** * The line number on which the selection has ended. */ readonly positionLineNumber: number; /** * The column on `positionLineNumber` where the selection has ended. */ readonly positionColumn: number; constructor(selectionStartLineNumber: number, selectionStartColumn: number, positionLineNumber: number, positionColumn: number); /** * Transform to a human-readable representation. */ toString(): string; /** * Test if equals other selection. */ equalsSelection(other: ISelection): boolean; /** * Test if the two selections are equal. */ static selectionsEqual(a: ISelection, b: ISelection): boolean; /** * Get directions (LTR or RTL). */ getDirection(): SelectionDirection; /** * Create a new selection with a different `positionLineNumber` and `positionColumn`. */ setEndPosition(endLineNumber: number, endColumn: number): Selection; /** * Get the position at `positionLineNumber` and `positionColumn`. */ getPosition(): Position; /** * Get the position at the start of the selection. */ getSelectionStart(): Position; /** * Create a new selection with a different `selectionStartLineNumber` and `selectionStartColumn`. */ setStartPosition(startLineNumber: number, startColumn: number): Selection; /** * Create a `Selection` from one or two positions */ static fromPositions(start: IPosition, end?: IPosition): Selection; /** * Creates a `Selection` from a range, given a direction. */ static fromRange(range: Range, direction: SelectionDirection): Selection; /** * Create a `Selection` from an `ISelection`. */ static liftSelection(sel: ISelection): Selection; /** * `a` equals `b`. */ static selectionsArrEqual(a: ISelection[], b: ISelection[]): boolean; /** * Test if `obj` is an `ISelection`. */ static isISelection(obj: any): obj is ISelection; /** * Create with a direction. */ static createWithDirection(startLineNumber: number, startColumn: number, endLineNumber: number, endColumn: number, direction: SelectionDirection): Selection; } /** * The direction of a selection. */ export enum SelectionDirection { /** * The selection starts above where it ends. */ LTR = 0, /** * The selection starts below where it ends. */ RTL = 1 } export class Token { readonly offset: number; readonly type: string; readonly language: string; _tokenBrand: void; constructor(offset: number, type: string, language: string); toString(): string; } export namespace editor { /** * Create a new editor under `domElement`. * `domElement` should be empty (not contain other dom nodes). * The editor will read the size of `domElement`. */ export function create(domElement: HTMLElement, options?: IStandaloneEditorConstructionOptions, override?: IEditorOverrideServices): IStandaloneCodeEditor; /** * Emitted when an editor is created. * Creating a diff editor might cause this listener to be invoked with the two editors. * @event */ export function onDidCreateEditor(listener: (codeEditor: ICodeEditor) => void): IDisposable; /** * Emitted when an diff editor is created. * @event */ export function onDidCreateDiffEditor(listener: (diffEditor: IDiffEditor) => void): IDisposable; /** * Get all the created editors. */ export function getEditors(): readonly ICodeEditor[]; /** * Get all the created diff editors. */ export function getDiffEditors(): readonly IDiffEditor[]; /** * Create a new diff editor under `domElement`. * `domElement` should be empty (not contain other dom nodes). * The editor will read the size of `domElement`. */ export function createDiffEditor(domElement: HTMLElement, options?: IStandaloneDiffEditorConstructionOptions, override?: IEditorOverrideServices): IStandaloneDiffEditor; export function createMultiFileDiffEditor(domElement: HTMLElement, override?: IEditorOverrideServices): any; /** * Description of a command contribution */ export interface ICommandDescriptor { /** * An unique identifier of the contributed command. */ id: string; /** * Callback that will be executed when the command is triggered. */ run: ICommandHandler; } /** * Add a command. */ export function addCommand(descriptor: ICommandDescriptor): IDisposable; /** * Add an action to all editors. */ export function addEditorAction(descriptor: IActionDescriptor): IDisposable; /** * A keybinding rule. */ export interface IKeybindingRule { keybinding: number; command?: string | null; commandArgs?: any; when?: string | null; } /** * Add a keybinding rule. */ export function addKeybindingRule(rule: IKeybindingRule): IDisposable; /** * Add keybinding rules. */ export function addKeybindingRules(rules: IKeybindingRule[]): IDisposable; /** * Create a new editor model. * You can specify the language that should be set for this model or let the language be inferred from the `uri`. */ export function createModel(value: string, language?: string, uri?: Uri): ITextModel; /** * Change the language for a model. */ export function setModelLanguage(model: ITextModel, mimeTypeOrLanguageId: string): void; /** * Set the markers for a model. */ export function setModelMarkers(model: ITextModel, owner: string, markers: IMarkerData[]): void; /** * Remove all markers of an owner. */ export function removeAllMarkers(owner: string): void; /** * Get markers for owner and/or resource * * @returns list of markers */ export function getModelMarkers(filter: { owner?: string; resource?: Uri; take?: number; }): IMarker[]; /** * Emitted when markers change for a model. * @event */ export function onDidChangeMarkers(listener: (e: readonly Uri[]) => void): IDisposable; /** * Get the model that has `uri` if it exists. */ export function getModel(uri: Uri): ITextModel | null; /** * Get all the created models. */ export function getModels(): ITextModel[]; /** * Emitted when a model is created. * @event */ export function onDidCreateModel(listener: (model: ITextModel) => void): IDisposable; /** * Emitted right before a model is disposed. * @event */ export function onWillDisposeModel(listener: (model: ITextModel) => void): IDisposable; /** * Emitted when a different language is set to a model. * @event */ export function onDidChangeModelLanguage(listener: (e: { readonly model: ITextModel; readonly oldLanguage: string; }) => void): IDisposable; /** * Create a new web worker that has model syncing capabilities built in. * Specify an AMD module to load that will `create` an object that will be proxied. */ export function createWebWorker(opts: IInternalWebWorkerOptions): MonacoWebWorker; /** * Colorize the contents of `domNode` using attribute `data-lang`. */ export function colorizeElement(domNode: HTMLElement, options: IColorizerElementOptions): Promise; /** * Colorize `text` using language `languageId`. */ export function colorize(text: string, languageId: string, options: IColorizerOptions): Promise; /** * Colorize a line in a model. */ export function colorizeModelLine(model: ITextModel, lineNumber: number, tabSize?: number): string; /** * Tokenize `text` using language `languageId` */ export function tokenize(text: string, languageId: string): Token[][]; /** * Define a new theme or update an existing theme. */ export function defineTheme(themeName: string, themeData: IStandaloneThemeData): void; /** * Switches to a theme. */ export function setTheme(themeName: string): void; /** * Clears all cached font measurements and triggers re-measurement. */ export function remeasureFonts(): void; /** * Register a command. */ export function registerCommand(id: string, handler: (accessor: any, ...args: any[]) => void): IDisposable; export interface ILinkOpener { open(resource: Uri): boolean | Promise; } /** * Registers a handler that is called when a link is opened in any editor. The handler callback should return `true` if the link was handled and `false` otherwise. * The handler that was registered last will be called first when a link is opened. * * Returns a disposable that can unregister the opener again. */ export function registerLinkOpener(opener: ILinkOpener): IDisposable; /** * Represents an object that can handle editor open operations (e.g. when "go to definition" is called * with a resource other than the current model). */ export interface ICodeEditorOpener { /** * Callback that is invoked when a resource other than the current model should be opened (e.g. when "go to definition" is called). * The callback should return `true` if the request was handled and `false` otherwise. * @param source The code editor instance that initiated the request. * @param resource The Uri of the resource that should be opened. * @param selectionOrPosition An optional position or selection inside the model corresponding to `resource` that can be used to set the cursor. */ openCodeEditor(source: ICodeEditor, resource: Uri, selectionOrPosition?: IRange | IPosition): boolean | Promise; } /** * Registers a handler that is called when a resource other than the current model should be opened in the editor (e.g. "go to definition"). * The handler callback should return `true` if the request was handled and `false` otherwise. * * Returns a disposable that can unregister the opener again. * * If no handler is registered the default behavior is to do nothing for models other than the currently attached one. */ export function registerEditorOpener(opener: ICodeEditorOpener): IDisposable; export type BuiltinTheme = 'vs' | 'vs-dark' | 'hc-black' | 'hc-light'; export interface IStandaloneThemeData { base: BuiltinTheme; inherit: boolean; rules: ITokenThemeRule[]; encodedTokensColors?: string[]; colors: IColors; } export type IColors = { [colorId: string]: string; }; export interface ITokenThemeRule { token: string; foreground?: string; background?: string; fontStyle?: string; } /** * A web worker that can provide a proxy to an arbitrary file. */ export interface MonacoWebWorker { /** * Terminate the web worker, thus invalidating the returned proxy. */ dispose(): void; /** * Get a proxy to the arbitrary loaded code. */ getProxy(): Promise; /** * Synchronize (send) the models at `resources` to the web worker, * making them available in the monaco.worker.getMirrorModels(). */ withSyncedResources(resources: Uri[]): Promise; } export interface IInternalWebWorkerOptions { /** * The worker. */ worker: Worker | Promise; /** * An object that can be used by the web worker to make calls back to the main thread. */ host?: any; /** * Keep idle models. * Defaults to false, which means that idle models will stop syncing after a while. */ keepIdleModels?: boolean; } /** * Description of an action contribution */ export interface IActionDescriptor { /** * An unique identifier of the contributed action. */ id: string; /** * A label of the action that will be presented to the user. */ label: string; /** * Precondition rule. The value should be a [context key expression](https://code.visualstudio.com/docs/getstarted/keybindings#_when-clause-contexts). */ precondition?: string; /** * An array of keybindings for the action. */ keybindings?: number[]; /** * The keybinding rule (condition on top of precondition). */ keybindingContext?: string; /** * Control if the action should show up in the context menu and where. * The context menu of the editor has these default: * navigation - The navigation group comes first in all cases. * 1_modification - This group comes next and contains commands that modify your code. * 9_cutcopypaste - The last default group with the basic editing commands. * You can also create your own group. * Defaults to null (don't show in context menu). */ contextMenuGroupId?: string; /** * Control the order in the context menu group. */ contextMenuOrder?: number; /** * Method that will be executed when the action is triggered. * @param editor The editor instance is passed in as a convenience */ run(editor: ICodeEditor, ...args: any[]): void | Promise; } /** * Options which apply for all editors. */ export interface IGlobalEditorOptions { /** * The number of spaces a tab is equal to. * This setting is overridden based on the file contents when `detectIndentation` is on. * Defaults to 4. */ tabSize?: number; /** * Insert spaces when pressing `Tab`. * This setting is overridden based on the file contents when `detectIndentation` is on. * Defaults to true. */ insertSpaces?: boolean; /** * Controls whether `tabSize` and `insertSpaces` will be automatically detected when a file is opened based on the file contents. * Defaults to true. */ detectIndentation?: boolean; /** * Remove trailing auto inserted whitespace. * Defaults to true. */ trimAutoWhitespace?: boolean; /** * Special handling for large files to disable certain memory intensive features. * Defaults to true. */ largeFileOptimizations?: boolean; /** * Controls whether completions should be computed based on words in the document. * Defaults to true. */ wordBasedSuggestions?: 'off' | 'currentDocument' | 'matchingDocuments' | 'allDocuments'; /** * Controls whether word based completions should be included from opened documents of the same language or any language. */ wordBasedSuggestionsOnlySameLanguage?: boolean; /** * Controls whether the semanticHighlighting is shown for the languages that support it. * true: semanticHighlighting is enabled for all themes * false: semanticHighlighting is disabled for all themes * 'configuredByTheme': semanticHighlighting is controlled by the current color theme's semanticHighlighting setting. * Defaults to 'byTheme'. */ 'semanticHighlighting.enabled'?: true | false | 'configuredByTheme'; /** * Keep peek editors open even when double-clicking their content or when hitting `Escape`. * Defaults to false. */ stablePeek?: boolean; /** * Lines above this length will not be tokenized for performance reasons. * Defaults to 20000. */ maxTokenizationLineLength?: number; /** * Theme to be used for rendering. * The current out-of-the-box available themes are: 'vs' (default), 'vs-dark', 'hc-black', 'hc-light'. * You can create custom themes via `monaco.editor.defineTheme`. * To switch a theme, use `monaco.editor.setTheme`. * **NOTE**: The theme might be overwritten if the OS is in high contrast mode, unless `autoDetectHighContrast` is set to false. */ theme?: string; /** * If enabled, will automatically change to high contrast theme if the OS is using a high contrast theme. * Defaults to true. */ autoDetectHighContrast?: boolean; } /** * The options to create an editor. */ export interface IStandaloneEditorConstructionOptions extends IEditorConstructionOptions, IGlobalEditorOptions { /** * The initial model associated with this code editor. */ model?: ITextModel | null; /** * The initial value of the auto created model in the editor. * To not automatically create a model, use `model: null`. */ value?: string; /** * The initial language of the auto created model in the editor. * To not automatically create a model, use `model: null`. */ language?: string; /** * Initial theme to be used for rendering. * The current out-of-the-box available themes are: 'vs' (default), 'vs-dark', 'hc-black', 'hc-light. * You can create custom themes via `monaco.editor.defineTheme`. * To switch a theme, use `monaco.editor.setTheme`. * **NOTE**: The theme might be overwritten if the OS is in high contrast mode, unless `autoDetectHighContrast` is set to false. */ theme?: string; /** * If enabled, will automatically change to high contrast theme if the OS is using a high contrast theme. * Defaults to true. */ autoDetectHighContrast?: boolean; /** * An URL to open when Ctrl+H (Windows and Linux) or Cmd+H (OSX) is pressed in * the accessibility help dialog in the editor. * * Defaults to "https://go.microsoft.com/fwlink/?linkid=852450" */ accessibilityHelpUrl?: string; /** * Container element to use for ARIA messages. * Defaults to document.body. */ ariaContainerElement?: HTMLElement; } /** * The options to create a diff editor. */ export interface IStandaloneDiffEditorConstructionOptions extends IDiffEditorConstructionOptions { /** * Initial theme to be used for rendering. * The current out-of-the-box available themes are: 'vs' (default), 'vs-dark', 'hc-black', 'hc-light. * You can create custom themes via `monaco.editor.defineTheme`. * To switch a theme, use `monaco.editor.setTheme`. * **NOTE**: The theme might be overwritten if the OS is in high contrast mode, unless `autoDetectHighContrast` is set to false. */ theme?: string; /** * If enabled, will automatically change to high contrast theme if the OS is using a high contrast theme. * Defaults to true. */ autoDetectHighContrast?: boolean; } export interface IStandaloneCodeEditor extends ICodeEditor { updateOptions(newOptions: IEditorOptions & IGlobalEditorOptions): void; addCommand(keybinding: number, handler: ICommandHandler, context?: string): string | null; createContextKey(key: string, defaultValue: T): IContextKey; addAction(descriptor: IActionDescriptor): IDisposable; } export interface IStandaloneDiffEditor extends IDiffEditor { addCommand(keybinding: number, handler: ICommandHandler, context?: string): string | null; createContextKey(key: string, defaultValue: T): IContextKey; addAction(descriptor: IActionDescriptor): IDisposable; getOriginalEditor(): IStandaloneCodeEditor; getModifiedEditor(): IStandaloneCodeEditor; } export interface ICommandHandler { (...args: any[]): void; } export interface ILocalizedString { original: string; value: string; } export interface ICommandMetadata { readonly description: ILocalizedString | string; } export interface IContextKey { set(value: T): void; reset(): void; get(): T | undefined; } export type ContextKeyValue = null | undefined | boolean | number | string | Array | Record; export interface IEditorOverrideServices { [index: string]: any; } export interface IMarker { owner: string; resource: Uri; severity: MarkerSeverity; code?: string | { value: string; target: Uri; }; message: string; source?: string; startLineNumber: number; startColumn: number; endLineNumber: number; endColumn: number; modelVersionId?: number; relatedInformation?: IRelatedInformation[]; tags?: MarkerTag[]; origin?: string | undefined; } /** * A structure defining a problem/warning/etc. */ export interface IMarkerData { code?: string | { value: string; target: Uri; }; severity: MarkerSeverity; message: string; source?: string; startLineNumber: number; startColumn: number; endLineNumber: number; endColumn: number; modelVersionId?: number; relatedInformation?: IRelatedInformation[]; tags?: MarkerTag[]; origin?: string | undefined; } /** * */ export interface IRelatedInformation { resource: Uri; message: string; startLineNumber: number; startColumn: number; endLineNumber: number; endColumn: number; } export interface IColorizerOptions { tabSize?: number; } export interface IColorizerElementOptions extends IColorizerOptions { theme?: string; mimeType?: string; } export enum ScrollbarVisibility { Auto = 1, Hidden = 2, Visible = 3 } export interface ThemeColor { id: string; } export interface ThemeIcon { readonly id: string; readonly color?: ThemeColor; } /** * A single edit operation, that acts as a simple replace. * i.e. Replace text at `range` with `text` in model. */ export interface ISingleEditOperation { /** * The range to replace. This can be empty to emulate a simple insert. */ range: IRange; /** * The text to replace with. This can be null to emulate a simple delete. */ text: string | null; /** * This indicates that this operation has "insert" semantics. * i.e. forceMoveMarkers = true => if `range` is collapsed, all markers at the position will be moved. */ forceMoveMarkers?: boolean; } /** * Word inside a model. */ export interface IWordAtPosition { /** * The word. */ readonly word: string; /** * The column where the word starts. */ readonly startColumn: number; /** * The column where the word ends. */ readonly endColumn: number; } /** * Vertical Lane in the overview ruler of the editor. */ export enum OverviewRulerLane { Left = 1, Center = 2, Right = 4, Full = 7 } /** * Vertical Lane in the glyph margin of the editor. */ export enum GlyphMarginLane { Left = 1, Center = 2, Right = 3 } export interface IGlyphMarginLanesModel { /** * The number of lanes that should be rendered in the editor. */ readonly requiredLanes: number; /** * Gets the lanes that should be rendered starting at a given line number. */ getLanesAtLine(lineNumber: number): GlyphMarginLane[]; /** * Resets the model and ensures it can contain at least `maxLine` lines. */ reset(maxLine: number): void; /** * Registers that a lane should be visible at the Range in the model. * @param persist - if true, notes that the lane should always be visible, * even on lines where there's no specific request for that lane. */ push(lane: GlyphMarginLane, range: Range, persist?: boolean): void; } /** * Position in the minimap to render the decoration. */ export enum MinimapPosition { Inline = 1, Gutter = 2 } /** * Section header style. */ export enum MinimapSectionHeaderStyle { Normal = 1, Underlined = 2 } export interface IDecorationOptions { /** * CSS color to render. * e.g.: rgba(100, 100, 100, 0.5) or a color from the color registry */ color: string | ThemeColor | undefined; /** * CSS color to render. * e.g.: rgba(100, 100, 100, 0.5) or a color from the color registry */ darkColor?: string | ThemeColor; } export interface IModelDecorationGlyphMarginOptions { /** * The position in the glyph margin. */ position: GlyphMarginLane; /** * Whether the glyph margin lane in {@link position} should be rendered even * outside of this decoration's range. */ persistLane?: boolean; } /** * Options for rendering a model decoration in the overview ruler. */ export interface IModelDecorationOverviewRulerOptions extends IDecorationOptions { /** * The position in the overview ruler. */ position: OverviewRulerLane; } /** * Options for rendering a model decoration in the minimap. */ export interface IModelDecorationMinimapOptions extends IDecorationOptions { /** * The position in the minimap. */ position: MinimapPosition; /** * If the decoration is for a section header, which header style. */ sectionHeaderStyle?: MinimapSectionHeaderStyle | null; /** * If the decoration is for a section header, the header text. */ sectionHeaderText?: string | null; } /** * Options for a model decoration. */ export interface IModelDecorationOptions { /** * Customize the growing behavior of the decoration when typing at the edges of the decoration. * Defaults to TrackedRangeStickiness.AlwaysGrowsWhenTypingAtEdges */ stickiness?: TrackedRangeStickiness; /** * CSS class name describing the decoration. */ className?: string | null; /** * Indicates whether the decoration should span across the entire line when it continues onto the next line. */ shouldFillLineOnLineBreak?: boolean | null; blockClassName?: string | null; /** * Indicates if this block should be rendered after the last line. * In this case, the range must be empty and set to the last line. */ blockIsAfterEnd?: boolean | null; blockDoesNotCollapse?: boolean | null; blockPadding?: [top: number, right: number, bottom: number, left: number] | null; /** * Message to be rendered when hovering over the glyph margin decoration. */ glyphMarginHoverMessage?: IMarkdownString | IMarkdownString[] | null; /** * Array of MarkdownString to render as the decoration message. */ hoverMessage?: IMarkdownString | IMarkdownString[] | null; /** * Array of MarkdownString to render as the line number message. */ lineNumberHoverMessage?: IMarkdownString | IMarkdownString[] | null; /** * Should the decoration expand to encompass a whole line. */ isWholeLine?: boolean; /** * Always render the decoration (even when the range it encompasses is collapsed). */ showIfCollapsed?: boolean; /** * Specifies the stack order of a decoration. * A decoration with greater stack order is always in front of a decoration with * a lower stack order when the decorations are on the same line. */ zIndex?: number; /** * If set, render this decoration in the overview ruler. */ overviewRuler?: IModelDecorationOverviewRulerOptions | null; /** * If set, render this decoration in the minimap. */ minimap?: IModelDecorationMinimapOptions | null; /** * If set, the decoration will be rendered in the glyph margin with this CSS class name. */ glyphMarginClassName?: string | null; /** * If set and the decoration has {@link glyphMarginClassName} set, render this decoration * with the specified {@link IModelDecorationGlyphMarginOptions} in the glyph margin. */ glyphMargin?: IModelDecorationGlyphMarginOptions | null; /** * If set, the decoration will override the line height of the lines it spans. Maximum value is 300px. */ lineHeight?: number | null; /** * Font family */ fontFamily?: string | null; /** * Font size */ fontSize?: string | null; /** * Font weight */ fontWeight?: string | null; /** * Font style */ fontStyle?: string | null; /** * If set, the decoration will be rendered in the lines decorations with this CSS class name. */ linesDecorationsClassName?: string | null; /** * Controls the tooltip text of the line decoration. */ linesDecorationsTooltip?: string | null; /** * If set, the decoration will be rendered on the line number. */ lineNumberClassName?: string | null; /** * If set, the decoration will be rendered in the lines decorations with this CSS class name, but only for the first line in case of line wrapping. */ firstLineDecorationClassName?: string | null; /** * If set, the decoration will be rendered in the margin (covering its full width) with this CSS class name. */ marginClassName?: string | null; /** * If set, the decoration will be rendered inline with the text with this CSS class name. * Please use this only for CSS rules that must impact the text. For example, use `className` * to have a background color decoration. */ inlineClassName?: string | null; /** * If there is an `inlineClassName` which affects letter spacing. */ inlineClassNameAffectsLetterSpacing?: boolean; /** * If set, the decoration will be rendered before the text with this CSS class name. */ beforeContentClassName?: string | null; /** * If set, the decoration will be rendered after the text with this CSS class name. */ afterContentClassName?: string | null; /** * If set, text will be injected in the view after the range. */ after?: InjectedTextOptions | null; /** * If set, text will be injected in the view before the range. */ before?: InjectedTextOptions | null; /** * The text direction of the decoration. */ textDirection?: TextDirection | null; } /** * Text Direction for a decoration. */ export enum TextDirection { LTR = 0, RTL = 1 } /** * Configures text that is injected into the view without changing the underlying document. */ export interface InjectedTextOptions { /** * Sets the text to inject. Must be a single line. */ readonly content: string; /** * If set, the decoration will be rendered inline with the text with this CSS class name. */ readonly inlineClassName?: string | null; /** * If there is an `inlineClassName` which affects letter spacing. */ readonly inlineClassNameAffectsLetterSpacing?: boolean; /** * This field allows to attach data to this injected text. * The data can be read when injected texts at a given position are queried. */ readonly attachedData?: unknown; /** * Configures cursor stops around injected text. * Defaults to {@link InjectedTextCursorStops.Both}. */ readonly cursorStops?: InjectedTextCursorStops | null; } export enum InjectedTextCursorStops { Both = 0, Right = 1, Left = 2, None = 3 } /** * New model decorations. */ export interface IModelDeltaDecoration { /** * Range that this decoration covers. */ range: IRange; /** * Options associated with this decoration. */ options: IModelDecorationOptions; } /** * A decoration in the model. */ export interface IModelDecoration { /** * Identifier for a decoration. */ readonly id: string; /** * Identifier for a decoration's owner. */ readonly ownerId: number; /** * Range that this decoration covers. */ readonly range: Range; /** * Options associated with this decoration. */ readonly options: IModelDecorationOptions; } /** * End of line character preference. */ export enum EndOfLinePreference { /** * Use the end of line character identified in the text buffer. */ TextDefined = 0, /** * Use line feed (\n) as the end of line character. */ LF = 1, /** * Use carriage return and line feed (\r\n) as the end of line character. */ CRLF = 2 } /** * The default end of line to use when instantiating models. */ export enum DefaultEndOfLine { /** * Use line feed (\n) as the end of line character. */ LF = 1, /** * Use carriage return and line feed (\r\n) as the end of line character. */ CRLF = 2 } /** * End of line character preference. */ export enum EndOfLineSequence { /** * Use line feed (\n) as the end of line character. */ LF = 0, /** * Use carriage return and line feed (\r\n) as the end of line character. */ CRLF = 1 } /** * A single edit operation, that has an identifier. */ export interface IIdentifiedSingleEditOperation extends ISingleEditOperation { } export interface IValidEditOperation { /** * The range to replace. This can be empty to emulate a simple insert. */ range: Range; /** * The text to replace with. This can be empty to emulate a simple delete. */ text: string; } /** * A callback that can compute the cursor state after applying a series of edit operations. */ export interface ICursorStateComputer { /** * A callback that can compute the resulting cursors state after some edit operations have been executed. */ (inverseEditOperations: IValidEditOperation[]): Selection[] | null; } export class TextModelResolvedOptions { _textModelResolvedOptionsBrand: void; readonly tabSize: number; readonly indentSize: number; readonly insertSpaces: boolean; readonly defaultEOL: DefaultEndOfLine; readonly trimAutoWhitespace: boolean; readonly bracketPairColorizationOptions: BracketPairColorizationOptions; get originalIndentSize(): number | 'tabSize'; } export interface BracketPairColorizationOptions { enabled: boolean; independentColorPoolPerBracketType: boolean; } export interface ITextModelUpdateOptions { tabSize?: number; indentSize?: number | 'tabSize'; insertSpaces?: boolean; trimAutoWhitespace?: boolean; bracketColorizationOptions?: BracketPairColorizationOptions; } export class FindMatch { _findMatchBrand: void; readonly range: Range; readonly matches: string[] | null; } /** * Describes the behavior of decorations when typing/editing near their edges. * Note: Please do not edit the values, as they very carefully match `DecorationRangeBehavior` */ export enum TrackedRangeStickiness { AlwaysGrowsWhenTypingAtEdges = 0, NeverGrowsWhenTypingAtEdges = 1, GrowsOnlyWhenTypingBefore = 2, GrowsOnlyWhenTypingAfter = 3 } /** * Text snapshot that works like an iterator. * Will try to return chunks of roughly ~64KB size. * Will return null when finished. */ export interface ITextSnapshot { read(): string | null; } /** * A model. */ export interface ITextModel { /** * Gets the resource associated with this editor model. */ readonly uri: Uri; /** * A unique identifier associated with this model. */ readonly id: string; /** * Get the resolved options for this model. */ getOptions(): TextModelResolvedOptions; /** * Get the current version id of the model. * Anytime a change happens to the model (even undo/redo), * the version id is incremented. */ getVersionId(): number; /** * Get the alternative version id of the model. * This alternative version id is not always incremented, * it will return the same values in the case of undo-redo. */ getAlternativeVersionId(): number; /** * Replace the entire text buffer value contained in this model. */ setValue(newValue: string | ITextSnapshot): void; /** * Get the text stored in this model. * @param eol The end of line character preference. Defaults to `EndOfLinePreference.TextDefined`. * @param preserverBOM Preserve a BOM character if it was detected when the model was constructed. * @return The text. */ getValue(eol?: EndOfLinePreference, preserveBOM?: boolean): string; /** * Get the text stored in this model. * @param preserverBOM Preserve a BOM character if it was detected when the model was constructed. * @return The text snapshot (it is safe to consume it asynchronously). */ createSnapshot(preserveBOM?: boolean): ITextSnapshot; /** * Get the length of the text stored in this model. */ getValueLength(eol?: EndOfLinePreference, preserveBOM?: boolean): number; /** * Get the text in a certain range. * @param range The range describing what text to get. * @param eol The end of line character preference. This will only be used for multiline ranges. Defaults to `EndOfLinePreference.TextDefined`. * @return The text. */ getValueInRange(range: IRange, eol?: EndOfLinePreference): string; /** * Get the length of text in a certain range. * @param range The range describing what text length to get. * @return The text length. */ getValueLengthInRange(range: IRange, eol?: EndOfLinePreference): number; /** * Get the character count of text in a certain range. * @param range The range describing what text length to get. */ getCharacterCountInRange(range: IRange, eol?: EndOfLinePreference): number; /** * Get the number of lines in the model. */ getLineCount(): number; /** * Get the text for a certain line. */ getLineContent(lineNumber: number): string; /** * Get the text length for a certain line. */ getLineLength(lineNumber: number): number; /** * Get the text for all lines. */ getLinesContent(): string[]; /** * Get the end of line sequence predominantly used in the text buffer. * @return EOL char sequence (e.g.: '\n' or '\r\n'). */ getEOL(): string; /** * Get the end of line sequence predominantly used in the text buffer. */ getEndOfLineSequence(): EndOfLineSequence; /** * Get the minimum legal column for line at `lineNumber` */ getLineMinColumn(lineNumber: number): number; /** * Get the maximum legal column for line at `lineNumber` */ getLineMaxColumn(lineNumber: number): number; /** * Returns the column before the first non whitespace character for line at `lineNumber`. * Returns 0 if line is empty or contains only whitespace. */ getLineFirstNonWhitespaceColumn(lineNumber: number): number; /** * Returns the column after the last non whitespace character for line at `lineNumber`. * Returns 0 if line is empty or contains only whitespace. */ getLineLastNonWhitespaceColumn(lineNumber: number): number; /** * Create a valid position. */ validatePosition(position: IPosition): Position; /** * Advances the given position by the given offset (negative offsets are also accepted) * and returns it as a new valid position. * * If the offset and position are such that their combination goes beyond the beginning or * end of the model, throws an exception. * * If the offset is such that the new position would be in the middle of a multi-byte * line terminator, throws an exception. */ modifyPosition(position: IPosition, offset: number): Position; /** * Create a valid range. */ validateRange(range: IRange): Range; /** * Verifies the range is valid. */ isValidRange(range: IRange): boolean; /** * Converts the position to a zero-based offset. * * The position will be [adjusted](#TextDocument.validatePosition). * * @param position A position. * @return A valid zero-based offset. */ getOffsetAt(position: IPosition): number; /** * Converts a zero-based offset to a position. * * @param offset A zero-based offset. * @return A valid [position](#Position). */ getPositionAt(offset: number): Position; /** * Get a range covering the entire model. */ getFullModelRange(): Range; /** * Returns if the model was disposed or not. */ isDisposed(): boolean; /** * Search the model. * @param searchString The string used to search. If it is a regular expression, set `isRegex` to true. * @param searchOnlyEditableRange Limit the searching to only search inside the editable range of the model. * @param isRegex Used to indicate that `searchString` is a regular expression. * @param matchCase Force the matching to match lower/upper case exactly. * @param wordSeparators Force the matching to match entire words only. Pass null otherwise. * @param captureMatches The result will contain the captured groups. * @param limitResultCount Limit the number of results * @return The ranges where the matches are. It is empty if not matches have been found. */ findMatches(searchString: string, searchOnlyEditableRange: boolean, isRegex: boolean, matchCase: boolean, wordSeparators: string | null, captureMatches: boolean, limitResultCount?: number): FindMatch[]; /** * Search the model. * @param searchString The string used to search. If it is a regular expression, set `isRegex` to true. * @param searchScope Limit the searching to only search inside these ranges. * @param isRegex Used to indicate that `searchString` is a regular expression. * @param matchCase Force the matching to match lower/upper case exactly. * @param wordSeparators Force the matching to match entire words only. Pass null otherwise. * @param captureMatches The result will contain the captured groups. * @param limitResultCount Limit the number of results * @return The ranges where the matches are. It is empty if no matches have been found. */ findMatches(searchString: string, searchScope: IRange | IRange[], isRegex: boolean, matchCase: boolean, wordSeparators: string | null, captureMatches: boolean, limitResultCount?: number): FindMatch[]; /** * Search the model for the next match. Loops to the beginning of the model if needed. * @param searchString The string used to search. If it is a regular expression, set `isRegex` to true. * @param searchStart Start the searching at the specified position. * @param isRegex Used to indicate that `searchString` is a regular expression. * @param matchCase Force the matching to match lower/upper case exactly. * @param wordSeparators Force the matching to match entire words only. Pass null otherwise. * @param captureMatches The result will contain the captured groups. * @return The range where the next match is. It is null if no next match has been found. */ findNextMatch(searchString: string, searchStart: IPosition, isRegex: boolean, matchCase: boolean, wordSeparators: string | null, captureMatches: boolean): FindMatch | null; /** * Search the model for the previous match. Loops to the end of the model if needed. * @param searchString The string used to search. If it is a regular expression, set `isRegex` to true. * @param searchStart Start the searching at the specified position. * @param isRegex Used to indicate that `searchString` is a regular expression. * @param matchCase Force the matching to match lower/upper case exactly. * @param wordSeparators Force the matching to match entire words only. Pass null otherwise. * @param captureMatches The result will contain the captured groups. * @return The range where the previous match is. It is null if no previous match has been found. */ findPreviousMatch(searchString: string, searchStart: IPosition, isRegex: boolean, matchCase: boolean, wordSeparators: string | null, captureMatches: boolean): FindMatch | null; /** * Get the language associated with this model. */ getLanguageId(): string; /** * Get the word under or besides `position`. * @param position The position to look for a word. * @return The word under or besides `position`. Might be null. */ getWordAtPosition(position: IPosition): IWordAtPosition | null; /** * Get the word under or besides `position` trimmed to `position`.column * @param position The position to look for a word. * @return The word under or besides `position`. Will never be null. */ getWordUntilPosition(position: IPosition): IWordAtPosition; /** * Perform a minimum amount of operations, in order to transform the decorations * identified by `oldDecorations` to the decorations described by `newDecorations` * and returns the new identifiers associated with the resulting decorations. * * @param oldDecorations Array containing previous decorations identifiers. * @param newDecorations Array describing what decorations should result after the call. * @param ownerId Identifies the editor id in which these decorations should appear. If no `ownerId` is provided, the decorations will appear in all editors that attach this model. * @return An array containing the new decorations identifiers. */ deltaDecorations(oldDecorations: string[], newDecorations: IModelDeltaDecoration[], ownerId?: number): string[]; /** * Get the options associated with a decoration. * @param id The decoration id. * @return The decoration options or null if the decoration was not found. */ getDecorationOptions(id: string): IModelDecorationOptions | null; /** * Get the range associated with a decoration. * @param id The decoration id. * @return The decoration range or null if the decoration was not found. */ getDecorationRange(id: string): Range | null; /** * Gets all the decorations for the line `lineNumber` as an array. * @param lineNumber The line number * @param ownerId If set, it will ignore decorations belonging to other owners. * @param filterOutValidation If set, it will ignore decorations specific to validation (i.e. warnings, errors). * @param filterFontDecorations If set, it will ignore font decorations. * @return An array with the decorations */ getLineDecorations(lineNumber: number, ownerId?: number, filterOutValidation?: boolean, filterFontDecorations?: boolean): IModelDecoration[]; /** * Gets all the decorations for the lines between `startLineNumber` and `endLineNumber` as an array. * @param startLineNumber The start line number * @param endLineNumber The end line number * @param ownerId If set, it will ignore decorations belonging to other owners. * @param filterOutValidation If set, it will ignore decorations specific to validation (i.e. warnings, errors). * @param filterFontDecorations If set, it will ignore font decorations. * @return An array with the decorations */ getLinesDecorations(startLineNumber: number, endLineNumber: number, ownerId?: number, filterOutValidation?: boolean, filterFontDecorations?: boolean): IModelDecoration[]; /** * Gets all the decorations in a range as an array. Only `startLineNumber` and `endLineNumber` from `range` are used for filtering. * So for now it returns all the decorations on the same line as `range`. * @param range The range to search in * @param ownerId If set, it will ignore decorations belonging to other owners. * @param filterOutValidation If set, it will ignore decorations specific to validation (i.e. warnings, errors). * @param filterFontDecorations If set, it will ignore font decorations. * @param onlyMinimapDecorations If set, it will return only decorations that render in the minimap. * @param onlyMarginDecorations If set, it will return only decorations that render in the glyph margin. * @return An array with the decorations */ getDecorationsInRange(range: IRange, ownerId?: number, filterOutValidation?: boolean, filterFontDecorations?: boolean, onlyMinimapDecorations?: boolean, onlyMarginDecorations?: boolean): IModelDecoration[]; /** * Gets all the decorations as an array. * @param ownerId If set, it will ignore decorations belonging to other owners. * @param filterOutValidation If set, it will ignore decorations specific to validation (i.e. warnings, errors). * @param filterFontDecorations If set, it will ignore font decorations. */ getAllDecorations(ownerId?: number, filterOutValidation?: boolean, filterFontDecorations?: boolean): IModelDecoration[]; /** * Gets all decorations that render in the glyph margin as an array. * @param ownerId If set, it will ignore decorations belonging to other owners. */ getAllMarginDecorations(ownerId?: number): IModelDecoration[]; /** * Gets all the decorations that should be rendered in the overview ruler as an array. * @param ownerId If set, it will ignore decorations belonging to other owners. * @param filterOutValidation If set, it will ignore decorations specific to validation (i.e. warnings, errors). * @param filterFontDecorations If set, it will ignore font decorations. */ getOverviewRulerDecorations(ownerId?: number, filterOutValidation?: boolean, filterFontDecorations?: boolean): IModelDecoration[]; /** * Gets all the decorations that contain injected text. * @param ownerId If set, it will ignore decorations belonging to other owners. */ getInjectedTextDecorations(ownerId?: number): IModelDecoration[]; /** * Gets all the decorations that contain custom line heights. * @param ownerId If set, it will ignore decorations belonging to other owners. */ getCustomLineHeightsDecorations(ownerId?: number): IModelDecoration[]; /** * Normalize a string containing whitespace according to indentation rules (converts to spaces or to tabs). */ normalizeIndentation(str: string): string; /** * Change the options of this model. */ updateOptions(newOpts: ITextModelUpdateOptions): void; /** * Detect the indentation options for this model from its content. */ detectIndentation(defaultInsertSpaces: boolean, defaultTabSize: number): void; /** * Close the current undo-redo element. * This offers a way to create an undo/redo stop point. */ pushStackElement(): void; /** * Open the current undo-redo element. * This offers a way to remove the current undo/redo stop point. */ popStackElement(): void; /** * Push edit operations, basically editing the model. This is the preferred way * of editing the model. The edit operations will land on the undo stack. * @param beforeCursorState The cursor state before the edit operations. This cursor state will be returned when `undo` or `redo` are invoked. * @param editOperations The edit operations. * @param cursorStateComputer A callback that can compute the resulting cursors state after the edit operations have been executed. * @return The cursor state returned by the `cursorStateComputer`. */ pushEditOperations(beforeCursorState: Selection[] | null, editOperations: IIdentifiedSingleEditOperation[], cursorStateComputer: ICursorStateComputer): Selection[] | null; /** * Change the end of line sequence. This is the preferred way of * changing the eol sequence. This will land on the undo stack. */ pushEOL(eol: EndOfLineSequence): void; /** * Edit the model without adding the edits to the undo stack. * This can have dire consequences on the undo stack! See @pushEditOperations for the preferred way. * @param operations The edit operations. * @return If desired, the inverse edit operations, that, when applied, will bring the model back to the previous state. */ applyEdits(operations: readonly IIdentifiedSingleEditOperation[]): void; applyEdits(operations: readonly IIdentifiedSingleEditOperation[], computeUndoEdits: false): void; applyEdits(operations: readonly IIdentifiedSingleEditOperation[], computeUndoEdits: true): IValidEditOperation[]; /** * Change the end of line sequence without recording in the undo stack. * This can have dire consequences on the undo stack! See @pushEOL for the preferred way. */ setEOL(eol: EndOfLineSequence): void; /** * Undo edit operations until the previous undo/redo point. * The inverse edit operations will be pushed on the redo stack. */ undo(): void | Promise; /** * Is there anything in the undo stack? */ canUndo(): boolean; /** * Redo edit operations until the next undo/redo point. * The inverse edit operations will be pushed on the undo stack. */ redo(): void | Promise; /** * Is there anything in the redo stack? */ canRedo(): boolean; /** * An event emitted when the contents of the model have changed. * @event */ onDidChangeContent(listener: (e: IModelContentChangedEvent) => void): IDisposable; /** * An event emitted when decorations of the model have changed. * @event */ readonly onDidChangeDecorations: IEvent; /** * An event emitted when the model options have changed. * @event */ readonly onDidChangeOptions: IEvent; /** * An event emitted when the language associated with the model has changed. * @event */ readonly onDidChangeLanguage: IEvent; /** * An event emitted when the language configuration associated with the model has changed. * @event */ readonly onDidChangeLanguageConfiguration: IEvent; /** * An event emitted when the model has been attached to the first editor or detached from the last editor. * @event */ readonly onDidChangeAttached: IEvent; /** * An event emitted right before disposing the model. * @event */ readonly onWillDispose: IEvent; /** * Destroy this model. */ dispose(): void; /** * Returns if this model is attached to an editor or not. */ isAttachedToEditor(): boolean; } export enum PositionAffinity { /** * Prefers the left most position. */ Left = 0, /** * Prefers the right most position. */ Right = 1, /** * No preference. */ None = 2, /** * If the given position is on injected text, prefers the position left of it. */ LeftOfInjectedText = 3, /** * If the given position is on injected text, prefers the position right of it. */ RightOfInjectedText = 4 } /** * A change */ export interface IChange { readonly originalStartLineNumber: number; readonly originalEndLineNumber: number; readonly modifiedStartLineNumber: number; readonly modifiedEndLineNumber: number; } /** * A character level change. */ export interface ICharChange extends IChange { readonly originalStartColumn: number; readonly originalEndColumn: number; readonly modifiedStartColumn: number; readonly modifiedEndColumn: number; } /** * A line change */ export interface ILineChange extends IChange { readonly charChanges: ICharChange[] | undefined; } export interface IDimension { width: number; height: number; } /** * A builder and helper for edit operations for a command. */ export interface IEditOperationBuilder { /** * Add a new edit operation (a replace operation). * @param range The range to replace (delete). May be empty to represent a simple insert. * @param text The text to replace with. May be null to represent a simple delete. */ addEditOperation(range: IRange, text: string | null, forceMoveMarkers?: boolean): void; /** * Add a new edit operation (a replace operation). * The inverse edits will be accessible in `ICursorStateComputerData.getInverseEditOperations()` * @param range The range to replace (delete). May be empty to represent a simple insert. * @param text The text to replace with. May be null to represent a simple delete. */ addTrackedEditOperation(range: IRange, text: string | null, forceMoveMarkers?: boolean): void; /** * Track `selection` when applying edit operations. * A best effort will be made to not grow/expand the selection. * An empty selection will clamp to a nearby character. * @param selection The selection to track. * @param trackPreviousOnEmpty If set, and the selection is empty, indicates whether the selection * should clamp to the previous or the next character. * @return A unique identifier. */ trackSelection(selection: Selection, trackPreviousOnEmpty?: boolean): string; } /** * A helper for computing cursor state after a command. */ export interface ICursorStateComputerData { /** * Get the inverse edit operations of the added edit operations. */ getInverseEditOperations(): IValidEditOperation[]; /** * Get a previously tracked selection. * @param id The unique identifier returned by `trackSelection`. * @return The selection. */ getTrackedSelection(id: string): Selection; } /** * A command that modifies text / cursor state on a model. */ export interface ICommand { /** * Get the edit operations needed to execute this command. * @param model The model the command will execute on. * @param builder A helper to collect the needed edit operations and to track selections. */ getEditOperations(model: ITextModel, builder: IEditOperationBuilder): void; /** * Compute the cursor state after the edit operations were applied. * @param model The model the command has executed on. * @param helper A helper to get inverse edit operations and to get previously tracked selections. * @return The cursor state after the command executed. */ computeCursorState(model: ITextModel, helper: ICursorStateComputerData): Selection; } /** * A model for the diff editor. */ export interface IDiffEditorModel { /** * Original model. */ original: ITextModel; /** * Modified model. */ modified: ITextModel; } export interface IDiffEditorViewModel extends IDisposable { readonly model: IDiffEditorModel; waitForDiff(): Promise; } /** * An event describing that an editor has had its model reset (i.e. `editor.setModel()`). */ export interface IModelChangedEvent { /** * The `uri` of the previous model or null. */ readonly oldModelUrl: Uri | null; /** * The `uri` of the new model or null. */ readonly newModelUrl: Uri | null; } export interface IContentSizeChangedEvent { readonly contentWidth: number; readonly contentHeight: number; readonly contentWidthChanged: boolean; readonly contentHeightChanged: boolean; } export interface INewScrollPosition { scrollLeft?: number; scrollTop?: number; } export interface IEditorAction { readonly id: string; readonly label: string; readonly alias: string; readonly metadata: ICommandMetadata | undefined; isSupported(): boolean; run(args?: unknown): Promise; } export type IEditorModel = ITextModel | IDiffEditorModel | IDiffEditorViewModel; /** * A (serializable) state of the cursors. */ export interface ICursorState { inSelectionMode: boolean; selectionStart: IPosition; position: IPosition; } /** * A (serializable) state of the view. */ export interface IViewState { /** written by previous versions */ scrollTop?: number; /** written by previous versions */ scrollTopWithoutViewZones?: number; scrollLeft: number; firstPosition: IPosition; firstPositionDeltaTop: number; } /** * A (serializable) state of the code editor. */ export interface ICodeEditorViewState { cursorState: ICursorState[]; viewState: IViewState; contributionsState: { [id: string]: any; }; } /** * (Serializable) View state for the diff editor. */ export interface IDiffEditorViewState { original: ICodeEditorViewState | null; modified: ICodeEditorViewState | null; modelState?: unknown; } /** * An editor view state. */ export type IEditorViewState = ICodeEditorViewState | IDiffEditorViewState; export enum ScrollType { Smooth = 0, Immediate = 1 } /** * An editor. */ export interface IEditor { /** * An event emitted when the editor has been disposed. * @event */ onDidDispose(listener: () => void): IDisposable; /** * Dispose the editor. */ dispose(): void; /** * Get a unique id for this editor instance. */ getId(): string; /** * Get the editor type. Please see `EditorType`. * This is to avoid an instanceof check */ getEditorType(): string; /** * Update the editor's options after the editor has been created. */ updateOptions(newOptions: IEditorOptions): void; /** * Instructs the editor to remeasure its container. This method should * be called when the container of the editor gets resized. * * If a dimension is passed in, the passed in value will be used. * * By default, this will also render the editor immediately. * If you prefer to delay rendering to the next animation frame, use postponeRendering == true. */ layout(dimension?: IDimension, postponeRendering?: boolean): void; /** * Brings browser focus to the editor text */ focus(): void; /** * Returns true if the text inside this editor is focused (i.e. cursor is blinking). */ hasTextFocus(): boolean; /** * Returns all actions associated with this editor. */ getSupportedActions(): IEditorAction[]; /** * Saves current view state of the editor in a serializable object. */ saveViewState(): IEditorViewState | null; /** * Restores the view state of the editor from a serializable object generated by `saveViewState`. */ restoreViewState(state: IEditorViewState | null): void; /** * Given a position, returns a column number that takes tab-widths into account. */ getVisibleColumnFromPosition(position: IPosition): number; /** * Returns the primary position of the cursor. */ getPosition(): Position | null; /** * Set the primary position of the cursor. This will remove any secondary cursors. * @param position New primary cursor's position * @param source Source of the call that caused the position */ setPosition(position: IPosition, source?: string): void; /** * Scroll vertically as necessary and reveal a line. */ revealLine(lineNumber: number, scrollType?: ScrollType): void; /** * Scroll vertically as necessary and reveal a line centered vertically. */ revealLineInCenter(lineNumber: number, scrollType?: ScrollType): void; /** * Scroll vertically as necessary and reveal a line centered vertically only if it lies outside the viewport. */ revealLineInCenterIfOutsideViewport(lineNumber: number, scrollType?: ScrollType): void; /** * Scroll vertically as necessary and reveal a line close to the top of the viewport, * optimized for viewing a code definition. */ revealLineNearTop(lineNumber: number, scrollType?: ScrollType): void; /** * Scroll vertically or horizontally as necessary and reveal a position. */ revealPosition(position: IPosition, scrollType?: ScrollType): void; /** * Scroll vertically or horizontally as necessary and reveal a position centered vertically. */ revealPositionInCenter(position: IPosition, scrollType?: ScrollType): void; /** * Scroll vertically or horizontally as necessary and reveal a position centered vertically only if it lies outside the viewport. */ revealPositionInCenterIfOutsideViewport(position: IPosition, scrollType?: ScrollType): void; /** * Scroll vertically or horizontally as necessary and reveal a position close to the top of the viewport, * optimized for viewing a code definition. */ revealPositionNearTop(position: IPosition, scrollType?: ScrollType): void; /** * Returns the primary selection of the editor. */ getSelection(): Selection | null; /** * Returns all the selections of the editor. */ getSelections(): Selection[] | null; /** * Set the primary selection of the editor. This will remove any secondary cursors. * @param selection The new selection * @param source Source of the call that caused the selection */ setSelection(selection: IRange, source?: string): void; /** * Set the primary selection of the editor. This will remove any secondary cursors. * @param selection The new selection * @param source Source of the call that caused the selection */ setSelection(selection: Range, source?: string): void; /** * Set the primary selection of the editor. This will remove any secondary cursors. * @param selection The new selection * @param source Source of the call that caused the selection */ setSelection(selection: ISelection, source?: string): void; /** * Set the primary selection of the editor. This will remove any secondary cursors. * @param selection The new selection * @param source Source of the call that caused the selection */ setSelection(selection: Selection, source?: string): void; /** * Set the selections for all the cursors of the editor. * Cursors will be removed or added, as necessary. * @param selections The new selection * @param source Source of the call that caused the selection */ setSelections(selections: readonly ISelection[], source?: string): void; /** * Scroll vertically as necessary and reveal lines. */ revealLines(startLineNumber: number, endLineNumber: number, scrollType?: ScrollType): void; /** * Scroll vertically as necessary and reveal lines centered vertically. */ revealLinesInCenter(lineNumber: number, endLineNumber: number, scrollType?: ScrollType): void; /** * Scroll vertically as necessary and reveal lines centered vertically only if it lies outside the viewport. */ revealLinesInCenterIfOutsideViewport(lineNumber: number, endLineNumber: number, scrollType?: ScrollType): void; /** * Scroll vertically as necessary and reveal lines close to the top of the viewport, * optimized for viewing a code definition. */ revealLinesNearTop(lineNumber: number, endLineNumber: number, scrollType?: ScrollType): void; /** * Scroll vertically or horizontally as necessary and reveal a range. */ revealRange(range: IRange, scrollType?: ScrollType): void; /** * Scroll vertically or horizontally as necessary and reveal a range centered vertically. */ revealRangeInCenter(range: IRange, scrollType?: ScrollType): void; /** * Scroll vertically or horizontally as necessary and reveal a range at the top of the viewport. */ revealRangeAtTop(range: IRange, scrollType?: ScrollType): void; /** * Scroll vertically or horizontally as necessary and reveal a range centered vertically only if it lies outside the viewport. */ revealRangeInCenterIfOutsideViewport(range: IRange, scrollType?: ScrollType): void; /** * Scroll vertically or horizontally as necessary and reveal a range close to the top of the viewport, * optimized for viewing a code definition. */ revealRangeNearTop(range: IRange, scrollType?: ScrollType): void; /** * Scroll vertically or horizontally as necessary and reveal a range close to the top of the viewport, * optimized for viewing a code definition. Only if it lies outside the viewport. */ revealRangeNearTopIfOutsideViewport(range: IRange, scrollType?: ScrollType): void; /** * Directly trigger a handler or an editor action. * @param source The source of the call. * @param handlerId The id of the handler or the id of a contribution. * @param payload Extra data to be sent to the handler. */ trigger(source: string | null | undefined, handlerId: string, payload: any): void; /** * Gets the current model attached to this editor. */ getModel(): IEditorModel | null; /** * Sets the current model attached to this editor. * If the previous model was created by the editor via the value key in the options * literal object, it will be destroyed. Otherwise, if the previous model was set * via setModel, or the model key in the options literal object, the previous model * will not be destroyed. * It is safe to call setModel(null) to simply detach the current model from the editor. */ setModel(model: IEditorModel | null): void; /** * Create a collection of decorations. All decorations added through this collection * will get the ownerId of the editor (meaning they will not show up in other editors). * These decorations will be automatically cleared when the editor's model changes. */ createDecorationsCollection(decorations?: IModelDeltaDecoration[]): IEditorDecorationsCollection; } /** * A collection of decorations */ export interface IEditorDecorationsCollection { /** * An event emitted when decorations change in the editor, * but the change is not caused by us setting or clearing the collection. */ onDidChange: IEvent; /** * Get the decorations count. */ length: number; /** * Get the range for a decoration. */ getRange(index: number): Range | null; /** * Get all ranges for decorations. */ getRanges(): Range[]; /** * Determine if a decoration is in this collection. */ has(decoration: IModelDecoration): boolean; /** * Replace all previous decorations with `newDecorations`. */ set(newDecorations: readonly IModelDeltaDecoration[]): string[]; /** * Append `newDecorations` to this collection. */ append(newDecorations: readonly IModelDeltaDecoration[]): string[]; /** * Remove all previous decorations. */ clear(): void; } /** * An editor contribution that gets created every time a new editor gets created and gets disposed when the editor gets disposed. */ export interface IEditorContribution { /** * Dispose this contribution. */ dispose(): void; /** * Store view state. */ saveViewState?(): any; /** * Restore view state. */ restoreViewState?(state: any): void; } /** * The type of the `IEditor`. */ export const EditorType: { ICodeEditor: string; IDiffEditor: string; }; /** * An event describing that the current language associated with a model has changed. */ export interface IModelLanguageChangedEvent { /** * Previous language */ readonly oldLanguage: string; /** * New language */ readonly newLanguage: string; /** * Source of the call that caused the event. */ readonly source: string; } /** * An event describing that the language configuration associated with a model has changed. */ export interface IModelLanguageConfigurationChangedEvent { } /** * An event describing a change in the text of a model. */ export interface IModelContentChangedEvent { /** * The changes are ordered from the end of the document to the beginning, so they should be safe to apply in sequence. */ readonly changes: IModelContentChange[]; /** * The (new) end-of-line character. */ readonly eol: string; /** * The new version id the model has transitioned to. */ readonly versionId: number; /** * Flag that indicates that this event was generated while undoing. */ readonly isUndoing: boolean; /** * Flag that indicates that this event was generated while redoing. */ readonly isRedoing: boolean; /** * Flag that indicates that all decorations were lost with this edit. * The model has been reset to a new value. */ readonly isFlush: boolean; /** * Flag that indicates that this event describes an eol change. */ readonly isEolChange: boolean; /** * The sum of these lengths equals changes.length. * The length of this array must equal the length of detailedReasons. */ readonly detailedReasonsChangeLengths: number[]; } export interface ISerializedModelContentChangedEvent { /** * The changes are ordered from the end of the document to the beginning, so they should be safe to apply in sequence. */ readonly changes: IModelContentChange[]; /** * The (new) end-of-line character. */ readonly eol: string; /** * The new version id the model has transitioned to. */ readonly versionId: number; /** * Flag that indicates that this event was generated while undoing. */ readonly isUndoing: boolean; /** * Flag that indicates that this event was generated while redoing. */ readonly isRedoing: boolean; /** * Flag that indicates that all decorations were lost with this edit. * The model has been reset to a new value. */ readonly isFlush: boolean; /** * Flag that indicates that this event describes an eol change. */ readonly isEolChange: boolean; } /** * An event describing that model decorations have changed. */ export interface IModelDecorationsChangedEvent { readonly affectsMinimap: boolean; readonly affectsOverviewRuler: boolean; readonly affectsGlyphMargin: boolean; readonly affectsLineNumber: boolean; } export interface IModelOptionsChangedEvent { readonly tabSize: boolean; readonly indentSize: boolean; readonly insertSpaces: boolean; readonly trimAutoWhitespace: boolean; } export interface IModelContentChange { /** * The old range that got replaced. */ readonly range: IRange; /** * The offset of the range that got replaced. */ readonly rangeOffset: number; /** * The length of the range that got replaced. */ readonly rangeLength: number; /** * The new text for the range. */ readonly text: string; } /** * Describes the reason the cursor has changed its position. */ export enum CursorChangeReason { /** * Unknown or not set. */ NotSet = 0, /** * A `model.setValue()` was called. */ ContentFlush = 1, /** * The `model` has been changed outside of this cursor and the cursor recovers its position from associated markers. */ RecoverFromMarkers = 2, /** * There was an explicit user gesture. */ Explicit = 3, /** * There was a Paste. */ Paste = 4, /** * There was an Undo. */ Undo = 5, /** * There was a Redo. */ Redo = 6 } /** * An event describing that the cursor position has changed. */ export interface ICursorPositionChangedEvent { /** * Primary cursor's position. */ readonly position: Position; /** * Secondary cursors' position. */ readonly secondaryPositions: Position[]; /** * Reason. */ readonly reason: CursorChangeReason; /** * Source of the call that caused the event. */ readonly source: string; } /** * An event describing that the cursor selection has changed. */ export interface ICursorSelectionChangedEvent { /** * The primary selection. */ readonly selection: Selection; /** * The secondary selections. */ readonly secondarySelections: Selection[]; /** * The model version id. */ readonly modelVersionId: number; /** * The old selections. */ readonly oldSelections: Selection[] | null; /** * The model version id the that `oldSelections` refer to. */ readonly oldModelVersionId: number; /** * Source of the call that caused the event. */ readonly source: string; /** * Reason. */ readonly reason: CursorChangeReason; } export enum AccessibilitySupport { /** * This should be the browser case where it is not known if a screen reader is attached or no. */ Unknown = 0, Disabled = 1, Enabled = 2 } /** * Configuration options for auto closing quotes and brackets */ export type EditorAutoClosingStrategy = 'always' | 'languageDefined' | 'beforeWhitespace' | 'never'; /** * Configuration options for auto wrapping quotes and brackets */ export type EditorAutoSurroundStrategy = 'languageDefined' | 'quotes' | 'brackets' | 'never'; /** * Configuration options for typing over closing quotes or brackets */ export type EditorAutoClosingEditStrategy = 'always' | 'auto' | 'never'; /** * Configuration options for auto indentation in the editor */ export enum EditorAutoIndentStrategy { None = 0, Keep = 1, Brackets = 2, Advanced = 3, Full = 4 } /** * Configuration options for the editor. */ export interface IEditorOptions { /** * This editor is used inside a diff editor. */ inDiffEditor?: boolean; /** * This editor is allowed to use variable line heights. */ allowVariableLineHeights?: boolean; /** * This editor is allowed to use variable font-sizes and font-families */ allowVariableFonts?: boolean; /** * This editor is allowed to use variable font-sizes and font-families in accessibility mode */ allowVariableFontsInAccessibilityMode?: boolean; /** * The aria label for the editor's textarea (when it is focused). */ ariaLabel?: string; /** * Whether the aria-required attribute should be set on the editors textarea. */ ariaRequired?: boolean; /** * Control whether a screen reader announces inline suggestion content immediately. */ screenReaderAnnounceInlineSuggestion?: boolean; /** * The `tabindex` property of the editor's textarea */ tabIndex?: number; /** * Render vertical lines at the specified columns. * Defaults to empty array. */ rulers?: (number | IRulerOption)[]; /** * Locales used for segmenting lines into words when doing word related navigations or operations. * * Specify the BCP 47 language tag of the word you wish to recognize (e.g., ja, zh-CN, zh-Hant-TW, etc.). * Defaults to empty array */ wordSegmenterLocales?: string | string[]; /** * A string containing the word separators used when doing word navigation. * Defaults to `~!@#$%^&*()-=+[{]}\\|;:\'",.<>/? */ wordSeparators?: string; /** * Enable Linux primary clipboard. * Defaults to true. */ selectionClipboard?: boolean; /** * Control the rendering of line numbers. * If it is a function, it will be invoked when rendering a line number and the return value will be rendered. * Otherwise, if it is a truthy, line numbers will be rendered normally (equivalent of using an identity function). * Otherwise, line numbers will not be rendered. * Defaults to `on`. */ lineNumbers?: LineNumbersType; /** * Controls the minimal number of visible leading and trailing lines surrounding the cursor. * Defaults to 0. */ cursorSurroundingLines?: number; /** * Controls when `cursorSurroundingLines` should be enforced * Defaults to `default`, `cursorSurroundingLines` is not enforced when cursor position is changed * by mouse. */ cursorSurroundingLinesStyle?: 'default' | 'all'; /** * Render last line number when the file ends with a newline. * Defaults to 'on' for Windows and macOS and 'dimmed' for Linux. */ renderFinalNewline?: 'on' | 'off' | 'dimmed'; /** * Remove unusual line terminators like LINE SEPARATOR (LS), PARAGRAPH SEPARATOR (PS). * Defaults to 'prompt'. */ unusualLineTerminators?: 'auto' | 'off' | 'prompt'; /** * Should the corresponding line be selected when clicking on the line number? * Defaults to true. */ selectOnLineNumbers?: boolean; /** * Control the width of line numbers, by reserving horizontal space for rendering at least an amount of digits. * Defaults to 5. */ lineNumbersMinChars?: number; /** * Enable the rendering of the glyph margin. * Defaults to true in vscode and to false in monaco-editor. */ glyphMargin?: boolean; /** * The width reserved for line decorations (in px). * Line decorations are placed between line numbers and the editor content. * You can pass in a string in the format floating point followed by "ch". e.g. 1.3ch. * Defaults to 10. */ lineDecorationsWidth?: number | string; /** * When revealing the cursor, a virtual padding (px) is added to the cursor, turning it into a rectangle. * This virtual padding ensures that the cursor gets revealed before hitting the edge of the viewport. * Defaults to 30 (px). */ revealHorizontalRightPadding?: number; /** * Render the editor selection with rounded borders. * Defaults to true. */ roundedSelection?: boolean; /** * Class name to be added to the editor. */ extraEditorClassName?: string; /** * Should the editor be read only. See also `domReadOnly`. * Defaults to false. */ readOnly?: boolean; /** * The message to display when the editor is readonly. */ readOnlyMessage?: IMarkdownString; /** * Should the textarea used for input use the DOM `readonly` attribute. * Defaults to false. */ domReadOnly?: boolean; /** * Enable linked editing. * Defaults to false. */ linkedEditing?: boolean; /** * deprecated, use linkedEditing instead */ renameOnType?: boolean; /** * Should the editor render validation decorations. * Defaults to editable. */ renderValidationDecorations?: 'editable' | 'on' | 'off'; /** * Control the behavior and rendering of the scrollbars. */ scrollbar?: IEditorScrollbarOptions; /** * Control the behavior of sticky scroll options */ stickyScroll?: IEditorStickyScrollOptions; /** * Control the behavior and rendering of the minimap. */ minimap?: IEditorMinimapOptions; /** * Control the behavior of the find widget. */ find?: IEditorFindOptions; /** * Display overflow widgets as `fixed`. * Defaults to `false`. */ fixedOverflowWidgets?: boolean; /** * Allow content widgets and overflow widgets to overflow the editor viewport. * Defaults to `true`. */ allowOverflow?: boolean; /** * The number of vertical lanes the overview ruler should render. * Defaults to 3. */ overviewRulerLanes?: number; /** * Controls if a border should be drawn around the overview ruler. * Defaults to `true`. */ overviewRulerBorder?: boolean; /** * Control the cursor animation style, possible values are 'blink', 'smooth', 'phase', 'expand' and 'solid'. * Defaults to 'blink'. */ cursorBlinking?: 'blink' | 'smooth' | 'phase' | 'expand' | 'solid'; /** * Zoom the font in the editor when using the mouse wheel in combination with holding Ctrl. * Defaults to false. */ mouseWheelZoom?: boolean; /** * Control the mouse pointer style, either 'text' or 'default' or 'copy' * Defaults to 'text' */ mouseStyle?: 'text' | 'default' | 'copy'; /** * Enable smooth caret animation. * Defaults to 'off'. */ cursorSmoothCaretAnimation?: 'off' | 'explicit' | 'on'; /** * Control the cursor style in insert mode. * Defaults to 'line'. */ cursorStyle?: 'line' | 'block' | 'underline' | 'line-thin' | 'block-outline' | 'underline-thin'; /** * Control the cursor style in overtype mode. * Defaults to 'block'. */ overtypeCursorStyle?: 'line' | 'block' | 'underline' | 'line-thin' | 'block-outline' | 'underline-thin'; /** * Controls whether paste in overtype mode should overwrite or insert. */ overtypeOnPaste?: boolean; /** * Control the width of the cursor when cursorStyle is set to 'line' */ cursorWidth?: number; /** * Control the height of the cursor when cursorStyle is set to 'line' */ cursorHeight?: number; /** * Enable font ligatures. * Defaults to false. */ fontLigatures?: boolean | string; /** * Enable font variations. * Defaults to false. */ fontVariations?: boolean | string; /** * Controls whether to use default color decorations or not using the default document color provider */ defaultColorDecorators?: 'auto' | 'always' | 'never'; /** * Disable the use of `transform: translate3d(0px, 0px, 0px)` for the editor margin and lines layers. * The usage of `transform: translate3d(0px, 0px, 0px)` acts as a hint for browsers to create an extra layer. * Defaults to false. */ disableLayerHinting?: boolean; /** * Disable the optimizations for monospace fonts. * Defaults to false. */ disableMonospaceOptimizations?: boolean; /** * Should the cursor be hidden in the overview ruler. * Defaults to false. */ hideCursorInOverviewRuler?: boolean; /** * Enable that scrolling can go one screen size after the last line. * Defaults to true. */ scrollBeyondLastLine?: boolean; /** * Scroll editor on middle click */ scrollOnMiddleClick?: boolean; /** * Enable that scrolling can go beyond the last column by a number of columns. * Defaults to 5. */ scrollBeyondLastColumn?: number; /** * Enable that the editor animates scrolling to a position. * Defaults to false. */ smoothScrolling?: boolean; /** * Enable that the editor will install a ResizeObserver to check if its container dom node size has changed. * Defaults to false. */ automaticLayout?: boolean; /** * Control the wrapping of the editor. * When `wordWrap` = "off", the lines will never wrap. * When `wordWrap` = "on", the lines will wrap at the viewport width. * When `wordWrap` = "wordWrapColumn", the lines will wrap at `wordWrapColumn`. * When `wordWrap` = "bounded", the lines will wrap at min(viewport width, wordWrapColumn). * Defaults to "off". */ wordWrap?: 'off' | 'on' | 'wordWrapColumn' | 'bounded'; /** * Override the `wordWrap` setting. */ wordWrapOverride1?: 'off' | 'on' | 'inherit'; /** * Override the `wordWrapOverride1` setting. */ wordWrapOverride2?: 'off' | 'on' | 'inherit'; /** * Control the wrapping of the editor. * When `wordWrap` = "off", the lines will never wrap. * When `wordWrap` = "on", the lines will wrap at the viewport width. * When `wordWrap` = "wordWrapColumn", the lines will wrap at `wordWrapColumn`. * When `wordWrap` = "bounded", the lines will wrap at min(viewport width, wordWrapColumn). * Defaults to 80. */ wordWrapColumn?: number; /** * Control indentation of wrapped lines. Can be: 'none', 'same', 'indent' or 'deepIndent'. * Defaults to 'same' in vscode and to 'none' in monaco-editor. */ wrappingIndent?: 'none' | 'same' | 'indent' | 'deepIndent'; /** * Controls the wrapping strategy to use. * Defaults to 'simple'. */ wrappingStrategy?: 'simple' | 'advanced'; /** * Create a softwrap on every quoted "\n" literal. * Defaults to false. */ wrapOnEscapedLineFeeds?: boolean; /** * Configure word wrapping characters. A break will be introduced before these characters. */ wordWrapBreakBeforeCharacters?: string; /** * Configure word wrapping characters. A break will be introduced after these characters. */ wordWrapBreakAfterCharacters?: string; /** * Sets whether line breaks appear wherever the text would otherwise overflow its content box. * When wordBreak = 'normal', Use the default line break rule. * When wordBreak = 'keepAll', Word breaks should not be used for Chinese/Japanese/Korean (CJK) text. Non-CJK text behavior is the same as for normal. */ wordBreak?: 'normal' | 'keepAll'; /** * Performance guard: Stop rendering a line after x characters. * Defaults to 10000. * Use -1 to never stop rendering */ stopRenderingLineAfter?: number; /** * Configure the editor's hover. */ hover?: IEditorHoverOptions; /** * Enable detecting links and making them clickable. * Defaults to true. */ links?: boolean; /** * Enable inline color decorators and color picker rendering. */ colorDecorators?: boolean; /** * Controls what is the condition to spawn a color picker from a color dectorator */ colorDecoratorsActivatedOn?: 'clickAndHover' | 'click' | 'hover'; /** * Controls the max number of color decorators that can be rendered in an editor at once. */ colorDecoratorsLimit?: number; /** * Control the behaviour of comments in the editor. */ comments?: IEditorCommentsOptions; /** * Enable custom contextmenu. * Defaults to true. */ contextmenu?: boolean; /** * A multiplier to be used on the `deltaX` and `deltaY` of mouse wheel scroll events. * Defaults to 1. */ mouseWheelScrollSensitivity?: number; /** * FastScrolling mulitplier speed when pressing `Alt` * Defaults to 5. */ fastScrollSensitivity?: number; /** * Enable that the editor scrolls only the predominant axis. Prevents horizontal drift when scrolling vertically on a trackpad. * Defaults to true. */ scrollPredominantAxis?: boolean; /** * Make scrolling inertial - mostly useful with touchpad on linux. */ inertialScroll?: boolean; /** * Enable that the selection with the mouse and keys is doing column selection. * Defaults to false. */ columnSelection?: boolean; /** * The modifier to be used to add multiple cursors with the mouse. * Defaults to 'alt' */ multiCursorModifier?: 'ctrlCmd' | 'alt'; /** * Merge overlapping selections. * Defaults to true */ multiCursorMergeOverlapping?: boolean; /** * Configure the behaviour when pasting a text with the line count equal to the cursor count. * Defaults to 'spread'. */ multiCursorPaste?: 'spread' | 'full'; /** * Controls the max number of text cursors that can be in an active editor at once. */ multiCursorLimit?: number; /** * Configure the editor's accessibility support. * Defaults to 'auto'. It is best to leave this to 'auto'. */ accessibilitySupport?: 'auto' | 'off' | 'on'; /** * Controls the number of lines in the editor that can be read out by a screen reader */ accessibilityPageSize?: number; /** * Suggest options. */ suggest?: ISuggestOptions; inlineSuggest?: IInlineSuggestOptions; /** * Smart select options. */ smartSelect?: ISmartSelectOptions; /** * */ gotoLocation?: IGotoLocationOptions; /** * Enable quick suggestions (shadow suggestions) * Defaults to true. */ quickSuggestions?: boolean | IQuickSuggestionsOptions; /** * Quick suggestions show delay (in ms) * Defaults to 10 (ms) */ quickSuggestionsDelay?: number; /** * Controls the spacing around the editor. */ padding?: IEditorPaddingOptions; /** * Parameter hint options. */ parameterHints?: IEditorParameterHintOptions; /** * Options for auto closing brackets. * Defaults to language defined behavior. */ autoClosingBrackets?: EditorAutoClosingStrategy; /** * Options for auto closing comments. * Defaults to language defined behavior. */ autoClosingComments?: EditorAutoClosingStrategy; /** * Options for auto closing quotes. * Defaults to language defined behavior. */ autoClosingQuotes?: EditorAutoClosingStrategy; /** * Options for pressing backspace near quotes or bracket pairs. */ autoClosingDelete?: EditorAutoClosingEditStrategy; /** * Options for typing over closing quotes or brackets. */ autoClosingOvertype?: EditorAutoClosingEditStrategy; /** * Options for auto surrounding. * Defaults to always allowing auto surrounding. */ autoSurround?: EditorAutoSurroundStrategy; /** * Controls whether the editor should automatically adjust the indentation when users type, paste, move or indent lines. * Defaults to advanced. */ autoIndent?: 'none' | 'keep' | 'brackets' | 'advanced' | 'full'; /** * Boolean which controls whether to autoindent on paste */ autoIndentOnPaste?: boolean; /** * Boolean which controls whether to autoindent on paste within a string when autoIndentOnPaste is enabled. */ autoIndentOnPasteWithinString?: boolean; /** * Emulate selection behaviour of tab characters when using spaces for indentation. * This means selection will stick to tab stops. */ stickyTabStops?: boolean; /** * Enable format on type. * Defaults to false. */ formatOnType?: boolean; /** * Enable format on paste. * Defaults to false. */ formatOnPaste?: boolean; /** * Controls if the editor should allow to move selections via drag and drop. * Defaults to false. */ dragAndDrop?: boolean; /** * Enable the suggestion box to pop-up on trigger characters. * Defaults to true. */ suggestOnTriggerCharacters?: boolean; /** * Accept suggestions on ENTER. * Defaults to 'on'. */ acceptSuggestionOnEnter?: 'on' | 'smart' | 'off'; /** * Accept suggestions on provider defined characters. * Defaults to true. */ acceptSuggestionOnCommitCharacter?: boolean; /** * Enable snippet suggestions. Default to 'true'. */ snippetSuggestions?: 'top' | 'bottom' | 'inline' | 'none'; /** * Copying without a selection copies the current line. */ emptySelectionClipboard?: boolean; /** * Syntax highlighting is copied. */ copyWithSyntaxHighlighting?: boolean; /** * The history mode for suggestions. */ suggestSelection?: 'first' | 'recentlyUsed' | 'recentlyUsedByPrefix'; /** * The font size for the suggest widget. * Defaults to the editor font size. */ suggestFontSize?: number; /** * The line height for the suggest widget. * Defaults to the editor line height. */ suggestLineHeight?: number; /** * Enable tab completion. */ tabCompletion?: 'on' | 'off' | 'onlySnippets'; /** * Enable selection highlight. * Defaults to true. */ selectionHighlight?: boolean; /** * Enable selection highlight for multiline selections. * Defaults to false. */ selectionHighlightMultiline?: boolean; /** * Maximum length (in characters) for selection highlights. * Set to 0 to have an unlimited length. */ selectionHighlightMaxLength?: number; /** * Enable semantic occurrences highlight. * Defaults to 'singleFile'. * 'off' disables occurrence highlighting * 'singleFile' triggers occurrence highlighting in the current document * 'multiFile' triggers occurrence highlighting across valid open documents */ occurrencesHighlight?: 'off' | 'singleFile' | 'multiFile'; /** * Controls delay for occurrences highlighting * Defaults to 250. * Minimum value is 0 * Maximum value is 2000 */ occurrencesHighlightDelay?: number; /** * Show code lens * Defaults to true. */ codeLens?: boolean; /** * Code lens font family. Defaults to editor font family. */ codeLensFontFamily?: string; /** * Code lens font size. Default to 90% of the editor font size */ codeLensFontSize?: number; /** * Control the behavior and rendering of the code action lightbulb. */ lightbulb?: IEditorLightbulbOptions; /** * Timeout for running code actions on save. */ codeActionsOnSaveTimeout?: number; /** * Enable code folding. * Defaults to true. */ folding?: boolean; /** * Selects the folding strategy. 'auto' uses the strategies contributed for the current document, 'indentation' uses the indentation based folding strategy. * Defaults to 'auto'. */ foldingStrategy?: 'auto' | 'indentation'; /** * Enable highlight for folded regions. * Defaults to true. */ foldingHighlight?: boolean; /** * Auto fold imports folding regions. * Defaults to true. */ foldingImportsByDefault?: boolean; /** * Maximum number of foldable regions. * Defaults to 5000. */ foldingMaximumRegions?: number; /** * Controls whether the fold actions in the gutter stay always visible or hide unless the mouse is over the gutter. * Defaults to 'mouseover'. */ showFoldingControls?: 'always' | 'never' | 'mouseover'; /** * Controls whether clicking on the empty content after a folded line will unfold the line. * Defaults to false. */ unfoldOnClickAfterEndOfLine?: boolean; /** * Enable highlighting of matching brackets. * Defaults to 'always'. */ matchBrackets?: 'never' | 'near' | 'always'; /** * Enable experimental rendering using WebGPU. * Defaults to 'off'. */ experimentalGpuAcceleration?: 'on' | 'off'; /** * Enable experimental whitespace rendering. * Defaults to 'svg'. */ experimentalWhitespaceRendering?: 'svg' | 'font' | 'off'; /** * Enable rendering of whitespace. * Defaults to 'selection'. */ renderWhitespace?: 'none' | 'boundary' | 'selection' | 'trailing' | 'all'; /** * Enable rendering of control characters. * Defaults to true. */ renderControlCharacters?: boolean; /** * Enable rendering of current line highlight. * Defaults to all. */ renderLineHighlight?: 'none' | 'gutter' | 'line' | 'all'; /** * Control if the current line highlight should be rendered only the editor is focused. * Defaults to false. */ renderLineHighlightOnlyWhenFocus?: boolean; /** * Inserting and deleting whitespace follows tab stops. */ useTabStops?: boolean; /** * Controls whether the editor should automatically remove indentation whitespace when joining lines with Delete. * Defaults to false. */ trimWhitespaceOnDelete?: boolean; /** * The font family */ fontFamily?: string; /** * The font weight */ fontWeight?: string; /** * The font size */ fontSize?: number; /** * The line height */ lineHeight?: number; /** * The letter spacing */ letterSpacing?: number; /** * Controls fading out of unused variables. */ showUnused?: boolean; /** * Controls whether to focus the inline editor in the peek widget by default. * Defaults to false. */ peekWidgetDefaultFocus?: 'tree' | 'editor'; /** * Sets a placeholder for the editor. * If set, the placeholder is shown if the editor is empty. */ placeholder?: string | undefined; /** * Controls whether the definition link opens element in the peek widget. * Defaults to false. */ definitionLinkOpensInPeek?: boolean; /** * Controls strikethrough deprecated variables. */ showDeprecated?: boolean; /** * Controls whether suggestions allow matches in the middle of the word instead of only at the beginning */ matchOnWordStartOnly?: boolean; /** * Control the behavior and rendering of the inline hints. */ inlayHints?: IEditorInlayHintsOptions; /** * Control if the editor should use shadow DOM. */ useShadowDOM?: boolean; /** * Controls the behavior of editor guides. */ guides?: IGuidesOptions; /** * Controls the behavior of the unicode highlight feature * (by default, ambiguous and invisible characters are highlighted). */ unicodeHighlight?: IUnicodeHighlightOptions; /** * Configures bracket pair colorization (disabled by default). */ bracketPairColorization?: IBracketPairColorizationOptions; /** * Controls dropping into the editor from an external source. * * When enabled, this shows a preview of the drop location and triggers an `onDropIntoEditor` event. */ dropIntoEditor?: IDropIntoEditorOptions; /** * Sets whether the new experimental edit context should be used instead of the text area. */ editContext?: boolean; /** * Controls whether to render rich HTML screen reader content when the EditContext is enabled */ renderRichScreenReaderContent?: boolean; /** * Controls support for changing how content is pasted into the editor. */ pasteAs?: IPasteAsOptions; /** * Controls whether the editor / terminal receives tabs or defers them to the workbench for navigation. */ tabFocusMode?: boolean; /** * Controls whether the accessibility hint should be provided to screen reader users when an inline completion is shown. */ inlineCompletionsAccessibilityVerbose?: boolean; } export interface IDiffEditorBaseOptions { /** * Allow the user to resize the diff editor split view. * Defaults to true. */ enableSplitViewResizing?: boolean; /** * The default ratio when rendering side-by-side editors. * Must be a number between 0 and 1, min sizes apply. * Defaults to 0.5 */ splitViewDefaultRatio?: number; /** * Render the differences in two side-by-side editors. * Defaults to true. */ renderSideBySide?: boolean; /** * When `renderSideBySide` is enabled, `useInlineViewWhenSpaceIsLimited` is set, * and the diff editor has a width less than `renderSideBySideInlineBreakpoint`, the inline view is used. */ renderSideBySideInlineBreakpoint?: number | undefined; /** * When `renderSideBySide` is enabled, `useInlineViewWhenSpaceIsLimited` is set, * and the diff editor has a width less than `renderSideBySideInlineBreakpoint`, the inline view is used. */ useInlineViewWhenSpaceIsLimited?: boolean; /** * If set, the diff editor is optimized for small views. * Defaults to `false`. */ compactMode?: boolean; /** * Timeout in milliseconds after which diff computation is cancelled. * Defaults to 5000. */ maxComputationTime?: number; /** * Maximum supported file size in MB. * Defaults to 50. */ maxFileSize?: number; /** * Compute the diff by ignoring leading/trailing whitespace * Defaults to true. */ ignoreTrimWhitespace?: boolean; /** * Render +/- indicators for added/deleted changes. * Defaults to true. */ renderIndicators?: boolean; /** * Shows icons in the glyph margin to revert changes. * Default to true. */ renderMarginRevertIcon?: boolean; /** * Indicates if the gutter menu should be rendered. */ renderGutterMenu?: boolean; /** * Original model should be editable? * Defaults to false. */ originalEditable?: boolean; /** * Should the diff editor enable code lens? * Defaults to false. */ diffCodeLens?: boolean; /** * Is the diff editor should render overview ruler * Defaults to true */ renderOverviewRuler?: boolean; /** * Control the wrapping of the diff editor. */ diffWordWrap?: 'off' | 'on' | 'inherit'; /** * Diff Algorithm */ diffAlgorithm?: 'legacy' | 'advanced'; /** * Whether the diff editor aria label should be verbose. */ accessibilityVerbose?: boolean; experimental?: { /** * Defaults to false. */ showMoves?: boolean; showEmptyDecorations?: boolean; /** * Only applies when `renderSideBySide` is set to false. */ useTrueInlineView?: boolean; }; /** * Is the diff editor inside another editor * Defaults to false */ isInEmbeddedEditor?: boolean; /** * If the diff editor should only show the difference review mode. */ onlyShowAccessibleDiffViewer?: boolean; hideUnchangedRegions?: { enabled?: boolean; revealLineCount?: number; minimumLineCount?: number; contextLineCount?: number; }; } /** * Configuration options for the diff editor. */ export interface IDiffEditorOptions extends IEditorOptions, IDiffEditorBaseOptions { } /** * An event describing that the configuration of the editor has changed. */ export class ConfigurationChangedEvent { hasChanged(id: EditorOption): boolean; } /** * All computed editor options. */ export interface IComputedEditorOptions { get(id: T): FindComputedEditorOptionValueById; } export interface IEditorOption { readonly id: K; readonly name: string; defaultValue: V; /** * Might modify `value`. */ applyUpdate(value: V | undefined, update: V): ApplyUpdateResult; } export class ApplyUpdateResult { readonly newValue: T; readonly didChange: boolean; constructor(newValue: T, didChange: boolean); } /** * Configuration options for editor comments */ export interface IEditorCommentsOptions { /** * Insert a space after the line comment token and inside the block comments tokens. * Defaults to true. */ insertSpace?: boolean; /** * Ignore empty lines when inserting line comments. * Defaults to true. */ ignoreEmptyLines?: boolean; } /** * The kind of animation in which the editor's cursor should be rendered. */ export enum TextEditorCursorBlinkingStyle { /** * Hidden */ Hidden = 0, /** * Blinking */ Blink = 1, /** * Blinking with smooth fading */ Smooth = 2, /** * Blinking with prolonged filled state and smooth fading */ Phase = 3, /** * Expand collapse animation on the y axis */ Expand = 4, /** * No-Blinking */ Solid = 5 } /** * The style in which the editor's cursor should be rendered. */ export enum TextEditorCursorStyle { /** * As a vertical line (sitting between two characters). */ Line = 1, /** * As a block (sitting on top of a character). */ Block = 2, /** * As a horizontal line (sitting under a character). */ Underline = 3, /** * As a thin vertical line (sitting between two characters). */ LineThin = 4, /** * As an outlined block (sitting on top of a character). */ BlockOutline = 5, /** * As a thin horizontal line (sitting under a character). */ UnderlineThin = 6 } /** * Configuration options for editor find widget */ export interface IEditorFindOptions { /** * Controls whether the cursor should move to find matches while typing. */ cursorMoveOnType?: boolean; /** * Controls whether the find widget should search as you type. */ findOnType?: boolean; /** * Controls if we seed search string in the Find Widget with editor selection. */ seedSearchStringFromSelection?: 'never' | 'always' | 'selection'; /** * Controls if Find in Selection flag is turned on in the editor. */ autoFindInSelection?: 'never' | 'always' | 'multiline'; addExtraSpaceOnTop?: boolean; /** * Controls whether the search result and diff result automatically restarts from the beginning (or the end) when no further matches can be found */ loop?: boolean; } export type GoToLocationValues = 'peek' | 'gotoAndPeek' | 'goto'; /** * Configuration options for go to location */ export interface IGotoLocationOptions { multiple?: GoToLocationValues; multipleDefinitions?: GoToLocationValues; multipleTypeDefinitions?: GoToLocationValues; multipleDeclarations?: GoToLocationValues; multipleImplementations?: GoToLocationValues; multipleReferences?: GoToLocationValues; multipleTests?: GoToLocationValues; alternativeDefinitionCommand?: string; alternativeTypeDefinitionCommand?: string; alternativeDeclarationCommand?: string; alternativeImplementationCommand?: string; alternativeReferenceCommand?: string; alternativeTestsCommand?: string; } /** * Configuration options for editor hover */ export interface IEditorHoverOptions { /** * Enable the hover. * Defaults to true. */ enabled?: boolean; /** * Delay for showing the hover. * Defaults to 300. */ delay?: number; /** * Is the hover sticky such that it can be clicked and its contents selected? * Defaults to true. */ sticky?: boolean; /** * Controls how long the hover is visible after you hovered out of it. * Require sticky setting to be true. */ hidingDelay?: number; /** * Should the hover be shown above the line if possible? * Defaults to false. */ above?: boolean; } /** * A description for the overview ruler position. */ export interface OverviewRulerPosition { /** * Width of the overview ruler */ readonly width: number; /** * Height of the overview ruler */ readonly height: number; /** * Top position for the overview ruler */ readonly top: number; /** * Right position for the overview ruler */ readonly right: number; } export enum RenderMinimap { None = 0, Text = 1, Blocks = 2 } /** * The internal layout details of the editor. */ export interface EditorLayoutInfo { /** * Full editor width. */ readonly width: number; /** * Full editor height. */ readonly height: number; /** * Left position for the glyph margin. */ readonly glyphMarginLeft: number; /** * The width of the glyph margin. */ readonly glyphMarginWidth: number; /** * The number of decoration lanes to render in the glyph margin. */ readonly glyphMarginDecorationLaneCount: number; /** * Left position for the line numbers. */ readonly lineNumbersLeft: number; /** * The width of the line numbers. */ readonly lineNumbersWidth: number; /** * Left position for the line decorations. */ readonly decorationsLeft: number; /** * The width of the line decorations. */ readonly decorationsWidth: number; /** * Left position for the content (actual text) */ readonly contentLeft: number; /** * The width of the content (actual text) */ readonly contentWidth: number; /** * Layout information for the minimap */ readonly minimap: EditorMinimapLayoutInfo; /** * The number of columns (of typical characters) fitting on a viewport line. */ readonly viewportColumn: number; readonly isWordWrapMinified: boolean; readonly isViewportWrapping: boolean; readonly wrappingColumn: number; /** * The width of the vertical scrollbar. */ readonly verticalScrollbarWidth: number; /** * The height of the horizontal scrollbar. */ readonly horizontalScrollbarHeight: number; /** * The position of the overview ruler. */ readonly overviewRuler: OverviewRulerPosition; } /** * The internal layout details of the editor. */ export interface EditorMinimapLayoutInfo { readonly renderMinimap: RenderMinimap; readonly minimapLeft: number; readonly minimapWidth: number; readonly minimapHeightIsEditorHeight: boolean; readonly minimapIsSampling: boolean; readonly minimapScale: number; readonly minimapLineHeight: number; readonly minimapCanvasInnerWidth: number; readonly minimapCanvasInnerHeight: number; readonly minimapCanvasOuterWidth: number; readonly minimapCanvasOuterHeight: number; } export enum ShowLightbulbIconMode { Off = 'off', OnCode = 'onCode', On = 'on' } /** * Configuration options for editor lightbulb */ export interface IEditorLightbulbOptions { /** * Enable the lightbulb code action. * The three possible values are `off`, `on` and `onCode` and the default is `onCode`. * `off` disables the code action menu. * `on` shows the code action menu on code and on empty lines. * `onCode` shows the code action menu on code only. */ enabled?: ShowLightbulbIconMode; } export interface IEditorStickyScrollOptions { /** * Enable the sticky scroll */ enabled?: boolean; /** * Maximum number of sticky lines to show */ maxLineCount?: number; /** * Model to choose for sticky scroll by default */ defaultModel?: 'outlineModel' | 'foldingProviderModel' | 'indentationModel'; /** * Define whether to scroll sticky scroll with editor horizontal scrollbae */ scrollWithEditor?: boolean; } /** * Configuration options for editor inlayHints */ export interface IEditorInlayHintsOptions { /** * Enable the inline hints. * Defaults to true. */ enabled?: 'on' | 'off' | 'offUnlessPressed' | 'onUnlessPressed'; /** * Font size of inline hints. * Default to 90% of the editor font size. */ fontSize?: number; /** * Font family of inline hints. * Defaults to editor font family. */ fontFamily?: string; /** * Enables the padding around the inlay hint. * Defaults to false. */ padding?: boolean; /** * Maximum length for inlay hints per line * Set to 0 to have an unlimited length. */ maximumLength?: number; } /** * Configuration options for editor minimap */ export interface IEditorMinimapOptions { /** * Enable the rendering of the minimap. * Defaults to true. */ enabled?: boolean; /** * Control the rendering of minimap. */ autohide?: 'none' | 'mouseover' | 'scroll'; /** * Control the side of the minimap in editor. * Defaults to 'right'. */ side?: 'right' | 'left'; /** * Control the minimap rendering mode. * Defaults to 'actual'. */ size?: 'proportional' | 'fill' | 'fit'; /** * Control the rendering of the minimap slider. * Defaults to 'mouseover'. */ showSlider?: 'always' | 'mouseover'; /** * Render the actual text on a line (as opposed to color blocks). * Defaults to true. */ renderCharacters?: boolean; /** * Limit the width of the minimap to render at most a certain number of columns. * Defaults to 120. */ maxColumn?: number; /** * Relative size of the font in the minimap. Defaults to 1. */ scale?: number; /** * Whether to show named regions as section headers. Defaults to true. */ showRegionSectionHeaders?: boolean; /** * Whether to show MARK: comments as section headers. Defaults to true. */ showMarkSectionHeaders?: boolean; /** * When specified, is used to create a custom section header parser regexp. * Must contain a match group named 'label' (written as (?