Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
microsoft
GitHub Repository: microsoft/vscode
Path: blob/main/extensions/copilot/src/extension/prompts/node/test/fixtures/extHost.api.impl.ts
13406 views
1
/*---------------------------------------------------------------------------------------------
2
* Copyright (c) Microsoft Corporation. All rights reserved.
3
* Licensed under the MIT License. See License.txt in the project root for license information.
4
*--------------------------------------------------------------------------------------------*/
5
6
import { CancellationTokenSource } from 'vs/base/common/cancellation';
7
import * as errors from 'vs/base/common/errors';
8
import { Emitter, Event } from 'vs/base/common/event';
9
import { combinedDisposable } from 'vs/base/common/lifecycle';
10
import { Schemas } from 'vs/base/common/network';
11
import Severity from 'vs/base/common/severity';
12
import { URI } from 'vs/base/common/uri';
13
import { TextEditorCursorStyle } from 'vs/editor/common/config/editorOptions';
14
import { score } from 'vs/editor/common/languageSelector';
15
import * as languageConfiguration from 'vs/editor/common/languages/languageConfiguration';
16
import { OverviewRulerLane } from 'vs/editor/common/model';
17
import { ExtensionIdentifierSet, IExtensionDescription } from 'vs/platform/extensions/common/extensions';
18
import * as files from 'vs/platform/files/common/files';
19
import { ServicesAccessor } from 'vs/platform/instantiation/common/instantiation';
20
import { ILogService, ILoggerService, LogLevel } from 'vs/platform/log/common/log';
21
import { matchesScheme } from 'vs/platform/opener/common/opener';
22
import { getRemoteName } from 'vs/platform/remote/common/remoteHosts';
23
import { TelemetryTrustedValue } from 'vs/platform/telemetry/common/telemetryUtils';
24
import { EditSessionIdentityMatch } from 'vs/platform/workspace/common/editSessions';
25
import { CandidatePortSource, ExtHostContext, ExtHostLogLevelServiceShape, MainContext } from 'vs/workbench/api/common/extHost.protocol';
26
import { ExtHostApiCommands } from 'vs/workbench/api/common/extHostApiCommands';
27
import { IExtHostApiDeprecationService } from 'vs/workbench/api/common/extHostApiDeprecationService';
28
import { ExtHostAuthentication } from 'vs/workbench/api/common/extHostAuthentication';
29
import { ExtHostBulkEdits } from 'vs/workbench/api/common/extHostBulkEdits';
30
import { ExtHostClipboard } from 'vs/workbench/api/common/extHostClipboard';
31
import { ExtHostEditorInsets } from 'vs/workbench/api/common/extHostCodeInsets';
32
import { IExtHostCommands } from 'vs/workbench/api/common/extHostCommands';
33
import { createExtHostComments } from 'vs/workbench/api/common/extHostComments';
34
import { ExtHostConfigProvider, IExtHostConfiguration } from 'vs/workbench/api/common/extHostConfiguration';
35
import { ExtHostCustomEditors } from 'vs/workbench/api/common/extHostCustomEditors';
36
import { IExtHostDebugService } from 'vs/workbench/api/common/extHostDebugService';
37
import { IExtHostDecorations } from 'vs/workbench/api/common/extHostDecorations';
38
import { ExtHostDiagnostics } from 'vs/workbench/api/common/extHostDiagnostics';
39
import { ExtHostDialogs } from 'vs/workbench/api/common/extHostDialogs';
40
import { ExtHostDocumentContentProvider } from 'vs/workbench/api/common/extHostDocumentContentProviders';
41
import { ExtHostDocumentSaveParticipant } from 'vs/workbench/api/common/extHostDocumentSaveParticipant';
42
import { ExtHostDocuments } from 'vs/workbench/api/common/extHostDocuments';
43
import { IExtHostDocumentsAndEditors } from 'vs/workbench/api/common/extHostDocumentsAndEditors';
44
import { IExtHostEditorTabs } from 'vs/workbench/api/common/extHostEditorTabs';
45
import { Extension, IExtHostExtensionService } from 'vs/workbench/api/common/extHostExtensionService';
46
import { ExtHostFileSystem } from 'vs/workbench/api/common/extHostFileSystem';
47
import { IExtHostConsumerFileSystem } from 'vs/workbench/api/common/extHostFileSystemConsumer';
48
import { ExtHostFileSystemEventService } from 'vs/workbench/api/common/extHostFileSystemEventService';
49
import { IExtHostFileSystemInfo } from 'vs/workbench/api/common/extHostFileSystemInfo';
50
import { IExtHostInitDataService } from 'vs/workbench/api/common/extHostInitDataService';
51
import { ExtHostInteractive } from 'vs/workbench/api/common/extHostInteractive';
52
import { ExtHostInteractiveEditor } from 'vs/workbench/api/common/extHostInteractiveEditor';
53
import { ExtHostInteractiveSession } from 'vs/workbench/api/common/extHostInteractiveSession';
54
import { ExtHostLabelService } from 'vs/workbench/api/common/extHostLabelService';
55
import { ExtHostLanguageFeatures } from 'vs/workbench/api/common/extHostLanguageFeatures';
56
import { ExtHostLanguages } from 'vs/workbench/api/common/extHostLanguages';
57
import { IExtHostLocalizationService } from 'vs/workbench/api/common/extHostLocalizationService';
58
import { ExtHostMessageService } from 'vs/workbench/api/common/extHostMessageService';
59
import { ExtHostNotebookController } from 'vs/workbench/api/common/extHostNotebook';
60
import { ExtHostNotebookDocumentSaveParticipant } from 'vs/workbench/api/common/extHostNotebookDocumentSaveParticipant';
61
import { ExtHostNotebookDocuments } from 'vs/workbench/api/common/extHostNotebookDocuments';
62
import { ExtHostNotebookEditors } from 'vs/workbench/api/common/extHostNotebookEditors';
63
import { ExtHostNotebookKernels } from 'vs/workbench/api/common/extHostNotebookKernels';
64
import { ExtHostNotebookRenderers } from 'vs/workbench/api/common/extHostNotebookRenderers';
65
import { IExtHostOutputService } from 'vs/workbench/api/common/extHostOutput';
66
import { ExtHostProfileContentHandlers } from 'vs/workbench/api/common/extHostProfileContentHandler';
67
import { ExtHostProgress } from 'vs/workbench/api/common/extHostProgress';
68
import { ExtHostQuickDiff } from 'vs/workbench/api/common/extHostQuickDiff';
69
import { createExtHostQuickOpen } from 'vs/workbench/api/common/extHostQuickOpen';
70
import { IExtHostRpcService } from 'vs/workbench/api/common/extHostRpcService';
71
import { ExtHostSCM } from 'vs/workbench/api/common/extHostSCM';
72
import { IExtHostSearch } from 'vs/workbench/api/common/extHostSearch';
73
import { IExtHostSecretState } from 'vs/workbench/api/common/extHostSecretState';
74
import { ExtHostStatusBar } from 'vs/workbench/api/common/extHostStatusBar';
75
import { IExtHostStorage } from 'vs/workbench/api/common/extHostStorage';
76
import { IExtensionStoragePaths } from 'vs/workbench/api/common/extHostStoragePaths';
77
import { IExtHostTask } from 'vs/workbench/api/common/extHostTask';
78
import { ExtHostTelemetryLogger, IExtHostTelemetry, isNewAppInstall } from 'vs/workbench/api/common/extHostTelemetry';
79
import { IExtHostTerminalService } from 'vs/workbench/api/common/extHostTerminalService';
80
import { ExtHostTesting } from 'vs/workbench/api/common/extHostTesting';
81
import { ExtHostEditors } from 'vs/workbench/api/common/extHostTextEditors';
82
import { ExtHostTheming } from 'vs/workbench/api/common/extHostTheming';
83
import { ExtHostTimeline } from 'vs/workbench/api/common/extHostTimeline';
84
import { ExtHostTreeViews } from 'vs/workbench/api/common/extHostTreeViews';
85
import { IExtHostTunnelService } from 'vs/workbench/api/common/extHostTunnelService';
86
import * as typeConverters from 'vs/workbench/api/common/extHostTypeConverters';
87
import * as extHostTypes from 'vs/workbench/api/common/extHostTypes';
88
import { ExtHostUriOpeners } from 'vs/workbench/api/common/extHostUriOpener';
89
import { IURITransformerService } from 'vs/workbench/api/common/extHostUriTransformerService';
90
import { ExtHostUrls } from 'vs/workbench/api/common/extHostUrls';
91
import { ExtHostWebviews } from 'vs/workbench/api/common/extHostWebview';
92
import { ExtHostWebviewPanels } from 'vs/workbench/api/common/extHostWebviewPanels';
93
import { ExtHostWebviewViews } from 'vs/workbench/api/common/extHostWebviewView';
94
import { IExtHostWindow } from 'vs/workbench/api/common/extHostWindow';
95
import { IExtHostWorkspace } from 'vs/workbench/api/common/extHostWorkspace';
96
import { DebugConfigurationProviderTriggerKind } from 'vs/workbench/contrib/debug/common/debug';
97
import { ExtensionDescriptionRegistry } from 'vs/workbench/services/extensions/common/extensionDescriptionRegistry';
98
import { UIKind } from 'vs/workbench/services/extensions/common/extensionHostProtocol';
99
import { checkProposedApiEnabled, isProposedApiEnabled } from 'vs/workbench/services/extensions/common/extensions';
100
import { ProxyIdentifier } from 'vs/workbench/services/extensions/common/proxyIdentifier';
101
import { TextSearchCompleteMessageType } from 'vs/workbench/services/search/common/searchExtTypes';
102
import type * as vscode from 'vscode';
103
104
export interface IExtensionRegistries {
105
mine: ExtensionDescriptionRegistry;
106
all: ExtensionDescriptionRegistry;
107
}
108
109
export interface IExtensionApiFactory {
110
(extension: IExtensionDescription, extensionInfo: IExtensionRegistries, configProvider: ExtHostConfigProvider): typeof vscode;
111
}
112
113
/**
114
* This method instantiates and returns the extension API surface
115
*/
116
export function createApiFactoryAndRegisterActors(accessor: ServicesAccessor): IExtensionApiFactory {
117
118
// services
119
const initData = accessor.get(IExtHostInitDataService);
120
const extHostFileSystemInfo = accessor.get(IExtHostFileSystemInfo);
121
const extHostConsumerFileSystem = accessor.get(IExtHostConsumerFileSystem);
122
const extensionService = accessor.get(IExtHostExtensionService);
123
const extHostWorkspace = accessor.get(IExtHostWorkspace);
124
const extHostTelemetry = accessor.get(IExtHostTelemetry);
125
const extHostConfiguration = accessor.get(IExtHostConfiguration);
126
const uriTransformer = accessor.get(IURITransformerService);
127
const rpcProtocol = accessor.get(IExtHostRpcService);
128
const extHostStorage = accessor.get(IExtHostStorage);
129
const extensionStoragePaths = accessor.get(IExtensionStoragePaths);
130
const extHostLoggerService = accessor.get(ILoggerService);
131
const extHostLogService = accessor.get(ILogService);
132
const extHostTunnelService = accessor.get(IExtHostTunnelService);
133
const extHostApiDeprecation = accessor.get(IExtHostApiDeprecationService);
134
const extHostWindow = accessor.get(IExtHostWindow);
135
const extHostSecretState = accessor.get(IExtHostSecretState);
136
const extHostEditorTabs = accessor.get(IExtHostEditorTabs);
137
138
// register addressable instances
139
rpcProtocol.set(ExtHostContext.ExtHostFileSystemInfo, extHostFileSystemInfo);
140
rpcProtocol.set(ExtHostContext.ExtHostLogLevelServiceShape, <ExtHostLogLevelServiceShape><any>extHostLoggerService);
141
rpcProtocol.set(ExtHostContext.ExtHostWorkspace, extHostWorkspace);
142
rpcProtocol.set(ExtHostContext.ExtHostConfiguration, extHostConfiguration);
143
rpcProtocol.set(ExtHostContext.ExtHostExtensionService, extensionService);
144
rpcProtocol.set(ExtHostContext.ExtHostStorage, extHostStorage);
145
rpcProtocol.set(ExtHostContext.ExtHostTunnelService, extHostTunnelService);
146
rpcProtocol.set(ExtHostContext.ExtHostWindow, extHostWindow);
147
rpcProtocol.set(ExtHostContext.ExtHostSecretState, extHostSecretState);
148
rpcProtocol.set(ExtHostContext.ExtHostTelemetry, extHostTelemetry);
149
rpcProtocol.set(ExtHostContext.ExtHostEditorTabs, extHostEditorTabs);
150
151
// automatically create and register addressable instances
152
const extHostDecorations = rpcProtocol.set(ExtHostContext.ExtHostDecorations, accessor.get(IExtHostDecorations));
153
const extHostDocumentsAndEditors = rpcProtocol.set(ExtHostContext.ExtHostDocumentsAndEditors, accessor.get(IExtHostDocumentsAndEditors));
154
const extHostCommands = rpcProtocol.set(ExtHostContext.ExtHostCommands, accessor.get(IExtHostCommands));
155
const extHostTerminalService = rpcProtocol.set(ExtHostContext.ExtHostTerminalService, accessor.get(IExtHostTerminalService));
156
const extHostDebugService = rpcProtocol.set(ExtHostContext.ExtHostDebugService, accessor.get(IExtHostDebugService));
157
const extHostSearch = rpcProtocol.set(ExtHostContext.ExtHostSearch, accessor.get(IExtHostSearch));
158
const extHostTask = rpcProtocol.set(ExtHostContext.ExtHostTask, accessor.get(IExtHostTask));
159
const extHostOutputService = rpcProtocol.set(ExtHostContext.ExtHostOutputService, accessor.get(IExtHostOutputService));
160
const extHostLocalization = rpcProtocol.set(ExtHostContext.ExtHostLocalization, accessor.get(IExtHostLocalizationService));
161
162
// manually create and register addressable instances
163
const extHostUrls = rpcProtocol.set(ExtHostContext.ExtHostUrls, new ExtHostUrls(rpcProtocol));
164
const extHostDocuments = rpcProtocol.set(ExtHostContext.ExtHostDocuments, new ExtHostDocuments(rpcProtocol, extHostDocumentsAndEditors));
165
const extHostDocumentContentProviders = rpcProtocol.set(ExtHostContext.ExtHostDocumentContentProviders, new ExtHostDocumentContentProvider(rpcProtocol, extHostDocumentsAndEditors, extHostLogService));
166
const extHostDocumentSaveParticipant = rpcProtocol.set(ExtHostContext.ExtHostDocumentSaveParticipant, new ExtHostDocumentSaveParticipant(extHostLogService, extHostDocuments, rpcProtocol.getProxy(MainContext.MainThreadBulkEdits)));
167
const extHostNotebook = rpcProtocol.set(ExtHostContext.ExtHostNotebook, new ExtHostNotebookController(rpcProtocol, extHostCommands, extHostDocumentsAndEditors, extHostDocuments));
168
const extHostNotebookDocuments = rpcProtocol.set(ExtHostContext.ExtHostNotebookDocuments, new ExtHostNotebookDocuments(extHostNotebook));
169
const extHostNotebookEditors = rpcProtocol.set(ExtHostContext.ExtHostNotebookEditors, new ExtHostNotebookEditors(extHostLogService, extHostNotebook));
170
const extHostNotebookKernels = rpcProtocol.set(ExtHostContext.ExtHostNotebookKernels, new ExtHostNotebookKernels(rpcProtocol, initData, extHostNotebook, extHostCommands, extHostLogService));
171
const extHostNotebookRenderers = rpcProtocol.set(ExtHostContext.ExtHostNotebookRenderers, new ExtHostNotebookRenderers(rpcProtocol, extHostNotebook));
172
const extHostNotebookDocumentSaveParticipant = rpcProtocol.set(ExtHostContext.ExtHostNotebookDocumentSaveParticipant, new ExtHostNotebookDocumentSaveParticipant(extHostLogService, extHostNotebook, rpcProtocol.getProxy(MainContext.MainThreadBulkEdits)));
173
const extHostEditors = rpcProtocol.set(ExtHostContext.ExtHostEditors, new ExtHostEditors(rpcProtocol, extHostDocumentsAndEditors));
174
const extHostTreeViews = rpcProtocol.set(ExtHostContext.ExtHostTreeViews, new ExtHostTreeViews(rpcProtocol.getProxy(MainContext.MainThreadTreeViews), extHostCommands, extHostLogService));
175
const extHostEditorInsets = rpcProtocol.set(ExtHostContext.ExtHostEditorInsets, new ExtHostEditorInsets(rpcProtocol.getProxy(MainContext.MainThreadEditorInsets), extHostEditors, initData.remote));
176
const extHostDiagnostics = rpcProtocol.set(ExtHostContext.ExtHostDiagnostics, new ExtHostDiagnostics(rpcProtocol, extHostLogService, extHostFileSystemInfo, extHostDocumentsAndEditors));
177
const extHostLanguages = rpcProtocol.set(ExtHostContext.ExtHostLanguages, new ExtHostLanguages(rpcProtocol, extHostDocuments, extHostCommands.converter, uriTransformer));
178
const extHostLanguageFeatures = rpcProtocol.set(ExtHostContext.ExtHostLanguageFeatures, new ExtHostLanguageFeatures(rpcProtocol, uriTransformer, extHostDocuments, extHostCommands, extHostDiagnostics, extHostLogService, extHostApiDeprecation, extHostTelemetry));
179
const extHostFileSystem = rpcProtocol.set(ExtHostContext.ExtHostFileSystem, new ExtHostFileSystem(rpcProtocol, extHostLanguageFeatures));
180
const extHostFileSystemEvent = rpcProtocol.set(ExtHostContext.ExtHostFileSystemEventService, new ExtHostFileSystemEventService(rpcProtocol, extHostLogService, extHostDocumentsAndEditors));
181
const extHostQuickOpen = rpcProtocol.set(ExtHostContext.ExtHostQuickOpen, createExtHostQuickOpen(rpcProtocol, extHostWorkspace, extHostCommands));
182
const extHostSCM = rpcProtocol.set(ExtHostContext.ExtHostSCM, new ExtHostSCM(rpcProtocol, extHostCommands, extHostLogService));
183
const extHostQuickDiff = rpcProtocol.set(ExtHostContext.ExtHostQuickDiff, new ExtHostQuickDiff(rpcProtocol, uriTransformer));
184
const extHostComment = rpcProtocol.set(ExtHostContext.ExtHostComments, createExtHostComments(rpcProtocol, extHostCommands, extHostDocuments));
185
const extHostProgress = rpcProtocol.set(ExtHostContext.ExtHostProgress, new ExtHostProgress(rpcProtocol.getProxy(MainContext.MainThreadProgress)));
186
const extHostLabelService = rpcProtocol.set(ExtHostContext.ExtHosLabelService, new ExtHostLabelService(rpcProtocol));
187
const extHostTheming = rpcProtocol.set(ExtHostContext.ExtHostTheming, new ExtHostTheming(rpcProtocol));
188
const extHostAuthentication = rpcProtocol.set(ExtHostContext.ExtHostAuthentication, new ExtHostAuthentication(rpcProtocol));
189
const extHostTimeline = rpcProtocol.set(ExtHostContext.ExtHostTimeline, new ExtHostTimeline(rpcProtocol, extHostCommands));
190
const extHostWebviews = rpcProtocol.set(ExtHostContext.ExtHostWebviews, new ExtHostWebviews(rpcProtocol, initData.remote, extHostWorkspace, extHostLogService, extHostApiDeprecation));
191
const extHostWebviewPanels = rpcProtocol.set(ExtHostContext.ExtHostWebviewPanels, new ExtHostWebviewPanels(rpcProtocol, extHostWebviews, extHostWorkspace));
192
const extHostCustomEditors = rpcProtocol.set(ExtHostContext.ExtHostCustomEditors, new ExtHostCustomEditors(rpcProtocol, extHostDocuments, extensionStoragePaths, extHostWebviews, extHostWebviewPanels));
193
const extHostWebviewViews = rpcProtocol.set(ExtHostContext.ExtHostWebviewViews, new ExtHostWebviewViews(rpcProtocol, extHostWebviews));
194
const extHostTesting = rpcProtocol.set(ExtHostContext.ExtHostTesting, new ExtHostTesting(rpcProtocol, extHostCommands, extHostDocumentsAndEditors));
195
const extHostUriOpeners = rpcProtocol.set(ExtHostContext.ExtHostUriOpeners, new ExtHostUriOpeners(rpcProtocol));
196
const extHostProfileContentHandlers = rpcProtocol.set(ExtHostContext.ExtHostProfileContentHandlers, new ExtHostProfileContentHandlers(rpcProtocol));
197
rpcProtocol.set(ExtHostContext.ExtHostInteractive, new ExtHostInteractive(rpcProtocol, extHostNotebook, extHostDocumentsAndEditors, extHostCommands, extHostLogService));
198
const extHostInteractiveEditor = rpcProtocol.set(ExtHostContext.ExtHostInteractiveEditor, new ExtHostInteractiveEditor(rpcProtocol, extHostDocuments, extHostLogService, extHostCommands));
199
const extHostInteractiveSession = rpcProtocol.set(ExtHostContext.ExtHostInteractiveSession, new ExtHostInteractiveSession(rpcProtocol, extHostLogService));
200
201
// Check that no named customers are missing
202
const expected = Object.values<ProxyIdentifier<any>>(ExtHostContext);
203
rpcProtocol.assertRegistered(expected);
204
205
// Other instances
206
const extHostBulkEdits = new ExtHostBulkEdits(rpcProtocol, extHostDocumentsAndEditors);
207
const extHostClipboard = new ExtHostClipboard(rpcProtocol);
208
const extHostMessageService = new ExtHostMessageService(rpcProtocol, extHostLogService);
209
const extHostDialogs = new ExtHostDialogs(rpcProtocol);
210
const extHostStatusBar = new ExtHostStatusBar(rpcProtocol, extHostCommands.converter);
211
212
// Register API-ish commands
213
ExtHostApiCommands.register(extHostCommands);
214
215
return function (extension: IExtensionDescription, extensionInfo: IExtensionRegistries, configProvider: ExtHostConfigProvider): typeof vscode {
216
217
// Check document selectors for being overly generic. Technically this isn't a problem but
218
// in practice many extensions say they support `fooLang` but need fs-access to do so. Those
219
// extension should specify then the `file`-scheme, e.g. `{ scheme: 'fooLang', language: 'fooLang' }`
220
// We only inform once, it is not a warning because we just want to raise awareness and because
221
// we cannot say if the extension is doing it right or wrong...
222
const checkSelector = (function () {
223
let done = !extension.isUnderDevelopment;
224
function informOnce() {
225
if (!done) {
226
extHostLogService.info(`Extension '${extension.identifier.value}' uses a document selector without scheme. Learn more about this: https://go.microsoft.com/fwlink/?linkid=872305`);
227
done = true;
228
}
229
}
230
return function perform(selector: vscode.DocumentSelector): vscode.DocumentSelector {
231
if (Array.isArray(selector)) {
232
selector.forEach(perform);
233
} else if (typeof selector === 'string') {
234
informOnce();
235
} else {
236
const filter = selector as vscode.DocumentFilter; // TODO: microsoft/TypeScript#42768
237
if (typeof filter.scheme === 'undefined') {
238
informOnce();
239
}
240
if (typeof filter.exclusive === 'boolean') {
241
checkProposedApiEnabled(extension, 'documentFiltersExclusive');
242
}
243
}
244
return selector;
245
};
246
})();
247
248
const authentication: typeof vscode.authentication = {
249
getSession(providerId: string, scopes: readonly string[], options?: vscode.AuthenticationGetSessionOptions) {
250
return extHostAuthentication.getSession(extension, providerId, scopes, options as any);
251
},
252
getSessions(providerId: string, scopes: readonly string[]) {
253
checkProposedApiEnabled(extension, 'getSessions');
254
return extHostAuthentication.getSessions(extension, providerId, scopes);
255
},
256
// TODO: remove this after GHPR and Codespaces move off of it
257
async hasSession(providerId: string, scopes: readonly string[]) {
258
checkProposedApiEnabled(extension, 'authSession');
259
return !!(await extHostAuthentication.getSession(extension, providerId, scopes, { silent: true } as any));
260
},
261
get onDidChangeSessions(): Event<vscode.AuthenticationSessionsChangeEvent> {
262
return extHostAuthentication.onDidChangeSessions;
263
},
264
registerAuthenticationProvider(id: string, label: string, provider: vscode.AuthenticationProvider, options?: vscode.AuthenticationProviderOptions): vscode.Disposable {
265
return extHostAuthentication.registerAuthenticationProvider(id, label, provider, options);
266
}
267
};
268
269
// namespace: commands
270
const commands: typeof vscode.commands = {
271
registerCommand(id: string, command: <T>(...args: any[]) => T | Thenable<T>, thisArgs?: any): vscode.Disposable {
272
return extHostCommands.registerCommand(true, id, command, thisArgs, undefined, extension);
273
},
274
registerTextEditorCommand(id: string, callback: (textEditor: vscode.TextEditor, edit: vscode.TextEditorEdit, ...args: any[]) => void, thisArg?: any): vscode.Disposable {
275
return extHostCommands.registerCommand(true, id, (...args: any[]): any => {
276
const activeTextEditor = extHostEditors.getActiveTextEditor();
277
if (!activeTextEditor) {
278
extHostLogService.warn('Cannot execute ' + id + ' because there is no active text editor.');
279
return undefined;
280
}
281
282
return activeTextEditor.edit((edit: vscode.TextEditorEdit) => {
283
callback.apply(thisArg, [activeTextEditor, edit, ...args]);
284
285
}).then((result) => {
286
if (!result) {
287
extHostLogService.warn('Edits from command ' + id + ' were not applied.');
288
}
289
}, (err) => {
290
extHostLogService.warn('An error occurred while running command ' + id, err);
291
});
292
}, undefined, undefined, extension);
293
},
294
registerDiffInformationCommand: (id: string, callback: (diff: vscode.LineChange[], ...args: any[]) => any, thisArg?: any): vscode.Disposable => {
295
checkProposedApiEnabled(extension, 'diffCommand');
296
return extHostCommands.registerCommand(true, id, async (...args: any[]): Promise<any> => {
297
const activeTextEditor = extHostDocumentsAndEditors.activeEditor(true);
298
if (!activeTextEditor) {
299
extHostLogService.warn('Cannot execute ' + id + ' because there is no active text editor.');
300
return undefined;
301
}
302
303
const diff = await extHostEditors.getDiffInformation(activeTextEditor.id);
304
callback.apply(thisArg, [diff, ...args]);
305
}, undefined, undefined, extension);
306
},
307
executeCommand<T>(id: string, ...args: any[]): Thenable<T> {
308
return extHostCommands.executeCommand<T>(id, ...args);
309
},
310
getCommands(filterInternal: boolean = false): Thenable<string[]> {
311
return extHostCommands.getCommands(filterInternal);
312
}
313
};
314
315
// namespace: env
316
const env: typeof vscode.env = {
317
get machineId() { return initData.telemetryInfo.machineId; },
318
get sessionId() { return initData.telemetryInfo.sessionId; },
319
get language() { return initData.environment.appLanguage; },
320
get appName() { return initData.environment.appName; },
321
get appRoot() { return initData.environment.appRoot?.fsPath ?? ''; },
322
get appHost() { return initData.environment.appHost; },
323
get uriScheme() { return initData.environment.appUriScheme; },
324
get clipboard(): vscode.Clipboard { return extHostClipboard.value; },
325
get shell() {
326
return extHostTerminalService.getDefaultShell(false);
327
},
328
get onDidChangeShell() {
329
checkProposedApiEnabled(extension, 'envShellEvent');
330
return extHostTerminalService.onDidChangeShell;
331
},
332
get isTelemetryEnabled() {
333
return extHostTelemetry.getTelemetryConfiguration();
334
},
335
get onDidChangeTelemetryEnabled(): Event<boolean> {
336
return extHostTelemetry.onDidChangeTelemetryEnabled;
337
},
338
get telemetryConfiguration(): vscode.TelemetryConfiguration {
339
checkProposedApiEnabled(extension, 'telemetry');
340
return extHostTelemetry.getTelemetryDetails();
341
},
342
get onDidChangeTelemetryConfiguration(): Event<vscode.TelemetryConfiguration> {
343
checkProposedApiEnabled(extension, 'telemetry');
344
return extHostTelemetry.onDidChangeTelemetryConfiguration;
345
},
346
get isNewAppInstall() {
347
return isNewAppInstall(initData.telemetryInfo.firstSessionDate);
348
},
349
createTelemetryLogger(sender: vscode.TelemetrySender, options?: vscode.TelemetryLoggerOptions): vscode.TelemetryLogger {
350
ExtHostTelemetryLogger.validateSender(sender);
351
return extHostTelemetry.instantiateLogger(extension, sender, options);
352
},
353
openExternal(uri: URI, options?: { allowContributedOpeners?: boolean | string }) {
354
return extHostWindow.openUri(uri, {
355
allowTunneling: !!initData.remote.authority,
356
allowContributedOpeners: options?.allowContributedOpeners,
357
});
358
},
359
async asExternalUri(uri: URI) {
360
if (uri.scheme === initData.environment.appUriScheme) {
361
return extHostUrls.createAppUri(uri);
362
}
363
364
try {
365
return await extHostWindow.asExternalUri(uri, { allowTunneling: !!initData.remote.authority });
366
} catch (err) {
367
if (matchesScheme(uri, Schemas.http) || matchesScheme(uri, Schemas.https)) {
368
return uri;
369
}
370
371
throw err;
372
}
373
},
374
get remoteName() {
375
return getRemoteName(initData.remote.authority);
376
},
377
get remoteAuthority() {
378
checkProposedApiEnabled(extension, 'resolvers');
379
return initData.remote.authority;
380
},
381
get uiKind() {
382
return initData.uiKind;
383
},
384
get logLevel() {
385
return extHostLogService.getLevel();
386
},
387
get onDidChangeLogLevel() {
388
return extHostLogService.onDidChangeLogLevel;
389
}
390
};
391
if (!initData.environment.extensionTestsLocationURI) {
392
// allow to patch env-function when running tests
393
Object.freeze(env);
394
}
395
396
// namespace: tests
397
const tests: typeof vscode.tests = {
398
createTestController(provider, label, refreshHandler?: (token: vscode.CancellationToken) => Thenable<void> | void) {
399
return extHostTesting.createTestController(extension, provider, label, refreshHandler);
400
},
401
createTestObserver() {
402
checkProposedApiEnabled(extension, 'testObserver');
403
return extHostTesting.createTestObserver();
404
},
405
runTests(provider) {
406
checkProposedApiEnabled(extension, 'testObserver');
407
return extHostTesting.runTests(provider);
408
},
409
get onDidChangeTestResults() {
410
checkProposedApiEnabled(extension, 'testObserver');
411
return extHostTesting.onResultsChanged;
412
},
413
get testResults() {
414
checkProposedApiEnabled(extension, 'testObserver');
415
return extHostTesting.results;
416
},
417
};
418
419
// namespace: extensions
420
const extensionKind = initData.remote.isRemote
421
? extHostTypes.ExtensionKind.Workspace
422
: extHostTypes.ExtensionKind.UI;
423
424
const extensions: typeof vscode.extensions = {
425
getExtension(extensionId: string, includeFromDifferentExtensionHosts?: boolean): vscode.Extension<any> | undefined {
426
if (!isProposedApiEnabled(extension, 'extensionsAny')) {
427
includeFromDifferentExtensionHosts = false;
428
}
429
const mine = extensionInfo.mine.getExtensionDescription(extensionId);
430
if (mine) {
431
return new Extension(extensionService, extension.identifier, mine, extensionKind, false);
432
}
433
if (includeFromDifferentExtensionHosts) {
434
const foreign = extensionInfo.all.getExtensionDescription(extensionId);
435
if (foreign) {
436
return new Extension(extensionService, extension.identifier, foreign, extensionKind /* TODO@alexdima THIS IS WRONG */, true);
437
}
438
}
439
return undefined;
440
},
441
get all(): vscode.Extension<any>[] {
442
const result: vscode.Extension<any>[] = [];
443
for (const desc of extensionInfo.mine.getAllExtensionDescriptions()) {
444
result.push(new Extension(extensionService, extension.identifier, desc, extensionKind, false));
445
}
446
return result;
447
},
448
get allAcrossExtensionHosts(): vscode.Extension<any>[] {
449
checkProposedApiEnabled(extension, 'extensionsAny');
450
const local = new ExtensionIdentifierSet(extensionInfo.mine.getAllExtensionDescriptions().map(desc => desc.identifier));
451
const result: vscode.Extension<any>[] = [];
452
for (const desc of extensionInfo.all.getAllExtensionDescriptions()) {
453
const isFromDifferentExtensionHost = !local.has(desc.identifier);
454
result.push(new Extension(extensionService, extension.identifier, desc, extensionKind /* TODO@alexdima THIS IS WRONG */, isFromDifferentExtensionHost));
455
}
456
return result;
457
},
458
get onDidChange() {
459
if (isProposedApiEnabled(extension, 'extensionsAny')) {
460
return Event.any(extensionInfo.mine.onDidChange, extensionInfo.all.onDidChange);
461
}
462
return extensionInfo.mine.onDidChange;
463
}
464
};
465
466
// namespace: languages
467
const languages: typeof vscode.languages = {
468
createDiagnosticCollection(name?: string): vscode.DiagnosticCollection {
469
return extHostDiagnostics.createDiagnosticCollection(extension.identifier, name);
470
},
471
get onDidChangeDiagnostics() {
472
return extHostDiagnostics.onDidChangeDiagnostics;
473
},
474
getDiagnostics: (resource?: vscode.Uri) => {
475
return <any>extHostDiagnostics.getDiagnostics(resource);
476
},
477
getLanguages(): Thenable<string[]> {
478
return extHostLanguages.getLanguages();
479
},
480
setTextDocumentLanguage(document: vscode.TextDocument, languageId: string): Thenable<vscode.TextDocument> {
481
return extHostLanguages.changeLanguage(document.uri, languageId);
482
},
483
match(selector: vscode.DocumentSelector, document: vscode.TextDocument): number {
484
const notebook = extHostDocuments.getDocumentData(document.uri)?.notebook;
485
return score(typeConverters.LanguageSelector.from(selector), document.uri, document.languageId, true, notebook?.uri, notebook?.notebookType);
486
},
487
registerCodeActionsProvider(selector: vscode.DocumentSelector, provider: vscode.CodeActionProvider, metadata?: vscode.CodeActionProviderMetadata): vscode.Disposable {
488
return extHostLanguageFeatures.registerCodeActionProvider(extension, checkSelector(selector), provider, metadata);
489
},
490
registerDocumentPasteEditProvider(selector: vscode.DocumentSelector, provider: vscode.DocumentPasteEditProvider, metadata: vscode.DocumentPasteProviderMetadata): vscode.Disposable {
491
checkProposedApiEnabled(extension, 'documentPaste');
492
return extHostLanguageFeatures.registerDocumentPasteEditProvider(extension, checkSelector(selector), provider, metadata);
493
},
494
registerCodeLensProvider(selector: vscode.DocumentSelector, provider: vscode.CodeLensProvider): vscode.Disposable {
495
return extHostLanguageFeatures.registerCodeLensProvider(extension, checkSelector(selector), provider);
496
},
497
registerDefinitionProvider(selector: vscode.DocumentSelector, provider: vscode.DefinitionProvider): vscode.Disposable {
498
return extHostLanguageFeatures.registerDefinitionProvider(extension, checkSelector(selector), provider);
499
},
500
registerDeclarationProvider(selector: vscode.DocumentSelector, provider: vscode.DeclarationProvider): vscode.Disposable {
501
return extHostLanguageFeatures.registerDeclarationProvider(extension, checkSelector(selector), provider);
502
},
503
registerImplementationProvider(selector: vscode.DocumentSelector, provider: vscode.ImplementationProvider): vscode.Disposable {
504
return extHostLanguageFeatures.registerImplementationProvider(extension, checkSelector(selector), provider);
505
},
506
registerTypeDefinitionProvider(selector: vscode.DocumentSelector, provider: vscode.TypeDefinitionProvider): vscode.Disposable {
507
return extHostLanguageFeatures.registerTypeDefinitionProvider(extension, checkSelector(selector), provider);
508
},
509
registerHoverProvider(selector: vscode.DocumentSelector, provider: vscode.HoverProvider): vscode.Disposable {
510
return extHostLanguageFeatures.registerHoverProvider(extension, checkSelector(selector), provider, extension.identifier);
511
},
512
registerEvaluatableExpressionProvider(selector: vscode.DocumentSelector, provider: vscode.EvaluatableExpressionProvider): vscode.Disposable {
513
return extHostLanguageFeatures.registerEvaluatableExpressionProvider(extension, checkSelector(selector), provider, extension.identifier);
514
},
515
registerInlineValuesProvider(selector: vscode.DocumentSelector, provider: vscode.InlineValuesProvider): vscode.Disposable {
516
return extHostLanguageFeatures.registerInlineValuesProvider(extension, checkSelector(selector), provider, extension.identifier);
517
},
518
registerDocumentHighlightProvider(selector: vscode.DocumentSelector, provider: vscode.DocumentHighlightProvider): vscode.Disposable {
519
return extHostLanguageFeatures.registerDocumentHighlightProvider(extension, checkSelector(selector), provider);
520
},
521
registerLinkedEditingRangeProvider(selector: vscode.DocumentSelector, provider: vscode.LinkedEditingRangeProvider): vscode.Disposable {
522
return extHostLanguageFeatures.registerLinkedEditingRangeProvider(extension, checkSelector(selector), provider);
523
},
524
registerReferenceProvider(selector: vscode.DocumentSelector, provider: vscode.ReferenceProvider): vscode.Disposable {
525
return extHostLanguageFeatures.registerReferenceProvider(extension, checkSelector(selector), provider);
526
},
527
registerRenameProvider(selector: vscode.DocumentSelector, provider: vscode.RenameProvider): vscode.Disposable {
528
return extHostLanguageFeatures.registerRenameProvider(extension, checkSelector(selector), provider);
529
},
530
registerDocumentSymbolProvider(selector: vscode.DocumentSelector, provider: vscode.DocumentSymbolProvider, metadata?: vscode.DocumentSymbolProviderMetadata): vscode.Disposable {
531
return extHostLanguageFeatures.registerDocumentSymbolProvider(extension, checkSelector(selector), provider, metadata);
532
},
533
registerWorkspaceSymbolProvider(provider: vscode.WorkspaceSymbolProvider): vscode.Disposable {
534
return extHostLanguageFeatures.registerWorkspaceSymbolProvider(extension, provider);
535
},
536
registerDocumentFormattingEditProvider(selector: vscode.DocumentSelector, provider: vscode.DocumentFormattingEditProvider): vscode.Disposable {
537
return extHostLanguageFeatures.registerDocumentFormattingEditProvider(extension, checkSelector(selector), provider);
538
},
539
registerDocumentRangeFormattingEditProvider(selector: vscode.DocumentSelector, provider: vscode.DocumentRangeFormattingEditProvider): vscode.Disposable {
540
return extHostLanguageFeatures.registerDocumentRangeFormattingEditProvider(extension, checkSelector(selector), provider);
541
},
542
registerOnTypeFormattingEditProvider(selector: vscode.DocumentSelector, provider: vscode.OnTypeFormattingEditProvider, firstTriggerCharacter: string, ...moreTriggerCharacters: string[]): vscode.Disposable {
543
return extHostLanguageFeatures.registerOnTypeFormattingEditProvider(extension, checkSelector(selector), provider, [firstTriggerCharacter].concat(moreTriggerCharacters));
544
},
545
registerDocumentSemanticTokensProvider(selector: vscode.DocumentSelector, provider: vscode.DocumentSemanticTokensProvider, legend: vscode.SemanticTokensLegend): vscode.Disposable {
546
return extHostLanguageFeatures.registerDocumentSemanticTokensProvider(extension, checkSelector(selector), provider, legend);
547
},
548
registerDocumentRangeSemanticTokensProvider(selector: vscode.DocumentSelector, provider: vscode.DocumentRangeSemanticTokensProvider, legend: vscode.SemanticTokensLegend): vscode.Disposable {
549
return extHostLanguageFeatures.registerDocumentRangeSemanticTokensProvider(extension, checkSelector(selector), provider, legend);
550
},
551
registerSignatureHelpProvider(selector: vscode.DocumentSelector, provider: vscode.SignatureHelpProvider, firstItem?: string | vscode.SignatureHelpProviderMetadata, ...remaining: string[]): vscode.Disposable {
552
if (typeof firstItem === 'object') {
553
return extHostLanguageFeatures.registerSignatureHelpProvider(extension, checkSelector(selector), provider, firstItem);
554
}
555
return extHostLanguageFeatures.registerSignatureHelpProvider(extension, checkSelector(selector), provider, typeof firstItem === 'undefined' ? [] : [firstItem, ...remaining]);
556
},
557
registerCompletionItemProvider(selector: vscode.DocumentSelector, provider: vscode.CompletionItemProvider, ...triggerCharacters: string[]): vscode.Disposable {
558
return extHostLanguageFeatures.registerCompletionItemProvider(extension, checkSelector(selector), provider, triggerCharacters);
559
},
560
registerInlineCompletionItemProvider(selector: vscode.DocumentSelector, provider: vscode.InlineCompletionItemProvider): vscode.Disposable {
561
if (provider.handleDidShowCompletionItem) {
562
checkProposedApiEnabled(extension, 'inlineCompletionsAdditions');
563
}
564
if (provider.handleDidPartiallyAcceptCompletionItem) {
565
checkProposedApiEnabled(extension, 'inlineCompletionsAdditions');
566
}
567
return extHostLanguageFeatures.registerInlineCompletionsProvider(extension, checkSelector(selector), provider);
568
},
569
registerDocumentLinkProvider(selector: vscode.DocumentSelector, provider: vscode.DocumentLinkProvider): vscode.Disposable {
570
return extHostLanguageFeatures.registerDocumentLinkProvider(extension, checkSelector(selector), provider);
571
},
572
registerColorProvider(selector: vscode.DocumentSelector, provider: vscode.DocumentColorProvider): vscode.Disposable {
573
return extHostLanguageFeatures.registerColorProvider(extension, checkSelector(selector), provider);
574
},
575
registerFoldingRangeProvider(selector: vscode.DocumentSelector, provider: vscode.FoldingRangeProvider): vscode.Disposable {
576
return extHostLanguageFeatures.registerFoldingRangeProvider(extension, checkSelector(selector), provider);
577
},
578
registerSelectionRangeProvider(selector: vscode.DocumentSelector, provider: vscode.SelectionRangeProvider): vscode.Disposable {
579
return extHostLanguageFeatures.registerSelectionRangeProvider(extension, selector, provider);
580
},
581
registerCallHierarchyProvider(selector: vscode.DocumentSelector, provider: vscode.CallHierarchyProvider): vscode.Disposable {
582
return extHostLanguageFeatures.registerCallHierarchyProvider(extension, selector, provider);
583
},
584
registerTypeHierarchyProvider(selector: vscode.DocumentSelector, provider: vscode.TypeHierarchyProvider): vscode.Disposable {
585
return extHostLanguageFeatures.registerTypeHierarchyProvider(extension, selector, provider);
586
},
587
setLanguageConfiguration: (language: string, configuration: vscode.LanguageConfiguration): vscode.Disposable => {
588
return extHostLanguageFeatures.setLanguageConfiguration(extension, language, configuration);
589
},
590
getTokenInformationAtPosition(doc: vscode.TextDocument, pos: vscode.Position) {
591
checkProposedApiEnabled(extension, 'tokenInformation');
592
return extHostLanguages.tokenAtPosition(doc, pos);
593
},
594
registerInlayHintsProvider(selector: vscode.DocumentSelector, provider: vscode.InlayHintsProvider): vscode.Disposable {
595
return extHostLanguageFeatures.registerInlayHintsProvider(extension, selector, provider);
596
},
597
createLanguageStatusItem(id: string, selector: vscode.DocumentSelector): vscode.LanguageStatusItem {
598
return extHostLanguages.createLanguageStatusItem(extension, id, selector);
599
},
600
registerDocumentDropEditProvider(selector: vscode.DocumentSelector, provider: vscode.DocumentDropEditProvider): vscode.Disposable {
601
return extHostLanguageFeatures.registerDocumentOnDropEditProvider(extension, selector, provider);
602
}
603
};
604
605
// namespace: window
606
const window: typeof vscode.window = {
607
get activeTextEditor() {
608
return extHostEditors.getActiveTextEditor();
609
},
610
get visibleTextEditors() {
611
return extHostEditors.getVisibleTextEditors();
612
},
613
get activeTerminal() {
614
return extHostTerminalService.activeTerminal;
615
},
616
get terminals() {
617
return extHostTerminalService.terminals;
618
},
619
async showTextDocument(documentOrUri: vscode.TextDocument | vscode.Uri, columnOrOptions?: vscode.ViewColumn | vscode.TextDocumentShowOptions, preserveFocus?: boolean): Promise<vscode.TextEditor> {
620
const document = await (URI.isUri(documentOrUri)
621
? Promise.resolve(workspace.openTextDocument(documentOrUri))
622
: Promise.resolve(<vscode.TextDocument>documentOrUri));
623
624
return extHostEditors.showTextDocument(document, columnOrOptions, preserveFocus);
625
},
626
createTextEditorDecorationType(options: vscode.DecorationRenderOptions): vscode.TextEditorDecorationType {
627
return extHostEditors.createTextEditorDecorationType(extension, options);
628
},
629
onDidChangeActiveTextEditor(listener, thisArg?, disposables?) {
630
return extHostEditors.onDidChangeActiveTextEditor(listener, thisArg, disposables);
631
},
632
onDidChangeVisibleTextEditors(listener, thisArg, disposables) {
633
return extHostEditors.onDidChangeVisibleTextEditors(listener, thisArg, disposables);
634
},
635
onDidChangeTextEditorSelection(listener: (e: vscode.TextEditorSelectionChangeEvent) => any, thisArgs?: any, disposables?: extHostTypes.Disposable[]) {
636
return extHostEditors.onDidChangeTextEditorSelection(listener, thisArgs, disposables);
637
},
638
onDidChangeTextEditorOptions(listener: (e: vscode.TextEditorOptionsChangeEvent) => any, thisArgs?: any, disposables?: extHostTypes.Disposable[]) {
639
return extHostEditors.onDidChangeTextEditorOptions(listener, thisArgs, disposables);
640
},
641
onDidChangeTextEditorVisibleRanges(listener: (e: vscode.TextEditorVisibleRangesChangeEvent) => any, thisArgs?: any, disposables?: extHostTypes.Disposable[]) {
642
return extHostEditors.onDidChangeTextEditorVisibleRanges(listener, thisArgs, disposables);
643
},
644
onDidChangeTextEditorViewColumn(listener, thisArg?, disposables?) {
645
return extHostEditors.onDidChangeTextEditorViewColumn(listener, thisArg, disposables);
646
},
647
onDidCloseTerminal(listener, thisArg?, disposables?) {
648
return extHostTerminalService.onDidCloseTerminal(listener, thisArg, disposables);
649
},
650
onDidOpenTerminal(listener, thisArg?, disposables?) {
651
return extHostTerminalService.onDidOpenTerminal(listener, thisArg, disposables);
652
},
653
onDidChangeActiveTerminal(listener, thisArg?, disposables?) {
654
return extHostTerminalService.onDidChangeActiveTerminal(listener, thisArg, disposables);
655
},
656
onDidChangeTerminalDimensions(listener, thisArg?, disposables?) {
657
checkProposedApiEnabled(extension, 'terminalDimensions');
658
return extHostTerminalService.onDidChangeTerminalDimensions(listener, thisArg, disposables);
659
},
660
onDidChangeTerminalState(listener, thisArg?, disposables?) {
661
return extHostTerminalService.onDidChangeTerminalState(listener, thisArg, disposables);
662
},
663
onDidWriteTerminalData(listener, thisArg?, disposables?) {
664
checkProposedApiEnabled(extension, 'terminalDataWriteEvent');
665
return extHostTerminalService.onDidWriteTerminalData(listener, thisArg, disposables);
666
},
667
get state() {
668
return extHostWindow.state;
669
},
670
onDidChangeWindowState(listener, thisArg?, disposables?) {
671
return extHostWindow.onDidChangeWindowState(listener, thisArg, disposables);
672
},
673
showInformationMessage(message: string, ...rest: Array<vscode.MessageOptions | string | vscode.MessageItem>) {
674
return <Thenable<any>>extHostMessageService.showMessage(extension, Severity.Info, message, rest[0], <Array<string | vscode.MessageItem>>rest.slice(1));
675
},
676
showWarningMessage(message: string, ...rest: Array<vscode.MessageOptions | string | vscode.MessageItem>) {
677
return <Thenable<any>>extHostMessageService.showMessage(extension, Severity.Warning, message, rest[0], <Array<string | vscode.MessageItem>>rest.slice(1));
678
},
679
showErrorMessage(message: string, ...rest: Array<vscode.MessageOptions | string | vscode.MessageItem>) {
680
return <Thenable<any>>extHostMessageService.showMessage(extension, Severity.Error, message, rest[0], <Array<string | vscode.MessageItem>>rest.slice(1));
681
},
682
showQuickPick(items: any, options?: vscode.QuickPickOptions, token?: vscode.CancellationToken): any {
683
return extHostQuickOpen.showQuickPick(extension, items, options, token);
684
},
685
showWorkspaceFolderPick(options?: vscode.WorkspaceFolderPickOptions) {
686
return extHostQuickOpen.showWorkspaceFolderPick(options);
687
},
688
showInputBox(options?: vscode.InputBoxOptions, token?: vscode.CancellationToken) {
689
return extHostQuickOpen.showInput(options, token);
690
},
691
showOpenDialog(options) {
692
return extHostDialogs.showOpenDialog(extension, options);
693
},
694
showSaveDialog(options) {
695
return extHostDialogs.showSaveDialog(options);
696
},
697
createStatusBarItem(alignmentOrId?: vscode.StatusBarAlignment | string, priorityOrAlignment?: number | vscode.StatusBarAlignment, priorityArg?: number): vscode.StatusBarItem {
698
let id: string | undefined;
699
let alignment: number | undefined;
700
let priority: number | undefined;
701
702
if (typeof alignmentOrId === 'string') {
703
id = alignmentOrId;
704
alignment = priorityOrAlignment;
705
priority = priorityArg;
706
} else {
707
alignment = alignmentOrId;
708
priority = priorityOrAlignment;
709
}
710
711
return extHostStatusBar.createStatusBarEntry(extension, id, alignment, priority);
712
},
713
setStatusBarMessage(text: string, timeoutOrThenable?: number | Thenable<any>): vscode.Disposable {
714
return extHostStatusBar.setStatusBarMessage(text, timeoutOrThenable);
715
},
716
withScmProgress<R>(task: (progress: vscode.Progress<number>) => Thenable<R>) {
717
extHostApiDeprecation.report('window.withScmProgress', extension,
718
`Use 'withProgress' instead.`);
719
720
return extHostProgress.withProgress(extension, { location: extHostTypes.ProgressLocation.SourceControl }, (progress, token) => task({ report(n: number) { /*noop*/ } }));
721
},
722
withProgress<R>(options: vscode.ProgressOptions, task: (progress: vscode.Progress<{ message?: string; worked?: number }>, token: vscode.CancellationToken) => Thenable<R>) {
723
return extHostProgress.withProgress(extension, options, task);
724
},
725
createOutputChannel(name: string, options: string | { log: true } | undefined): any {
726
return extHostOutputService.createOutputChannel(name, options, extension);
727
},
728
createWebviewPanel(viewType: string, title: string, showOptions: vscode.ViewColumn | { viewColumn: vscode.ViewColumn; preserveFocus?: boolean }, options?: vscode.WebviewPanelOptions & vscode.WebviewOptions): vscode.WebviewPanel {
729
return extHostWebviewPanels.createWebviewPanel(extension, viewType, title, showOptions, options);
730
},
731
createWebviewTextEditorInset(editor: vscode.TextEditor, line: number, height: number, options?: vscode.WebviewOptions): vscode.WebviewEditorInset {
732
checkProposedApiEnabled(extension, 'editorInsets');
733
return extHostEditorInsets.createWebviewEditorInset(editor, line, height, options, extension);
734
},
735
createTerminal(nameOrOptions?: vscode.TerminalOptions | vscode.ExtensionTerminalOptions | string, shellPath?: string, shellArgs?: readonly string[] | string): vscode.Terminal {
736
if (typeof nameOrOptions === 'object') {
737
if ('pty' in nameOrOptions) {
738
return extHostTerminalService.createExtensionTerminal(nameOrOptions);
739
}
740
return extHostTerminalService.createTerminalFromOptions(nameOrOptions);
741
}
742
return extHostTerminalService.createTerminal(nameOrOptions, shellPath, shellArgs);
743
},
744
registerTerminalLinkProvider(provider: vscode.TerminalLinkProvider): vscode.Disposable {
745
return extHostTerminalService.registerLinkProvider(provider);
746
},
747
registerTerminalProfileProvider(id: string, provider: vscode.TerminalProfileProvider): vscode.Disposable {
748
return extHostTerminalService.registerProfileProvider(extension, id, provider);
749
},
750
registerTerminalQuickFixProvider(id: string, provider: vscode.TerminalQuickFixProvider): vscode.Disposable {
751
checkProposedApiEnabled(extension, 'terminalQuickFixProvider');
752
return extHostTerminalService.registerTerminalQuickFixProvider(id, extension.identifier.value, provider);
753
},
754
registerTreeDataProvider(viewId: string, treeDataProvider: vscode.TreeDataProvider<any>): vscode.Disposable {
755
return extHostTreeViews.registerTreeDataProvider(viewId, treeDataProvider, extension);
756
},
757
createTreeView(viewId: string, options: { treeDataProvider: vscode.TreeDataProvider<any> }): vscode.TreeView<any> {
758
return extHostTreeViews.createTreeView(viewId, options, extension);
759
},
760
registerWebviewPanelSerializer: (viewType: string, serializer: vscode.WebviewPanelSerializer) => {
761
return extHostWebviewPanels.registerWebviewPanelSerializer(extension, viewType, serializer);
762
},
763
registerCustomEditorProvider: (viewType: string, provider: vscode.CustomTextEditorProvider | vscode.CustomReadonlyEditorProvider, options: { webviewOptions?: vscode.WebviewPanelOptions; supportsMultipleEditorsPerDocument?: boolean } = {}) => {
764
return extHostCustomEditors.registerCustomEditorProvider(extension, viewType, provider, options);
765
},
766
registerFileDecorationProvider(provider: vscode.FileDecorationProvider) {
767
return extHostDecorations.registerFileDecorationProvider(provider, extension);
768
},
769
registerUriHandler(handler: vscode.UriHandler) {
770
return extHostUrls.registerUriHandler(extension.identifier, handler);
771
},
772
createQuickPick<T extends vscode.QuickPickItem>(): vscode.QuickPick<T> {
773
return extHostQuickOpen.createQuickPick(extension);
774
},
775
createInputBox(): vscode.InputBox {
776
return extHostQuickOpen.createInputBox(extension);
777
},
778
get activeColorTheme(): vscode.ColorTheme {
779
return extHostTheming.activeColorTheme;
780
},
781
onDidChangeActiveColorTheme(listener, thisArg?, disposables?) {
782
return extHostTheming.onDidChangeActiveColorTheme(listener, thisArg, disposables);
783
},
784
registerWebviewViewProvider(viewId: string, provider: vscode.WebviewViewProvider, options?: {
785
webviewOptions?: {
786
retainContextWhenHidden?: boolean;
787
};
788
}) {
789
return extHostWebviewViews.registerWebviewViewProvider(extension, viewId, provider, options?.webviewOptions);
790
},
791
get activeNotebookEditor(): vscode.NotebookEditor | undefined {
792
return extHostNotebook.activeNotebookEditor;
793
},
794
onDidChangeActiveNotebookEditor(listener, thisArgs?, disposables?) {
795
return extHostNotebook.onDidChangeActiveNotebookEditor(listener, thisArgs, disposables);
796
},
797
get visibleNotebookEditors() {
798
return extHostNotebook.visibleNotebookEditors;
799
},
800
get onDidChangeVisibleNotebookEditors() {
801
return extHostNotebook.onDidChangeVisibleNotebookEditors;
802
},
803
onDidChangeNotebookEditorSelection(listener, thisArgs?, disposables?) {
804
return extHostNotebookEditors.onDidChangeNotebookEditorSelection(listener, thisArgs, disposables);
805
},
806
onDidChangeNotebookEditorVisibleRanges(listener, thisArgs?, disposables?) {
807
return extHostNotebookEditors.onDidChangeNotebookEditorVisibleRanges(listener, thisArgs, disposables);
808
},
809
showNotebookDocument(document, options?) {
810
return extHostNotebook.showNotebookDocument(document, options);
811
},
812
registerExternalUriOpener(id: string, opener: vscode.ExternalUriOpener, metadata: vscode.ExternalUriOpenerMetadata) {
813
checkProposedApiEnabled(extension, 'externalUriOpener');
814
return extHostUriOpeners.registerExternalUriOpener(extension.identifier, id, opener, metadata);
815
},
816
registerProfileContentHandler(id: string, handler: vscode.ProfileContentHandler) {
817
checkProposedApiEnabled(extension, 'profileContentHandlers');
818
return extHostProfileContentHandlers.registrProfileContentHandler(extension, id, handler);
819
},
820
registerQuickDiffProvider(selector: vscode.DocumentSelector, quickDiffProvider: vscode.QuickDiffProvider, label: string, rootUri?: vscode.Uri): vscode.Disposable {
821
checkProposedApiEnabled(extension, 'quickDiffProvider');
822
return extHostQuickDiff.registerQuickDiffProvider(checkSelector(selector), quickDiffProvider, label, rootUri);
823
},
824
get tabGroups(): vscode.TabGroups {
825
return extHostEditorTabs.tabGroups;
826
}
827
};
828
829
// namespace: workspace
830
831
const workspace: typeof vscode.workspace = {
832
get rootPath() {
833
extHostApiDeprecation.report('workspace.rootPath', extension,
834
`Please use 'workspace.workspaceFolders' instead. More details: https://aka.ms/vscode-eliminating-rootpath`);
835
836
return extHostWorkspace.getPath();
837
},
838
set rootPath(value) {
839
throw errors.readonly();
840
},
841
getWorkspaceFolder(resource) {
842
return extHostWorkspace.getWorkspaceFolder(resource);
843
},
844
get workspaceFolders() {
845
return extHostWorkspace.getWorkspaceFolders();
846
},
847
get name() {
848
return extHostWorkspace.name;
849
},
850
set name(value) {
851
throw errors.readonly();
852
},
853
get workspaceFile() {
854
return extHostWorkspace.workspaceFile;
855
},
856
set workspaceFile(value) {
857
throw errors.readonly();
858
},
859
updateWorkspaceFolders: (index, deleteCount, ...workspaceFoldersToAdd) => {
860
return extHostWorkspace.updateWorkspaceFolders(extension, index, deleteCount || 0, ...workspaceFoldersToAdd);
861
},
862
onDidChangeWorkspaceFolders: function (listener, thisArgs?, disposables?) {
863
return extHostWorkspace.onDidChangeWorkspace(listener, thisArgs, disposables);
864
},
865
asRelativePath: (pathOrUri, includeWorkspace?) => {
866
return extHostWorkspace.getRelativePath(pathOrUri, includeWorkspace);
867
},
868
findFiles: (include, exclude, maxResults?, token?) => {
869
// Note, undefined/null have different meanings on "exclude"
870
return extHostWorkspace.findFiles(include, exclude, maxResults, extension.identifier, token);
871
},
872
findTextInFiles: (query: vscode.TextSearchQuery, optionsOrCallback: vscode.FindTextInFilesOptions | ((result: vscode.TextSearchResult) => void), callbackOrToken?: vscode.CancellationToken | ((result: vscode.TextSearchResult) => void), token?: vscode.CancellationToken) => {
873
checkProposedApiEnabled(extension, 'findTextInFiles');
874
let options: vscode.FindTextInFilesOptions;
875
let callback: (result: vscode.TextSearchResult) => void;
876
877
if (typeof optionsOrCallback === 'object') {
878
options = optionsOrCallback;
879
callback = callbackOrToken as (result: vscode.TextSearchResult) => void;
880
} else {
881
options = {};
882
callback = optionsOrCallback;
883
token = callbackOrToken as vscode.CancellationToken;
884
}
885
886
return extHostWorkspace.findTextInFiles(query, options || {}, callback, extension.identifier, token);
887
},
888
saveAll: (includeUntitled?) => {
889
return extHostWorkspace.saveAll(includeUntitled);
890
},
891
applyEdit(edit: vscode.WorkspaceEdit, metadata?: vscode.WorkspaceEditMetadata): Thenable<boolean> {
892
return extHostBulkEdits.applyWorkspaceEdit(edit, extension, metadata);
893
},
894
createFileSystemWatcher: (pattern, ignoreCreate, ignoreChange, ignoreDelete): vscode.FileSystemWatcher => {
895
return extHostFileSystemEvent.createFileSystemWatcher(extHostWorkspace, extension, pattern, ignoreCreate, ignoreChange, ignoreDelete);
896
},
897
get textDocuments() {
898
return extHostDocuments.getAllDocumentData().map(data => data.document);
899
},
900
set textDocuments(value) {
901
throw errors.readonly();
902
},
903
openTextDocument(uriOrFileNameOrOptions?: vscode.Uri | string | { language?: string; content?: string }) {
904
let uriPromise: Thenable<URI>;
905
906
const options = uriOrFileNameOrOptions as { language?: string; content?: string };
907
if (typeof uriOrFileNameOrOptions === 'string') {
908
uriPromise = Promise.resolve(URI.file(uriOrFileNameOrOptions));
909
} else if (URI.isUri(uriOrFileNameOrOptions)) {
910
uriPromise = Promise.resolve(uriOrFileNameOrOptions);
911
} else if (!options || typeof options === 'object') {
912
uriPromise = extHostDocuments.createDocumentData(options);
913
} else {
914
throw new Error('illegal argument - uriOrFileNameOrOptions');
915
}
916
917
return uriPromise.then(uri => {
918
return extHostDocuments.ensureDocumentData(uri).then(documentData => {
919
return documentData.document;
920
});
921
});
922
},
923
onDidOpenTextDocument: (listener, thisArgs?, disposables?) => {
924
return extHostDocuments.onDidAddDocument(listener, thisArgs, disposables);
925
},
926
onDidCloseTextDocument: (listener, thisArgs?, disposables?) => {
927
return extHostDocuments.onDidRemoveDocument(listener, thisArgs, disposables);
928
},
929
onDidChangeTextDocument: (listener, thisArgs?, disposables?) => {
930
return extHostDocuments.onDidChangeDocument(listener, thisArgs, disposables);
931
},
932
onDidSaveTextDocument: (listener, thisArgs?, disposables?) => {
933
return extHostDocuments.onDidSaveDocument(listener, thisArgs, disposables);
934
},
935
onWillSaveTextDocument: (listener, thisArgs?, disposables?) => {
936
return extHostDocumentSaveParticipant.getOnWillSaveTextDocumentEvent(extension)(listener, thisArgs, disposables);
937
},
938
get notebookDocuments(): vscode.NotebookDocument[] {
939
return extHostNotebook.notebookDocuments.map(d => d.apiNotebook);
940
},
941
async openNotebookDocument(uriOrType?: URI | string, content?: vscode.NotebookData) {
942
let uri: URI;
943
if (URI.isUri(uriOrType)) {
944
uri = uriOrType;
945
await extHostNotebook.openNotebookDocument(uriOrType);
946
} else if (typeof uriOrType === 'string') {
947
uri = URI.revive(await extHostNotebook.newNotebookDocument({ viewType: uriOrType, content }));
948
} else {
949
throw new Error('Invalid arguments');
950
}
951
return extHostNotebook.getNotebookDocument(uri).apiNotebook;
952
},
953
onDidSaveNotebookDocument(listener, thisArg, disposables) {
954
return extHostNotebookDocuments.onDidSaveNotebookDocument(listener, thisArg, disposables);
955
},
956
onDidChangeNotebookDocument(listener, thisArg, disposables) {
957
return extHostNotebookDocuments.onDidChangeNotebookDocument(listener, thisArg, disposables);
958
},
959
onWillSaveNotebookDocument(listener, thisArg, disposables) {
960
checkProposedApiEnabled(extension, 'notebookDocumentWillSave');
961
return extHostNotebookDocumentSaveParticipant.getOnWillSaveNotebookDocumentEvent(extension)(listener, thisArg, disposables);
962
},
963
get onDidOpenNotebookDocument(): Event<vscode.NotebookDocument> {
964
return extHostNotebook.onDidOpenNotebookDocument;
965
},
966
get onDidCloseNotebookDocument(): Event<vscode.NotebookDocument> {
967
return extHostNotebook.onDidCloseNotebookDocument;
968
},
969
registerNotebookSerializer(viewType: string, serializer: vscode.NotebookSerializer, options?: vscode.NotebookDocumentContentOptions, registration?: vscode.NotebookRegistrationData) {
970
return extHostNotebook.registerNotebookSerializer(extension, viewType, serializer, options, isProposedApiEnabled(extension, 'notebookLiveShare') ? registration : undefined);
971
},
972
onDidChangeConfiguration: (listener: (_: any) => any, thisArgs?: any, disposables?: extHostTypes.Disposable[]) => {
973
return configProvider.onDidChangeConfiguration(listener, thisArgs, disposables);
974
},
975
getConfiguration(section?: string, scope?: vscode.ConfigurationScope | null): vscode.WorkspaceConfiguration {
976
scope = arguments.length === 1 ? undefined : scope;
977
return configProvider.getConfiguration(section, scope, extension);
978
},
979
registerTextDocumentContentProvider(scheme: string, provider: vscode.TextDocumentContentProvider) {
980
return extHostDocumentContentProviders.registerTextDocumentContentProvider(scheme, provider);
981
},
982
registerTaskProvider: (type: string, provider: vscode.TaskProvider) => {
983
extHostApiDeprecation.report('window.registerTaskProvider', extension,
984
`Use the corresponding function on the 'tasks' namespace instead`);
985
986
return extHostTask.registerTaskProvider(extension, type, provider);
987
},
988
registerFileSystemProvider(scheme, provider, options) {
989
return combinedDisposable(
990
extHostFileSystem.registerFileSystemProvider(extension, scheme, provider, options),
991
extHostConsumerFileSystem.addFileSystemProvider(scheme, provider)
992
);
993
},
994
get fs() {
995
return extHostConsumerFileSystem.value;
996
},
997
registerFileSearchProvider: (scheme: string, provider: vscode.FileSearchProvider) => {
998
checkProposedApiEnabled(extension, 'fileSearchProvider');
999
return extHostSearch.registerFileSearchProvider(scheme, provider);
1000
},
1001
registerTextSearchProvider: (scheme: string, provider: vscode.TextSearchProvider) => {
1002
checkProposedApiEnabled(extension, 'textSearchProvider');
1003
return extHostSearch.registerTextSearchProvider(scheme, provider);
1004
},
1005
registerRemoteAuthorityResolver: (authorityPrefix: string, resolver: vscode.RemoteAuthorityResolver) => {
1006
checkProposedApiEnabled(extension, 'resolvers');
1007
return extensionService.registerRemoteAuthorityResolver(authorityPrefix, resolver);
1008
},
1009
registerResourceLabelFormatter: (formatter: vscode.ResourceLabelFormatter) => {
1010
checkProposedApiEnabled(extension, 'resolvers');
1011
return extHostLabelService.$registerResourceLabelFormatter(formatter);
1012
},
1013
onDidCreateFiles: (listener, thisArg, disposables) => {
1014
return extHostFileSystemEvent.onDidCreateFile(listener, thisArg, disposables);
1015
},
1016
onDidDeleteFiles: (listener, thisArg, disposables) => {
1017
return extHostFileSystemEvent.onDidDeleteFile(listener, thisArg, disposables);
1018
},
1019
onDidRenameFiles: (listener, thisArg, disposables) => {
1020
return extHostFileSystemEvent.onDidRenameFile(listener, thisArg, disposables);
1021
},
1022
onWillCreateFiles: (listener: (e: vscode.FileWillCreateEvent) => any, thisArg?: any, disposables?: vscode.Disposable[]) => {
1023
return extHostFileSystemEvent.getOnWillCreateFileEvent(extension)(listener, thisArg, disposables);
1024
},
1025
onWillDeleteFiles: (listener: (e: vscode.FileWillDeleteEvent) => any, thisArg?: any, disposables?: vscode.Disposable[]) => {
1026
return extHostFileSystemEvent.getOnWillDeleteFileEvent(extension)(listener, thisArg, disposables);
1027
},
1028
onWillRenameFiles: (listener: (e: vscode.FileWillRenameEvent) => any, thisArg?: any, disposables?: vscode.Disposable[]) => {
1029
return extHostFileSystemEvent.getOnWillRenameFileEvent(extension)(listener, thisArg, disposables);
1030
},
1031
openTunnel: (forward: vscode.TunnelOptions) => {
1032
checkProposedApiEnabled(extension, 'tunnels');
1033
return extHostTunnelService.openTunnel(extension, forward).then(value => {
1034
if (!value) {
1035
throw new Error('cannot open tunnel');
1036
}
1037
return value;
1038
});
1039
},
1040
get tunnels() {
1041
checkProposedApiEnabled(extension, 'tunnels');
1042
return extHostTunnelService.getTunnels();
1043
},
1044
onDidChangeTunnels: (listener, thisArg?, disposables?) => {
1045
checkProposedApiEnabled(extension, 'tunnels');
1046
return extHostTunnelService.onDidChangeTunnels(listener, thisArg, disposables);
1047
},
1048
registerPortAttributesProvider: (portSelector: { pid?: number; portRange?: [number, number]; commandMatcher?: RegExp }, provider: vscode.PortAttributesProvider) => {
1049
checkProposedApiEnabled(extension, 'portsAttributes');
1050
return extHostTunnelService.registerPortsAttributesProvider(portSelector, provider);
1051
},
1052
registerTimelineProvider: (scheme: string | string[], provider: vscode.TimelineProvider) => {
1053
checkProposedApiEnabled(extension, 'timeline');
1054
return extHostTimeline.registerTimelineProvider(scheme, provider, extension.identifier, extHostCommands.converter);
1055
},
1056
get isTrusted() {
1057
return extHostWorkspace.trusted;
1058
},
1059
requestWorkspaceTrust: (options?: vscode.WorkspaceTrustRequestOptions) => {
1060
checkProposedApiEnabled(extension, 'workspaceTrust');
1061
return extHostWorkspace.requestWorkspaceTrust(options);
1062
},
1063
onDidGrantWorkspaceTrust: (listener, thisArgs?, disposables?) => {
1064
return extHostWorkspace.onDidGrantWorkspaceTrust(listener, thisArgs, disposables);
1065
},
1066
registerEditSessionIdentityProvider: (scheme: string, provider: vscode.EditSessionIdentityProvider) => {
1067
checkProposedApiEnabled(extension, 'editSessionIdentityProvider');
1068
return extHostWorkspace.registerEditSessionIdentityProvider(scheme, provider);
1069
},
1070
onWillCreateEditSessionIdentity: (listener, thisArgs?, disposables?) => {
1071
checkProposedApiEnabled(extension, 'editSessionIdentityProvider');
1072
return extHostWorkspace.getOnWillCreateEditSessionIdentityEvent(extension)(listener, thisArgs, disposables);
1073
},
1074
};
1075
1076
// namespace: scm
1077
const scm: typeof vscode.scm = {
1078
get inputBox() {
1079
extHostApiDeprecation.report('scm.inputBox', extension,
1080
`Use 'SourceControl.inputBox' instead`);
1081
1082
return extHostSCM.getLastInputBox(extension)!; // Strict null override - Deprecated api
1083
},
1084
createSourceControl(id: string, label: string, rootUri?: vscode.Uri) {
1085
return extHostSCM.createSourceControl(extension, id, label, rootUri);
1086
}
1087
};
1088
1089
// namespace: comments
1090
const comments: typeof vscode.comments = {
1091
createCommentController(id: string, label: string) {
1092
return extHostComment.createCommentController(extension, id, label);
1093
}
1094
};
1095
1096
// namespace: debug
1097
const debug: typeof vscode.debug = {
1098
get activeDebugSession() {
1099
return extHostDebugService.activeDebugSession;
1100
},
1101
get activeDebugConsole() {
1102
return extHostDebugService.activeDebugConsole;
1103
},
1104
get breakpoints() {
1105
return extHostDebugService.breakpoints;
1106
},
1107
onDidStartDebugSession(listener, thisArg?, disposables?) {
1108
return extHostDebugService.onDidStartDebugSession(listener, thisArg, disposables);
1109
},
1110
onDidTerminateDebugSession(listener, thisArg?, disposables?) {
1111
return extHostDebugService.onDidTerminateDebugSession(listener, thisArg, disposables);
1112
},
1113
onDidChangeActiveDebugSession(listener, thisArg?, disposables?) {
1114
return extHostDebugService.onDidChangeActiveDebugSession(listener, thisArg, disposables);
1115
},
1116
onDidReceiveDebugSessionCustomEvent(listener, thisArg?, disposables?) {
1117
return extHostDebugService.onDidReceiveDebugSessionCustomEvent(listener, thisArg, disposables);
1118
},
1119
onDidChangeBreakpoints(listener, thisArgs?, disposables?) {
1120
return extHostDebugService.onDidChangeBreakpoints(listener, thisArgs, disposables);
1121
},
1122
registerDebugConfigurationProvider(debugType: string, provider: vscode.DebugConfigurationProvider, triggerKind?: vscode.DebugConfigurationProviderTriggerKind) {
1123
return extHostDebugService.registerDebugConfigurationProvider(debugType, provider, triggerKind || DebugConfigurationProviderTriggerKind.Initial);
1124
},
1125
registerDebugAdapterDescriptorFactory(debugType: string, factory: vscode.DebugAdapterDescriptorFactory) {
1126
return extHostDebugService.registerDebugAdapterDescriptorFactory(extension, debugType, factory);
1127
},
1128
registerDebugAdapterTrackerFactory(debugType: string, factory: vscode.DebugAdapterTrackerFactory) {
1129
return extHostDebugService.registerDebugAdapterTrackerFactory(debugType, factory);
1130
},
1131
startDebugging(folder: vscode.WorkspaceFolder | undefined, nameOrConfig: string | vscode.DebugConfiguration, parentSessionOrOptions?: vscode.DebugSession | vscode.DebugSessionOptions) {
1132
if (!parentSessionOrOptions || (typeof parentSessionOrOptions === 'object' && 'configuration' in parentSessionOrOptions)) {
1133
return extHostDebugService.startDebugging(folder, nameOrConfig, { parentSession: parentSessionOrOptions });
1134
}
1135
return extHostDebugService.startDebugging(folder, nameOrConfig, parentSessionOrOptions || {});
1136
},
1137
stopDebugging(session?: vscode.DebugSession) {
1138
return extHostDebugService.stopDebugging(session);
1139
},
1140
addBreakpoints(breakpoints: readonly vscode.Breakpoint[]) {
1141
return extHostDebugService.addBreakpoints(breakpoints);
1142
},
1143
removeBreakpoints(breakpoints: readonly vscode.Breakpoint[]) {
1144
return extHostDebugService.removeBreakpoints(breakpoints);
1145
},
1146
asDebugSourceUri(source: vscode.DebugProtocolSource, session?: vscode.DebugSession): vscode.Uri {
1147
return extHostDebugService.asDebugSourceUri(source, session);
1148
}
1149
};
1150
1151
const tasks: typeof vscode.tasks = {
1152
registerTaskProvider: (type: string, provider: vscode.TaskProvider) => {
1153
return extHostTask.registerTaskProvider(extension, type, provider);
1154
},
1155
fetchTasks: (filter?: vscode.TaskFilter): Thenable<vscode.Task[]> => {
1156
return extHostTask.fetchTasks(filter);
1157
},
1158
executeTask: (task: vscode.Task): Thenable<vscode.TaskExecution> => {
1159
return extHostTask.executeTask(extension, task);
1160
},
1161
get taskExecutions(): vscode.TaskExecution[] {
1162
return extHostTask.taskExecutions;
1163
},
1164
onDidStartTask: (listeners, thisArgs?, disposables?) => {
1165
return extHostTask.onDidStartTask(listeners, thisArgs, disposables);
1166
},
1167
onDidEndTask: (listeners, thisArgs?, disposables?) => {
1168
return extHostTask.onDidEndTask(listeners, thisArgs, disposables);
1169
},
1170
onDidStartTaskProcess: (listeners, thisArgs?, disposables?) => {
1171
return extHostTask.onDidStartTaskProcess(listeners, thisArgs, disposables);
1172
},
1173
onDidEndTaskProcess: (listeners, thisArgs?, disposables?) => {
1174
return extHostTask.onDidEndTaskProcess(listeners, thisArgs, disposables);
1175
}
1176
};
1177
1178
// namespace: notebook
1179
const notebooks: typeof vscode.notebooks = {
1180
newNotebookController(id: string, notebookType: string, label: string, handler?, rendererScripts?: vscode.NotebookRendererScript[]) {
1181
return extHostNotebookKernels.newNotebookController(extension, id, notebookType, label, handler, isProposedApiEnabled(extension, 'notebookMessaging') ? rendererScripts : undefined);
1182
},
1183
registerNotebookCellStatusBarItemProvider: (notebookType: string, provider: vscode.NotebookCellStatusBarItemProvider) => {
1184
return extHostNotebook.registerNotebookCellStatusBarItemProvider(extension, notebookType, provider);
1185
},
1186
createRendererMessaging(rendererId) {
1187
return extHostNotebookRenderers.createRendererMessaging(extension, rendererId);
1188
},
1189
newNotebookControllerDetectionTask(notebookType: string) {
1190
checkProposedApiEnabled(extension, 'notebookKernelSource');
1191
return extHostNotebookKernels.newNotebookControllerDetectionTask(extension, notebookType);
1192
},
1193
registerKernelSourceActionProvider(notebookType: string, provider: vscode.NotebookKernelSourceActionProvider) {
1194
checkProposedApiEnabled(extension, 'notebookKernelSource');
1195
return extHostNotebookKernels.registerKernelSourceActionProvider(extension, notebookType, provider);
1196
},
1197
onDidChangeNotebookCellExecutionState(listener, thisArgs?, disposables?) {
1198
checkProposedApiEnabled(extension, 'notebookCellExecutionState');
1199
return extHostNotebookKernels.onDidChangeNotebookCellExecutionState(listener, thisArgs, disposables);
1200
}
1201
};
1202
1203
// namespace: l10n
1204
const l10n: typeof vscode.l10n = {
1205
t(...params: [message: string, ...args: Array<string | number | boolean>] | [message: string, args: Record<string, any>] | [{ message: string; args?: Array<string | number | boolean> | Record<string, any>; comment: string | string[] }]): string {
1206
if (typeof params[0] === 'string') {
1207
const key = params.shift() as string;
1208
1209
// We have either rest args which are Array<string | number | boolean> or an array with a single Record<string, any>.
1210
// This ensures we get a Record<string | number, any> which will be formatted correctly.
1211
const argsFormatted = !params || typeof params[0] !== 'object' ? params : params[0];
1212
return extHostLocalization.getMessage(extension.identifier.value, { message: key, args: argsFormatted as Record<string | number, any> | undefined });
1213
}
1214
1215
return extHostLocalization.getMessage(extension.identifier.value, params[0]);
1216
},
1217
get bundle() {
1218
return extHostLocalization.getBundle(extension.identifier.value);
1219
},
1220
get uri() {
1221
return extHostLocalization.getBundleUri(extension.identifier.value);
1222
}
1223
};
1224
1225
// namespace: interactive
1226
const interactive: typeof vscode.interactive = {
1227
// IMPORTANT
1228
// this needs to be updated whenever the API proposal changes
1229
_version: 1,
1230
1231
registerInteractiveEditorSessionProvider(provider: vscode.InteractiveEditorSessionProvider) {
1232
checkProposedApiEnabled(extension, 'interactive');
1233
return extHostInteractiveEditor.registerProvider(extension, provider);
1234
},
1235
registerInteractiveSessionProvider(id: string, provider: vscode.InteractiveSessionProvider) {
1236
checkProposedApiEnabled(extension, 'interactive');
1237
return extHostInteractiveSession.registerInteractiveSessionProvider(extension, id, provider);
1238
},
1239
addInteractiveRequest(context: vscode.InteractiveSessionRequestArgs) {
1240
checkProposedApiEnabled(extension, 'interactive');
1241
return extHostInteractiveSession.addInteractiveSessionRequest(context);
1242
},
1243
sendInteractiveRequestToProvider(providerId: string, message: vscode.InteractiveSessionDynamicRequest) {
1244
checkProposedApiEnabled(extension, 'interactive');
1245
return extHostInteractiveSession.sendInteractiveRequestToProvider(providerId, message);
1246
},
1247
get onDidPerformUserAction() {
1248
return extHostInteractiveSession.onDidPerformUserAction;
1249
}
1250
};
1251
1252
return <typeof vscode>{
1253
version: initData.version,
1254
// namespaces
1255
authentication,
1256
commands,
1257
comments,
1258
debug,
1259
env,
1260
extensions,
1261
interactive,
1262
l10n,
1263
languages,
1264
notebooks,
1265
scm,
1266
tasks,
1267
tests,
1268
window,
1269
workspace,
1270
// types
1271
Breakpoint: extHostTypes.Breakpoint,
1272
TerminalOutputAnchor: extHostTypes.TerminalOutputAnchor,
1273
CallHierarchyIncomingCall: extHostTypes.CallHierarchyIncomingCall,
1274
CallHierarchyItem: extHostTypes.CallHierarchyItem,
1275
CallHierarchyOutgoingCall: extHostTypes.CallHierarchyOutgoingCall,
1276
CancellationError: errors.CancellationError,
1277
CancellationTokenSource: CancellationTokenSource,
1278
CandidatePortSource: CandidatePortSource,
1279
CodeAction: extHostTypes.CodeAction,
1280
CodeActionKind: extHostTypes.CodeActionKind,
1281
CodeActionTriggerKind: extHostTypes.CodeActionTriggerKind,
1282
CodeLens: extHostTypes.CodeLens,
1283
Color: extHostTypes.Color,
1284
ColorInformation: extHostTypes.ColorInformation,
1285
ColorPresentation: extHostTypes.ColorPresentation,
1286
ColorThemeKind: extHostTypes.ColorThemeKind,
1287
CommentMode: extHostTypes.CommentMode,
1288
CommentThreadCollapsibleState: extHostTypes.CommentThreadCollapsibleState,
1289
CommentThreadState: extHostTypes.CommentThreadState,
1290
CompletionItem: extHostTypes.CompletionItem,
1291
CompletionItemKind: extHostTypes.CompletionItemKind,
1292
CompletionItemTag: extHostTypes.CompletionItemTag,
1293
CompletionList: extHostTypes.CompletionList,
1294
CompletionTriggerKind: extHostTypes.CompletionTriggerKind,
1295
ConfigurationTarget: extHostTypes.ConfigurationTarget,
1296
CustomExecution: extHostTypes.CustomExecution,
1297
DebugAdapterExecutable: extHostTypes.DebugAdapterExecutable,
1298
DebugAdapterInlineImplementation: extHostTypes.DebugAdapterInlineImplementation,
1299
DebugAdapterNamedPipeServer: extHostTypes.DebugAdapterNamedPipeServer,
1300
DebugAdapterServer: extHostTypes.DebugAdapterServer,
1301
DebugConfigurationProviderTriggerKind: DebugConfigurationProviderTriggerKind,
1302
DebugConsoleMode: extHostTypes.DebugConsoleMode,
1303
DecorationRangeBehavior: extHostTypes.DecorationRangeBehavior,
1304
Diagnostic: extHostTypes.Diagnostic,
1305
DiagnosticRelatedInformation: extHostTypes.DiagnosticRelatedInformation,
1306
DiagnosticSeverity: extHostTypes.DiagnosticSeverity,
1307
DiagnosticTag: extHostTypes.DiagnosticTag,
1308
Disposable: extHostTypes.Disposable,
1309
DocumentHighlight: extHostTypes.DocumentHighlight,
1310
DocumentHighlightKind: extHostTypes.DocumentHighlightKind,
1311
DocumentLink: extHostTypes.DocumentLink,
1312
DocumentSymbol: extHostTypes.DocumentSymbol,
1313
EndOfLine: extHostTypes.EndOfLine,
1314
EnvironmentVariableMutatorType: extHostTypes.EnvironmentVariableMutatorType,
1315
EvaluatableExpression: extHostTypes.EvaluatableExpression,
1316
InlineValueText: extHostTypes.InlineValueText,
1317
InlineValueVariableLookup: extHostTypes.InlineValueVariableLookup,
1318
InlineValueEvaluatableExpression: extHostTypes.InlineValueEvaluatableExpression,
1319
InlineCompletionTriggerKind: extHostTypes.InlineCompletionTriggerKind,
1320
EventEmitter: Emitter,
1321
ExtensionKind: extHostTypes.ExtensionKind,
1322
ExtensionMode: extHostTypes.ExtensionMode,
1323
ExternalUriOpenerPriority: extHostTypes.ExternalUriOpenerPriority,
1324
FileChangeType: extHostTypes.FileChangeType,
1325
FileDecoration: extHostTypes.FileDecoration,
1326
FileDecoration2: extHostTypes.FileDecoration,
1327
FileSystemError: extHostTypes.FileSystemError,
1328
FileType: files.FileType,
1329
FilePermission: files.FilePermission,
1330
FoldingRange: extHostTypes.FoldingRange,
1331
FoldingRangeKind: extHostTypes.FoldingRangeKind,
1332
FunctionBreakpoint: extHostTypes.FunctionBreakpoint,
1333
InlineCompletionItem: extHostTypes.InlineSuggestion,
1334
InlineCompletionList: extHostTypes.InlineSuggestionList,
1335
Hover: extHostTypes.Hover,
1336
IndentAction: languageConfiguration.IndentAction,
1337
Location: extHostTypes.Location,
1338
MarkdownString: extHostTypes.MarkdownString,
1339
OverviewRulerLane: OverviewRulerLane,
1340
ParameterInformation: extHostTypes.ParameterInformation,
1341
PortAutoForwardAction: extHostTypes.PortAutoForwardAction,
1342
Position: extHostTypes.Position,
1343
ProcessExecution: extHostTypes.ProcessExecution,
1344
ProgressLocation: extHostTypes.ProgressLocation,
1345
QuickInputButtons: extHostTypes.QuickInputButtons,
1346
Range: extHostTypes.Range,
1347
RelativePattern: extHostTypes.RelativePattern,
1348
Selection: extHostTypes.Selection,
1349
SelectionRange: extHostTypes.SelectionRange,
1350
SemanticTokens: extHostTypes.SemanticTokens,
1351
SemanticTokensBuilder: extHostTypes.SemanticTokensBuilder,
1352
SemanticTokensEdit: extHostTypes.SemanticTokensEdit,
1353
SemanticTokensEdits: extHostTypes.SemanticTokensEdits,
1354
SemanticTokensLegend: extHostTypes.SemanticTokensLegend,
1355
ShellExecution: extHostTypes.ShellExecution,
1356
ShellQuoting: extHostTypes.ShellQuoting,
1357
SignatureHelp: extHostTypes.SignatureHelp,
1358
SignatureHelpTriggerKind: extHostTypes.SignatureHelpTriggerKind,
1359
SignatureInformation: extHostTypes.SignatureInformation,
1360
SnippetString: extHostTypes.SnippetString,
1361
SourceBreakpoint: extHostTypes.SourceBreakpoint,
1362
StandardTokenType: extHostTypes.StandardTokenType,
1363
StatusBarAlignment: extHostTypes.StatusBarAlignment,
1364
SymbolInformation: extHostTypes.SymbolInformation,
1365
SymbolKind: extHostTypes.SymbolKind,
1366
SymbolTag: extHostTypes.SymbolTag,
1367
Task: extHostTypes.Task,
1368
TaskGroup: extHostTypes.TaskGroup,
1369
TaskPanelKind: extHostTypes.TaskPanelKind,
1370
TaskRevealKind: extHostTypes.TaskRevealKind,
1371
TaskScope: extHostTypes.TaskScope,
1372
TerminalLink: extHostTypes.TerminalLink,
1373
TerminalQuickFixCommand: extHostTypes.TerminalQuickFixCommand,
1374
TerminalQuickFixOpener: extHostTypes.TerminalQuickFixOpener,
1375
TerminalLocation: extHostTypes.TerminalLocation,
1376
TerminalProfile: extHostTypes.TerminalProfile,
1377
TerminalExitReason: extHostTypes.TerminalExitReason,
1378
TerminalQuickFixType: extHostTypes.TerminalQuickFixType,
1379
TextDocumentSaveReason: extHostTypes.TextDocumentSaveReason,
1380
TextEdit: extHostTypes.TextEdit,
1381
SnippetTextEdit: extHostTypes.SnippetTextEdit,
1382
TextEditorCursorStyle: TextEditorCursorStyle,
1383
TextEditorLineNumbersStyle: extHostTypes.TextEditorLineNumbersStyle,
1384
TextEditorRevealType: extHostTypes.TextEditorRevealType,
1385
TextEditorSelectionChangeKind: extHostTypes.TextEditorSelectionChangeKind,
1386
TextDocumentChangeReason: extHostTypes.TextDocumentChangeReason,
1387
ThemeColor: extHostTypes.ThemeColor,
1388
ThemeIcon: extHostTypes.ThemeIcon,
1389
TreeItem: extHostTypes.TreeItem,
1390
TreeItem2: extHostTypes.TreeItem,
1391
TreeItemCheckboxState: extHostTypes.TreeItemCheckboxState,
1392
TreeItemCollapsibleState: extHostTypes.TreeItemCollapsibleState,
1393
TypeHierarchyItem: extHostTypes.TypeHierarchyItem,
1394
UIKind: UIKind,
1395
Uri: URI,
1396
ViewColumn: extHostTypes.ViewColumn,
1397
WorkspaceEdit: extHostTypes.WorkspaceEdit,
1398
// proposed api types
1399
DocumentDropEdit: extHostTypes.DocumentDropEdit,
1400
DocumentPasteEdit: extHostTypes.DocumentPasteEdit,
1401
InlayHint: extHostTypes.InlayHint,
1402
InlayHintLabelPart: extHostTypes.InlayHintLabelPart,
1403
InlayHintKind: extHostTypes.InlayHintKind,
1404
RemoteAuthorityResolverError: extHostTypes.RemoteAuthorityResolverError,
1405
ResolvedAuthority: extHostTypes.ResolvedAuthority,
1406
SourceControlInputBoxValidationType: extHostTypes.SourceControlInputBoxValidationType,
1407
ExtensionRuntime: extHostTypes.ExtensionRuntime,
1408
TimelineItem: extHostTypes.TimelineItem,
1409
NotebookRange: extHostTypes.NotebookRange,
1410
NotebookCellKind: extHostTypes.NotebookCellKind,
1411
NotebookCellExecutionState: extHostTypes.NotebookCellExecutionState,
1412
NotebookCellData: extHostTypes.NotebookCellData,
1413
NotebookData: extHostTypes.NotebookData,
1414
NotebookRendererScript: extHostTypes.NotebookRendererScript,
1415
NotebookCellStatusBarAlignment: extHostTypes.NotebookCellStatusBarAlignment,
1416
NotebookEditorRevealType: extHostTypes.NotebookEditorRevealType,
1417
NotebookCellOutput: extHostTypes.NotebookCellOutput,
1418
NotebookCellOutputItem: extHostTypes.NotebookCellOutputItem,
1419
NotebookCellStatusBarItem: extHostTypes.NotebookCellStatusBarItem,
1420
NotebookControllerAffinity: extHostTypes.NotebookControllerAffinity,
1421
NotebookControllerAffinity2: extHostTypes.NotebookControllerAffinity2,
1422
NotebookDocumentSaveReason: extHostTypes.NotebookDocumentSaveReason,
1423
NotebookEdit: extHostTypes.NotebookEdit,
1424
NotebookKernelSourceAction: extHostTypes.NotebookKernelSourceAction,
1425
PortAttributes: extHostTypes.PortAttributes,
1426
LinkedEditingRanges: extHostTypes.LinkedEditingRanges,
1427
TestResultState: extHostTypes.TestResultState,
1428
TestRunRequest: extHostTypes.TestRunRequest,
1429
TestRunRequest2: extHostTypes.TestRunRequest2,
1430
TestMessage: extHostTypes.TestMessage,
1431
TestTag: extHostTypes.TestTag,
1432
TestRunProfileKind: extHostTypes.TestRunProfileKind,
1433
TextSearchCompleteMessageType: TextSearchCompleteMessageType,
1434
DataTransfer: extHostTypes.DataTransfer,
1435
DataTransferItem: extHostTypes.DataTransferItem,
1436
CoveredCount: extHostTypes.CoveredCount,
1437
FileCoverage: extHostTypes.FileCoverage,
1438
StatementCoverage: extHostTypes.StatementCoverage,
1439
BranchCoverage: extHostTypes.BranchCoverage,
1440
FunctionCoverage: extHostTypes.FunctionCoverage,
1441
WorkspaceTrustState: extHostTypes.WorkspaceTrustState,
1442
LanguageStatusSeverity: extHostTypes.LanguageStatusSeverity,
1443
QuickPickItemKind: extHostTypes.QuickPickItemKind,
1444
InputBoxValidationSeverity: extHostTypes.InputBoxValidationSeverity,
1445
TabInputText: extHostTypes.TextTabInput,
1446
TabInputTextDiff: extHostTypes.TextDiffTabInput,
1447
TabInputTextMerge: extHostTypes.TextMergeTabInput,
1448
TabInputCustom: extHostTypes.CustomEditorTabInput,
1449
TabInputNotebook: extHostTypes.NotebookEditorTabInput,
1450
TabInputNotebookDiff: extHostTypes.NotebookDiffEditorTabInput,
1451
TabInputWebview: extHostTypes.WebviewEditorTabInput,
1452
TabInputTerminal: extHostTypes.TerminalEditorTabInput,
1453
TabInputInteractiveWindow: extHostTypes.InteractiveWindowInput,
1454
TelemetryTrustedValue: TelemetryTrustedValue,
1455
LogLevel: LogLevel,
1456
EditSessionIdentityMatch: EditSessionIdentityMatch,
1457
InteractiveSessionVoteDirection: extHostTypes.InteractiveSessionVoteDirection,
1458
InteractiveSessionCopyKind: extHostTypes.InteractiveSessionCopyKind,
1459
};
1460
};
1461
}
1462
1463