extHost.protocol.ts 35.8 KB
Newer Older
1 2 3 4 5 6
/*---------------------------------------------------------------------------------------------
 *  Copyright (c) Microsoft Corporation. All rights reserved.
 *  Licensed under the MIT License. See License.txt in the project root for license information.
 *--------------------------------------------------------------------------------------------*/
'use strict';

7
import { createMainContextProxyIdentifier as createMainId, createExtHostContextProxyIdentifier as createExtId, ProxyIdentifier, IRPCProtocol } from 'vs/workbench/services/extensions/node/proxyIdentifier';
8

9 10
import * as vscode from 'vscode';

11
import URI, { UriComponents } from 'vs/base/common/uri';
12
import Severity from 'vs/base/common/severity';
13
import { TPromise } from 'vs/base/common/winjs.base';
14

15 16
import { IMarkerData } from 'vs/platform/markers/common/markers';
import { Position as EditorPosition } from 'vs/platform/editor/common/editor';
17
import { IExtensionDescription } from 'vs/workbench/services/extensions/common/extensions';
18 19
import { StatusbarAlignment as MainThreadStatusBarAlignment } from 'vs/platform/statusbar/common/statusbar';
import { ITelemetryInfo } from 'vs/platform/telemetry/common/telemetry';
20
import { ICommandHandlerDescription } from 'vs/platform/commands/common/commands';
J
Johannes Rieken 已提交
21
import { IProgressOptions, IProgressStep } from 'vs/platform/progress/common/progress';
22 23 24 25

import * as editorCommon from 'vs/editor/common/editorCommon';
import * as modes from 'vs/editor/common/modes';

S
Sandeep Somavarapu 已提交
26
import { IConfigurationData, ConfigurationTarget, IConfigurationModel } from 'vs/platform/configuration/common/configuration';
27
import { IConfig, IAdapterExecutable } from 'vs/workbench/parts/debug/common/debug';
28

J
Johannes Rieken 已提交
29
import { IPickOpenEntry, IPickOptions } from 'vs/platform/quickOpen/common/quickOpen';
30
import { SaveReason } from 'vs/workbench/services/textfile/common/textfiles';
31
import { TextEditorCursorStyle } from 'vs/editor/common/config/editorOptions';
32
import { EndOfLine, TextEditorLineNumbersStyle } from 'vs/workbench/api/node/extHostTypes';
33

34

35
import { TaskSet } from 'vs/workbench/parts/tasks/common/tasks';
36
import { IModelChangedEvent } from 'vs/editor/common/model/mirrorTextModel';
37 38
import { IPosition } from 'vs/editor/common/core/position';
import { IRange } from 'vs/editor/common/core/range';
39
import { ISelection, Selection } from 'vs/editor/common/core/selection';
40

41
import { ITreeItem } from 'vs/workbench/common/views';
B
Benjamin Pasero 已提交
42
import { ThemeColor } from 'vs/platform/theme/common/themeService';
B
Benjamin Pasero 已提交
43 44
import { IDisposable } from 'vs/base/common/lifecycle';
import { SerializedError } from 'vs/base/common/errors';
J
Johannes Rieken 已提交
45
import { IStat, FileChangeType } from 'vs/platform/files/common/files';
S
Sandeep Somavarapu 已提交
46
import { ConfigurationScope } from 'vs/platform/configuration/common/configurationRegistry';
J
Joao Moreno 已提交
47
import { ParsedArgs } from 'vs/platform/environment/common/environment';
48
import { CommentRule, CharacterPair, EnterAction } from 'vs/editor/common/modes/languageConfiguration';
J
Johannes Rieken 已提交
49
import { ISingleEditOperation } from 'vs/editor/common/model';
50
import { ILineMatch, IPatternInfo } from 'vs/platform/search/common/search';
S
Sandeep Somavarapu 已提交
51
import { LogLevel } from 'vs/platform/log/common/log';
S
Sandeep Somavarapu 已提交
52

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

65 66
export interface IWorkspaceData {
	id: string;
67
	name: string;
68
	folders: { uri: UriComponents, name: string, index: number }[];
J
Johannes Rieken 已提交
69
	configuration?: UriComponents;
70 71
}

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

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

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
	$registerCommand(id: string): void;
	$unregisterCommand(id: string): void;
105 106
	$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: UriComponents): TPromise<void>;
	$removeConfigurationOption(target: ConfigurationTarget, key: string, resource: UriComponents): TPromise<void>;
112 113
}

114
export interface MainThreadDiagnosticsShape extends IDisposable {
115 116
	$changeMany(owner: string, entries: [UriComponents, IMarkerData[]][]): void;
	$clear(owner: string): void;
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: string): void;
149 150
}

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

187 188 189 190
export interface ITextDocumentShowOptions {
	position?: EditorPosition;
	preserveFocus?: boolean;
	pinned?: boolean;
191
	selection?: IRange;
192 193
}

194
export interface MainThreadTextEditorsShape extends IDisposable {
195
	$tryShowTextDocument(resource: UriComponents, options: ITextDocumentShowOptions): TPromise<string>;
196 197 198 199
	$registerTextEditorDecorationType(key: string, options: editorCommon.IDecorationRenderOptions): void;
	$removeTextEditorDecorationType(key: string): void;
	$tryShowEditor(id: string, position: EditorPosition): TPromise<void>;
	$tryHideEditor(id: string): TPromise<void>;
200 201 202 203 204
	$trySetOptions(id: string, options: ITextEditorConfigurationUpdate): TPromise<void>;
	$trySetDecorations(id: string, key: string, ranges: editorCommon.IDecorationOptions[]): TPromise<void>;
	$trySetDecorationsFast(id: string, key: string, ranges: number[]): TPromise<void>;
	$tryRevealRange(id: string, range: IRange, revealType: TextEditorRevealType): TPromise<void>;
	$trySetSelections(id: string, selections: ISelection[]): TPromise<void>;
205
	$tryApplyEdits(id: string, modelVersionId: number, edits: ISingleEditOperation[], opts: IApplyEditsOptions): TPromise<boolean>;
206
	$tryApplyWorkspaceEdit(workspaceEditDto: WorkspaceEditDto): TPromise<boolean>;
207
	$tryInsertSnippet(id: string, template: string, selections: IRange[], opts: IUndoStopOptions): TPromise<boolean>;
208
	$getDiffInformation(id: string): TPromise<editorCommon.ILineChange[]>;
209 210
}

211
export interface MainThreadTreeViewsShape extends IDisposable {
S
Sandeep Somavarapu 已提交
212
	$registerTreeViewDataProvider(treeViewId: string): void;
S
Sandeep Somavarapu 已提交
213
	$refresh(treeViewId: string, itemsToRefresh?: { [treeItemHandle: string]: ITreeItem }): void;
S
Sandeep Somavarapu 已提交
214
	$reveal(treeViewId: string, treeItem: ITreeItem, parentChain: ITreeItem[], options?: { donotSelect?: boolean }): TPromise<void>;
215 216
}

217
export interface MainThreadErrorsShape extends IDisposable {
218
	$onUnexpectedError(err: any | SerializedError): void;
219 220
}

221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259
export interface ISerializedRegExp {
	pattern: string;
	flags?: string;
}
export interface ISerializedIndentationRule {
	decreaseIndentPattern: ISerializedRegExp;
	increaseIndentPattern: ISerializedRegExp;
	indentNextLinePattern?: ISerializedRegExp;
	unIndentedLinePattern?: ISerializedRegExp;
}
export interface ISerializedOnEnterRule {
	beforeText: ISerializedRegExp;
	afterText?: ISerializedRegExp;
	action: EnterAction;
}
export interface ISerializedLanguageConfiguration {
	comments?: CommentRule;
	brackets?: CharacterPair[];
	wordPattern?: ISerializedRegExp;
	indentationRules?: ISerializedIndentationRule;
	onEnterRules?: ISerializedOnEnterRule[];
	__electricCharacterSupport?: {
		brackets?: any;
		docComment?: {
			scope: string;
			open: string;
			lineStart: string;
			close?: string;
		};
	};
	__characterPairSupport?: {
		autoClosingPairs: {
			open: string;
			close: string;
			notIn?: string[];
		}[];
	};
}

260
export interface MainThreadLanguageFeaturesShape extends IDisposable {
261 262 263 264 265 266 267 268 269 270 271 272 273 274 275
	$unregister(handle: number): void;
	$registerOutlineSupport(handle: number, selector: vscode.DocumentSelector): void;
	$registerCodeLensSupport(handle: number, selector: vscode.DocumentSelector, eventHandle: number): void;
	$emitCodeLensEvent(eventHandle: number, event?: any): void;
	$registerDeclaractionSupport(handle: number, selector: vscode.DocumentSelector): void;
	$registerImplementationSupport(handle: number, selector: vscode.DocumentSelector): void;
	$registerTypeDefinitionSupport(handle: number, selector: vscode.DocumentSelector): void;
	$registerHoverProvider(handle: number, selector: vscode.DocumentSelector): void;
	$registerDocumentHighlightProvider(handle: number, selector: vscode.DocumentSelector): void;
	$registerReferenceSupport(handle: number, selector: vscode.DocumentSelector): void;
	$registerQuickFixSupport(handle: number, selector: vscode.DocumentSelector): void;
	$registerDocumentFormattingSupport(handle: number, selector: vscode.DocumentSelector): void;
	$registerRangeFormattingSupport(handle: number, selector: vscode.DocumentSelector): void;
	$registerOnTypeFormattingSupport(handle: number, selector: vscode.DocumentSelector, autoFormatTriggerCharacters: string[]): void;
	$registerNavigateTypeSupport(handle: number): void;
276
	$registerRenameSupport(handle: number, selector: vscode.DocumentSelector, supportsResolveInitialValues: boolean): void;
277 278 279 280
	$registerSuggestSupport(handle: number, selector: vscode.DocumentSelector, triggerCharacters: string[], supportsResolveDetails: boolean): void;
	$registerSignatureHelpProvider(handle: number, selector: vscode.DocumentSelector, triggerCharacter: string[]): void;
	$registerDocumentLinkProvider(handle: number, selector: vscode.DocumentSelector): void;
	$registerDocumentColorProvider(handle: number, selector: vscode.DocumentSelector): void;
281
	$registerFoldingProvider(handle: number, selector: vscode.DocumentSelector): void;
282
	$setLanguageConfiguration(handle: number, languageId: string, configuration: ISerializedLanguageConfiguration): void;
283 284
}

285
export interface MainThreadLanguagesShape extends IDisposable {
286
	$getLanguages(): TPromise<string[]>;
287 288
}

289
export interface MainThreadMessageOptions {
290
	extension?: IExtensionDescription;
291
	modal?: boolean;
292 293
}

294
export interface MainThreadMessageServiceShape extends IDisposable {
295
	$showMessage(severity: Severity, message: string, options: MainThreadMessageOptions, commands: { title: string; isCloseAffordance: boolean; handle: number; }[]): Thenable<number>;
296 297
}

298
export interface MainThreadOutputServiceShape extends IDisposable {
299 300 301 302 303
	$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>;
304 305
}

306
export interface MainThreadProgressShape extends IDisposable {
307

308 309 310
	$startProgress(handle: number, options: IProgressOptions): void;
	$progressReport(handle: number, message: IProgressStep): void;
	$progressEnd(handle: number): void;
311 312
}

313
export interface MainThreadTerminalServiceShape extends IDisposable {
314
	$createTerminal(name?: string, shellPath?: string, shellArgs?: string[], cwd?: string, env?: { [key: string]: string }, waitOnExit?: boolean): TPromise<number>;
315 316 317 318
	$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 已提交
319 320
}

321 322 323
export interface MyQuickPickItems extends IPickOpenEntry {
	handle: number;
}
324
export interface MainThreadQuickOpenShape extends IDisposable {
325 326 327 328
	$show(options: IPickOptions): TPromise<number>;
	$setItems(items: MyQuickPickItems[]): TPromise<any>;
	$setError(error: Error): TPromise<any>;
	$input(options: vscode.InputBoxOptions, validateInput: boolean): TPromise<string>;
329 330
}

331
export interface MainThreadStatusBarShape extends IDisposable {
332
	$setEntry(id: number, extensionId: string, text: string, tooltip: string, command: string, color: string | ThemeColor, alignment: MainThreadStatusBarAlignment, priority: number): void;
333
	$dispose(id: number): void;
334 335
}

336
export interface MainThreadStorageShape extends IDisposable {
337
	$getValue<T>(shared: boolean, key: string): TPromise<T>;
338
	$setValue(shared: boolean, key: string, value: any): TPromise<void>;
339 340
}

341
export interface MainThreadTelemetryShape extends IDisposable {
342
	$publicLog(eventName: string, data?: any): void;
343 344
}

M
Matt Bierner 已提交
345 346 347 348 349 350 351 352 353 354 355 356 357 358 359
export interface MainThreadWebviewShape extends IDisposable {
	$createWebview(handle: number): void;
	$disposeWebview(handle: number): void;
	$show(handle: number, column: EditorPosition): void;
	$setTitle(handle: number, value: string): void;
	$setHtml(handle: number, value: string): void;
	$setOptions(handle: number, value: vscode.WebviewOptions): void;
	$sendMessage(handle: number, value: any): Thenable<boolean>;
}
export interface ExtHostWebviewsShape {
	$onMessage(handle: number, message: any): void;
	$onBecameActive(handle: number): void;
	$onBecameInactive(handle: number): void;
}

360
export interface MainThreadWorkspaceShape extends IDisposable {
J
Johannes Rieken 已提交
361
	$startSearch(includePattern: string, includeFolder: string, excludePatternOrDisregardExcludes: string | false, maxResults: number, requestId: number): Thenable<UriComponents[]>;
362 363
	$cancelSearch(requestId: number): Thenable<boolean>;
	$saveAll(includeUntitled?: boolean): Thenable<boolean>;
364
	$updateWorkspaceFolders(extensionName: string, index: number, deleteCount: number, workspaceFoldersToAdd: { uri: UriComponents, name?: string }[]): Thenable<void>;
365
}
366

J
Johannes Rieken 已提交
367 368 369 370 371
export interface IFileChangeDto {
	resource: UriComponents;
	type: FileChangeType;
}

372 373
export interface MainThreadFileSystemShape extends IDisposable {
	$registerFileSystemProvider(handle: number, scheme: string): void;
374
	$unregisterFileSystemProvider(handle: number): void;
375

376
	$onDidAddFileSystemRoot(root: UriComponents): void;
J
Johannes Rieken 已提交
377
	$onFileSystemChange(handle: number, resource: IFileChangeDto[]): void;
J
Johannes Rieken 已提交
378
	$reportFileChunk(handle: number, session: number, chunk: number[] | null): void;
J
Johannes Rieken 已提交
379

380
	$handleFindMatch(handle: number, session, data: UriComponents | [UriComponents, ILineMatch]): void;
381 382
}

383
export interface MainThreadTaskShape extends IDisposable {
384 385
	$registerTaskProvider(handle: number): TPromise<void>;
	$unregisterTaskProvider(handle: number): TPromise<void>;
386 387
}

388
export interface MainThreadExtensionServiceShape extends IDisposable {
389
	$localShowMessage(severity: Severity, msg: string): void;
A
Alex Dima 已提交
390
	$onExtensionActivated(extensionId: string, startup: boolean, codeLoadingTime: number, activateCallTime: number, activateResolvedTime: number, activationEvent: string): void;
391
	$onExtensionActivationFailed(extensionId: string): void;
392
	$onExtensionRuntimeError(extensionId: string, error: SerializedError): void;
A
Alex Dima 已提交
393
	$addMessage(extensionId: string, severity: Severity, message: string): void;
394 395
}

J
Joao Moreno 已提交
396
export interface SCMProviderFeatures {
J
Joao Moreno 已提交
397 398
	hasQuickDiffProvider?: boolean;
	count?: number;
399 400 401
	commitTemplate?: string;
	acceptInputCommand?: modes.Command;
	statusBarCommands?: modes.Command[];
J
Joao Moreno 已提交
402 403 404 405
}

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

J
Joao Moreno 已提交
408
export type SCMRawResource = [
409
	number /*handle*/,
410
	UriComponents /*resourceUri*/,
J
Joao Moreno 已提交
411
	string[] /*icons: light, dark*/,
412
	string /*tooltip*/,
413
	boolean /*strike through*/,
414 415
	boolean /*faded*/,

J
Joao Moreno 已提交
416 417 418
	string | undefined /*source*/,
	string | undefined /*letter*/,
	ThemeColor | null /*color*/
J
Joao Moreno 已提交
419
];
420

421 422 423
export type SCMRawResourceSplice = [
	number /* start */,
	number /* delete count */,
J
Joao 已提交
424 425 426
	SCMRawResource[]
];

427 428 429 430 431
export type SCMRawResourceSplices = [
	number, /*handle*/
	SCMRawResourceSplice[]
];

432
export interface MainThreadSCMShape extends IDisposable {
433
	$registerSourceControl(handle: number, id: string, label: string, rootUri: UriComponents | undefined): void;
434 435
	$updateSourceControl(handle: number, features: SCMProviderFeatures): void;
	$unregisterSourceControl(handle: number): void;
J
Joao Moreno 已提交
436

437 438 439 440
	$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 已提交
441

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

J
Joao Moreno 已提交
444
	$setInputBoxValue(sourceControlHandle: number, value: string): void;
445
	$setInputBoxPlaceholder(sourceControlHandle: number, placeholder: string): void;
446
	$setValidationProviderIsEnabled(sourceControlHandle: number, enabled: boolean): void;
J
Joao Moreno 已提交
447 448
}

449 450
export type DebugSessionUUID = string;

451
export interface MainThreadDebugServiceShape extends IDisposable {
452
	$registerDebugConfigurationProvider(type: string, hasProvideMethod: boolean, hasResolveMethod: boolean, hasDebugAdapterExecutable: boolean, handle: number): TPromise<any>;
453
	$unregisterDebugConfigurationProvider(handle: number): TPromise<any>;
454
	$startDebugging(folder: UriComponents | undefined, nameOrConfig: string | vscode.DebugConfiguration): TPromise<boolean>;
455
	$customDebugAdapterRequest(id: DebugSessionUUID, command: string, args: any): TPromise<any>;
456
	$appendDebugConsole(value: string): TPromise<any>;
457
	$startBreakpointEvents(): TPromise<any>;
458
	$registerBreakpoints(breakpoints: (ISourceMultiBreakpointDto | IFunctionBreakpointDto)[]): TPromise<void>;
459
	$unregisterBreakpoints(breakpointIds: string[], functionBreakpointIds: string[]): TPromise<void>;
460 461
}

462 463
export interface MainThreadWindowShape extends IDisposable {
	$getWindowVisibility(): TPromise<boolean>;
464 465
}

466 467
// -- extension host

468
export interface ExtHostCommandsShape {
J
Johannes Rieken 已提交
469
	$executeContributedCommand<T>(id: string, ...args: any[]): Thenable<T>;
470
	$getContributedCommandHandlerDescriptions(): Thenable<{ [id: string]: string | ICommandHandlerDescription }>;
471 472
}

473
export interface ExtHostConfigurationShape {
474
	$acceptConfigurationChanged(data: IConfigurationData, eventData: IWorkspaceConfigurationChangeEventData): void;
475 476
}

477
export interface ExtHostDiagnosticsShape {
478 479 480

}

481
export interface ExtHostDocumentContentProvidersShape {
J
Johannes Rieken 已提交
482
	$provideTextDocumentContent(handle: number, uri: UriComponents): TPromise<string>;
483 484
}

485
export interface IModelAddedData {
486
	uri: UriComponents;
487
	versionId: number;
488 489
	lines: string[];
	EOL: string;
490 491 492
	modeId: string;
	isDirty: boolean;
}
493
export interface ExtHostDocumentsShape {
494 495 496 497
	$acceptModelModeChanged(strURL: UriComponents, oldModeId: string, newModeId: string): void;
	$acceptModelSaved(strURL: UriComponents): void;
	$acceptDirtyStateChanged(strURL: UriComponents, isDirty: boolean): void;
	$acceptModelChanged(strURL: UriComponents, e: IModelChangedEvent, isDirty: boolean): void;
498 499
}

500
export interface ExtHostDocumentSaveParticipantShape {
J
Johannes Rieken 已提交
501
	$participateInSave(resource: UriComponents, reason: SaveReason): Thenable<boolean[]>;
502 503
}

504 505
export interface ITextEditorAddData {
	id: string;
506
	documentUri: UriComponents;
507
	options: IResolvedTextEditorConfiguration;
A
Alex Dima 已提交
508
	selections: ISelection[];
509 510 511 512 513
	editorPosition: EditorPosition;
}
export interface ITextEditorPositionData {
	[id: string]: EditorPosition;
}
514 515 516 517 518 519 520 521 522
export interface IEditorPropertiesChangeData {
	options: IResolvedTextEditorConfiguration | null;
	selections: ISelectionChangeEvent | null;
}
export interface ISelectionChangeEvent {
	selections: Selection[];
	source?: string;
}

523
export interface ExtHostEditorsShape {
524
	$acceptEditorPropertiesChanged(id: string, props: IEditorPropertiesChangeData): void;
525
	$acceptEditorPositionData(data: ITextEditorPositionData): void;
526 527
}

J
Johannes Rieken 已提交
528
export interface IDocumentsAndEditorsDelta {
529
	removedDocuments?: UriComponents[];
J
Johannes Rieken 已提交
530 531 532 533 534 535
	addedDocuments?: IModelAddedData[];
	removedEditors?: string[];
	addedEditors?: ITextEditorAddData[];
	newActiveEditor?: string;
}

536 537
export interface ExtHostDocumentsAndEditorsShape {
	$acceptDocumentsAndEditorsDelta(delta: IDocumentsAndEditorsDelta): void;
J
Johannes Rieken 已提交
538 539
}

540
export interface ExtHostTreeViewsShape {
541
	$getChildren(treeViewId: string, treeItemHandle?: string): TPromise<ITreeItem[]>;
S
Sandeep Somavarapu 已提交
542 543
}

544 545
export interface ExtHostWorkspaceShape {
	$acceptWorkspaceData(workspace: IWorkspaceData): void;
546
}
547

548
export interface ExtHostFileSystemShape {
J
Johannes Rieken 已提交
549 550
	$utimes(handle: number, resource: UriComponents, mtime: number, atime: number): TPromise<IStat>;
	$stat(handle: number, resource: UriComponents): TPromise<IStat>;
J
Johannes Rieken 已提交
551
	$read(handle: number, session: number, offset: number, count: number, resource: UriComponents): TPromise<number>;
J
Johannes Rieken 已提交
552 553 554 555 556 557
	$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 已提交
558
	$findFiles(handle: number, session: number, query: string): TPromise<void>;
559
	$provideTextSearchResults(handle: number, session: number, pattern: IPatternInfo, options: { includes: string[], excludes: string[] }): TPromise<void>;
560 561
}

562 563
export interface ExtHostExtensionServiceShape {
	$activateByEvent(activationEvent: string): TPromise<void>;
564 565 566
}

export interface FileSystemEvents {
J
Johannes Rieken 已提交
567 568 569
	created: UriComponents[];
	changed: UriComponents[];
	deleted: UriComponents[];
570
}
571
export interface ExtHostFileSystemEventServiceShape {
572
	$onFileEvent(events: FileSystemEvents): void;
573 574
}

J
Johannes Rieken 已提交
575 576 577 578 579
export interface ObjectIdentifier {
	$ident: number;
}

export namespace ObjectIdentifier {
580
	export const name = '$ident';
J
Johannes Rieken 已提交
581
	export function mixin<T>(obj: T, id: number): T & ObjectIdentifier {
582
		Object.defineProperty(obj, name, { value: id, enumerable: true });
J
Johannes Rieken 已提交
583 584
		return <T & ObjectIdentifier>obj;
	}
585 586
	export function of(obj: any): number {
		return obj[name];
J
Johannes Rieken 已提交
587 588 589
	}
}

590 591
export interface ExtHostHeapServiceShape {
	$onGarbageCollection(ids: number[]): void;
592
}
593
export interface IRawColorInfo {
J
Joao Moreno 已提交
594
	color: [number, number, number, number];
595 596 597
	range: IRange;
}

598 599 600 601 602 603 604 605 606 607
export class IdObject {
	_id?: number;
	private static _n = 0;
	static mixin<T extends object>(object: T): T & IdObject {
		(<any>object)._id = IdObject._n++;
		return <any>object;
	}
}

export interface SuggestionDto extends modes.ISuggestion {
608 609 610 611
	_id: number;
	_parentId: number;
}

612 613
export interface SuggestResultDto extends IdObject {
	suggestions: SuggestionDto[];
614 615 616
	incomplete?: boolean;
}

617 618 619
export interface LocationDto {
	uri: UriComponents;
	range: IRange;
620 621
}

622 623 624 625 626 627 628 629 630 631 632
export interface SymbolInformationDto extends IdObject {
	name: string;
	containerName?: string;
	kind: modes.SymbolKind;
	location: LocationDto;
}

export interface WorkspaceSymbolsDto extends IdObject {
	symbols: SymbolInformationDto[];
}

633 634 635 636 637 638
export interface ResourceFileEditDto {
	oldUri: UriComponents;
	newUri: UriComponents;
}

export interface ResourceTextEditDto {
639
	resource: UriComponents;
640 641
	modelVersionId?: number;
	edits: modes.TextEdit[];
642 643
}

644
export interface WorkspaceEditDto {
645 646 647
	edits: (ResourceFileEditDto | ResourceTextEditDto)[];

	// todo@joh reject should go into rename
648 649 650
	rejectReason?: string;
}

651 652 653 654 655 656 657 658 659 660 661 662 663 664
export function reviveWorkspaceEditDto(data: WorkspaceEditDto): modes.WorkspaceEdit {
	if (data && data.edits) {
		for (const edit of data.edits) {
			if (typeof (<ResourceTextEditDto>edit).resource === 'object') {
				(<ResourceTextEditDto>edit).resource = URI.revive((<ResourceTextEditDto>edit).resource);
			} else {
				(<ResourceFileEditDto>edit).newUri = URI.revive((<ResourceFileEditDto>edit).newUri);
				(<ResourceFileEditDto>edit).oldUri = URI.revive((<ResourceFileEditDto>edit).oldUri);
			}
		}
	}
	return <modes.WorkspaceEdit>data;
}

665 666
export interface CodeActionDto {
	title: string;
667
	edit?: WorkspaceEditDto;
668 669
	diagnostics?: IMarkerData[];
	command?: modes.Command;
J
Johannes Rieken 已提交
670
	kind?: string;
671
}
672

673
export interface ExtHostLanguageFeaturesShape {
674
	$provideDocumentSymbols(handle: number, resource: UriComponents): TPromise<SymbolInformationDto[]>;
675 676
	$provideCodeLenses(handle: number, resource: UriComponents): TPromise<modes.ICodeLensSymbol[]>;
	$resolveCodeLens(handle: number, resource: UriComponents, symbol: modes.ICodeLensSymbol): TPromise<modes.ICodeLensSymbol>;
677 678 679
	$provideDefinition(handle: number, resource: UriComponents, position: IPosition): TPromise<LocationDto | LocationDto[]>;
	$provideImplementation(handle: number, resource: UriComponents, position: IPosition): TPromise<LocationDto | LocationDto[]>;
	$provideTypeDefinition(handle: number, resource: UriComponents, position: IPosition): TPromise<LocationDto | LocationDto[]>;
680 681
	$provideHover(handle: number, resource: UriComponents, position: IPosition): TPromise<modes.Hover>;
	$provideDocumentHighlights(handle: number, resource: UriComponents, position: IPosition): TPromise<modes.DocumentHighlight[]>;
682
	$provideReferences(handle: number, resource: UriComponents, position: IPosition, context: modes.ReferenceContext): TPromise<LocationDto[]>;
M
Matt Bierner 已提交
683
	$provideCodeActions(handle: number, resource: UriComponents, range: IRange, context: modes.CodeActionContext): TPromise<CodeActionDto[]>;
684 685 686
	$provideDocumentFormattingEdits(handle: number, resource: UriComponents, options: modes.FormattingOptions): TPromise<ISingleEditOperation[]>;
	$provideDocumentRangeFormattingEdits(handle: number, resource: UriComponents, range: IRange, options: modes.FormattingOptions): TPromise<ISingleEditOperation[]>;
	$provideOnTypeFormattingEdits(handle: number, resource: UriComponents, position: IPosition, ch: string, options: modes.FormattingOptions): TPromise<ISingleEditOperation[]>;
687 688
	$provideWorkspaceSymbols(handle: number, search: string): TPromise<WorkspaceSymbolsDto>;
	$resolveWorkspaceSymbol(handle: number, symbol: SymbolInformationDto): TPromise<SymbolInformationDto>;
689
	$releaseWorkspaceSymbols(handle: number, id: number): void;
690
	$provideRenameEdits(handle: number, resource: UriComponents, position: IPosition, newName: string): TPromise<WorkspaceEditDto>;
691
	$resolveInitialRenameValue(handle: number, resource: UriComponents, position: IPosition): TPromise<modes.RenameInitialValue>;
692
	$provideCompletionItems(handle: number, resource: UriComponents, position: IPosition, context: modes.SuggestContext): TPromise<SuggestResultDto>;
693
	$resolveCompletionItem(handle: number, resource: UriComponents, position: IPosition, suggestion: modes.ISuggestion): TPromise<modes.ISuggestion>;
694
	$releaseCompletionItems(handle: number, id: number): void;
695 696
	$provideSignatureHelp(handle: number, resource: UriComponents, position: IPosition): TPromise<modes.SignatureHelp>;
	$provideDocumentLinks(handle: number, resource: UriComponents): TPromise<modes.ILink[]>;
697
	$resolveDocumentLink(handle: number, link: modes.ILink): TPromise<modes.ILink>;
698 699
	$provideDocumentColors(handle: number, resource: UriComponents): TPromise<IRawColorInfo[]>;
	$provideColorPresentations(handle: number, resource: UriComponents, colorInfo: IRawColorInfo): TPromise<modes.IColorPresentation[]>;
700
	$provideFoldingRanges(handle: number, resource: UriComponents): TPromise<modes.IFoldingRangeList>;
701 702
}

703 704 705
export interface ExtHostQuickOpenShape {
	$onItemSelected(handle: number): void;
	$validateInput(input: string): TPromise<string>;
706 707
}

708 709 710
export interface ExtHostTerminalServiceShape {
	$acceptTerminalClosed(id: number): void;
	$acceptTerminalProcessId(id: number, processId: number): void;
711 712
}

713
export interface ExtHostSCMShape {
714
	$provideOriginalResource(sourceControlHandle: number, uri: UriComponents): TPromise<UriComponents>;
J
Joao Moreno 已提交
715
	$onInputBoxValueChange(sourceControlHandle: number, value: string): TPromise<void>;
716
	$executeResourceCommand(sourceControlHandle: number, groupHandle: number, handle: number): TPromise<void>;
717
	$validateInput(sourceControlHandle: number, value: string, cursorPosition: number): TPromise<[string, number] | undefined>;
J
Joao Moreno 已提交
718 719
}

720 721
export interface ExtHostTaskShape {
	$provideTasks(handle: number): TPromise<TaskSet>;
722 723
}

724 725 726
export interface IFunctionBreakpointDto {
	type: 'function';
	id?: string;
727 728 729
	enabled: boolean;
	condition?: string;
	hitCondition?: string;
730
	functionName: string;
731 732
}

733
export interface ISourceBreakpointDto {
734
	type: 'source';
735 736 737 738
	id?: string;
	enabled: boolean;
	condition?: string;
	hitCondition?: string;
739
	uri: UriComponents;
740 741
	line: number;
	character: number;
742 743
}

744 745 746 747
export interface IBreakpointsDeltaDto {
	added?: (ISourceBreakpointDto | IFunctionBreakpointDto)[];
	removed?: string[];
	changed?: (ISourceBreakpointDto | IFunctionBreakpointDto)[];
748 749
}

750 751 752 753
export interface ISourceMultiBreakpointDto {
	type: 'sourceMulti';
	uri: UriComponents;
	lines: {
754
		id: string;
755 756 757 758 759 760
		enabled: boolean;
		condition?: string;
		hitCondition?: string;
		line: number;
		character: number;
	}[];
761 762
}

763
export interface ExtHostDebugServiceShape {
764 765
	$resolveDebugConfiguration(handle: number, folder: UriComponents | undefined, debugConfiguration: IConfig): TPromise<IConfig>;
	$provideDebugConfigurations(handle: number, folder: UriComponents | undefined): TPromise<IConfig[]>;
766
	$debugAdapterExecutable(handle: number, folder: UriComponents | undefined): TPromise<IAdapterExecutable>;
767 768 769 770
	$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;
771
	$acceptBreakpointsDelta(delat: IBreakpointsDeltaDto): void;
772 773
}

774

775 776 777 778 779 780
export interface DecorationRequest {
	readonly id: number;
	readonly handle: number;
	readonly uri: UriComponents;
}

781
export type DecorationData = [number, boolean, string, string, ThemeColor, string];
782
export type DecorationReply = { [id: number]: DecorationData };
783 784

export interface ExtHostDecorationsShape {
785
	$provideDecorations(requests: DecorationRequest[]): TPromise<DecorationReply>;
786 787
}

788 789
export interface ExtHostWindowShape {
	$onDidChangeWindowFocus(value: boolean): void;
790 791
}

S
Sandeep Somavarapu 已提交
792
export interface ExtHostLogServiceShape {
793
	$setLevel(level: LogLevel);
S
Sandeep Somavarapu 已提交
794 795
}

796 797 798
// --- proxy identifiers

export const MainContext = {
799
	MainThreadCommands: <ProxyIdentifier<MainThreadCommandsShape>>createMainId<MainThreadCommandsShape>('MainThreadCommands'),
800
	MainThreadConfiguration: createMainId<MainThreadConfigurationShape>('MainThreadConfiguration'),
801
	MainThreadDebugService: createMainId<MainThreadDebugServiceShape>('MainThreadDebugService'),
802 803 804 805
	MainThreadDecorations: createMainId<MainThreadDecorationsShape>('MainThreadDecorations'),
	MainThreadDiagnostics: createMainId<MainThreadDiagnosticsShape>('MainThreadDiagnostics'),
	MainThreadDialogs: createMainId<MainThreadDiaglogsShape>('MainThreadDiaglogs'),
	MainThreadDocuments: createMainId<MainThreadDocumentsShape>('MainThreadDocuments'),
806
	MainThreadDocumentContentProviders: createMainId<MainThreadDocumentContentProvidersShape>('MainThreadDocumentContentProviders'),
807
	MainThreadTextEditors: createMainId<MainThreadTextEditorsShape>('MainThreadTextEditors'),
808 809
	MainThreadErrors: createMainId<MainThreadErrorsShape>('MainThreadErrors'),
	MainThreadTreeViews: createMainId<MainThreadTreeViewsShape>('MainThreadTreeViews'),
810
	MainThreadLanguageFeatures: createMainId<MainThreadLanguageFeaturesShape>('MainThreadLanguageFeatures'),
811
	MainThreadLanguages: createMainId<MainThreadLanguagesShape>('MainThreadLanguages'),
812
	MainThreadMessageService: createMainId<MainThreadMessageServiceShape>('MainThreadMessageService'),
813 814
	MainThreadOutputService: createMainId<MainThreadOutputServiceShape>('MainThreadOutputService'),
	MainThreadProgress: createMainId<MainThreadProgressShape>('MainThreadProgress'),
815
	MainThreadQuickOpen: createMainId<MainThreadQuickOpenShape>('MainThreadQuickOpen'),
816
	MainThreadStatusBar: createMainId<MainThreadStatusBarShape>('MainThreadStatusBar'),
817
	MainThreadStorage: createMainId<MainThreadStorageShape>('MainThreadStorage'),
818
	MainThreadTelemetry: createMainId<MainThreadTelemetryShape>('MainThreadTelemetry'),
819
	MainThreadTerminalService: createMainId<MainThreadTerminalServiceShape>('MainThreadTerminalService'),
M
Matt Bierner 已提交
820
	MainThreadWebview: createMainId<MainThreadWebviewShape>('MainThreadWebview'),
821
	MainThreadWorkspace: createMainId<MainThreadWorkspaceShape>('MainThreadWorkspace'),
822
	MainThreadFileSystem: createMainId<MainThreadFileSystemShape>('MainThreadFileSystem'),
823
	MainThreadExtensionService: createMainId<MainThreadExtensionServiceShape>('MainThreadExtensionService'),
J
Joao Moreno 已提交
824
	MainThreadSCM: createMainId<MainThreadSCMShape>('MainThreadSCM'),
825
	MainThreadTask: createMainId<MainThreadTaskShape>('MainThreadTask'),
826
	MainThreadWindow: createMainId<MainThreadWindowShape>('MainThreadWindow'),
827 828 829
};

export const ExtHostContext = {
830
	ExtHostCommands: createExtId<ExtHostCommandsShape>('ExtHostCommands'),
831
	ExtHostConfiguration: createExtId<ExtHostConfigurationShape>('ExtHostConfiguration'),
832
	ExtHostDiagnostics: createExtId<ExtHostDiagnosticsShape>('ExtHostDiagnostics'),
833
	ExtHostDebugService: createExtId<ExtHostDebugServiceShape>('ExtHostDebugService'),
J
Johannes Rieken 已提交
834
	ExtHostDecorations: createExtId<ExtHostDecorationsShape>('ExtHostDecorations'),
835
	ExtHostDocumentsAndEditors: createExtId<ExtHostDocumentsAndEditorsShape>('ExtHostDocumentsAndEditors'),
836
	ExtHostDocuments: createExtId<ExtHostDocumentsShape>('ExtHostDocuments'),
J
Johannes Rieken 已提交
837
	ExtHostDocumentContentProviders: createExtId<ExtHostDocumentContentProvidersShape>('ExtHostDocumentContentProviders'),
J
Johannes Rieken 已提交
838
	ExtHostDocumentSaveParticipant: createExtId<ExtHostDocumentSaveParticipantShape>('ExtHostDocumentSaveParticipant'),
J
Johannes Rieken 已提交
839
	ExtHostEditors: createExtId<ExtHostEditorsShape>('ExtHostEditors'),
840
	ExtHostTreeViews: createExtId<ExtHostTreeViewsShape>('ExtHostTreeViews'),
J
Johannes Rieken 已提交
841
	ExtHostFileSystem: createExtId<ExtHostFileSystemShape>('ExtHostFileSystem'),
J
Johannes Rieken 已提交
842
	ExtHostFileSystemEventService: createExtId<ExtHostFileSystemEventServiceShape>('ExtHostFileSystemEventService'),
843
	ExtHostHeapService: createExtId<ExtHostHeapServiceShape>('ExtHostHeapMonitor'),
844
	ExtHostLanguageFeatures: createExtId<ExtHostLanguageFeaturesShape>('ExtHostLanguageFeatures'),
845 846
	ExtHostQuickOpen: createExtId<ExtHostQuickOpenShape>('ExtHostQuickOpen'),
	ExtHostExtensionService: createExtId<ExtHostExtensionServiceShape>('ExtHostExtensionService'),
847
	ExtHostLogService: createExtId<ExtHostLogServiceShape>('ExtHostLogService'),
848
	ExtHostTerminalService: createExtId<ExtHostTerminalServiceShape>('ExtHostTerminalService'),
J
Joao Moreno 已提交
849
	ExtHostSCM: createExtId<ExtHostSCMShape>('ExtHostSCM'),
850
	ExtHostTask: createExtId<ExtHostTaskShape>('ExtHostTask'),
851
	ExtHostWorkspace: createExtId<ExtHostWorkspaceShape>('ExtHostWorkspace'),
852
	ExtHostWindow: createExtId<ExtHostWindowShape>('ExtHostWindow'),
M
Matt Bierner 已提交
853
	ExtHostWebviews: createExtId<ExtHostWebviewsShape>('ExtHostWebviews')
854
};