vscode.proposed.d.ts 6.8 KB
Newer Older
1 2 3 4 5 6 7 8 9
/*---------------------------------------------------------------------------------------------
 *  Copyright (c) Microsoft Corporation. All rights reserved.
 *  Licensed under the MIT License. See License.txt in the project root for license information.
 *--------------------------------------------------------------------------------------------*/

// This is the place for API experiments and proposal.

declare module 'vscode' {

10
	export interface OpenDialogOptions {
11
		uri?: Uri;
12 13 14 15
		openFiles?: boolean;
		openFolders?: boolean;
		openMany?: boolean;
	}
16

17
	export namespace window {
D
Dirk Baeumer 已提交
18

19
		export function showOpenDialog(options: OpenDialogOptions): Thenable<Uri[]>;
20 21
	}

J
Johannes Rieken 已提交
22 23 24 25
	// todo@joh discover files etc
	export interface FileSystemProvider {
		// todo@joh -> added, deleted, renamed, changed
		onDidChange: Event<Uri>;
D
Dirk Baeumer 已提交
26

J
Johannes Rieken 已提交
27 28
		resolveContents(resource: Uri): string | Thenable<string>;
		writeContents(resource: Uri, contents: string): void | Thenable<void>;
29

30 31 32
		// -- search
		// todo@joh - extract into its own provider?
		findFiles(query: string, progress: Progress<Uri>, token?: CancellationToken): Thenable<void>;
33 34
	}

35
	export namespace workspace {
J
Johannes Rieken 已提交
36
		export function registerFileSystemProvider(authority: string, provider: FileSystemProvider): Disposable;
37 38
	}

39 40 41 42
	export namespace window {

		export function sampleFunction(): Thenable<any>;
	}
P
Pine Wu 已提交
43

J
Joao Moreno 已提交
44 45 46
	/**
	 * The contiguous set of modified lines in a diff.
	 */
J
Joao Moreno 已提交
47 48 49 50 51 52 53
	export interface LineChange {
		readonly originalStartLineNumber: number;
		readonly originalEndLineNumber: number;
		readonly modifiedStartLineNumber: number;
		readonly modifiedEndLineNumber: number;
	}

54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
	export namespace commands {

		/**
		 * Registers a diff information command that can be invoked via a keyboard shortcut,
		 * a menu item, an action, or directly.
		 *
		 * Diff information commands are different from ordinary [commands](#commands.registerCommand) as
		 * they only execute when there is an active diff editor when the command is called, and the diff
		 * information has been computed. Also, the command handler of an editor command has access to
		 * the diff information.
		 *
		 * @param command A unique identifier for the command.
		 * @param callback A command handler function with access to the [diff information](#LineChange).
		 * @param thisArg The `this` context used when invoking the handler function.
		 * @return Disposable which unregisters this command on disposal.
		 */
		export function registerDiffInformationCommand(command: string, callback: (diff: LineChange[], ...args: any[]) => any, thisArg?: any): Disposable;
	}
D
Daniel Imms 已提交
72

J
Joao Moreno 已提交
73 74 75
	/**
	 * Represents a color in RGBA space.
	 */
76
	export class Color {
J
Joao Moreno 已提交
77 78 79 80

		/**
		 * The red component of this color in the range [0-1].
		 */
81
		readonly red: number;
J
Joao Moreno 已提交
82 83 84 85

		/**
		 * The green component of this color in the range [0-1].
		 */
86
		readonly green: number;
J
Joao Moreno 已提交
87 88 89 90

		/**
		 * The blue component of this color in the range [0-1].
		 */
91 92
		readonly blue: number;

J
Joao Moreno 已提交
93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108
		/**
		 * The alpha component of this color in the range [0-1].
		 */
		readonly alpha: number;

		constructor(red: number, green: number, blue: number, alpha: number);

		/**
		 * Creates a color from the HSLA space.
		 *
		 * @param hue The hue component in the range [0-1].
		 * @param saturation The saturation component in the range [0-1].
		 * @param luminance The luminance component in the range [0-1].
		 * @param alpha The alpha component in the range [0-1].
		 */
		static fromHSLA(hue: number, saturation: number, luminance: number, alpha: number): Color;
109

110 111 112 113 114 115
		/**
		 * Creates a color by from a hex string. Supported formats are: #RRGGBB, #RRGGBBAA, #RGB, #RGBA.
		 * <code>null</code> is returned if the string does not match one of the supported formats.
		 * @param hex a string to parse
		 */
		static fromHex(hex: string): Color | null;
116 117
	}

J
Joao Moreno 已提交
118 119 120 121 122 123 124 125 126 127 128 129 130 131 132
	/**
	 * A color format is either a single format or a combination of two
	 * formats: an opaque one and a transparent one. The format itself
	 * is a string representation of how the color can be formatted. It
	 * supports the use of placeholders, similar to how snippets work.
	 * Each placeholder, surrounded by curly braces `{}`, requires a
	 * variable name and can optionally specify a number format and range
	 * for that variable's value.
	 *
	 * Supported variables:
	 *  - `red`
	 *  - `green`
	 *  - `blue`
	 *  - `hue`
	 *  - `saturation`
J
Joao Moreno 已提交
133
	 *  - `luminance`
J
Joao Moreno 已提交
134 135 136 137 138 139
	 *  - `alpha`
	 *
	 * Supported number formats:
	 *  - `f`, float with 2 decimal points. This is the default format. Default range is `[0-1]`.
	 *  - `Xf`, float with `X` decimal points. Default range is `[0-1]`.
	 *  - `d`, decimal. Default range is `[0-255]`.
J
Joao Moreno 已提交
140
	 *  - `x`, `X`, hexadecimal. Default range is `[00-FF]`.
J
Joao Moreno 已提交
141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159
	 *
	 * The default number format is float. The default number range is `[0-1]`.
	 *
	 * As an example, take the color `Color(1, 0.5, 0, 1)`. Here's how
	 * different formats would format it:
	 *
	 *  - CSS RGB
	 *   - Format: `rgb({red:d[0-255]}, {green:d[0-255]}, {blue:d[0-255]})`
	 *   - Output: `rgb(255, 127, 0)`
	 *
	 *  - CSS RGBA
	 *   - Format: `rgba({red:d[0-255]}, {green:d[0-255]}, {blue:d[0-255]}, {alpha})`
	 *   - Output: `rgba(255, 127, 0, 1)`
	 *
	 *  - CSS Hexadecimal
	 *   - Format: `#{red:X}{green:X}{blue:X}`
	 *   - Output: `#FF7F00`
	 *
	 *  - CSS HSLA
J
Joao Moreno 已提交
160
	 *   - Format: `hsla({hue:d[0-360]}, {saturation:d[0-100]}%, {luminance:d[0-100]}%, {alpha})`
J
Joao Moreno 已提交
161 162
	 *   - Output: `hsla(30, 100%, 50%, 1)`
	 */
J
Joao Moreno 已提交
163 164
	export type ColorFormat = string | { opaque: string, transparent: string };

J
Joao Moreno 已提交
165 166 167 168 169 170 171 172
	/**
	 * Represents a color range from a document.
	 */
	export class ColorRange {

		/**
		 * The range in the document where this color appers.
		 */
173 174
		range: Range;

J
Joao Moreno 已提交
175 176 177
		/**
		 * The actual color value for this color range.
		 */
178 179
		color: Color;

J
Joao Moreno 已提交
180 181 182
		/**
		 * The other formats this color range supports the color to be formatted in.
		 */
J
Joao Moreno 已提交
183
		availableFormats: ColorFormat[];
184

J
Joao Moreno 已提交
185 186 187 188 189 190 191
		/**
		 * Creates a new color range.
		 *
		 * @param range The range the color appears in. Must not be empty.
		 * @param color The value of the color.
		 * @param format The format in which this color is currently formatted.
		 */
192
		constructor(range: Range, color: Color, availableFormats: ColorFormat[]);
M
Michel Kaporin 已提交
193
	}
194

J
Joao Moreno 已提交
195 196 197 198
	/**
	 * The document color provider defines the contract between extensions and feature of
	 * picking and modifying colors in the editor.
	 */
199
	export interface DocumentColorProvider {
J
Joao Moreno 已提交
200 201 202 203 204 205 206 207 208
		/**
		 * Provide colors for the given document.
		 *
		 * @param document The document in which the command was invoked.
		 * @param token A cancellation token.
		 * @return An array of [color ranges](#ColorRange) or a thenable that resolves to such. The lack of a result
		 * can be signaled by returning `undefined`, `null`, or an empty array.
		 */
		provideDocumentColors(document: TextDocument, token: CancellationToken): ProviderResult<ColorRange[]>;
209 210 211 212 213
	}

	export namespace languages {
		export function registerColorProvider(selector: DocumentSelector, provider: DocumentColorProvider): Disposable;
	}
214
}