Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
microsoft
GitHub Repository: microsoft/vscode
Path: blob/main/src/vs/workbench/contrib/issue/electron-browser/issue.contribution.ts
3296 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 { IDisposable } from '../../../../base/common/lifecycle.js';
7
import { localize, localize2 } from '../../../../nls.js';
8
import { Categories } from '../../../../platform/action/common/actionCommonCategories.js';
9
import { Action2, registerAction2 } from '../../../../platform/actions/common/actions.js';
10
import { CommandsRegistry } from '../../../../platform/commands/common/commands.js';
11
import { IConfigurationService } from '../../../../platform/configuration/common/configuration.js';
12
import { InstantiationType, registerSingleton } from '../../../../platform/instantiation/common/extensions.js';
13
import { ServicesAccessor } from '../../../../platform/instantiation/common/instantiation.js';
14
import { IProcessService } from '../../../../platform/process/common/process.js';
15
import { IProductService } from '../../../../platform/product/common/productService.js';
16
import { IQuickAccessRegistry, Extensions as QuickAccessExtensions } from '../../../../platform/quickinput/common/quickAccess.js';
17
import { Registry } from '../../../../platform/registry/common/platform.js';
18
import { Extensions, IWorkbenchContributionsRegistry } from '../../../common/contributions.js';
19
import { LifecyclePhase } from '../../../services/lifecycle/common/lifecycle.js';
20
import { IssueQuickAccess } from '../browser/issueQuickAccess.js';
21
import '../browser/issueTroubleshoot.js';
22
import { BaseIssueContribution } from '../common/issue.contribution.js';
23
import { IIssueFormService, IWorkbenchIssueService, IssueType } from '../common/issue.js';
24
import { NativeIssueService } from './issueService.js';
25
import { NativeIssueFormService } from './nativeIssueFormService.js';
26
27
//#region Issue Contribution
28
registerSingleton(IWorkbenchIssueService, NativeIssueService, InstantiationType.Delayed);
29
registerSingleton(IIssueFormService, NativeIssueFormService, InstantiationType.Delayed);
30
31
class NativeIssueContribution extends BaseIssueContribution {
32
33
constructor(
34
@IProductService productService: IProductService,
35
@IConfigurationService configurationService: IConfigurationService
36
) {
37
super(productService, configurationService);
38
39
if (!configurationService.getValue<boolean>('telemetry.feedback.enabled')) {
40
return;
41
}
42
43
if (productService.reportIssueUrl) {
44
this._register(registerAction2(ReportPerformanceIssueUsingReporterAction));
45
}
46
47
let disposable: IDisposable | undefined;
48
49
const registerQuickAccessProvider = () => {
50
disposable = Registry.as<IQuickAccessRegistry>(QuickAccessExtensions.Quickaccess).registerQuickAccessProvider({
51
ctor: IssueQuickAccess,
52
prefix: IssueQuickAccess.PREFIX,
53
contextKey: 'inReportIssuePicker',
54
placeholder: localize('tasksQuickAccessPlaceholder', "Type the name of an extension to report on."),
55
helpEntries: [{
56
description: localize('openIssueReporter', "Open Issue Reporter"),
57
commandId: 'workbench.action.openIssueReporter'
58
}]
59
});
60
};
61
62
this._register(configurationService.onDidChangeConfiguration(e => {
63
if (!configurationService.getValue<boolean>('extensions.experimental.issueQuickAccess') && disposable) {
64
disposable.dispose();
65
disposable = undefined;
66
} else if (!disposable) {
67
registerQuickAccessProvider();
68
}
69
}));
70
71
if (configurationService.getValue<boolean>('extensions.experimental.issueQuickAccess')) {
72
registerQuickAccessProvider();
73
}
74
}
75
}
76
Registry.as<IWorkbenchContributionsRegistry>(Extensions.Workbench).registerWorkbenchContribution(NativeIssueContribution, LifecyclePhase.Restored);
77
78
class ReportPerformanceIssueUsingReporterAction extends Action2 {
79
80
static readonly ID = 'workbench.action.reportPerformanceIssueUsingReporter';
81
82
constructor() {
83
super({
84
id: ReportPerformanceIssueUsingReporterAction.ID,
85
title: localize2({ key: 'reportPerformanceIssue', comment: [`Here, 'issue' means problem or bug`] }, "Report Performance Issue..."),
86
category: Categories.Help,
87
f1: true
88
});
89
}
90
91
override async run(accessor: ServicesAccessor): Promise<void> {
92
const issueService = accessor.get(IWorkbenchIssueService); // later can just get IIssueFormService
93
94
return issueService.openReporter({ issueType: IssueType.PerformanceIssue });
95
}
96
}
97
98
CommandsRegistry.registerCommand('_issues.getSystemStatus', (accessor) => {
99
return accessor.get(IProcessService).getSystemStatus();
100
});
101
102
// #endregion
103
104