Skip to content

Commit eca0690

Browse files
authored
Allow issue reporter to work on built-in extensions (microsoft#92040)
Fixes microsoft#91029
1 parent bab248b commit eca0690

4 files changed

Lines changed: 26 additions & 15 deletions

File tree

extensions/typescript-language-features/src/typescriptServiceClient.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -872,14 +872,15 @@ export default class TypeScriptServiceClient extends Disposable implements IType
872872
}
873873
}
874874

875-
function getReportIssueArgsForError(error: TypeScriptServerError): { issueTitle: string, issueBody: string } | undefined {
875+
function getReportIssueArgsForError(error: TypeScriptServerError): { extensionId: string, issueTitle: string, issueBody: string } | undefined {
876876
if (!error.serverStack || !error.serverMessage) {
877877
return undefined;
878878
}
879879

880880
// Note these strings are intentionally not localized
881881
// as we want users to file issues in english
882882
return {
883+
extensionId: 'vscode.typescript-language-features',
883884
issueTitle: `TS Server fatal error: ${error.serverMessage}`,
884885

885886
issueBody: `**TypeScript Version:** ${error.version.apiVersion?.fullVersionString}

src/vs/code/electron-browser/issue/issueReporterMain.ts

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -81,15 +81,17 @@ export class IssueReporter extends Disposable {
8181
this.initServices(configuration);
8282

8383
const isSnap = process.platform === 'linux' && process.env.SNAP && process.env.SNAP_REVISION;
84+
85+
const targetExtension = configuration.data.extensionId ? configuration.data.enabledExtensions.find(extension => extension.id === configuration.data.extensionId) : undefined;
8486
this.issueReporterModel = new IssueReporterModel({
8587
issueType: configuration.data.issueType || IssueType.Bug,
8688
versionInfo: {
8789
vscodeVersion: `${product.nameShort} ${product.version} (${product.commit || 'Commit unknown'}, ${product.date || 'Date unknown'})`,
8890
os: `${os.type()} ${os.arch()} ${os.release()}${isSnap ? ' snap' : ''}`
8991
},
9092
extensionsDisabled: !!this.environmentService.disableExtensions,
91-
fileOnExtension: configuration.data.extensionId ? true : undefined,
92-
selectedExtension: configuration.data.extensionId ? configuration.data.enabledExtensions.filter(extension => extension.id === configuration.data.extensionId)[0] : undefined
93+
fileOnExtension: configuration.data.extensionId ? !targetExtension?.isBuiltin : undefined,
94+
selectedExtension: targetExtension,
9395
});
9496

9597
const issueReporterElement = this.getElementById('issue-reporter');
@@ -260,19 +262,20 @@ export class IssueReporter extends Disposable {
260262
}
261263

262264
private handleExtensionData(extensions: IssueReporterExtensionData[]) {
263-
const { nonThemes, themes } = collections.groupBy(extensions, ext => {
265+
const installedExtensions = extensions.filter(x => !x.isBuiltin);
266+
const { nonThemes, themes } = collections.groupBy(installedExtensions, ext => {
264267
return ext.isTheme ? 'themes' : 'nonThemes';
265268
});
266269

267270
const numberOfThemeExtesions = themes && themes.length;
268-
this.issueReporterModel.update({ numberOfThemeExtesions, enabledNonThemeExtesions: nonThemes, allExtensions: extensions });
271+
this.issueReporterModel.update({ numberOfThemeExtesions, enabledNonThemeExtesions: nonThemes, allExtensions: installedExtensions });
269272
this.updateExtensionTable(nonThemes, numberOfThemeExtesions);
270273

271-
if (this.environmentService.disableExtensions || extensions.length === 0) {
274+
if (this.environmentService.disableExtensions || installedExtensions.length === 0) {
272275
(<HTMLButtonElement>this.getElementById('disableExtensions')).disabled = true;
273276
}
274277

275-
this.updateExtensionSelector(extensions);
278+
this.updateExtensionSelector(installedExtensions);
276279
}
277280

278281
private handleSettingsSearchData(data: ISettingsSearchIssueReporterData): void {
@@ -748,10 +751,14 @@ export class IssueReporter extends Disposable {
748751

749752
private setSourceOptions(): void {
750753
const sourceSelect = this.getElementById('issue-source')! as HTMLSelectElement;
751-
const { issueType, fileOnExtension } = this.issueReporterModel.getData();
754+
const { issueType, fileOnExtension, selectedExtension } = this.issueReporterModel.getData();
752755
let selected = sourceSelect.selectedIndex;
753-
if (selected === -1 && fileOnExtension !== undefined) {
754-
selected = fileOnExtension ? 2 : 1;
756+
if (selected === -1) {
757+
if (fileOnExtension !== undefined) {
758+
selected = fileOnExtension ? 2 : 1;
759+
} else if (selectedExtension?.isBuiltin) {
760+
selected = 1;
761+
}
755762
}
756763

757764
sourceSelect.innerHTML = '';

src/vs/platform/issue/node/issue.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ export interface IssueReporterExtensionData {
4949
version: string;
5050
id: string;
5151
isTheme: boolean;
52+
isBuiltin: boolean;
5253
displayName: string | undefined;
5354
repositoryUrl: string | undefined;
5455
bugsUrl: string | undefined;

src/vs/workbench/contrib/issue/electron-browser/issueService.ts

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,9 @@ import { IWorkbenchExtensionEnablementService } from 'vs/workbench/services/exte
1212
import { webFrame } from 'electron';
1313
import { assign } from 'vs/base/common/objects';
1414
import { IWorkbenchIssueService } from 'vs/workbench/contrib/issue/electron-browser/issue';
15-
import { ExtensionType } from 'vs/platform/extensions/common/extensions';
1615
import { IWorkbenchEnvironmentService } from 'vs/workbench/services/environment/common/environmentService';
1716
import { INativeWorkbenchEnvironmentService } from 'vs/workbench/services/environment/electron-browser/environmentService';
17+
import { ExtensionType } from 'vs/platform/extensions/common/extensions';
1818

1919
export class WorkbenchIssueService implements IWorkbenchIssueService {
2020
_serviceBrand: undefined;
@@ -28,12 +28,13 @@ export class WorkbenchIssueService implements IWorkbenchIssueService {
2828
) { }
2929

3030
async openReporter(dataOverrides: Partial<IssueReporterData> = {}): Promise<void> {
31-
const extensions = await this.extensionManagementService.getInstalled(ExtensionType.User);
31+
const extensions = await this.extensionManagementService.getInstalled();
3232
const enabledExtensions = extensions.filter(extension => this.extensionEnablementService.isEnabled(extension));
33-
const extensionData: IssueReporterExtensionData[] = enabledExtensions.map(extension => {
33+
const extensionData = enabledExtensions.map((extension): IssueReporterExtensionData => {
3434
const { manifest } = extension;
3535
const manifestKeys = manifest.contributes ? Object.keys(manifest.contributes) : [];
3636
const isTheme = !manifest.activationEvents && manifestKeys.length === 1 && manifestKeys[0] === 'themes';
37+
const isBuiltin = extension.type === ExtensionType.System;
3738
return {
3839
name: manifest.name,
3940
publisher: manifest.publisher,
@@ -42,14 +43,15 @@ export class WorkbenchIssueService implements IWorkbenchIssueService {
4243
bugsUrl: manifest.bugs && manifest.bugs.url,
4344
displayName: manifest.displayName,
4445
id: extension.identifier.id,
45-
isTheme: isTheme
46+
isTheme,
47+
isBuiltin,
4648
};
4749
});
4850
const theme = this.themeService.getColorTheme();
4951
const issueReporterData: IssueReporterData = assign({
5052
styles: getIssueReporterStyles(theme),
5153
zoomLevel: webFrame.getZoomLevel(),
52-
enabledExtensions: extensionData
54+
enabledExtensions: extensionData,
5355
}, dataOverrides);
5456
return this.issueService.openReporter(issueReporterData);
5557
}

0 commit comments

Comments
 (0)