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

import {
	createMainContextProxyIdentifier as createMainId,
	createExtHostContextProxyIdentifier as createExtId,
10
	ProxyIdentifier
11
} from 'vs/workbench/services/thread/common/threadService';
12

13 14 15 16
import * as vscode from 'vscode';

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

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

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

31
import { ConfigurationTarget } from 'vs/workbench/services/configuration/common/configurationEditing';
32
import { IConfigurationData } from 'vs/platform/configuration/common/configuration';
33

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

39

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

46
import { ITreeItem } from 'vs/workbench/common/views';
B
Benjamin Pasero 已提交
47
import { ThemeColor } from 'vs/platform/theme/common/themeService';
B
Benjamin Pasero 已提交
48 49
import { IDisposable } from 'vs/base/common/lifecycle';
import { SerializedError } from 'vs/base/common/errors';
50
import { IRelativePattern } from 'vs/base/common/glob';
51
import { IWorkspaceFolderData } from 'vs/platform/workspace/common/workspace';
52
import { IStat, IFileChange } from 'vs/platform/files/common/files';
S
Sandeep Somavarapu 已提交
53

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

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

72 73 74
export interface IInitData {
	parentPid: number;
	environment: IEnvironment;
75
	workspace: IWorkspaceData;
76
	extensions: IExtensionDescription[];
77
	configuration: IConfigurationData<any>;
78
	telemetryInfo: ITelemetryInfo;
79 80
}

81 82 83 84 85
export interface IExtHostContext {
	/**
	 * Returns a proxy to an object addressable/named in the extension host process.
	 */
	get<T>(identifier: ProxyIdentifier<T>): T;
86

87 88 89 90
	/**
	 * Register manually created instance.
	 */
	set<T, R extends T>(identifier: ProxyIdentifier<T>, instance: R): R;
91 92 93 94 95 96 97 98 99
}

export interface IMainContext {
	/**
	 * Returns a proxy to an object addressable/named in the main/renderer process.
	 */
	get<T>(identifier: ProxyIdentifier<T>): T;
}

100 101
// --- main thread

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

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

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

119
export interface MainThreadDialogOpenOptions {
J
Johannes Rieken 已提交
120
	defaultUri?: URI;
121 122 123 124
	openLabel?: string;
	openFiles?: boolean;
	openFolders?: boolean;
	openMany?: boolean;
J
Johannes Rieken 已提交
125
	filters: { [name: string]: string[] };
126 127
}

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

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

139
export interface MainThreadDocumentContentProvidersShape extends IDisposable {
140 141 142
	$registerTextContentProvider(handle: number, scheme: string): void;
	$unregisterTextContentProvider(handle: number): void;
	$onVirtualDocumentChange(uri: URI, value: ITextSource): void;
143 144
}

145
export interface MainThreadDocumentsShape extends IDisposable {
146 147 148
	$tryCreateDocument(options?: { language?: string; content?: string; }): TPromise<any>;
	$tryOpenDocument(uri: URI): TPromise<any>;
	$trySaveDocument(uri: URI): TPromise<boolean>;
149 150
}

151 152 153 154 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
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;
}



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

195 196 197 198 199 200 201 202 203 204
export interface IWorkspaceResourceEdit {
	resource: URI;
	modelVersionId?: number;
	edits: {
		range?: IRange;
		newText: string;
		newEol?: editorCommon.EndOfLineSequence;
	}[];
}

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

221
export interface MainThreadTreeViewsShape extends IDisposable {
222 223
	$registerView(treeViewId: string): void;
	$refresh(treeViewId: string, treeItemHandles: number[]): void;
224 225
}

226
export interface MainThreadErrorsShape extends IDisposable {
227
	$onUnexpectedError(err: any | SerializedError, extensionId: string | undefined): void;
228 229
}

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

254
export interface MainThreadLanguagesShape extends IDisposable {
255
	$getLanguages(): TPromise<string[]>;
256 257
}

258
export interface MainThreadMessageOptions {
259
	extension?: IExtensionDescription;
260
	modal?: boolean;
261 262
}

263
export interface MainThreadMessageServiceShape extends IDisposable {
264
	$showMessage(severity: Severity, message: string, options: MainThreadMessageOptions, commands: { title: string; isCloseAffordance: boolean; handle: number; }[]): Thenable<number>;
265 266
}

267
export interface MainThreadOutputServiceShape extends IDisposable {
268 269 270 271 272
	$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>;
273 274
}

275
export interface MainThreadProgressShape extends IDisposable {
276

277 278 279
	$startProgress(handle: number, options: IProgressOptions): void;
	$progressReport(handle: number, message: IProgressStep): void;
	$progressEnd(handle: number): void;
280 281
}

282
export interface MainThreadTerminalServiceShape extends IDisposable {
283 284 285 286 287
	$createTerminal(name?: string, shellPath?: string, shellArgs?: string[], waitOnExit?: boolean): TPromise<number>;
	$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 已提交
288 289
}

290 291 292
export interface MyQuickPickItems extends IPickOpenEntry {
	handle: number;
}
293
export interface MainThreadQuickOpenShape extends IDisposable {
294 295 296 297
	$show(options: IPickOptions): TPromise<number>;
	$setItems(items: MyQuickPickItems[]): TPromise<any>;
	$setError(error: Error): TPromise<any>;
	$input(options: vscode.InputBoxOptions, validateInput: boolean): TPromise<string>;
298 299
}

300
export interface MainThreadStatusBarShape extends IDisposable {
301
	$setEntry(id: number, extensionId: string, text: string, tooltip: string, command: string, color: string | ThemeColor, alignment: MainThreadStatusBarAlignment, priority: number): void;
302
	$dispose(id: number): void;
303 304
}

305
export interface MainThreadStorageShape extends IDisposable {
306 307
	$getValue<T>(shared: boolean, key: string): TPromise<T>;
	$setValue(shared: boolean, key: string, value: any): TPromise<any>;
308 309
}

310
export interface MainThreadTelemetryShape extends IDisposable {
311
	$publicLog(eventName: string, data?: any): void;
312 313
}

314
export interface MainThreadWorkspaceShape extends IDisposable {
315
	$startSearch(include: string | IRelativePattern, exclude: string | IRelativePattern, maxResults: number, requestId: number): Thenable<URI[]>;
316 317
	$cancelSearch(requestId: number): Thenable<boolean>;
	$saveAll(includeUntitled?: boolean): Thenable<boolean>;
318
}
319

320 321
export interface MainThreadFileSystemShape extends IDisposable {
	$registerFileSystemProvider(handle: number, scheme: string): void;
322
	$unregisterFileSystemProvider(handle: number): void;
323 324 325 326

	$onDidAddFileSystemRoot(root: URI): void;
	$onFileSystemChange(handle: number, resource: IFileChange[]): void;
	$reportFileChunk(handle: number, resource: URI, chunk: number[] | null): void;
327 328
}

329
export interface MainThreadTaskShape extends IDisposable {
330 331
	$registerTaskProvider(handle: number): TPromise<any>;
	$unregisterTaskProvider(handle: number): TPromise<any>;
332 333
}

334
export interface MainThreadExtensionServiceShape extends IDisposable {
335
	$localShowMessage(severity: Severity, msg: string): void;
336
	$onExtensionActivated(extensionId: string, startup: boolean, codeLoadingTime: number, activateCallTime: number, activateResolvedTime: number): void;
337
	$onExtensionActivationFailed(extensionId: string): void;
338 339
}

J
Joao Moreno 已提交
340
export interface SCMProviderFeatures {
J
Joao Moreno 已提交
341 342
	hasQuickDiffProvider?: boolean;
	count?: number;
343 344 345
	commitTemplate?: string;
	acceptInputCommand?: modes.Command;
	statusBarCommands?: modes.Command[];
J
Joao Moreno 已提交
346 347 348 349
}

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

J
Joao Moreno 已提交
352
export type SCMRawResource = [
353
	number /*handle*/,
J
Joao Moreno 已提交
354
	string /*resourceUri*/,
J
Joao Moreno 已提交
355
	string[] /*icons: light, dark*/,
356
	string /*tooltip*/,
357 358
	boolean /*strike through*/,
	boolean /*faded*/
J
Joao Moreno 已提交
359
];
360

361 362 363
export type SCMRawResourceSplice = [
	number /* start */,
	number /* delete count */,
J
Joao 已提交
364 365 366
	SCMRawResource[]
];

367 368 369 370 371
export type SCMRawResourceSplices = [
	number, /*handle*/
	SCMRawResourceSplice[]
];

372
export interface MainThreadSCMShape extends IDisposable {
J
Joao Moreno 已提交
373
	$registerSourceControl(handle: number, id: string, label: string, rootUri: string | undefined): void;
374 375
	$updateSourceControl(handle: number, features: SCMProviderFeatures): void;
	$unregisterSourceControl(handle: number): void;
J
Joao Moreno 已提交
376

377 378 379 380
	$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 已提交
381

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

J
Joao Moreno 已提交
384
	$setInputBoxValue(sourceControlHandle: number, value: string): void;
J
Joao Moreno 已提交
385 386
}

387 388
export type DebugSessionUUID = string;

389
export interface MainThreadDebugServiceShape extends IDisposable {
390 391
	$registerDebugConfigurationProvider(type: string, hasProvideMethod: boolean, hasResolveMethod: boolean, handle: number): TPromise<any>;
	$unregisterDebugConfigurationProvider(handle: number): TPromise<any>;
392 393
	$startDebugging(folder: URI | undefined, nameOrConfig: string | vscode.DebugConfiguration): TPromise<boolean>;
	$startDebugSession(folder: URI | undefined, config: vscode.DebugConfiguration): TPromise<DebugSessionUUID>;
394
	$customDebugAdapterRequest(id: DebugSessionUUID, command: string, args: any): TPromise<any>;
395 396
}

397
export interface MainThreadCredentialsShape extends IDisposable {
398 399 400
	$readSecret(service: string, account: string): Thenable<string | undefined>;
	$writeSecret(service: string, account: string, secret: string): Thenable<void>;
	$deleteSecret(service: string, account: string): Thenable<boolean>;
C
Christof Marti 已提交
401 402
}

403 404
export interface MainThreadWindowShape extends IDisposable {
	$getWindowVisibility(): TPromise<boolean>;
405 406
}

407 408
// -- extension host

409 410 411
export interface ExtHostCommandsShape {
	$executeContributedCommand<T>(id: string, ...args: any[]): Thenable<T>;
	$getContributedCommandHandlerDescriptions(): TPromise<{ [id: string]: string | ICommandHandlerDescription }>;
412 413
}

414
export interface ExtHostConfigurationShape {
415
	$acceptConfigurationChanged(data: IConfigurationData<any>): void;
416 417
}

418
export interface ExtHostDiagnosticsShape {
419 420 421

}

422 423
export interface ExtHostDocumentContentProvidersShape {
	$provideTextDocumentContent(handle: number, uri: URI): TPromise<string>;
424 425
}

426 427 428
export interface IModelAddedData {
	url: URI;
	versionId: number;
429 430
	lines: string[];
	EOL: string;
431 432 433
	modeId: string;
	isDirty: boolean;
}
434 435 436 437 438
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;
439 440
}

441 442
export interface ExtHostDocumentSaveParticipantShape {
	$participateInSave(resource: URI, reason: SaveReason): TPromise<boolean[]>;
443 444
}

445 446 447 448
export interface ITextEditorAddData {
	id: string;
	document: URI;
	options: IResolvedTextEditorConfiguration;
A
Alex Dima 已提交
449
	selections: ISelection[];
450 451 452 453 454
	editorPosition: EditorPosition;
}
export interface ITextEditorPositionData {
	[id: string]: EditorPosition;
}
455 456 457 458
export interface ExtHostEditorsShape {
	$acceptOptionsChanged(id: string, opts: IResolvedTextEditorConfiguration): void;
	$acceptSelectionsChanged(id: string, event: ISelectionChangeEvent): void;
	$acceptEditorPositionData(data: ITextEditorPositionData): void;
459 460
}

J
Johannes Rieken 已提交
461 462 463 464 465 466 467 468
export interface IDocumentsAndEditorsDelta {
	removedDocuments?: string[];
	addedDocuments?: IModelAddedData[];
	removedEditors?: string[];
	addedEditors?: ITextEditorAddData[];
	newActiveEditor?: string;
}

469 470
export interface ExtHostDocumentsAndEditorsShape {
	$acceptDocumentsAndEditorsDelta(delta: IDocumentsAndEditorsDelta): void;
J
Johannes Rieken 已提交
471 472
}

473 474 475
export interface ExtHostTreeViewsShape {
	$getElements(treeViewId: string): TPromise<ITreeItem[]>;
	$getChildren(treeViewId: string, treeItemHandle: number): TPromise<ITreeItem[]>;
S
Sandeep Somavarapu 已提交
476 477
}

478 479
export interface ExtHostWorkspaceShape {
	$acceptWorkspaceData(workspace: IWorkspaceData): void;
480
}
481

482
export interface ExtHostFileSystemShape {
J
Johannes Rieken 已提交
483
	$utimes(handle: number, resource: URI, mtime: number, atime: number): TPromise<IStat>;
484
	$stat(handle: number, resource: URI): TPromise<IStat>;
485
	$read(handle: number, offset: number, count: number, resource: URI): TPromise<number>;
486 487
	$write(handle: number, resource: URI, content: number[]): TPromise<void>;
	$unlink(handle: number, resource: URI): TPromise<void>;
488 489
	$move(handle: number, resource: URI, target: URI): TPromise<IStat>;
	$mkdir(handle: number, resource: URI): TPromise<IStat>;
490
	$readdir(handle: number, resource: URI): TPromise<[URI, IStat][]>;
491
	$rmdir(handle: number, resource: URI): TPromise<void>;
492 493
}

494 495
export interface ExtHostExtensionServiceShape {
	$activateByEvent(activationEvent: string): TPromise<void>;
496 497 498 499 500 501 502
}

export interface FileSystemEvents {
	created: URI[];
	changed: URI[];
	deleted: URI[];
}
503
export interface ExtHostFileSystemEventServiceShape {
504
	$onFileEvent(events: FileSystemEvents): void;
505 506
}

J
Johannes Rieken 已提交
507 508 509 510 511
export interface ObjectIdentifier {
	$ident: number;
}

export namespace ObjectIdentifier {
512
	export const name = '$ident';
J
Johannes Rieken 已提交
513
	export function mixin<T>(obj: T, id: number): T & ObjectIdentifier {
514
		Object.defineProperty(obj, name, { value: id, enumerable: true });
J
Johannes Rieken 已提交
515 516
		return <T & ObjectIdentifier>obj;
	}
517 518
	export function of(obj: any): number {
		return obj[name];
J
Johannes Rieken 已提交
519 520 521
	}
}

522 523
export interface ExtHostHeapServiceShape {
	$onGarbageCollection(ids: number[]): void;
524
}
525
export interface IRawColorInfo {
J
Joao Moreno 已提交
526
	color: [number, number, number, number];
527 528 529
	range: IRange;
}

530 531 532 533 534 535 536 537 538 539 540
export interface IExtHostSuggestion extends modes.ISuggestion {
	_id: number;
	_parentId: number;
}

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

541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557
export interface ExtHostLanguageFeaturesShape {
	$provideDocumentSymbols(handle: number, resource: URI): TPromise<modes.SymbolInformation[]>;
	$provideCodeLenses(handle: number, resource: URI): TPromise<modes.ICodeLensSymbol[]>;
	$resolveCodeLens(handle: number, resource: URI, symbol: modes.ICodeLensSymbol): TPromise<modes.ICodeLensSymbol>;
	$provideDefinition(handle: number, resource: URI, position: IPosition): TPromise<modes.Definition>;
	$provideImplementation(handle: number, resource: URI, position: IPosition): TPromise<modes.Definition>;
	$provideTypeDefinition(handle: number, resource: URI, position: IPosition): TPromise<modes.Definition>;
	$provideHover(handle: number, resource: URI, position: IPosition): TPromise<modes.Hover>;
	$provideDocumentHighlights(handle: number, resource: URI, position: IPosition): TPromise<modes.DocumentHighlight[]>;
	$provideReferences(handle: number, resource: URI, position: IPosition, context: modes.ReferenceContext): TPromise<modes.Location[]>;
	$provideCodeActions(handle: number, resource: URI, range: IRange): TPromise<modes.Command[]>;
	$provideDocumentFormattingEdits(handle: number, resource: URI, options: modes.FormattingOptions): TPromise<editorCommon.ISingleEditOperation[]>;
	$provideDocumentRangeFormattingEdits(handle: number, resource: URI, range: IRange, options: modes.FormattingOptions): TPromise<editorCommon.ISingleEditOperation[]>;
	$provideOnTypeFormattingEdits(handle: number, resource: URI, position: IPosition, ch: string, options: modes.FormattingOptions): TPromise<editorCommon.ISingleEditOperation[]>;
	$provideWorkspaceSymbols(handle: number, search: string): TPromise<modes.SymbolInformation[]>;
	$resolveWorkspaceSymbol(handle: number, symbol: modes.SymbolInformation): TPromise<modes.SymbolInformation>;
	$provideRenameEdits(handle: number, resource: URI, position: IPosition, newName: string): TPromise<modes.WorkspaceEdit>;
558
	$provideCompletionItems(handle: number, resource: URI, position: IPosition, context: modes.SuggestContext): TPromise<IExtHostSuggestResult>;
559
	$resolveCompletionItem(handle: number, resource: URI, position: IPosition, suggestion: modes.ISuggestion): TPromise<modes.ISuggestion>;
560
	$releaseCompletionItems(handle: number, id: number): void;
561 562 563
	$provideSignatureHelp(handle: number, resource: URI, position: IPosition): TPromise<modes.SignatureHelp>;
	$provideDocumentLinks(handle: number, resource: URI): TPromise<modes.ILink[]>;
	$resolveDocumentLink(handle: number, link: modes.ILink): TPromise<modes.ILink>;
564
	$provideDocumentColors(handle: number, resource: URI): TPromise<IRawColorInfo[]>;
565
	$provideColorPresentations(handle: number, resource: URI, colorInfo: IRawColorInfo): TPromise<modes.IColorPresentation[]>;
566 567
}

568 569 570
export interface ExtHostQuickOpenShape {
	$onItemSelected(handle: number): void;
	$validateInput(input: string): TPromise<string>;
571 572
}

573 574 575
export interface ExtHostTerminalServiceShape {
	$acceptTerminalClosed(id: number): void;
	$acceptTerminalProcessId(id: number, processId: number): void;
576 577
}

578 579
export interface ExtHostSCMShape {
	$provideOriginalResource(sourceControlHandle: number, uri: URI): TPromise<URI>;
J
Joao Moreno 已提交
580
	$onInputBoxValueChange(sourceControlHandle: number, value: string): TPromise<void>;
581
	$executeResourceCommand(sourceControlHandle: number, groupHandle: number, handle: number): TPromise<void>;
J
Joao Moreno 已提交
582 583
}

584 585
export interface ExtHostTaskShape {
	$provideTasks(handle: number): TPromise<TaskSet>;
586 587
}

588
export interface ExtHostDebugServiceShape {
589 590
	$resolveDebugConfiguration(handle: number, folder: URI | undefined, debugConfiguration: any): TPromise<any>;
	$provideDebugConfigurations(handle: number, folder: URI | undefined): TPromise<any[]>;
591 592 593 594
	$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;
595 596
}

597
export interface ExtHostCredentialsShape {
598 599
}

600 601
export interface ExtHostWindowShape {
	$onDidChangeWindowFocus(value: boolean): void;
602 603
}

604 605 606
// --- proxy identifiers

export const MainContext = {
607 608 609 610
	MainThreadCommands: createMainId<MainThreadCommandsShape>('MainThreadCommands'),
	MainThreadConfiguration: createMainId<MainThreadConfigurationShape>('MainThreadConfiguration'),
	MainThreadDebugService: createMainId<MainThreadDebugServiceShape>('MainThreadDebugService'),
	MainThreadDiagnostics: createMainId<MainThreadDiagnosticsShape>('MainThreadDiagnostics'),
611
	MainThreadDialogs: createMainId<MainThreadDiaglogsShape>('MainThreadDiaglogs'),
612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627
	MainThreadDocuments: createMainId<MainThreadDocumentsShape>('MainThreadDocuments'),
	MainThreadDocumentContentProviders: createMainId<MainThreadDocumentContentProvidersShape>('MainThreadDocumentContentProviders'),
	MainThreadEditors: createMainId<MainThreadEditorsShape>('MainThreadEditors'),
	MainThreadErrors: createMainId<MainThreadErrorsShape>('MainThreadErrors'),
	MainThreadTreeViews: createMainId<MainThreadTreeViewsShape>('MainThreadTreeViews'),
	MainThreadLanguageFeatures: createMainId<MainThreadLanguageFeaturesShape>('MainThreadLanguageFeatures'),
	MainThreadLanguages: createMainId<MainThreadLanguagesShape>('MainThreadLanguages'),
	MainThreadMessageService: createMainId<MainThreadMessageServiceShape>('MainThreadMessageService'),
	MainThreadOutputService: createMainId<MainThreadOutputServiceShape>('MainThreadOutputService'),
	MainThreadProgress: createMainId<MainThreadProgressShape>('MainThreadProgress'),
	MainThreadQuickOpen: createMainId<MainThreadQuickOpenShape>('MainThreadQuickOpen'),
	MainThreadStatusBar: createMainId<MainThreadStatusBarShape>('MainThreadStatusBar'),
	MainThreadStorage: createMainId<MainThreadStorageShape>('MainThreadStorage'),
	MainThreadTelemetry: createMainId<MainThreadTelemetryShape>('MainThreadTelemetry'),
	MainThreadTerminalService: createMainId<MainThreadTerminalServiceShape>('MainThreadTerminalService'),
	MainThreadWorkspace: createMainId<MainThreadWorkspaceShape>('MainThreadWorkspace'),
628
	MainThreadFileSystem: createMainId<MainThreadFileSystemShape>('MainThreadFileSystem'),
629
	MainThreadExtensionService: createMainId<MainThreadExtensionServiceShape>('MainThreadExtensionService'),
630 631 632
	MainThreadSCM: createMainId<MainThreadSCMShape>('MainThreadSCM'),
	MainThreadTask: createMainId<MainThreadTaskShape>('MainThreadTask'),
	MainThreadCredentials: createMainId<MainThreadCredentialsShape>('MainThreadCredentials'),
633
	MainThreadWindow: createMainId<MainThreadWindowShape>('MainThreadWindow'),
634 635 636
};

export const ExtHostContext = {
637 638 639 640 641 642 643 644 645 646
	ExtHostCommands: createExtId<ExtHostCommandsShape>('ExtHostCommands'),
	ExtHostConfiguration: createExtId<ExtHostConfigurationShape>('ExtHostConfiguration'),
	ExtHostDiagnostics: createExtId<ExtHostDiagnosticsShape>('ExtHostDiagnostics'),
	ExtHostDebugService: createExtId<ExtHostDebugServiceShape>('ExtHostDebugService'),
	ExtHostDocumentsAndEditors: createExtId<ExtHostDocumentsAndEditorsShape>('ExtHostDocumentsAndEditors'),
	ExtHostDocuments: createExtId<ExtHostDocumentsShape>('ExtHostDocuments'),
	ExtHostDocumentContentProviders: createExtId<ExtHostDocumentContentProvidersShape>('ExtHostDocumentContentProviders'),
	ExtHostDocumentSaveParticipant: createExtId<ExtHostDocumentSaveParticipantShape>('ExtHostDocumentSaveParticipant'),
	ExtHostEditors: createExtId<ExtHostEditorsShape>('ExtHostEditors'),
	ExtHostTreeViews: createExtId<ExtHostTreeViewsShape>('ExtHostTreeViews'),
647
	ExtHostFileSystem: createExtId<ExtHostFileSystemShape>('ExtHostFileSystem'),
648 649 650 651 652 653 654 655 656 657
	ExtHostFileSystemEventService: createExtId<ExtHostFileSystemEventServiceShape>('ExtHostFileSystemEventService'),
	ExtHostHeapService: createExtId<ExtHostHeapServiceShape>('ExtHostHeapMonitor'),
	ExtHostLanguageFeatures: createExtId<ExtHostLanguageFeaturesShape>('ExtHostLanguageFeatures'),
	ExtHostQuickOpen: createExtId<ExtHostQuickOpenShape>('ExtHostQuickOpen'),
	ExtHostExtensionService: createExtId<ExtHostExtensionServiceShape>('ExtHostExtensionService'),
	ExtHostTerminalService: createExtId<ExtHostTerminalServiceShape>('ExtHostTerminalService'),
	ExtHostSCM: createExtId<ExtHostSCMShape>('ExtHostSCM'),
	ExtHostTask: createExtId<ExtHostTaskShape>('ExtHostTask'),
	ExtHostWorkspace: createExtId<ExtHostWorkspaceShape>('ExtHostWorkspace'),
	ExtHostCredentials: createExtId<ExtHostCredentialsShape>('ExtHostCredentials'),
658
	ExtHostWindow: createExtId<ExtHostWindowShape>('ExtHostWindow'),
659
};