extHost.protocol.ts 34.6 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';
A
Alex Dima 已提交
17
import { IExtensionDescription } from 'vs/platform/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 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
	$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 187 188 189 190 191
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;
}

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

199
export interface MainThreadEditorsShape extends IDisposable {
200
	$tryShowTextDocument(resource: UriComponents, options: ITextDocumentShowOptions): TPromise<string>;
201 202 203 204
	$registerTextEditorDecorationType(key: string, options: editorCommon.IDecorationRenderOptions): void;
	$removeTextEditorDecorationType(key: string): void;
	$tryShowEditor(id: string, position: EditorPosition): TPromise<void>;
	$tryHideEditor(id: string): TPromise<void>;
205 206 207 208 209
	$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>;
210
	$tryApplyEdits(id: string, modelVersionId: number, edits: ISingleEditOperation[], opts: IApplyEditsOptions): TPromise<boolean>;
211
	$tryApplyWorkspaceEdit(workspaceEditDto: WorkspaceEditDto): TPromise<boolean>;
212
	$tryInsertSnippet(id: string, template: string, selections: IRange[], opts: IUndoStopOptions): TPromise<boolean>;
213
	$getDiffInformation(id: string): TPromise<editorCommon.ILineChange[]>;
214 215
}

216
export interface MainThreadTreeViewsShape extends IDisposable {
S
Sandeep Somavarapu 已提交
217
	$registerTreeViewDataProvider(treeViewId: string): void;
S
Sandeep Somavarapu 已提交
218
	$refresh(treeViewId: string, itemsToRefresh?: { [treeItemHandle: string]: ITreeItem }): void;
219 220
}

221
export interface MainThreadErrorsShape extends IDisposable {
222
	$onUnexpectedError(err: any | SerializedError): void;
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 260 261 262 263
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[];
		}[];
	};
}

264
export interface MainThreadLanguageFeaturesShape extends IDisposable {
265 266 267 268 269 270 271 272 273 274 275 276 277 278 279
	$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;
280
	$registerRenameSupport(handle: number, selector: vscode.DocumentSelector, supportsResolveInitialValues: boolean): void;
281 282 283 284 285
	$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;
	$setLanguageConfiguration(handle: number, languageId: string, configuration: ISerializedLanguageConfiguration): void;
286 287
}

288
export interface MainThreadLanguagesShape extends IDisposable {
289
	$getLanguages(): TPromise<string[]>;
290 291
}

292
export interface MainThreadMessageOptions {
293
	extension?: IExtensionDescription;
294
	modal?: boolean;
295 296
}

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

301
export interface MainThreadOutputServiceShape extends IDisposable {
302 303 304 305 306
	$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>;
307 308
}

309
export interface MainThreadProgressShape extends IDisposable {
310

311 312 313
	$startProgress(handle: number, options: IProgressOptions): void;
	$progressReport(handle: number, message: IProgressStep): void;
	$progressEnd(handle: number): void;
314 315
}

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

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

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

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

344
export interface MainThreadTelemetryShape extends IDisposable {
345
	$publicLog(eventName: string, data?: any): void;
346 347
}

348
export interface MainThreadWorkspaceShape extends IDisposable {
J
Johannes Rieken 已提交
349
	$startSearch(includePattern: string, includeFolder: string, excludePatternOrDisregardExcludes: string | false, maxResults: number, requestId: number): Thenable<UriComponents[]>;
350 351
	$cancelSearch(requestId: number): Thenable<boolean>;
	$saveAll(includeUntitled?: boolean): Thenable<boolean>;
352
	$updateWorkspaceFolders(extensionName: string, index: number, deleteCount: number, workspaceFoldersToAdd: { uri: UriComponents, name?: string }[]): Thenable<void>;
353
}
354

J
Johannes Rieken 已提交
355 356 357 358 359
export interface IFileChangeDto {
	resource: UriComponents;
	type: FileChangeType;
}

360 361
export interface MainThreadFileSystemShape extends IDisposable {
	$registerFileSystemProvider(handle: number, scheme: string): void;
362
	$unregisterFileSystemProvider(handle: number): void;
363

364
	$onDidAddFileSystemRoot(root: UriComponents): void;
J
Johannes Rieken 已提交
365
	$onFileSystemChange(handle: number, resource: IFileChangeDto[]): void;
J
Johannes Rieken 已提交
366
	$reportFileChunk(handle: number, session: number, chunk: number[] | null): void;
J
Johannes Rieken 已提交
367

368
	$handleFindMatch(handle: number, session, data: UriComponents | [UriComponents, ILineMatch]): void;
369 370
}

371
export interface MainThreadTaskShape extends IDisposable {
372 373
	$registerTaskProvider(handle: number): TPromise<void>;
	$unregisterTaskProvider(handle: number): TPromise<void>;
374 375
}

376
export interface MainThreadExtensionServiceShape extends IDisposable {
377
	$localShowMessage(severity: Severity, msg: string): void;
A
Alex Dima 已提交
378
	$onExtensionActivated(extensionId: string, startup: boolean, codeLoadingTime: number, activateCallTime: number, activateResolvedTime: number, activationEvent: string): void;
379
	$onExtensionActivationFailed(extensionId: string): void;
380
	$onExtensionRuntimeError(extensionId: string, error: SerializedError): void;
A
Alex Dima 已提交
381
	$addMessage(extensionId: string, severity: Severity, message: string): void;
382 383
}

J
Joao Moreno 已提交
384
export interface SCMProviderFeatures {
J
Joao Moreno 已提交
385 386
	hasQuickDiffProvider?: boolean;
	count?: number;
387 388 389
	commitTemplate?: string;
	acceptInputCommand?: modes.Command;
	statusBarCommands?: modes.Command[];
J
Joao Moreno 已提交
390 391 392 393
}

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

J
Joao Moreno 已提交
396
export type SCMRawResource = [
397
	number /*handle*/,
398
	UriComponents /*resourceUri*/,
J
Joao Moreno 已提交
399
	string[] /*icons: light, dark*/,
400
	string /*tooltip*/,
401
	boolean /*strike through*/,
402 403
	boolean /*faded*/,

J
Joao Moreno 已提交
404 405 406
	string | undefined /*source*/,
	string | undefined /*letter*/,
	ThemeColor | null /*color*/
J
Joao Moreno 已提交
407
];
408

409 410 411
export type SCMRawResourceSplice = [
	number /* start */,
	number /* delete count */,
J
Joao 已提交
412 413 414
	SCMRawResource[]
];

415 416 417 418 419
export type SCMRawResourceSplices = [
	number, /*handle*/
	SCMRawResourceSplice[]
];

420
export interface MainThreadSCMShape extends IDisposable {
421
	$registerSourceControl(handle: number, id: string, label: string, rootUri: UriComponents | undefined): void;
422 423
	$updateSourceControl(handle: number, features: SCMProviderFeatures): void;
	$unregisterSourceControl(handle: number): void;
J
Joao Moreno 已提交
424

425 426 427 428
	$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 已提交
429

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

J
Joao Moreno 已提交
432
	$setInputBoxValue(sourceControlHandle: number, value: string): void;
433
	$setInputBoxPlaceholder(sourceControlHandle: number, placeholder: string): void;
434
	$setValidationProviderIsEnabled(sourceControlHandle: number, enabled: boolean): void;
J
Joao Moreno 已提交
435 436
}

437 438
export type DebugSessionUUID = string;

439
export interface MainThreadDebugServiceShape extends IDisposable {
440
	$registerDebugConfigurationProvider(type: string, hasProvideMethod: boolean, hasResolveMethod: boolean, hasDebugAdapterExecutable: boolean, handle: number): TPromise<any>;
441
	$unregisterDebugConfigurationProvider(handle: number): TPromise<any>;
442
	$startDebugging(folder: UriComponents | undefined, nameOrConfig: string | vscode.DebugConfiguration): TPromise<boolean>;
443
	$customDebugAdapterRequest(id: DebugSessionUUID, command: string, args: any): TPromise<any>;
444
	$appendDebugConsole(value: string): TPromise<any>;
445
	$startBreakpointEvents(): TPromise<any>;
446
	$registerBreakpoints(breakpoints: (ISourceMultiBreakpointDto | IFunctionBreakpointDto)[]): TPromise<void>;
447
	$unregisterBreakpoints(breakpointIds: string[], functionBreakpointIds: string[]): TPromise<void>;
448 449
}

450 451
export interface MainThreadWindowShape extends IDisposable {
	$getWindowVisibility(): TPromise<boolean>;
452 453
}

454 455
// -- extension host

456
export interface ExtHostCommandsShape {
J
Johannes Rieken 已提交
457
	$executeContributedCommand<T>(id: string, ...args: any[]): Thenable<T>;
458
	$getContributedCommandHandlerDescriptions(): Thenable<{ [id: string]: string | ICommandHandlerDescription }>;
459 460
}

461
export interface ExtHostConfigurationShape {
462
	$acceptConfigurationChanged(data: IConfigurationData, eventData: IWorkspaceConfigurationChangeEventData): void;
463 464
}

465
export interface ExtHostDiagnosticsShape {
466 467 468

}

469
export interface ExtHostDocumentContentProvidersShape {
J
Johannes Rieken 已提交
470
	$provideTextDocumentContent(handle: number, uri: UriComponents): TPromise<string>;
471 472
}

473
export interface IModelAddedData {
474
	uri: UriComponents;
475
	versionId: number;
476 477
	lines: string[];
	EOL: string;
478 479 480
	modeId: string;
	isDirty: boolean;
}
481
export interface ExtHostDocumentsShape {
482 483 484 485
	$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;
486 487
}

488
export interface ExtHostDocumentSaveParticipantShape {
J
Johannes Rieken 已提交
489
	$participateInSave(resource: UriComponents, reason: SaveReason): Thenable<boolean[]>;
490 491
}

492 493
export interface ITextEditorAddData {
	id: string;
494
	documentUri: UriComponents;
495
	options: IResolvedTextEditorConfiguration;
A
Alex Dima 已提交
496
	selections: ISelection[];
497 498 499 500 501
	editorPosition: EditorPosition;
}
export interface ITextEditorPositionData {
	[id: string]: EditorPosition;
}
502 503 504 505
export interface ExtHostEditorsShape {
	$acceptOptionsChanged(id: string, opts: IResolvedTextEditorConfiguration): void;
	$acceptSelectionsChanged(id: string, event: ISelectionChangeEvent): void;
	$acceptEditorPositionData(data: ITextEditorPositionData): void;
506 507
}

J
Johannes Rieken 已提交
508
export interface IDocumentsAndEditorsDelta {
509
	removedDocuments?: UriComponents[];
J
Johannes Rieken 已提交
510 511 512 513 514 515
	addedDocuments?: IModelAddedData[];
	removedEditors?: string[];
	addedEditors?: ITextEditorAddData[];
	newActiveEditor?: string;
}

516 517
export interface ExtHostDocumentsAndEditorsShape {
	$acceptDocumentsAndEditorsDelta(delta: IDocumentsAndEditorsDelta): void;
J
Johannes Rieken 已提交
518 519
}

520
export interface ExtHostTreeViewsShape {
521
	$getChildren(treeViewId: string, treeItemHandle?: string): TPromise<ITreeItem[]>;
S
Sandeep Somavarapu 已提交
522 523
}

524 525
export interface ExtHostWorkspaceShape {
	$acceptWorkspaceData(workspace: IWorkspaceData): void;
526
}
527

528
export interface ExtHostFileSystemShape {
J
Johannes Rieken 已提交
529 530
	$utimes(handle: number, resource: UriComponents, mtime: number, atime: number): TPromise<IStat>;
	$stat(handle: number, resource: UriComponents): TPromise<IStat>;
J
Johannes Rieken 已提交
531
	$read(handle: number, session: number, offset: number, count: number, resource: UriComponents): TPromise<number>;
J
Johannes Rieken 已提交
532 533 534 535 536 537
	$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 已提交
538
	$findFiles(handle: number, session: number, query: string): TPromise<void>;
539
	$provideTextSearchResults(handle: number, session: number, pattern: IPatternInfo, options: { includes: string[], excludes: string[] }): TPromise<void>;
540 541
}

542 543
export interface ExtHostExtensionServiceShape {
	$activateByEvent(activationEvent: string): TPromise<void>;
544 545 546
}

export interface FileSystemEvents {
J
Johannes Rieken 已提交
547 548 549
	created: UriComponents[];
	changed: UriComponents[];
	deleted: UriComponents[];
550
}
551
export interface ExtHostFileSystemEventServiceShape {
552
	$onFileEvent(events: FileSystemEvents): void;
553 554
}

J
Johannes Rieken 已提交
555 556 557 558 559
export interface ObjectIdentifier {
	$ident: number;
}

export namespace ObjectIdentifier {
560
	export const name = '$ident';
J
Johannes Rieken 已提交
561
	export function mixin<T>(obj: T, id: number): T & ObjectIdentifier {
562
		Object.defineProperty(obj, name, { value: id, enumerable: true });
J
Johannes Rieken 已提交
563 564
		return <T & ObjectIdentifier>obj;
	}
565 566
	export function of(obj: any): number {
		return obj[name];
J
Johannes Rieken 已提交
567 568 569
	}
}

570 571
export interface ExtHostHeapServiceShape {
	$onGarbageCollection(ids: number[]): void;
572
}
573
export interface IRawColorInfo {
J
Joao Moreno 已提交
574
	color: [number, number, number, number];
575 576 577
	range: IRange;
}

578 579 580 581 582 583 584 585 586 587
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 {
588 589 590 591
	_id: number;
	_parentId: number;
}

592 593
export interface SuggestResultDto extends IdObject {
	suggestions: SuggestionDto[];
594 595 596
	incomplete?: boolean;
}

597 598 599
export interface LocationDto {
	uri: UriComponents;
	range: IRange;
600 601
}

602 603 604 605 606 607 608 609 610 611 612
export interface SymbolInformationDto extends IdObject {
	name: string;
	containerName?: string;
	kind: modes.SymbolKind;
	location: LocationDto;
}

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

613 614 615 616 617 618
export interface ResourceFileEditDto {
	oldUri: UriComponents;
	newUri: UriComponents;
}

export interface ResourceTextEditDto {
619
	resource: UriComponents;
620 621
	modelVersionId?: number;
	edits: modes.TextEdit[];
622 623
}

624
export interface WorkspaceEditDto {
625 626 627
	edits: (ResourceFileEditDto | ResourceTextEditDto)[];

	// todo@joh reject should go into rename
628 629 630
	rejectReason?: string;
}

631 632 633 634 635 636 637 638 639 640 641 642 643 644
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;
}

645 646
export interface CodeActionDto {
	title: string;
647
	edit?: WorkspaceEditDto;
648 649
	diagnostics?: IMarkerData[];
	command?: modes.Command;
J
Johannes Rieken 已提交
650
	kind?: string;
651
}
652

653
export interface ExtHostLanguageFeaturesShape {
654
	$provideDocumentSymbols(handle: number, resource: UriComponents): TPromise<SymbolInformationDto[]>;
655 656
	$provideCodeLenses(handle: number, resource: UriComponents): TPromise<modes.ICodeLensSymbol[]>;
	$resolveCodeLens(handle: number, resource: UriComponents, symbol: modes.ICodeLensSymbol): TPromise<modes.ICodeLensSymbol>;
657 658 659
	$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[]>;
660 661
	$provideHover(handle: number, resource: UriComponents, position: IPosition): TPromise<modes.Hover>;
	$provideDocumentHighlights(handle: number, resource: UriComponents, position: IPosition): TPromise<modes.DocumentHighlight[]>;
662
	$provideReferences(handle: number, resource: UriComponents, position: IPosition, context: modes.ReferenceContext): TPromise<LocationDto[]>;
M
Matt Bierner 已提交
663
	$provideCodeActions(handle: number, resource: UriComponents, range: IRange, context: modes.CodeActionContext): TPromise<CodeActionDto[]>;
664 665 666
	$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[]>;
667 668
	$provideWorkspaceSymbols(handle: number, search: string): TPromise<WorkspaceSymbolsDto>;
	$resolveWorkspaceSymbol(handle: number, symbol: SymbolInformationDto): TPromise<SymbolInformationDto>;
669
	$releaseWorkspaceSymbols(handle: number, id: number): void;
670
	$provideRenameEdits(handle: number, resource: UriComponents, position: IPosition, newName: string): TPromise<WorkspaceEditDto>;
671
	$resolveInitialRenameValue(handle: number, resource: UriComponents, position: IPosition): TPromise<modes.RenameInitialValue>;
672
	$provideCompletionItems(handle: number, resource: UriComponents, position: IPosition, context: modes.SuggestContext): TPromise<SuggestResultDto>;
673
	$resolveCompletionItem(handle: number, resource: UriComponents, position: IPosition, suggestion: modes.ISuggestion): TPromise<modes.ISuggestion>;
674
	$releaseCompletionItems(handle: number, id: number): void;
675 676
	$provideSignatureHelp(handle: number, resource: UriComponents, position: IPosition): TPromise<modes.SignatureHelp>;
	$provideDocumentLinks(handle: number, resource: UriComponents): TPromise<modes.ILink[]>;
677
	$resolveDocumentLink(handle: number, link: modes.ILink): TPromise<modes.ILink>;
678 679
	$provideDocumentColors(handle: number, resource: UriComponents): TPromise<IRawColorInfo[]>;
	$provideColorPresentations(handle: number, resource: UriComponents, colorInfo: IRawColorInfo): TPromise<modes.IColorPresentation[]>;
680 681
}

682 683 684
export interface ExtHostQuickOpenShape {
	$onItemSelected(handle: number): void;
	$validateInput(input: string): TPromise<string>;
685 686
}

687 688 689
export interface ExtHostTerminalServiceShape {
	$acceptTerminalClosed(id: number): void;
	$acceptTerminalProcessId(id: number, processId: number): void;
690 691
}

692
export interface ExtHostSCMShape {
693
	$provideOriginalResource(sourceControlHandle: number, uri: UriComponents): TPromise<UriComponents>;
J
Joao Moreno 已提交
694
	$onInputBoxValueChange(sourceControlHandle: number, value: string): TPromise<void>;
695
	$executeResourceCommand(sourceControlHandle: number, groupHandle: number, handle: number): TPromise<void>;
696
	$validateInput(sourceControlHandle: number, value: string, cursorPosition: number): TPromise<[string, number] | undefined>;
J
Joao Moreno 已提交
697 698
}

699 700
export interface ExtHostTaskShape {
	$provideTasks(handle: number): TPromise<TaskSet>;
701 702
}

703 704 705
export interface IFunctionBreakpointDto {
	type: 'function';
	id?: string;
706 707 708
	enabled: boolean;
	condition?: string;
	hitCondition?: string;
709
	functionName: string;
710 711
}

712
export interface ISourceBreakpointDto {
713
	type: 'source';
714 715 716 717
	id?: string;
	enabled: boolean;
	condition?: string;
	hitCondition?: string;
718
	uri: UriComponents;
719 720
	line: number;
	character: number;
721 722
}

723 724 725 726
export interface IBreakpointsDeltaDto {
	added?: (ISourceBreakpointDto | IFunctionBreakpointDto)[];
	removed?: string[];
	changed?: (ISourceBreakpointDto | IFunctionBreakpointDto)[];
727 728
}

729 730 731 732
export interface ISourceMultiBreakpointDto {
	type: 'sourceMulti';
	uri: UriComponents;
	lines: {
733
		id: string;
734 735 736 737 738 739
		enabled: boolean;
		condition?: string;
		hitCondition?: string;
		line: number;
		character: number;
	}[];
740 741
}

742
export interface ExtHostDebugServiceShape {
743 744
	$resolveDebugConfiguration(handle: number, folder: UriComponents | undefined, debugConfiguration: IConfig): TPromise<IConfig>;
	$provideDebugConfigurations(handle: number, folder: UriComponents | undefined): TPromise<IConfig[]>;
745
	$debugAdapterExecutable(handle: number, folder: UriComponents | undefined): TPromise<IAdapterExecutable>;
746 747 748 749
	$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;
750
	$acceptBreakpointsDelta(delat: IBreakpointsDeltaDto): void;
751 752
}

753

754 755 756 757 758 759
export interface DecorationRequest {
	readonly id: number;
	readonly handle: number;
	readonly uri: UriComponents;
}

760
export type DecorationData = [number, boolean, string, string, ThemeColor, string];
761
export type DecorationReply = { [id: number]: DecorationData };
762 763

export interface ExtHostDecorationsShape {
764
	$provideDecorations(requests: DecorationRequest[]): TPromise<DecorationReply>;
765 766
}

767 768
export interface ExtHostWindowShape {
	$onDidChangeWindowFocus(value: boolean): void;
769 770
}

S
Sandeep Somavarapu 已提交
771
export interface ExtHostLogServiceShape {
772
	$setLevel(level: LogLevel);
S
Sandeep Somavarapu 已提交
773 774
}

775 776 777
// --- proxy identifiers

export const MainContext = {
778
	MainThreadCommands: <ProxyIdentifier<MainThreadCommandsShape>>createMainId<MainThreadCommandsShape>('MainThreadCommands'),
779
	MainThreadConfiguration: createMainId<MainThreadConfigurationShape>('MainThreadConfiguration'),
780
	MainThreadDebugService: createMainId<MainThreadDebugServiceShape>('MainThreadDebugService'),
781 782 783 784
	MainThreadDecorations: createMainId<MainThreadDecorationsShape>('MainThreadDecorations'),
	MainThreadDiagnostics: createMainId<MainThreadDiagnosticsShape>('MainThreadDiagnostics'),
	MainThreadDialogs: createMainId<MainThreadDiaglogsShape>('MainThreadDiaglogs'),
	MainThreadDocuments: createMainId<MainThreadDocumentsShape>('MainThreadDocuments'),
785
	MainThreadDocumentContentProviders: createMainId<MainThreadDocumentContentProvidersShape>('MainThreadDocumentContentProviders'),
786
	MainThreadEditors: createMainId<MainThreadEditorsShape>('MainThreadEditors'),
787 788
	MainThreadErrors: createMainId<MainThreadErrorsShape>('MainThreadErrors'),
	MainThreadTreeViews: createMainId<MainThreadTreeViewsShape>('MainThreadTreeViews'),
789
	MainThreadLanguageFeatures: createMainId<MainThreadLanguageFeaturesShape>('MainThreadLanguageFeatures'),
790
	MainThreadLanguages: createMainId<MainThreadLanguagesShape>('MainThreadLanguages'),
791
	MainThreadMessageService: createMainId<MainThreadMessageServiceShape>('MainThreadMessageService'),
792 793
	MainThreadOutputService: createMainId<MainThreadOutputServiceShape>('MainThreadOutputService'),
	MainThreadProgress: createMainId<MainThreadProgressShape>('MainThreadProgress'),
794
	MainThreadQuickOpen: createMainId<MainThreadQuickOpenShape>('MainThreadQuickOpen'),
795
	MainThreadStatusBar: createMainId<MainThreadStatusBarShape>('MainThreadStatusBar'),
796
	MainThreadStorage: createMainId<MainThreadStorageShape>('MainThreadStorage'),
797
	MainThreadTelemetry: createMainId<MainThreadTelemetryShape>('MainThreadTelemetry'),
798
	MainThreadTerminalService: createMainId<MainThreadTerminalServiceShape>('MainThreadTerminalService'),
799
	MainThreadWorkspace: createMainId<MainThreadWorkspaceShape>('MainThreadWorkspace'),
800
	MainThreadFileSystem: createMainId<MainThreadFileSystemShape>('MainThreadFileSystem'),
801
	MainThreadExtensionService: createMainId<MainThreadExtensionServiceShape>('MainThreadExtensionService'),
J
Joao Moreno 已提交
802
	MainThreadSCM: createMainId<MainThreadSCMShape>('MainThreadSCM'),
803
	MainThreadTask: createMainId<MainThreadTaskShape>('MainThreadTask'),
804
	MainThreadWindow: createMainId<MainThreadWindowShape>('MainThreadWindow'),
805 806 807
};

export const ExtHostContext = {
808
	ExtHostCommands: createExtId<ExtHostCommandsShape>('ExtHostCommands'),
809
	ExtHostConfiguration: createExtId<ExtHostConfigurationShape>('ExtHostConfiguration'),
810
	ExtHostDiagnostics: createExtId<ExtHostDiagnosticsShape>('ExtHostDiagnostics'),
811
	ExtHostDebugService: createExtId<ExtHostDebugServiceShape>('ExtHostDebugService'),
J
Johannes Rieken 已提交
812
	ExtHostDecorations: createExtId<ExtHostDecorationsShape>('ExtHostDecorations'),
813
	ExtHostDocumentsAndEditors: createExtId<ExtHostDocumentsAndEditorsShape>('ExtHostDocumentsAndEditors'),
814
	ExtHostDocuments: createExtId<ExtHostDocumentsShape>('ExtHostDocuments'),
J
Johannes Rieken 已提交
815
	ExtHostDocumentContentProviders: createExtId<ExtHostDocumentContentProvidersShape>('ExtHostDocumentContentProviders'),
J
Johannes Rieken 已提交
816
	ExtHostDocumentSaveParticipant: createExtId<ExtHostDocumentSaveParticipantShape>('ExtHostDocumentSaveParticipant'),
J
Johannes Rieken 已提交
817
	ExtHostEditors: createExtId<ExtHostEditorsShape>('ExtHostEditors'),
818
	ExtHostTreeViews: createExtId<ExtHostTreeViewsShape>('ExtHostTreeViews'),
J
Johannes Rieken 已提交
819
	ExtHostFileSystem: createExtId<ExtHostFileSystemShape>('ExtHostFileSystem'),
J
Johannes Rieken 已提交
820
	ExtHostFileSystemEventService: createExtId<ExtHostFileSystemEventServiceShape>('ExtHostFileSystemEventService'),
821
	ExtHostHeapService: createExtId<ExtHostHeapServiceShape>('ExtHostHeapMonitor'),
822
	ExtHostLanguageFeatures: createExtId<ExtHostLanguageFeaturesShape>('ExtHostLanguageFeatures'),
823 824
	ExtHostQuickOpen: createExtId<ExtHostQuickOpenShape>('ExtHostQuickOpen'),
	ExtHostExtensionService: createExtId<ExtHostExtensionServiceShape>('ExtHostExtensionService'),
825
	ExtHostLogService: createExtId<ExtHostLogServiceShape>('ExtHostLogService'),
826
	ExtHostTerminalService: createExtId<ExtHostTerminalServiceShape>('ExtHostTerminalService'),
J
Joao Moreno 已提交
827
	ExtHostSCM: createExtId<ExtHostSCMShape>('ExtHostSCM'),
828
	ExtHostTask: createExtId<ExtHostTaskShape>('ExtHostTask'),
829
	ExtHostWorkspace: createExtId<ExtHostWorkspaceShape>('ExtHostWorkspace'),
830
	ExtHostWindow: createExtId<ExtHostWindowShape>('ExtHostWindow'),
831
};