diff --git a/extensions/configuration-editing/src/settingsDocumentHelper.ts b/extensions/configuration-editing/src/settingsDocumentHelper.ts index 76c5e3d34e3..f3461f0c3b5 100644 --- a/extensions/configuration-editing/src/settingsDocumentHelper.ts +++ b/extensions/configuration-editing/src/settingsDocumentHelper.ts @@ -6,7 +6,7 @@ import * as vscode from 'vscode'; import { getLocation, Location, parse } from 'jsonc-parser'; import * as nls from 'vscode-nls'; -import { provideInstalledExtensionProposals, provideWorkspaceTrustExtensionProposals } from './extensionsProposals'; +import { provideInstalledExtensionProposals } from './extensionsProposals'; const localize = nls.loadMessageBundle(); diff --git a/src/vs/workbench/contrib/extensions/browser/extensions.contribution.ts b/src/vs/workbench/contrib/extensions/browser/extensions.contribution.ts index 3ceca350c6b..a71a5a8c6eb 100644 --- a/src/vs/workbench/contrib/extensions/browser/extensions.contribution.ts +++ b/src/vs/workbench/contrib/extensions/browser/extensions.contribution.ts @@ -72,7 +72,7 @@ import { Query } from 'vs/workbench/contrib/extensions/common/extensionQuery'; import { Promises } from 'vs/base/common/async'; import { EditorExtensions } from 'vs/workbench/common/editor'; import { WORKSPACE_TRUST_EXTENSION_SUPPORT } from 'vs/workbench/services/workspaces/common/workspaceTrust'; -import { ExtensionSupportCompletionProvider } from 'vs/workbench/contrib/extensions/browser/extensionSupportCompletionProvider'; +import { ExtensionsCompletionItemsProvider } from 'vs/workbench/contrib/extensions/browser/extensionsCompletionItemsProvider'; // Singletons registerSingleton(IExtensionsWorkbenchService, ExtensionsWorkbenchService); @@ -1326,7 +1326,7 @@ workbenchRegistry.registerWorkbenchContribution(ExtensionsViewletViewsContributi workbenchRegistry.registerWorkbenchContribution(ExtensionActivationProgress, LifecyclePhase.Eventually); workbenchRegistry.registerWorkbenchContribution(ExtensionDependencyChecker, LifecyclePhase.Eventually); workbenchRegistry.registerWorkbenchContribution(ExtensionEnablementByWorkspaceTrustRequirement, LifecyclePhase.Restored); -workbenchRegistry.registerWorkbenchContribution(ExtensionSupportCompletionProvider, LifecyclePhase.Restored); +workbenchRegistry.registerWorkbenchContribution(ExtensionsCompletionItemsProvider, LifecyclePhase.Restored); // Running Extensions const actionRegistry = Registry.as(WorkbenchActionExtensions.WorkbenchActions); diff --git a/src/vs/workbench/contrib/extensions/browser/extensionSupportCompletionProvider.ts b/src/vs/workbench/contrib/extensions/browser/extensionsCompletionItemsProvider.ts similarity index 62% rename from src/vs/workbench/contrib/extensions/browser/extensionSupportCompletionProvider.ts rename to src/vs/workbench/contrib/extensions/browser/extensionsCompletionItemsProvider.ts index e124dd0be11..fa1c2898754 100644 --- a/src/vs/workbench/contrib/extensions/browser/extensionSupportCompletionProvider.ts +++ b/src/vs/workbench/contrib/extensions/browser/extensionsCompletionItemsProvider.ts @@ -15,16 +15,14 @@ import { IWorkbenchContribution } from 'vs/workbench/common/contributions'; import { Range } from 'vs/editor/common/core/range'; -export class ExtensionSupportCompletionProvider extends Disposable implements IWorkbenchContribution { +export class ExtensionsCompletionItemsProvider extends Disposable implements IWorkbenchContribution { constructor( - @IExtensionManagementService extensionManagementService: IExtensionManagementService, + @IExtensionManagementService private readonly extensionManagementService: IExtensionManagementService, ) { super(); this._register(CompletionProviderRegistry.register({ language: 'jsonc', pattern: '**/settings.json' }, { provideCompletionItems: async (model: ITextModel, position: Position, _context: CompletionContext, token: CancellationToken): Promise => { - const suggestions: CompletionItem[] = []; - const getWordRangeAtPosition = (model: ITextModel, position: Position): Range | null => { const wordAtPosition = model.getWordAtPosition(position); return wordAtPosition ? new Range(position.lineNumber, wordAtPosition.startColumn, position.lineNumber, wordAtPosition.endColumn) : null; @@ -40,22 +38,29 @@ export class ExtensionSupportCompletionProvider extends Disposable implements IW alreadyConfigured = Object.keys(parse(model.getValue())['extensions.supportUntrustedWorkspaces']); } catch (e) {/* ignore error */ } - const installedExtensions = (await extensionManagementService.getInstalled()).filter(e => e.manifest.main); - const proposedExtensions = installedExtensions.filter(e => alreadyConfigured.indexOf(e.identifier.id) === -1); - - if (proposedExtensions.length) { - suggestions.push(...proposedExtensions.map(e => { - const text = `"${e.identifier.id}": {\n\t"supported": true,\n\t"version": "${e.manifest.version}"\n},`; - return { label: e.identifier.id, kind: CompletionItemKind.Value, insertText: text, filterText: text, range }; - })); - } else { - const text = '"vscode.csharp": {\n\t"supported": true,\n\t"version": "0.0.0"\n},'; - suggestions.push({ label: localize('exampleExtension', "Example"), kind: CompletionItemKind.Value, insertText: text, filterText: text, range }); - } + return { suggestions: await this.provideSupportUntrustedWorkspacesExtensionProposals(alreadyConfigured, range) }; } - return { suggestions }; + return { suggestions: [] }; } })); } + + private async provideSupportUntrustedWorkspacesExtensionProposals(alreadyConfigured: string[], range: Range): Promise { + const suggestions: CompletionItem[] = []; + const installedExtensions = (await this.extensionManagementService.getInstalled()).filter(e => e.manifest.main); + const proposedExtensions = installedExtensions.filter(e => alreadyConfigured.indexOf(e.identifier.id) === -1); + + if (proposedExtensions.length) { + suggestions.push(...proposedExtensions.map(e => { + const text = `"${e.identifier.id}": {\n\t"supported": true,\n\t"version": "${e.manifest.version}"\n},`; + return { label: e.identifier.id, kind: CompletionItemKind.Value, insertText: text, filterText: text, range }; + })); + } else { + const text = '"vscode.csharp": {\n\t"supported": true,\n\t"version": "0.0.0"\n},'; + suggestions.push({ label: localize('exampleExtension', "Example"), kind: CompletionItemKind.Value, insertText: text, filterText: text, range }); + } + + return suggestions; + } }