diff --git a/src/vs/code/electron-browser/issue/issueReporterMain.ts b/src/vs/code/electron-browser/issue/issueReporterMain.ts
index 1e63205795e..1d46130f930 100644
--- a/src/vs/code/electron-browser/issue/issueReporterMain.ts
+++ b/src/vs/code/electron-browser/issue/issueReporterMain.ts
@@ -31,9 +31,8 @@ import { resolveCommonProperties } from 'vs/platform/telemetry/node/commonProper
import { WindowsChannelClient } from 'vs/platform/windows/node/windowsIpc';
import { EnvironmentService } from 'vs/platform/environment/node/environmentService';
import { IssueReporterModel } from 'vs/code/electron-browser/issue/issueReporterModel';
-import { IssueReporterData, IssueReporterStyles, IssueType, ISettingsSearchIssueReporterData, IssueReporterFeatures } from 'vs/platform/issue/common/issue';
+import { IssueReporterData, IssueReporterStyles, IssueType, ISettingsSearchIssueReporterData, IssueReporterFeatures, IssueReporterExtensionData } from 'vs/platform/issue/common/issue';
import BaseHtml from 'vs/code/electron-browser/issue/issueReporterPage';
-import { ILocalExtension } from 'vs/platform/extensionManagement/common/extensionManagement';
import { createSpdLogService } from 'vs/platform/log/node/spdlogService';
import { LogLevelSetterChannelClient, FollowerLogService } from 'vs/platform/log/node/logIpc';
import { ILogService, getLogLevel } from 'vs/platform/log/common/log';
@@ -211,11 +210,9 @@ export class IssueReporter extends Disposable {
document.body.style.color = styles.color;
}
- private handleExtensionData(extensions: ILocalExtension[]) {
+ private handleExtensionData(extensions: IssueReporterExtensionData[]) {
const { nonThemes, themes } = collections.groupBy(extensions, ext => {
- const manifestKeys = ext.manifest.contributes ? Object.keys(ext.manifest.contributes) : [];
- const onlyTheme = !ext.manifest.activationEvents && manifestKeys.length === 1 && manifestKeys[0] === 'themes';
- return onlyTheme ? 'themes' : 'nonThemes';
+ return ext.isTheme ? 'themes' : 'nonThemes';
});
const numberOfThemeExtesions = themes && themes.length;
@@ -457,12 +454,12 @@ export class IssueReporter extends Disposable {
private getExtensionRepositoryUrl(): string {
const selectedExtension = this.issueReporterModel.getData().selectedExtension;
- return selectedExtension && selectedExtension.manifest && selectedExtension.manifest.repository && selectedExtension.manifest.repository.url;
+ return selectedExtension && selectedExtension.repositoryUrl;
}
private getExtensionBugsUrl(): string {
const selectedExtension = this.issueReporterModel.getData().selectedExtension;
- return selectedExtension && selectedExtension.manifest && selectedExtension.manifest.bugs && selectedExtension.manifest.bugs.url;
+ return selectedExtension && selectedExtension.bugsUrl;
}
private searchVSCodeIssues(title: string, issueDescription: string): void {
@@ -830,7 +827,7 @@ export class IssueReporter extends Disposable {
target.innerHTML = `
`;
}
- private updateExtensionSelector(extensions: ILocalExtension[]): void {
+ private updateExtensionSelector(extensions: IssueReporterExtensionData[]): void {
interface IOption {
name: string;
id: string;
@@ -838,8 +835,8 @@ export class IssueReporter extends Disposable {
const extensionOptions: IOption[] = extensions.map(extension => {
return {
- name: extension.manifest.displayName || extension.manifest.name || '',
- id: extension.identifier.id
+ name: extension.displayName || extension.name || '',
+ id: extension.id
};
});
@@ -865,7 +862,7 @@ export class IssueReporter extends Disposable {
this.addEventListener('extension-selector', 'change', (e: Event) => {
const selectedExtensionId = (e.target).value;
const extensions = this.issueReporterModel.getData().allExtensions;
- const matches = extensions.filter(extension => extension.identifier.id === selectedExtensionId);
+ const matches = extensions.filter(extension => extension.id === selectedExtensionId);
if (matches.length) {
this.issueReporterModel.update({ selectedExtension: matches[0] });
@@ -887,7 +884,7 @@ export class IssueReporter extends Disposable {
document.querySelector('.block-workspace .block-info code').textContent = '\n' + state.workspaceInfo;
}
- private updateExtensionTable(extensions: ILocalExtension[], numThemeExtensions: number): void {
+ private updateExtensionTable(extensions: IssueReporterExtensionData[], numThemeExtensions: number): void {
const target = document.querySelector('.block-extensions .block-info');
if (this.environmentService.disableExtensions) {
@@ -907,7 +904,7 @@ export class IssueReporter extends Disposable {
target.innerHTML = `${themeExclusionStr}`;
}
- private updateSearchedExtensionTable(extensions: ILocalExtension[]): void {
+ private updateSearchedExtensionTable(extensions: IssueReporterExtensionData[]): void {
const target = document.querySelector('.block-searchedExtensions .block-info');
if (!extensions.length) {
@@ -919,7 +916,7 @@ export class IssueReporter extends Disposable {
target.innerHTML = ``;
}
- private getExtensionTableHtml(extensions: ILocalExtension[]): string {
+ private getExtensionTableHtml(extensions: IssueReporterExtensionData[]): string {
let table = `
| Extension |
@@ -930,9 +927,9 @@ export class IssueReporter extends Disposable {
table += extensions.map(extension => {
return `
- | ${extension.manifest.name} |
- ${extension.manifest.publisher.substr(0, 3)} |
- ${extension.manifest.version} |
+ ${extension.name} |
+ ${extension.publisher.substr(0, 3)} |
+ ${extension.version} |
`;
}).join('');
diff --git a/src/vs/code/electron-browser/issue/issueReporterModel.ts b/src/vs/code/electron-browser/issue/issueReporterModel.ts
index afd544ed005..2ef6e5f8e0c 100644
--- a/src/vs/code/electron-browser/issue/issueReporterModel.ts
+++ b/src/vs/code/electron-browser/issue/issueReporterModel.ts
@@ -4,8 +4,7 @@
*--------------------------------------------------------------------------------------------*/
import { assign } from 'vs/base/common/objects';
-import { ILocalExtension } from 'vs/platform/extensionManagement/common/extensionManagement';
-import { IssueType, ISettingSearchResult } from 'vs/platform/issue/common/issue';
+import { IssueType, ISettingSearchResult, IssueReporterExtensionData } from 'vs/platform/issue/common/issue';
export interface IssueReporterData {
issueType?: IssueType;
@@ -24,11 +23,11 @@ export interface IssueReporterData {
includeSettingsSearchDetails?: boolean;
numberOfThemeExtesions?: number;
- allExtensions?: ILocalExtension[];
- enabledNonThemeExtesions?: ILocalExtension[];
+ allExtensions?: IssueReporterExtensionData[];
+ enabledNonThemeExtesions?: IssueReporterExtensionData[];
extensionsDisabled?: boolean;
fileOnExtension?: boolean;
- selectedExtension?: ILocalExtension;
+ selectedExtension?: IssueReporterExtensionData;
actualSearchResults?: ISettingSearchResult[];
query?: string;
filterResultCount?: number;
@@ -81,7 +80,7 @@ ${this.getInfos()}
private getExtensionVersion(): string {
if (this.fileOnExtension() && this._data.selectedExtension) {
- return `\nExtension version: ${this._data.selectedExtension.manifest.version}`;
+ return `\nExtension version: ${this._data.selectedExtension.version}`;
} else {
return '';
}
@@ -198,7 +197,7 @@ ${this._data.workspaceInfo};
let tableHeader = `Extension|Author (truncated)|Version
---|---|---`;
const table = this._data.enabledNonThemeExtesions.map(e => {
- return `${e.manifest.name}|${e.manifest.publisher.substr(0, 3)}|${e.manifest.version}`;
+ return `${e.name}|${e.publisher.substr(0, 3)}|${e.version}`;
}).join('\n');
return `Extensions (${this._data.enabledNonThemeExtesions.length})
diff --git a/src/vs/platform/issue/common/issue.ts b/src/vs/platform/issue/common/issue.ts
index 62734a94f86..2e50281b21f 100644
--- a/src/vs/platform/issue/common/issue.ts
+++ b/src/vs/platform/issue/common/issue.ts
@@ -5,7 +5,6 @@
import { TPromise } from 'vs/base/common/winjs.base';
import { createDecorator } from 'vs/platform/instantiation/common/instantiation';
-import { ILocalExtension } from 'vs/platform/extensionManagement/common/extensionManagement';
export const IIssueService = createDecorator('issueService');
@@ -43,9 +42,20 @@ export interface IssueReporterStyles extends WindowStyles {
sliderActiveColor: string;
}
+export interface IssueReporterExtensionData {
+ name: string;
+ publisher: string;
+ version: string;
+ id: string;
+ isTheme: boolean;
+ displayName: string | undefined;
+ repositoryUrl: string | undefined;
+ bugsUrl: string | undefined;
+}
+
export interface IssueReporterData extends WindowData {
styles: IssueReporterStyles;
- enabledExtensions: ILocalExtension[];
+ enabledExtensions: IssueReporterExtensionData[];
issueType?: IssueType;
}
diff --git a/src/vs/workbench/services/issue/electron-browser/workbenchIssueService.ts b/src/vs/workbench/services/issue/electron-browser/workbenchIssueService.ts
index a4105f15307..1c4f6eb96d3 100644
--- a/src/vs/workbench/services/issue/electron-browser/workbenchIssueService.ts
+++ b/src/vs/workbench/services/issue/electron-browser/workbenchIssueService.ts
@@ -3,7 +3,7 @@
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
-import { IssueReporterStyles, IIssueService, IssueReporterData, ProcessExplorerData } from 'vs/platform/issue/common/issue';
+import { IssueReporterStyles, IIssueService, IssueReporterData, ProcessExplorerData, IssueReporterExtensionData } from 'vs/platform/issue/common/issue';
import { TPromise } from 'vs/base/common/winjs.base';
import { ITheme, IThemeService } from 'vs/platform/theme/common/themeService';
import { textLinkForeground, inputBackground, inputBorder, inputForeground, buttonBackground, buttonHoverBackground, buttonForeground, inputValidationErrorBorder, foreground, inputActiveOptionBorder, scrollbarSliderActiveBackground, scrollbarSliderBackground, scrollbarSliderHoverBackground, editorBackground, editorForeground, listHoverBackground, listHoverForeground, listHighlightForeground, textLinkActiveForeground } from 'vs/platform/theme/common/colorRegistry';
@@ -29,12 +29,28 @@ export class WorkbenchIssueService implements IWorkbenchIssueService {
openReporter(dataOverrides: Partial = {}): TPromise {
return this.extensionManagementService.getInstalled(LocalExtensionType.User).then(extensions => {
const enabledExtensions = extensions.filter(extension => this.extensionEnablementService.isEnabled(extension));
+ const extensionData: IssueReporterExtensionData[] = enabledExtensions.map(extension => {
+ const { manifest } = extension;
+ const manifestKeys = manifest.contributes ? Object.keys(manifest.contributes) : [];
+ const isTheme = !manifest.activationEvents && manifestKeys.length === 1 && manifestKeys[0] === 'themes';
+
+ return {
+ name: manifest.name,
+ publisher: manifest.publisher,
+ version: manifest.version,
+ repositoryUrl: manifest.repository && manifest.repository.url,
+ bugsUrl: manifest.bugs && manifest.bugs.url,
+ displayName: manifest.displayName,
+ id: extension.identifier.id,
+ isTheme: isTheme
+ };
+ });
const theme = this.themeService.getTheme();
const issueReporterData: IssueReporterData = assign(
{
styles: getIssueReporterStyles(theme),
zoomLevel: webFrame.getZoomLevel(),
- enabledExtensions
+ enabledExtensions: extensionData
},
dataOverrides);