Pārlūkot izejas kodu

Load .d.ts in playground

Alex Dima 9 gadi atpakaļ
vecāks
revīzija
5cee62a7c0
3 mainītis faili ar 4847 papildinājumiem un 22 dzēšanām
  1. 2 0
      gulpfile.js
  2. 48 22
      website/playground/playground.js
  3. 4797 0
      website/playground/samples/editor.d.ts.txt

+ 2 - 0
gulpfile.js

@@ -145,6 +145,8 @@ function addPluginDTS() {
 
 		contents += '\n' + extraContent.join('\n');
 		data.contents = new Buffer(contents);
+
+		fs.writeFileSync('website/playground/samples/editor.d.ts.txt', contents);
 		this.emit('data', data);
 	});
 }

+ 48 - 22
website/playground/playground.js

@@ -1,30 +1,27 @@
+/// <reference path="../../release/monaco.d.ts" />
+
 (function() {
 
 'use strict';
 
 window.onload = function() {
-	require(['require', 'vs/editor/editor.main'], function(require) {
-
-		// require(['vs/languages/typescript/common/typescript'], function() {
-		// 	var mode = require('vs/languages/typescript/common/typescript');
-		// 	var winjs = require('vs/base/common/winjs.base');
-		// 	winjs.xhr({ url: 'playground/samples/editor.d.ts.txt' }).then(function(response) {
-		// 		mode.javaScriptDefaults.addExtraLib(response.responseText, 'editor.d.ts');
-		// 		mode.javaScriptDefaults.addExtraLib([
-		// 			'declare var require: {',
-		// 			'	toUrl(path: string): string;',
-		// 			'	(moduleName: string): any;',
-		// 			'	(dependencies: string[], callback: (...args: any[]) => any, errorback?: (err: any) => void): any;',
-		// 			'	config(data: any): any;',
-		// 			'	onError: Function;',
-		// 			'};',
-		// 		].join('\n'), 'require.d.ts');
-
-				var loading = document.getElementById('loading');
-				loading.parentNode.removeChild(loading);
-				load();
-		// 	});
-		// });
+	require(['vs/editor/editor.main'], function() {
+		xhr('playground/samples/editor.d.ts.txt').then(function(response) {
+			monaco.languages.typescript.javascriptDefaults.addExtraLib(response.responseText, 'editor.d.ts');
+			monaco.languages.typescript.javascriptDefaults.addExtraLib([
+				'declare var require: {',
+				'	toUrl(path: string): string;',
+				'	(moduleName: string): any;',
+				'	(dependencies: string[], callback: (...args: any[]) => any, errorback?: (err: any) => void): any;',
+				'	config(data: any): any;',
+				'	onError: Function;',
+				'};',
+			].join('\n'), 'require.d.ts');
+
+			var loading = document.getElementById('loading');
+			loading.parentNode.removeChild(loading);
+			load();
+		});
 	});
 };
 
@@ -311,4 +308,33 @@ function doRun(runContainer) {
 	});
 }
 
+function xhr(url) {
+	var req = null;
+	return new monaco.Promise(function(c,e,p) {
+		req = new XMLHttpRequest();
+		req.onreadystatechange = function () {
+			if (req._canceled) { return; }
+
+			if (req.readyState === 4) {
+				if ((req.status >= 200 && req.status < 300) || req.status === 1223) {
+					c(req);
+				} else {
+					e(req);
+				}
+				req.onreadystatechange = function () { };
+			} else {
+				p(req);
+			}
+		};
+
+		req.open("GET", url, true );
+		req.responseType = "";
+
+		req.send(null);
+	}, function () {
+		req._canceled = true;
+		req.abort();
+	});
+}
+
 })();

+ 4797 - 0
website/playground/samples/editor.d.ts.txt

@@ -0,0 +1,4797 @@
+declare module monaco {
+
+    interface Thenable<R> {
+        /**
+         * Attaches callbacks for the resolution and/or rejection of the Promise.
+         * @param onfulfilled The callback to execute when the Promise is resolved.
+         * @param onrejected The callback to execute when the Promise is rejected.
+         * @returns A Promise for the completion of which ever callback is executed.
+         */
+        then<TResult>(onfulfilled?: (value: R) => TResult | Thenable<TResult>, onrejected?: (reason: any) => TResult | Thenable<TResult>): Thenable<TResult>;
+        then<TResult>(onfulfilled?: (value: R) => TResult | Thenable<TResult>, onrejected?: (reason: any) => void): Thenable<TResult>;
+    }
+
+    export interface IDisposable {
+        dispose(): void;
+    }
+
+    export interface IEvent<T> {
+        (listener: (e: T) => any, thisArg?: any): IDisposable;
+    }
+
+    /**
+     * A helper that allows to emit and listen to typed events
+     */
+    export class Emitter<T> {
+        constructor();
+        event: IEvent<T>;
+        fire(event?: T): void;
+        dispose(): void;
+    }
+
+    export enum Severity {
+        Ignore = 0,
+        Info = 1,
+        Warning = 2,
+        Error = 3,
+    }
+
+
+
+    /**
+     * The value callback to complete a promise
+     */
+    export interface TValueCallback<T> {
+        (value: T): void;
+    }
+
+
+    export interface ProgressCallback {
+        (progress: any): any;
+    }
+
+
+    /**
+     * A Promise implementation that supports progress and cancelation.
+     */
+    export class Promise<V> {
+
+        constructor(init: (complete: TValueCallback<V>, error: (err: any) => void, progress: ProgressCallback) => void, oncancel?: any);
+
+        public then<U>(success?: (value: V) => Promise<U>, error?: (err: any) => Promise<U>, progress?: ProgressCallback): Promise<U>;
+        public then<U>(success?: (value: V) => Promise<U>, error?: (err: any) => Promise<U> | U, progress?: ProgressCallback): Promise<U>;
+        public then<U>(success?: (value: V) => Promise<U>, error?: (err: any) => U, progress?: ProgressCallback): Promise<U>;
+        public then<U>(success?: (value: V) => Promise<U>, error?: (err: any) => void, progress?: ProgressCallback): Promise<U>;
+        public then<U>(success?: (value: V) => Promise<U> | U, error?: (err: any) => Promise<U>, progress?: ProgressCallback): Promise<U>;
+        public then<U>(success?: (value: V) => Promise<U> | U, error?: (err: any) => Promise<U> | U, progress?: ProgressCallback): Promise<U>;
+        public then<U>(success?: (value: V) => Promise<U> | U, error?: (err: any) => U, progress?: ProgressCallback): Promise<U>;
+        public then<U>(success?: (value: V) => Promise<U> | U, error?: (err: any) => void, progress?: ProgressCallback): Promise<U>;
+        public then<U>(success?: (value: V) => U, error?: (err: any) => Promise<U>, progress?: ProgressCallback): Promise<U>;
+        public then<U>(success?: (value: V) => U, error?: (err: any) => Promise<U> | U, progress?: ProgressCallback): Promise<U>;
+        public then<U>(success?: (value: V) => U, error?: (err: any) => U, progress?: ProgressCallback): Promise<U>;
+        public then<U>(success?: (value: V) => U, error?: (err: any) => void, progress?: ProgressCallback): Promise<U>;
+
+        public done(success?: (value: V) => void, error?: (err: any) => any, progress?: ProgressCallback): void;
+        public cancel(): void;
+
+        public static as<ValueType>(value: ValueType): Promise<ValueType>;
+        public static is(value: any): value is Promise<any>;
+        public static timeout(delay: number): Promise<void>;
+        public static join<ValueType>(promises: Promise<ValueType>[]): Promise<ValueType[]>;
+        public static join<ValueType>(promises: Thenable<ValueType>[]): Thenable<ValueType[]>;
+        public static join<ValueType>(promises: { [n: string]: Promise<ValueType> }): Promise<{ [n: string]: ValueType }>;
+        public static any<ValueType>(promises: Promise<ValueType>[]): Promise<{ key: string; value: Promise<ValueType>; }>;
+        public static wrapError<ValueType>(error: any): Promise<ValueType>;
+    }
+
+    export class CancellationTokenSource {
+        token: CancellationToken;
+        cancel(): void;
+        dispose(): void;
+    }
+
+    export interface CancellationToken {
+        isCancellationRequested: boolean;
+        onCancellationRequested: IEvent<any>;
+    }
+    /**
+     * Uniform Resource Identifier (Uri) http://tools.ietf.org/html/rfc3986.
+     * This class is a simple parser which creates the basic component paths
+     * (http://tools.ietf.org/html/rfc3986#section-3) with minimal validation
+     * and encoding.
+     *
+     *       foo://example.com:8042/over/there?name=ferret#nose
+     *       \_/   \______________/\_________/ \_________/ \__/
+     *        |           |            |            |        |
+     *     scheme     authority       path        query   fragment
+     *        |   _____________________|__
+     *       / \ /                        \
+     *       urn:example:animal:ferret:nose
+     *
+     *
+     */
+    export class Uri {
+        constructor();
+        /**
+         * scheme is the 'http' part of 'http://www.msft.com/some/path?query#fragment'.
+         * The part before the first colon.
+         */
+        scheme: string;
+        /**
+         * authority is the 'www.msft.com' part of 'http://www.msft.com/some/path?query#fragment'.
+         * The part between the first double slashes and the next slash.
+         */
+        authority: string;
+        /**
+         * path is the '/some/path' part of 'http://www.msft.com/some/path?query#fragment'.
+         */
+        path: string;
+        /**
+         * query is the 'query' part of 'http://www.msft.com/some/path?query#fragment'.
+         */
+        query: string;
+        /**
+         * fragment is the 'fragment' part of 'http://www.msft.com/some/path?query#fragment'.
+         */
+        fragment: string;
+        /**
+         * Returns a string representing the corresponding file system path of this Uri.
+         * Will handle UNC paths and normalize windows drive letters to lower-case. Also
+         * 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.
+         */
+        fsPath: string;
+        with(change: {
+            scheme?: string;
+            authority?: string;
+            path?: string;
+            query?: string;
+            fragment?: string;
+        }): Uri;
+        static parse(value: string): Uri;
+        static file(path: string): Uri;
+        static from(components: {
+            scheme?: string;
+            authority?: string;
+            path?: string;
+            query?: string;
+            fragment?: string;
+        }): Uri;
+        /**
+         *
+         * @param skipEncoding Do not encode the result, default is `false`
+         */
+        toString(skipEncoding?: boolean): string;
+        toJSON(): any;
+        static revive(data: any): Uri;
+    }
+
+    /**
+     * 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 {
+        /**
+         * 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,
+        KEY_0 = 21,
+        KEY_1 = 22,
+        KEY_2 = 23,
+        KEY_3 = 24,
+        KEY_4 = 25,
+        KEY_5 = 26,
+        KEY_6 = 27,
+        KEY_7 = 28,
+        KEY_8 = 29,
+        KEY_9 = 30,
+        KEY_A = 31,
+        KEY_B = 32,
+        KEY_C = 33,
+        KEY_D = 34,
+        KEY_E = 35,
+        KEY_F = 36,
+        KEY_G = 37,
+        KEY_H = 38,
+        KEY_I = 39,
+        KEY_J = 40,
+        KEY_K = 41,
+        KEY_L = 42,
+        KEY_M = 43,
+        KEY_N = 44,
+        KEY_O = 45,
+        KEY_P = 46,
+        KEY_Q = 47,
+        KEY_R = 48,
+        KEY_S = 49,
+        KEY_T = 50,
+        KEY_U = 51,
+        KEY_V = 52,
+        KEY_W = 53,
+        KEY_X = 54,
+        KEY_Y = 55,
+        KEY_Z = 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,
+        NumLock = 78,
+        ScrollLock = 79,
+        /**
+         * Used for miscellaneous characters; it can vary by keyboard.
+         * For the US standard keyboard, the ';:' key
+         */
+        US_SEMICOLON = 80,
+        /**
+         * For any country/region, the '+' key
+         * For the US standard keyboard, the '=+' key
+         */
+        US_EQUAL = 81,
+        /**
+         * For any country/region, the ',' key
+         * For the US standard keyboard, the ',<' key
+         */
+        US_COMMA = 82,
+        /**
+         * For any country/region, the '-' key
+         * For the US standard keyboard, the '-_' key
+         */
+        US_MINUS = 83,
+        /**
+         * For any country/region, the '.' key
+         * For the US standard keyboard, the '.>' key
+         */
+        US_DOT = 84,
+        /**
+         * Used for miscellaneous characters; it can vary by keyboard.
+         * For the US standard keyboard, the '/?' key
+         */
+        US_SLASH = 85,
+        /**
+         * Used for miscellaneous characters; it can vary by keyboard.
+         * For the US standard keyboard, the '`~' key
+         */
+        US_BACKTICK = 86,
+        /**
+         * Used for miscellaneous characters; it can vary by keyboard.
+         * For the US standard keyboard, the '[{' key
+         */
+        US_OPEN_SQUARE_BRACKET = 87,
+        /**
+         * Used for miscellaneous characters; it can vary by keyboard.
+         * For the US standard keyboard, the '\|' key
+         */
+        US_BACKSLASH = 88,
+        /**
+         * Used for miscellaneous characters; it can vary by keyboard.
+         * For the US standard keyboard, the ']}' key
+         */
+        US_CLOSE_SQUARE_BRACKET = 89,
+        /**
+         * Used for miscellaneous characters; it can vary by keyboard.
+         * For the US standard keyboard, the ''"' key
+         */
+        US_QUOTE = 90,
+        /**
+         * Used for miscellaneous characters; it can vary by keyboard.
+         */
+        OEM_8 = 91,
+        /**
+         * Either the angle bracket key or the backslash key on the RT 102-key keyboard.
+         */
+        OEM_102 = 92,
+        NUMPAD_0 = 93,
+        NUMPAD_1 = 94,
+        NUMPAD_2 = 95,
+        NUMPAD_3 = 96,
+        NUMPAD_4 = 97,
+        NUMPAD_5 = 98,
+        NUMPAD_6 = 99,
+        NUMPAD_7 = 100,
+        NUMPAD_8 = 101,
+        NUMPAD_9 = 102,
+        NUMPAD_MULTIPLY = 103,
+        NUMPAD_ADD = 104,
+        NUMPAD_SEPARATOR = 105,
+        NUMPAD_SUBTRACT = 106,
+        NUMPAD_DECIMAL = 107,
+        NUMPAD_DIVIDE = 108,
+        /**
+         * Placed last to cover the length of the enum.
+         */
+        MAX_VALUE = 109,
+    }
+
+    export class KeyMod {
+        static CtrlCmd: number;
+        static Shift: number;
+        static Alt: number;
+        static WinCtrl: number;
+        static chord(firstPart: number, secondPart: number): number;
+    }
+    export interface IHTMLContentElementCode {
+        language: string;
+        value: string;
+    }
+
+    export interface IHTMLContentElement {
+        /**
+         * supports **bold**, __italics__, and [[actions]]
+         */
+        formattedText?: string;
+        text?: string;
+        className?: string;
+        style?: string;
+        customStyle?: any;
+        tagName?: string;
+        children?: IHTMLContentElement[];
+        isText?: boolean;
+        role?: string;
+        markdown?: string;
+        code?: IHTMLContentElementCode;
+    }
+
+    export interface IKeyboardEvent {
+        browserEvent: Event;
+        target: HTMLElement;
+        ctrlKey: boolean;
+        shiftKey: boolean;
+        altKey: boolean;
+        metaKey: boolean;
+        keyCode: KeyCode;
+        clone(): IKeyboardEvent;
+        asKeybinding(): number;
+        equals(keybinding: number): boolean;
+        preventDefault(): void;
+        stopPropagation(): void;
+    }
+    export interface IMouseEvent {
+        browserEvent: MouseEvent;
+        leftButton: boolean;
+        middleButton: boolean;
+        rightButton: boolean;
+        target: HTMLElement;
+        detail: number;
+        posx: number;
+        posy: number;
+        ctrlKey: boolean;
+        shiftKey: boolean;
+        altKey: boolean;
+        metaKey: boolean;
+        timestamp: number;
+        preventDefault(): void;
+        stopPropagation(): void;
+    }
+
+    export interface IScrollEvent {
+        scrollTop: number;
+        scrollLeft: number;
+        scrollWidth: number;
+        scrollHeight: number;
+        scrollTopChanged: boolean;
+        scrollLeftChanged: boolean;
+        scrollWidthChanged: boolean;
+        scrollHeightChanged: boolean;
+    }
+
+    /**
+     * A position in the editor. This interface is suitable for serialization.
+     */
+    export interface IPosition {
+        /**
+         * line number (starts at 1)
+         */
+        lineNumber: number;
+        /**
+         * column (the first character in a line is between column 1 and column 2)
+         */
+        column: number;
+    }
+
+    /**
+     * A range in the editor. This interface is suitable for serialization.
+     */
+    export interface IRange {
+        /**
+         * Line number on which the range starts (starts at 1).
+         */
+        startLineNumber: number;
+        /**
+         * Column on which the range starts in line `startLineNumber` (starts at 1).
+         */
+        startColumn: number;
+        /**
+         * Line number on which the range ends.
+         */
+        endLineNumber: number;
+        /**
+         * Column on which the range ends in line `endLineNumber`.
+         */
+        endColumn: number;
+    }
+
+    /**
+     * 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.
+         */
+        selectionStartLineNumber: number;
+        /**
+         * The column on `selectionStartLineNumber` where the selection has started.
+         */
+        selectionStartColumn: number;
+        /**
+         * The line number on which the selection has ended.
+         */
+        positionLineNumber: number;
+        /**
+         * The column on `positionLineNumber` where the selection has ended.
+         */
+        positionColumn: number;
+    }
+
+    /**
+     * A position in the editor.
+     */
+    export class Position {
+        /**
+         * line number (starts at 1)
+         */
+        lineNumber: number;
+        /**
+         * column (the first character in a line is between column 1 and column 2)
+         */
+        column: number;
+        constructor(lineNumber: number, column: number);
+        /**
+         * Test if this position equals other position
+         */
+        equals(other: IPosition): boolean;
+        /**
+         * Test if position `a` equals position `b`
+         */
+        static equals(a: IPosition, b: IPosition): 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;
+        /**
+         * 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;
+    }
+
+    /**
+     * A range in the editor. (startLineNumber,startColumn) is <= (endLineNumber,endColumn)
+     */
+    export class Range {
+        /**
+         * Line number on which the range starts (starts at 1).
+         */
+        startLineNumber: number;
+        /**
+         * Column on which the range starts in line `startLineNumber` (starts at 1).
+         */
+        startColumn: number;
+        /**
+         * Line number on which the range ends.
+         */
+        endLineNumber: number;
+        /**
+         * Column on which the range ends in line `endLineNumber`.
+         */
+        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;
+        /**
+         * 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;
+        /**
+         * A intersection of the two ranges.
+         */
+        static intersectRanges(a: IRange, b: IRange): Range;
+        /**
+         * Test if this range equals other.
+         */
+        equalsRange(other: IRange): boolean;
+        /**
+         * Test if range `a` equals `b`.
+         */
+        static equalsRange(a: IRange, b: IRange): boolean;
+        /**
+         * Return the end position (which will be after or equal to the start position)
+         */
+        getEndPosition(): Position;
+        /**
+         * Return the start position (which will be before or equal to the end position)
+         */
+        getStartPosition(): Position;
+        /**
+         * Clone this range.
+         */
+        cloneRange(): Range;
+        /**
+         * 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 `Range` from an `IRange`.
+         */
+        static lift(range: IRange): Range;
+        /**
+         * 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;
+        /**
+         * 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, b: IRange): 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;
+    }
+
+    /**
+     * 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.
+         */
+        selectionStartLineNumber: number;
+        /**
+         * The column on `selectionStartLineNumber` where the selection has started.
+         */
+        selectionStartColumn: number;
+        /**
+         * The line number on which the selection has ended.
+         */
+        positionLineNumber: number;
+        /**
+         * The column on `positionLineNumber` where the selection has ended.
+         */
+        positionColumn: number;
+        constructor(selectionStartLineNumber: number, selectionStartColumn: number, positionLineNumber: number, positionColumn: number);
+        /**
+         * Clone this selection.
+         */
+        clone(): Selection;
+        /**
+         * 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;
+        /**
+         * Create a new selection with a different `selectionStartLineNumber` and `selectionStartColumn`.
+         */
+        setStartPosition(startLineNumber: number, startColumn: number): 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,
+    }
+}
+
+declare module monaco.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: IEditorConstructionOptions, services: IEditorOverrideServices): ICodeEditor;
+
+    /**
+     * 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: IDiffEditorConstructionOptions, services: IEditorOverrideServices): IDiffEditor;
+
+    /**
+     * 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): IModel;
+
+    /**
+     * Change the language for a model.
+     */
+    export function setModelLanguage(model: IModel, language: string): void;
+
+    /**
+     * Set the markers for a model.
+     */
+    export function setModelMarkers(model: IModel, owner: string, markers: IMarkerData[]): void;
+
+    /**
+     * Get the model that has `uri` if it exists.
+     */
+    export function getModel(uri: Uri): IModel;
+
+    /**
+     * Get all the created models.
+     */
+    export function getModels(): IModel[];
+
+    /**
+     * Emitted when a model is created.
+     */
+    export function onDidCreateModel(listener: (model: IModel) => void): IDisposable;
+
+    /**
+     * Emitted right before a model is disposed.
+     */
+    export function onWillDisposeModel(listener: (model: IModel) => void): IDisposable;
+
+    /**
+     * Emitted when a different language is set to a model.
+     */
+    export function onDidChangeModelLanguage(listener: (e: {
+        model: IModel;
+        oldLanguage: string;
+    }) => void): IDisposable;
+
+    /**
+     * A web worker that can provide a proxy to an arbitrary file.
+     */
+    export interface MonacoWebWorker<T> {
+        /**
+         * Terminate the web worker, thus invalidating the returned proxy.
+         */
+        dispose(): void;
+        /**
+         * Get a proxy to the arbitrary loaded code.
+         */
+        getProxy(): Promise<T>;
+        /**
+         * Synchronize (send) the models at `resources` to the web worker,
+         * making them available in the monaco.worker.getMirrorModels().
+         */
+        withSyncedResources(resources: Uri[]): Promise<T>;
+    }
+
+    export interface IWebWorkerOptions {
+        /**
+         * The AMD moduleId to load.
+         * It should export a function `create` that should return the exported proxy.
+         */
+        moduleId: string;
+        /**
+         * The data to send over when calling create on the module.
+         */
+        createData?: any;
+    }
+
+    /**
+     * 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<T>(opts: IWebWorkerOptions): MonacoWebWorker<T>;
+
+    /**
+     * Colorize the contents of `domNode` using attribute `data-lang`.
+     */
+    export function colorizeElement(domNode: HTMLElement, options: IColorizerElementOptions): Promise<void>;
+
+    /**
+     * Colorize `text` using language `languageId`.
+     */
+    export function colorize(text: string, languageId: string, options: IColorizerOptions): Promise<string>;
+
+    /**
+     * Colorize a line in a model.
+     */
+    export function colorizeModelLine(model: IModel, lineNumber: number, tabSize?: number): string;
+
+    /**
+     * The options to create an editor.
+     */
+    export interface IEditorConstructionOptions extends ICodeEditorWidgetCreationOptions {
+        /**
+         * The initial value of the auto created model in the editor.
+         * To not create automatically a model, use `model: null`.
+         */
+        value?: string;
+        /**
+         * The initial language of the auto created model in the editor.
+         * To not create automatically a model, use `model: null`.
+         */
+        language?: string;
+    }
+
+    /**
+     * The options to create a diff editor.
+     */
+    export interface IDiffEditorConstructionOptions extends IDiffEditorOptions {
+    }
+
+    export interface IEditorOverrideServices {
+    }
+
+    /**
+     * A structure defining a problem/warning/etc.
+     */
+    export interface IMarkerData {
+        code?: string;
+        severity: Severity;
+        message: string;
+        source?: 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 IAction extends IDisposable {
+        id: string;
+        label: string;
+        tooltip: string;
+        class: string;
+        enabled: boolean;
+        checked: boolean;
+        run(event?: any): Promise<any>;
+    }
+
+    /**
+     * Configuration options for editor scrollbars
+     */
+    export interface IEditorScrollbarOptions {
+        /**
+         * The size of arrows (if displayed).
+         * Defaults to 11.
+         */
+        arrowSize?: number;
+        /**
+         * Render vertical scrollbar.
+         * Accepted values: 'auto', 'visible', 'hidden'.
+         * Defaults to 'auto'.
+         */
+        vertical?: string;
+        /**
+         * Render horizontal scrollbar.
+         * Accepted values: 'auto', 'visible', 'hidden'.
+         * Defaults to 'auto'.
+         */
+        horizontal?: string;
+        /**
+         * Cast horizontal and vertical shadows when the content is scrolled.
+         * Defaults to false.
+         */
+        useShadows?: boolean;
+        /**
+         * Render arrows at the top and bottom of the vertical scrollbar.
+         * Defaults to false.
+         */
+        verticalHasArrows?: boolean;
+        /**
+         * Render arrows at the left and right of the horizontal scrollbar.
+         * Defaults to false.
+         */
+        horizontalHasArrows?: boolean;
+        /**
+         * Listen to mouse wheel events and react to them by scrolling.
+         * Defaults to true.
+         */
+        handleMouseWheel?: boolean;
+        /**
+         * Height in pixels for the horizontal scrollbar.
+         * Defaults to 10 (px).
+         */
+        horizontalScrollbarSize?: number;
+        /**
+         * Width in pixels for the vertical scrollbar.
+         * Defaults to 10 (px).
+         */
+        verticalScrollbarSize?: number;
+        /**
+         * Width in pixels for the vertical slider.
+         * Defaults to `verticalScrollbarSize`.
+         */
+        verticalSliderSize?: number;
+        /**
+         * Height in pixels for the horizontal slider.
+         * Defaults to `horizontalScrollbarSize`.
+         */
+        horizontalSliderSize?: number;
+    }
+
+    /**
+     * Describes how to indent wrapped lines.
+     */
+    export enum WrappingIndent {
+        /**
+         * No indentation => wrapped lines begin at column 1.
+         */
+        None = 0,
+        /**
+         * Same => wrapped lines get the same indentation as the parent.
+         */
+        Same = 1,
+        /**
+         * Indent => wrapped lines get +1 indentation as the parent.
+         */
+        Indent = 2,
+    }
+
+    /**
+     * Configuration options for the editor.
+     */
+    export interface IEditorOptions {
+        /**
+         * Enable experimental screen reader support.
+         * Defaults to `true`.
+         */
+        experimentalScreenReader?: boolean;
+        /**
+         * The aria label for the editor's textarea (when it is focused).
+         */
+        ariaLabel?: string;
+        /**
+         * Render vertical lines at the specified columns.
+         * Defaults to empty array.
+         */
+        rulers?: number[];
+        /**
+         * 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 truey, line numbers will be rendered normally (equivalent of using an identity function).
+         * Otherwise, line numbers will not be rendered.
+         * Defaults to true.
+         */
+        lineNumbers?: any;
+        /**
+         * 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 false.
+         */
+        glyphMargin?: boolean;
+        /**
+         * The width reserved for line decorations (in px).
+         * Line decorations are placed between line numbers and the editor content.
+         * Defaults to 10.
+         */
+        lineDecorationsWidth?: number;
+        /**
+         * 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;
+        /**
+         * Theme to be used for rendering. Consists of two parts, the UI theme and the syntax theme,
+         * separated by a space.
+         * The current available UI themes are: 'vs' (default), 'vs-dark', 'hc-black'
+         * The syntax themes are contributed. The default is 'default-theme'
+         */
+        theme?: string;
+        /**
+         * Should the editor be read only.
+         * Defaults to false.
+         */
+        readOnly?: boolean;
+        /**
+         * Control the behavior and rendering of the scrollbars.
+         */
+        scrollbar?: IEditorScrollbarOptions;
+        /**
+         * The number of vertical lanes the overview ruler should render.
+         * Defaults to 2.
+         */
+        overviewRulerLanes?: number;
+        /**
+         * Control the cursor blinking animation.
+         * Defaults to 'blink'.
+         */
+        cursorBlinking?: string;
+        /**
+         * Control the cursor style, either 'block' or 'line'.
+         * Defaults to 'line'.
+         */
+        cursorStyle?: string;
+        /**
+         * Enable font ligatures.
+         * Defaults to false.
+         */
+        fontLigatures?: boolean;
+        /**
+         * Disable the use of `translate3d`.
+         * Defaults to false.
+         */
+        disableTranslate3d?: 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;
+        /**
+         * Enable that the editor will install an interval to check if its container dom node size has changed.
+         * Enabling this might have a severe performance impact.
+         * Defaults to false.
+         */
+        automaticLayout?: boolean;
+        /**
+         * Control the wrapping strategy of the editor.
+         * Using -1 means no wrapping whatsoever.
+         * Using 0 means viewport width wrapping (ajusts with the resizing of the editor).
+         * Using a positive number means wrapping after a fixed number of characters.
+         * Defaults to 300.
+         */
+        wrappingColumn?: number;
+        /**
+         * Control indentation of wrapped lines. Can be: 'none', 'same' or 'indent'.
+         * Defaults to 'none'.
+         */
+        wrappingIndent?: string;
+        /**
+         * Configure word wrapping characters. A break will be introduced before these characters.
+         * Defaults to '{([+'.
+         */
+        wordWrapBreakBeforeCharacters?: string;
+        /**
+         * Configure word wrapping characters. A break will be introduced after these characters.
+         * Defaults to ' \t})]?|&,;'.
+         */
+        wordWrapBreakAfterCharacters?: string;
+        /**
+         * Configure word wrapping characters. A break will be introduced after these characters only if no `wordWrapBreakBeforeCharacters` or `wordWrapBreakAfterCharacters` were found.
+         * Defaults to '.'.
+         */
+        wordWrapBreakObtrusiveCharacters?: string;
+        /**
+         * Control what pressing Tab does.
+         * If it is false, pressing Tab or Shift-Tab will be handled by the editor.
+         * If it is true, pressing Tab or Shift-Tab will move the browser focus.
+         * Defaults to false.
+         */
+        tabFocusMode?: boolean;
+        /**
+         * Performance guard: Stop rendering a line after x characters.
+         * Defaults to 10000 if wrappingColumn is -1. Defaults to -1 if wrappingColumn is >= 0.
+         * Use -1 to never stop rendering
+         */
+        stopRenderingLineAfter?: number;
+        /**
+         * Enable hover.
+         * Defaults to true.
+         */
+        hover?: boolean;
+        /**
+         * 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;
+        /**
+         * Enable quick suggestions (shaddow suggestions)
+         * Defaults to true.
+         */
+        quickSuggestions?: boolean;
+        /**
+         * Quick suggestions show delay (in ms)
+         * Defaults to 500 (ms)
+         */
+        quickSuggestionsDelay?: number;
+        /**
+         * Enables parameter hints
+         */
+        parameterHints?: boolean;
+        /**
+         * Render icons in suggestions box.
+         * Defaults to true.
+         */
+        iconsInSuggestions?: boolean;
+        /**
+         * Enable auto closing brackets.
+         * Defaults to true.
+         */
+        autoClosingBrackets?: boolean;
+        /**
+         * Enable format on type.
+         * Defaults to false.
+         */
+        formatOnType?: boolean;
+        /**
+         * Enable the suggestion box to pop-up on trigger characters.
+         * Defaults to true.
+         */
+        suggestOnTriggerCharacters?: boolean;
+        /**
+         * Accept suggestions on ENTER.
+         * Defaults to true.
+         */
+        acceptSuggestionOnEnter?: boolean;
+        /**
+         * Enable selection highlight.
+         * Defaults to true.
+         */
+        selectionHighlight?: boolean;
+        /**
+         * Show lines before classes and methods (based on outline info).
+         * Defaults to false.
+         */
+        outlineMarkers?: boolean;
+        /**
+         * Show reference infos (a.k.a. code lenses) for modes that support it
+         * Defaults to true.
+         */
+        referenceInfos?: boolean;
+        /**
+         * Enable code folding
+         * Defaults to true.
+         */
+        folding?: boolean;
+        /**
+         * Enable rendering of leading whitespace.
+         * Defaults to false.
+         */
+        renderWhitespace?: boolean;
+        /**
+         * Enable rendering of indent guides.
+         * Defaults to true.
+         */
+        indentGuides?: boolean;
+        /**
+         * Inserting and deleting whitespace follows tab stops.
+         */
+        useTabStops?: boolean;
+        /**
+         * The font family
+         */
+        fontFamily?: string;
+        /**
+         * The font size
+         */
+        fontSize?: number;
+        /**
+         * The line height
+         */
+        lineHeight?: number;
+    }
+
+    /**
+     * Configuration options for the diff editor.
+     */
+    export interface IDiffEditorOptions extends IEditorOptions {
+        /**
+         * Allow the user to resize the diff editor split view.
+         * Defaults to true.
+         */
+        enableSplitViewResizing?: boolean;
+        /**
+         * Render the differences in two side-by-side editors.
+         * Defaults to true.
+         */
+        renderSideBySide?: boolean;
+        /**
+         * Compute the diff by ignoring leading/trailing whitespace
+         * Defaults to true.
+         */
+        ignoreTrimWhitespace?: boolean;
+        /**
+         * Original model should be editable?
+         * Defaults to false.
+         */
+        originalEditable?: boolean;
+    }
+
+    export class InternalEditorScrollbarOptions {
+        _internalEditorScrollbarOptionsBrand: void;
+        arrowSize: number;
+        vertical: ScrollbarVisibility;
+        horizontal: ScrollbarVisibility;
+        useShadows: boolean;
+        verticalHasArrows: boolean;
+        horizontalHasArrows: boolean;
+        handleMouseWheel: boolean;
+        horizontalScrollbarSize: number;
+        horizontalSliderSize: number;
+        verticalScrollbarSize: number;
+        verticalSliderSize: number;
+        mouseWheelScrollSensitivity: number;
+    }
+
+    export class EditorWrappingInfo {
+        _editorWrappingInfoBrand: void;
+        isViewportWrapping: boolean;
+        wrappingColumn: number;
+        wrappingIndent: WrappingIndent;
+        wordWrapBreakBeforeCharacters: string;
+        wordWrapBreakAfterCharacters: string;
+        wordWrapBreakObtrusiveCharacters: string;
+    }
+
+    export class InternalEditorViewOptions {
+        _internalEditorViewOptionsBrand: void;
+        theme: string;
+        canUseTranslate3d: boolean;
+        experimentalScreenReader: boolean;
+        rulers: number[];
+        ariaLabel: string;
+        lineNumbers: any;
+        selectOnLineNumbers: boolean;
+        glyphMargin: boolean;
+        revealHorizontalRightPadding: number;
+        roundedSelection: boolean;
+        overviewRulerLanes: number;
+        cursorBlinking: string;
+        cursorStyle: TextEditorCursorStyle;
+        hideCursorInOverviewRuler: boolean;
+        scrollBeyondLastLine: boolean;
+        editorClassName: string;
+        stopRenderingLineAfter: number;
+        renderWhitespace: boolean;
+        indentGuides: boolean;
+        scrollbar: InternalEditorScrollbarOptions;
+    }
+
+    export interface IViewConfigurationChangedEvent {
+        theme: boolean;
+        canUseTranslate3d: boolean;
+        experimentalScreenReader: boolean;
+        rulers: boolean;
+        ariaLabel: boolean;
+        lineNumbers: boolean;
+        selectOnLineNumbers: boolean;
+        glyphMargin: boolean;
+        revealHorizontalRightPadding: boolean;
+        roundedSelection: boolean;
+        overviewRulerLanes: boolean;
+        cursorBlinking: boolean;
+        cursorStyle: boolean;
+        hideCursorInOverviewRuler: boolean;
+        scrollBeyondLastLine: boolean;
+        editorClassName: boolean;
+        stopRenderingLineAfter: boolean;
+        renderWhitespace: boolean;
+        indentGuides: boolean;
+        scrollbar: boolean;
+    }
+
+    export class EditorContribOptions {
+        selectionClipboard: boolean;
+        hover: boolean;
+        contextmenu: boolean;
+        quickSuggestions: boolean;
+        quickSuggestionsDelay: number;
+        parameterHints: boolean;
+        iconsInSuggestions: boolean;
+        formatOnType: boolean;
+        suggestOnTriggerCharacters: boolean;
+        acceptSuggestionOnEnter: boolean;
+        selectionHighlight: boolean;
+        outlineMarkers: boolean;
+        referenceInfos: boolean;
+        folding: boolean;
+    }
+
+    /**
+     * Internal configuration options (transformed or computed) for the editor.
+     */
+    export class InternalEditorOptions {
+        _internalEditorOptionsBrand: void;
+        lineHeight: number;
+        readOnly: boolean;
+        wordSeparators: string;
+        autoClosingBrackets: boolean;
+        useTabStops: boolean;
+        tabFocusMode: boolean;
+        layoutInfo: EditorLayoutInfo;
+        fontInfo: FontInfo;
+        viewInfo: InternalEditorViewOptions;
+        wrappingInfo: EditorWrappingInfo;
+        contribInfo: EditorContribOptions;
+    }
+
+    /**
+     * An event describing that the configuration of the editor has changed.
+     */
+    export interface IConfigurationChangedEvent {
+        lineHeight: boolean;
+        readOnly: boolean;
+        wordSeparators: boolean;
+        autoClosingBrackets: boolean;
+        useTabStops: boolean;
+        tabFocusMode: boolean;
+        layoutInfo: boolean;
+        fontInfo: boolean;
+        viewInfo: IViewConfigurationChangedEvent;
+        wrappingInfo: boolean;
+        contribInfo: boolean;
+    }
+
+    /**
+     * Vertical Lane in the overview ruler of the editor.
+     */
+    export enum OverviewRulerLane {
+        Left = 1,
+        Center = 2,
+        Right = 4,
+        Full = 7,
+    }
+
+    /**
+     * Options for rendering a model decoration in the overview ruler.
+     */
+    export interface IModelDecorationOverviewRulerOptions {
+        /**
+         * CSS color to render in the overview ruler.
+         * e.g.: rgba(100, 100, 100, 0.5)
+         */
+        color: string;
+        /**
+         * CSS color to render in the overview ruler.
+         * e.g.: rgba(100, 100, 100, 0.5)
+         */
+        darkColor: string;
+        /**
+         * The position in the overview ruler.
+         */
+        position: OverviewRulerLane;
+    }
+
+    /**
+     * Options for a model decoration.
+     */
+    export interface IModelDecorationOptions {
+        /**
+         * Customize the growing behaviour 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;
+        /**
+         * Message to be rendered when hovering over the decoration.
+         */
+        hoverMessage?: string;
+        /**
+         * Array of IHTMLContentElements to render as the decoration message.
+         */
+        htmlMessage?: IHTMLContentElement[];
+        /**
+         * Should the decoration expand to encompass a whole line.
+         */
+        isWholeLine?: boolean;
+        /**
+         * @deprecated : Use `overviewRuler` instead
+         */
+        showInOverviewRuler?: string;
+        /**
+         * If set, render this decoration in the overview ruler.
+         */
+        overviewRuler?: IModelDecorationOverviewRulerOptions;
+        /**
+         * If set, the decoration will be rendered in the glyph margin with this CSS class name.
+         */
+        glyphMarginClassName?: string;
+        /**
+         * If set, the decoration will be rendered in the lines decorations with this CSS class name.
+         */
+        linesDecorationsClassName?: string;
+        /**
+         * 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;
+        /**
+         * If set, the decoration will be rendered before the text with this CSS class name.
+         */
+        beforeContentClassName?: string;
+        /**
+         * If set, the decoration will be rendered after the text with this CSS class name.
+         */
+        afterContentClassName?: string;
+    }
+
+    /**
+     * 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.
+         */
+        id: string;
+        /**
+         * Identifier for a decoration's owener.
+         */
+        ownerId: number;
+        /**
+         * Range that this decoration covers.
+         */
+        range: Range;
+        /**
+         * Options associated with this decoration.
+         */
+        options: IModelDecorationOptions;
+    }
+
+    /**
+     * Word inside a model.
+     */
+    export interface IWordAtPosition {
+        /**
+         * The word.
+         */
+        word: string;
+        /**
+         * The column where the word starts.
+         */
+        startColumn: number;
+        /**
+         * The column where the word ends.
+         */
+        endColumn: number;
+    }
+
+    /**
+     * 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,
+    }
+
+    /**
+     * And identifier for a single edit operation.
+     */
+    export interface ISingleEditOperationIdentifier {
+        /**
+         * Identifier major
+         */
+        major: number;
+        /**
+         * Identifier minor
+         */
+        minor: 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: Range, text: string): 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 identifer.
+         */
+        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(): IIdentifiedSingleEditOperation[];
+        /**
+         * 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: ITokenizedModel, builder: IEditOperationBuilder): void;
+        /**
+         * Compute the cursor state after the edit operations were applied.
+         * @param model The model the commad 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: ITokenizedModel, helper: ICursorStateComputerData): Selection;
+    }
+
+    /**
+     * 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;
+        /**
+         * 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;
+    }
+
+    /**
+     * A single edit operation, that has an identifier.
+     */
+    export interface IIdentifiedSingleEditOperation {
+        /**
+         * An identifier associated with this single edit operation.
+         */
+        identifier: ISingleEditOperationIdentifier;
+        /**
+         * The range to replace. This can be empty to emulate a simple insert.
+         */
+        range: Range;
+        /**
+         * The text to replace with. This can be null to emulate a simple delete.
+         */
+        text: string;
+        /**
+         * 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;
+        /**
+         * This indicates that this operation is inserting automatic whitespace
+         * that can be removed on next model edit operation if `config.trimAutoWhitespace` is true.
+         */
+        isAutoWhitespaceEdit?: boolean;
+    }
+
+    /**
+     * 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: IIdentifiedSingleEditOperation[]): Selection[];
+    }
+
+    export interface ITextModelResolvedOptions {
+        tabSize: number;
+        insertSpaces: boolean;
+        defaultEOL: DefaultEndOfLine;
+        trimAutoWhitespace: boolean;
+    }
+
+    export interface ITextModelUpdateOptions {
+        tabSize?: number;
+        insertSpaces?: boolean;
+        trimAutoWhitespace?: boolean;
+    }
+
+    export interface IModelOptionsChangedEvent {
+        tabSize: boolean;
+        insertSpaces: boolean;
+        trimAutoWhitespace: boolean;
+    }
+
+    /**
+     * A textual read-only model.
+     */
+    export interface ITextModel {
+        getOptions(): ITextModelResolvedOptions;
+        /**
+         * 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): void;
+        /**
+         * Replace the entire text buffer value contained in this model.
+         */
+        setValueFromRawText(newValue: IRawText): 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 length of the text stored in this model.
+         */
+        getValueLength(eol?: EndOfLinePreference, preserveBOM?: boolean): number;
+        /**
+         * Get the raw text stored in this model.
+         */
+        toRawText(): IRawText;
+        /**
+         * Check if the raw text stored in this model equals another raw text.
+         */
+        equals(other: IRawText): boolean;
+        /**
+         * 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): 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 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;
+        /**
+         * Change the end of line sequence used in the text buffer.
+         */
+        setEOL(eol: EndOfLineSequence): void;
+        /**
+         * 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 offest (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 ofsset 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;
+        /**
+         * 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 iff the model was disposed or not.
+         */
+        isDisposed(): boolean;
+    }
+
+    export interface IReadOnlyModel extends ITextModel {
+        /**
+         * Gets the resource associated with this editor model.
+         */
+        uri: Uri;
+        /**
+         * Get the language associated with this model.
+         */
+        getModeId(): string;
+        /**
+         * Get the word under or besides `position`.
+         * @param position The position to look for a word.
+         * @param skipSyntaxTokens Ignore syntax tokens, as identified by the mode.
+         * @return The word under or besides `position`. Might be null.
+         */
+        getWordAtPosition(position: IPosition): IWordAtPosition;
+        /**
+         * Get the word under or besides `position` trimmed to `position`.column
+         * @param position The position to look for a word.
+         * @param skipSyntaxTokens Ignore syntax tokens, as identified by the mode.
+         * @return The word under or besides `position`. Will never be null.
+         */
+        getWordUntilPosition(position: IPosition): IWordAtPosition;
+    }
+
+    /**
+     * A model that is tokenized.
+     */
+    export interface ITokenizedModel extends ITextModel {
+        /**
+         * Get the current language mode associated with the model.
+         */
+        getMode(): languages.IMode;
+        /**
+         * Set the current language mode associated with the model.
+         */
+        setMode(newMode: languages.IMode | Promise<languages.IMode>): void;
+        /**
+         * Get the word under or besides `position`.
+         * @param position The position to look for a word.
+         * @param skipSyntaxTokens Ignore syntax tokens, as identified by the mode.
+         * @return The word under or besides `position`. Might be null.
+         */
+        getWordAtPosition(position: IPosition): IWordAtPosition;
+        /**
+         * Get the word under or besides `position` trimmed to `position`.column
+         * @param position The position to look for a word.
+         * @param skipSyntaxTokens Ignore syntax tokens, as identified by the mode.
+         * @return The word under or besides `position`. Will never be null.
+         */
+        getWordUntilPosition(position: IPosition): IWordAtPosition;
+    }
+
+    /**
+     * A model that can track markers.
+     */
+    export interface ITextModelWithMarkers extends ITextModel {
+    }
+
+    /**
+     * Describes the behaviour of decorations when typing/editing near their edges.
+     */
+    export enum TrackedRangeStickiness {
+        AlwaysGrowsWhenTypingAtEdges = 0,
+        NeverGrowsWhenTypingAtEdges = 1,
+        GrowsOnlyWhenTypingBefore = 2,
+        GrowsOnlyWhenTypingAfter = 3,
+    }
+
+    /**
+     * A model that can track ranges.
+     */
+    export interface ITextModelWithTrackedRanges extends ITextModel {
+    }
+
+    /**
+     * A model that can have decorations.
+     */
+    export interface ITextModelWithDecorations {
+        /**
+         * Perform a minimum ammount 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;
+        /**
+         * 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;
+        /**
+         * 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).
+         * @return An array with the decorations
+         */
+        getLineDecorations(lineNumber: number, ownerId?: number, filterOutValidation?: 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).
+         * @return An array with the decorations
+         */
+        getLinesDecorations(startLineNumber: number, endLineNumber: number, ownerId?: number, filterOutValidation?: boolean): IModelDecoration[];
+        /**
+         * Gets all the deocorations 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).
+         * @return An array with the decorations
+         */
+        getDecorationsInRange(range: IRange, ownerId?: number, filterOutValidation?: 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).
+         */
+        getAllDecorations(ownerId?: number, filterOutValidation?: boolean): IModelDecoration[];
+    }
+
+    /**
+     * An editable text model.
+     */
+    export interface IEditableTextModel extends ITextModelWithMarkers {
+        /**
+         * Normalize a string containing whitespace according to indentation rules (converts to spaces or to tabs).
+         */
+        normalizeIndentation(str: string): string;
+        /**
+         * Get what is considered to be one indent (e.g. a tab character or 4 spaces, etc.).
+         */
+        getOneIndent(): 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;
+        /**
+         * Push a stack element onto the undo stack. This acts as an undo/redo point.
+         * The idea is to use `pushEditOperations` to edit the model and then to
+         * `pushStackElement` to create an undo/redo stop point.
+         */
+        pushStackElement(): 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 operaions. 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[], editOperations: IIdentifiedSingleEditOperation[], cursorStateComputer: ICursorStateComputer): Selection[];
+        /**
+         * 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 The inverse edit operations, that, when applied, will bring the model back to the previous state.
+         */
+        applyEdits(operations: IIdentifiedSingleEditOperation[]): IIdentifiedSingleEditOperation[];
+    }
+
+    /**
+     * A model.
+     */
+    export interface IModel extends IReadOnlyModel, IEditableTextModel, ITextModelWithMarkers, ITokenizedModel, ITextModelWithTrackedRanges, ITextModelWithDecorations, IEditorModel {
+        /**
+         * @deprecated Please use `onDidChangeContent` instead.
+         * An event emitted when the contents of the model have changed.
+         */
+        onDidChangeRawContent(listener: (e: IModelContentChangedEvent) => void): IDisposable;
+        /**
+         * An event emitted when the contents of the model have changed.
+         */
+        onDidChangeContent(listener: (e: IModelContentChangedEvent2) => void): IDisposable;
+        /**
+         * An event emitted when decorations of the model have changed.
+         */
+        onDidChangeDecorations(listener: (e: IModelDecorationsChangedEvent) => void): IDisposable;
+        /**
+         * An event emitted when the model options have changed.
+         */
+        onDidChangeOptions(listener: (e: IModelOptionsChangedEvent) => void): IDisposable;
+        /**
+         * An event emitted when the language associated with the model has changed.
+         */
+        onDidChangeMode(listener: (e: IModelModeChangedEvent) => void): IDisposable;
+        /**
+         * An event emitted right before disposing the model.
+         */
+        onWillDispose(listener: () => void): IDisposable;
+        /**
+         * A unique identifier associated with this model.
+         */
+        id: string;
+        /**
+         * Destroy this model. This will unbind the model from the mode
+         * and make all necessary clean-up to release this object to the GC.
+         */
+        dispose(): void;
+        /**
+         * 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 wholeWord Force the matching to match entire words only.
+         * @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, wholeWord: boolean, limitResultCount?: number): Range[];
+        /**
+         * 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 this range.
+         * @param isRegex Used to indicate that `searchString` is a regular expression.
+         * @param matchCase Force the matching to match lower/upper case exactly.
+         * @param wholeWord Force the matching to match entire words only.
+         * @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, isRegex: boolean, matchCase: boolean, wholeWord: boolean, limitResultCount?: number): Range[];
+        /**
+         * 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 wholeWord Force the matching to match entire words only.
+         * @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, wholeWord: boolean): Range;
+        /**
+         * 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 wholeWord Force the matching to match entire words only.
+         * @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, wholeWord: boolean): Range;
+    }
+
+    /**
+     * An event describing that the current mode associated with a model has changed.
+     */
+    export interface IModelModeChangedEvent {
+        /**
+         * Previous mode
+         */
+        oldMode: languages.IMode;
+        /**
+         * New mode
+         */
+        newMode: languages.IMode;
+    }
+
+    /**
+     * An event describing a change in the text of a model.
+     */
+    export interface IModelContentChangedEvent2 {
+        /**
+         * The range that got replaced.
+         */
+        range: IRange;
+        /**
+         * The length of the range that got replaced.
+         */
+        rangeLength: number;
+        /**
+         * The new text for the range.
+         */
+        text: string;
+        /**
+         * The (new) end-of-line character.
+         */
+        eol: string;
+        /**
+         * The new version id the model has transitioned to.
+         */
+        versionId: number;
+        /**
+         * Flag that indicates that this event was generated while undoing.
+         */
+        isUndoing: boolean;
+        /**
+         * Flag that indicates that this event was generated while redoing.
+         */
+        isRedoing: boolean;
+    }
+
+    /**
+     * An event describing a change in the text of a model.
+     */
+    export interface IModelContentChangedEvent {
+        /**
+         * The event type. It can be used to detect the actual event type:
+         * 		EditorCommon.EventType.ModelContentChangedFlush => IModelContentChangedFlushEvent
+         * 		EditorCommon.EventType.ModelContentChangedLinesDeleted => IModelContentChangedLineChangedEvent
+         * 		EditorCommon.EventType.ModelContentChangedLinesInserted => IModelContentChangedLinesDeletedEvent
+         * 		EditorCommon.EventType.ModelContentChangedLineChanged => IModelContentChangedLinesInsertedEvent
+         */
+        changeType: string;
+        /**
+         * The new version id the model has transitioned to.
+         */
+        versionId: number;
+        /**
+         * Flag that indicates that this event was generated while undoing.
+         */
+        isUndoing: boolean;
+        /**
+         * Flag that indicates that this event was generated while redoing.
+         */
+        isRedoing: boolean;
+    }
+
+    /**
+     * The raw text backing a model.
+     */
+    export interface IRawText {
+        /**
+         * The entire text length.
+         */
+        length: number;
+        /**
+         * The text split into lines.
+         */
+        lines: string[];
+        /**
+         * The BOM (leading character sequence of the file).
+         */
+        BOM: string;
+        /**
+         * The end of line sequence.
+         */
+        EOL: string;
+        /**
+         * The options associated with this text.
+         */
+        options: ITextModelResolvedOptions;
+    }
+
+    /**
+     * An event describing that a model has been reset to a new value.
+     */
+    export interface IModelContentChangedFlushEvent extends IModelContentChangedEvent {
+        /**
+         * The new text content of the model.
+         */
+        detail: IRawText;
+    }
+
+    /**
+     * An event describing that a line has changed in a model.
+     */
+    export interface IModelContentChangedLineChangedEvent extends IModelContentChangedEvent {
+        /**
+         * The line that has changed.
+         */
+        lineNumber: number;
+        /**
+         * The new value of the line.
+         */
+        detail: string;
+    }
+
+    /**
+     * An event describing that line(s) have been deleted in a model.
+     */
+    export interface IModelContentChangedLinesDeletedEvent extends IModelContentChangedEvent {
+        /**
+         * At what line the deletion began (inclusive).
+         */
+        fromLineNumber: number;
+        /**
+         * At what line the deletion stopped (inclusive).
+         */
+        toLineNumber: number;
+    }
+
+    /**
+     * An event describing that line(s) have been inserted in a model.
+     */
+    export interface IModelContentChangedLinesInsertedEvent extends IModelContentChangedEvent {
+        /**
+         * Before what line did the insertion begin
+         */
+        fromLineNumber: number;
+        /**
+         * `toLineNumber` - `fromLineNumber` + 1 denotes the number of lines that were inserted
+         */
+        toLineNumber: number;
+        /**
+         * The text that was inserted
+         */
+        detail: string;
+    }
+
+    /**
+     * Decoration data associated with a model decorations changed event.
+     */
+    export interface IModelDecorationsChangedEventDecorationData {
+        /**
+         * The id of the decoration.
+         */
+        id: string;
+        /**
+         * The owner id of the decoration.
+         */
+        ownerId: number;
+        /**
+         * The range of the decoration.
+         */
+        range: IRange;
+        /**
+         * A flag describing if this is a problem decoration (e.g. warning/error).
+         */
+        isForValidation: boolean;
+        /**
+         * The options for this decoration.
+         */
+        options: IModelDecorationOptions;
+    }
+
+    /**
+     * An event describing that model decorations have changed.
+     */
+    export interface IModelDecorationsChangedEvent {
+        /**
+         * A summary with ids of decorations that have changed.
+         */
+        ids: string[];
+        /**
+         * Lists of details for added or changed decorations.
+         */
+        addedOrChangedDecorations: IModelDecorationsChangedEventDecorationData[];
+        /**
+         * List of ids for removed decorations.
+         */
+        removedDecorations: string[];
+        /**
+         * Details regarding old options.
+         */
+        oldOptions: {
+            [decorationId: string]: IModelDecorationOptions;
+        };
+        /**
+         * Details regarding old ranges.
+         */
+        oldRanges: {
+            [decorationId: string]: IRange;
+        };
+    }
+
+    /**
+     * An event describing that a range of lines has been tokenized
+     */
+    export interface IModelTokensChangedEvent {
+        /**
+         * The start of the range (inclusive)
+         */
+        fromLineNumber: number;
+        /**
+         * The end of the range (inclusive)
+         */
+        toLineNumber: number;
+    }
+
+    /**
+     * 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.
+         */
+        position: Position;
+        /**
+         * Primary cursor's view position
+         */
+        viewPosition: Position;
+        /**
+         * Secondary cursors' position.
+         */
+        secondaryPositions: Position[];
+        /**
+         * Secondary cursors' view position.
+         */
+        secondaryViewPositions: Position[];
+        /**
+         * Reason.
+         */
+        reason: CursorChangeReason;
+        /**
+         * Source of the call that caused the event.
+         */
+        source: string;
+        /**
+         * Is the primary cursor in the editable range?
+         */
+        isInEditableRange: boolean;
+    }
+
+    /**
+     * An event describing that the cursor selection has changed.
+     */
+    export interface ICursorSelectionChangedEvent {
+        /**
+         * The primary selection.
+         */
+        selection: Selection;
+        /**
+         * The primary selection in view coordinates.
+         */
+        viewSelection: Selection;
+        /**
+         * The secondary selections.
+         */
+        secondarySelections: Selection[];
+        /**
+         * The secondary selections in view coordinates.
+         */
+        secondaryViewSelections: Selection[];
+        /**
+         * Source of the call that caused the event.
+         */
+        source: string;
+        /**
+         * Reason.
+         */
+        reason: CursorChangeReason;
+    }
+
+    /**
+     * 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.
+         */
+        oldModelUrl: Uri;
+        /**
+         * The `uri` of the new model or null.
+         */
+        newModelUrl: Uri;
+    }
+
+    /**
+     * A description for the overview ruler position.
+     */
+    export class OverviewRulerPosition {
+        _overviewRulerPositionBrand: void;
+        /**
+         * Width of the overview ruler
+         */
+        width: number;
+        /**
+         * Height of the overview ruler
+         */
+        height: number;
+        /**
+         * Top position for the overview ruler
+         */
+        top: number;
+        /**
+         * Right position for the overview ruler
+         */
+        right: number;
+    }
+
+    /**
+     * The internal layout details of the editor.
+     */
+    export class EditorLayoutInfo {
+        _editorLayoutInfoBrand: void;
+        /**
+         * Full editor width.
+         */
+        width: number;
+        /**
+         * Full editor height.
+         */
+        height: number;
+        /**
+         * Left position for the glyph margin.
+         */
+        glyphMarginLeft: number;
+        /**
+         * The width of the glyph margin.
+         */
+        glyphMarginWidth: number;
+        /**
+         * The height of the glyph margin.
+         */
+        glyphMarginHeight: number;
+        /**
+         * Left position for the line numbers.
+         */
+        lineNumbersLeft: number;
+        /**
+         * The width of the line numbers.
+         */
+        lineNumbersWidth: number;
+        /**
+         * The height of the line numbers.
+         */
+        lineNumbersHeight: number;
+        /**
+         * Left position for the line decorations.
+         */
+        decorationsLeft: number;
+        /**
+         * The width of the line decorations.
+         */
+        decorationsWidth: number;
+        /**
+         * The height of the line decorations.
+         */
+        decorationsHeight: number;
+        /**
+         * Left position for the content (actual text)
+         */
+        contentLeft: number;
+        /**
+         * The width of the content (actual text)
+         */
+        contentWidth: number;
+        /**
+         * The height of the content (actual height)
+         */
+        contentHeight: number;
+        /**
+         * The width of the vertical scrollbar.
+         */
+        verticalScrollbarWidth: number;
+        /**
+         * The height of the horizontal scrollbar.
+         */
+        horizontalScrollbarHeight: number;
+        /**
+         * The position of the overview ruler.
+         */
+        overviewRuler: OverviewRulerPosition;
+    }
+
+    /**
+     * Options for creating the editor.
+     */
+    export interface ICodeEditorWidgetCreationOptions extends IEditorOptions {
+        /**
+         * The initial model associated with this code editor.
+         */
+        model?: IModel;
+    }
+
+    /**
+     * An editor model.
+     */
+    export interface IEditorModel {
+    }
+
+    /**
+     * An editor view state.
+     */
+    export interface IEditorViewState {
+    }
+
+    export interface IDimension {
+        width: number;
+        height: number;
+    }
+
+    /**
+     * Conditions describing action enablement
+     */
+    export interface IActionEnablement {
+        /**
+         * The action is enabled only if text in the editor is focused (e.g. blinking cursor).
+         * Warning: This condition will be disabled if the action is marked to be displayed in the context menu
+         * Defaults to false.
+         */
+        textFocus?: boolean;
+        /**
+         * The action is enabled only if the editor or its widgets have focus (e.g. focus is in find widget).
+         * Defaults to false.
+         */
+        widgetFocus?: boolean;
+        /**
+         * The action is enabled only if the editor is not in read only mode.
+         * Defaults to false.
+         */
+        writeableEditor?: boolean;
+        /**
+         * The action is enabled only if the cursor position is over tokens of a certain kind.
+         * Defaults to no tokens required.
+         */
+        tokensAtPosition?: string[];
+        /**
+         * The action is enabled only if the cursor position is over a word (i.e. not whitespace).
+         * Defaults to false.
+         */
+        wordAtPosition?: boolean;
+    }
+
+    /**
+     * A (serializable) state of the cursors.
+     */
+    export interface ICursorState {
+        inSelectionMode: boolean;
+        selectionStart: IPosition;
+        position: IPosition;
+    }
+
+    /**
+     * A (serializable) state of the view.
+     */
+    export interface IViewState {
+        scrollTop: number;
+        scrollTopWithoutViewZones: number;
+        scrollLeft: number;
+    }
+
+    /**
+     * A (serializable) state of the code editor.
+     */
+    export interface ICodeEditorViewState extends IEditorViewState {
+        cursorState: ICursorState[];
+        viewState: IViewState;
+        contributionsState: {
+            [id: string]: any;
+        };
+    }
+
+    /**
+     * Type of hit element with the mouse in the editor.
+     */
+    export enum MouseTargetType {
+        /**
+         * Mouse is on top of an unknown element.
+         */
+        UNKNOWN = 0,
+        /**
+         * Mouse is on top of the textarea used for input.
+         */
+        TEXTAREA = 1,
+        /**
+         * Mouse is on top of the glyph margin
+         */
+        GUTTER_GLYPH_MARGIN = 2,
+        /**
+         * Mouse is on top of the line numbers
+         */
+        GUTTER_LINE_NUMBERS = 3,
+        /**
+         * Mouse is on top of the line decorations
+         */
+        GUTTER_LINE_DECORATIONS = 4,
+        /**
+         * Mouse is on top of the whitespace left in the gutter by a view zone.
+         */
+        GUTTER_VIEW_ZONE = 5,
+        /**
+         * Mouse is on top of text in the content.
+         */
+        CONTENT_TEXT = 6,
+        /**
+         * Mouse is on top of empty space in the content (e.g. after line text or below last line)
+         */
+        CONTENT_EMPTY = 7,
+        /**
+         * Mouse is on top of a view zone in the content.
+         */
+        CONTENT_VIEW_ZONE = 8,
+        /**
+         * Mouse is on top of a content widget.
+         */
+        CONTENT_WIDGET = 9,
+        /**
+         * Mouse is on top of the decorations overview ruler.
+         */
+        OVERVIEW_RULER = 10,
+        /**
+         * Mouse is on top of a scrollbar.
+         */
+        SCROLLBAR = 11,
+        /**
+         * Mouse is on top of an overlay widget.
+         */
+        OVERLAY_WIDGET = 12,
+    }
+
+    /**
+     * A model for the diff editor.
+     */
+    export interface IDiffEditorModel extends IEditorModel {
+        /**
+         * Original model.
+         */
+        original: IModel;
+        /**
+         * Modified model.
+         */
+        modified: IModel;
+    }
+
+    /**
+     * (Serializable) View state for the diff editor.
+     */
+    export interface IDiffEditorViewState extends IEditorViewState {
+        original: ICodeEditorViewState;
+        modified: ICodeEditorViewState;
+    }
+
+    /**
+     * A change
+     */
+    export interface IChange {
+        originalStartLineNumber: number;
+        originalEndLineNumber: number;
+        modifiedStartLineNumber: number;
+        modifiedEndLineNumber: number;
+    }
+
+    /**
+     * A character level change.
+     */
+    export interface ICharChange extends IChange {
+        originalStartColumn: number;
+        originalEndColumn: number;
+        modifiedStartColumn: number;
+        modifiedEndColumn: number;
+    }
+
+    /**
+     * A line change
+     */
+    export interface ILineChange extends IChange {
+        charChanges: ICharChange[];
+    }
+
+    /**
+     * A context key that is set when the editor's text has focus (cursor is blinking).
+     */
+    export const KEYBINDING_CONTEXT_EDITOR_TEXT_FOCUS: string;
+
+    /**
+     * A context key that is set when the editor's text or an editor's widget has focus.
+     */
+    export const KEYBINDING_CONTEXT_EDITOR_FOCUS: string;
+
+    /**
+     * A context key that is set when the editor has multiple selections (multiple cursors).
+     */
+    export const KEYBINDING_CONTEXT_EDITOR_HAS_MULTIPLE_SELECTIONS: string;
+
+    /**
+     * A context key that is set when the editor has a non-collapsed selection.
+     */
+    export const KEYBINDING_CONTEXT_EDITOR_HAS_NON_EMPTY_SELECTION: string;
+
+    /**
+     * A context key that is set to the language associated with the model associated with the editor.
+     */
+    export const KEYBINDING_CONTEXT_EDITOR_LANGUAGE_ID: string;
+
+    export class BareFontInfo {
+        _bareFontInfoBrand: void;
+        fontFamily: string;
+        fontSize: number;
+        lineHeight: number;
+    }
+
+    export class FontInfo extends BareFontInfo {
+        _editorStylingBrand: void;
+        typicalHalfwidthCharacterWidth: number;
+        typicalFullwidthCharacterWidth: number;
+        spaceWidth: number;
+        maxDigitWidth: number;
+    }
+
+    export interface INewScrollPosition {
+        scrollLeft?: number;
+        scrollTop?: number;
+    }
+
+    /**
+     * 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;
+        /**
+         * An array of keybindings for the action.
+         */
+        keybindings?: number[];
+        /**
+         * The keybinding rule.
+         */
+        keybindingContext?: string;
+        /**
+         * A set of enablement conditions.
+         */
+        enablement?: IActionEnablement;
+        /**
+         * Control if the action should show up in the context menu and where.
+         * Built-in groups:
+         *   1_goto/* => e.g. 1_goto/1_peekDefinition
+         *   2_change/* => e.g. 2_change/2_format
+         *   3_edit/* => e.g. 3_edit/1_copy
+         *   4_tools/* => e.g. 4_tools/1_commands
+         * You can also create your own group.
+         * Defaults to null (don't show in context menu).
+         */
+        contextMenuGroupId?: string;
+        /**
+         * Method that will be executed when the action is triggered.
+         * @param editor The editor instance is passed in as a convinience
+         */
+        run: (editor: ICommonCodeEditor) => Promise<void>;
+    }
+
+    /**
+     * An editor.
+     */
+    export interface IEditor {
+        /**
+         * @deprecated. Please use `onDidChangeModelContent` instead.
+         * An event emitted when the content of the current model has changed.
+         */
+        onDidChangeModelRawContent(listener: (e: IModelContentChangedEvent) => void): IDisposable;
+        /**
+         * An event emitted when the content of the current model has changed.
+         */
+        onDidChangeModelContent(listener: (e: IModelContentChangedEvent2) => void): IDisposable;
+        /**
+         * An event emitted when the language of the current model has changed.
+         */
+        onDidChangeModelMode(listener: (e: IModelModeChangedEvent) => void): IDisposable;
+        /**
+         * An event emitted when the options of the current model has changed.
+         */
+        onDidChangeModelOptions(listener: (e: IModelOptionsChangedEvent) => void): IDisposable;
+        /**
+         * An event emitted when the configuration of the editor has changed. (e.g. `editor.updateOptions()`)
+         */
+        onDidChangeConfiguration(listener: (e: IConfigurationChangedEvent) => void): IDisposable;
+        /**
+         * An event emitted when the cursor position has changed.
+         */
+        onDidChangeCursorPosition(listener: (e: ICursorPositionChangedEvent) => void): IDisposable;
+        /**
+         * An event emitted when the cursor selection has changed.
+         */
+        onDidChangeCursorSelection(listener: (e: ICursorSelectionChangedEvent) => void): IDisposable;
+        /**
+         * An event emitted when the editor has been disposed.
+         */
+        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.
+         */
+        layout(dimension?: IDimension): void;
+        /**
+         * Brings browser focus to the editor text
+         */
+        focus(): void;
+        /**
+         * Returns true if this editor has keyboard focus (e.g. cursor is blinking).
+         */
+        isFocused(): boolean;
+        /**
+         * Add a new action to this editor.
+         */
+        addAction(descriptor: IActionDescriptor): void;
+        /**
+         * Returns all actions associated with this editor.
+         */
+        getActions(): IAction[];
+        /**
+         * Saves current view state of the editor in a serializable object.
+         */
+        saveViewState(): IEditorViewState;
+        /**
+         * Restores the view state of the editor from a serializable object generated by `saveViewState`.
+         */
+        restoreViewState(state: IEditorViewState): 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;
+        /**
+         * Set the primary position of the cursor. This will remove any secondary cursors.
+         * @param position New primary cursor's position
+         */
+        setPosition(position: IPosition): void;
+        /**
+         * Scroll vertically as necessary and reveal a line.
+         */
+        revealLine(lineNumber: number): void;
+        /**
+         * Scroll vertically as necessary and reveal a line centered vertically.
+         */
+        revealLineInCenter(lineNumber: number): void;
+        /**
+         * Scroll vertically as necessary and reveal a line centered vertically only if it lies outside the viewport.
+         */
+        revealLineInCenterIfOutsideViewport(lineNumber: number): void;
+        /**
+         * Scroll vertically or horizontally as necessary and reveal a position.
+         */
+        revealPosition(position: IPosition): void;
+        /**
+         * Scroll vertically or horizontally as necessary and reveal a position centered vertically.
+         */
+        revealPositionInCenter(position: IPosition): void;
+        /**
+         * Scroll vertically or horizontally as necessary and reveal a position centered vertically only if it lies outside the viewport.
+         */
+        revealPositionInCenterIfOutsideViewport(position: IPosition): void;
+        /**
+         * Returns the primary selection of the editor.
+         */
+        getSelection(): Selection;
+        /**
+         * Returns all the selections of the editor.
+         */
+        getSelections(): Selection[];
+        /**
+         * Set the primary selection of the editor. This will remove any secondary cursors.
+         * @param selection The new selection
+         */
+        setSelection(selection: IRange): void;
+        /**
+         * Set the primary selection of the editor. This will remove any secondary cursors.
+         * @param selection The new selection
+         */
+        setSelection(selection: Range): void;
+        /**
+         * Set the primary selection of the editor. This will remove any secondary cursors.
+         * @param selection The new selection
+         */
+        setSelection(selection: ISelection): void;
+        /**
+         * Set the primary selection of the editor. This will remove any secondary cursors.
+         * @param selection The new selection
+         */
+        setSelection(selection: Selection): void;
+        /**
+         * Set the selections for all the cursors of the editor.
+         * Cursors will be removed or added, as necessary.
+         */
+        setSelections(selections: ISelection[]): void;
+        /**
+         * Scroll vertically as necessary and reveal lines.
+         */
+        revealLines(startLineNumber: number, endLineNumber: number): void;
+        /**
+         * Scroll vertically as necessary and reveal lines centered vertically.
+         */
+        revealLinesInCenter(lineNumber: number, endLineNumber: number): void;
+        /**
+         * Scroll vertically as necessary and reveal lines centered vertically only if it lies outside the viewport.
+         */
+        revealLinesInCenterIfOutsideViewport(lineNumber: number, endLineNumber: number): void;
+        /**
+         * Scroll vertically or horizontally as necessary and reveal a range.
+         */
+        revealRange(range: IRange): void;
+        /**
+         * Scroll vertically or horizontally as necessary and reveal a range centered vertically.
+         */
+        revealRangeInCenter(range: IRange): void;
+        /**
+         * Scroll vertically or horizontally as necessary and reveal a range centered vertically only if it lies outside the viewport.
+         */
+        revealRangeInCenterIfOutsideViewport(range: IRange): 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, handlerId: string, payload: any): void;
+        /**
+         * Gets the current model attached to this editor.
+         */
+        getModel(): IEditorModel;
+        /**
+         * 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): 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 {
+        /**
+         * Get a unique identifier for this contribution.
+         */
+        getId(): string;
+        /**
+         * Dispose this contribution.
+         */
+        dispose(): void;
+        /**
+         * Store view state.
+         */
+        saveViewState?(): any;
+        /**
+         * Restore view state.
+         */
+        restoreViewState?(state: any): void;
+    }
+
+    export interface ICommonCodeEditor extends IEditor {
+        /**
+         * An event emitted when the model of this editor has changed (e.g. `editor.setModel()`).
+         */
+        onDidChangeModel(listener: (e: IModelChangedEvent) => void): IDisposable;
+        /**
+         * An event emitted when the decorations of the current model have changed.
+         */
+        onDidChangeModelDecorations(listener: (e: IModelDecorationsChangedEvent) => void): IDisposable;
+        /**
+         * An event emitted when the text inside this editor gained focus (i.e. cursor blinking).
+         */
+        onDidFocusEditorText(listener: () => void): IDisposable;
+        /**
+         * An event emitted when the text inside this editor lost focus.
+         */
+        onDidBlurEditorText(listener: () => void): IDisposable;
+        /**
+         * An event emitted when the text inside this editor or an editor widget gained focus.
+         */
+        onDidFocusEditor(listener: () => void): IDisposable;
+        /**
+         * An event emitted when the text inside this editor or an editor widget lost focus.
+         */
+        onDidBlurEditor(listener: () => void): IDisposable;
+        /**
+         * Returns true if this editor or one of its widgets has keyboard focus.
+         */
+        hasWidgetFocus(): boolean;
+        /**
+         * Get a contribution of this editor.
+         * @id Unique identifier of the contribution.
+         * @return The contribution or null if contribution not found.
+         */
+        getContribution(id: string): IEditorContribution;
+        /**
+         * Type the getModel() of IEditor.
+         */
+        getModel(): IModel;
+        /**
+         * Returns the current editor's configuration
+         */
+        getConfiguration(): InternalEditorOptions;
+        /**
+         * Get value of the current model attached to this editor.
+         * @see IModel.getValue
+         */
+        getValue(options?: {
+            preserveBOM: boolean;
+            lineEnding: string;
+        }): string;
+        /**
+         * Set the value of the current model attached to this editor.
+         * @see IModel.setValue
+         */
+        setValue(newValue: string): void;
+        /**
+         * Get the scrollWidth of the editor's viewport.
+         */
+        getScrollWidth(): number;
+        /**
+         * Get the scrollLeft of the editor's viewport.
+         */
+        getScrollLeft(): number;
+        /**
+         * Get the scrollHeight of the editor's viewport.
+         */
+        getScrollHeight(): number;
+        /**
+         * Get the scrollTop of the editor's viewport.
+         */
+        getScrollTop(): number;
+        /**
+         * Change the scrollLeft of the editor's viewport.
+         */
+        setScrollLeft(newScrollLeft: number): void;
+        /**
+         * Change the scrollTop of the editor's viewport.
+         */
+        setScrollTop(newScrollTop: number): void;
+        /**
+         * Change the scroll position of the editor's viewport.
+         */
+        setScrollPosition(position: INewScrollPosition): void;
+        /**
+         * Get an action that is a contribution to this editor.
+         * @id Unique identifier of the contribution.
+         * @return The action or null if action not found.
+         */
+        getAction(id: string): IAction;
+        /**
+         * Execute a command on the editor.
+         * @param source The source of the call.
+         * @param command The command to execute
+         */
+        executeCommand(source: string, command: ICommand): void;
+        /**
+         * Execute a command on the editor.
+         * @param source The source of the call.
+         * @param command The command to execute
+         */
+        executeEdits(source: string, edits: IIdentifiedSingleEditOperation[]): boolean;
+        /**
+         * Execute multiple (concommitent) commands on the editor.
+         * @param source The source of the call.
+         * @param command The commands to execute
+         */
+        executeCommands(source: string, commands: ICommand[]): void;
+        /**
+         * Get all the decorations on a line (filtering out decorations from other editors).
+         */
+        getLineDecorations(lineNumber: number): IModelDecoration[];
+        /**
+         * All decorations added through this call will get the ownerId of this editor.
+         * @see IModel.deltaDecorations
+         */
+        deltaDecorations(oldDecorations: string[], newDecorations: IModelDeltaDecoration[]): string[];
+        /**
+         * Get the layout info for the editor.
+         */
+        getLayoutInfo(): EditorLayoutInfo;
+    }
+
+    export interface ICommonDiffEditor extends IEditor {
+        /**
+         * An event emitted when the diff information computed by this diff editor has been updated.
+         */
+        onDidUpdateDiff(listener: () => void): IDisposable;
+        /**
+         * Type the getModel() of IEditor.
+         */
+        getModel(): IDiffEditorModel;
+        /**
+         * Get the `original` editor.
+         */
+        getOriginalEditor(): ICommonCodeEditor;
+        /**
+         * Get the `modified` editor.
+         */
+        getModifiedEditor(): ICommonCodeEditor;
+        /**
+         * Get the computed diff information.
+         */
+        getLineChanges(): ILineChange[];
+        /**
+         * @see ICodeEditor.getValue
+         */
+        getValue(options?: {
+            preserveBOM: boolean;
+            lineEnding: string;
+        }): string;
+    }
+
+    /**
+     * The type of the `IEditor`.
+     */
+    export var EditorType: {
+        ICodeEditor: string;
+        IDiffEditor: string;
+    };
+
+    /**
+     * Built-in commands.
+     */
+    export var Handler: {
+        ExecuteCommand: string;
+        ExecuteCommands: string;
+        CursorLeft: string;
+        CursorLeftSelect: string;
+        CursorWordLeft: string;
+        CursorWordStartLeft: string;
+        CursorWordEndLeft: string;
+        CursorWordLeftSelect: string;
+        CursorWordStartLeftSelect: string;
+        CursorWordEndLeftSelect: string;
+        CursorRight: string;
+        CursorRightSelect: string;
+        CursorWordRight: string;
+        CursorWordStartRight: string;
+        CursorWordEndRight: string;
+        CursorWordRightSelect: string;
+        CursorWordStartRightSelect: string;
+        CursorWordEndRightSelect: string;
+        CursorUp: string;
+        CursorUpSelect: string;
+        CursorDown: string;
+        CursorDownSelect: string;
+        CursorPageUp: string;
+        CursorPageUpSelect: string;
+        CursorPageDown: string;
+        CursorPageDownSelect: string;
+        CursorHome: string;
+        CursorHomeSelect: string;
+        CursorEnd: string;
+        CursorEndSelect: string;
+        ExpandLineSelection: string;
+        CursorTop: string;
+        CursorTopSelect: string;
+        CursorBottom: string;
+        CursorBottomSelect: string;
+        CursorColumnSelectLeft: string;
+        CursorColumnSelectRight: string;
+        CursorColumnSelectUp: string;
+        CursorColumnSelectPageUp: string;
+        CursorColumnSelectDown: string;
+        CursorColumnSelectPageDown: string;
+        AddCursorDown: string;
+        AddCursorUp: string;
+        CursorUndo: string;
+        MoveTo: string;
+        MoveToSelect: string;
+        ColumnSelect: string;
+        CreateCursor: string;
+        LastCursorMoveToSelect: string;
+        JumpToBracket: string;
+        Type: string;
+        ReplacePreviousChar: string;
+        Paste: string;
+        Tab: string;
+        Indent: string;
+        Outdent: string;
+        DeleteLeft: string;
+        DeleteRight: string;
+        DeleteWordLeft: string;
+        DeleteWordStartLeft: string;
+        DeleteWordEndLeft: string;
+        DeleteWordRight: string;
+        DeleteWordStartRight: string;
+        DeleteWordEndRight: string;
+        DeleteAllLeft: string;
+        DeleteAllRight: string;
+        RemoveSecondaryCursors: string;
+        CancelSelection: string;
+        Cut: string;
+        Undo: string;
+        Redo: string;
+        WordSelect: string;
+        WordSelectDrag: string;
+        LastCursorWordSelect: string;
+        LineSelect: string;
+        LineSelectDrag: string;
+        LastCursorLineSelect: string;
+        LastCursorLineSelectDrag: string;
+        LineInsertBefore: string;
+        LineInsertAfter: string;
+        LineBreakInsert: string;
+        SelectAll: string;
+        ScrollLineUp: string;
+        ScrollLineDown: string;
+        ScrollPageUp: string;
+        ScrollPageDown: string;
+    };
+
+    /**
+     * 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,
+    }
+
+    /**
+     * A view zone is a full horizontal rectangle that 'pushes' text down.
+     * The editor reserves space for view zones when rendering.
+     */
+    export interface IViewZone {
+        /**
+         * The line number after which this zone should appear.
+         * Use 0 to place a view zone before the first line number.
+         */
+        afterLineNumber: number;
+        /**
+         * The column after which this zone should appear.
+         * If not set, the maxLineColumn of `afterLineNumber` will be used.
+         */
+        afterColumn?: number;
+        /**
+         * Suppress mouse down events.
+         * If set, the editor will attach a mouse down listener to the view zone and .preventDefault on it.
+         * Defaults to false
+         */
+        suppressMouseDown?: boolean;
+        /**
+         * The height in lines of the view zone.
+         * If specified, `heightInPx` will be used instead of this.
+         * If neither `heightInPx` nor `heightInLines` is specified, a default of `heightInLines` = 1 will be chosen.
+         */
+        heightInLines?: number;
+        /**
+         * The height in px of the view zone.
+         * If this is set, the editor will give preference to it rather than `heightInLines` above.
+         * If neither `heightInPx` nor `heightInLines` is specified, a default of `heightInLines` = 1 will be chosen.
+         */
+        heightInPx?: number;
+        /**
+         * The dom node of the view zone
+         */
+        domNode: HTMLElement;
+        /**
+         * Callback which gives the relative top of the view zone as it appears (taking scrolling into account).
+         */
+        onDomNodeTop?: (top: number) => void;
+        /**
+         * Callback which gives the height in pixels of the view zone.
+         */
+        onComputedHeight?: (height: number) => void;
+    }
+
+    /**
+     * An accessor that allows for zones to be added or removed.
+     */
+    export interface IViewZoneChangeAccessor {
+        /**
+         * Create a new view zone.
+         * @param zone Zone to create
+         * @return A unique identifier to the view zone.
+         */
+        addZone(zone: IViewZone): number;
+        /**
+         * Remove a zone
+         * @param id A unique identifier to the view zone, as returned by the `addZone` call.
+         */
+        removeZone(id: number): void;
+        /**
+         * Change a zone's position.
+         * The editor will rescan the `afterLineNumber` and `afterColumn` properties of a view zone.
+         */
+        layoutZone(id: number): void;
+    }
+
+    /**
+     * A positioning preference for rendering content widgets.
+     */
+    export enum ContentWidgetPositionPreference {
+        /**
+         * Place the content widget exactly at a position
+         */
+        EXACT = 0,
+        /**
+         * Place the content widget above a position
+         */
+        ABOVE = 1,
+        /**
+         * Place the content widget below a position
+         */
+        BELOW = 2,
+    }
+
+    /**
+     * A position for rendering content widgets.
+     */
+    export interface IContentWidgetPosition {
+        /**
+         * Desired position for the content widget.
+         * `preference` will also affect the placement.
+         */
+        position: IPosition;
+        /**
+         * Placement preference for position, in order of preference.
+         */
+        preference: ContentWidgetPositionPreference[];
+    }
+
+    /**
+     * A content widget renders inline with the text and can be easily placed 'near' an editor position.
+     */
+    export interface IContentWidget {
+        /**
+         * Render this content widget in a location where it could overflow the editor's view dom node.
+         */
+        allowEditorOverflow?: boolean;
+        /**
+         * Get a unique identifier of the content widget.
+         */
+        getId(): string;
+        /**
+         * Get the dom node of the content widget.
+         */
+        getDomNode(): HTMLElement;
+        /**
+         * Get the placement of the content widget.
+         * If null is returned, the content widget will be placed off screen.
+         */
+        getPosition(): IContentWidgetPosition;
+    }
+
+    /**
+     * A positioning preference for rendering overlay widgets.
+     */
+    export enum OverlayWidgetPositionPreference {
+        /**
+         * Position the overlay widget in the top right corner
+         */
+        TOP_RIGHT_CORNER = 0,
+        /**
+         * Position the overlay widget in the bottom right corner
+         */
+        BOTTOM_RIGHT_CORNER = 1,
+        /**
+         * Position the overlay widget in the top center
+         */
+        TOP_CENTER = 2,
+    }
+
+    /**
+     * A position for rendering overlay widgets.
+     */
+    export interface IOverlayWidgetPosition {
+        /**
+         * The position preference for the overlay widget.
+         */
+        preference: OverlayWidgetPositionPreference;
+    }
+
+    /**
+     * An overlay widgets renders on top of the text.
+     */
+    export interface IOverlayWidget {
+        /**
+         * Get a unique identifier of the overlay widget.
+         */
+        getId(): string;
+        /**
+         * Get the dom node of the overlay widget.
+         */
+        getDomNode(): HTMLElement;
+        /**
+         * Get the placement of the overlay widget.
+         * If null is returned, the overlay widget is responsible to place itself.
+         */
+        getPosition(): IOverlayWidgetPosition;
+    }
+
+    /**
+     * Target hit with the mouse in the editor.
+     */
+    export interface IMouseTarget {
+        /**
+         * The target element
+         */
+        element: Element;
+        /**
+         * The target type
+         */
+        type: MouseTargetType;
+        /**
+         * The 'approximate' editor position
+         */
+        position: Position;
+        /**
+         * Desired mouse column (e.g. when position.column gets clamped to text length -- clicking after text on a line).
+         */
+        mouseColumn: number;
+        /**
+         * The 'approximate' editor range
+         */
+        range: Range;
+        /**
+         * Some extra detail.
+         */
+        detail: any;
+    }
+
+    /**
+     * A mouse event originating from the editor.
+     */
+    export interface IEditorMouseEvent {
+        event: IMouseEvent;
+        target: IMouseTarget;
+    }
+
+    /**
+     * A rich code editor.
+     */
+    export interface ICodeEditor extends ICommonCodeEditor {
+        /**
+         * An event emitted on a "mouseup".
+         */
+        onMouseUp(listener: (e: IEditorMouseEvent) => void): IDisposable;
+        /**
+         * An event emitted on a "mousedown".
+         */
+        onMouseDown(listener: (e: IEditorMouseEvent) => void): IDisposable;
+        /**
+         * An event emitted on a "contextmenu".
+         */
+        onContextMenu(listener: (e: IEditorMouseEvent) => void): IDisposable;
+        /**
+         * An event emitted on a "mousemove".
+         */
+        onMouseMove(listener: (e: IEditorMouseEvent) => void): IDisposable;
+        /**
+         * An event emitted on a "mouseleave".
+         */
+        onMouseLeave(listener: (e: IEditorMouseEvent) => void): IDisposable;
+        /**
+         * An event emitted on a "keyup".
+         */
+        onKeyUp(listener: (e: IKeyboardEvent) => void): IDisposable;
+        /**
+         * An event emitted on a "keydown".
+         */
+        onKeyDown(listener: (e: IKeyboardEvent) => void): IDisposable;
+        /**
+         * An event emitted when the layout of the editor has changed.
+         */
+        onDidLayoutChange(listener: (e: EditorLayoutInfo) => void): IDisposable;
+        /**
+         * An event emitted when the scroll in the editor has changed.
+         */
+        onDidScrollChange(listener: (e: IScrollEvent) => void): IDisposable;
+        /**
+         * Returns the editor's dom node
+         */
+        getDomNode(): HTMLElement;
+        /**
+         * Add a content widget. Widgets must have unique ids, otherwise they will be overwritten.
+         */
+        addContentWidget(widget: IContentWidget): void;
+        /**
+         * Layout/Reposition a content widget. This is a ping to the editor to call widget.getPosition()
+         * and update appropiately.
+         */
+        layoutContentWidget(widget: IContentWidget): void;
+        /**
+         * Remove a content widget.
+         */
+        removeContentWidget(widget: IContentWidget): void;
+        /**
+         * Add an overlay widget. Widgets must have unique ids, otherwise they will be overwritten.
+         */
+        addOverlayWidget(widget: IOverlayWidget): void;
+        /**
+         * Layout/Reposition an overlay widget. This is a ping to the editor to call widget.getPosition()
+         * and update appropiately.
+         */
+        layoutOverlayWidget(widget: IOverlayWidget): void;
+        /**
+         * Remove an overlay widget.
+         */
+        removeOverlayWidget(widget: IOverlayWidget): void;
+        /**
+         * Change the view zones. View zones are lost when a new model is attached to the editor.
+         */
+        changeViewZones(callback: (accessor: IViewZoneChangeAccessor) => void): void;
+        /**
+         * Returns the range that is currently centered in the view port.
+         */
+        getCenteredRangeInViewport(): Range;
+        /**
+         * Get the horizontal position (left offset) for the column w.r.t to the beginning of the line.
+         * This method works only if the line `lineNumber` is currently rendered (in the editor's viewport).
+         * Use this method with caution.
+         */
+        getOffsetForColumn(lineNumber: number, column: number): number;
+        /**
+         * Force an editor render now.
+         */
+        render(): void;
+        /**
+         * Get the vertical position (top offset) for the line w.r.t. to the first line.
+         */
+        getTopForLineNumber(lineNumber: number): number;
+        /**
+         * Get the vertical position (top offset) for the position w.r.t. to the first line.
+         */
+        getTopForPosition(lineNumber: number, column: number): number;
+        /**
+         * Get the visible position for `position`.
+         * The result position takes scrolling into account and is relative to the top left corner of the editor.
+         * Explanation 1: the results of this method will change for the same `position` if the user scrolls the editor.
+         * Explanation 2: the results of this method will not change if the container of the editor gets repositioned.
+         * Warning: the results of this method are innacurate for positions that are outside the current editor viewport.
+         */
+        getScrolledVisiblePosition(position: IPosition): {
+            top: number;
+            left: number;
+            height: number;
+        };
+        /**
+         * Apply the same font settings as the editor to `target`.
+         */
+        applyFontInfo(target: HTMLElement): void;
+    }
+
+    /**
+     * A rich diff editor.
+     */
+    export interface IDiffEditor extends ICommonDiffEditor {
+        /**
+         * @see ICodeEditor.getDomNode
+         */
+        getDomNode(): HTMLElement;
+    }
+}
+
+declare module monaco.languages {
+
+
+    /**
+     * Register information about a new language.
+     */
+    export function register(language: ILanguageExtensionPoint): void;
+
+    /**
+     * Get the information of all the registered languages.
+     */
+    export function getLanguages(): ILanguageExtensionPoint[];
+
+    /**
+     * An event emitted when a language is first time needed (e.g. a model has it set).
+     */
+    export function onLanguage(languageId: string, callback: () => void): IDisposable;
+
+    /**
+     * Set the editing configuration for a language.
+     */
+    export function setLanguageConfiguration(languageId: string, configuration: LanguageConfiguration): IDisposable;
+
+    /**
+     * Set the tokens provider for a language (manual implementation).
+     */
+    export function setTokensProvider(languageId: string, provider: TokensProvider): IDisposable;
+
+    /**
+     * Set the tokens provider for a language (monarch implementation).
+     */
+    export function setMonarchTokensProvider(languageId: string, languageDef: IMonarchLanguage): IDisposable;
+
+    /**
+     * Register a reference provider (used by e.g. reference search).
+     */
+    export function registerReferenceProvider(languageId: string, provider: ReferenceProvider): IDisposable;
+
+    /**
+     * Register a rename provider (used by e.g. rename symbol).
+     */
+    export function registerRenameProvider(languageId: string, provider: RenameProvider): IDisposable;
+
+    /**
+     * Register a signature help provider (used by e.g. paremeter hints).
+     */
+    export function registerSignatureHelpProvider(languageId: string, provider: SignatureHelpProvider): IDisposable;
+
+    /**
+     * Register a hover provider (used by e.g. editor hover).
+     */
+    export function registerHoverProvider(languageId: string, provider: HoverProvider): IDisposable;
+
+    /**
+     * Register a document symbol provider (used by e.g. outline).
+     */
+    export function registerDocumentSymbolProvider(languageId: string, provider: DocumentSymbolProvider): IDisposable;
+
+    /**
+     * Register a document highlight provider (used by e.g. highlight occurences).
+     */
+    export function registerDocumentHighlightProvider(languageId: string, provider: DocumentHighlightProvider): IDisposable;
+
+    /**
+     * Register a definition provider (used by e.g. go to definition).
+     */
+    export function registerDefinitionProvider(languageId: string, provider: DefinitionProvider): IDisposable;
+
+    /**
+     * Register a code lens provider (used by e.g. inline code lenses).
+     */
+    export function registerCodeLensProvider(languageId: string, provider: CodeLensProvider): IDisposable;
+
+    /**
+     * Register a code action provider (used by e.g. quick fix).
+     */
+    export function registerCodeActionProvider(languageId: string, provider: CodeActionProvider): IDisposable;
+
+    /**
+     * Register a formatter that can handle only entire models.
+     */
+    export function registerDocumentFormattingEditProvider(languageId: string, provider: DocumentFormattingEditProvider): IDisposable;
+
+    /**
+     * Register a formatter that can handle a range inside a model.
+     */
+    export function registerDocumentRangeFormattingEditProvider(languageId: string, provider: DocumentRangeFormattingEditProvider): IDisposable;
+
+    /**
+     * Register a formatter than can do formatting as the user types.
+     */
+    export function registerOnTypeFormattingEditProvider(languageId: string, provider: OnTypeFormattingEditProvider): IDisposable;
+
+    /**
+     * Register a link provider that can find links in text.
+     */
+    export function registerLinkProvider(languageId: string, provider: LinkProvider): IDisposable;
+
+    /**
+     * Register a completion item provider (use by e.g. suggestions).
+     */
+    export function registerCompletionItemProvider(languageId: string, provider: CompletionItemProvider): IDisposable;
+
+    /**
+     * Completion item kinds.
+     */
+    export enum CompletionItemKind {
+        Text = 0,
+        Method = 1,
+        Function = 2,
+        Constructor = 3,
+        Field = 4,
+        Variable = 5,
+        Class = 6,
+        Interface = 7,
+        Module = 8,
+        Property = 9,
+        Unit = 10,
+        Value = 11,
+        Enum = 12,
+        Keyword = 13,
+        Snippet = 14,
+        Color = 15,
+        File = 16,
+        Reference = 17,
+    }
+
+    /**
+     * A completion item represents a text snippet that is
+     * proposed to complete text that is being typed.
+     */
+    export interface CompletionItem {
+        /**
+         * The label of this completion item. By default
+         * this is also the text that is inserted when selecting
+         * this completion.
+         */
+        label: string;
+        /**
+         * The kind of this completion item. Based on the kind
+         * an icon is chosen by the editor.
+         */
+        kind: CompletionItemKind;
+        /**
+         * A human-readable string with additional information
+         * about this item, like type or symbol information.
+         */
+        detail?: string;
+        /**
+         * A human-readable string that represents a doc-comment.
+         */
+        documentation?: string;
+        /**
+         * A string that should be used when comparing this item
+         * with other items. When `falsy` the [label](#CompletionItem.label)
+         * is used.
+         */
+        sortText?: string;
+        /**
+         * A string that should be used when filtering a set of
+         * completion items. When `falsy` the [label](#CompletionItem.label)
+         * is used.
+         */
+        filterText?: string;
+        /**
+         * A string that should be inserted in a document when selecting
+         * this completion. When `falsy` the [label](#CompletionItem.label)
+         * is used.
+         */
+        insertText?: string;
+        /**
+         * An [edit](#TextEdit) which is applied to a document when selecting
+         * this completion. When an edit is provided the value of
+         * [insertText](#CompletionItem.insertText) is ignored.
+         *
+         * The [range](#Range) of the edit must be single-line and one the same
+         * line completions where [requested](#CompletionItemProvider.provideCompletionItems) at.
+         */
+        textEdit?: editor.ISingleEditOperation;
+    }
+
+    /**
+     * Represents a collection of [completion items](#CompletionItem) to be presented
+     * in the editor.
+     */
+    export interface CompletionList {
+        /**
+         * This list it not complete. Further typing should result in recomputing
+         * this list.
+         */
+        isIncomplete?: boolean;
+        /**
+         * The completion items.
+         */
+        items: CompletionItem[];
+    }
+
+    /**
+     * The completion item provider interface defines the contract between extensions and
+     * the [IntelliSense](https://code.visualstudio.com/docs/editor/editingevolved#_intellisense).
+     *
+     * When computing *complete* completion items is expensive, providers can optionally implement
+     * the `resolveCompletionItem`-function. In that case it is enough to return completion
+     * items with a [label](#CompletionItem.label) from the
+     * [provideCompletionItems](#CompletionItemProvider.provideCompletionItems)-function. Subsequently,
+     * when a completion item is shown in the UI and gains focus this provider is asked to resolve
+     * the item, like adding [doc-comment](#CompletionItem.documentation) or [details](#CompletionItem.detail).
+     */
+    export interface CompletionItemProvider {
+        triggerCharacters?: string[];
+        /**
+         * Provide completion items for the given position and document.
+         */
+        provideCompletionItems(model: editor.IReadOnlyModel, position: Position, token: CancellationToken): CompletionItem[] | Thenable<CompletionItem[]> | CompletionList | Thenable<CompletionList>;
+        /**
+         * Given a completion item fill in more data, like [doc-comment](#CompletionItem.documentation)
+         * or [details](#CompletionItem.detail).
+         *
+         * The editor will only resolve a completion item once.
+         */
+        resolveCompletionItem?(item: CompletionItem, token: CancellationToken): CompletionItem | Thenable<CompletionItem>;
+    }
+
+    /**
+     * Describes how comments for a language work.
+     */
+    export interface CommentRule {
+        /**
+         * The line comment token, like `// this is a comment`
+         */
+        lineComment?: string;
+        /**
+         * The block comment character pair, like `/* block comment *&#47;`
+         */
+        blockComment?: CharacterPair;
+    }
+
+    /**
+     * The language configuration interfaces defines the contract between extensions
+     * and various editor features, like automatic bracket insertion, automatic indentation etc.
+     */
+    export interface LanguageConfiguration {
+        /**
+         * The language's comment settings.
+         */
+        comments?: CommentRule;
+        /**
+         * The language's brackets.
+         * This configuration implicitly affects pressing Enter around these brackets.
+         */
+        brackets?: CharacterPair[];
+        /**
+         * The language's word definition.
+         * If the language supports Unicode identifiers (e.g. JavaScript), it is preferable
+         * to provide a word definition that uses exclusion of known separators.
+         * e.g.: A regex that matches anything except known separators (and dot is allowed to occur in a floating point number):
+         *   /(-?\d*\.\d\w*)|([^\`\~\!\@\#\%\^\&\*\(\)\-\=\+\[\{\]\}\\\|\;\:\'\"\,\.\<\>\/\?\s]+)/g
+         */
+        wordPattern?: RegExp;
+        /**
+         * The language's indentation settings.
+         */
+        indentationRules?: IndentationRule;
+        /**
+             * The language's rules to be evaluated when pressing Enter.
+             */
+        onEnterRules?: OnEnterRule[];
+        /**
+         * The language's auto closing pairs. The 'close' character is automatically inserted with the
+         * 'open' character is typed. If not set, the configured brackets will be used.
+         */
+        autoClosingPairs?: IAutoClosingPairConditional[];
+        /**
+         * The language's surrounding pairs. When the 'open' character is typed on a selection, the
+         * selected string is surrounded by the open and close characters. If not set, the autoclosing pairs
+         * settings will be used.
+         */
+        surroundingPairs?: IAutoClosingPair[];
+        /**
+         * **Deprecated** Do not use.
+         *
+         * @deprecated Will be replaced by a better API soon.
+         */
+        __electricCharacterSupport?: IBracketElectricCharacterContribution;
+    }
+
+    /**
+     * Describes indentation rules for a language.
+     */
+    export interface IndentationRule {
+        /**
+         * If a line matches this pattern, then all the lines after it should be unindendented once (until another rule matches).
+         */
+        decreaseIndentPattern: RegExp;
+        /**
+         * If a line matches this pattern, then all the lines after it should be indented once (until another rule matches).
+         */
+        increaseIndentPattern: RegExp;
+        /**
+         * If a line matches this pattern, then **only the next line** after it should be indented once.
+         */
+        indentNextLinePattern?: RegExp;
+        /**
+         * If a line matches this pattern, then its indentation should not be changed and it should not be evaluated against the other rules.
+         */
+        unIndentedLinePattern?: RegExp;
+    }
+
+    /**
+     * Describes a rule to be evaluated when pressing Enter.
+     */
+    export interface OnEnterRule {
+        /**
+         * This rule will only execute if the text before the cursor matches this regular expression.
+         */
+        beforeText: RegExp;
+        /**
+         * This rule will only execute if the text after the cursor matches this regular expression.
+         */
+        afterText?: RegExp;
+        /**
+         * The action to execute.
+         */
+        action: EnterAction;
+    }
+
+    export interface IBracketElectricCharacterContribution {
+        docComment?: IDocComment;
+        embeddedElectricCharacters?: string[];
+    }
+
+    /**
+     * Definition of documentation comments (e.g. Javadoc/JSdoc)
+     */
+    export interface IDocComment {
+        scope: string;
+        open: string;
+        lineStart: string;
+        close?: string;
+    }
+
+    /**
+     * A mode. Will soon be obsolete.
+     */
+    export interface IMode {
+        getId(): string;
+    }
+
+    /**
+     * A token. Only supports a single scope, but will soon support a scope array.
+     */
+    export interface IToken {
+        startIndex: number;
+        scopes: string | string[];
+    }
+
+    /**
+     * The result of a line tokenization.
+     */
+    export interface ILineTokens {
+        /**
+         * The list of tokens on the line.
+         */
+        tokens: IToken[];
+        /**
+         * The tokenization end state.
+         * A pointer will be held to this and the object should not be modified by the tokenizer after the pointer is returned.
+         */
+        endState: IState;
+        /**
+         * An optional promise to force the model to retokenize this line (e.g. missing information at the point of tokenization)
+         */
+        retokenize?: Promise<void>;
+    }
+
+    /**
+     * The state of the tokenizer between two lines.
+     * It is useful to store flags such as in multiline comment, etc.
+     * The model will clone the previous line's state and pass it in to tokenize the next line.
+     */
+    export interface IState {
+        clone(): IState;
+        equals(other: IState): boolean;
+    }
+
+    /**
+     * A "manual" provider of tokens.
+     */
+    export interface TokensProvider {
+        /**
+         * The initial state of a language. Will be the state passed in to tokenize the first line.
+         */
+        getInitialState(): IState;
+        /**
+         * Tokenize a line given the state at the beginning of the line.
+         */
+        tokenize(line: string, state: IState): ILineTokens;
+    }
+
+    /**
+     * A hover represents additional information for a symbol or word. Hovers are
+     * rendered in a tooltip-like widget.
+     */
+    export interface Hover {
+        /**
+         * The contents of this hover.
+         */
+        htmlContent: IHTMLContentElement[];
+        /**
+         * The range to which this hover applies. When missing, the
+         * editor will use the range at the current position or the
+         * current position itself.
+         */
+        range: IRange;
+    }
+
+    /**
+     * The hover provider interface defines the contract between extensions and
+     * the [hover](https://code.visualstudio.com/docs/editor/editingevolved#_hover)-feature.
+     */
+    export interface HoverProvider {
+        /**
+         * Provide a hover for the given position and document. Multiple hovers at the same
+         * position will be merged by the editor. A hover can have a range which defaults
+         * to the word range at the position when omitted.
+         */
+        provideHover(model: editor.IReadOnlyModel, position: Position, token: CancellationToken): Hover | Thenable<Hover>;
+    }
+
+    /**
+     * Interface used to quick fix typing errors while accesing member fields.
+     */
+    export interface CodeAction {
+        command: Command;
+        score: number;
+    }
+
+    /**
+     * The code action interface defines the contract between extensions and
+     * the [light bulb](https://code.visualstudio.com/docs/editor/editingevolved#_code-action) feature.
+     */
+    export interface CodeActionProvider {
+        /**
+         * Provide commands for the given document and range.
+         */
+        provideCodeActions(model: editor.IReadOnlyModel, range: Range, token: CancellationToken): CodeAction[] | Thenable<CodeAction[]>;
+    }
+
+    /**
+     * Represents a parameter of a callable-signature. A parameter can
+     * have a label and a doc-comment.
+     */
+    export interface ParameterInformation {
+        /**
+         * The label of this signature. Will be shown in
+         * the UI.
+         */
+        label: string;
+        /**
+         * The human-readable doc-comment of this signature. Will be shown
+         * in the UI but can be omitted.
+         */
+        documentation: string;
+    }
+
+    /**
+     * Represents the signature of something callable. A signature
+     * can have a label, like a function-name, a doc-comment, and
+     * a set of parameters.
+     */
+    export interface SignatureInformation {
+        /**
+         * The label of this signature. Will be shown in
+         * the UI.
+         */
+        label: string;
+        /**
+         * The human-readable doc-comment of this signature. Will be shown
+         * in the UI but can be omitted.
+         */
+        documentation: string;
+        /**
+         * The parameters of this signature.
+         */
+        parameters: ParameterInformation[];
+    }
+
+    /**
+     * Signature help represents the signature of something
+     * callable. There can be multiple signatures but only one
+     * active and only one active parameter.
+     */
+    export interface SignatureHelp {
+        /**
+         * One or more signatures.
+         */
+        signatures: SignatureInformation[];
+        /**
+         * The active signature.
+         */
+        activeSignature: number;
+        /**
+         * The active parameter of the active signature.
+         */
+        activeParameter: number;
+    }
+
+    /**
+     * The signature help provider interface defines the contract between extensions and
+     * the [parameter hints](https://code.visualstudio.com/docs/editor/editingevolved#_parameter-hints)-feature.
+     */
+    export interface SignatureHelpProvider {
+        signatureHelpTriggerCharacters: string[];
+        /**
+         * Provide help for the signature at the given position and document.
+         */
+        provideSignatureHelp(model: editor.IReadOnlyModel, position: Position, token: CancellationToken): SignatureHelp | Thenable<SignatureHelp>;
+    }
+
+    /**
+     * A document highlight kind.
+     */
+    export enum DocumentHighlightKind {
+        /**
+         * A textual occurrence.
+         */
+        Text = 0,
+        /**
+         * Read-access of a symbol, like reading a variable.
+         */
+        Read = 1,
+        /**
+         * Write-access of a symbol, like writing to a variable.
+         */
+        Write = 2,
+    }
+
+    /**
+     * A document highlight is a range inside a text document which deserves
+     * special attention. Usually a document highlight is visualized by changing
+     * the background color of its range.
+     */
+    export interface DocumentHighlight {
+        /**
+         * The range this highlight applies to.
+         */
+        range: IRange;
+        /**
+         * The highlight kind, default is [text](#DocumentHighlightKind.Text).
+         */
+        kind: DocumentHighlightKind;
+    }
+
+    /**
+     * The document highlight provider interface defines the contract between extensions and
+     * the word-highlight-feature.
+     */
+    export interface DocumentHighlightProvider {
+        /**
+         * Provide a set of document highlights, like all occurrences of a variable or
+         * all exit-points of a function.
+         */
+        provideDocumentHighlights(model: editor.IReadOnlyModel, position: Position, token: CancellationToken): DocumentHighlight[] | Thenable<DocumentHighlight[]>;
+    }
+
+    /**
+     * Value-object that contains additional information when
+     * requesting references.
+     */
+    export interface ReferenceContext {
+        /**
+         * Include the declaration of the current symbol.
+         */
+        includeDeclaration: boolean;
+    }
+
+    /**
+     * The reference provider interface defines the contract between extensions and
+     * the [find references](https://code.visualstudio.com/docs/editor/editingevolved#_peek)-feature.
+     */
+    export interface ReferenceProvider {
+        /**
+         * Provide a set of project-wide references for the given position and document.
+         */
+        provideReferences(model: editor.IReadOnlyModel, position: Position, context: ReferenceContext, token: CancellationToken): Location[] | Thenable<Location[]>;
+    }
+
+    /**
+     * Represents a location inside a resource, such as a line
+     * inside a text file.
+     */
+    export interface Location {
+        /**
+         * The resource identifier of this location.
+         */
+        uri: Uri;
+        /**
+         * The document range of this locations.
+         */
+        range: IRange;
+    }
+
+    /**
+     * The definition of a symbol represented as one or many [locations](#Location).
+     * For most programming languages there is only one location at which a symbol is
+     * defined.
+     */
+    export type Definition = Location | Location[];
+
+    /**
+     * The definition provider interface defines the contract between extensions and
+     * the [go to definition](https://code.visualstudio.com/docs/editor/editingevolved#_go-to-definition)
+     * and peek definition features.
+     */
+    export interface DefinitionProvider {
+        /**
+         * Provide the definition of the symbol at the given position and document.
+         */
+        provideDefinition(model: editor.IReadOnlyModel, position: Position, token: CancellationToken): Definition | Thenable<Definition>;
+    }
+
+    /**
+     * A symbol kind.
+     */
+    export enum SymbolKind {
+        File = 0,
+        Module = 1,
+        Namespace = 2,
+        Package = 3,
+        Class = 4,
+        Method = 5,
+        Property = 6,
+        Field = 7,
+        Constructor = 8,
+        Enum = 9,
+        Interface = 10,
+        Function = 11,
+        Variable = 12,
+        Constant = 13,
+        String = 14,
+        Number = 15,
+        Boolean = 16,
+        Array = 17,
+        Object = 18,
+        Key = 19,
+        Null = 20,
+    }
+
+    /**
+     * Represents information about programming constructs like variables, classes,
+     * interfaces etc.
+     */
+    export interface SymbolInformation {
+        /**
+         * The name of this symbol.
+         */
+        name: string;
+        /**
+         * The name of the symbol containing this symbol.
+         */
+        containerName?: string;
+        /**
+         * The kind of this symbol.
+         */
+        kind: SymbolKind;
+        /**
+         * The location of this symbol.
+         */
+        location: Location;
+    }
+
+    /**
+     * The document symbol provider interface defines the contract between extensions and
+     * the [go to symbol](https://code.visualstudio.com/docs/editor/editingevolved#_goto-symbol)-feature.
+     */
+    export interface DocumentSymbolProvider {
+        /**
+         * Provide symbol information for the given document.
+         */
+        provideDocumentSymbols(model: editor.IReadOnlyModel, token: CancellationToken): SymbolInformation[] | Thenable<SymbolInformation[]>;
+    }
+
+    /**
+     * Interface used to format a model
+     */
+    export interface FormattingOptions {
+        /**
+         * Size of a tab in spaces.
+         */
+        tabSize: number;
+        /**
+         * Prefer spaces over tabs.
+         */
+        insertSpaces: boolean;
+    }
+
+    /**
+     * The document formatting provider interface defines the contract between extensions and
+     * the formatting-feature.
+     */
+    export interface DocumentFormattingEditProvider {
+        /**
+         * Provide formatting edits for a whole document.
+         */
+        provideDocumentFormattingEdits(model: editor.IReadOnlyModel, options: FormattingOptions, token: CancellationToken): editor.ISingleEditOperation[] | Thenable<editor.ISingleEditOperation[]>;
+    }
+
+    /**
+     * The document formatting provider interface defines the contract between extensions and
+     * the formatting-feature.
+     */
+    export interface DocumentRangeFormattingEditProvider {
+        /**
+         * Provide formatting edits for a range in a document.
+         *
+         * The given range is a hint and providers can decide to format a smaller
+         * or larger range. Often this is done by adjusting the start and end
+         * of the range to full syntax nodes.
+         */
+        provideDocumentRangeFormattingEdits(model: editor.IReadOnlyModel, range: Range, options: FormattingOptions, token: CancellationToken): editor.ISingleEditOperation[] | Thenable<editor.ISingleEditOperation[]>;
+    }
+
+    /**
+     * The document formatting provider interface defines the contract between extensions and
+     * the formatting-feature.
+     */
+    export interface OnTypeFormattingEditProvider {
+        autoFormatTriggerCharacters: string[];
+        /**
+         * Provide formatting edits after a character has been typed.
+         *
+         * The given position and character should hint to the provider
+         * what range the position to expand to, like find the matching `{`
+         * when `}` has been entered.
+         */
+        provideOnTypeFormattingEdits(model: editor.IReadOnlyModel, position: Position, ch: string, options: FormattingOptions, token: CancellationToken): editor.ISingleEditOperation[] | Thenable<editor.ISingleEditOperation[]>;
+    }
+
+    /**
+     * A link inside the editor.
+     */
+    export interface ILink {
+        range: IRange;
+        url: string;
+    }
+
+    /**
+     * A provider of links.
+     */
+    export interface LinkProvider {
+        provideLinks(model: editor.IReadOnlyModel, token: CancellationToken): ILink[] | Thenable<ILink[]>;
+    }
+
+    export interface IResourceEdit {
+        resource: Uri;
+        range: IRange;
+        newText: string;
+    }
+
+    export interface WorkspaceEdit {
+        edits: IResourceEdit[];
+        rejectReason?: string;
+    }
+
+    export interface RenameProvider {
+        provideRenameEdits(model: editor.IReadOnlyModel, position: Position, newName: string, token: CancellationToken): WorkspaceEdit | Thenable<WorkspaceEdit>;
+    }
+
+    export interface Command {
+        id: string;
+        title: string;
+        arguments?: any[];
+    }
+
+    export interface ICodeLensSymbol {
+        range: IRange;
+        id?: string;
+        command?: Command;
+    }
+
+    export interface CodeLensProvider {
+        provideCodeLenses(model: editor.IReadOnlyModel, token: CancellationToken): ICodeLensSymbol[] | Thenable<ICodeLensSymbol[]>;
+        resolveCodeLens?(model: editor.IReadOnlyModel, codeLens: ICodeLensSymbol, token: CancellationToken): ICodeLensSymbol | Thenable<ICodeLensSymbol>;
+    }
+
+    /**
+     * A tuple of two characters, like a pair of
+     * opening and closing brackets.
+     */
+    export type CharacterPair = [string, string];
+
+    export interface IAutoClosingPairConditional extends IAutoClosingPair {
+        notIn?: string[];
+    }
+
+    /**
+     * Describes what to do with the indentation when pressing Enter.
+     */
+    export enum IndentAction {
+        /**
+         * Insert new line and copy the previous line's indentation.
+         */
+        None = 0,
+        /**
+         * Insert new line and indent once (relative to the previous line's indentation).
+         */
+        Indent = 1,
+        /**
+         * Insert two new lines:
+         *  - the first one indented which will hold the cursor
+         *  - the second one at the same indentation level
+         */
+        IndentOutdent = 2,
+        /**
+         * Insert new line and outdent once (relative to the previous line's indentation).
+         */
+        Outdent = 3,
+    }
+
+    /**
+     * Describes what to do when pressing Enter.
+     */
+    export interface EnterAction {
+        /**
+         * Describe what to do with the indentation.
+         */
+        indentAction: IndentAction;
+        /**
+         * Describes text to be appended after the new line and after the indentation.
+         */
+        appendText?: string;
+        /**
+         * Describes the number of characters to remove from the new line's indentation.
+         */
+        removeText?: number;
+    }
+
+    export interface IAutoClosingPair {
+        open: string;
+        close: string;
+    }
+
+    export interface ILanguageExtensionPoint {
+        id: string;
+        extensions?: string[];
+        filenames?: string[];
+        filenamePatterns?: string[];
+        firstLine?: string;
+        aliases?: string[];
+        mimetypes?: string[];
+        configuration?: string;
+    }
+    /**
+     * A Monarch language definition
+     */
+    export interface IMonarchLanguage {
+        /**
+         * map from string to ILanguageRule[]
+         */
+        tokenizer: {
+            [name: string]: IMonarchLanguageRule[];
+        };
+        /**
+         * is the language case insensitive?
+         */
+        ignoreCase?: boolean;
+        /**
+         * if no match in the tokenizer assign this token class (default 'source')
+         */
+        defaultToken?: string;
+        /**
+         * for example [['{','}','delimiter.curly']]
+         */
+        brackets?: IMonarchLanguageBracket[];
+        /**
+         * start symbol in the tokenizer (by default the first entry is used)
+         */
+        start?: string;
+        /**
+         * attach this to every token class (by default '.' + name)
+         */
+        tokenPostfix: string;
+    }
+
+    /**
+     * A rule is either a regular expression and an action
+     * 		shorthands: [reg,act] == { regex: reg, action: act}
+     *		and       : [reg,act,nxt] == { regex: reg, action: act{ next: nxt }}
+     */
+    export interface IMonarchLanguageRule {
+        /**
+         * match tokens
+         */
+        regex?: string | RegExp;
+        /**
+         * action to take on match
+         */
+        action?: IMonarchLanguageAction;
+        /**
+         * or an include rule. include all rules from the included state
+         */
+        include?: string;
+    }
+
+    /**
+     * An action is either an array of actions...
+     * ... or a case statement with guards...
+     * ... or a basic action with a token value.
+     */
+    export interface IMonarchLanguageAction {
+        /**
+         * array of actions for each parenthesized match group
+         */
+        group?: IMonarchLanguageAction[];
+        /**
+         * map from string to ILanguageAction
+         */
+        cases?: Object;
+        /**
+         * token class (ie. css class) (or "@brackets" or "@rematch")
+         */
+        token?: string;
+        /**
+         * the next state to push, or "@push", "@pop", "@popall"
+         */
+        next?: string;
+        /**
+         * switch to this state
+         */
+        switchTo?: string;
+        /**
+         * go back n characters in the stream
+         */
+        goBack?: number;
+        /**
+         * @open or @close
+         */
+        bracket?: string;
+        /**
+         * switch to embedded language (useing the mimetype) or get out using "@pop"
+         */
+        nextEmbedded?: string;
+        /**
+         * log a message to the browser console window
+         */
+        log?: string;
+    }
+
+    /**
+     * This interface can be shortened as an array, ie. ['{','}','delimiter.curly']
+     */
+    export interface IMonarchLanguageBracket {
+        /**
+         * open bracket
+         */
+        open: string;
+        /**
+         * closeing bracket
+         */
+        close: string;
+        /**
+         * token class
+         */
+        token: string;
+    }
+
+}
+
+declare module monaco.worker {
+
+
+    export interface IMirrorModel {
+        uri: Uri;
+        version: number;
+        getText(): string;
+    }
+
+    /**
+     * Get all available mirror models in this worker.
+     */
+    export function getMirrorModels(): IMirrorModel[];
+
+}
+
+declare module monaco.languages.typescript {
+
+    export enum ModuleKind {
+        None = 0,
+        CommonJS = 1,
+        AMD = 2,
+        UMD = 3,
+        System = 4,
+        ES6 = 5,
+        ES2015 = 5,
+    }
+
+    export enum JsxEmit {
+        None = 0,
+        Preserve = 1,
+        React = 2,
+    }
+
+    export enum NewLineKind {
+        CarriageReturnLineFeed = 0,
+        LineFeed = 1,
+    }
+
+    export enum ScriptTarget {
+        ES3 = 0,
+        ES5 = 1,
+        ES6 = 2,
+        ES2015 = 2,
+        Latest = 2,
+    }
+
+    export enum ModuleResolutionKind {
+        Classic = 1,
+        NodeJs = 2,
+    }
+
+    interface CompilerOptions {
+        allowNonTsExtensions?: boolean;
+        charset?: string;
+        declaration?: boolean;
+        diagnostics?: boolean;
+        emitBOM?: boolean;
+        help?: boolean;
+        init?: boolean;
+        inlineSourceMap?: boolean;
+        inlineSources?: boolean;
+        jsx?: JsxEmit;
+        reactNamespace?: string;
+        listFiles?: boolean;
+        locale?: string;
+        mapRoot?: string;
+        module?: ModuleKind;
+        newLine?: NewLineKind;
+        noEmit?: boolean;
+        noEmitHelpers?: boolean;
+        noEmitOnError?: boolean;
+        noErrorTruncation?: boolean;
+        noImplicitAny?: boolean;
+        noLib?: boolean;
+        noResolve?: boolean;
+        out?: string;
+        outFile?: string;
+        outDir?: string;
+        preserveConstEnums?: boolean;
+        project?: string;
+        removeComments?: boolean;
+        rootDir?: string;
+        sourceMap?: boolean;
+        sourceRoot?: string;
+        suppressExcessPropertyErrors?: boolean;
+        suppressImplicitAnyIndexErrors?: boolean;
+        target?: ScriptTarget;
+        version?: boolean;
+        watch?: boolean;
+        isolatedModules?: boolean;
+        experimentalDecorators?: boolean;
+        emitDecoratorMetadata?: boolean;
+        moduleResolution?: ModuleResolutionKind;
+        allowUnusedLabels?: boolean;
+        allowUnreachableCode?: boolean;
+        noImplicitReturns?: boolean;
+        noFallthroughCasesInSwitch?: boolean;
+        forceConsistentCasingInFileNames?: boolean;
+        allowSyntheticDefaultImports?: boolean;
+        allowJs?: boolean;
+        noImplicitUseStrict?: boolean;
+        disableSizeLimit?: boolean;
+        [option: string]: string | number | boolean;
+    }
+
+    export interface DiagnosticsOptions {
+        noSemanticValidation?: boolean;
+        noSyntaxValidation?: boolean;
+    }
+
+    export interface LanguageServiceDefaults {
+        onDidChange: IEvent<LanguageServiceDefaults>;
+        extraLibs: { [path:string]: string; };
+        addExtraLib(content: string, filePath?: string): IDisposable;
+        compilerOptions: CompilerOptions;
+        setCompilerOptions(options: CompilerOptions): void;
+        diagnosticsOptions: DiagnosticsOptions;
+        setDiagnosticsOptions(options: DiagnosticsOptions): void;
+    }
+
+    export var typescriptDefaults: LanguageServiceDefaults;
+    export var javascriptDefaults: LanguageServiceDefaults;
+}