Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

show contributed issues in quick access #206303

Merged
merged 12 commits into from
Mar 7, 2024
6 changes: 4 additions & 2 deletions src/vs/workbench/contrib/issue/browser/issue.contribution.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,12 @@ import { Extensions, IWorkbenchContributionsRegistry } from 'vs/workbench/common
import { WebIssueService } from 'vs/workbench/services/issue/browser/issueService';
import { IWorkbenchIssueService } from 'vs/workbench/services/issue/common/issue';
import { BaseIssueContribution } from 'vs/workbench/contrib/issue/common/issue.contribution';
import { IConfigurationService } from 'vs/platform/configuration/common/configuration';


class WebIssueContribution extends BaseIssueContribution {
constructor(@IProductService productService: IProductService) {
super(productService);
constructor(@IProductService productService: IProductService, @IConfigurationService configurationService: IConfigurationService) {
super(productService, configurationService);
}
}

Expand Down
14 changes: 5 additions & 9 deletions src/vs/workbench/contrib/issue/browser/issueQuickAccess.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@ import { IQuickPickSeparator } from 'vs/platform/quickinput/common/quickInput';
import { localize } from 'vs/nls';
import { ICommandService } from 'vs/platform/commands/common/commands';
import { IExtensionService } from 'vs/workbench/services/extensions/common/extensions';
import { IConfigurationService } from 'vs/platform/configuration/common/configuration';
import { IRelaxedExtensionDescription } from 'vs/platform/extensions/common/extensions';
import { ThemeIcon } from 'vs/base/common/themables';
import { Codicon } from 'vs/base/common/codicons';
Expand All @@ -27,21 +26,17 @@ export class IssueQuickAccess extends PickerQuickAccessProvider<IPickerQuickAcce
@IContextKeyService private readonly contextKeyService: IContextKeyService,
@ICommandService private readonly commandService: ICommandService,
@IExtensionService private readonly extensionService: IExtensionService,
@IConfigurationService private readonly configurationService: IConfigurationService,
@IProductService private readonly productService: IProductService
) {
super(IssueQuickAccess.PREFIX, { canAcceptInBackground: true });
}

protected override _getPicks(filter: string): Picks<IPickerQuickAccessItem> | FastAndSlowPicks<IPickerQuickAccessItem> | Promise<Picks<IPickerQuickAccessItem> | FastAndSlowPicks<IPickerQuickAccessItem>> | null {
if (!this.configurationService.getValue<boolean>('extensions.experimental.issueQuickAccess')) {
return null;
}
const issuePicks: Array<IPickerQuickAccessItem | IQuickPickSeparator> = [];
const extensionIdSet: Set<string> = new Set();
const issuePicks = new Array<IPickerQuickAccessItem | IQuickPickSeparator>();
const extensionIdSet = new Set<string>();

// add regular open issue reporter button
const productLabel = this.productService.nameLong === 'stable' ? localize("workbench.action.openIssueReporter", "Visual Studio Code") : localize("workbench.action.openIssueReporterInsiders", "Visual Studio Code: Insiders");
const productLabel = localize("workbench.action.openIssueReporter.productName", "{0}", this.productService.nameLong);
justschen marked this conversation as resolved.
Show resolved Hide resolved
issuePicks.push({
label: productLabel,
ariaLabel: productLabel,
Expand Down Expand Up @@ -77,6 +72,7 @@ export class IssueQuickAccess extends PickerQuickAccessProvider<IPickerQuickAcce
}
});

menu.dispose();

issuePicks.push({ type: 'separator', label: localize('otherExtensions', "Other Extensions") });

Expand Down Expand Up @@ -124,7 +120,7 @@ export class IssueQuickAccess extends PickerQuickAccessProvider<IPickerQuickAcce
}
};
}
} else if (extension && extension.displayName && extension.identifier.value) {
} else if (extension?.displayName) {
justschen marked this conversation as resolved.
Show resolved Hide resolved
const highlights = matchesFuzzy(filter, extension.displayName, true);
if (highlights) {
return {
Expand Down
4 changes: 3 additions & 1 deletion src/vs/workbench/contrib/issue/common/issue.contribution.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import { IssueReporterData } from 'vs/platform/issue/common/issue';
import { IProductService } from 'vs/platform/product/common/productService';
import { IWorkbenchContribution } from 'vs/workbench/common/contributions';
import { IWorkbenchIssueService } from 'vs/workbench/services/issue/common/issue';
import { IConfigurationService } from 'vs/platform/configuration/common/configuration';

const OpenIssueReporterActionId = 'workbench.action.openIssueReporter';
const OpenIssueReporterApiId = 'vscode.openIssueReporter';
Expand Down Expand Up @@ -59,7 +60,8 @@ interface OpenIssueReporterArgs {

export class BaseIssueContribution implements IWorkbenchContribution {
constructor(
@IProductService productService: IProductService
@IProductService productService: IProductService,
@IConfigurationService configurationService: IConfigurationService,
) {
if (!productService.reportIssueUrl) {
return;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,21 +19,54 @@ import { IDialogService } from 'vs/platform/dialogs/common/dialogs';
import { INativeHostService } from 'vs/platform/native/common/native';
import { IProgressService, ProgressLocation } from 'vs/platform/progress/common/progress';
import { IIssueMainService, IssueType } from 'vs/platform/issue/common/issue';
import { IConfigurationService } from 'vs/platform/configuration/common/configuration';
import { IDisposable } from 'vs/base/common/lifecycle';
import { IQuickAccessRegistry, Extensions as QuickAccessExtensions } from 'vs/platform/quickinput/common/quickAccess';
import { IssueQuickAccess } from 'vs/workbench/contrib/issue/browser/issueQuickAccess';


//#region Issue Contribution

class NativeIssueContribution extends BaseIssueContribution {

constructor(
@IProductService productService: IProductService
@IProductService productService: IProductService,
@IConfigurationService configurationService: IConfigurationService
) {
super(productService);
super(productService, configurationService);

if (productService.reportIssueUrl) {
registerAction2(ReportPerformanceIssueUsingReporterAction);
}

let disposable: IDisposable | undefined;

const registerQuickAccessProvider = () => {
disposable = Registry.as<IQuickAccessRegistry>(QuickAccessExtensions.Quickaccess).registerQuickAccessProvider({
ctor: IssueQuickAccess,
prefix: IssueQuickAccess.PREFIX,
contextKey: 'inReportIssuePicker',
placeholder: localize('tasksQuickAccessPlaceholder', "Type the name of an extension to report on."),
helpEntries: [{
description: localize('openIssueReporter', "Open Issue Reporter"),
commandId: 'workbench.action.openIssueReporter',
commandCenterOrder: 50
justschen marked this conversation as resolved.
Show resolved Hide resolved
}]
});
};

configurationService.onDidChangeConfiguration(e => {
if (!configurationService.getValue<boolean>('extensions.experimental.issueQuickAccess') && disposable) {
disposable.dispose();
disposable = undefined;
} else if (!disposable) {
registerQuickAccessProvider();
}
});

if (configurationService.getValue<boolean>('extensions.experimental.issueQuickAccess')) {
registerQuickAccessProvider();
}
}
}
Registry.as<IWorkbenchContributionsRegistry>(Extensions.Workbench).registerWorkbenchContribution(NativeIssueContribution, LifecyclePhase.Restored);
Expand Down Expand Up @@ -135,17 +168,4 @@ registerAction2(StopTracing);
CommandsRegistry.registerCommand('_issues.getSystemStatus', (accessor) => {
return accessor.get(IIssueMainService).getSystemStatus();
});

// Register quick access for contributed issues
Registry.as<IQuickAccessRegistry>(QuickAccessExtensions.Quickaccess).registerQuickAccessProvider({
ctor: IssueQuickAccess,
prefix: IssueQuickAccess.PREFIX,
contextKey: 'inReportIssuePicker',
placeholder: localize('tasksQuickAccessPlaceholder', "Type the name of an extension to report on."),
helpEntries: [{
description: localize('startDebuggingHelp', "Open Issue Reporter"),
commandId: 'workbench.action.openIssueReporter',
commandCenterOrder: 50
}]
});
//#endregion