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 { IStat, IFileChange } from 'vs/platform/files/common/files';
S
Sandeep Somavarapu 已提交
52
import { ConfigurationScope } from 'vs/platform/configuration/common/configurationRegistry';
J
Joao Moreno 已提交
53
import { ParsedArgs } from 'vs/platform/environment/common/environment';
S
Sandeep Somavarapu 已提交
54

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

67 68
export interface IWorkspaceData {
	id: string;
69
	name: string;
70
	folders: { uri: UriComponents, name: string, index: number }[];
71 72
}

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

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

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

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

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

100 101
// --- main thread

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

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

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

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

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

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

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

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

151
export interface MainThreadDocumentsShape extends IDisposable {
J
Johannes Rieken 已提交
152
	$tryCreateDocument(options?: { language?: string; content?: string; }): TPromise<UriComponents>;
153 154
	$tryOpenDocument(uri: UriComponents): TPromise<any>;
	$trySaveDocument(uri: UriComponents): TPromise<boolean>;
155 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
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;
}



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

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

211
export interface MainThreadEditorsShape extends IDisposable {
212
	$tryShowTextDocument(resource: UriComponents, options: ITextDocumentShowOptions): TPromise<string>;
213 214 215 216 217 218
	$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>;
219
	$trySetDecorationsFast(id: string, key: string, ranges: number[]): TPromise<any>;
220 221 222
	$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>;
223
	$tryApplyWorkspaceEdit(workspaceResourceEdits: IWorkspaceResourceEdit[]): TPromise<boolean>;
224 225
	$tryInsertSnippet(id: string, template: string, selections: IRange[], opts: IUndoStopOptions): TPromise<any>;
	$getDiffInformation(id: string): TPromise<editorCommon.ILineChange[]>;
226 227
}

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

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

237
export interface MainThreadLanguageFeaturesShape extends IDisposable {
238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253
	$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>;
254
	$registerSuggestSupport(handle: number, selector: vscode.DocumentSelector, triggerCharacters: string[], supportsResolveDetails: boolean): TPromise<any>;
255 256 257 258
	$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>;
259 260
}

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

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

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

274
export interface MainThreadOutputServiceShape extends IDisposable {
275 276 277 278 279
	$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>;
280 281
}

282
export interface MainThreadProgressShape extends IDisposable {
283

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

289
export interface MainThreadTerminalServiceShape extends IDisposable {
290
	$createTerminal(name?: string, shellPath?: string, shellArgs?: string[], env?: { [key: string]: string }, waitOnExit?: boolean): TPromise<number>;
291 292 293 294
	$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 已提交
295 296
}

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

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

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

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

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

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

331
	$onDidAddFileSystemRoot(root: UriComponents): void;
332
	$onFileSystemChange(handle: number, resource: IFileChange[]): void;
333
	$reportFileChunk(handle: number, resource: UriComponents, chunk: number[] | null): void;
J
Johannes Rieken 已提交
334

335
	$handleSearchProgress(handle: number, session: number, resource: UriComponents): void;
336 337
}

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

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

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

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

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

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

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

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

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

392 393 394 395
	$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 已提交
396

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

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

404 405
export type DebugSessionUUID = string;

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

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

419 420
// -- extension host

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

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

430
export interface ExtHostDiagnosticsShape {
431 432 433

}

434
export interface ExtHostDocumentContentProvidersShape {
J
Johannes Rieken 已提交
435
	$provideTextDocumentContent(handle: number, uri: UriComponents): TPromise<string>;
436 437
}

438
export interface IModelAddedData {
439
	uri: UriComponents;
440
	versionId: number;
441 442
	lines: string[];
	EOL: string;
443 444 445
	modeId: string;
	isDirty: boolean;
}
446 447 448 449 450
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;
451 452
}

453
export interface ExtHostDocumentSaveParticipantShape {
J
Johannes Rieken 已提交
454
	$participateInSave(resource: UriComponents, reason: SaveReason): Thenable<boolean[]>;
455 456
}

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

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

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

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

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

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

507 508
export interface ExtHostExtensionServiceShape {
	$activateByEvent(activationEvent: string): TPromise<void>;
509 510 511
}

export interface FileSystemEvents {
J
Johannes Rieken 已提交
512 513 514
	created: UriComponents[];
	changed: UriComponents[];
	deleted: UriComponents[];
515
}
516
export interface ExtHostFileSystemEventServiceShape {
517
	$onFileEvent(events: FileSystemEvents): void;
518 519
}

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

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

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

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

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

554 555 556 557 558 559 560 561 562 563 564 565 566
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;
567
export interface IWorkspaceSymbols extends IdObject { symbols: IWorkspaceSymbol[]; }
568

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

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

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

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

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

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

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

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

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

643
export interface ExtHostDebugServiceShape {
644 645
	$resolveDebugConfiguration(handle: number, folder: URI | undefined, debugConfiguration: any): TPromise<any>;
	$provideDebugConfigurations(handle: number, folder: URI | undefined): TPromise<any[]>;
646 647 648 649
	$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;
650
	$acceptBreakpointsDelta(delat: IBreakpointsDelta): void;
651 652
}

653

654
export type DecorationData = [number, boolean, string, string, ThemeColor, string];
655 656

export interface ExtHostDecorationsShape {
J
Johannes Rieken 已提交
657
	$providerDecorations(handle: number, uri: UriComponents): TPromise<DecorationData>;
658 659
}

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

664 665 666
// --- proxy identifiers

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

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