mirror of
https://github.com/microsoft/vscode.git
synced 2026-04-20 00:28:52 +01:00
propose extensions.allAcrossExtensionHosts and related APIs, https://github.com/microsoft/vscode/issues/145307
This commit is contained in:
@@ -95,8 +95,13 @@ import { checkProposedApiEnabled, isProposedApiEnabled } from 'vs/workbench/serv
|
||||
import { DebugConfigurationProviderTriggerKind } from 'vs/workbench/contrib/debug/common/debug';
|
||||
import { ExtHostNotebookProxyKernels } from 'vs/workbench/api/common/extHostNotebookProxyKernels';
|
||||
|
||||
export interface IExtensionRegistries {
|
||||
mine: ExtensionDescriptionRegistry;
|
||||
all: ExtensionDescriptionRegistry;
|
||||
}
|
||||
|
||||
export interface IExtensionApiFactory {
|
||||
(extension: IExtensionDescription, registry: ExtensionDescriptionRegistry, configProvider: ExtHostConfigProvider): typeof vscode;
|
||||
(extension: IExtensionDescription, extensionInfo: IExtensionRegistries, configProvider: ExtHostConfigProvider): typeof vscode;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -196,7 +201,7 @@ export function createApiFactoryAndRegisterActors(accessor: ServicesAccessor): I
|
||||
// Register API-ish commands
|
||||
ExtHostApiCommands.register(extHostCommands);
|
||||
|
||||
return function (extension: IExtensionDescription, extensionRegistry: ExtensionDescriptionRegistry, configProvider: ExtHostConfigProvider): typeof vscode {
|
||||
return function (extension: IExtensionDescription, extensionInfo: IExtensionRegistries, configProvider: ExtHostConfigProvider): typeof vscode {
|
||||
|
||||
// Check document selectors for being overly generic. Technically this isn't a problem but
|
||||
// in practice many extensions say they support `fooLang` but need fs-access to do so. Those
|
||||
@@ -360,10 +365,7 @@ export function createApiFactoryAndRegisterActors(accessor: ServicesAccessor): I
|
||||
Object.freeze(env);
|
||||
}
|
||||
|
||||
const extensionKind = initData.remote.isRemote
|
||||
? extHostTypes.ExtensionKind.Workspace
|
||||
: extHostTypes.ExtensionKind.UI;
|
||||
|
||||
// namespace: tests
|
||||
const tests: typeof vscode.tests = {
|
||||
createTestController(provider, label, refreshHandler?: (token: vscode.CancellationToken) => Thenable<void> | void) {
|
||||
return extHostTesting.createTestController(provider, label, refreshHandler);
|
||||
@@ -387,19 +389,50 @@ export function createApiFactoryAndRegisterActors(accessor: ServicesAccessor): I
|
||||
};
|
||||
|
||||
// namespace: extensions
|
||||
const extensionKind = initData.remote.isRemote
|
||||
? extHostTypes.ExtensionKind.Workspace
|
||||
: extHostTypes.ExtensionKind.UI;
|
||||
|
||||
const extensions: typeof vscode.extensions = {
|
||||
getExtension(extensionId: string): vscode.Extension<any> | undefined {
|
||||
const desc = extensionRegistry.getExtensionDescription(extensionId);
|
||||
if (desc) {
|
||||
return new Extension(extensionService, extension.identifier, desc, extensionKind);
|
||||
getExtension(extensionId: string, includeFromDifferentExtensionHosts?: boolean): vscode.Extension<any> | undefined {
|
||||
if (!isProposedApiEnabled(extension, 'extensionsAny')) {
|
||||
includeFromDifferentExtensionHosts = false;
|
||||
}
|
||||
const mine = extensionInfo.mine.getExtensionDescription(extensionId);
|
||||
if (mine) {
|
||||
return new Extension(extensionService, extension.identifier, mine, extensionKind, false);
|
||||
}
|
||||
if (includeFromDifferentExtensionHosts) {
|
||||
const foreign = extensionInfo.all.getExtensionDescription(extensionId);
|
||||
if (foreign) {
|
||||
return new Extension(extensionService, extension.identifier, foreign, extensionKind /* TODO@alexdima THIS IS WRONG */, true);
|
||||
}
|
||||
}
|
||||
return undefined;
|
||||
},
|
||||
get all(): vscode.Extension<any>[] {
|
||||
return extensionRegistry.getAllExtensionDescriptions().map((desc) => new Extension(extensionService, extension.identifier, desc, extensionKind));
|
||||
const result: vscode.Extension<any>[] = [];
|
||||
for (const desc of extensionInfo.mine.getAllExtensionDescriptions()) {
|
||||
result.push(new Extension(extensionService, extension.identifier, desc, extensionKind, false));
|
||||
}
|
||||
return result;
|
||||
},
|
||||
get allAcrossExtensionHosts(): vscode.Extension<any>[] {
|
||||
checkProposedApiEnabled(extension, 'extensionsAny');
|
||||
const result: vscode.Extension<any>[] = [];
|
||||
for (const desc of extensionInfo.mine.getAllExtensionDescriptions()) {
|
||||
result.push(new Extension(extensionService, extension.identifier, desc, extensionKind, false));
|
||||
}
|
||||
for (const desc of extensionInfo.all.getAllExtensionDescriptions()) {
|
||||
result.push(new Extension(extensionService, extension.identifier, desc, extensionKind /* TODO@alexdima THIS IS WRONG */, true));
|
||||
}
|
||||
return result;
|
||||
},
|
||||
get onDidChange() {
|
||||
return extensionRegistry.onDidChange;
|
||||
if (isProposedApiEnabled(extension, 'extensionsAny')) {
|
||||
return Event.any(extensionInfo.mine.onDidChange, extensionInfo.all.onDidChange);
|
||||
}
|
||||
return extensionInfo.mine.onDidChange;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user