vscode.proposed.d.ts 10.9 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 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
	// export enum FileErrorCodes {
	// 	/**
	// 	 * Not owner.
	// 	 */
	// 	EPERM = 1,
	// 	/**
	// 	 * No such file or directory.
	// 	 */
	// 	ENOENT = 2,
	// 	/**
	// 	 * I/O error.
	// 	 */
	// 	EIO = 5,
	// 	/**
	// 	 * Permission denied.
	// 	 */
	// 	EACCES = 13,
	// 	/**
	// 	 * File exists.
	// 	 */
	// 	EEXIST = 17,
	// 	/**
	// 	 * Not a directory.
	// 	 */
	// 	ENOTDIR = 20,
	// 	/**
	// 	 * Is a directory.
	// 	 */
	// 	EISDIR = 21,
	// 	/**
	// 	 *  File too large.
	// 	 */
	// 	EFBIG = 27,
	// 	/**
	// 	 * No space left on device.
	// 	 */
	// 	ENOSPC = 28,
	// 	/**
	// 	 * Directory is not empty.
	// 	 */
	// 	ENOTEMPTY = 66,
	// 	/**
	// 	 * Invalid file handle.
	// 	 */
	// 	ESTALE = 70,
	// 	/**
	// 	 * Illegal NFS file handle.
	// 	 */
	// 	EBADHANDLE = 10001,
	// }

61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78
	export enum FileChangeType {
		Updated = 0,
		Added = 1,
		Deleted = 2
	}

	export interface FileChange {
		type: FileChangeType;
		resource: Uri;
	}

	export enum FileType {
		File = 0,
		Dir = 1,
		Symlink = 2
	}

	export interface FileStat {
79
		id: number | string;
80
		mtime: number;
J
Johannes Rieken 已提交
81
		// atime: number;
82 83 84 85
		size: number;
		type: FileType;
	}

J
Johannes Rieken 已提交
86 87 88 89 90 91 92
	export interface TextSearchQuery {
		pattern: string;
		isRegex?: boolean;
		isCaseSensitive?: boolean;
		isWordMatch?: boolean;
	}

93 94 95 96 97
	export interface TextSearchOptions {
		includes: GlobPattern[];
		excludes: GlobPattern[];
	}

J
Johannes Rieken 已提交
98
	export interface TextSearchResult {
99 100 101 102 103
		uri: Uri;
		range: Range;
		preview: { leading: string, matching: string, trailing: string };
	}

J
Johannes Rieken 已提交
104
	// todo@joh discover files etc
J
Johannes Rieken 已提交
105
	// todo@joh CancellationToken everywhere
J
Johannes Rieken 已提交
106
	// todo@joh add open/close calls?
J
Johannes Rieken 已提交
107
	export interface FileSystemProvider {
D
Dirk Baeumer 已提交
108

J
Johannes Rieken 已提交
109
		readonly onDidChange?: Event<FileChange[]>;
110

111 112
		// todo@joh - remove this
		readonly root?: Uri;
113

114 115
		// more...
		//
J
Johannes Rieken 已提交
116
		utimes(resource: Uri, mtime: number, atime: number): Thenable<FileStat>;
117

118
		stat(resource: Uri): Thenable<FileStat>;
119

120
		read(resource: Uri, offset: number, length: number, progress: Progress<Uint8Array>): Thenable<number>;
121

J
Johannes Rieken 已提交
122
		// todo@joh - have an option to create iff not exist
123 124 125 126
		// todo@remote
		// offset - byte offset to start
		// count - number of bytes to write
		// Thenable<number> - number of bytes actually written
127
		write(resource: Uri, content: Uint8Array): Thenable<void>;
128 129 130

		// todo@remote
		// Thenable<FileStat>
131 132 133 134 135
		move(resource: Uri, target: Uri): Thenable<FileStat>;

		// todo@remote
		// helps with performance bigly
		// copy?(from: Uri, to: Uri): Thenable<void>;
136 137 138

		// todo@remote
		// Thenable<FileStat>
139
		mkdir(resource: Uri): Thenable<FileStat>;
140

141 142 143 144 145
		readdir(resource: Uri): Thenable<[Uri, FileStat][]>;

		// todo@remote
		// ? merge both
		// ? recursive del
146
		rmdir(resource: Uri): Thenable<void>;
147 148 149 150
		unlink(resource: Uri): Thenable<void>;

		// todo@remote
		// create(resource: Uri): Thenable<FileStat>;
J
Johannes Rieken 已提交
151 152

		// find files by names
J
Johannes Rieken 已提交
153
		// todo@joh, move into its own provider
J
Johannes Rieken 已提交
154
		findFiles?(query: string, progress: Progress<Uri>, token: CancellationToken): Thenable<void>;
155
		provideTextSearchResults?(query: TextSearchQuery, options: TextSearchOptions, progress: Progress<TextSearchResult>, token: CancellationToken): Thenable<void>;
156 157
	}

158
	export namespace workspace {
159
		export function registerFileSystemProvider(scheme: string, provider: FileSystemProvider): Disposable;
160 161

		/**
B
Benjamin Pasero 已提交
162
		 * Updates the workspace folders of the currently opened workspace. This method allows to add, remove
B
Benjamin Pasero 已提交
163 164
		 * and change workspace folders a the same time. Use the [onDidChangeWorkspaceFolders()](#onDidChangeWorkspaceFolders)
		 * event to get notified when the workspace folders have been updated.
165
		 *
B
Benjamin Pasero 已提交
166
		 * **Example:** adding a new workspace folder at the end of workspace folders
167
		 * ```typescript
B
Benjamin Pasero 已提交
168
		 * workspace.updateWorkspaceFolders(workspace.workspaceFolders ? workspace.workspaceFolders.length : 0, null, { uri: ...});
169 170
		 * ```
		 *
B
Benjamin Pasero 已提交
171
		 * **Example:** removing the first workspace folder
172
		 * ```typescript
B
Benjamin Pasero 已提交
173
		 * workspace.updateWorkspaceFolders(0, 1);
174 175
		 * ```
		 *
B
Benjamin Pasero 已提交
176
		 * **Example:** replacing an existing workspace folder with a new one
177
		 * ```typescript
B
Benjamin Pasero 已提交
178
		 * workspace.updateWorkspaceFolders(0, 1, { uri: ...});
179 180
		 * ```
		 *
B
Benjamin Pasero 已提交
181 182 183 184
		 * It is valid to remove an existing workspace folder and add it again with a different name
		 * to rename that folder.
		 *
		 * Note: if the first workspace folder is added, removed or changed, all extensions will be restarted
185 186
		 * so that the (deprecated) `rootPath` property is updated to point to the first workspace
		 * folder.
B
Benjamin Pasero 已提交
187 188 189 190
		 *
		 * Note: it is not valid to call [updateWorkspaceFolders()](#updateWorkspaceFolders) multiple times
		 * without waiting for the [onDidChangeWorkspaceFolders()](#onDidChangeWorkspaceFolders) to fire.
		 *
B
Benjamin Pasero 已提交
191 192 193 194
		 * @param start the zero-based location in the list of currently opened [workspace folders](#WorkspaceFolder)
		 * from which to start deleting workspace folders.
		 * @param deleteCount the optional number of workspace folders to remove.
		 * @param workspaceFoldersToAdd the optional variable set of workspace folders to add in place of the deleted ones.
B
Benjamin Pasero 已提交
195
		 * Each workspace is identified with a mandatory URI and an optional name.
B
Benjamin Pasero 已提交
196 197
		 * @return true if the operation was successfully started and false otherwise if arguments were used that would result
		 * in invalid workspace folder state (e.g. 2 folders with the same URI).
198
		 */
199
		export function updateWorkspaceFolders(start: number, deleteCount: number, ...workspaceFoldersToAdd: { uri: Uri, name?: string }[]): boolean;
200 201
	}

202 203 204 205
	export namespace window {

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

J
Joao Moreno 已提交
207 208 209
	/**
	 * The contiguous set of modified lines in a diff.
	 */
J
Joao Moreno 已提交
210 211 212 213 214 215 216
	export interface LineChange {
		readonly originalStartLineNumber: number;
		readonly originalEndLineNumber: number;
		readonly modifiedStartLineNumber: number;
		readonly modifiedEndLineNumber: number;
	}

217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234
	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;
	}
235 236 237 238 239 240 241

	//#region decorations

	//todo@joh -> make class
	export interface DecorationData {
		priority?: number;
		title?: string;
242
		bubble?: boolean;
243 244
		abbreviation?: string;
		color?: ThemeColor;
245
		source?: string;
246 247
	}

248 249 250 251 252 253
	export interface SourceControlResourceDecorations {
		source?: string;
		letter?: string;
		color?: ThemeColor;
	}

254
	export interface DecorationProvider {
255
		onDidChangeDecorations: Event<undefined | Uri | Uri[]>;
256 257 258 259
		provideDecoration(uri: Uri, token: CancellationToken): ProviderResult<DecorationData>;
	}

	export namespace window {
260
		export function registerDecorationProvider(provider: DecorationProvider): Disposable;
261 262 263
	}

	//#endregion
264

265 266 267 268 269 270 271 272 273 274 275 276 277
	export namespace debug {

		/**
		 * List of breakpoints.
		 *
		 * @readonly
		 */
		export let breakpoints: Breakpoint[];

		/**
		 * An event that is emitted when a breakpoint is added, removed, or changed.
		 */
		export const onDidChangeBreakpoints: Event<BreakpointsChangeEvent>;
278 279 280 281 282

		/**
		 * Add breakpoints.
		 * @param breakpoints The breakpoints to add.
		*/
283
		export function addBreakpoints(breakpoints: Breakpoint[]): void;
284 285 286 287 288

		/**
		 * Remove breakpoints.
		 * @param breakpoints The breakpoints to remove.
		 */
289
		export function removeBreakpoints(breakpoints: Breakpoint[]): void;
290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311
	}

	/**
	 * An event describing a change to the set of [breakpoints](#debug.Breakpoint).
	 */
	export interface BreakpointsChangeEvent {
		/**
		 * Added breakpoints.
		 */
		readonly added: Breakpoint[];

		/**
		 * Removed breakpoints.
		 */
		readonly removed: Breakpoint[];

		/**
		 * Changed breakpoints.
		 */
		readonly changed: Breakpoint[];
	}

312 313 314 315
	/**
	 * The base class of all breakpoint types.
	 */
	export class Breakpoint {
316 317 318 319 320 321 322 323 324 325 326 327
		/**
		 * Is breakpoint enabled.
		 */
		readonly enabled: boolean;
		/**
		 * An optional expression for conditional breakpoints.
		 */
		readonly condition?: string;
		/**
		 * An optional expression that controls how many hits of the breakpoint are ignored.
		 */
		readonly hitCondition?: string;
328

329
		protected constructor(enabled?: boolean, condition?: string, hitCondition?: string);
330 331
	}

332 333 334 335
	/**
	 * A breakpoint specified by a source location.
	 */
	export class SourceBreakpoint extends Breakpoint {
336
		/**
337
		 * The source and line position of this breakpoint.
338
		 */
339
		readonly location: Location;
340

341 342 343 344
		/**
		 * Create a new breakpoint for a source location.
		 */
		constructor(location: Location, enabled?: boolean, condition?: string, hitCondition?: string);
345 346
	}

347 348 349 350
	/**
	 * A breakpoint specified by a function name.
	 */
	export class FunctionBreakpoint extends Breakpoint {
351 352 353 354
		/**
		 * The name of the function to which this breakpoint is attached.
		 */
		readonly functionName: string;
355

356 357 358 359
		/**
		 * Create a new function breakpoint.
		 */
		constructor(functionName: string, enabled?: boolean, condition?: string, hitCondition?: string);
360
	}
361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378

	/**
	 * The severity level of a log message
	 */
	export enum LogLevel {
		Trace = 1,
		Debug = 2,
		Info = 3,
		Warning = 4,
		Error = 5,
		Critical = 6,
		Off = 7
	}

	/**
	 * A logger for writing to an extension's log file, and accessing its dedicated log directory.
	 */
	export interface Logger {
379
		readonly onDidChangeLogLevel: Event<LogLevel>;
380
		readonly currentLevel: LogLevel;
381
		readonly logDirectory: Thenable<string>;
382 383 384 385 386 387 388 389 390 391 392

		trace(message: string, ...args: any[]): void;
		debug(message: string, ...args: any[]): void;
		info(message: string, ...args: any[]): void;
		warn(message: string, ...args: any[]): void;
		error(message: string | Error, ...args: any[]): void;
		critical(message: string | Error, ...args: any[]): void;
	}

	export interface ExtensionContext {
		/**
R
Rob Lourens 已提交
393
		 * This extension's logger
394 395 396
		 */
		logger: Logger;
	}
397 398 399 400 401 402 403 404 405 406 407 408

	export interface RenameInitialValue {
		range: Range;
		text?: string;
	}

	export namespace languages {

		export interface RenameProvider2 extends RenameProvider {
			resolveInitialRenameValue?(document: TextDocument, position: Position, token: CancellationToken): ProviderResult<RenameInitialValue>;
		}
	}
J
Johannes Rieken 已提交
409
}