/*--------------------------------------------------------------------------------------------- * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ import { CancellationToken } from 'vs/base/common/cancellation'; import { SerializedError } from 'vs/base/common/errors'; import { IDisposable } from 'vs/base/common/lifecycle'; import Severity from 'vs/base/common/severity'; import { URI, UriComponents } from 'vs/base/common/uri'; import { TextEditorCursorStyle } from 'vs/editor/common/config/editorOptions'; import { IPosition } from 'vs/editor/common/core/position'; import { IRange } from 'vs/editor/common/core/range'; import { ISelection, Selection } from 'vs/editor/common/core/selection'; import * as editorCommon from 'vs/editor/common/editorCommon'; import { ISingleEditOperation } from 'vs/editor/common/model'; import { IModelChangedEvent } from 'vs/editor/common/model/mirrorTextModel'; import * as modes from 'vs/editor/common/modes'; import { CharacterPair, CommentRule, EnterAction } from 'vs/editor/common/modes/languageConfiguration'; import { ICommandHandlerDescription } from 'vs/platform/commands/common/commands'; import { ConfigurationTarget, IConfigurationData, IConfigurationModel } from 'vs/platform/configuration/common/configuration'; import { ConfigurationScope } from 'vs/platform/configuration/common/configurationRegistry'; import { FileChangeType, FileDeleteOptions, FileOverwriteOptions, FileSystemProviderCapabilities, FileType, FileWriteOptions, IStat, IWatchOptions, FileOpenOptions } from 'vs/platform/files/common/files'; import { ResourceLabelFormatter } from 'vs/platform/label/common/label'; import { LogLevel } from 'vs/platform/log/common/log'; import { IMarkerData } from 'vs/platform/markers/common/markers'; import { IPickOptions, IQuickInputButton, IQuickPickItem } from 'vs/platform/quickinput/common/quickInput'; import { IPatternInfo, IRawFileMatch2, IRawQuery, IRawTextQuery, ISearchCompleteStats } from 'vs/platform/search/common/search'; import { StatusbarAlignment as MainThreadStatusBarAlignment } from 'vs/platform/statusbar/common/statusbar'; import { ITelemetryInfo } from 'vs/platform/telemetry/common/telemetry'; import { ThemeColor } from 'vs/platform/theme/common/themeService'; import { EndOfLine, IFileOperationOptions, TextEditorLineNumbersStyle } from 'vs/workbench/api/node/extHostTypes'; import { EditorViewColumn } from 'vs/workbench/api/shared/editor'; import { TaskDTO, TaskExecutionDTO, TaskFilterDTO, TaskHandleDTO, TaskProcessEndedDTO, TaskProcessStartedDTO, TaskSystemInfoDTO, TaskSetDTO } from 'vs/workbench/api/shared/tasks'; import { ITreeItem, IRevealOptions } from 'vs/workbench/common/views'; import { IAdapterDescriptor, IConfig, ITerminalSettings } from 'vs/workbench/parts/debug/common/debug'; import { ITextQueryBuilderOptions } from 'vs/workbench/parts/search/common/queryBuilder'; import { ITerminalDimensions } from 'vs/workbench/parts/terminal/common/terminal'; import { IExtensionDescription } from 'vs/workbench/services/extensions/common/extensions'; import { IRPCProtocol, createExtHostContextProxyIdentifier as createExtId, createMainContextProxyIdentifier as createMainId } from 'vs/workbench/services/extensions/node/proxyIdentifier'; import { IProgressOptions, IProgressStep } from 'vs/platform/progress/common/progress'; import { SaveReason } from 'vs/workbench/services/textfile/common/textfiles'; import * as vscode from 'vscode'; import { IMarkdownString } from 'vs/base/common/htmlContent'; import { ResolvedAuthority } from 'vs/platform/remote/common/remoteAuthorityResolver'; import { ExtensionIdentifier } from 'vs/platform/extensions/common/extensions'; import { IRemoteConsoleLog } from 'vs/base/node/console'; export interface IEnvironment { isExtensionDevelopmentDebug: boolean; appRoot: URI; appSettingsHome: URI; extensionDevelopmentLocationURI: URI; extensionTestsPath: string; globalStorageHome: URI; } export interface IWorkspaceData { id: string; name: string; folders: { uri: UriComponents, name: string, index: number }[]; configuration?: UriComponents; } export interface IInitData { commit: string; parentPid: number; environment: IEnvironment; workspace: IWorkspaceData; resolvedExtensions: ExtensionIdentifier[]; extensions: IExtensionDescription[]; telemetryInfo: ITelemetryInfo; logLevel: LogLevel; logsLocation: URI; autoStart: boolean; remoteAuthority?: string | null; } export interface IConfigurationInitData extends IConfigurationData { configurationScopes: { [key: string]: ConfigurationScope }; } export interface IWorkspaceConfigurationChangeEventData { changedConfiguration: IConfigurationModel; changedConfigurationByResource: { [folder: string]: IConfigurationModel }; } export interface IExtHostContext extends IRPCProtocol { remoteAuthority: string; } export interface IMainContext extends IRPCProtocol { } // --- main thread export interface MainThreadClipboardShape extends IDisposable { $readText(): Promise; $writeText(value: string): Promise; } export interface MainThreadCommandsShape extends IDisposable { $registerCommand(id: string): void; $unregisterCommand(id: string): void; $executeCommand(id: string, args: any[]): Promise; $getCommands(): Promise; } export interface CommentProviderFeatures { startDraftLabel?: string; deleteDraftLabel?: string; finishDraftLabel?: string; reactionGroup?: vscode.CommentReaction[]; } export interface MainThreadCommentsShape extends IDisposable { $registerDocumentCommentProvider(handle: number, features: CommentProviderFeatures): void; $unregisterDocumentCommentProvider(handle: number): void; $registerWorkspaceCommentProvider(handle: number, extensionId: ExtensionIdentifier): void; $unregisterWorkspaceCommentProvider(handle: number): void; $onDidCommentThreadsChange(handle: number, event: modes.CommentThreadChangedEvent): void; } export interface MainThreadConfigurationShape extends IDisposable { $updateConfigurationOption(target: ConfigurationTarget, key: string, value: any, resource: UriComponents): Promise; $removeConfigurationOption(target: ConfigurationTarget, key: string, resource: UriComponents): Promise; } export interface MainThreadDiagnosticsShape extends IDisposable { $changeMany(owner: string, entries: [UriComponents, IMarkerData[]][]): void; $clear(owner: string): void; } export interface MainThreadDialogOpenOptions { defaultUri?: UriComponents; openLabel?: string; canSelectFiles?: boolean; canSelectFolders?: boolean; canSelectMany?: boolean; filters?: { [name: string]: string[] }; } export interface MainThreadDialogSaveOptions { defaultUri?: UriComponents; saveLabel?: string; filters?: { [name: string]: string[] }; } export interface MainThreadDiaglogsShape extends IDisposable { $showOpenDialog(options: MainThreadDialogOpenOptions): Promise; $showSaveDialog(options: MainThreadDialogSaveOptions): Promise; } export interface MainThreadDecorationsShape extends IDisposable { $registerDecorationProvider(handle: number, label: string): void; $unregisterDecorationProvider(handle: number): void; $onDidChange(handle: number, resources: UriComponents[]): void; } export interface MainThreadDocumentContentProvidersShape extends IDisposable { $registerTextContentProvider(handle: number, scheme: string): void; $unregisterTextContentProvider(handle: number): void; $onVirtualDocumentChange(uri: UriComponents, value: string): void; } export interface MainThreadDocumentsShape extends IDisposable { $tryCreateDocument(options?: { language?: string; content?: string; }): Promise; $tryOpenDocument(uri: UriComponents): Promise; $trySaveDocument(uri: UriComponents): Promise; } 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; } export interface ITextDocumentShowOptions { position?: EditorViewColumn; preserveFocus?: boolean; pinned?: boolean; selection?: IRange; } export interface MainThreadTextEditorsShape extends IDisposable { $tryShowTextDocument(resource: UriComponents, options: ITextDocumentShowOptions): Promise; $registerTextEditorDecorationType(key: string, options: editorCommon.IDecorationRenderOptions): void; $removeTextEditorDecorationType(key: string): void; $tryShowEditor(id: string, position: EditorViewColumn): Promise; $tryHideEditor(id: string): Promise; $trySetOptions(id: string, options: ITextEditorConfigurationUpdate): Promise; $trySetDecorations(id: string, key: string, ranges: editorCommon.IDecorationOptions[]): Promise; $trySetDecorationsFast(id: string, key: string, ranges: number[]): Promise; $tryRevealRange(id: string, range: IRange, revealType: TextEditorRevealType): Promise; $trySetSelections(id: string, selections: ISelection[]): Promise; $tryApplyEdits(id: string, modelVersionId: number, edits: ISingleEditOperation[], opts: IApplyEditsOptions): Promise; $tryApplyWorkspaceEdit(workspaceEditDto: WorkspaceEditDto): Promise; $tryInsertSnippet(id: string, template: string, selections: IRange[], opts: IUndoStopOptions): Promise; $getDiffInformation(id: string): Promise; } export interface MainThreadTreeViewsShape extends IDisposable { $registerTreeViewDataProvider(treeViewId: string, options: { showCollapseAll: boolean }): void; $refresh(treeViewId: string, itemsToRefresh?: { [treeItemHandle: string]: ITreeItem }): Promise; $reveal(treeViewId: string, treeItem: ITreeItem, parentChain: ITreeItem[], options: IRevealOptions): Promise; $setMessage(treeViewId: string, message: string | IMarkdownString): void; } export interface MainThreadErrorsShape extends IDisposable { $onUnexpectedError(err: any | SerializedError): void; } export interface MainThreadConsoleShape extends IDisposable { $logExtensionHostMessage(msg: IRemoteConsoleLog): void; } 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; oneLineAboveText?: 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[]; }[]; }; } export interface ISerializedDocumentFilter { $serialized: true; language?: string; scheme?: string; pattern?: vscode.GlobPattern; exclusive?: boolean; } export interface ISerializedSignatureHelpProviderMetadata { readonly triggerCharacters: ReadonlyArray; readonly retriggerCharacters: ReadonlyArray; } export interface MainThreadLanguageFeaturesShape extends IDisposable { $unregister(handle: number): void; $registerDocumentSymbolProvider(handle: number, selector: ISerializedDocumentFilter[], label: string): void; $registerCodeLensSupport(handle: number, selector: ISerializedDocumentFilter[], eventHandle: number): void; $emitCodeLensEvent(eventHandle: number, event?: any): void; $registerDefinitionSupport(handle: number, selector: ISerializedDocumentFilter[]): void; $registerDeclarationSupport(handle: number, selector: ISerializedDocumentFilter[]): void; $registerImplementationSupport(handle: number, selector: ISerializedDocumentFilter[]): void; $registerTypeDefinitionSupport(handle: number, selector: ISerializedDocumentFilter[]): void; $registerHoverProvider(handle: number, selector: ISerializedDocumentFilter[]): void; $registerDocumentHighlightProvider(handle: number, selector: ISerializedDocumentFilter[]): void; $registerReferenceSupport(handle: number, selector: ISerializedDocumentFilter[]): void; $registerQuickFixSupport(handle: number, selector: ISerializedDocumentFilter[], supportedKinds?: string[]): void; $registerDocumentFormattingSupport(handle: number, selector: ISerializedDocumentFilter[], label: string): void; $registerRangeFormattingSupport(handle: number, selector: ISerializedDocumentFilter[], label: string): void; $registerOnTypeFormattingSupport(handle: number, selector: ISerializedDocumentFilter[], autoFormatTriggerCharacters: string[]): void; $registerNavigateTypeSupport(handle: number): void; $registerRenameSupport(handle: number, selector: ISerializedDocumentFilter[], supportsResolveInitialValues: boolean): void; $registerSuggestSupport(handle: number, selector: ISerializedDocumentFilter[], triggerCharacters: string[], supportsResolveDetails: boolean): void; $registerSignatureHelpProvider(handle: number, selector: ISerializedDocumentFilter[], metadata: ISerializedSignatureHelpProviderMetadata): void; $registerDocumentLinkProvider(handle: number, selector: ISerializedDocumentFilter[]): void; $registerDocumentColorProvider(handle: number, selector: ISerializedDocumentFilter[]): void; $registerFoldingRangeProvider(handle: number, selector: ISerializedDocumentFilter[]): void; $registerSelectionRangeProvider(handle: number, selector: ISerializedDocumentFilter[]): void; $setLanguageConfiguration(handle: number, languageId: string, configuration: ISerializedLanguageConfiguration): void; } export interface MainThreadLanguagesShape extends IDisposable { $getLanguages(): Promise; $changeLanguage(resource: UriComponents, languageId: string): Promise; } export interface MainThreadMessageOptions { extension?: IExtensionDescription; modal?: boolean; } export interface MainThreadMessageServiceShape extends IDisposable { $showMessage(severity: Severity, message: string, options: MainThreadMessageOptions, commands: { title: string; isCloseAffordance: boolean; handle: number; }[]): Promise; } export interface MainThreadOutputServiceShape extends IDisposable { $register(label: string, log: boolean, file?: UriComponents): Promise; $append(channelId: string, value: string): Promise; $update(channelId: string): Promise; $clear(channelId: string, till: number): Promise; $reveal(channelId: string, preserveFocus: boolean): Promise; $close(channelId: string): Promise; $dispose(channelId: string): Promise; } export interface MainThreadProgressShape extends IDisposable { $startProgress(handle: number, options: IProgressOptions): void; $progressReport(handle: number, message: IProgressStep): void; $progressEnd(handle: number): void; } export interface MainThreadTerminalServiceShape extends IDisposable { $createTerminal(name?: string, shellPath?: string, shellArgs?: string[], cwd?: string | URI, env?: { [key: string]: string }, waitOnExit?: boolean, strictEnv?: boolean): Promise<{ id: number, name: string }>; $createTerminalRenderer(name: string): Promise; $dispose(terminalId: number): void; $hide(terminalId: number): void; $sendText(terminalId: number, text: string, addNewLine: boolean): void; $show(terminalId: number, preserveFocus: boolean): void; $registerOnDataListener(terminalId: number): void; // Process $sendProcessTitle(terminalId: number, title: string): void; $sendProcessData(terminalId: number, data: string): void; $sendProcessPid(terminalId: number, pid: number): void; $sendProcessExit(terminalId: number, exitCode: number): void; $sendProcessInitialCwd(terminalId: number, cwd: string): void; $sendProcessCwd(terminalId: number, initialCwd: string): void; // Renderer $terminalRendererSetName(terminalId: number, name: string): void; $terminalRendererSetDimensions(terminalId: number, dimensions: ITerminalDimensions): void; $terminalRendererWrite(terminalId: number, text: string): void; $terminalRendererRegisterOnInputListener(terminalId: number): void; } export interface TransferQuickPickItems extends IQuickPickItem { handle: number; } export interface TransferQuickInputButton extends IQuickInputButton { handle: number; } export type TransferQuickInput = TransferQuickPick | TransferInputBox; export interface BaseTransferQuickInput { id: number; type?: 'quickPick' | 'inputBox'; enabled?: boolean; busy?: boolean; visible?: boolean; } export interface TransferQuickPick extends BaseTransferQuickInput { type?: 'quickPick'; value?: string; placeholder?: string; buttons?: TransferQuickInputButton[]; items?: TransferQuickPickItems[]; activeItems?: number[]; selectedItems?: number[]; canSelectMany?: boolean; ignoreFocusOut?: boolean; matchOnDescription?: boolean; matchOnDetail?: boolean; } export interface TransferInputBox extends BaseTransferQuickInput { type?: 'inputBox'; value?: string; placeholder?: string; password?: boolean; buttons?: TransferQuickInputButton[]; prompt?: string; validationMessage?: string; } export interface MainThreadQuickOpenShape extends IDisposable { $show(instance: number, options: IPickOptions, token: CancellationToken): Promise; $setItems(instance: number, items: TransferQuickPickItems[]): Promise; $setError(instance: number, error: Error): Promise; $input(options: vscode.InputBoxOptions, validateInput: boolean, token: CancellationToken): Promise; $createOrUpdate(params: TransferQuickInput): Promise; $dispose(id: number): Promise; } export interface MainThreadStatusBarShape extends IDisposable { $setEntry(id: number, extensionId: ExtensionIdentifier, text: string, tooltip: string, command: string, color: string | ThemeColor, alignment: MainThreadStatusBarAlignment, priority: number): void; $dispose(id: number): void; } export interface MainThreadStorageShape extends IDisposable { $getValue(shared: boolean, key: string): Promise; $setValue(shared: boolean, key: string, value: object): Promise; } export interface MainThreadTelemetryShape extends IDisposable { $publicLog(eventName: string, data?: any): void; } export type WebviewPanelHandle = string; export interface WebviewPanelShowOptions { readonly viewColumn?: EditorViewColumn; readonly preserveFocus?: boolean; } export interface MainThreadWebviewsShape extends IDisposable { $createWebviewPanel(handle: WebviewPanelHandle, viewType: string, title: string, showOptions: WebviewPanelShowOptions, options: vscode.WebviewPanelOptions & vscode.WebviewOptions, extensionId: ExtensionIdentifier, extensionLocation: UriComponents): void; $disposeWebview(handle: WebviewPanelHandle): void; $reveal(handle: WebviewPanelHandle, showOptions: WebviewPanelShowOptions): void; $setTitle(handle: WebviewPanelHandle, value: string): void; $setIconPath(handle: WebviewPanelHandle, value: { light: UriComponents, dark: UriComponents } | undefined): void; $setHtml(handle: WebviewPanelHandle, value: string): void; $setOptions(handle: WebviewPanelHandle, options: vscode.WebviewOptions): void; $postMessage(handle: WebviewPanelHandle, value: any): Promise; $registerSerializer(viewType: string): void; $unregisterSerializer(viewType: string): void; } export interface WebviewPanelViewState { readonly active: boolean; readonly visible: boolean; readonly position: EditorViewColumn; } export interface ExtHostWebviewsShape { $onMessage(handle: WebviewPanelHandle, message: any): void; $onDidChangeWebviewPanelViewState(handle: WebviewPanelHandle, newState: WebviewPanelViewState): void; $onDidDisposeWebviewPanel(handle: WebviewPanelHandle): Promise; $deserializeWebviewPanel(newWebviewHandle: WebviewPanelHandle, viewType: string, title: string, state: any, position: EditorViewColumn, options: vscode.WebviewOptions): Promise; } export interface MainThreadUrlsShape extends IDisposable { $registerUriHandler(handle: number, extensionId: ExtensionIdentifier): Promise; $unregisterUriHandler(handle: number): Promise; } export interface ExtHostUrlsShape { $handleExternalUri(handle: number, uri: UriComponents): Promise; } export interface MainThreadWorkspaceShape extends IDisposable { $startFileSearch(includePattern: string, includeFolder: URI, excludePatternOrDisregardExcludes: string | false, maxResults: number, token: CancellationToken): Promise | undefined; $startTextSearch(query: IPatternInfo, options: ITextQueryBuilderOptions, requestId: number, token: CancellationToken): Promise; $checkExists(includes: string[], token: CancellationToken): Promise; $saveAll(includeUntitled?: boolean): Promise; $updateWorkspaceFolders(extensionName: string, index: number, deleteCount: number, workspaceFoldersToAdd: { uri: UriComponents, name?: string }[]): Promise; $resolveProxy(url: string): Promise; } export interface IFileChangeDto { resource: UriComponents; type: FileChangeType; } export interface MainThreadFileSystemShape extends IDisposable { $registerFileSystemProvider(handle: number, scheme: string, capabilities: FileSystemProviderCapabilities): void; $unregisterProvider(handle: number): void; $setUriFormatter(formatter: ResourceLabelFormatter): void; $onFileSystemChange(handle: number, resource: IFileChangeDto[]): void; } export interface MainThreadSearchShape extends IDisposable { $registerFileSearchProvider(handle: number, scheme: string): void; $registerTextSearchProvider(handle: number, scheme: string): void; $registerFileIndexProvider(handle: number, scheme: string): void; $unregisterProvider(handle: number): void; $handleFileMatch(handle: number, session: number, data: UriComponents[]): void; $handleTextMatch(handle: number, session: number, data: IRawFileMatch2[]): void; $handleTelemetry(eventName: string, data: any): void; } export interface MainThreadTaskShape extends IDisposable { $registerTaskProvider(handle: number): Promise; $unregisterTaskProvider(handle: number): Promise; $fetchTasks(filter?: TaskFilterDTO): Promise; $executeTask(task: TaskHandleDTO | TaskDTO): Promise; $terminateTask(id: string): Promise; $registerTaskSystem(scheme: string, info: TaskSystemInfoDTO): void; } export interface MainThreadExtensionServiceShape extends IDisposable { $localShowMessage(severity: Severity, msg: string): void; $onWillActivateExtension(extensionId: ExtensionIdentifier): void; $onDidActivateExtension(extensionId: ExtensionIdentifier, startup: boolean, codeLoadingTime: number, activateCallTime: number, activateResolvedTime: number, activationEvent: string): void; $onExtensionActivationFailed(extensionId: ExtensionIdentifier): void; $onExtensionRuntimeError(extensionId: ExtensionIdentifier, error: SerializedError): void; $addMessage(extensionId: ExtensionIdentifier, severity: Severity, message: string): void; } export interface SCMProviderFeatures { hasQuickDiffProvider?: boolean; count?: number; commitTemplate?: string; acceptInputCommand?: modes.Command; statusBarCommands?: modes.Command[]; } export interface SCMGroupFeatures { hideWhenEmpty?: boolean; } export type SCMRawResource = [ number /*handle*/, UriComponents /*resourceUri*/, string[] /*icons: light, dark*/, string /*tooltip*/, boolean /*strike through*/, boolean /*faded*/, string | undefined /*source*/, string | undefined /*letter*/, ThemeColor | null /*color*/ ]; export type SCMRawResourceSplice = [ number /* start */, number /* delete count */, SCMRawResource[] ]; export type SCMRawResourceSplices = [ number, /*handle*/ SCMRawResourceSplice[] ]; export interface MainThreadSCMShape extends IDisposable { $registerSourceControl(handle: number, id: string, label: string, rootUri: UriComponents | undefined): void; $updateSourceControl(handle: number, features: SCMProviderFeatures): void; $unregisterSourceControl(handle: number): void; $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; $spliceResourceStates(sourceControlHandle: number, splices: SCMRawResourceSplices[]): void; $setInputBoxValue(sourceControlHandle: number, value: string): void; $setInputBoxPlaceholder(sourceControlHandle: number, placeholder: string): void; $setInputBoxVisibility(sourceControlHandle: number, visible: boolean): void; $setValidationProviderIsEnabled(sourceControlHandle: number, enabled: boolean): void; } export type DebugSessionUUID = string; export interface MainThreadDebugServiceShape extends IDisposable { $registerDebugTypes(debugTypes: string[]): void; $acceptDAMessage(handle: number, message: DebugProtocol.ProtocolMessage): void; $acceptDAError(handle: number, name: string, message: string, stack: string): void; $acceptDAExit(handle: number, code: number, signal: string): void; $registerDebugConfigurationProvider(type: string, hasProvideMethod: boolean, hasResolveMethod: boolean, hasProvideDaMethod: boolean, handle: number): Promise; $registerDebugAdapterDescriptorFactory(type: string, handle: number): Promise; $registerDebugAdapterTrackerFactory(type: string, handle: number); $unregisterDebugConfigurationProvider(handle: number): void; $unregisterDebugAdapterDescriptorFactory(handle: number): void; $unregisterDebugAdapterTrackerFactory(handle: number): void; $startDebugging(folder: UriComponents | undefined, nameOrConfig: string | vscode.DebugConfiguration): Promise; $customDebugAdapterRequest(id: DebugSessionUUID, command: string, args: any): Promise; $appendDebugConsole(value: string): void; $startBreakpointEvents(): void; $registerBreakpoints(breakpoints: Array): Promise; $unregisterBreakpoints(breakpointIds: string[], functionBreakpointIds: string[]): Promise; } export interface MainThreadWindowShape extends IDisposable { $getWindowVisibility(): Promise; $openUri(uri: UriComponents): Promise; } // -- extension host export interface ExtHostCommandsShape { $executeContributedCommand(id: string, ...args: any[]): Promise; $getContributedCommandHandlerDescriptions(): Promise<{ [id: string]: string | ICommandHandlerDescription }>; } export interface ExtHostConfigurationShape { $initializeConfiguration(data: IConfigurationInitData): void; $acceptConfigurationChanged(data: IConfigurationInitData, eventData: IWorkspaceConfigurationChangeEventData): void; } export interface ExtHostDiagnosticsShape { } export interface ExtHostDocumentContentProvidersShape { $provideTextDocumentContent(handle: number, uri: UriComponents): Promise; } export interface IModelAddedData { uri: UriComponents; versionId: number; lines: string[]; EOL: string; modeId: string; isDirty: boolean; } export interface ExtHostDocumentsShape { $acceptModelModeChanged(strURL: UriComponents, oldModeId: string, newModeId: string): void; $acceptModelSaved(strURL: UriComponents): void; $acceptDirtyStateChanged(strURL: UriComponents, isDirty: boolean): void; $acceptModelChanged(strURL: UriComponents, e: IModelChangedEvent, isDirty: boolean): void; } export interface ExtHostDocumentSaveParticipantShape { $participateInSave(resource: UriComponents, reason: SaveReason): Promise; } export interface ITextEditorAddData { id: string; documentUri: UriComponents; options: IResolvedTextEditorConfiguration; selections: ISelection[]; visibleRanges: IRange[]; editorPosition: EditorViewColumn; } export interface ITextEditorPositionData { [id: string]: EditorViewColumn; } export interface IEditorPropertiesChangeData { options: IResolvedTextEditorConfiguration | null; selections: ISelectionChangeEvent | null; visibleRanges: IRange[] | null; } export interface ISelectionChangeEvent { selections: Selection[]; source?: string; } export interface ExtHostEditorsShape { $acceptEditorPropertiesChanged(id: string, props: IEditorPropertiesChangeData): void; $acceptEditorPositionData(data: ITextEditorPositionData): void; } export interface IDocumentsAndEditorsDelta { removedDocuments?: UriComponents[]; addedDocuments?: IModelAddedData[]; removedEditors?: string[]; addedEditors?: ITextEditorAddData[]; newActiveEditor?: string; } export interface ExtHostDocumentsAndEditorsShape { $acceptDocumentsAndEditorsDelta(delta: IDocumentsAndEditorsDelta): void; } export interface ExtHostTreeViewsShape { $getChildren(treeViewId: string, treeItemHandle?: string): Promise; $setExpanded(treeViewId: string, treeItemHandle: string, expanded: boolean): void; $setSelection(treeViewId: string, treeItemHandles: string[]): void; $setVisible(treeViewId: string, visible: boolean): void; } export interface ExtHostWorkspaceShape { $acceptWorkspaceData(workspace: IWorkspaceData | null): void; $handleTextSearchResult(result: IRawFileMatch2, requestId: number): void; } export interface ExtHostFileSystemShape { $stat(handle: number, resource: UriComponents): Promise; $readdir(handle: number, resource: UriComponents): Promise<[string, FileType][]>; $readFile(handle: number, resource: UriComponents): Promise; $writeFile(handle: number, resource: UriComponents, content: Buffer, opts: FileWriteOptions): Promise; $rename(handle: number, resource: UriComponents, target: UriComponents, opts: FileOverwriteOptions): Promise; $copy(handle: number, resource: UriComponents, target: UriComponents, opts: FileOverwriteOptions): Promise; $mkdir(handle: number, resource: UriComponents): Promise; $delete(handle: number, resource: UriComponents, opts: FileDeleteOptions): Promise; $watch(handle: number, session: number, resource: UriComponents, opts: IWatchOptions): void; $unwatch(handle: number, session: number): void; $open(handle: number, resource: UriComponents, opts: FileOpenOptions): Promise; $close(handle: number, fd: number): Promise; $read(handle: number, fd: number, pos: number, length: number): Promise; $write(handle: number, fd: number, pos: number, data: Buffer): Promise; } export interface ExtHostSearchShape { $provideFileSearchResults(handle: number, session: number, query: IRawQuery, token: CancellationToken): Promise; $provideTextSearchResults(handle: number, session: number, query: IRawTextQuery, token: CancellationToken): Promise; $clearCache(cacheKey: string): Promise; } export interface ExtHostExtensionServiceShape { $resolveAuthority(remoteAuthority: string): Promise; $startExtensionHost(enabledExtensionIds: ExtensionIdentifier[]): Promise; $activateByEvent(activationEvent: string): Promise; $activate(extensionId: ExtensionIdentifier, activationEvent: string): Promise; $deltaExtensions(toAdd: IExtensionDescription[], toRemove: ExtensionIdentifier[]): Promise; $test_latency(n: number): Promise; $test_up(b: Buffer): Promise; $test_down(size: number): Promise; } export interface FileSystemEvents { created: UriComponents[]; changed: UriComponents[]; deleted: UriComponents[]; } export interface ExtHostFileSystemEventServiceShape { $onFileEvent(events: FileSystemEvents): void; $onFileRename(oldUri: UriComponents, newUri: UriComponents): void; $onWillRename(oldUri: UriComponents, newUri: UriComponents): Promise; } export interface ObjectIdentifier { $ident: number; } export namespace ObjectIdentifier { export const name = '$ident'; export function mixin(obj: T, id: number): T & ObjectIdentifier { Object.defineProperty(obj, name, { value: id, enumerable: true }); return obj; } export function of(obj: any): number { return obj[name]; } } export interface ExtHostHeapServiceShape { $onGarbageCollection(ids: number[]): void; } export interface IRawColorInfo { color: [number, number, number, number]; range: IRange; } export class IdObject { _id?: number; private static _n = 0; static mixin(object: T): T & IdObject { (object)._id = IdObject._n++; return object; } } export interface SuggestionDto extends modes.CompletionItem { _id: number; _parentId: number; } export interface SuggestResultDto extends IdObject { suggestions: SuggestionDto[]; incomplete?: boolean; } export interface LocationDto { uri: UriComponents; range: IRange; } export interface DefinitionLinkDto { originSelectionRange?: IRange; uri: UriComponents; range: IRange; targetSelectionRange?: IRange; } export interface WorkspaceSymbolDto extends IdObject { name: string; containerName?: string; kind: modes.SymbolKind; location: LocationDto; } export interface WorkspaceSymbolsDto extends IdObject { symbols: WorkspaceSymbolDto[]; } export interface ResourceFileEditDto { oldUri: UriComponents; newUri: UriComponents; options: IFileOperationOptions; } export interface ResourceTextEditDto { resource: UriComponents; modelVersionId?: number; edits: modes.TextEdit[]; } export interface WorkspaceEditDto { edits: Array; // todo@joh reject should go into rename rejectReason?: string; } export function reviveWorkspaceEditDto(data: WorkspaceEditDto): modes.WorkspaceEdit { if (data && data.edits) { for (const edit of data.edits) { if (typeof (edit).resource === 'object') { (edit).resource = URI.revive((edit).resource); } else { (edit).newUri = URI.revive((edit).newUri); (edit).oldUri = URI.revive((edit).oldUri); } } } return data; } export interface CodeActionDto { title: string; edit?: WorkspaceEditDto; diagnostics?: IMarkerData[]; command?: modes.Command; kind?: string; isPreferred?: boolean; } export interface ExtHostLanguageFeaturesShape { $provideDocumentSymbols(handle: number, resource: UriComponents, token: CancellationToken): Promise; $provideCodeLenses(handle: number, resource: UriComponents, token: CancellationToken): Promise; $resolveCodeLens(handle: number, resource: UriComponents, symbol: modes.ICodeLensSymbol, token: CancellationToken): Promise; $provideDefinition(handle: number, resource: UriComponents, position: IPosition, token: CancellationToken): Promise; $provideDeclaration(handle: number, resource: UriComponents, position: IPosition, token: CancellationToken): Promise; $provideImplementation(handle: number, resource: UriComponents, position: IPosition, token: CancellationToken): Promise; $provideTypeDefinition(handle: number, resource: UriComponents, position: IPosition, token: CancellationToken): Promise; $provideHover(handle: number, resource: UriComponents, position: IPosition, token: CancellationToken): Promise; $provideDocumentHighlights(handle: number, resource: UriComponents, position: IPosition, token: CancellationToken): Promise; $provideReferences(handle: number, resource: UriComponents, position: IPosition, context: modes.ReferenceContext, token: CancellationToken): Promise; $provideCodeActions(handle: number, resource: UriComponents, rangeOrSelection: IRange | ISelection, context: modes.CodeActionContext, token: CancellationToken): Promise; $provideDocumentFormattingEdits(handle: number, resource: UriComponents, options: modes.FormattingOptions, token: CancellationToken): Promise; $provideDocumentRangeFormattingEdits(handle: number, resource: UriComponents, range: IRange, options: modes.FormattingOptions, token: CancellationToken): Promise; $provideOnTypeFormattingEdits(handle: number, resource: UriComponents, position: IPosition, ch: string, options: modes.FormattingOptions, token: CancellationToken): Promise; $provideWorkspaceSymbols(handle: number, search: string, token: CancellationToken): Promise; $resolveWorkspaceSymbol(handle: number, symbol: WorkspaceSymbolDto, token: CancellationToken): Promise; $releaseWorkspaceSymbols(handle: number, id: number): void; $provideRenameEdits(handle: number, resource: UriComponents, position: IPosition, newName: string, token: CancellationToken): Promise; $resolveRenameLocation(handle: number, resource: UriComponents, position: IPosition, token: CancellationToken): Promise; $provideCompletionItems(handle: number, resource: UriComponents, position: IPosition, context: modes.CompletionContext, token: CancellationToken): Promise; $resolveCompletionItem(handle: number, resource: UriComponents, position: IPosition, suggestion: modes.CompletionItem, token: CancellationToken): Promise; $releaseCompletionItems(handle: number, id: number): void; $provideSignatureHelp(handle: number, resource: UriComponents, position: IPosition, context: modes.SignatureHelpContext, token: CancellationToken): Promise; $provideDocumentLinks(handle: number, resource: UriComponents, token: CancellationToken): Promise; $resolveDocumentLink(handle: number, link: modes.ILink, token: CancellationToken): Promise; $provideDocumentColors(handle: number, resource: UriComponents, token: CancellationToken): Promise; $provideColorPresentations(handle: number, resource: UriComponents, colorInfo: IRawColorInfo, token: CancellationToken): Promise; $provideFoldingRanges(handle: number, resource: UriComponents, context: modes.FoldingContext, token: CancellationToken): Promise; $provideSelectionRanges(handle: number, resource: UriComponents, position: IPosition, token: CancellationToken): Promise; } export interface ExtHostQuickOpenShape { $onItemSelected(handle: number): void; $validateInput(input: string): Promise; $onDidChangeActive(sessionId: number, handles: number[]): void; $onDidChangeSelection(sessionId: number, handles: number[]): void; $onDidAccept(sessionId: number): void; $onDidChangeValue(sessionId: number, value: string): void; $onDidTriggerButton(sessionId: number, handle: number): void; $onDidHide(sessionId: number): void; } export interface ShellLaunchConfigDto { name?: string; executable?: string; args?: string[] | string; cwd?: string | URI; env?: { [key: string]: string }; } export interface ExtHostTerminalServiceShape { $acceptTerminalClosed(id: number): void; $acceptTerminalOpened(id: number, name: string): void; $acceptActiveTerminalChanged(id: number | null): void; $acceptTerminalProcessId(id: number, processId: number): void; $acceptTerminalProcessData(id: number, data: string): void; $acceptTerminalRendererInput(id: number, data: string): void; $acceptTerminalTitleChange(id: number, name: string): void; $acceptTerminalDimensions(id: number, cols: number, rows: number): void; $createProcess(id: number, shellLaunchConfig: ShellLaunchConfigDto, activeWorkspaceRootUri: URI, cols: number, rows: number): void; $acceptProcessInput(id: number, data: string): void; $acceptProcessResize(id: number, cols: number, rows: number): void; $acceptProcessShutdown(id: number, immediate: boolean): void; $acceptProcessRequestInitialCwd(id: number): void; $acceptProcessRequestCwd(id: number): void; } export interface ExtHostSCMShape { $provideOriginalResource(sourceControlHandle: number, uri: UriComponents, token: CancellationToken): Promise; $onInputBoxValueChange(sourceControlHandle: number, value: string): void; $executeResourceCommand(sourceControlHandle: number, groupHandle: number, handle: number): Promise; $validateInput(sourceControlHandle: number, value: string, cursorPosition: number): Promise<[string, number] | undefined>; $setSelectedSourceControls(selectedSourceControlHandles: number[]): Promise; } export interface ExtHostTaskShape { $provideTasks(handle: number, validTypes: { [key: string]: boolean; }): Thenable; $onDidStartTask(execution: TaskExecutionDTO): void; $onDidStartTaskProcess(value: TaskProcessStartedDTO): void; $onDidEndTaskProcess(value: TaskProcessEndedDTO): void; $OnDidEndTask(execution: TaskExecutionDTO): void; $resolveVariables(workspaceFolder: UriComponents, toResolve: { process?: { name: string; cwd?: string }, variables: string[] }): Promise<{ process?: string; variables: { [key: string]: string } }>; } export interface IBreakpointDto { type: string; id?: string; enabled: boolean; condition?: string; hitCondition?: string; logMessage?: string; } export interface IFunctionBreakpointDto extends IBreakpointDto { type: 'function'; functionName: string; } export interface ISourceBreakpointDto extends IBreakpointDto { type: 'source'; uri: UriComponents; line: number; character: number; } export interface IBreakpointsDeltaDto { added?: Array; removed?: string[]; changed?: Array; } export interface ISourceMultiBreakpointDto { type: 'sourceMulti'; uri: UriComponents; lines: { id: string; enabled: boolean; condition?: string; hitCondition?: string; logMessage?: string; line: number; character: number; }[]; } export interface IDebugSessionFullDto { id: DebugSessionUUID; type: string; name: string; folderUri: UriComponents | undefined; configuration: IConfig; } export type IDebugSessionDto = IDebugSessionFullDto | DebugSessionUUID; export interface ExtHostDebugServiceShape { $substituteVariables(folder: UriComponents | undefined, config: IConfig): Promise; $runInTerminal(args: DebugProtocol.RunInTerminalRequestArguments, config: ITerminalSettings): Promise; $startDASession(handle: number, session: IDebugSessionDto): Promise; $stopDASession(handle: number): Promise; $sendDAMessage(handle: number, message: DebugProtocol.ProtocolMessage): void; $resolveDebugConfiguration(handle: number, folder: UriComponents | undefined, debugConfiguration: IConfig): Promise; $provideDebugConfigurations(handle: number, folder: UriComponents | undefined): Promise; $legacyDebugAdapterExecutable(handle: number, folderUri: UriComponents | undefined): Promise; // TODO@AW legacy $provideDebugAdapter(handle: number, session: IDebugSessionDto): Promise; $acceptDebugSessionStarted(session: IDebugSessionDto): void; $acceptDebugSessionTerminated(session: IDebugSessionDto): void; $acceptDebugSessionActiveChanged(session: IDebugSessionDto): void; $acceptDebugSessionCustomEvent(session: IDebugSessionDto, event: any): void; $acceptBreakpointsDelta(delta: IBreakpointsDeltaDto): void; } export interface DecorationRequest { readonly id: number; readonly handle: number; readonly uri: UriComponents; } export type DecorationData = [number, boolean, string, string, ThemeColor, string]; export type DecorationReply = { [id: number]: DecorationData }; export interface ExtHostDecorationsShape { $provideDecorations(requests: DecorationRequest[], token: CancellationToken): Promise; } export interface ExtHostWindowShape { $onDidChangeWindowFocus(value: boolean): void; } export interface ExtHostLogServiceShape { $setLevel(level: LogLevel): void; } export interface ExtHostOutputServiceShape { $setVisibleChannel(channelId: string | null): void; } export interface ExtHostProgressShape { $acceptProgressCanceled(handle: number): void; } export interface ExtHostCommentsShape { $provideDocumentComments(handle: number, document: UriComponents): Promise; $createNewCommentThread(handle: number, document: UriComponents, range: IRange, text: string): Promise; $replyToCommentThread(handle: number, document: UriComponents, range: IRange, commentThread: modes.CommentThread, text: string): Promise; $editComment(handle: number, document: UriComponents, comment: modes.Comment, text: string): Promise; $deleteComment(handle: number, document: UriComponents, comment: modes.Comment): Promise; $startDraft(handle: number, document: UriComponents): Promise; $deleteDraft(handle: number, document: UriComponents): Promise; $finishDraft(handle: number, document: UriComponents): Promise; $addReaction(handle: number, document: UriComponents, comment: modes.Comment, reaction: modes.CommentReaction): Promise; $deleteReaction(handle: number, document: UriComponents, comment: modes.Comment, reaction: modes.CommentReaction): Promise; $provideWorkspaceComments(handle: number): Promise; } export interface ExtHostStorageShape { $acceptValue(shared: boolean, key: string, value: object): void; } // --- proxy identifiers export const MainContext = { MainThreadClipboard: createMainId('MainThreadClipboard'), MainThreadCommands: createMainId('MainThreadCommands'), MainThreadComments: createMainId('MainThreadComments'), MainThreadConfiguration: createMainId('MainThreadConfiguration'), MainThreadConsole: createMainId('MainThreadConsole'), MainThreadDebugService: createMainId('MainThreadDebugService'), MainThreadDecorations: createMainId('MainThreadDecorations'), MainThreadDiagnostics: createMainId('MainThreadDiagnostics'), MainThreadDialogs: createMainId('MainThreadDiaglogs'), MainThreadDocuments: createMainId('MainThreadDocuments'), MainThreadDocumentContentProviders: createMainId('MainThreadDocumentContentProviders'), MainThreadTextEditors: createMainId('MainThreadTextEditors'), MainThreadErrors: createMainId('MainThreadErrors'), MainThreadTreeViews: createMainId('MainThreadTreeViews'), MainThreadLanguageFeatures: createMainId('MainThreadLanguageFeatures'), MainThreadLanguages: createMainId('MainThreadLanguages'), MainThreadMessageService: createMainId('MainThreadMessageService'), MainThreadOutputService: createMainId('MainThreadOutputService'), MainThreadProgress: createMainId('MainThreadProgress'), MainThreadQuickOpen: createMainId('MainThreadQuickOpen'), MainThreadStatusBar: createMainId('MainThreadStatusBar'), MainThreadStorage: createMainId('MainThreadStorage'), MainThreadTelemetry: createMainId('MainThreadTelemetry'), MainThreadTerminalService: createMainId('MainThreadTerminalService'), MainThreadWebviews: createMainId('MainThreadWebviews'), MainThreadUrls: createMainId('MainThreadUrls'), MainThreadWorkspace: createMainId('MainThreadWorkspace'), MainThreadFileSystem: createMainId('MainThreadFileSystem'), MainThreadExtensionService: createMainId('MainThreadExtensionService'), MainThreadSCM: createMainId('MainThreadSCM'), MainThreadSearch: createMainId('MainThreadSearch'), MainThreadTask: createMainId('MainThreadTask'), MainThreadWindow: createMainId('MainThreadWindow'), }; export const ExtHostContext = { ExtHostCommands: createExtId('ExtHostCommands'), ExtHostConfiguration: createExtId('ExtHostConfiguration'), ExtHostDiagnostics: createExtId('ExtHostDiagnostics'), ExtHostDebugService: createExtId('ExtHostDebugService'), ExtHostDecorations: createExtId('ExtHostDecorations'), ExtHostDocumentsAndEditors: createExtId('ExtHostDocumentsAndEditors'), ExtHostDocuments: createExtId('ExtHostDocuments'), ExtHostDocumentContentProviders: createExtId('ExtHostDocumentContentProviders'), ExtHostDocumentSaveParticipant: createExtId('ExtHostDocumentSaveParticipant'), ExtHostEditors: createExtId('ExtHostEditors'), ExtHostTreeViews: createExtId('ExtHostTreeViews'), ExtHostFileSystem: createExtId('ExtHostFileSystem'), ExtHostFileSystemEventService: createExtId('ExtHostFileSystemEventService'), ExtHostHeapService: createExtId('ExtHostHeapMonitor'), ExtHostLanguageFeatures: createExtId('ExtHostLanguageFeatures'), ExtHostQuickOpen: createExtId('ExtHostQuickOpen'), ExtHostExtensionService: createExtId('ExtHostExtensionService'), ExtHostLogService: createExtId('ExtHostLogService'), ExtHostTerminalService: createExtId('ExtHostTerminalService'), ExtHostSCM: createExtId('ExtHostSCM'), ExtHostSearch: createExtId('ExtHostSearch'), ExtHostTask: createExtId('ExtHostTask'), ExtHostWorkspace: createExtId('ExtHostWorkspace'), ExtHostWindow: createExtId('ExtHostWindow'), ExtHostWebviews: createExtId('ExtHostWebviews'), ExtHostProgress: createMainId('ExtHostProgress'), ExtHostComments: createMainId('ExtHostComments'), ExtHostStorage: createMainId('ExtHostStorage'), ExtHostUrls: createExtId('ExtHostUrls'), ExtHostOutputService: createMainId('ExtHostOutputService'), };