extHost.protocol.ts 31.3 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.
 *--------------------------------------------------------------------------------------------*/
'use strict';

import {
	createMainContextProxyIdentifier as createMainId,
	createExtHostContextProxyIdentifier as createExtId,
A
Alex Dima 已提交
10
	ProxyIdentifier,
11 12
	IRPCProtocol,
	ProxyType
A
Alex Dima 已提交
13
} from 'vs/workbench/services/extensions/node/proxyIdentifier';
14

15 16
import * as vscode from 'vscode';

17
import URI, { UriComponents } from 'vs/base/common/uri';
18
import Severity from 'vs/base/common/severity';
19
import { TPromise } from 'vs/base/common/winjs.base';
20

21 22
import { IMarkerData } from 'vs/platform/markers/common/markers';
import { Position as EditorPosition } from 'vs/platform/editor/common/editor';
A
Alex Dima 已提交
23
import { IExtensionDescription } from 'vs/platform/extensions/common/extensions';
24 25
import { StatusbarAlignment as MainThreadStatusBarAlignment } from 'vs/platform/statusbar/common/statusbar';
import { ITelemetryInfo } from 'vs/platform/telemetry/common/telemetry';
26
import { ICommandHandlerDescription } from 'vs/platform/commands/common/commands';
J
Johannes Rieken 已提交
27
import { IProgressOptions, IProgressStep } from 'vs/platform/progress/common/progress';
28 29 30

import * as editorCommon from 'vs/editor/common/editorCommon';
import * as modes from 'vs/editor/common/modes';
A
Alex Dima 已提交
31
import { ITextSource } from 'vs/editor/common/model/textSource';
32

S
Sandeep Somavarapu 已提交
33
import { IConfigurationData, ConfigurationTarget, IConfigurationModel } from 'vs/platform/configuration/common/configuration';
34

J
Johannes Rieken 已提交
35
import { IPickOpenEntry, IPickOptions } from 'vs/platform/quickOpen/common/quickOpen';
36
import { SaveReason } from 'vs/workbench/services/textfile/common/textfiles';
37
import { TextEditorCursorStyle } from 'vs/editor/common/config/editorOptions';
38
import { EndOfLine, TextEditorLineNumbersStyle } from 'vs/workbench/api/node/extHostTypes';
39

40

41
import { TaskSet } from 'vs/workbench/parts/tasks/common/tasks';
A
Alex Dima 已提交
42
import { IModelChangedEvent } from 'vs/editor/common/model/mirrorModel';
43 44
import { IPosition } from 'vs/editor/common/core/position';
import { IRange } from 'vs/editor/common/core/range';
45
import { ISelection, Selection } from 'vs/editor/common/core/selection';
46

47
import { ITreeItem } from 'vs/workbench/common/views';
B
Benjamin Pasero 已提交
48
import { ThemeColor } from 'vs/platform/theme/common/themeService';
B
Benjamin Pasero 已提交
49 50
import { IDisposable } from 'vs/base/common/lifecycle';
import { SerializedError } from 'vs/base/common/errors';
51
import { IWorkspaceFolderData } from 'vs/platform/workspace/common/workspace';
52
import { IStat, IFileChange } from 'vs/platform/files/common/files';
S
Sandeep Somavarapu 已提交
53
import { ConfigurationScope } from 'vs/platform/configuration/common/configurationRegistry';
J
Joao Moreno 已提交
54
import { ParsedArgs } from 'vs/platform/environment/common/environment';
S
Sandeep Somavarapu 已提交
55

56
export interface IEnvironment {
57
	isExtensionDevelopmentDebug: boolean;
58 59
	enableProposedApiForAll: boolean;
	enableProposedApiFor: string | string[];
J
Johannes Rieken 已提交
60
	appRoot: string;
61 62 63 64 65 66 67
	appSettingsHome: string;
	disableExtensions: boolean;
	userExtensionsHome: string;
	extensionDevelopmentPath: string;
	extensionTestsPath: string;
}

68 69
export interface IWorkspaceData {
	id: string;
70
	name: string;
71
	folders: IWorkspaceFolderData[];
72 73
}

74 75 76
export interface IInitData {
	parentPid: number;
	environment: IEnvironment;
77
	workspace: IWorkspaceData;
78
	extensions: IExtensionDescription[];
S
Sandeep Somavarapu 已提交
79
	configuration: IConfigurationInitData;
80
	telemetryInfo: ITelemetryInfo;
81
	windowId: number;
J
Joao Moreno 已提交
82 83
	args: ParsedArgs;
	execPath: string;
84 85
}

S
Sandeep Somavarapu 已提交
86 87 88 89
export interface IConfigurationInitData extends IConfigurationData {
	configurationScopes: ConfigurationScope[];
}

90
export interface IWorkspaceConfigurationChangeEventData {
S
Sandeep Somavarapu 已提交
91 92
	changedConfiguration: IConfigurationModel;
	changedConfigurationByResource: { [folder: string]: IConfigurationModel };
93 94
}

A
Alex Dima 已提交
95
export interface IExtHostContext extends IRPCProtocol {
96 97
}

A
Alex Dima 已提交
98
export interface IMainContext extends IRPCProtocol {
99 100
}

101 102
// --- main thread

103
export interface MainThreadCommandsShape extends IDisposable {
104 105 106 107
	$registerCommand(id: string): TPromise<any>;
	$unregisterCommand(id: string): TPromise<any>;
	$executeCommand<T>(id: string, args: any[]): Thenable<T>;
	$getCommands(): Thenable<string[]>;
108 109
}

110
export interface MainThreadConfigurationShape extends IDisposable {
111 112
	$updateConfigurationOption(target: ConfigurationTarget, key: string, value: any, resource: URI): TPromise<void>;
	$removeConfigurationOption(target: ConfigurationTarget, key: string, resource: URI): TPromise<void>;
113 114
}

115
export interface MainThreadDiagnosticsShape extends IDisposable {
116 117
	$changeMany(owner: string, entries: [URI, IMarkerData[]][]): TPromise<any>;
	$clear(owner: string): TPromise<any>;
118 119
}

120
export interface MainThreadDialogOpenOptions {
J
Johannes Rieken 已提交
121
	defaultUri?: URI;
122
	openLabel?: string;
123 124 125
	canSelectFiles?: boolean;
	canSelectFolders?: boolean;
	canSelectMany?: boolean;
J
Johannes Rieken 已提交
126
	filters?: { [name: string]: string[] };
127 128
}

129
export interface MainThreadDialogSaveOptions {
J
Johannes Rieken 已提交
130
	defaultUri?: URI;
131
	saveLabel?: string;
J
Johannes Rieken 已提交
132
	filters?: { [name: string]: string[] };
133 134
}

135
export interface MainThreadDiaglogsShape extends IDisposable {
136 137
	$showOpenDialog(options: MainThreadDialogOpenOptions): Thenable<string[]>;
	$showSaveDialog(options: MainThreadDialogSaveOptions): Thenable<string>;
138 139
}

140 141 142
export interface MainThreadDecorationsShape extends IDisposable {
	$registerDecorationProvider(handle: number, label: string): void;
	$unregisterDecorationProvider(handle: number): void;
143
	$onDidChange(handle: number, resources: UriComponents[]): void;
144 145
}

146
export interface MainThreadDocumentContentProvidersShape extends IDisposable {
147 148 149
	$registerTextContentProvider(handle: number, scheme: string): void;
	$unregisterTextContentProvider(handle: number): void;
	$onVirtualDocumentChange(uri: URI, value: ITextSource): void;
150 151
}

152
export interface MainThreadDocumentsShape extends IDisposable {
153
	$tryCreateDocument(options?: { language?: string; content?: string; }): TPromise<any>;
154 155
	$tryOpenDocument(uri: UriComponents): TPromise<any>;
	$trySaveDocument(uri: UriComponents): TPromise<boolean>;
156 157
}

158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194
export interface ISelectionChangeEvent {
	selections: Selection[];
	source?: string;
}

export interface ITextEditorConfigurationUpdate {
	tabSize?: number | 'auto';
	insertSpaces?: boolean | 'auto';
	cursorStyle?: TextEditorCursorStyle;
	lineNumbers?: TextEditorLineNumbersStyle;
}

export interface IResolvedTextEditorConfiguration {
	tabSize: number;
	insertSpaces: boolean;
	cursorStyle: TextEditorCursorStyle;
	lineNumbers: TextEditorLineNumbersStyle;
}

export enum TextEditorRevealType {
	Default = 0,
	InCenter = 1,
	InCenterIfOutsideViewport = 2,
	AtTop = 3
}

export interface IUndoStopOptions {
	undoStopBefore: boolean;
	undoStopAfter: boolean;
}

export interface IApplyEditsOptions extends IUndoStopOptions {
	setEndOfLine: EndOfLine;
}



195 196 197 198
export interface ITextDocumentShowOptions {
	position?: EditorPosition;
	preserveFocus?: boolean;
	pinned?: boolean;
199
	selection?: IRange;
200 201
}

202
export interface IWorkspaceResourceEdit {
203
	resource: UriComponents;
204 205 206 207 208 209 210 211
	modelVersionId?: number;
	edits: {
		range?: IRange;
		newText: string;
		newEol?: editorCommon.EndOfLineSequence;
	}[];
}

212
export interface MainThreadEditorsShape extends IDisposable {
213
	$tryShowTextDocument(resource: UriComponents, options: ITextDocumentShowOptions): TPromise<string>;
214 215 216 217 218 219
	$registerTextEditorDecorationType(key: string, options: editorCommon.IDecorationRenderOptions): void;
	$removeTextEditorDecorationType(key: string): void;
	$tryShowEditor(id: string, position: EditorPosition): TPromise<void>;
	$tryHideEditor(id: string): TPromise<void>;
	$trySetOptions(id: string, options: ITextEditorConfigurationUpdate): TPromise<any>;
	$trySetDecorations(id: string, key: string, ranges: editorCommon.IDecorationOptions[]): TPromise<any>;
220
	$trySetDecorationsFast(id: string, key: string, ranges: number[]): TPromise<any>;
221 222 223
	$tryRevealRange(id: string, range: IRange, revealType: TextEditorRevealType): TPromise<any>;
	$trySetSelections(id: string, selections: ISelection[]): TPromise<any>;
	$tryApplyEdits(id: string, modelVersionId: number, edits: editorCommon.ISingleEditOperation[], opts: IApplyEditsOptions): TPromise<boolean>;
224
	$tryApplyWorkspaceEdit(workspaceResourceEdits: IWorkspaceResourceEdit[]): TPromise<boolean>;
225 226
	$tryInsertSnippet(id: string, template: string, selections: IRange[], opts: IUndoStopOptions): TPromise<any>;
	$getDiffInformation(id: string): TPromise<editorCommon.ILineChange[]>;
227 228
}

229
export interface MainThreadTreeViewsShape extends IDisposable {
230
	$registerView(treeViewId: string): void;
S
Sandeep Somavarapu 已提交
231
	$refresh(treeViewId: string, itemsToRefresh?: { [treeItemHandle: string]: ITreeItem }): void;
232 233
}

234
export interface MainThreadErrorsShape extends IDisposable {
235
	$onUnexpectedError(err: any | SerializedError): void;
236 237
}

238
export interface MainThreadLanguageFeaturesShape extends IDisposable {
239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254
	$unregister(handle: number): TPromise<any>;
	$registerOutlineSupport(handle: number, selector: vscode.DocumentSelector): TPromise<any>;
	$registerCodeLensSupport(handle: number, selector: vscode.DocumentSelector, eventHandle: number): TPromise<any>;
	$emitCodeLensEvent(eventHandle: number, event?: any): TPromise<any>;
	$registerDeclaractionSupport(handle: number, selector: vscode.DocumentSelector): TPromise<any>;
	$registerImplementationSupport(handle: number, selector: vscode.DocumentSelector): TPromise<any>;
	$registerTypeDefinitionSupport(handle: number, selector: vscode.DocumentSelector): TPromise<any>;
	$registerHoverProvider(handle: number, selector: vscode.DocumentSelector): TPromise<any>;
	$registerDocumentHighlightProvider(handle: number, selector: vscode.DocumentSelector): TPromise<any>;
	$registerReferenceSupport(handle: number, selector: vscode.DocumentSelector): TPromise<any>;
	$registerQuickFixSupport(handle: number, selector: vscode.DocumentSelector): TPromise<any>;
	$registerDocumentFormattingSupport(handle: number, selector: vscode.DocumentSelector): TPromise<any>;
	$registerRangeFormattingSupport(handle: number, selector: vscode.DocumentSelector): TPromise<any>;
	$registerOnTypeFormattingSupport(handle: number, selector: vscode.DocumentSelector, autoFormatTriggerCharacters: string[]): TPromise<any>;
	$registerNavigateTypeSupport(handle: number): TPromise<any>;
	$registerRenameSupport(handle: number, selector: vscode.DocumentSelector): TPromise<any>;
255
	$registerSuggestSupport(handle: number, selector: vscode.DocumentSelector, triggerCharacters: string[], supportsResolveDetails: boolean): TPromise<any>;
256 257 258 259
	$registerSignatureHelpProvider(handle: number, selector: vscode.DocumentSelector, triggerCharacter: string[]): TPromise<any>;
	$registerDocumentLinkProvider(handle: number, selector: vscode.DocumentSelector): TPromise<any>;
	$registerDocumentColorProvider(handle: number, selector: vscode.DocumentSelector): TPromise<any>;
	$setLanguageConfiguration(handle: number, languageId: string, configuration: vscode.LanguageConfiguration): TPromise<any>;
260 261
}

262
export interface MainThreadLanguagesShape extends IDisposable {
263
	$getLanguages(): TPromise<string[]>;
264 265
}

266
export interface MainThreadMessageOptions {
267
	extension?: IExtensionDescription;
268
	modal?: boolean;
269 270
}

271
export interface MainThreadMessageServiceShape extends IDisposable {
272
	$showMessage(severity: Severity, message: string, options: MainThreadMessageOptions, commands: { title: string; isCloseAffordance: boolean; handle: number; }[]): Thenable<number>;
273 274
}

275
export interface MainThreadOutputServiceShape extends IDisposable {
276 277 278 279 280
	$append(channelId: string, label: string, value: string): TPromise<void>;
	$clear(channelId: string, label: string): TPromise<void>;
	$dispose(channelId: string, label: string): TPromise<void>;
	$reveal(channelId: string, label: string, preserveFocus: boolean): TPromise<void>;
	$close(channelId: string): TPromise<void>;
281 282
}

283
export interface MainThreadProgressShape extends IDisposable {
284

285 286 287
	$startProgress(handle: number, options: IProgressOptions): void;
	$progressReport(handle: number, message: IProgressStep): void;
	$progressEnd(handle: number): void;
288 289
}

290
export interface MainThreadTerminalServiceShape extends IDisposable {
291
	$createTerminal(name?: string, shellPath?: string, shellArgs?: string[], env?: { [key: string]: string }, waitOnExit?: boolean): TPromise<number>;
292 293 294 295
	$dispose(terminalId: number): void;
	$hide(terminalId: number): void;
	$sendText(terminalId: number, text: string, addNewLine: boolean): void;
	$show(terminalId: number, preserveFocus: boolean): void;
D
Daniel Imms 已提交
296 297
}

298 299 300
export interface MyQuickPickItems extends IPickOpenEntry {
	handle: number;
}
301
export interface MainThreadQuickOpenShape extends IDisposable {
302 303 304 305
	$show(options: IPickOptions): TPromise<number>;
	$setItems(items: MyQuickPickItems[]): TPromise<any>;
	$setError(error: Error): TPromise<any>;
	$input(options: vscode.InputBoxOptions, validateInput: boolean): TPromise<string>;
306 307
}

308
export interface MainThreadStatusBarShape extends IDisposable {
309
	$setEntry(id: number, extensionId: string, text: string, tooltip: string, command: string, color: string | ThemeColor, alignment: MainThreadStatusBarAlignment, priority: number): void;
310
	$dispose(id: number): void;
311 312
}

313
export interface MainThreadStorageShape extends IDisposable {
314 315
	$getValue<T>(shared: boolean, key: string): TPromise<T>;
	$setValue(shared: boolean, key: string, value: any): TPromise<any>;
316 317
}

318
export interface MainThreadTelemetryShape extends IDisposable {
319
	$publicLog(eventName: string, data?: any): void;
320 321
}

322
export interface MainThreadWorkspaceShape extends IDisposable {
323
	$startSearch(includePattern: string, includeFolder: string, excludePattern: string, maxResults: number, requestId: number): Thenable<URI[]>;
324 325
	$cancelSearch(requestId: number): Thenable<boolean>;
	$saveAll(includeUntitled?: boolean): Thenable<boolean>;
326
}
327

328 329
export interface MainThreadFileSystemShape extends IDisposable {
	$registerFileSystemProvider(handle: number, scheme: string): void;
330
	$unregisterFileSystemProvider(handle: number): void;
331 332 333 334

	$onDidAddFileSystemRoot(root: URI): void;
	$onFileSystemChange(handle: number, resource: IFileChange[]): void;
	$reportFileChunk(handle: number, resource: URI, chunk: number[] | null): void;
J
Johannes Rieken 已提交
335 336

	$handleSearchProgress(handle: number, session: number, resource: URI): void;
337 338
}

339
export interface MainThreadTaskShape extends IDisposable {
340 341
	$registerTaskProvider(handle: number): TPromise<any>;
	$unregisterTaskProvider(handle: number): TPromise<any>;
342 343
}

344
export interface MainThreadExtensionServiceShape extends IDisposable {
345
	$localShowMessage(severity: Severity, msg: string): void;
A
Alex Dima 已提交
346
	$onExtensionActivated(extensionId: string, startup: boolean, codeLoadingTime: number, activateCallTime: number, activateResolvedTime: number, activationEvent: string): void;
347
	$onExtensionActivationFailed(extensionId: string): void;
348
	$onExtensionRuntimeError(extensionId: string, error: SerializedError): void;
A
Alex Dima 已提交
349
	$addMessage(extensionId: string, severity: Severity, message: string): void;
350 351
}

J
Joao Moreno 已提交
352
export interface SCMProviderFeatures {
J
Joao Moreno 已提交
353 354
	hasQuickDiffProvider?: boolean;
	count?: number;
355 356 357
	commitTemplate?: string;
	acceptInputCommand?: modes.Command;
	statusBarCommands?: modes.Command[];
J
Joao Moreno 已提交
358 359 360 361
}

export interface SCMGroupFeatures {
	hideWhenEmpty?: boolean;
J
Joao Moreno 已提交
362 363
}

J
Joao Moreno 已提交
364
export type SCMRawResource = [
365
	number /*handle*/,
J
Joao Moreno 已提交
366
	string /*resourceUri*/,
J
Joao Moreno 已提交
367
	string[] /*icons: light, dark*/,
368
	string /*tooltip*/,
369
	boolean /*strike through*/,
370 371
	boolean /*faded*/,

J
Joao Moreno 已提交
372 373 374
	string | undefined /*source*/,
	string | undefined /*letter*/,
	ThemeColor | null /*color*/
J
Joao Moreno 已提交
375
];
376

377 378 379
export type SCMRawResourceSplice = [
	number /* start */,
	number /* delete count */,
J
Joao 已提交
380 381 382
	SCMRawResource[]
];

383 384 385 386 387
export type SCMRawResourceSplices = [
	number, /*handle*/
	SCMRawResourceSplice[]
];

388
export interface MainThreadSCMShape extends IDisposable {
J
Joao Moreno 已提交
389
	$registerSourceControl(handle: number, id: string, label: string, rootUri: string | undefined): void;
390 391
	$updateSourceControl(handle: number, features: SCMProviderFeatures): void;
	$unregisterSourceControl(handle: number): void;
J
Joao Moreno 已提交
392

393 394 395 396
	$registerGroup(sourceControlHandle: number, handle: number, id: string, label: string): void;
	$updateGroup(sourceControlHandle: number, handle: number, features: SCMGroupFeatures): void;
	$updateGroupLabel(sourceControlHandle: number, handle: number, label: string): void;
	$unregisterGroup(sourceControlHandle: number, handle: number): void;
J
Joao Moreno 已提交
397

398
	$spliceResourceStates(sourceControlHandle: number, splices: SCMRawResourceSplices[]): void;
J
Joao 已提交
399

J
Joao Moreno 已提交
400
	$setInputBoxValue(sourceControlHandle: number, value: string): void;
401
	$setInputBoxPlaceholder(sourceControlHandle: number, placeholder: string): void;
J
Joao Moreno 已提交
402
	$setLineWarningLength(sourceControlHandle: number, lineWarningLength: number): void;
J
Joao Moreno 已提交
403 404
}

405 406
export type DebugSessionUUID = string;

407
export interface MainThreadDebugServiceShape extends IDisposable {
408 409
	$registerDebugConfigurationProvider(type: string, hasProvideMethod: boolean, hasResolveMethod: boolean, handle: number): TPromise<any>;
	$unregisterDebugConfigurationProvider(handle: number): TPromise<any>;
410
	$startDebugging(folder: URI | undefined, nameOrConfig: string | vscode.DebugConfiguration): TPromise<boolean>;
411
	$customDebugAdapterRequest(id: DebugSessionUUID, command: string, args: any): TPromise<any>;
412
	$appendDebugConsole(value: string): TPromise<any>;
413
	$startBreakpointEvents(): TPromise<any>;
414 415
}

416 417
export interface MainThreadWindowShape extends IDisposable {
	$getWindowVisibility(): TPromise<boolean>;
418 419
}

420 421
// -- extension host

422
export interface ExtHostCommandsShape {
J
Johannes Rieken 已提交
423
	$executeContributedCommand<T>(id: string, ...args: any[]): Thenable<T>;
424
	$getContributedCommandHandlerDescriptions(): Thenable<{ [id: string]: string | ICommandHandlerDescription }>;
425 426
}

427
export interface ExtHostConfigurationShape {
428
	$acceptConfigurationChanged(data: IConfigurationData, eventData: IWorkspaceConfigurationChangeEventData): void;
429 430
}

431
export interface ExtHostDiagnosticsShape {
432 433 434

}

435 436
export interface ExtHostDocumentContentProvidersShape {
	$provideTextDocumentContent(handle: number, uri: URI): TPromise<string>;
437 438
}

439 440 441
export interface IModelAddedData {
	url: URI;
	versionId: number;
442 443
	lines: string[];
	EOL: string;
444 445 446
	modeId: string;
	isDirty: boolean;
}
447 448 449 450 451
export interface ExtHostDocumentsShape {
	$acceptModelModeChanged(strURL: string, oldModeId: string, newModeId: string): void;
	$acceptModelSaved(strURL: string): void;
	$acceptDirtyStateChanged(strURL: string, isDirty: boolean): void;
	$acceptModelChanged(strURL: string, e: IModelChangedEvent, isDirty: boolean): void;
452 453
}

454
export interface ExtHostDocumentSaveParticipantShape {
455
	$participateInSave(resource: URI, reason: SaveReason): Thenable<boolean[]>;
456 457
}

458 459 460 461
export interface ITextEditorAddData {
	id: string;
	document: URI;
	options: IResolvedTextEditorConfiguration;
A
Alex Dima 已提交
462
	selections: ISelection[];
463 464 465 466 467
	editorPosition: EditorPosition;
}
export interface ITextEditorPositionData {
	[id: string]: EditorPosition;
}
468 469 470 471
export interface ExtHostEditorsShape {
	$acceptOptionsChanged(id: string, opts: IResolvedTextEditorConfiguration): void;
	$acceptSelectionsChanged(id: string, event: ISelectionChangeEvent): void;
	$acceptEditorPositionData(data: ITextEditorPositionData): void;
472 473
}

J
Johannes Rieken 已提交
474 475 476 477 478 479 480 481
export interface IDocumentsAndEditorsDelta {
	removedDocuments?: string[];
	addedDocuments?: IModelAddedData[];
	removedEditors?: string[];
	addedEditors?: ITextEditorAddData[];
	newActiveEditor?: string;
}

482 483
export interface ExtHostDocumentsAndEditorsShape {
	$acceptDocumentsAndEditorsDelta(delta: IDocumentsAndEditorsDelta): void;
J
Johannes Rieken 已提交
484 485
}

486 487
export interface ExtHostTreeViewsShape {
	$getElements(treeViewId: string): TPromise<ITreeItem[]>;
S
Sandeep Somavarapu 已提交
488
	$getChildren(treeViewId: string, treeItemHandle: string): TPromise<ITreeItem[]>;
S
Sandeep Somavarapu 已提交
489 490
}

491 492
export interface ExtHostWorkspaceShape {
	$acceptWorkspaceData(workspace: IWorkspaceData): void;
493
}
494

495
export interface ExtHostFileSystemShape {
J
Johannes Rieken 已提交
496
	$utimes(handle: number, resource: URI, mtime: number, atime: number): TPromise<IStat>;
497
	$stat(handle: number, resource: URI): TPromise<IStat>;
498
	$read(handle: number, offset: number, count: number, resource: URI): TPromise<number>;
499 500
	$write(handle: number, resource: URI, content: number[]): TPromise<void>;
	$unlink(handle: number, resource: URI): TPromise<void>;
501 502
	$move(handle: number, resource: URI, target: URI): TPromise<IStat>;
	$mkdir(handle: number, resource: URI): TPromise<IStat>;
503
	$readdir(handle: number, resource: URI): TPromise<[URI, IStat][]>;
504
	$rmdir(handle: number, resource: URI): TPromise<void>;
J
Johannes Rieken 已提交
505
	$fileFiles(handle: number, session: number, query: string): TPromise<void>;
506 507
}

508 509
export interface ExtHostExtensionServiceShape {
	$activateByEvent(activationEvent: string): TPromise<void>;
510 511 512 513 514 515 516
}

export interface FileSystemEvents {
	created: URI[];
	changed: URI[];
	deleted: URI[];
}
517
export interface ExtHostFileSystemEventServiceShape {
518
	$onFileEvent(events: FileSystemEvents): void;
519 520
}

J
Johannes Rieken 已提交
521 522 523 524 525
export interface ObjectIdentifier {
	$ident: number;
}

export namespace ObjectIdentifier {
526
	export const name = '$ident';
J
Johannes Rieken 已提交
527
	export function mixin<T>(obj: T, id: number): T & ObjectIdentifier {
528
		Object.defineProperty(obj, name, { value: id, enumerable: true });
J
Johannes Rieken 已提交
529 530
		return <T & ObjectIdentifier>obj;
	}
531 532
	export function of(obj: any): number {
		return obj[name];
J
Johannes Rieken 已提交
533 534 535
	}
}

536 537
export interface ExtHostHeapServiceShape {
	$onGarbageCollection(ids: number[]): void;
538
}
539
export interface IRawColorInfo {
J
Joao Moreno 已提交
540
	color: [number, number, number, number];
541 542 543
	range: IRange;
}

544 545 546 547 548 549 550 551 552 553 554
export interface IExtHostSuggestion extends modes.ISuggestion {
	_id: number;
	_parentId: number;
}

export interface IExtHostSuggestResult {
	_id: number;
	suggestions: IExtHostSuggestion[];
	incomplete?: boolean;
}

555 556 557 558 559 560 561 562 563 564 565 566 567
export interface IdObject {
	_id: number;
}

export namespace IdObject {
	let n = 0;
	export function mixin<T extends object>(object: T): T & IdObject {
		(<any>object)._id = n++;
		return <any>object;
	}
}

export type IWorkspaceSymbol = IdObject & modes.SymbolInformation;
568
export interface IWorkspaceSymbols extends IdObject { symbols: IWorkspaceSymbol[]; }
569

570 571 572 573 574 575 576 577 578 579
export interface ExtHostLanguageFeaturesShape {
	$provideDocumentSymbols(handle: number, resource: URI): TPromise<modes.SymbolInformation[]>;
	$provideCodeLenses(handle: number, resource: URI): TPromise<modes.ICodeLensSymbol[]>;
	$resolveCodeLens(handle: number, resource: URI, symbol: modes.ICodeLensSymbol): TPromise<modes.ICodeLensSymbol>;
	$provideDefinition(handle: number, resource: URI, position: IPosition): TPromise<modes.Definition>;
	$provideImplementation(handle: number, resource: URI, position: IPosition): TPromise<modes.Definition>;
	$provideTypeDefinition(handle: number, resource: URI, position: IPosition): TPromise<modes.Definition>;
	$provideHover(handle: number, resource: URI, position: IPosition): TPromise<modes.Hover>;
	$provideDocumentHighlights(handle: number, resource: URI, position: IPosition): TPromise<modes.DocumentHighlight[]>;
	$provideReferences(handle: number, resource: URI, position: IPosition, context: modes.ReferenceContext): TPromise<modes.Location[]>;
580
	$provideCodeActions(handle: number, resource: URI, range: IRange): TPromise<modes.CodeAction[]>;
581 582 583
	$provideDocumentFormattingEdits(handle: number, resource: URI, options: modes.FormattingOptions): TPromise<editorCommon.ISingleEditOperation[]>;
	$provideDocumentRangeFormattingEdits(handle: number, resource: URI, range: IRange, options: modes.FormattingOptions): TPromise<editorCommon.ISingleEditOperation[]>;
	$provideOnTypeFormattingEdits(handle: number, resource: URI, position: IPosition, ch: string, options: modes.FormattingOptions): TPromise<editorCommon.ISingleEditOperation[]>;
584 585 586
	$provideWorkspaceSymbols(handle: number, search: string): TPromise<IWorkspaceSymbols>;
	$resolveWorkspaceSymbol(handle: number, symbol: modes.SymbolInformation): TPromise<IWorkspaceSymbol>;
	$releaseWorkspaceSymbols(handle: number, id: number): void;
587
	$provideRenameEdits(handle: number, resource: URI, position: IPosition, newName: string): TPromise<modes.WorkspaceEdit>;
588
	$provideCompletionItems(handle: number, resource: URI, position: IPosition, context: modes.SuggestContext): TPromise<IExtHostSuggestResult>;
589
	$resolveCompletionItem(handle: number, resource: URI, position: IPosition, suggestion: modes.ISuggestion): TPromise<modes.ISuggestion>;
590
	$releaseCompletionItems(handle: number, id: number): void;
591 592 593
	$provideSignatureHelp(handle: number, resource: URI, position: IPosition): TPromise<modes.SignatureHelp>;
	$provideDocumentLinks(handle: number, resource: URI): TPromise<modes.ILink[]>;
	$resolveDocumentLink(handle: number, link: modes.ILink): TPromise<modes.ILink>;
594
	$provideDocumentColors(handle: number, resource: URI): TPromise<IRawColorInfo[]>;
595
	$provideColorPresentations(handle: number, resource: URI, colorInfo: IRawColorInfo): TPromise<modes.IColorPresentation[]>;
596 597
}

598 599 600
export interface ExtHostQuickOpenShape {
	$onItemSelected(handle: number): void;
	$validateInput(input: string): TPromise<string>;
601 602
}

603 604 605
export interface ExtHostTerminalServiceShape {
	$acceptTerminalClosed(id: number): void;
	$acceptTerminalProcessId(id: number, processId: number): void;
606 607
}

608 609
export interface ExtHostSCMShape {
	$provideOriginalResource(sourceControlHandle: number, uri: URI): TPromise<URI>;
J
Joao Moreno 已提交
610
	$onInputBoxValueChange(sourceControlHandle: number, value: string): TPromise<void>;
611
	$executeResourceCommand(sourceControlHandle: number, groupHandle: number, handle: number): TPromise<void>;
J
Joao Moreno 已提交
612 613
}

614 615
export interface ExtHostTaskShape {
	$provideTasks(handle: number): TPromise<TaskSet>;
616 617
}

618 619 620 621 622 623 624 625 626 627
export interface IBreakpointData {
	type: 'source' | 'function';
	id: string;
	enabled: boolean;
	condition?: string;
	hitCondition?: string;
}

export interface ISourceBreakpointData extends IBreakpointData {
	type: 'source';
628
	uri: URI;
629 630
	line: number;
	character: number;
631 632 633 634 635 636 637 638 639 640 641 642 643
}

export interface IFunctionBreakpointData extends IBreakpointData {
	type: 'function';
	functionName: string;
}

export interface IBreakpointsDelta {
	added?: (ISourceBreakpointData | IFunctionBreakpointData)[];
	removed?: string[];
	changed?: (ISourceBreakpointData | IFunctionBreakpointData)[];
}

644
export interface ExtHostDebugServiceShape {
645 646
	$resolveDebugConfiguration(handle: number, folder: URI | undefined, debugConfiguration: any): TPromise<any>;
	$provideDebugConfigurations(handle: number, folder: URI | undefined): TPromise<any[]>;
647 648 649 650
	$acceptDebugSessionStarted(id: DebugSessionUUID, type: string, name: string): void;
	$acceptDebugSessionTerminated(id: DebugSessionUUID, type: string, name: string): void;
	$acceptDebugSessionActiveChanged(id: DebugSessionUUID | undefined, type?: string, name?: string): void;
	$acceptDebugSessionCustomEvent(id: DebugSessionUUID, type: string, name: string, event: any): void;
651
	$acceptBreakpointsDelta(delat: IBreakpointsDelta): void;
652 653
}

654

655
export type DecorationData = [number, boolean, string, string, ThemeColor, string];
656 657 658 659 660

export interface ExtHostDecorationsShape {
	$providerDecorations(handle: number, uri: URI): TPromise<DecorationData>;
}

661 662
export interface ExtHostWindowShape {
	$onDidChangeWindowFocus(value: boolean): void;
663 664
}

665 666 667
// --- proxy identifiers

export const MainContext = {
668 669 670
	MainThreadCommands: <ProxyIdentifier<MainThreadCommandsShape>>createMainId<MainThreadCommandsShape>('MainThreadCommands', ProxyType.CustomMarshaller),
	MainThreadConfiguration: createMainId<MainThreadConfigurationShape>('MainThreadConfiguration', ProxyType.CustomMarshaller),
	MainThreadDebugService: createMainId<MainThreadDebugServiceShape>('MainThreadDebugService', ProxyType.CustomMarshaller),
671
	MainThreadDecorations: createMainId<MainThreadDecorationsShape>('MainThreadDecorations', ProxyType.NativeJSON),
672 673
	MainThreadDiagnostics: createMainId<MainThreadDiagnosticsShape>('MainThreadDiagnostics', ProxyType.CustomMarshaller),
	MainThreadDialogs: createMainId<MainThreadDiaglogsShape>('MainThreadDiaglogs', ProxyType.CustomMarshaller),
A
Alex Dima 已提交
674
	MainThreadDocuments: createMainId<MainThreadDocumentsShape>('MainThreadDocuments', ProxyType.CustomMarshaller),
675
	MainThreadDocumentContentProviders: createMainId<MainThreadDocumentContentProvidersShape>('MainThreadDocumentContentProviders', ProxyType.CustomMarshaller),
676
	MainThreadEditors: createMainId<MainThreadEditorsShape>('MainThreadEditors'),
677 678
	MainThreadErrors: createMainId<MainThreadErrorsShape>('MainThreadErrors'),
	MainThreadTreeViews: createMainId<MainThreadTreeViewsShape>('MainThreadTreeViews'),
679
	MainThreadLanguageFeatures: createMainId<MainThreadLanguageFeaturesShape>('MainThreadLanguageFeatures', ProxyType.CustomMarshaller),
680
	MainThreadLanguages: createMainId<MainThreadLanguagesShape>('MainThreadLanguages'),
681
	MainThreadMessageService: createMainId<MainThreadMessageServiceShape>('MainThreadMessageService', ProxyType.CustomMarshaller),
682 683
	MainThreadOutputService: createMainId<MainThreadOutputServiceShape>('MainThreadOutputService'),
	MainThreadProgress: createMainId<MainThreadProgressShape>('MainThreadProgress'),
684
	MainThreadQuickOpen: createMainId<MainThreadQuickOpenShape>('MainThreadQuickOpen', ProxyType.CustomMarshaller),
685
	MainThreadStatusBar: createMainId<MainThreadStatusBarShape>('MainThreadStatusBar'),
686 687
	MainThreadStorage: createMainId<MainThreadStorageShape>('MainThreadStorage', ProxyType.CustomMarshaller),
	MainThreadTelemetry: createMainId<MainThreadTelemetryShape>('MainThreadTelemetry', ProxyType.CustomMarshaller),
688
	MainThreadTerminalService: createMainId<MainThreadTerminalServiceShape>('MainThreadTerminalService'),
689 690
	MainThreadWorkspace: createMainId<MainThreadWorkspaceShape>('MainThreadWorkspace', ProxyType.CustomMarshaller),
	MainThreadFileSystem: createMainId<MainThreadFileSystemShape>('MainThreadFileSystem', ProxyType.CustomMarshaller),
691
	MainThreadExtensionService: createMainId<MainThreadExtensionServiceShape>('MainThreadExtensionService'),
692 693
	MainThreadSCM: createMainId<MainThreadSCMShape>('MainThreadSCM', ProxyType.CustomMarshaller),
	MainThreadTask: createMainId<MainThreadTaskShape>('MainThreadTask', ProxyType.CustomMarshaller),
694
	MainThreadWindow: createMainId<MainThreadWindowShape>('MainThreadWindow'),
695 696 697
};

export const ExtHostContext = {
698 699
	ExtHostCommands: createExtId<ExtHostCommandsShape>('ExtHostCommands', ProxyType.CustomMarshaller),
	ExtHostConfiguration: createExtId<ExtHostConfigurationShape>('ExtHostConfiguration', ProxyType.CustomMarshaller),
700
	ExtHostDiagnostics: createExtId<ExtHostDiagnosticsShape>('ExtHostDiagnostics'),
701 702 703
	ExtHostDebugService: createExtId<ExtHostDebugServiceShape>('ExtHostDebugService', ProxyType.CustomMarshaller),
	ExtHostDecorations: createExtId<ExtHostDecorationsShape>('ExtHostDecorations', ProxyType.CustomMarshaller),
	ExtHostDocumentsAndEditors: createExtId<ExtHostDocumentsAndEditorsShape>('ExtHostDocumentsAndEditors', ProxyType.CustomMarshaller),
704
	ExtHostDocuments: createExtId<ExtHostDocumentsShape>('ExtHostDocuments'),
705 706 707
	ExtHostDocumentContentProviders: createExtId<ExtHostDocumentContentProvidersShape>('ExtHostDocumentContentProviders', ProxyType.CustomMarshaller),
	ExtHostDocumentSaveParticipant: createExtId<ExtHostDocumentSaveParticipantShape>('ExtHostDocumentSaveParticipant', ProxyType.CustomMarshaller),
	ExtHostEditors: createExtId<ExtHostEditorsShape>('ExtHostEditors', ProxyType.CustomMarshaller),
708
	ExtHostTreeViews: createExtId<ExtHostTreeViewsShape>('ExtHostTreeViews'),
709 710
	ExtHostFileSystem: createExtId<ExtHostFileSystemShape>('ExtHostFileSystem', ProxyType.CustomMarshaller),
	ExtHostFileSystemEventService: createExtId<ExtHostFileSystemEventServiceShape>('ExtHostFileSystemEventService', ProxyType.CustomMarshaller),
711
	ExtHostHeapService: createExtId<ExtHostHeapServiceShape>('ExtHostHeapMonitor'),
712
	ExtHostLanguageFeatures: createExtId<ExtHostLanguageFeaturesShape>('ExtHostLanguageFeatures', ProxyType.CustomMarshaller),
713 714 715
	ExtHostQuickOpen: createExtId<ExtHostQuickOpenShape>('ExtHostQuickOpen'),
	ExtHostExtensionService: createExtId<ExtHostExtensionServiceShape>('ExtHostExtensionService'),
	ExtHostTerminalService: createExtId<ExtHostTerminalServiceShape>('ExtHostTerminalService'),
716 717 718
	ExtHostSCM: createExtId<ExtHostSCMShape>('ExtHostSCM', ProxyType.CustomMarshaller),
	ExtHostTask: createExtId<ExtHostTaskShape>('ExtHostTask', ProxyType.CustomMarshaller),
	ExtHostWorkspace: createExtId<ExtHostWorkspaceShape>('ExtHostWorkspace', ProxyType.CustomMarshaller),
719
	ExtHostWindow: createExtId<ExtHostWindowShape>('ExtHostWindow'),
720
};