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

import {
	createMainContextProxyIdentifier as createMainId,
	createExtHostContextProxyIdentifier as createExtId,
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 { IWorkspaceFolderData } from 'vs/platform/workspace/common/workspace';
51
import { IStat, IFileChange } from 'vs/platform/files/common/files';
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: IWorkspaceFolderData[];
69 70
}

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

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

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

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

99 100
// --- main thread

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

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

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

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

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

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

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

144
export interface MainThreadDocumentsShape extends IDisposable {
145 146 147
	$tryCreateDocument(options?: { language?: string; content?: string; }): TPromise<any>;
	$tryOpenDocument(uri: URI): TPromise<any>;
	$trySaveDocument(uri: URI): TPromise<boolean>;
148 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
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;
}



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

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

204
export interface MainThreadEditorsShape extends IDisposable {
205 206 207 208 209 210 211 212 213 214
	$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>;
215
	$tryApplyWorkspaceEdit(workspaceResourceEdits: IWorkspaceResourceEdit[]): TPromise<boolean>;
216 217
	$tryInsertSnippet(id: string, template: string, selections: IRange[], opts: IUndoStopOptions): TPromise<any>;
	$getDiffInformation(id: string): TPromise<editorCommon.ILineChange[]>;
218 219
}

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

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

229
export interface MainThreadLanguageFeaturesShape extends IDisposable {
230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245
	$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>;
246
	$registerSuggestSupport(handle: number, selector: vscode.DocumentSelector, triggerCharacters: string[], supportsResolveDetails: boolean): TPromise<any>;
247 248 249 250
	$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>;
251 252
}

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

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

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

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

274
export interface MainThreadProgressShape extends IDisposable {
275

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

281
export interface MainThreadTerminalServiceShape extends IDisposable {
282 283 284 285 286
	$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 已提交
287 288
}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

386 387
export type DebugSessionUUID = string;

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

396
export interface MainThreadCredentialsShape extends IDisposable {
397 398 399
	$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 已提交
400 401
}

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

406 407
// -- extension host

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

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

417
export interface ExtHostDiagnosticsShape {
418 419 420

}

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

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

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

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

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

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

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

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

481 482 483 484 485 486 487 488
export interface ExtHostFileSystemShape {
	$utimes(handle: number, resource: URI, mtime: number): TPromise<IStat>;
	$stat(handle: number, resource: URI): TPromise<IStat>;
	$read(handle: number, resource: URI): TPromise<void>;
	$write(handle: number, resource: URI, content: number[]): TPromise<void>;
	$unlink(handle: number, resource: URI): TPromise<void>;
	$rename(handle: number, resource: URI, target: URI): TPromise<void>;
	$mkdir(handle: number, resource: URI): TPromise<void>;
489
	$readdir(handle: number, resource: URI): TPromise<[URI, IStat][]>;
490
	$rmdir(handle: number, resource: URI): TPromise<void>;
491 492
}

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

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

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

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

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

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

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

540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556
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>;
557
	$provideCompletionItems(handle: number, resource: URI, position: IPosition, context: modes.SuggestContext): TPromise<IExtHostSuggestResult>;
558
	$resolveCompletionItem(handle: number, resource: URI, position: IPosition, suggestion: modes.ISuggestion): TPromise<modes.ISuggestion>;
559
	$releaseCompletionItems(handle: number, id: number): void;
560 561 562
	$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>;
563
	$provideDocumentColors(handle: number, resource: URI): TPromise<IRawColorInfo[]>;
564
	$provideColorPresentations(handle: number, resource: URI, colorInfo: IRawColorInfo): TPromise<modes.IColorPresentation[]>;
565 566
}

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

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

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

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

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

596
export interface ExtHostCredentialsShape {
597 598
}

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

603 604 605
// --- proxy identifiers

export const MainContext = {
606 607 608 609
	MainThreadCommands: createMainId<MainThreadCommandsShape>('MainThreadCommands'),
	MainThreadConfiguration: createMainId<MainThreadConfigurationShape>('MainThreadConfiguration'),
	MainThreadDebugService: createMainId<MainThreadDebugServiceShape>('MainThreadDebugService'),
	MainThreadDiagnostics: createMainId<MainThreadDiagnosticsShape>('MainThreadDiagnostics'),
610
	MainThreadDialogs: createMainId<MainThreadDiaglogsShape>('MainThreadDiaglogs'),
611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626
	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'),
627
	MainThreadFileSystem: createMainId<MainThreadFileSystemShape>('MainThreadFileSystem'),
628
	MainThreadExtensionService: createMainId<MainThreadExtensionServiceShape>('MainThreadExtensionService'),
629 630 631
	MainThreadSCM: createMainId<MainThreadSCMShape>('MainThreadSCM'),
	MainThreadTask: createMainId<MainThreadTaskShape>('MainThreadTask'),
	MainThreadCredentials: createMainId<MainThreadCredentialsShape>('MainThreadCredentials'),
632
	MainThreadWindow: createMainId<MainThreadWindowShape>('MainThreadWindow'),
633 634 635
};

export const ExtHostContext = {
636 637 638 639 640 641 642 643 644 645
	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'),
646
	ExtHostFileSystem: createExtId<ExtHostFileSystemShape>('ExtHostFileSystem'),
647 648 649 650 651 652 653 654 655 656
	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'),
657
	ExtHostWindow: createExtId<ExtHostWindowShape>('ExtHostWindow'),
658
};