extHost.protocol.ts 34.3 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 } 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 {
217
	$registerView(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 280 281 282 283 284 285
	$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;
	$registerRenameSupport(handle: number, selector: vscode.DocumentSelector): void;
	$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 {
349
	$startSearch(includePattern: string, includeFolder: string, excludePattern: string, 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*/,
J
Joao Moreno 已提交
398
	string /*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 {
J
Joao Moreno 已提交
421
	$registerSourceControl(handle: number, id: string, label: string, rootUri: string | 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 441
	$registerDebugConfigurationProvider(type: string, hasProvideMethod: boolean, hasResolveMethod: boolean, handle: number): TPromise<any>;
	$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 482 483 484 485
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;
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 509 510 511 512 513 514 515
export interface IDocumentsAndEditorsDelta {
	removedDocuments?: string[];
	addedDocuments?: IModelAddedData[];
	removedEditors?: string[];
	addedEditors?: ITextEditorAddData[];
	newActiveEditor?: string;
}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

654
export interface ExtHostLanguageFeaturesShape {
655
	$provideDocumentSymbols(handle: number, resource: UriComponents): TPromise<SymbolInformationDto[]>;
656 657
	$provideCodeLenses(handle: number, resource: UriComponents): TPromise<modes.ICodeLensSymbol[]>;
	$resolveCodeLens(handle: number, resource: UriComponents, symbol: modes.ICodeLensSymbol): TPromise<modes.ICodeLensSymbol>;
658 659 660
	$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[]>;
661 662
	$provideHover(handle: number, resource: UriComponents, position: IPosition): TPromise<modes.Hover>;
	$provideDocumentHighlights(handle: number, resource: UriComponents, position: IPosition): TPromise<modes.DocumentHighlight[]>;
663
	$provideReferences(handle: number, resource: UriComponents, position: IPosition, context: modes.ReferenceContext): TPromise<LocationDto[]>;
M
Matt Bierner 已提交
664
	$provideCodeActions(handle: number, resource: UriComponents, range: IRange, context: modes.CodeActionContext): TPromise<CodeActionDto[]>;
665 666 667
	$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[]>;
668 669
	$provideWorkspaceSymbols(handle: number, search: string): TPromise<WorkspaceSymbolsDto>;
	$resolveWorkspaceSymbol(handle: number, symbol: SymbolInformationDto): TPromise<SymbolInformationDto>;
670
	$releaseWorkspaceSymbols(handle: number, id: number): void;
671 672
	$provideRenameEdits(handle: number, resource: UriComponents, position: IPosition, newName: string): TPromise<WorkspaceEditDto>;
	$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: string): TPromise<string>;
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 740 741
		enabled: boolean;
		condition?: string;
		hitCondition?: string;
		line: number;
		character: number;
	}[];
}

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 746 747 748
	$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;
749
	$acceptBreakpointsDelta(delat: IBreakpointsDeltaDto): void;
750 751
}

752

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

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

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

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

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

774 775 776
// --- proxy identifiers

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

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