Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
microsoft
GitHub Repository: microsoft/vscode
Path: blob/main/src/vs/workbench/api/common/extHost.api.impl.ts
5236 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 type * as vscode from 'vscode';
7
import { CancellationTokenSource } from '../../../base/common/cancellation.js';
8
import * as errors from '../../../base/common/errors.js';
9
import { Emitter, Event } from '../../../base/common/event.js';
10
import { combinedDisposable } from '../../../base/common/lifecycle.js';
11
import { Schemas, matchesScheme } from '../../../base/common/network.js';
12
import Severity from '../../../base/common/severity.js';
13
import { URI } from '../../../base/common/uri.js';
14
import { TextEditorCursorStyle } from '../../../editor/common/config/editorOptions.js';
15
import { score, targetsNotebooks } from '../../../editor/common/languageSelector.js';
16
import * as languageConfiguration from '../../../editor/common/languages/languageConfiguration.js';
17
import { OverviewRulerLane } from '../../../editor/common/model.js';
18
import { ExtensionError, ExtensionIdentifierSet, IExtensionDescription } from '../../../platform/extensions/common/extensions.js';
19
import * as files from '../../../platform/files/common/files.js';
20
import { ServicesAccessor } from '../../../platform/instantiation/common/instantiation.js';
21
import { ILogService, ILoggerService, LogLevel } from '../../../platform/log/common/log.js';
22
import { getRemoteName } from '../../../platform/remote/common/remoteHosts.js';
23
import { TelemetryTrustedValue } from '../../../platform/telemetry/common/telemetryUtils.js';
24
import { EditSessionIdentityMatch } from '../../../platform/workspace/common/editSessions.js';
25
import { DebugConfigurationProviderTriggerKind } from '../../contrib/debug/common/debug.js';
26
import { PromptsType } from '../../contrib/chat/common/promptSyntax/promptTypes.js';
27
import { ExtensionDescriptionRegistry } from '../../services/extensions/common/extensionDescriptionRegistry.js';
28
import { UIKind } from '../../services/extensions/common/extensionHostProtocol.js';
29
import { checkProposedApiEnabled, isProposedApiEnabled } from '../../services/extensions/common/extensions.js';
30
import { ProxyIdentifier } from '../../services/extensions/common/proxyIdentifier.js';
31
import { AISearchKeyword, ExcludeSettingOptions, TextSearchCompleteMessageType, TextSearchContext2, TextSearchMatch2 } from '../../services/search/common/searchExtTypes.js';
32
import { CandidatePortSource, ExtHostContext, ExtHostLogLevelServiceShape, MainContext } from './extHost.protocol.js';
33
import { ExtHostRelatedInformation } from './extHostAiRelatedInformation.js';
34
import { ExtHostAiSettingsSearch } from './extHostAiSettingsSearch.js';
35
import { ExtHostApiCommands } from './extHostApiCommands.js';
36
import { IExtHostApiDeprecationService } from './extHostApiDeprecationService.js';
37
import { IExtHostAuthentication } from './extHostAuthentication.js';
38
import { ExtHostBulkEdits } from './extHostBulkEdits.js';
39
import { ExtHostChatAgents2 } from './extHostChatAgents2.js';
40
import { ExtHostChatOutputRenderer } from './extHostChatOutputRenderer.js';
41
import { ExtHostChatSessions } from './extHostChatSessions.js';
42
import { ExtHostChatStatus } from './extHostChatStatus.js';
43
import { ExtHostClipboard } from './extHostClipboard.js';
44
import { ExtHostEditorInsets } from './extHostCodeInsets.js';
45
import { ExtHostCodeMapper } from './extHostCodeMapper.js';
46
import { IExtHostCommands } from './extHostCommands.js';
47
import { createExtHostComments } from './extHostComments.js';
48
import { ExtHostConfigProvider, IExtHostConfiguration } from './extHostConfiguration.js';
49
import { ExtHostCustomEditors } from './extHostCustomEditors.js';
50
import { IExtHostDataChannels } from './extHostDataChannels.js';
51
import { IExtHostDebugService } from './extHostDebugService.js';
52
import { IExtHostDecorations } from './extHostDecorations.js';
53
import { ExtHostDiagnostics } from './extHostDiagnostics.js';
54
import { ExtHostDialogs } from './extHostDialogs.js';
55
import { ExtHostDocumentContentProvider } from './extHostDocumentContentProviders.js';
56
import { ExtHostDocumentSaveParticipant } from './extHostDocumentSaveParticipant.js';
57
import { ExtHostDocuments } from './extHostDocuments.js';
58
import { IExtHostDocumentsAndEditors } from './extHostDocumentsAndEditors.js';
59
import { IExtHostEditorTabs } from './extHostEditorTabs.js';
60
import { ExtHostEmbeddings } from './extHostEmbedding.js';
61
import { ExtHostAiEmbeddingVector } from './extHostEmbeddingVector.js';
62
import { Extension, IExtHostExtensionService } from './extHostExtensionService.js';
63
import { ExtHostFileSystem } from './extHostFileSystem.js';
64
import { IExtHostConsumerFileSystem } from './extHostFileSystemConsumer.js';
65
import { ExtHostFileSystemEventService, FileSystemWatcherCreateOptions } from './extHostFileSystemEventService.js';
66
import { IExtHostFileSystemInfo } from './extHostFileSystemInfo.js';
67
import { IExtHostInitDataService } from './extHostInitDataService.js';
68
import { IExtHostHooks } from './extHostHooks.js';
69
import { ExtHostInteractive } from './extHostInteractive.js';
70
import { ExtHostLabelService } from './extHostLabelService.js';
71
import { ExtHostLanguageFeatures } from './extHostLanguageFeatures.js';
72
import { ExtHostLanguageModelTools } from './extHostLanguageModelTools.js';
73
import { IExtHostLanguageModels } from './extHostLanguageModels.js';
74
import { ExtHostLanguages } from './extHostLanguages.js';
75
import { IExtHostLocalizationService } from './extHostLocalizationService.js';
76
import { IExtHostManagedSockets } from './extHostManagedSockets.js';
77
import { IExtHostMpcService } from './extHostMcp.js';
78
import { ExtHostMessageService } from './extHostMessageService.js';
79
import { ExtHostNotebookController } from './extHostNotebook.js';
80
import { ExtHostNotebookDocumentSaveParticipant } from './extHostNotebookDocumentSaveParticipant.js';
81
import { ExtHostNotebookDocuments } from './extHostNotebookDocuments.js';
82
import { ExtHostNotebookEditors } from './extHostNotebookEditors.js';
83
import { ExtHostNotebookKernels } from './extHostNotebookKernels.js';
84
import { ExtHostNotebookRenderers } from './extHostNotebookRenderers.js';
85
import { IExtHostOutputService } from './extHostOutput.js';
86
import { ExtHostProfileContentHandlers } from './extHostProfileContentHandler.js';
87
import { IExtHostProgress } from './extHostProgress.js';
88
import { ExtHostQuickDiff } from './extHostQuickDiff.js';
89
import { createExtHostQuickOpen } from './extHostQuickOpen.js';
90
import { IExtHostRpcService } from './extHostRpcService.js';
91
import { ExtHostSCM } from './extHostSCM.js';
92
import { IExtHostSearch } from './extHostSearch.js';
93
import { IExtHostSecretState } from './extHostSecretState.js';
94
import { ExtHostShare } from './extHostShare.js';
95
import { ExtHostSpeech } from './extHostSpeech.js';
96
import { ExtHostStatusBar } from './extHostStatusBar.js';
97
import { IExtHostStorage } from './extHostStorage.js';
98
import { IExtensionStoragePaths } from './extHostStoragePaths.js';
99
import { IExtHostTask } from './extHostTask.js';
100
import { ExtHostTelemetryLogger, IExtHostTelemetry, isNewAppInstall } from './extHostTelemetry.js';
101
import { IExtHostTerminalService } from './extHostTerminalService.js';
102
import { IExtHostTerminalShellIntegration } from './extHostTerminalShellIntegration.js';
103
import { IExtHostTesting } from './extHostTesting.js';
104
import { ExtHostEditors } from './extHostTextEditors.js';
105
import { ExtHostTheming } from './extHostTheming.js';
106
import { ExtHostTimeline } from './extHostTimeline.js';
107
import { ExtHostTreeViews } from './extHostTreeViews.js';
108
import { IExtHostTunnelService } from './extHostTunnelService.js';
109
import * as typeConverters from './extHostTypeConverters.js';
110
import * as extHostTypes from './extHostTypes.js';
111
import { ExtHostUriOpeners } from './extHostUriOpener.js';
112
import { IURITransformerService } from './extHostUriTransformerService.js';
113
import { IExtHostUrlsService } from './extHostUrls.js';
114
import { ExtHostWebviews } from './extHostWebview.js';
115
import { ExtHostWebviewPanels } from './extHostWebviewPanels.js';
116
import { ExtHostWebviewViews } from './extHostWebviewView.js';
117
import { IExtHostWindow } from './extHostWindow.js';
118
import { IExtHostPower } from './extHostPower.js';
119
import { IExtHostWorkspace } from './extHostWorkspace.js';
120
import { ExtHostChatContext } from './extHostChatContext.js';
121
import { IExtHostMeteredConnection } from './extHostMeteredConnection.js';
122
123
export interface IExtensionRegistries {
124
mine: ExtensionDescriptionRegistry;
125
all: ExtensionDescriptionRegistry;
126
}
127
128
export interface IExtensionApiFactory {
129
(extension: IExtensionDescription, extensionInfo: IExtensionRegistries, configProvider: ExtHostConfigProvider): typeof vscode;
130
}
131
132
/**
133
* This method instantiates and returns the extension API surface
134
*/
135
export function createApiFactoryAndRegisterActors(accessor: ServicesAccessor): IExtensionApiFactory {
136
137
// services
138
const initData = accessor.get(IExtHostInitDataService);
139
const extHostFileSystemInfo = accessor.get(IExtHostFileSystemInfo);
140
const extHostConsumerFileSystem = accessor.get(IExtHostConsumerFileSystem);
141
const extensionService = accessor.get(IExtHostExtensionService);
142
const extHostWorkspace = accessor.get(IExtHostWorkspace);
143
const extHostTelemetry = accessor.get(IExtHostTelemetry);
144
const extHostConfiguration = accessor.get(IExtHostConfiguration);
145
const uriTransformer = accessor.get(IURITransformerService);
146
const rpcProtocol = accessor.get(IExtHostRpcService);
147
const extHostStorage = accessor.get(IExtHostStorage);
148
const extensionStoragePaths = accessor.get(IExtensionStoragePaths);
149
const extHostLoggerService = accessor.get(ILoggerService);
150
const extHostLogService = accessor.get(ILogService);
151
const extHostTunnelService = accessor.get(IExtHostTunnelService);
152
const extHostApiDeprecation = accessor.get(IExtHostApiDeprecationService);
153
const extHostWindow = accessor.get(IExtHostWindow);
154
const extHostPower = accessor.get(IExtHostPower);
155
const extHostUrls = accessor.get(IExtHostUrlsService);
156
const extHostSecretState = accessor.get(IExtHostSecretState);
157
const extHostEditorTabs = accessor.get(IExtHostEditorTabs);
158
const extHostManagedSockets = accessor.get(IExtHostManagedSockets);
159
const extHostProgress = accessor.get(IExtHostProgress);
160
const extHostAuthentication = accessor.get(IExtHostAuthentication);
161
const extHostLanguageModels = accessor.get(IExtHostLanguageModels);
162
const extHostMcp = accessor.get(IExtHostMpcService);
163
const extHostDataChannels = accessor.get(IExtHostDataChannels);
164
const extHostMeteredConnection = accessor.get(IExtHostMeteredConnection);
165
166
// register addressable instances
167
rpcProtocol.set(ExtHostContext.ExtHostFileSystemInfo, extHostFileSystemInfo);
168
// eslint-disable-next-line local/code-no-any-casts
169
rpcProtocol.set(ExtHostContext.ExtHostLogLevelServiceShape, <ExtHostLogLevelServiceShape><any>extHostLoggerService);
170
rpcProtocol.set(ExtHostContext.ExtHostWorkspace, extHostWorkspace);
171
rpcProtocol.set(ExtHostContext.ExtHostConfiguration, extHostConfiguration);
172
rpcProtocol.set(ExtHostContext.ExtHostExtensionService, extensionService);
173
rpcProtocol.set(ExtHostContext.ExtHostStorage, extHostStorage);
174
rpcProtocol.set(ExtHostContext.ExtHostTunnelService, extHostTunnelService);
175
rpcProtocol.set(ExtHostContext.ExtHostWindow, extHostWindow);
176
rpcProtocol.set(ExtHostContext.ExtHostPower, extHostPower);
177
rpcProtocol.set(ExtHostContext.ExtHostUrls, extHostUrls);
178
rpcProtocol.set(ExtHostContext.ExtHostSecretState, extHostSecretState);
179
rpcProtocol.set(ExtHostContext.ExtHostTelemetry, extHostTelemetry);
180
rpcProtocol.set(ExtHostContext.ExtHostEditorTabs, extHostEditorTabs);
181
rpcProtocol.set(ExtHostContext.ExtHostManagedSockets, extHostManagedSockets);
182
rpcProtocol.set(ExtHostContext.ExtHostProgress, extHostProgress);
183
rpcProtocol.set(ExtHostContext.ExtHostAuthentication, extHostAuthentication);
184
rpcProtocol.set(ExtHostContext.ExtHostChatProvider, extHostLanguageModels);
185
rpcProtocol.set(ExtHostContext.ExtHostDataChannels, extHostDataChannels);
186
rpcProtocol.set(ExtHostContext.ExtHostMeteredConnection, extHostMeteredConnection);
187
188
// automatically create and register addressable instances
189
const extHostDecorations = rpcProtocol.set(ExtHostContext.ExtHostDecorations, accessor.get(IExtHostDecorations));
190
const extHostDocumentsAndEditors = rpcProtocol.set(ExtHostContext.ExtHostDocumentsAndEditors, accessor.get(IExtHostDocumentsAndEditors));
191
const extHostCommands = rpcProtocol.set(ExtHostContext.ExtHostCommands, accessor.get(IExtHostCommands));
192
const extHostTerminalService = rpcProtocol.set(ExtHostContext.ExtHostTerminalService, accessor.get(IExtHostTerminalService));
193
const extHostTerminalShellIntegration = rpcProtocol.set(ExtHostContext.ExtHostTerminalShellIntegration, accessor.get(IExtHostTerminalShellIntegration));
194
const extHostDebugService = rpcProtocol.set(ExtHostContext.ExtHostDebugService, accessor.get(IExtHostDebugService));
195
const extHostSearch = rpcProtocol.set(ExtHostContext.ExtHostSearch, accessor.get(IExtHostSearch));
196
const extHostTask = rpcProtocol.set(ExtHostContext.ExtHostTask, accessor.get(IExtHostTask));
197
const extHostOutputService = rpcProtocol.set(ExtHostContext.ExtHostOutputService, accessor.get(IExtHostOutputService));
198
const extHostLocalization = rpcProtocol.set(ExtHostContext.ExtHostLocalization, accessor.get(IExtHostLocalizationService));
199
200
// manually create and register addressable instances
201
const extHostDocuments = rpcProtocol.set(ExtHostContext.ExtHostDocuments, new ExtHostDocuments(rpcProtocol, extHostDocumentsAndEditors));
202
const extHostDocumentContentProviders = rpcProtocol.set(ExtHostContext.ExtHostDocumentContentProviders, new ExtHostDocumentContentProvider(rpcProtocol, extHostDocumentsAndEditors, extHostLogService));
203
const extHostDocumentSaveParticipant = rpcProtocol.set(ExtHostContext.ExtHostDocumentSaveParticipant, new ExtHostDocumentSaveParticipant(extHostLogService, extHostDocuments, rpcProtocol.getProxy(MainContext.MainThreadBulkEdits)));
204
const extHostNotebook = rpcProtocol.set(ExtHostContext.ExtHostNotebook, new ExtHostNotebookController(rpcProtocol, extHostCommands, extHostDocumentsAndEditors, extHostDocuments, extHostConsumerFileSystem, extHostSearch, extHostLogService));
205
const extHostNotebookDocuments = rpcProtocol.set(ExtHostContext.ExtHostNotebookDocuments, new ExtHostNotebookDocuments(extHostNotebook));
206
const extHostNotebookEditors = rpcProtocol.set(ExtHostContext.ExtHostNotebookEditors, new ExtHostNotebookEditors(extHostLogService, extHostNotebook));
207
const extHostNotebookKernels = rpcProtocol.set(ExtHostContext.ExtHostNotebookKernels, new ExtHostNotebookKernels(rpcProtocol, initData, extHostNotebook, extHostCommands, extHostLogService));
208
const extHostNotebookRenderers = rpcProtocol.set(ExtHostContext.ExtHostNotebookRenderers, new ExtHostNotebookRenderers(rpcProtocol, extHostNotebook));
209
const extHostNotebookDocumentSaveParticipant = rpcProtocol.set(ExtHostContext.ExtHostNotebookDocumentSaveParticipant, new ExtHostNotebookDocumentSaveParticipant(extHostLogService, extHostNotebook, rpcProtocol.getProxy(MainContext.MainThreadBulkEdits)));
210
const extHostEditors = rpcProtocol.set(ExtHostContext.ExtHostEditors, new ExtHostEditors(rpcProtocol, extHostDocumentsAndEditors));
211
const extHostTreeViews = rpcProtocol.set(ExtHostContext.ExtHostTreeViews, new ExtHostTreeViews(rpcProtocol.getProxy(MainContext.MainThreadTreeViews), extHostCommands, extHostLogService));
212
const extHostEditorInsets = rpcProtocol.set(ExtHostContext.ExtHostEditorInsets, new ExtHostEditorInsets(rpcProtocol.getProxy(MainContext.MainThreadEditorInsets), extHostEditors, initData.remote));
213
const extHostDiagnostics = rpcProtocol.set(ExtHostContext.ExtHostDiagnostics, new ExtHostDiagnostics(rpcProtocol, extHostLogService, extHostFileSystemInfo, extHostDocumentsAndEditors));
214
const extHostLanguages = rpcProtocol.set(ExtHostContext.ExtHostLanguages, new ExtHostLanguages(rpcProtocol, extHostDocuments, extHostCommands.converter, uriTransformer));
215
const extHostLanguageFeatures = rpcProtocol.set(ExtHostContext.ExtHostLanguageFeatures, new ExtHostLanguageFeatures(rpcProtocol, uriTransformer, extHostDocuments, extHostCommands, extHostDiagnostics, extHostLogService, extHostApiDeprecation, extHostTelemetry));
216
const extHostCodeMapper = rpcProtocol.set(ExtHostContext.ExtHostCodeMapper, new ExtHostCodeMapper(rpcProtocol));
217
const extHostFileSystem = rpcProtocol.set(ExtHostContext.ExtHostFileSystem, new ExtHostFileSystem(rpcProtocol, extHostLanguageFeatures));
218
const extHostFileSystemEvent = rpcProtocol.set(ExtHostContext.ExtHostFileSystemEventService, new ExtHostFileSystemEventService(rpcProtocol, extHostLogService, extHostDocumentsAndEditors));
219
const extHostQuickOpen = rpcProtocol.set(ExtHostContext.ExtHostQuickOpen, createExtHostQuickOpen(rpcProtocol, extHostWorkspace, extHostCommands));
220
const extHostSCM = rpcProtocol.set(ExtHostContext.ExtHostSCM, new ExtHostSCM(rpcProtocol, extHostCommands, extHostDocuments, extHostLogService));
221
const extHostQuickDiff = rpcProtocol.set(ExtHostContext.ExtHostQuickDiff, new ExtHostQuickDiff(rpcProtocol, uriTransformer));
222
const extHostShare = rpcProtocol.set(ExtHostContext.ExtHostShare, new ExtHostShare(rpcProtocol, uriTransformer));
223
const extHostComment = rpcProtocol.set(ExtHostContext.ExtHostComments, createExtHostComments(rpcProtocol, extHostCommands, extHostDocuments));
224
const extHostLabelService = rpcProtocol.set(ExtHostContext.ExtHostLabelService, new ExtHostLabelService(rpcProtocol));
225
const extHostTheming = rpcProtocol.set(ExtHostContext.ExtHostTheming, new ExtHostTheming(rpcProtocol));
226
const extHostTimeline = rpcProtocol.set(ExtHostContext.ExtHostTimeline, new ExtHostTimeline(rpcProtocol, extHostCommands));
227
const extHostWebviews = rpcProtocol.set(ExtHostContext.ExtHostWebviews, new ExtHostWebviews(rpcProtocol, initData.remote, extHostWorkspace, extHostLogService, extHostApiDeprecation));
228
const extHostWebviewPanels = rpcProtocol.set(ExtHostContext.ExtHostWebviewPanels, new ExtHostWebviewPanels(rpcProtocol, extHostWebviews, extHostWorkspace));
229
const extHostCustomEditors = rpcProtocol.set(ExtHostContext.ExtHostCustomEditors, new ExtHostCustomEditors(rpcProtocol, extHostDocuments, extensionStoragePaths, extHostWebviews, extHostWebviewPanels));
230
const extHostWebviewViews = rpcProtocol.set(ExtHostContext.ExtHostWebviewViews, new ExtHostWebviewViews(rpcProtocol, extHostWebviews));
231
const extHostTesting = rpcProtocol.set(ExtHostContext.ExtHostTesting, accessor.get(IExtHostTesting));
232
const extHostUriOpeners = rpcProtocol.set(ExtHostContext.ExtHostUriOpeners, new ExtHostUriOpeners(rpcProtocol));
233
const extHostProfileContentHandlers = rpcProtocol.set(ExtHostContext.ExtHostProfileContentHandlers, new ExtHostProfileContentHandlers(rpcProtocol));
234
const extHostChatOutputRenderer = rpcProtocol.set(ExtHostContext.ExtHostChatOutputRenderer, new ExtHostChatOutputRenderer(rpcProtocol, extHostWebviews));
235
rpcProtocol.set(ExtHostContext.ExtHostInteractive, new ExtHostInteractive(rpcProtocol, extHostNotebook, extHostDocumentsAndEditors, extHostCommands, extHostLogService));
236
const extHostLanguageModelTools = rpcProtocol.set(ExtHostContext.ExtHostLanguageModelTools, new ExtHostLanguageModelTools(rpcProtocol, extHostLanguageModels));
237
const extHostChatSessions = rpcProtocol.set(ExtHostContext.ExtHostChatSessions, new ExtHostChatSessions(extHostCommands, extHostLanguageModels, rpcProtocol, extHostLogService));
238
const extHostChatAgents2 = rpcProtocol.set(ExtHostContext.ExtHostChatAgents2, new ExtHostChatAgents2(rpcProtocol, extHostLogService, extHostCommands, extHostDocuments, extHostDocumentsAndEditors, extHostLanguageModels, extHostDiagnostics, extHostLanguageModelTools));
239
const extHostChatContext = rpcProtocol.set(ExtHostContext.ExtHostChatContext, new ExtHostChatContext(rpcProtocol, extHostCommands));
240
const extHostAiRelatedInformation = rpcProtocol.set(ExtHostContext.ExtHostAiRelatedInformation, new ExtHostRelatedInformation(rpcProtocol));
241
const extHostAiEmbeddingVector = rpcProtocol.set(ExtHostContext.ExtHostAiEmbeddingVector, new ExtHostAiEmbeddingVector(rpcProtocol));
242
const extHostAiSettingsSearch = rpcProtocol.set(ExtHostContext.ExtHostAiSettingsSearch, new ExtHostAiSettingsSearch(rpcProtocol));
243
const extHostStatusBar = rpcProtocol.set(ExtHostContext.ExtHostStatusBar, new ExtHostStatusBar(rpcProtocol, extHostCommands.converter));
244
const extHostSpeech = rpcProtocol.set(ExtHostContext.ExtHostSpeech, new ExtHostSpeech(rpcProtocol));
245
const extHostEmbeddings = rpcProtocol.set(ExtHostContext.ExtHostEmbeddings, new ExtHostEmbeddings(rpcProtocol));
246
247
rpcProtocol.set(ExtHostContext.ExtHostMcp, accessor.get(IExtHostMpcService));
248
rpcProtocol.set(ExtHostContext.ExtHostHooks, accessor.get(IExtHostHooks));
249
250
// Check that no named customers are missing
251
const expected = Object.values<ProxyIdentifier<any>>(ExtHostContext);
252
rpcProtocol.assertRegistered(expected);
253
254
// Other instances
255
const extHostBulkEdits = new ExtHostBulkEdits(rpcProtocol, extHostDocumentsAndEditors);
256
const extHostClipboard = new ExtHostClipboard(rpcProtocol);
257
const extHostMessageService = new ExtHostMessageService(rpcProtocol, extHostLogService);
258
const extHostDialogs = new ExtHostDialogs(rpcProtocol);
259
const extHostChatStatus = new ExtHostChatStatus(rpcProtocol);
260
const extHostHooks = accessor.get(IExtHostHooks);
261
262
// Register API-ish commands
263
ExtHostApiCommands.register(extHostCommands);
264
265
return function (extension: IExtensionDescription, extensionInfo: IExtensionRegistries, configProvider: ExtHostConfigProvider): typeof vscode {
266
267
// Wraps an event with error handling and telemetry so that we know what extension fails
268
// handling events. This will prevent us from reporting this as "our" error-telemetry and
269
// allows for better blaming
270
function _asExtensionEvent<T>(actual: vscode.Event<T>): vscode.Event<T> {
271
return (listener, thisArgs, disposables) => {
272
const handle = actual(e => {
273
try {
274
listener.call(thisArgs, e);
275
} catch (err) {
276
errors.onUnexpectedExternalError(new ExtensionError(extension.identifier, err, 'FAILED to handle event'));
277
}
278
});
279
disposables?.push(handle);
280
return handle;
281
};
282
}
283
284
285
// Check document selectors for being overly generic. Technically this isn't a problem but
286
// in practice many extensions say they support `fooLang` but need fs-access to do so. Those
287
// extension should specify then the `file`-scheme, e.g. `{ scheme: 'fooLang', language: 'fooLang' }`
288
// We only inform once, it is not a warning because we just want to raise awareness and because
289
// we cannot say if the extension is doing it right or wrong...
290
const checkSelector = (function () {
291
let done = !extension.isUnderDevelopment;
292
function informOnce() {
293
if (!done) {
294
extHostLogService.info(`Extension '${extension.identifier.value}' uses a document selector without scheme. Learn more about this: https://go.microsoft.com/fwlink/?linkid=872305`);
295
done = true;
296
}
297
}
298
return function perform(selector: vscode.DocumentSelector): vscode.DocumentSelector {
299
if (Array.isArray(selector)) {
300
selector.forEach(perform);
301
} else if (typeof selector === 'string') {
302
informOnce();
303
} else {
304
const filter = selector as vscode.DocumentFilter; // TODO: microsoft/TypeScript#42768
305
if (typeof filter.scheme === 'undefined') {
306
informOnce();
307
}
308
if (typeof filter.exclusive === 'boolean') {
309
checkProposedApiEnabled(extension, 'documentFiltersExclusive');
310
}
311
}
312
return selector;
313
};
314
})();
315
316
const authentication: typeof vscode.authentication = {
317
getSession(providerId: string, scopesOrChallenge: readonly string[] | vscode.AuthenticationWwwAuthenticateRequest, options?: vscode.AuthenticationGetSessionOptions) {
318
if (
319
(typeof options?.forceNewSession === 'object' && options.forceNewSession.learnMore) ||
320
(typeof options?.createIfNone === 'object' && options.createIfNone.learnMore)
321
) {
322
checkProposedApiEnabled(extension, 'authLearnMore');
323
}
324
if (options?.authorizationServer) {
325
checkProposedApiEnabled(extension, 'authIssuers');
326
}
327
// eslint-disable-next-line local/code-no-any-casts
328
return extHostAuthentication.getSession(extension, providerId, scopesOrChallenge, options as any);
329
},
330
getAccounts(providerId: string) {
331
return extHostAuthentication.getAccounts(providerId);
332
},
333
// TODO: remove this after GHPR and Codespaces move off of it
334
async hasSession(providerId: string, scopes: readonly string[]) {
335
checkProposedApiEnabled(extension, 'authSession');
336
// eslint-disable-next-line local/code-no-any-casts
337
return !!(await extHostAuthentication.getSession(extension, providerId, scopes, { silent: true } as any));
338
},
339
get onDidChangeSessions(): vscode.Event<vscode.AuthenticationSessionsChangeEvent> {
340
return _asExtensionEvent(extHostAuthentication.getExtensionScopedSessionsEvent(extension.identifier.value));
341
},
342
registerAuthenticationProvider(id: string, label: string, provider: vscode.AuthenticationProvider, options?: vscode.AuthenticationProviderOptions): vscode.Disposable {
343
if (options?.supportedAuthorizationServers) {
344
checkProposedApiEnabled(extension, 'authIssuers');
345
}
346
return extHostAuthentication.registerAuthenticationProvider(id, label, provider, options);
347
}
348
};
349
350
// namespace: commands
351
const commands: typeof vscode.commands = {
352
registerCommand(id: string, command: <T>(...args: any[]) => T | Thenable<T>, thisArgs?: any): vscode.Disposable {
353
return extHostCommands.registerCommand(true, id, command, thisArgs, undefined, extension);
354
},
355
registerTextEditorCommand(id: string, callback: (textEditor: vscode.TextEditor, edit: vscode.TextEditorEdit, ...args: any[]) => void, thisArg?: any): vscode.Disposable {
356
return extHostCommands.registerCommand(true, id, (...args: any[]): any => {
357
const activeTextEditor = extHostEditors.getActiveTextEditor();
358
if (!activeTextEditor) {
359
extHostLogService.warn('Cannot execute ' + id + ' because there is no active text editor.');
360
return undefined;
361
}
362
363
return activeTextEditor.edit((edit: vscode.TextEditorEdit) => {
364
callback.apply(thisArg, [activeTextEditor, edit, ...args]);
365
366
}).then((result) => {
367
if (!result) {
368
extHostLogService.warn('Edits from command ' + id + ' were not applied.');
369
}
370
}, (err) => {
371
extHostLogService.warn('An error occurred while running command ' + id, err);
372
});
373
}, undefined, undefined, extension);
374
},
375
registerDiffInformationCommand: (id: string, callback: (diff: vscode.LineChange[], ...args: any[]) => any, thisArg?: any): vscode.Disposable => {
376
checkProposedApiEnabled(extension, 'diffCommand');
377
return extHostCommands.registerCommand(true, id, async (...args: any[]): Promise<any> => {
378
const activeTextEditor = extHostDocumentsAndEditors.activeEditor(true);
379
if (!activeTextEditor) {
380
extHostLogService.warn('Cannot execute ' + id + ' because there is no active text editor.');
381
return undefined;
382
}
383
384
const diff = await extHostEditors.getDiffInformation(activeTextEditor.id);
385
callback.apply(thisArg, [diff, ...args]);
386
}, undefined, undefined, extension);
387
},
388
executeCommand<T>(id: string, ...args: any[]): Thenable<T> {
389
return extHostCommands.executeCommand<T>(id, ...args);
390
},
391
getCommands(filterInternal: boolean = false): Thenable<string[]> {
392
return extHostCommands.getCommands(filterInternal);
393
}
394
};
395
396
// namespace: env
397
const env: typeof vscode.env = {
398
get machineId() { return initData.telemetryInfo.machineId; },
399
get devDeviceId() {
400
checkProposedApiEnabled(extension, 'devDeviceId');
401
return initData.telemetryInfo.devDeviceId ?? initData.telemetryInfo.machineId;
402
},
403
get isAppPortable() {
404
checkProposedApiEnabled(extension, 'envIsAppPortable');
405
return initData.environment.isPortable ?? false;
406
},
407
get sessionId() { return initData.telemetryInfo.sessionId; },
408
get language() { return initData.environment.appLanguage; },
409
get appName() { return initData.environment.appName; },
410
get appRoot() { return initData.environment.appRoot?.fsPath ?? ''; },
411
get appHost() { return initData.environment.appHost; },
412
get uriScheme() { return initData.environment.appUriScheme; },
413
get clipboard(): vscode.Clipboard { return extHostClipboard.value; },
414
get shell() {
415
return extHostTerminalService.getDefaultShell(false);
416
},
417
get onDidChangeShell() {
418
return _asExtensionEvent(extHostTerminalService.onDidChangeShell);
419
},
420
get isTelemetryEnabled() {
421
return extHostTelemetry.getTelemetryConfiguration();
422
},
423
get onDidChangeTelemetryEnabled(): vscode.Event<boolean> {
424
return _asExtensionEvent(extHostTelemetry.onDidChangeTelemetryEnabled);
425
},
426
get telemetryConfiguration(): vscode.TelemetryConfiguration {
427
checkProposedApiEnabled(extension, 'telemetry');
428
return extHostTelemetry.getTelemetryDetails();
429
},
430
get onDidChangeTelemetryConfiguration(): vscode.Event<vscode.TelemetryConfiguration> {
431
checkProposedApiEnabled(extension, 'telemetry');
432
return _asExtensionEvent(extHostTelemetry.onDidChangeTelemetryConfiguration);
433
},
434
get isMeteredConnection(): boolean {
435
checkProposedApiEnabled(extension, 'envIsConnectionMetered');
436
return extHostMeteredConnection.isConnectionMetered;
437
},
438
get onDidChangeMeteredConnection(): vscode.Event<boolean> {
439
checkProposedApiEnabled(extension, 'envIsConnectionMetered');
440
return _asExtensionEvent(extHostMeteredConnection.onDidChangeIsConnectionMetered);
441
},
442
get isNewAppInstall() {
443
return isNewAppInstall(initData.telemetryInfo.firstSessionDate);
444
},
445
createTelemetryLogger(sender: vscode.TelemetrySender, options?: vscode.TelemetryLoggerOptions): vscode.TelemetryLogger {
446
ExtHostTelemetryLogger.validateSender(sender);
447
return extHostTelemetry.instantiateLogger(extension, sender, options);
448
},
449
async openExternal(uri: URI, options?: { allowContributedOpeners?: boolean | string }) {
450
return extHostWindow.openUri(uri, {
451
allowTunneling: initData.remote.isRemote ?? (initData.remote.authority ? await extHostTunnelService.hasTunnelProvider() : false),
452
allowContributedOpeners: options?.allowContributedOpeners,
453
});
454
},
455
async asExternalUri(uri: URI) {
456
if (uri.scheme === initData.environment.appUriScheme) {
457
return extHostUrls.createAppUri(uri);
458
}
459
460
try {
461
return await extHostWindow.asExternalUri(uri, { allowTunneling: !!initData.remote.authority });
462
} catch (err) {
463
if (matchesScheme(uri, Schemas.http) || matchesScheme(uri, Schemas.https)) {
464
return uri;
465
}
466
467
throw err;
468
}
469
},
470
get remoteName() {
471
return getRemoteName(initData.remote.authority);
472
},
473
get remoteAuthority() {
474
checkProposedApiEnabled(extension, 'resolvers');
475
return initData.remote.authority;
476
},
477
get uiKind() {
478
return initData.uiKind;
479
},
480
get logLevel() {
481
return extHostLogService.getLevel();
482
},
483
get onDidChangeLogLevel() {
484
return _asExtensionEvent(extHostLogService.onDidChangeLogLevel);
485
},
486
get appQuality(): string | undefined {
487
checkProposedApiEnabled(extension, 'resolvers');
488
return initData.quality;
489
},
490
get appCommit(): string | undefined {
491
checkProposedApiEnabled(extension, 'resolvers');
492
return initData.commit;
493
},
494
getDataChannel<T>(channelId: string): vscode.DataChannel<T> {
495
checkProposedApiEnabled(extension, 'dataChannels');
496
return extHostDataChannels.createDataChannel(extension, channelId);
497
},
498
get power(): typeof vscode.env.power {
499
checkProposedApiEnabled(extension, 'environmentPower');
500
return {
501
get onDidSuspend() {
502
return _asExtensionEvent(extHostPower.onDidSuspend);
503
},
504
get onDidResume() {
505
return _asExtensionEvent(extHostPower.onDidResume);
506
},
507
get onDidChangeOnBatteryPower() {
508
return _asExtensionEvent(extHostPower.onDidChangeOnBatteryPower);
509
},
510
get onDidChangeThermalState() {
511
return _asExtensionEvent(extHostPower.onDidChangeThermalState);
512
},
513
get onDidChangeSpeedLimit() {
514
return _asExtensionEvent(extHostPower.onDidChangeSpeedLimit);
515
},
516
get onWillShutdown() {
517
return _asExtensionEvent(extHostPower.onWillShutdown);
518
},
519
get onDidLockScreen() {
520
return _asExtensionEvent(extHostPower.onDidLockScreen);
521
},
522
get onDidUnlockScreen() {
523
return _asExtensionEvent(extHostPower.onDidUnlockScreen);
524
},
525
getSystemIdleState(idleThresholdSeconds: number) {
526
return extHostPower.getSystemIdleState(idleThresholdSeconds);
527
},
528
getSystemIdleTime() {
529
return extHostPower.getSystemIdleTime();
530
},
531
getCurrentThermalState() {
532
return extHostPower.getCurrentThermalState();
533
},
534
isOnBatteryPower() {
535
return extHostPower.isOnBatteryPower();
536
},
537
async startPowerSaveBlocker(type: vscode.env.power.PowerSaveBlockerType): Promise<vscode.env.power.PowerSaveBlocker> {
538
const blocker = await extHostPower.startPowerSaveBlocker(type);
539
return {
540
id: blocker.id,
541
get isStarted() {
542
return blocker.isStarted;
543
},
544
dispose() {
545
blocker.dispose();
546
}
547
};
548
}
549
};
550
}
551
};
552
if (!initData.environment.extensionTestsLocationURI) {
553
// allow to patch env-function when running tests
554
Object.freeze(env);
555
}
556
557
// namespace: tests
558
const tests: typeof vscode.tests = {
559
createTestController(provider, label, refreshHandler?: (token: vscode.CancellationToken) => Thenable<void> | void) {
560
return extHostTesting.createTestController(extension, provider, label, refreshHandler);
561
},
562
createTestObserver() {
563
checkProposedApiEnabled(extension, 'testObserver');
564
return extHostTesting.createTestObserver();
565
},
566
runTests(provider) {
567
checkProposedApiEnabled(extension, 'testObserver');
568
return extHostTesting.runTests(provider);
569
},
570
registerTestFollowupProvider(provider) {
571
checkProposedApiEnabled(extension, 'testObserver');
572
return extHostTesting.registerTestFollowupProvider(provider);
573
},
574
get onDidChangeTestResults() {
575
checkProposedApiEnabled(extension, 'testObserver');
576
return _asExtensionEvent(extHostTesting.onResultsChanged);
577
},
578
get testResults() {
579
checkProposedApiEnabled(extension, 'testObserver');
580
return extHostTesting.results;
581
},
582
};
583
584
// namespace: extensions
585
const extensionKind = initData.remote.isRemote
586
? extHostTypes.ExtensionKind.Workspace
587
: extHostTypes.ExtensionKind.UI;
588
589
const extensions: typeof vscode.extensions = {
590
getExtension(extensionId: string, includeFromDifferentExtensionHosts?: boolean): vscode.Extension<any> | undefined {
591
if (!isProposedApiEnabled(extension, 'extensionsAny')) {
592
includeFromDifferentExtensionHosts = false;
593
}
594
const mine = extensionInfo.mine.getExtensionDescription(extensionId);
595
if (mine) {
596
return new Extension(extensionService, extension.identifier, mine, extensionKind, false);
597
}
598
if (includeFromDifferentExtensionHosts) {
599
const foreign = extensionInfo.all.getExtensionDescription(extensionId);
600
if (foreign) {
601
return new Extension(extensionService, extension.identifier, foreign, extensionKind /* TODO@alexdima THIS IS WRONG */, true);
602
}
603
}
604
return undefined;
605
},
606
get all(): vscode.Extension<any>[] {
607
const result: vscode.Extension<any>[] = [];
608
for (const desc of extensionInfo.mine.getAllExtensionDescriptions()) {
609
result.push(new Extension(extensionService, extension.identifier, desc, extensionKind, false));
610
}
611
return result;
612
},
613
get allAcrossExtensionHosts(): vscode.Extension<any>[] {
614
checkProposedApiEnabled(extension, 'extensionsAny');
615
const local = new ExtensionIdentifierSet(extensionInfo.mine.getAllExtensionDescriptions().map(desc => desc.identifier));
616
const result: vscode.Extension<any>[] = [];
617
for (const desc of extensionInfo.all.getAllExtensionDescriptions()) {
618
const isFromDifferentExtensionHost = !local.has(desc.identifier);
619
result.push(new Extension(extensionService, extension.identifier, desc, extensionKind /* TODO@alexdima THIS IS WRONG */, isFromDifferentExtensionHost));
620
}
621
return result;
622
},
623
get onDidChange() {
624
if (isProposedApiEnabled(extension, 'extensionsAny')) {
625
return _asExtensionEvent(Event.any(extensionInfo.mine.onDidChange, extensionInfo.all.onDidChange));
626
}
627
return _asExtensionEvent(extensionInfo.mine.onDidChange);
628
}
629
};
630
631
// namespace: languages
632
const languages: typeof vscode.languages = {
633
createDiagnosticCollection(name?: string): vscode.DiagnosticCollection {
634
return extHostDiagnostics.createDiagnosticCollection(extension.identifier, name);
635
},
636
get onDidChangeDiagnostics() {
637
return _asExtensionEvent(extHostDiagnostics.onDidChangeDiagnostics);
638
},
639
getDiagnostics: (resource?: vscode.Uri) => {
640
// eslint-disable-next-line local/code-no-any-casts
641
return <any>extHostDiagnostics.getDiagnostics(resource);
642
},
643
getLanguages(): Thenable<string[]> {
644
return extHostLanguages.getLanguages();
645
},
646
setTextDocumentLanguage(document: vscode.TextDocument, languageId: string): Thenable<vscode.TextDocument> {
647
return extHostLanguages.changeLanguage(document.uri, languageId);
648
},
649
match(selector: vscode.DocumentSelector, document: vscode.TextDocument): number {
650
const interalSelector = typeConverters.LanguageSelector.from(selector);
651
let notebook: vscode.NotebookDocument | undefined;
652
if (targetsNotebooks(interalSelector)) {
653
notebook = extHostNotebook.notebookDocuments.find(value => value.apiNotebook.getCells().find(c => c.document === document))?.apiNotebook;
654
}
655
return score(interalSelector, document.uri, document.languageId, true, notebook?.uri, notebook?.notebookType);
656
},
657
registerCodeActionsProvider(selector: vscode.DocumentSelector, provider: vscode.CodeActionProvider, metadata?: vscode.CodeActionProviderMetadata): vscode.Disposable {
658
return extHostLanguageFeatures.registerCodeActionProvider(extension, checkSelector(selector), provider, metadata);
659
},
660
registerDocumentPasteEditProvider(selector: vscode.DocumentSelector, provider: vscode.DocumentPasteEditProvider, metadata: vscode.DocumentPasteProviderMetadata): vscode.Disposable {
661
return extHostLanguageFeatures.registerDocumentPasteEditProvider(extension, checkSelector(selector), provider, metadata);
662
},
663
registerCodeLensProvider(selector: vscode.DocumentSelector, provider: vscode.CodeLensProvider): vscode.Disposable {
664
return extHostLanguageFeatures.registerCodeLensProvider(extension, checkSelector(selector), provider);
665
},
666
registerDefinitionProvider(selector: vscode.DocumentSelector, provider: vscode.DefinitionProvider): vscode.Disposable {
667
return extHostLanguageFeatures.registerDefinitionProvider(extension, checkSelector(selector), provider);
668
},
669
registerDeclarationProvider(selector: vscode.DocumentSelector, provider: vscode.DeclarationProvider): vscode.Disposable {
670
return extHostLanguageFeatures.registerDeclarationProvider(extension, checkSelector(selector), provider);
671
},
672
registerImplementationProvider(selector: vscode.DocumentSelector, provider: vscode.ImplementationProvider): vscode.Disposable {
673
return extHostLanguageFeatures.registerImplementationProvider(extension, checkSelector(selector), provider);
674
},
675
registerTypeDefinitionProvider(selector: vscode.DocumentSelector, provider: vscode.TypeDefinitionProvider): vscode.Disposable {
676
return extHostLanguageFeatures.registerTypeDefinitionProvider(extension, checkSelector(selector), provider);
677
},
678
registerHoverProvider(selector: vscode.DocumentSelector, provider: vscode.HoverProvider): vscode.Disposable {
679
return extHostLanguageFeatures.registerHoverProvider(extension, checkSelector(selector), provider, extension.identifier);
680
},
681
registerEvaluatableExpressionProvider(selector: vscode.DocumentSelector, provider: vscode.EvaluatableExpressionProvider): vscode.Disposable {
682
return extHostLanguageFeatures.registerEvaluatableExpressionProvider(extension, checkSelector(selector), provider, extension.identifier);
683
},
684
registerInlineValuesProvider(selector: vscode.DocumentSelector, provider: vscode.InlineValuesProvider): vscode.Disposable {
685
return extHostLanguageFeatures.registerInlineValuesProvider(extension, checkSelector(selector), provider, extension.identifier);
686
},
687
registerDocumentHighlightProvider(selector: vscode.DocumentSelector, provider: vscode.DocumentHighlightProvider): vscode.Disposable {
688
return extHostLanguageFeatures.registerDocumentHighlightProvider(extension, checkSelector(selector), provider);
689
},
690
registerMultiDocumentHighlightProvider(selector: vscode.DocumentSelector, provider: vscode.MultiDocumentHighlightProvider): vscode.Disposable {
691
return extHostLanguageFeatures.registerMultiDocumentHighlightProvider(extension, checkSelector(selector), provider);
692
},
693
registerLinkedEditingRangeProvider(selector: vscode.DocumentSelector, provider: vscode.LinkedEditingRangeProvider): vscode.Disposable {
694
return extHostLanguageFeatures.registerLinkedEditingRangeProvider(extension, checkSelector(selector), provider);
695
},
696
registerReferenceProvider(selector: vscode.DocumentSelector, provider: vscode.ReferenceProvider): vscode.Disposable {
697
return extHostLanguageFeatures.registerReferenceProvider(extension, checkSelector(selector), provider);
698
},
699
registerRenameProvider(selector: vscode.DocumentSelector, provider: vscode.RenameProvider): vscode.Disposable {
700
return extHostLanguageFeatures.registerRenameProvider(extension, checkSelector(selector), provider);
701
},
702
registerNewSymbolNamesProvider(selector: vscode.DocumentSelector, provider: vscode.NewSymbolNamesProvider): vscode.Disposable {
703
checkProposedApiEnabled(extension, 'newSymbolNamesProvider');
704
return extHostLanguageFeatures.registerNewSymbolNamesProvider(extension, checkSelector(selector), provider);
705
},
706
registerDocumentSymbolProvider(selector: vscode.DocumentSelector, provider: vscode.DocumentSymbolProvider, metadata?: vscode.DocumentSymbolProviderMetadata): vscode.Disposable {
707
return extHostLanguageFeatures.registerDocumentSymbolProvider(extension, checkSelector(selector), provider, metadata);
708
},
709
registerWorkspaceSymbolProvider(provider: vscode.WorkspaceSymbolProvider): vscode.Disposable {
710
return extHostLanguageFeatures.registerWorkspaceSymbolProvider(extension, provider);
711
},
712
registerDocumentFormattingEditProvider(selector: vscode.DocumentSelector, provider: vscode.DocumentFormattingEditProvider): vscode.Disposable {
713
return extHostLanguageFeatures.registerDocumentFormattingEditProvider(extension, checkSelector(selector), provider);
714
},
715
registerDocumentRangeFormattingEditProvider(selector: vscode.DocumentSelector, provider: vscode.DocumentRangeFormattingEditProvider): vscode.Disposable {
716
return extHostLanguageFeatures.registerDocumentRangeFormattingEditProvider(extension, checkSelector(selector), provider);
717
},
718
registerOnTypeFormattingEditProvider(selector: vscode.DocumentSelector, provider: vscode.OnTypeFormattingEditProvider, firstTriggerCharacter: string, ...moreTriggerCharacters: string[]): vscode.Disposable {
719
return extHostLanguageFeatures.registerOnTypeFormattingEditProvider(extension, checkSelector(selector), provider, [firstTriggerCharacter].concat(moreTriggerCharacters));
720
},
721
registerDocumentSemanticTokensProvider(selector: vscode.DocumentSelector, provider: vscode.DocumentSemanticTokensProvider, legend: vscode.SemanticTokensLegend): vscode.Disposable {
722
return extHostLanguageFeatures.registerDocumentSemanticTokensProvider(extension, checkSelector(selector), provider, legend);
723
},
724
registerDocumentRangeSemanticTokensProvider(selector: vscode.DocumentSelector, provider: vscode.DocumentRangeSemanticTokensProvider, legend: vscode.SemanticTokensLegend): vscode.Disposable {
725
return extHostLanguageFeatures.registerDocumentRangeSemanticTokensProvider(extension, checkSelector(selector), provider, legend);
726
},
727
registerSignatureHelpProvider(selector: vscode.DocumentSelector, provider: vscode.SignatureHelpProvider, firstItem?: string | vscode.SignatureHelpProviderMetadata, ...remaining: string[]): vscode.Disposable {
728
if (typeof firstItem === 'object') {
729
return extHostLanguageFeatures.registerSignatureHelpProvider(extension, checkSelector(selector), provider, firstItem);
730
}
731
return extHostLanguageFeatures.registerSignatureHelpProvider(extension, checkSelector(selector), provider, typeof firstItem === 'undefined' ? [] : [firstItem, ...remaining]);
732
},
733
registerCompletionItemProvider(selector: vscode.DocumentSelector, provider: vscode.CompletionItemProvider, ...triggerCharacters: string[]): vscode.Disposable {
734
return extHostLanguageFeatures.registerCompletionItemProvider(extension, checkSelector(selector), provider, triggerCharacters);
735
},
736
registerInlineCompletionItemProvider(selector: vscode.DocumentSelector, provider: vscode.InlineCompletionItemProvider, metadata?: vscode.InlineCompletionItemProviderMetadata): vscode.Disposable {
737
if (provider.handleDidShowCompletionItem) {
738
checkProposedApiEnabled(extension, 'inlineCompletionsAdditions');
739
}
740
if (provider.handleDidPartiallyAcceptCompletionItem) {
741
checkProposedApiEnabled(extension, 'inlineCompletionsAdditions');
742
}
743
if (metadata) {
744
checkProposedApiEnabled(extension, 'inlineCompletionsAdditions');
745
}
746
return extHostLanguageFeatures.registerInlineCompletionsProvider(extension, checkSelector(selector), provider, metadata);
747
},
748
get inlineCompletionsUnificationState() {
749
checkProposedApiEnabled(extension, 'inlineCompletionsAdditions');
750
return extHostLanguageFeatures.inlineCompletionsUnificationState;
751
},
752
onDidChangeCompletionsUnificationState(listener, thisArg?, disposables?) {
753
checkProposedApiEnabled(extension, 'inlineCompletionsAdditions');
754
return _asExtensionEvent(extHostLanguageFeatures.onDidChangeInlineCompletionsUnificationState)(listener, thisArg, disposables);
755
},
756
registerDocumentLinkProvider(selector: vscode.DocumentSelector, provider: vscode.DocumentLinkProvider): vscode.Disposable {
757
return extHostLanguageFeatures.registerDocumentLinkProvider(extension, checkSelector(selector), provider);
758
},
759
registerColorProvider(selector: vscode.DocumentSelector, provider: vscode.DocumentColorProvider): vscode.Disposable {
760
return extHostLanguageFeatures.registerColorProvider(extension, checkSelector(selector), provider);
761
},
762
registerFoldingRangeProvider(selector: vscode.DocumentSelector, provider: vscode.FoldingRangeProvider): vscode.Disposable {
763
return extHostLanguageFeatures.registerFoldingRangeProvider(extension, checkSelector(selector), provider);
764
},
765
registerSelectionRangeProvider(selector: vscode.DocumentSelector, provider: vscode.SelectionRangeProvider): vscode.Disposable {
766
return extHostLanguageFeatures.registerSelectionRangeProvider(extension, selector, provider);
767
},
768
registerCallHierarchyProvider(selector: vscode.DocumentSelector, provider: vscode.CallHierarchyProvider): vscode.Disposable {
769
return extHostLanguageFeatures.registerCallHierarchyProvider(extension, selector, provider);
770
},
771
registerTypeHierarchyProvider(selector: vscode.DocumentSelector, provider: vscode.TypeHierarchyProvider): vscode.Disposable {
772
return extHostLanguageFeatures.registerTypeHierarchyProvider(extension, selector, provider);
773
},
774
setLanguageConfiguration: (language: string, configuration: vscode.LanguageConfiguration): vscode.Disposable => {
775
return extHostLanguageFeatures.setLanguageConfiguration(extension, language, configuration);
776
},
777
getTokenInformationAtPosition(doc: vscode.TextDocument, pos: vscode.Position) {
778
checkProposedApiEnabled(extension, 'tokenInformation');
779
return extHostLanguages.tokenAtPosition(doc, pos);
780
},
781
registerInlayHintsProvider(selector: vscode.DocumentSelector, provider: vscode.InlayHintsProvider): vscode.Disposable {
782
return extHostLanguageFeatures.registerInlayHintsProvider(extension, selector, provider);
783
},
784
createLanguageStatusItem(id: string, selector: vscode.DocumentSelector): vscode.LanguageStatusItem {
785
return extHostLanguages.createLanguageStatusItem(extension, id, selector);
786
},
787
registerDocumentDropEditProvider(selector: vscode.DocumentSelector, provider: vscode.DocumentDropEditProvider, metadata?: vscode.DocumentDropEditProviderMetadata): vscode.Disposable {
788
return extHostLanguageFeatures.registerDocumentOnDropEditProvider(extension, selector, provider, metadata);
789
}
790
};
791
792
// namespace: window
793
const window: typeof vscode.window = {
794
get activeTextEditor() {
795
return extHostEditors.getActiveTextEditor();
796
},
797
get visibleTextEditors() {
798
return extHostEditors.getVisibleTextEditors();
799
},
800
get activeTerminal() {
801
return extHostTerminalService.activeTerminal;
802
},
803
get terminals() {
804
return extHostTerminalService.terminals;
805
},
806
async showTextDocument(documentOrUri: vscode.TextDocument | vscode.Uri, columnOrOptions?: vscode.ViewColumn | vscode.TextDocumentShowOptions, preserveFocus?: boolean): Promise<vscode.TextEditor> {
807
if (URI.isUri(documentOrUri) && documentOrUri.scheme === Schemas.vscodeRemote && !documentOrUri.authority) {
808
extHostApiDeprecation.report('workspace.showTextDocument', extension, `A URI of 'vscode-remote' scheme requires an authority.`);
809
}
810
const document = await (URI.isUri(documentOrUri)
811
? Promise.resolve(workspace.openTextDocument(documentOrUri))
812
: Promise.resolve(<vscode.TextDocument>documentOrUri));
813
814
return extHostEditors.showTextDocument(document, columnOrOptions, preserveFocus);
815
},
816
createTextEditorDecorationType(options: vscode.DecorationRenderOptions): vscode.TextEditorDecorationType {
817
return extHostEditors.createTextEditorDecorationType(extension, options);
818
},
819
onDidChangeActiveTextEditor(listener, thisArg?, disposables?) {
820
return _asExtensionEvent(extHostEditors.onDidChangeActiveTextEditor)(listener, thisArg, disposables);
821
},
822
onDidChangeVisibleTextEditors(listener, thisArg, disposables) {
823
return _asExtensionEvent(extHostEditors.onDidChangeVisibleTextEditors)(listener, thisArg, disposables);
824
},
825
onDidChangeTextEditorSelection(listener: (e: vscode.TextEditorSelectionChangeEvent) => any, thisArgs?: any, disposables?: extHostTypes.Disposable[]) {
826
return _asExtensionEvent(extHostEditors.onDidChangeTextEditorSelection)(listener, thisArgs, disposables);
827
},
828
onDidChangeTextEditorOptions(listener: (e: vscode.TextEditorOptionsChangeEvent) => any, thisArgs?: any, disposables?: extHostTypes.Disposable[]) {
829
return _asExtensionEvent(extHostEditors.onDidChangeTextEditorOptions)(listener, thisArgs, disposables);
830
},
831
onDidChangeTextEditorVisibleRanges(listener: (e: vscode.TextEditorVisibleRangesChangeEvent) => any, thisArgs?: any, disposables?: extHostTypes.Disposable[]) {
832
return _asExtensionEvent(extHostEditors.onDidChangeTextEditorVisibleRanges)(listener, thisArgs, disposables);
833
},
834
onDidChangeTextEditorViewColumn(listener, thisArg?, disposables?) {
835
return _asExtensionEvent(extHostEditors.onDidChangeTextEditorViewColumn)(listener, thisArg, disposables);
836
},
837
onDidChangeTextEditorDiffInformation(listener, thisArg?, disposables?) {
838
checkProposedApiEnabled(extension, 'textEditorDiffInformation');
839
return _asExtensionEvent(extHostEditors.onDidChangeTextEditorDiffInformation)(listener, thisArg, disposables);
840
},
841
onDidCloseTerminal(listener, thisArg?, disposables?) {
842
return _asExtensionEvent(extHostTerminalService.onDidCloseTerminal)(listener, thisArg, disposables);
843
},
844
onDidOpenTerminal(listener, thisArg?, disposables?) {
845
return _asExtensionEvent(extHostTerminalService.onDidOpenTerminal)(listener, thisArg, disposables);
846
},
847
onDidChangeActiveTerminal(listener, thisArg?, disposables?) {
848
return _asExtensionEvent(extHostTerminalService.onDidChangeActiveTerminal)(listener, thisArg, disposables);
849
},
850
onDidChangeTerminalDimensions(listener, thisArg?, disposables?) {
851
checkProposedApiEnabled(extension, 'terminalDimensions');
852
return _asExtensionEvent(extHostTerminalService.onDidChangeTerminalDimensions)(listener, thisArg, disposables);
853
},
854
onDidChangeTerminalState(listener, thisArg?, disposables?) {
855
return _asExtensionEvent(extHostTerminalService.onDidChangeTerminalState)(listener, thisArg, disposables);
856
},
857
onDidWriteTerminalData(listener, thisArg?, disposables?) {
858
checkProposedApiEnabled(extension, 'terminalDataWriteEvent');
859
return _asExtensionEvent(extHostTerminalService.onDidWriteTerminalData)(listener, thisArg, disposables);
860
},
861
onDidExecuteTerminalCommand(listener, thisArg?, disposables?) {
862
checkProposedApiEnabled(extension, 'terminalExecuteCommandEvent');
863
return _asExtensionEvent(extHostTerminalService.onDidExecuteTerminalCommand)(listener, thisArg, disposables);
864
},
865
onDidChangeTerminalShellIntegration(listener, thisArg?, disposables?) {
866
return _asExtensionEvent(extHostTerminalShellIntegration.onDidChangeTerminalShellIntegration)(listener, thisArg, disposables);
867
},
868
onDidStartTerminalShellExecution(listener, thisArg?, disposables?) {
869
return _asExtensionEvent(extHostTerminalShellIntegration.onDidStartTerminalShellExecution)(listener, thisArg, disposables);
870
},
871
onDidEndTerminalShellExecution(listener, thisArg?, disposables?) {
872
return _asExtensionEvent(extHostTerminalShellIntegration.onDidEndTerminalShellExecution)(listener, thisArg, disposables);
873
},
874
get state() {
875
return extHostWindow.getState();
876
},
877
onDidChangeWindowState(listener, thisArg?, disposables?) {
878
return _asExtensionEvent(extHostWindow.onDidChangeWindowState)(listener, thisArg, disposables);
879
},
880
showInformationMessage(message: string, ...rest: Array<vscode.MessageOptions | string | vscode.MessageItem>) {
881
return <Thenable<any>>extHostMessageService.showMessage(extension, Severity.Info, message, rest[0], <Array<string | vscode.MessageItem>>rest.slice(1));
882
},
883
showWarningMessage(message: string, ...rest: Array<vscode.MessageOptions | string | vscode.MessageItem>) {
884
return <Thenable<any>>extHostMessageService.showMessage(extension, Severity.Warning, message, rest[0], <Array<string | vscode.MessageItem>>rest.slice(1));
885
},
886
showErrorMessage(message: string, ...rest: Array<vscode.MessageOptions | string | vscode.MessageItem>) {
887
return <Thenable<any>>extHostMessageService.showMessage(extension, Severity.Error, message, rest[0], <Array<string | vscode.MessageItem>>rest.slice(1));
888
},
889
showQuickPick(items: any, options?: vscode.QuickPickOptions, token?: vscode.CancellationToken): any {
890
return extHostQuickOpen.showQuickPick(extension, items, options, token);
891
},
892
showWorkspaceFolderPick(options?: vscode.WorkspaceFolderPickOptions) {
893
return extHostQuickOpen.showWorkspaceFolderPick(options);
894
},
895
showInputBox(options?: vscode.InputBoxOptions, token?: vscode.CancellationToken) {
896
return extHostQuickOpen.showInput(options, token);
897
},
898
showOpenDialog(options) {
899
return extHostDialogs.showOpenDialog(options);
900
},
901
showSaveDialog(options) {
902
return extHostDialogs.showSaveDialog(options);
903
},
904
createStatusBarItem(alignmentOrId?: vscode.StatusBarAlignment | string, priorityOrAlignment?: number | vscode.StatusBarAlignment, priorityArg?: number): vscode.StatusBarItem {
905
let id: string | undefined;
906
let alignment: number | undefined;
907
let priority: number | undefined;
908
909
if (typeof alignmentOrId === 'string') {
910
id = alignmentOrId;
911
alignment = priorityOrAlignment;
912
priority = priorityArg;
913
} else {
914
alignment = alignmentOrId;
915
priority = priorityOrAlignment;
916
}
917
918
return extHostStatusBar.createStatusBarEntry(extension, id, alignment, priority);
919
},
920
setStatusBarMessage(text: string, timeoutOrThenable?: number | Thenable<any>): vscode.Disposable {
921
return extHostStatusBar.setStatusBarMessage(text, timeoutOrThenable);
922
},
923
withScmProgress<R>(task: (progress: vscode.Progress<number>) => Thenable<R>) {
924
extHostApiDeprecation.report('window.withScmProgress', extension,
925
`Use 'withProgress' instead.`);
926
927
return extHostProgress.withProgress(extension, { location: extHostTypes.ProgressLocation.SourceControl }, (progress, token) => task({ report(n: number) { /*noop*/ } }));
928
},
929
withProgress<R>(options: vscode.ProgressOptions, task: (progress: vscode.Progress<{ message?: string; worked?: number }>, token: vscode.CancellationToken) => Thenable<R>) {
930
return extHostProgress.withProgress(extension, options, task);
931
},
932
createOutputChannel(name: string, options: string | { log: true } | undefined): any {
933
return extHostOutputService.createOutputChannel(name, options, extension);
934
},
935
createWebviewPanel(viewType: string, title: string, showOptions: vscode.ViewColumn | { viewColumn: vscode.ViewColumn; preserveFocus?: boolean }, options?: vscode.WebviewPanelOptions & vscode.WebviewOptions): vscode.WebviewPanel {
936
return extHostWebviewPanels.createWebviewPanel(extension, viewType, title, showOptions, options);
937
},
938
createWebviewTextEditorInset(editor: vscode.TextEditor, line: number, height: number, options?: vscode.WebviewOptions): vscode.WebviewEditorInset {
939
checkProposedApiEnabled(extension, 'editorInsets');
940
return extHostEditorInsets.createWebviewEditorInset(editor, line, height, options, extension);
941
},
942
createTerminal(nameOrOptions?: vscode.TerminalOptions | vscode.ExtensionTerminalOptions | string, shellPath?: string, shellArgs?: readonly string[] | string): vscode.Terminal {
943
if (typeof nameOrOptions === 'object') {
944
if ('pty' in nameOrOptions) {
945
return extHostTerminalService.createExtensionTerminal(nameOrOptions);
946
}
947
return extHostTerminalService.createTerminalFromOptions(nameOrOptions);
948
}
949
return extHostTerminalService.createTerminal(nameOrOptions, shellPath, shellArgs);
950
},
951
registerTerminalLinkProvider(provider: vscode.TerminalLinkProvider): vscode.Disposable {
952
return extHostTerminalService.registerLinkProvider(provider);
953
},
954
registerTerminalProfileProvider(id: string, provider: vscode.TerminalProfileProvider): vscode.Disposable {
955
return extHostTerminalService.registerProfileProvider(extension, id, provider);
956
},
957
registerTerminalCompletionProvider(provider: vscode.TerminalCompletionProvider<vscode.TerminalCompletionItem>, ...triggerCharacters: string[]): vscode.Disposable {
958
checkProposedApiEnabled(extension, 'terminalCompletionProvider');
959
return extHostTerminalService.registerTerminalCompletionProvider(extension, provider, ...triggerCharacters);
960
},
961
registerTerminalQuickFixProvider(id: string, provider: vscode.TerminalQuickFixProvider): vscode.Disposable {
962
checkProposedApiEnabled(extension, 'terminalQuickFixProvider');
963
return extHostTerminalService.registerTerminalQuickFixProvider(id, extension.identifier.value, provider);
964
},
965
registerTreeDataProvider(viewId: string, treeDataProvider: vscode.TreeDataProvider<any>): vscode.Disposable {
966
return extHostTreeViews.registerTreeDataProvider(viewId, treeDataProvider, extension);
967
},
968
createTreeView(viewId: string, options: { treeDataProvider: vscode.TreeDataProvider<any> }): vscode.TreeView<any> {
969
return extHostTreeViews.createTreeView(viewId, options, extension);
970
},
971
registerWebviewPanelSerializer: (viewType: string, serializer: vscode.WebviewPanelSerializer) => {
972
return extHostWebviewPanels.registerWebviewPanelSerializer(extension, viewType, serializer);
973
},
974
registerCustomEditorProvider: (viewType: string, provider: vscode.CustomTextEditorProvider | vscode.CustomReadonlyEditorProvider, options: { webviewOptions?: vscode.WebviewPanelOptions; supportsMultipleEditorsPerDocument?: boolean } = {}) => {
975
return extHostCustomEditors.registerCustomEditorProvider(extension, viewType, provider, options);
976
},
977
registerFileDecorationProvider(provider: vscode.FileDecorationProvider) {
978
return extHostDecorations.registerFileDecorationProvider(provider, extension);
979
},
980
registerUriHandler(handler: vscode.UriHandler) {
981
return extHostUrls.registerUriHandler(extension, handler);
982
},
983
createQuickPick<T extends vscode.QuickPickItem>(): vscode.QuickPick<T> {
984
return extHostQuickOpen.createQuickPick(extension);
985
},
986
createInputBox(): vscode.InputBox {
987
return extHostQuickOpen.createInputBox(extension);
988
},
989
get activeColorTheme(): vscode.ColorTheme {
990
return extHostTheming.activeColorTheme;
991
},
992
onDidChangeActiveColorTheme(listener, thisArg?, disposables?) {
993
return _asExtensionEvent(extHostTheming.onDidChangeActiveColorTheme)(listener, thisArg, disposables);
994
},
995
registerWebviewViewProvider(viewId: string, provider: vscode.WebviewViewProvider, options?: {
996
webviewOptions?: {
997
retainContextWhenHidden?: boolean;
998
};
999
}) {
1000
return extHostWebviewViews.registerWebviewViewProvider(extension, viewId, provider, options?.webviewOptions);
1001
},
1002
get activeNotebookEditor(): vscode.NotebookEditor | undefined {
1003
return extHostNotebook.activeNotebookEditor;
1004
},
1005
onDidChangeActiveNotebookEditor(listener, thisArgs?, disposables?) {
1006
return _asExtensionEvent(extHostNotebook.onDidChangeActiveNotebookEditor)(listener, thisArgs, disposables);
1007
},
1008
get visibleNotebookEditors() {
1009
return extHostNotebook.visibleNotebookEditors;
1010
},
1011
get onDidChangeVisibleNotebookEditors() {
1012
return _asExtensionEvent(extHostNotebook.onDidChangeVisibleNotebookEditors);
1013
},
1014
onDidChangeNotebookEditorSelection(listener, thisArgs?, disposables?) {
1015
return _asExtensionEvent(extHostNotebookEditors.onDidChangeNotebookEditorSelection)(listener, thisArgs, disposables);
1016
},
1017
onDidChangeNotebookEditorVisibleRanges(listener, thisArgs?, disposables?) {
1018
return _asExtensionEvent(extHostNotebookEditors.onDidChangeNotebookEditorVisibleRanges)(listener, thisArgs, disposables);
1019
},
1020
showNotebookDocument(document, options?) {
1021
return extHostNotebook.showNotebookDocument(document, options);
1022
},
1023
registerExternalUriOpener(id: string, opener: vscode.ExternalUriOpener, metadata: vscode.ExternalUriOpenerMetadata) {
1024
checkProposedApiEnabled(extension, 'externalUriOpener');
1025
return extHostUriOpeners.registerExternalUriOpener(extension.identifier, id, opener, metadata);
1026
},
1027
registerProfileContentHandler(id: string, handler: vscode.ProfileContentHandler) {
1028
checkProposedApiEnabled(extension, 'profileContentHandlers');
1029
return extHostProfileContentHandlers.registerProfileContentHandler(extension, id, handler);
1030
},
1031
registerQuickDiffProvider(selector: vscode.DocumentSelector, quickDiffProvider: vscode.QuickDiffProvider, id: string, label: string, rootUri?: vscode.Uri): vscode.Disposable {
1032
checkProposedApiEnabled(extension, 'quickDiffProvider');
1033
return extHostQuickDiff.registerQuickDiffProvider(extension, checkSelector(selector), quickDiffProvider, id, label, rootUri);
1034
},
1035
get tabGroups(): vscode.TabGroups {
1036
return extHostEditorTabs.tabGroups;
1037
},
1038
registerShareProvider(selector: vscode.DocumentSelector, provider: vscode.ShareProvider): vscode.Disposable {
1039
checkProposedApiEnabled(extension, 'shareProvider');
1040
return extHostShare.registerShareProvider(checkSelector(selector), provider);
1041
},
1042
get nativeHandle(): Uint8Array | undefined {
1043
checkProposedApiEnabled(extension, 'nativeWindowHandle');
1044
return extHostWindow.nativeHandle;
1045
},
1046
createChatStatusItem: (id: string) => {
1047
checkProposedApiEnabled(extension, 'chatStatusItem');
1048
return extHostChatStatus.createChatStatusItem(extension, id);
1049
},
1050
};
1051
1052
// namespace: workspace
1053
1054
const workspace: typeof vscode.workspace = {
1055
get rootPath() {
1056
extHostApiDeprecation.report('workspace.rootPath', extension,
1057
`Please use 'workspace.workspaceFolders' instead. More details: https://aka.ms/vscode-eliminating-rootpath`);
1058
1059
return extHostWorkspace.getPath();
1060
},
1061
set rootPath(value) {
1062
throw new errors.ReadonlyError('rootPath');
1063
},
1064
getWorkspaceFolder(resource) {
1065
return extHostWorkspace.getWorkspaceFolder(resource);
1066
},
1067
get workspaceFolders() {
1068
return extHostWorkspace.getWorkspaceFolders();
1069
},
1070
get name() {
1071
return extHostWorkspace.name;
1072
},
1073
set name(value) {
1074
throw new errors.ReadonlyError('name');
1075
},
1076
get workspaceFile() {
1077
return extHostWorkspace.workspaceFile;
1078
},
1079
set workspaceFile(value) {
1080
throw new errors.ReadonlyError('workspaceFile');
1081
},
1082
get isAgentSessionsWorkspace() {
1083
checkProposedApiEnabled(extension, 'agentSessionsWorkspace');
1084
return extHostWorkspace.isAgentSessionsWorkspace;
1085
},
1086
updateWorkspaceFolders: (index, deleteCount, ...workspaceFoldersToAdd) => {
1087
return extHostWorkspace.updateWorkspaceFolders(extension, index, deleteCount || 0, ...workspaceFoldersToAdd);
1088
},
1089
onDidChangeWorkspaceFolders: function (listener, thisArgs?, disposables?) {
1090
return _asExtensionEvent(extHostWorkspace.onDidChangeWorkspace)(listener, thisArgs, disposables);
1091
},
1092
asRelativePath: (pathOrUri, includeWorkspace?) => {
1093
return extHostWorkspace.getRelativePath(pathOrUri, includeWorkspace);
1094
},
1095
findFiles: (include, exclude, maxResults?, token?) => {
1096
// Note, undefined/null have different meanings on "exclude"
1097
return extHostWorkspace.findFiles(include, exclude, maxResults, extension.identifier, token);
1098
},
1099
findFiles2: (filePattern: vscode.GlobPattern[], options?: vscode.FindFiles2Options, token?: vscode.CancellationToken): Thenable<vscode.Uri[]> => {
1100
checkProposedApiEnabled(extension, 'findFiles2');
1101
return extHostWorkspace.findFiles2(filePattern, options, extension.identifier, token);
1102
},
1103
findTextInFiles: (query: vscode.TextSearchQuery, optionsOrCallback: vscode.FindTextInFilesOptions | ((result: vscode.TextSearchResult) => void), callbackOrToken?: vscode.CancellationToken | ((result: vscode.TextSearchResult) => void), token?: vscode.CancellationToken) => {
1104
checkProposedApiEnabled(extension, 'findTextInFiles');
1105
let options: vscode.FindTextInFilesOptions;
1106
let callback: (result: vscode.TextSearchResult) => void;
1107
1108
if (typeof optionsOrCallback === 'object') {
1109
options = optionsOrCallback;
1110
callback = callbackOrToken as (result: vscode.TextSearchResult) => void;
1111
} else {
1112
options = {};
1113
callback = optionsOrCallback;
1114
token = callbackOrToken as vscode.CancellationToken;
1115
}
1116
1117
return extHostWorkspace.findTextInFiles(query, options || {}, callback, extension.identifier, token);
1118
},
1119
findTextInFiles2: (query: vscode.TextSearchQuery2, options?: vscode.FindTextInFilesOptions2, token?: vscode.CancellationToken): vscode.FindTextInFilesResponse => {
1120
checkProposedApiEnabled(extension, 'findTextInFiles2');
1121
checkProposedApiEnabled(extension, 'textSearchProvider2');
1122
return extHostWorkspace.findTextInFiles2(query, options, extension.identifier, token);
1123
},
1124
save: (uri) => {
1125
return extHostWorkspace.save(uri);
1126
},
1127
saveAs: (uri) => {
1128
return extHostWorkspace.saveAs(uri);
1129
},
1130
saveAll: (includeUntitled?) => {
1131
return extHostWorkspace.saveAll(includeUntitled);
1132
},
1133
applyEdit(edit: vscode.WorkspaceEdit, metadata?: vscode.WorkspaceEditMetadata): Thenable<boolean> {
1134
return extHostBulkEdits.applyWorkspaceEdit(edit, extension, metadata);
1135
},
1136
createFileSystemWatcher: (pattern, optionsOrIgnoreCreate, ignoreChange?, ignoreDelete?): vscode.FileSystemWatcher => {
1137
const options: FileSystemWatcherCreateOptions = {
1138
ignoreCreateEvents: Boolean(optionsOrIgnoreCreate),
1139
ignoreChangeEvents: Boolean(ignoreChange),
1140
ignoreDeleteEvents: Boolean(ignoreDelete),
1141
};
1142
1143
return extHostFileSystemEvent.createFileSystemWatcher(extHostWorkspace, configProvider, extHostFileSystemInfo, extension, pattern, options);
1144
},
1145
get textDocuments() {
1146
return extHostDocuments.getAllDocumentData().map(data => data.document);
1147
},
1148
set textDocuments(value) {
1149
throw new errors.ReadonlyError('textDocuments');
1150
},
1151
openTextDocument(uriOrFileNameOrOptions?: vscode.Uri | string | { language?: string; content?: string; encoding?: string }, options?: { encoding?: string }) {
1152
let uriPromise: Thenable<URI>;
1153
1154
options = (options ?? uriOrFileNameOrOptions) as ({ language?: string; content?: string; encoding?: string } | undefined);
1155
1156
if (typeof uriOrFileNameOrOptions === 'string') {
1157
uriPromise = Promise.resolve(URI.file(uriOrFileNameOrOptions));
1158
} else if (URI.isUri(uriOrFileNameOrOptions)) {
1159
uriPromise = Promise.resolve(uriOrFileNameOrOptions);
1160
} else if (!options || typeof options === 'object') {
1161
uriPromise = extHostDocuments.createDocumentData(options);
1162
} else {
1163
throw new Error('illegal argument - uriOrFileNameOrOptions');
1164
}
1165
1166
return uriPromise.then(uri => {
1167
extHostLogService.trace(`openTextDocument from ${extension.identifier}`);
1168
if (uri.scheme === Schemas.vscodeRemote && !uri.authority) {
1169
extHostApiDeprecation.report('workspace.openTextDocument', extension, `A URI of 'vscode-remote' scheme requires an authority.`);
1170
}
1171
return extHostDocuments.ensureDocumentData(uri, options).then(documentData => {
1172
return documentData.document;
1173
});
1174
});
1175
},
1176
onDidOpenTextDocument: (listener, thisArgs?, disposables?) => {
1177
return _asExtensionEvent(extHostDocuments.onDidAddDocument)(listener, thisArgs, disposables);
1178
},
1179
onDidCloseTextDocument: (listener, thisArgs?, disposables?) => {
1180
return _asExtensionEvent(extHostDocuments.onDidRemoveDocument)(listener, thisArgs, disposables);
1181
},
1182
onDidChangeTextDocument: (listener, thisArgs?, disposables?) => {
1183
if (isProposedApiEnabled(extension, 'textDocumentChangeReason')) {
1184
return _asExtensionEvent(extHostDocuments.onDidChangeDocumentWithReason)(listener, thisArgs, disposables);
1185
}
1186
return _asExtensionEvent(extHostDocuments.onDidChangeDocument)(listener, thisArgs, disposables);
1187
},
1188
onDidSaveTextDocument: (listener, thisArgs?, disposables?) => {
1189
return _asExtensionEvent(extHostDocuments.onDidSaveDocument)(listener, thisArgs, disposables);
1190
},
1191
onWillSaveTextDocument: (listener, thisArgs?, disposables?) => {
1192
return _asExtensionEvent(extHostDocumentSaveParticipant.getOnWillSaveTextDocumentEvent(extension))(listener, thisArgs, disposables);
1193
},
1194
get notebookDocuments(): vscode.NotebookDocument[] {
1195
return extHostNotebook.notebookDocuments.map(d => d.apiNotebook);
1196
},
1197
async openNotebookDocument(uriOrType?: URI | string, content?: vscode.NotebookData) {
1198
let uri: URI;
1199
if (URI.isUri(uriOrType)) {
1200
uri = uriOrType;
1201
await extHostNotebook.openNotebookDocument(uriOrType);
1202
} else if (typeof uriOrType === 'string') {
1203
uri = URI.revive(await extHostNotebook.createNotebookDocument({ viewType: uriOrType, content }));
1204
} else {
1205
throw new Error('Invalid arguments');
1206
}
1207
return extHostNotebook.getNotebookDocument(uri).apiNotebook;
1208
},
1209
onDidSaveNotebookDocument(listener, thisArg, disposables) {
1210
return _asExtensionEvent(extHostNotebookDocuments.onDidSaveNotebookDocument)(listener, thisArg, disposables);
1211
},
1212
onDidChangeNotebookDocument(listener, thisArg, disposables) {
1213
return _asExtensionEvent(extHostNotebookDocuments.onDidChangeNotebookDocument)(listener, thisArg, disposables);
1214
},
1215
onWillSaveNotebookDocument(listener, thisArg, disposables) {
1216
return _asExtensionEvent(extHostNotebookDocumentSaveParticipant.getOnWillSaveNotebookDocumentEvent(extension))(listener, thisArg, disposables);
1217
},
1218
get onDidOpenNotebookDocument() {
1219
return _asExtensionEvent(extHostNotebook.onDidOpenNotebookDocument);
1220
},
1221
get onDidCloseNotebookDocument() {
1222
return _asExtensionEvent(extHostNotebook.onDidCloseNotebookDocument);
1223
},
1224
registerNotebookSerializer(viewType: string, serializer: vscode.NotebookSerializer, options?: vscode.NotebookDocumentContentOptions, registration?: vscode.NotebookRegistrationData) {
1225
return extHostNotebook.registerNotebookSerializer(extension, viewType, serializer, options, isProposedApiEnabled(extension, 'notebookLiveShare') ? registration : undefined);
1226
},
1227
onDidChangeConfiguration: (listener: (_: any) => any, thisArgs?: any, disposables?: extHostTypes.Disposable[]) => {
1228
return _asExtensionEvent(configProvider.onDidChangeConfiguration)(listener, thisArgs, disposables);
1229
},
1230
getConfiguration(section?: string, scope?: vscode.ConfigurationScope | null): vscode.WorkspaceConfiguration {
1231
scope = arguments.length === 1 ? undefined : scope;
1232
return configProvider.getConfiguration(section, scope, extension);
1233
},
1234
registerTextDocumentContentProvider(scheme: string, provider: vscode.TextDocumentContentProvider) {
1235
return extHostDocumentContentProviders.registerTextDocumentContentProvider(scheme, provider);
1236
},
1237
registerTaskProvider: (type: string, provider: vscode.TaskProvider) => {
1238
extHostApiDeprecation.report('window.registerTaskProvider', extension,
1239
`Use the corresponding function on the 'tasks' namespace instead`);
1240
1241
return extHostTask.registerTaskProvider(extension, type, provider);
1242
},
1243
registerFileSystemProvider(scheme, provider, options) {
1244
return combinedDisposable(
1245
extHostFileSystem.registerFileSystemProvider(extension, scheme, provider, options),
1246
extHostConsumerFileSystem.addFileSystemProvider(scheme, provider, options)
1247
);
1248
},
1249
get fs() {
1250
return extHostConsumerFileSystem.value;
1251
},
1252
registerFileSearchProvider: (scheme: string, provider: vscode.FileSearchProvider) => {
1253
checkProposedApiEnabled(extension, 'fileSearchProvider');
1254
return extHostSearch.registerFileSearchProviderOld(scheme, provider);
1255
},
1256
registerTextSearchProvider: (scheme: string, provider: vscode.TextSearchProvider) => {
1257
checkProposedApiEnabled(extension, 'textSearchProvider');
1258
return extHostSearch.registerTextSearchProviderOld(scheme, provider);
1259
},
1260
registerAITextSearchProvider: (scheme: string, provider: vscode.AITextSearchProvider) => {
1261
// there are some dependencies on textSearchProvider, so we need to check for both
1262
checkProposedApiEnabled(extension, 'aiTextSearchProvider');
1263
checkProposedApiEnabled(extension, 'textSearchProvider2');
1264
return extHostSearch.registerAITextSearchProvider(scheme, provider);
1265
},
1266
registerFileSearchProvider2: (scheme: string, provider: vscode.FileSearchProvider2) => {
1267
checkProposedApiEnabled(extension, 'fileSearchProvider2');
1268
return extHostSearch.registerFileSearchProvider(scheme, provider);
1269
},
1270
registerTextSearchProvider2: (scheme: string, provider: vscode.TextSearchProvider2) => {
1271
checkProposedApiEnabled(extension, 'textSearchProvider2');
1272
return extHostSearch.registerTextSearchProvider(scheme, provider);
1273
},
1274
registerRemoteAuthorityResolver: (authorityPrefix: string, resolver: vscode.RemoteAuthorityResolver) => {
1275
checkProposedApiEnabled(extension, 'resolvers');
1276
return extensionService.registerRemoteAuthorityResolver(authorityPrefix, resolver);
1277
},
1278
registerResourceLabelFormatter: (formatter: vscode.ResourceLabelFormatter) => {
1279
checkProposedApiEnabled(extension, 'resolvers');
1280
return extHostLabelService.$registerResourceLabelFormatter(formatter);
1281
},
1282
getRemoteExecServer: (authority: string) => {
1283
checkProposedApiEnabled(extension, 'resolvers');
1284
return extensionService.getRemoteExecServer(authority);
1285
},
1286
onDidCreateFiles: (listener, thisArg, disposables) => {
1287
return _asExtensionEvent(extHostFileSystemEvent.onDidCreateFile)(listener, thisArg, disposables);
1288
},
1289
onDidDeleteFiles: (listener, thisArg, disposables) => {
1290
return _asExtensionEvent(extHostFileSystemEvent.onDidDeleteFile)(listener, thisArg, disposables);
1291
},
1292
onDidRenameFiles: (listener, thisArg, disposables) => {
1293
return _asExtensionEvent(extHostFileSystemEvent.onDidRenameFile)(listener, thisArg, disposables);
1294
},
1295
onWillCreateFiles: (listener: (e: vscode.FileWillCreateEvent) => any, thisArg?: any, disposables?: vscode.Disposable[]) => {
1296
return _asExtensionEvent(extHostFileSystemEvent.getOnWillCreateFileEvent(extension))(listener, thisArg, disposables);
1297
},
1298
onWillDeleteFiles: (listener: (e: vscode.FileWillDeleteEvent) => any, thisArg?: any, disposables?: vscode.Disposable[]) => {
1299
return _asExtensionEvent(extHostFileSystemEvent.getOnWillDeleteFileEvent(extension))(listener, thisArg, disposables);
1300
},
1301
onWillRenameFiles: (listener: (e: vscode.FileWillRenameEvent) => any, thisArg?: any, disposables?: vscode.Disposable[]) => {
1302
return _asExtensionEvent(extHostFileSystemEvent.getOnWillRenameFileEvent(extension))(listener, thisArg, disposables);
1303
},
1304
openTunnel: (forward: vscode.TunnelOptions) => {
1305
checkProposedApiEnabled(extension, 'tunnels');
1306
return extHostTunnelService.openTunnel(extension, forward).then(value => {
1307
if (!value) {
1308
throw new Error('cannot open tunnel');
1309
}
1310
return value;
1311
});
1312
},
1313
get tunnels() {
1314
checkProposedApiEnabled(extension, 'tunnels');
1315
return extHostTunnelService.getTunnels();
1316
},
1317
onDidChangeTunnels: (listener, thisArg?, disposables?) => {
1318
checkProposedApiEnabled(extension, 'tunnels');
1319
return _asExtensionEvent(extHostTunnelService.onDidChangeTunnels)(listener, thisArg, disposables);
1320
},
1321
registerPortAttributesProvider: (portSelector: vscode.PortAttributesSelector, provider: vscode.PortAttributesProvider) => {
1322
checkProposedApiEnabled(extension, 'portsAttributes');
1323
return extHostTunnelService.registerPortsAttributesProvider(portSelector, provider);
1324
},
1325
registerTunnelProvider: (tunnelProvider: vscode.TunnelProvider, information: vscode.TunnelInformation) => {
1326
checkProposedApiEnabled(extension, 'tunnelFactory');
1327
return extHostTunnelService.registerTunnelProvider(tunnelProvider, information);
1328
},
1329
registerTimelineProvider: (scheme: string | string[], provider: vscode.TimelineProvider) => {
1330
checkProposedApiEnabled(extension, 'timeline');
1331
return extHostTimeline.registerTimelineProvider(scheme, provider, extension.identifier, extHostCommands.converter);
1332
},
1333
get isTrusted() {
1334
return extHostWorkspace.trusted;
1335
},
1336
requestResourceTrust: (options: vscode.ResourceTrustRequestOptions) => {
1337
checkProposedApiEnabled(extension, 'workspaceTrust');
1338
return extHostWorkspace.requestResourceTrust(options);
1339
},
1340
requestWorkspaceTrust: (options?: vscode.WorkspaceTrustRequestOptions) => {
1341
checkProposedApiEnabled(extension, 'workspaceTrust');
1342
return extHostWorkspace.requestWorkspaceTrust(options);
1343
},
1344
isResourceTrusted: (resource: vscode.Uri) => {
1345
checkProposedApiEnabled(extension, 'workspaceTrust');
1346
return extHostWorkspace.isResourceTrusted(resource);
1347
},
1348
onDidChangeWorkspaceTrustedFolders: (listener, thisArgs?, disposables?) => {
1349
checkProposedApiEnabled(extension, 'workspaceTrust');
1350
return _asExtensionEvent(extHostWorkspace.onDidChangeWorkspaceTrustedFolders)(listener, thisArgs, disposables);
1351
},
1352
onDidGrantWorkspaceTrust: (listener, thisArgs?, disposables?) => {
1353
return _asExtensionEvent(extHostWorkspace.onDidGrantWorkspaceTrust)(listener, thisArgs, disposables);
1354
},
1355
registerEditSessionIdentityProvider: (scheme: string, provider: vscode.EditSessionIdentityProvider) => {
1356
checkProposedApiEnabled(extension, 'editSessionIdentityProvider');
1357
return extHostWorkspace.registerEditSessionIdentityProvider(scheme, provider);
1358
},
1359
onWillCreateEditSessionIdentity: (listener, thisArgs?, disposables?) => {
1360
checkProposedApiEnabled(extension, 'editSessionIdentityProvider');
1361
return _asExtensionEvent(extHostWorkspace.getOnWillCreateEditSessionIdentityEvent(extension))(listener, thisArgs, disposables);
1362
},
1363
registerCanonicalUriProvider: (scheme: string, provider: vscode.CanonicalUriProvider) => {
1364
checkProposedApiEnabled(extension, 'canonicalUriProvider');
1365
return extHostWorkspace.registerCanonicalUriProvider(scheme, provider);
1366
},
1367
getCanonicalUri: (uri: vscode.Uri, options: vscode.CanonicalUriRequestOptions, token: vscode.CancellationToken) => {
1368
checkProposedApiEnabled(extension, 'canonicalUriProvider');
1369
return extHostWorkspace.provideCanonicalUri(uri, options, token);
1370
},
1371
decode(content: Uint8Array, options?: { uri?: vscode.Uri; encoding?: string }) {
1372
return extHostWorkspace.decode(content, options);
1373
},
1374
encode(content: string, options?: { uri?: vscode.Uri; encoding?: string }) {
1375
return extHostWorkspace.encode(content, options);
1376
},
1377
};
1378
1379
// namespace: scm
1380
const scm: typeof vscode.scm = {
1381
get inputBox() {
1382
extHostApiDeprecation.report('scm.inputBox', extension,
1383
`Use 'SourceControl.inputBox' instead`);
1384
1385
return extHostSCM.getLastInputBox(extension)!; // Strict null override - Deprecated api
1386
},
1387
createSourceControl(id: string, label: string, rootUri?: vscode.Uri, iconPath?: vscode.IconPath, isHidden?: boolean, parent?: vscode.SourceControl): vscode.SourceControl {
1388
if (iconPath || isHidden || parent) {
1389
checkProposedApiEnabled(extension, 'scmProviderOptions');
1390
}
1391
return extHostSCM.createSourceControl(extension, id, label, rootUri, iconPath, isHidden, parent);
1392
}
1393
};
1394
1395
// namespace: comments
1396
const comments: typeof vscode.comments = {
1397
createCommentController(id: string, label: string) {
1398
return extHostComment.createCommentController(extension, id, label);
1399
}
1400
};
1401
1402
// namespace: debug
1403
const debug: typeof vscode.debug = {
1404
get activeDebugSession() {
1405
return extHostDebugService.activeDebugSession;
1406
},
1407
get activeDebugConsole() {
1408
return extHostDebugService.activeDebugConsole;
1409
},
1410
get breakpoints() {
1411
return extHostDebugService.breakpoints;
1412
},
1413
get activeStackItem() {
1414
return extHostDebugService.activeStackItem;
1415
},
1416
registerDebugVisualizationProvider(id, provider) {
1417
checkProposedApiEnabled(extension, 'debugVisualization');
1418
return extHostDebugService.registerDebugVisualizationProvider(extension, id, provider);
1419
},
1420
registerDebugVisualizationTreeProvider(id, provider) {
1421
checkProposedApiEnabled(extension, 'debugVisualization');
1422
return extHostDebugService.registerDebugVisualizationTree(extension, id, provider);
1423
},
1424
onDidStartDebugSession(listener, thisArg?, disposables?) {
1425
return _asExtensionEvent(extHostDebugService.onDidStartDebugSession)(listener, thisArg, disposables);
1426
},
1427
onDidTerminateDebugSession(listener, thisArg?, disposables?) {
1428
return _asExtensionEvent(extHostDebugService.onDidTerminateDebugSession)(listener, thisArg, disposables);
1429
},
1430
onDidChangeActiveDebugSession(listener, thisArg?, disposables?) {
1431
return _asExtensionEvent(extHostDebugService.onDidChangeActiveDebugSession)(listener, thisArg, disposables);
1432
},
1433
onDidReceiveDebugSessionCustomEvent(listener, thisArg?, disposables?) {
1434
return _asExtensionEvent(extHostDebugService.onDidReceiveDebugSessionCustomEvent)(listener, thisArg, disposables);
1435
},
1436
onDidChangeBreakpoints(listener, thisArgs?, disposables?) {
1437
return _asExtensionEvent(extHostDebugService.onDidChangeBreakpoints)(listener, thisArgs, disposables);
1438
},
1439
onDidChangeActiveStackItem(listener, thisArg?, disposables?) {
1440
return _asExtensionEvent(extHostDebugService.onDidChangeActiveStackItem)(listener, thisArg, disposables);
1441
},
1442
registerDebugConfigurationProvider(debugType: string, provider: vscode.DebugConfigurationProvider, triggerKind?: vscode.DebugConfigurationProviderTriggerKind) {
1443
return extHostDebugService.registerDebugConfigurationProvider(debugType, provider, triggerKind || DebugConfigurationProviderTriggerKind.Initial);
1444
},
1445
registerDebugAdapterDescriptorFactory(debugType: string, factory: vscode.DebugAdapterDescriptorFactory) {
1446
return extHostDebugService.registerDebugAdapterDescriptorFactory(extension, debugType, factory);
1447
},
1448
registerDebugAdapterTrackerFactory(debugType: string, factory: vscode.DebugAdapterTrackerFactory) {
1449
return extHostDebugService.registerDebugAdapterTrackerFactory(debugType, factory);
1450
},
1451
startDebugging(folder: vscode.WorkspaceFolder | undefined, nameOrConfig: string | vscode.DebugConfiguration, parentSessionOrOptions?: vscode.DebugSession | vscode.DebugSessionOptions) {
1452
if (!parentSessionOrOptions || (typeof parentSessionOrOptions === 'object' && 'configuration' in parentSessionOrOptions)) {
1453
return extHostDebugService.startDebugging(folder, nameOrConfig, { parentSession: parentSessionOrOptions });
1454
}
1455
return extHostDebugService.startDebugging(folder, nameOrConfig, parentSessionOrOptions || {});
1456
},
1457
stopDebugging(session?: vscode.DebugSession) {
1458
return extHostDebugService.stopDebugging(session);
1459
},
1460
addBreakpoints(breakpoints: readonly vscode.Breakpoint[]) {
1461
return extHostDebugService.addBreakpoints(breakpoints);
1462
},
1463
removeBreakpoints(breakpoints: readonly vscode.Breakpoint[]) {
1464
return extHostDebugService.removeBreakpoints(breakpoints);
1465
},
1466
asDebugSourceUri(source: vscode.DebugProtocolSource, session?: vscode.DebugSession): vscode.Uri {
1467
return extHostDebugService.asDebugSourceUri(source, session);
1468
}
1469
};
1470
1471
const tasks: typeof vscode.tasks = {
1472
registerTaskProvider: (type: string, provider: vscode.TaskProvider) => {
1473
return extHostTask.registerTaskProvider(extension, type, provider);
1474
},
1475
fetchTasks: (filter?: vscode.TaskFilter): Thenable<vscode.Task[]> => {
1476
return extHostTask.fetchTasks(filter);
1477
},
1478
executeTask: (task: vscode.Task): Thenable<vscode.TaskExecution> => {
1479
return extHostTask.executeTask(extension, task);
1480
},
1481
get taskExecutions(): vscode.TaskExecution[] {
1482
return extHostTask.taskExecutions;
1483
},
1484
onDidStartTask: (listener: (e: vscode.TaskStartEvent) => any, thisArgs?: any, disposables?) => {
1485
const wrappedListener = (event: vscode.TaskStartEvent) => {
1486
if (!isProposedApiEnabled(extension, 'taskExecutionTerminal')) {
1487
if (event?.execution?.terminal !== undefined) {
1488
event.execution.terminal = undefined;
1489
}
1490
}
1491
const eventWithExecution = {
1492
...event,
1493
execution: event.execution
1494
};
1495
return listener.call(thisArgs, eventWithExecution);
1496
};
1497
return _asExtensionEvent(extHostTask.onDidStartTask)(wrappedListener, thisArgs, disposables);
1498
},
1499
onDidEndTask: (listeners, thisArgs?, disposables?) => {
1500
return _asExtensionEvent(extHostTask.onDidEndTask)(listeners, thisArgs, disposables);
1501
},
1502
onDidStartTaskProcess: (listeners, thisArgs?, disposables?) => {
1503
return _asExtensionEvent(extHostTask.onDidStartTaskProcess)(listeners, thisArgs, disposables);
1504
},
1505
onDidEndTaskProcess: (listeners, thisArgs?, disposables?) => {
1506
return _asExtensionEvent(extHostTask.onDidEndTaskProcess)(listeners, thisArgs, disposables);
1507
},
1508
onDidStartTaskProblemMatchers: (listeners, thisArgs?, disposables?) => {
1509
checkProposedApiEnabled(extension, 'taskProblemMatcherStatus');
1510
return _asExtensionEvent(extHostTask.onDidStartTaskProblemMatchers)(listeners, thisArgs, disposables);
1511
},
1512
onDidEndTaskProblemMatchers: (listeners, thisArgs?, disposables?) => {
1513
checkProposedApiEnabled(extension, 'taskProblemMatcherStatus');
1514
return _asExtensionEvent(extHostTask.onDidEndTaskProblemMatchers)(listeners, thisArgs, disposables);
1515
}
1516
};
1517
1518
// namespace: notebook
1519
const notebooks: typeof vscode.notebooks = {
1520
createNotebookController(id: string, notebookType: string, label: string, handler?, rendererScripts?: vscode.NotebookRendererScript[]) {
1521
return extHostNotebookKernels.createNotebookController(extension, id, notebookType, label, handler, isProposedApiEnabled(extension, 'notebookMessaging') ? rendererScripts : undefined);
1522
},
1523
registerNotebookCellStatusBarItemProvider: (notebookType: string, provider: vscode.NotebookCellStatusBarItemProvider) => {
1524
return extHostNotebook.registerNotebookCellStatusBarItemProvider(extension, notebookType, provider);
1525
},
1526
createRendererMessaging(rendererId) {
1527
return extHostNotebookRenderers.createRendererMessaging(extension, rendererId);
1528
},
1529
createNotebookControllerDetectionTask(notebookType: string) {
1530
checkProposedApiEnabled(extension, 'notebookKernelSource');
1531
return extHostNotebookKernels.createNotebookControllerDetectionTask(extension, notebookType);
1532
},
1533
registerKernelSourceActionProvider(notebookType: string, provider: vscode.NotebookKernelSourceActionProvider) {
1534
checkProposedApiEnabled(extension, 'notebookKernelSource');
1535
return extHostNotebookKernels.registerKernelSourceActionProvider(extension, notebookType, provider);
1536
},
1537
};
1538
1539
// namespace: l10n
1540
const l10n: typeof vscode.l10n = {
1541
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 {
1542
if (typeof params[0] === 'string') {
1543
const key = params.shift() as string;
1544
1545
// We have either rest args which are Array<string | number | boolean> or an array with a single Record<string, any>.
1546
// This ensures we get a Record<string | number, any> which will be formatted correctly.
1547
const argsFormatted = !params || typeof params[0] !== 'object' ? params : params[0];
1548
return extHostLocalization.getMessage(extension.identifier.value, { message: key, args: argsFormatted as Record<string | number, any> | undefined });
1549
}
1550
1551
return extHostLocalization.getMessage(extension.identifier.value, params[0]);
1552
},
1553
get bundle() {
1554
return extHostLocalization.getBundle(extension.identifier.value);
1555
},
1556
get uri() {
1557
return extHostLocalization.getBundleUri(extension.identifier.value);
1558
}
1559
};
1560
1561
// namespace: interactive
1562
const interactive: typeof vscode.interactive = {
1563
transferActiveChat(toWorkspace: vscode.Uri): Thenable<void> {
1564
checkProposedApiEnabled(extension, 'interactive');
1565
return extHostChatAgents2.transferActiveChat(toWorkspace);
1566
}
1567
};
1568
1569
// namespace: ai
1570
const ai: typeof vscode.ai = {
1571
getRelatedInformation(query: string, types: vscode.RelatedInformationType[]): Thenable<vscode.RelatedInformationResult[]> {
1572
checkProposedApiEnabled(extension, 'aiRelatedInformation');
1573
return extHostAiRelatedInformation.getRelatedInformation(extension, query, types);
1574
},
1575
registerRelatedInformationProvider(type: vscode.RelatedInformationType, provider: vscode.RelatedInformationProvider) {
1576
checkProposedApiEnabled(extension, 'aiRelatedInformation');
1577
return extHostAiRelatedInformation.registerRelatedInformationProvider(extension, type, provider);
1578
},
1579
registerEmbeddingVectorProvider(model: string, provider: vscode.EmbeddingVectorProvider) {
1580
checkProposedApiEnabled(extension, 'aiRelatedInformation');
1581
return extHostAiEmbeddingVector.registerEmbeddingVectorProvider(extension, model, provider);
1582
},
1583
registerSettingsSearchProvider(provider: vscode.SettingsSearchProvider) {
1584
checkProposedApiEnabled(extension, 'aiSettingsSearch');
1585
return extHostAiSettingsSearch.registerSettingsSearchProvider(extension, provider);
1586
}
1587
};
1588
1589
// namespace: chatregisterMcpServerDefinitionProvider
1590
const chat: typeof vscode.chat = {
1591
registerMappedEditsProvider(_selector: vscode.DocumentSelector, _provider: vscode.MappedEditsProvider) {
1592
checkProposedApiEnabled(extension, 'mappedEditsProvider');
1593
// no longer supported
1594
return { dispose() { } };
1595
},
1596
registerMappedEditsProvider2(provider: vscode.MappedEditsProvider2) {
1597
checkProposedApiEnabled(extension, 'mappedEditsProvider');
1598
return extHostCodeMapper.registerMappedEditsProvider(extension, provider);
1599
},
1600
createChatParticipant(id: string, handler: vscode.ChatExtendedRequestHandler) {
1601
return extHostChatAgents2.createChatAgent(extension, id, handler);
1602
},
1603
createDynamicChatParticipant(id: string, dynamicProps: vscode.DynamicChatParticipantProps, handler: vscode.ChatExtendedRequestHandler): vscode.ChatParticipant {
1604
checkProposedApiEnabled(extension, 'chatParticipantPrivate');
1605
return extHostChatAgents2.createDynamicChatAgent(extension, id, dynamicProps, handler);
1606
},
1607
registerChatParticipantDetectionProvider(provider: vscode.ChatParticipantDetectionProvider) {
1608
checkProposedApiEnabled(extension, 'chatParticipantPrivate');
1609
return extHostChatAgents2.registerChatParticipantDetectionProvider(extension, provider);
1610
},
1611
onDidDisposeChatSession: (listeners, thisArgs?, disposables?) => {
1612
checkProposedApiEnabled(extension, 'chatParticipantPrivate');
1613
return _asExtensionEvent(extHostChatAgents2.onDidDisposeChatSession)(listeners, thisArgs, disposables);
1614
},
1615
registerChatSessionItemProvider: (chatSessionType: string, provider: vscode.ChatSessionItemProvider) => {
1616
checkProposedApiEnabled(extension, 'chatSessionsProvider');
1617
return extHostChatSessions.registerChatSessionItemProvider(extension, chatSessionType, provider);
1618
},
1619
createChatSessionItemController: (chatSessionType: string, refreshHandler: (token: vscode.CancellationToken) => Thenable<void>) => {
1620
checkProposedApiEnabled(extension, 'chatSessionsProvider');
1621
return extHostChatSessions.createChatSessionItemController(extension, chatSessionType, refreshHandler);
1622
},
1623
registerChatSessionContentProvider(scheme: string, provider: vscode.ChatSessionContentProvider, chatParticipant: vscode.ChatParticipant, capabilities?: vscode.ChatSessionCapabilities) {
1624
checkProposedApiEnabled(extension, 'chatSessionsProvider');
1625
return extHostChatSessions.registerChatSessionContentProvider(extension, scheme, chatParticipant, provider, capabilities);
1626
},
1627
registerChatOutputRenderer: (viewType: string, renderer: vscode.ChatOutputRenderer) => {
1628
checkProposedApiEnabled(extension, 'chatOutputRenderer');
1629
return extHostChatOutputRenderer.registerChatOutputRenderer(extension, viewType, renderer);
1630
},
1631
registerChatWorkspaceContextProvider(id: string, provider: vscode.ChatWorkspaceContextProvider): vscode.Disposable {
1632
checkProposedApiEnabled(extension, 'chatContextProvider');
1633
return extHostChatContext.registerChatWorkspaceContextProvider(`${extension.id}-${id}`, provider);
1634
},
1635
registerChatExplicitContextProvider(id: string, provider: vscode.ChatExplicitContextProvider): vscode.Disposable {
1636
checkProposedApiEnabled(extension, 'chatContextProvider');
1637
return extHostChatContext.registerChatExplicitContextProvider(`${extension.id}-${id}`, provider);
1638
},
1639
registerChatResourceContextProvider(selector: vscode.DocumentSelector, id: string, provider: vscode.ChatResourceContextProvider): vscode.Disposable {
1640
checkProposedApiEnabled(extension, 'chatContextProvider');
1641
return extHostChatContext.registerChatResourceContextProvider(checkSelector(selector), `${extension.id}-${id}`, provider);
1642
},
1643
/** @deprecated Use registerChatWorkspaceContextProvider, registerChatExplicitContextProvider, or registerChatResourceContextProvider instead. */
1644
registerChatContextProvider(selector: vscode.DocumentSelector | undefined, id: string, provider: vscode.ChatContextProvider): vscode.Disposable {
1645
checkProposedApiEnabled(extension, 'chatContextProvider');
1646
return extHostChatContext.registerChatContextProvider(selector ? checkSelector(selector) : undefined, `${extension.id}-${id}`, provider);
1647
},
1648
registerCustomAgentProvider(provider: vscode.ChatCustomAgentProvider): vscode.Disposable {
1649
checkProposedApiEnabled(extension, 'chatPromptFiles');
1650
return extHostChatAgents2.registerPromptFileProvider(extension, PromptsType.agent, provider);
1651
},
1652
registerInstructionsProvider(provider: vscode.ChatInstructionsProvider): vscode.Disposable {
1653
checkProposedApiEnabled(extension, 'chatPromptFiles');
1654
return extHostChatAgents2.registerPromptFileProvider(extension, PromptsType.instructions, provider);
1655
},
1656
registerPromptFileProvider(provider: vscode.ChatPromptFileProvider): vscode.Disposable {
1657
checkProposedApiEnabled(extension, 'chatPromptFiles');
1658
return extHostChatAgents2.registerPromptFileProvider(extension, PromptsType.prompt, provider);
1659
},
1660
registerSkillProvider(provider: vscode.ChatSkillProvider): vscode.Disposable {
1661
checkProposedApiEnabled(extension, 'chatPromptFiles');
1662
return extHostChatAgents2.registerPromptFileProvider(extension, PromptsType.skill, provider);
1663
},
1664
async executeHook(hookType: vscode.ChatHookType, options: vscode.ChatHookExecutionOptions, token?: vscode.CancellationToken): Promise<vscode.ChatHookResult[]> {
1665
checkProposedApiEnabled(extension, 'chatHooks');
1666
return extHostHooks.executeHook(hookType, options, token);
1667
},
1668
};
1669
1670
// namespace: lm
1671
const lm: typeof vscode.lm = {
1672
selectChatModels: (selector) => {
1673
return extHostLanguageModels.selectLanguageModels(extension, selector ?? {});
1674
},
1675
onDidChangeChatModels: (listener, thisArgs?, disposables?) => {
1676
return extHostLanguageModels.onDidChangeProviders(listener, thisArgs, disposables);
1677
},
1678
registerLanguageModelChatProvider: (vendor, provider) => {
1679
return extHostLanguageModels.registerLanguageModelChatProvider(extension, vendor, provider);
1680
},
1681
get isModelProxyAvailable() {
1682
checkProposedApiEnabled(extension, 'languageModelProxy');
1683
return extHostLanguageModels.isModelProxyAvailable;
1684
},
1685
onDidChangeModelProxyAvailability: (listener, thisArgs?, disposables?) => {
1686
checkProposedApiEnabled(extension, 'languageModelProxy');
1687
return extHostLanguageModels.onDidChangeModelProxyAvailability(listener, thisArgs, disposables);
1688
},
1689
getModelProxy: () => {
1690
checkProposedApiEnabled(extension, 'languageModelProxy');
1691
return extHostLanguageModels.getModelProxy(extension);
1692
},
1693
registerLanguageModelProxyProvider: (provider) => {
1694
checkProposedApiEnabled(extension, 'chatParticipantPrivate');
1695
return extHostLanguageModels.registerLanguageModelProxyProvider(extension, provider);
1696
},
1697
// --- embeddings
1698
get embeddingModels() {
1699
checkProposedApiEnabled(extension, 'embeddings');
1700
return extHostEmbeddings.embeddingsModels;
1701
},
1702
onDidChangeEmbeddingModels: (listener, thisArgs?, disposables?) => {
1703
checkProposedApiEnabled(extension, 'embeddings');
1704
return extHostEmbeddings.onDidChange(listener, thisArgs, disposables);
1705
},
1706
registerEmbeddingsProvider(embeddingsModel, provider) {
1707
checkProposedApiEnabled(extension, 'embeddings');
1708
return extHostEmbeddings.registerEmbeddingsProvider(extension, embeddingsModel, provider);
1709
},
1710
async computeEmbeddings(embeddingsModel, input, token?): Promise<any> {
1711
checkProposedApiEnabled(extension, 'embeddings');
1712
if (typeof input === 'string') {
1713
return extHostEmbeddings.computeEmbeddings(embeddingsModel, input, token);
1714
} else {
1715
return extHostEmbeddings.computeEmbeddings(embeddingsModel, input, token);
1716
}
1717
},
1718
registerTool<T>(name: string, tool: vscode.LanguageModelTool<T>) {
1719
return extHostLanguageModelTools.registerTool(extension, name, tool);
1720
},
1721
registerToolDefinition<T>(definition: vscode.LanguageModelToolDefinition, tool: vscode.LanguageModelTool<T>) {
1722
return extHostLanguageModelTools.registerToolDefinition(extension, definition, tool);
1723
},
1724
invokeTool<T>(nameOrInfo: string | vscode.LanguageModelToolInformation, parameters: vscode.LanguageModelToolInvocationOptions<T>, token?: vscode.CancellationToken) {
1725
if (typeof nameOrInfo !== 'string') {
1726
checkProposedApiEnabled(extension, 'chatParticipantAdditions');
1727
}
1728
return extHostLanguageModelTools.invokeTool(extension, nameOrInfo, parameters, token);
1729
},
1730
get tools() {
1731
return extHostLanguageModelTools.getTools(extension);
1732
},
1733
fileIsIgnored(uri: vscode.Uri, token?: vscode.CancellationToken) {
1734
return extHostLanguageModels.fileIsIgnored(extension, uri, token);
1735
},
1736
registerIgnoredFileProvider(provider: vscode.LanguageModelIgnoredFileProvider) {
1737
return extHostLanguageModels.registerIgnoredFileProvider(extension, provider);
1738
},
1739
registerMcpServerDefinitionProvider(id, provider) {
1740
return extHostMcp.registerMcpConfigurationProvider(extension, id, provider);
1741
},
1742
onDidChangeMcpServerDefinitions: (...args) => {
1743
checkProposedApiEnabled(extension, 'mcpServerDefinitions');
1744
return _asExtensionEvent(extHostMcp.onDidChangeMcpServerDefinitions)(...args);
1745
},
1746
get mcpServerDefinitions() {
1747
checkProposedApiEnabled(extension, 'mcpServerDefinitions');
1748
return extHostMcp.mcpServerDefinitions;
1749
},
1750
startMcpGateway() {
1751
checkProposedApiEnabled(extension, 'mcpServerDefinitions');
1752
return extHostMcp.startMcpGateway();
1753
},
1754
onDidChangeChatRequestTools(...args) {
1755
checkProposedApiEnabled(extension, 'chatParticipantAdditions');
1756
return _asExtensionEvent(extHostChatAgents2.onDidChangeChatRequestTools)(...args);
1757
}
1758
};
1759
1760
// namespace: speech
1761
const speech: typeof vscode.speech = {
1762
registerSpeechProvider(id: string, provider: vscode.SpeechProvider) {
1763
checkProposedApiEnabled(extension, 'speech');
1764
return extHostSpeech.registerProvider(extension.identifier, id, provider);
1765
}
1766
};
1767
1768
// eslint-disable-next-line local/code-no-dangerous-type-assertions
1769
return <typeof vscode>{
1770
version: initData.version,
1771
// namespaces
1772
ai,
1773
authentication,
1774
commands,
1775
comments,
1776
chat,
1777
debug,
1778
env,
1779
extensions,
1780
interactive,
1781
l10n,
1782
languages,
1783
lm,
1784
notebooks,
1785
scm,
1786
speech,
1787
tasks,
1788
tests,
1789
window,
1790
workspace,
1791
// types
1792
Breakpoint: extHostTypes.Breakpoint,
1793
TerminalOutputAnchor: extHostTypes.TerminalOutputAnchor,
1794
ChatResultFeedbackKind: extHostTypes.ChatResultFeedbackKind,
1795
ChatVariableLevel: extHostTypes.ChatVariableLevel,
1796
ChatCompletionItem: extHostTypes.ChatCompletionItem,
1797
ChatReferenceDiagnostic: extHostTypes.ChatReferenceDiagnostic,
1798
CallHierarchyIncomingCall: extHostTypes.CallHierarchyIncomingCall,
1799
CallHierarchyItem: extHostTypes.CallHierarchyItem,
1800
CallHierarchyOutgoingCall: extHostTypes.CallHierarchyOutgoingCall,
1801
CancellationError: errors.CancellationError,
1802
CancellationTokenSource: CancellationTokenSource,
1803
CandidatePortSource: CandidatePortSource,
1804
CodeAction: extHostTypes.CodeAction,
1805
CodeActionKind: extHostTypes.CodeActionKind,
1806
CodeActionTriggerKind: extHostTypes.CodeActionTriggerKind,
1807
CodeLens: extHostTypes.CodeLens,
1808
Color: extHostTypes.Color,
1809
ColorInformation: extHostTypes.ColorInformation,
1810
ColorPresentation: extHostTypes.ColorPresentation,
1811
ColorThemeKind: extHostTypes.ColorThemeKind,
1812
CommentMode: extHostTypes.CommentMode,
1813
CommentState: extHostTypes.CommentState,
1814
CommentThreadCollapsibleState: extHostTypes.CommentThreadCollapsibleState,
1815
CommentThreadState: extHostTypes.CommentThreadState,
1816
CommentThreadApplicability: extHostTypes.CommentThreadApplicability,
1817
CommentThreadFocus: extHostTypes.CommentThreadFocus,
1818
CompletionItem: extHostTypes.CompletionItem,
1819
CompletionItemKind: extHostTypes.CompletionItemKind,
1820
CompletionItemTag: extHostTypes.CompletionItemTag,
1821
CompletionList: extHostTypes.CompletionList,
1822
CompletionTriggerKind: extHostTypes.CompletionTriggerKind,
1823
ConfigurationTarget: extHostTypes.ConfigurationTarget,
1824
CustomExecution: extHostTypes.CustomExecution,
1825
DebugAdapterExecutable: extHostTypes.DebugAdapterExecutable,
1826
DebugAdapterInlineImplementation: extHostTypes.DebugAdapterInlineImplementation,
1827
DebugAdapterNamedPipeServer: extHostTypes.DebugAdapterNamedPipeServer,
1828
DebugAdapterServer: extHostTypes.DebugAdapterServer,
1829
DebugConfigurationProviderTriggerKind: DebugConfigurationProviderTriggerKind,
1830
DebugConsoleMode: extHostTypes.DebugConsoleMode,
1831
DebugVisualization: extHostTypes.DebugVisualization,
1832
DecorationRangeBehavior: extHostTypes.DecorationRangeBehavior,
1833
Diagnostic: extHostTypes.Diagnostic,
1834
DiagnosticRelatedInformation: extHostTypes.DiagnosticRelatedInformation,
1835
DiagnosticSeverity: extHostTypes.DiagnosticSeverity,
1836
DiagnosticTag: extHostTypes.DiagnosticTag,
1837
Disposable: extHostTypes.Disposable,
1838
DocumentHighlight: extHostTypes.DocumentHighlight,
1839
DocumentHighlightKind: extHostTypes.DocumentHighlightKind,
1840
MultiDocumentHighlight: extHostTypes.MultiDocumentHighlight,
1841
DocumentLink: extHostTypes.DocumentLink,
1842
DocumentSymbol: extHostTypes.DocumentSymbol,
1843
EndOfLine: extHostTypes.EndOfLine,
1844
EnvironmentVariableMutatorType: extHostTypes.EnvironmentVariableMutatorType,
1845
EvaluatableExpression: extHostTypes.EvaluatableExpression,
1846
InlineValueText: extHostTypes.InlineValueText,
1847
InlineValueVariableLookup: extHostTypes.InlineValueVariableLookup,
1848
InlineValueEvaluatableExpression: extHostTypes.InlineValueEvaluatableExpression,
1849
InlineCompletionTriggerKind: extHostTypes.InlineCompletionTriggerKind,
1850
InlineCompletionsDisposeReasonKind: extHostTypes.InlineCompletionsDisposeReasonKind,
1851
EventEmitter: Emitter,
1852
ExtensionKind: extHostTypes.ExtensionKind,
1853
ExtensionMode: extHostTypes.ExtensionMode,
1854
ExternalUriOpenerPriority: extHostTypes.ExternalUriOpenerPriority,
1855
FileChangeType: extHostTypes.FileChangeType,
1856
FileDecoration: extHostTypes.FileDecoration,
1857
FileDecoration2: extHostTypes.FileDecoration,
1858
FileSystemError: extHostTypes.FileSystemError,
1859
FileType: files.FileType,
1860
FilePermission: files.FilePermission,
1861
FoldingRange: extHostTypes.FoldingRange,
1862
FoldingRangeKind: extHostTypes.FoldingRangeKind,
1863
FunctionBreakpoint: extHostTypes.FunctionBreakpoint,
1864
InlineCompletionItem: extHostTypes.InlineSuggestion,
1865
InlineCompletionList: extHostTypes.InlineSuggestionList,
1866
Hover: extHostTypes.Hover,
1867
VerboseHover: extHostTypes.VerboseHover,
1868
HoverVerbosityAction: extHostTypes.HoverVerbosityAction,
1869
IndentAction: languageConfiguration.IndentAction,
1870
Location: extHostTypes.Location,
1871
MarkdownString: extHostTypes.MarkdownString,
1872
OverviewRulerLane: OverviewRulerLane,
1873
ParameterInformation: extHostTypes.ParameterInformation,
1874
PortAutoForwardAction: extHostTypes.PortAutoForwardAction,
1875
Position: extHostTypes.Position,
1876
ProcessExecution: extHostTypes.ProcessExecution,
1877
ProgressLocation: extHostTypes.ProgressLocation,
1878
QuickInputButtonLocation: extHostTypes.QuickInputButtonLocation,
1879
QuickInputButtons: extHostTypes.QuickInputButtons,
1880
Range: extHostTypes.Range,
1881
RelativePattern: extHostTypes.RelativePattern,
1882
Selection: extHostTypes.Selection,
1883
SelectionRange: extHostTypes.SelectionRange,
1884
SemanticTokens: extHostTypes.SemanticTokens,
1885
SemanticTokensBuilder: extHostTypes.SemanticTokensBuilder,
1886
SemanticTokensEdit: extHostTypes.SemanticTokensEdit,
1887
SemanticTokensEdits: extHostTypes.SemanticTokensEdits,
1888
SemanticTokensLegend: extHostTypes.SemanticTokensLegend,
1889
ShellExecution: extHostTypes.ShellExecution,
1890
ShellQuoting: extHostTypes.ShellQuoting,
1891
SignatureHelp: extHostTypes.SignatureHelp,
1892
SignatureHelpTriggerKind: extHostTypes.SignatureHelpTriggerKind,
1893
SignatureInformation: extHostTypes.SignatureInformation,
1894
SnippetString: extHostTypes.SnippetString,
1895
SourceBreakpoint: extHostTypes.SourceBreakpoint,
1896
StandardTokenType: extHostTypes.StandardTokenType,
1897
StatusBarAlignment: extHostTypes.StatusBarAlignment,
1898
SymbolInformation: extHostTypes.SymbolInformation,
1899
SymbolKind: extHostTypes.SymbolKind,
1900
SymbolTag: extHostTypes.SymbolTag,
1901
Task: extHostTypes.Task,
1902
TaskEventKind: extHostTypes.TaskEventKind,
1903
TaskGroup: extHostTypes.TaskGroup,
1904
TaskPanelKind: extHostTypes.TaskPanelKind,
1905
TaskRevealKind: extHostTypes.TaskRevealKind,
1906
TaskScope: extHostTypes.TaskScope,
1907
TerminalLink: extHostTypes.TerminalLink,
1908
TerminalQuickFixTerminalCommand: extHostTypes.TerminalQuickFixCommand,
1909
TerminalQuickFixOpener: extHostTypes.TerminalQuickFixOpener,
1910
TerminalLocation: extHostTypes.TerminalLocation,
1911
TerminalProfile: extHostTypes.TerminalProfile,
1912
TerminalExitReason: extHostTypes.TerminalExitReason,
1913
TerminalShellExecutionCommandLineConfidence: extHostTypes.TerminalShellExecutionCommandLineConfidence,
1914
TerminalCompletionItem: extHostTypes.TerminalCompletionItem,
1915
TerminalCompletionItemKind: extHostTypes.TerminalCompletionItemKind,
1916
TerminalCompletionList: extHostTypes.TerminalCompletionList,
1917
TerminalShellType: extHostTypes.TerminalShellType,
1918
TextDocumentSaveReason: extHostTypes.TextDocumentSaveReason,
1919
TextEdit: extHostTypes.TextEdit,
1920
SnippetTextEdit: extHostTypes.SnippetTextEdit,
1921
TextEditorCursorStyle: TextEditorCursorStyle,
1922
TextEditorChangeKind: extHostTypes.TextEditorChangeKind,
1923
TextEditorLineNumbersStyle: extHostTypes.TextEditorLineNumbersStyle,
1924
TextEditorRevealType: extHostTypes.TextEditorRevealType,
1925
TextEditorSelectionChangeKind: extHostTypes.TextEditorSelectionChangeKind,
1926
SyntaxTokenType: extHostTypes.SyntaxTokenType,
1927
TextDocumentChangeReason: extHostTypes.TextDocumentChangeReason,
1928
ThemeColor: extHostTypes.ThemeColor,
1929
ThemeIcon: extHostTypes.ThemeIcon,
1930
TreeItem: extHostTypes.TreeItem,
1931
TreeItemCheckboxState: extHostTypes.TreeItemCheckboxState,
1932
TreeItemCollapsibleState: extHostTypes.TreeItemCollapsibleState,
1933
TypeHierarchyItem: extHostTypes.TypeHierarchyItem,
1934
UIKind: UIKind,
1935
Uri: URI,
1936
ViewColumn: extHostTypes.ViewColumn,
1937
WorkspaceEdit: extHostTypes.WorkspaceEdit,
1938
// proposed api types
1939
DocumentPasteTriggerKind: extHostTypes.DocumentPasteTriggerKind,
1940
DocumentDropEdit: extHostTypes.DocumentDropEdit,
1941
DocumentDropOrPasteEditKind: extHostTypes.DocumentDropOrPasteEditKind,
1942
DocumentPasteEdit: extHostTypes.DocumentPasteEdit,
1943
InlayHint: extHostTypes.InlayHint,
1944
InlayHintLabelPart: extHostTypes.InlayHintLabelPart,
1945
InlayHintKind: extHostTypes.InlayHintKind,
1946
RemoteAuthorityResolverError: extHostTypes.RemoteAuthorityResolverError,
1947
ResolvedAuthority: extHostTypes.ResolvedAuthority,
1948
ManagedResolvedAuthority: extHostTypes.ManagedResolvedAuthority,
1949
SourceControlInputBoxValidationType: extHostTypes.SourceControlInputBoxValidationType,
1950
ExtensionRuntime: extHostTypes.ExtensionRuntime,
1951
TimelineItem: extHostTypes.TimelineItem,
1952
NotebookRange: extHostTypes.NotebookRange,
1953
NotebookCellKind: extHostTypes.NotebookCellKind,
1954
NotebookCellExecutionState: extHostTypes.NotebookCellExecutionState,
1955
NotebookCellData: extHostTypes.NotebookCellData,
1956
NotebookData: extHostTypes.NotebookData,
1957
NotebookRendererScript: extHostTypes.NotebookRendererScript,
1958
NotebookCellStatusBarAlignment: extHostTypes.NotebookCellStatusBarAlignment,
1959
NotebookEditorRevealType: extHostTypes.NotebookEditorRevealType,
1960
NotebookCellOutput: extHostTypes.NotebookCellOutput,
1961
NotebookCellOutputItem: extHostTypes.NotebookCellOutputItem,
1962
CellErrorStackFrame: extHostTypes.CellErrorStackFrame,
1963
NotebookCellStatusBarItem: extHostTypes.NotebookCellStatusBarItem,
1964
NotebookControllerAffinity: extHostTypes.NotebookControllerAffinity,
1965
NotebookControllerAffinity2: extHostTypes.NotebookControllerAffinity2,
1966
NotebookEdit: extHostTypes.NotebookEdit,
1967
NotebookKernelSourceAction: extHostTypes.NotebookKernelSourceAction,
1968
NotebookVariablesRequestKind: extHostTypes.NotebookVariablesRequestKind,
1969
PortAttributes: extHostTypes.PortAttributes,
1970
LinkedEditingRanges: extHostTypes.LinkedEditingRanges,
1971
TestResultState: extHostTypes.TestResultState,
1972
TestRunRequest: extHostTypes.TestRunRequest,
1973
TestMessage: extHostTypes.TestMessage,
1974
TestMessageStackFrame: extHostTypes.TestMessageStackFrame,
1975
TestTag: extHostTypes.TestTag,
1976
TestRunProfileKind: extHostTypes.TestRunProfileKind,
1977
TextSearchCompleteMessageType: TextSearchCompleteMessageType,
1978
DataTransfer: extHostTypes.DataTransfer,
1979
DataTransferItem: extHostTypes.DataTransferItem,
1980
TestCoverageCount: extHostTypes.TestCoverageCount,
1981
FileCoverage: extHostTypes.FileCoverage,
1982
StatementCoverage: extHostTypes.StatementCoverage,
1983
BranchCoverage: extHostTypes.BranchCoverage,
1984
DeclarationCoverage: extHostTypes.DeclarationCoverage,
1985
WorkspaceTrustState: extHostTypes.WorkspaceTrustState,
1986
LanguageStatusSeverity: extHostTypes.LanguageStatusSeverity,
1987
QuickPickItemKind: extHostTypes.QuickPickItemKind,
1988
InputBoxValidationSeverity: extHostTypes.InputBoxValidationSeverity,
1989
TabInputText: extHostTypes.TextTabInput,
1990
TabInputTextDiff: extHostTypes.TextDiffTabInput,
1991
TabInputTextMerge: extHostTypes.TextMergeTabInput,
1992
TabInputCustom: extHostTypes.CustomEditorTabInput,
1993
TabInputNotebook: extHostTypes.NotebookEditorTabInput,
1994
TabInputNotebookDiff: extHostTypes.NotebookDiffEditorTabInput,
1995
TabInputWebview: extHostTypes.WebviewEditorTabInput,
1996
TabInputTerminal: extHostTypes.TerminalEditorTabInput,
1997
TabInputInteractiveWindow: extHostTypes.InteractiveWindowInput,
1998
TabInputChat: extHostTypes.ChatEditorTabInput,
1999
TabInputTextMultiDiff: extHostTypes.TextMultiDiffTabInput,
2000
TelemetryTrustedValue: TelemetryTrustedValue,
2001
LogLevel: LogLevel,
2002
EditSessionIdentityMatch: EditSessionIdentityMatch,
2003
InteractiveSessionVoteDirection: extHostTypes.InteractiveSessionVoteDirection,
2004
ChatCopyKind: extHostTypes.ChatCopyKind,
2005
ChatSessionChangedFile: extHostTypes.ChatSessionChangedFile,
2006
ChatSessionChangedFile2: extHostTypes.ChatSessionChangedFile2,
2007
ChatEditingSessionActionOutcome: extHostTypes.ChatEditingSessionActionOutcome,
2008
InteractiveEditorResponseFeedbackKind: extHostTypes.InteractiveEditorResponseFeedbackKind,
2009
DebugStackFrame: extHostTypes.DebugStackFrame,
2010
DebugThread: extHostTypes.DebugThread,
2011
RelatedInformationType: extHostTypes.RelatedInformationType,
2012
SpeechToTextStatus: extHostTypes.SpeechToTextStatus,
2013
TextToSpeechStatus: extHostTypes.TextToSpeechStatus,
2014
PartialAcceptTriggerKind: extHostTypes.PartialAcceptTriggerKind,
2015
InlineCompletionEndOfLifeReasonKind: extHostTypes.InlineCompletionEndOfLifeReasonKind,
2016
InlineCompletionDisplayLocationKind: extHostTypes.InlineCompletionDisplayLocationKind,
2017
KeywordRecognitionStatus: extHostTypes.KeywordRecognitionStatus,
2018
ChatImageMimeType: extHostTypes.ChatImageMimeType,
2019
ChatResponseMarkdownPart: extHostTypes.ChatResponseMarkdownPart,
2020
ChatResponseFileTreePart: extHostTypes.ChatResponseFileTreePart,
2021
ChatResponseAnchorPart: extHostTypes.ChatResponseAnchorPart,
2022
ChatResponseProgressPart: extHostTypes.ChatResponseProgressPart,
2023
ChatResponseProgressPart2: extHostTypes.ChatResponseProgressPart2,
2024
ChatResponseThinkingProgressPart: extHostTypes.ChatResponseThinkingProgressPart,
2025
ChatResponseHookPart: extHostTypes.ChatResponseHookPart,
2026
ChatResponseReferencePart: extHostTypes.ChatResponseReferencePart,
2027
ChatResponseReferencePart2: extHostTypes.ChatResponseReferencePart,
2028
ChatResponseCodeCitationPart: extHostTypes.ChatResponseCodeCitationPart,
2029
ChatResponseCodeblockUriPart: extHostTypes.ChatResponseCodeblockUriPart,
2030
ChatResponseWarningPart: extHostTypes.ChatResponseWarningPart,
2031
ChatResponseTextEditPart: extHostTypes.ChatResponseTextEditPart,
2032
ChatResponseNotebookEditPart: extHostTypes.ChatResponseNotebookEditPart,
2033
ChatResponseWorkspaceEditPart: extHostTypes.ChatResponseWorkspaceEditPart,
2034
ChatResponseMarkdownWithVulnerabilitiesPart: extHostTypes.ChatResponseMarkdownWithVulnerabilitiesPart,
2035
ChatResponseCommandButtonPart: extHostTypes.ChatResponseCommandButtonPart,
2036
ChatResponseConfirmationPart: extHostTypes.ChatResponseConfirmationPart,
2037
ChatQuestion: extHostTypes.ChatQuestion,
2038
ChatQuestionType: extHostTypes.ChatQuestionType,
2039
ChatResponseQuestionCarouselPart: extHostTypes.ChatResponseQuestionCarouselPart,
2040
ChatResponseMovePart: extHostTypes.ChatResponseMovePart,
2041
ChatResponseExtensionsPart: extHostTypes.ChatResponseExtensionsPart,
2042
ChatResponseExternalEditPart: extHostTypes.ChatResponseExternalEditPart,
2043
ChatResponsePullRequestPart: extHostTypes.ChatResponsePullRequestPart,
2044
ChatResponseMultiDiffPart: extHostTypes.ChatResponseMultiDiffPart,
2045
ChatResponseReferencePartStatusKind: extHostTypes.ChatResponseReferencePartStatusKind,
2046
ChatResponseClearToPreviousToolInvocationReason: extHostTypes.ChatResponseClearToPreviousToolInvocationReason,
2047
ChatRequestTurn: extHostTypes.ChatRequestTurn,
2048
ChatRequestTurn2: extHostTypes.ChatRequestTurn,
2049
ChatResponseTurn: extHostTypes.ChatResponseTurn,
2050
ChatResponseTurn2: extHostTypes.ChatResponseTurn2,
2051
ChatToolInvocationPart: extHostTypes.ChatToolInvocationPart,
2052
ChatLocation: extHostTypes.ChatLocation,
2053
ChatSessionStatus: extHostTypes.ChatSessionStatus,
2054
ChatRequestEditorData: extHostTypes.ChatRequestEditorData,
2055
ChatRequestNotebookData: extHostTypes.ChatRequestNotebookData,
2056
ChatReferenceBinaryData: extHostTypes.ChatReferenceBinaryData,
2057
ChatRequestEditedFileEventKind: extHostTypes.ChatRequestEditedFileEventKind,
2058
LanguageModelChatMessageRole: extHostTypes.LanguageModelChatMessageRole,
2059
LanguageModelChatMessage: extHostTypes.LanguageModelChatMessage,
2060
LanguageModelChatMessage2: extHostTypes.LanguageModelChatMessage2,
2061
LanguageModelToolResultPart: extHostTypes.LanguageModelToolResultPart,
2062
LanguageModelToolResultPart2: extHostTypes.LanguageModelToolResultPart,
2063
LanguageModelTextPart: extHostTypes.LanguageModelTextPart,
2064
LanguageModelTextPart2: extHostTypes.LanguageModelTextPart,
2065
LanguageModelPartAudience: extHostTypes.LanguageModelPartAudience,
2066
ToolResultAudience: extHostTypes.LanguageModelPartAudience, // back compat
2067
LanguageModelToolCallPart: extHostTypes.LanguageModelToolCallPart,
2068
LanguageModelThinkingPart: extHostTypes.LanguageModelThinkingPart,
2069
LanguageModelError: extHostTypes.LanguageModelError,
2070
LanguageModelToolResult: extHostTypes.LanguageModelToolResult,
2071
LanguageModelToolResult2: extHostTypes.LanguageModelToolResult2,
2072
LanguageModelDataPart: extHostTypes.LanguageModelDataPart,
2073
LanguageModelDataPart2: extHostTypes.LanguageModelDataPart,
2074
LanguageModelToolExtensionSource: extHostTypes.LanguageModelToolExtensionSource,
2075
LanguageModelToolMCPSource: extHostTypes.LanguageModelToolMCPSource,
2076
ExtendedLanguageModelToolResult: extHostTypes.ExtendedLanguageModelToolResult,
2077
LanguageModelChatToolMode: extHostTypes.LanguageModelChatToolMode,
2078
LanguageModelPromptTsxPart: extHostTypes.LanguageModelPromptTsxPart,
2079
NewSymbolName: extHostTypes.NewSymbolName,
2080
NewSymbolNameTag: extHostTypes.NewSymbolNameTag,
2081
NewSymbolNameTriggerKind: extHostTypes.NewSymbolNameTriggerKind,
2082
ExcludeSettingOptions: ExcludeSettingOptions,
2083
TextSearchContext2: TextSearchContext2,
2084
TextSearchMatch2: TextSearchMatch2,
2085
AISearchKeyword: AISearchKeyword,
2086
TextSearchCompleteMessageTypeNew: TextSearchCompleteMessageType,
2087
ChatErrorLevel: extHostTypes.ChatErrorLevel,
2088
McpHttpServerDefinition: extHostTypes.McpHttpServerDefinition,
2089
McpHttpServerDefinition2: extHostTypes.McpHttpServerDefinition,
2090
McpStdioServerDefinition: extHostTypes.McpStdioServerDefinition,
2091
McpStdioServerDefinition2: extHostTypes.McpStdioServerDefinition,
2092
McpToolAvailability: extHostTypes.McpToolAvailability,
2093
McpToolInvocationContentData: extHostTypes.McpToolInvocationContentData,
2094
SettingsSearchResultKind: extHostTypes.SettingsSearchResultKind,
2095
ChatTodoStatus: extHostTypes.ChatTodoStatus,
2096
};
2097
};
2098
}
2099
2100