Skip to content

Commit 79d85e4

Browse files
committed
support extension packs in exe recommendations
1 parent 855f75e commit 79d85e4

4 files changed

Lines changed: 14 additions & 11 deletions

File tree

src/vs/platform/extensionManagement/common/extensionManagement.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -237,7 +237,8 @@ export type IConfigBasedExtensionTip = {
237237

238238
export type IExecutableBasedExtensionTip = {
239239
readonly extensionId: string,
240-
readonly friendlyName: string,
240+
readonly extensionName: string,
241+
readonly isExtensionPack: boolean,
241242
readonly exeFriendlyName: string,
242243
readonly windowsPath?: string,
243244
};

src/vs/platform/extensionManagement/node/extensionTipsService.ts

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ import { ExtensionTipsService as BaseExtensionTipsService } from 'vs/platform/ex
2121
type IExeBasedExtensionTips = {
2222
readonly exeFriendlyName: string,
2323
readonly windowsPath?: string,
24-
readonly recommendations: { extensionId: string, extensionName: string }[];
24+
readonly recommendations: { extensionId: string, extensionName: string, isExtensionPack: boolean }[];
2525
};
2626

2727
export class ExtensionTipsService extends BaseExtensionTipsService {
@@ -41,13 +41,13 @@ export class ExtensionTipsService extends BaseExtensionTipsService {
4141
super(fileService, productService, requestService, logService);
4242
if (productService.exeBasedExtensionTips) {
4343
forEach(productService.exeBasedExtensionTips, ({ key, value }) => {
44-
const importantRecommendations: { extensionId: string, extensionName: string }[] = [];
45-
const otherRecommendations: { extensionId: string, extensionName: string }[] = [];
44+
const importantRecommendations: { extensionId: string, extensionName: string, isExtensionPack: boolean }[] = [];
45+
const otherRecommendations: { extensionId: string, extensionName: string, isExtensionPack: boolean }[] = [];
4646
forEach(value.recommendations, ({ key: extensionId, value }) => {
4747
if (value.important) {
48-
importantRecommendations.push({ extensionId, extensionName: value.name });
48+
importantRecommendations.push({ extensionId, extensionName: value.name, isExtensionPack: !!value.isExtensionPack });
4949
} else {
50-
otherRecommendations.push({ extensionId, extensionName: value.name });
50+
otherRecommendations.push({ extensionId, extensionName: value.name, isExtensionPack: !!value.isExtensionPack });
5151
}
5252
});
5353
if (importantRecommendations.length) {
@@ -99,10 +99,11 @@ export class ExtensionTipsService extends BaseExtensionTipsService {
9999
checkedExecutables.set(exePath, exists);
100100
}
101101
if (exists) {
102-
for (const { extensionId, extensionName: friendlyName } of extensionTip.recommendations) {
102+
for (const { extensionId, extensionName, isExtensionPack } of extensionTip.recommendations) {
103103
result.push({
104104
extensionId,
105-
friendlyName,
105+
extensionName,
106+
isExtensionPack,
106107
exeFriendlyName: extensionTip.exeFriendlyName,
107108
windowsPath: extensionTip.windowsPath,
108109
});

src/vs/platform/product/common/productService.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,7 @@ export interface IConfigBasedExtensionTip {
131131
export interface IExeBasedExtensionTip {
132132
friendlyName: string;
133133
windowsPath?: string;
134-
recommendations: IStringDictionary<{ name: string, important?: boolean }>;
134+
recommendations: IStringDictionary<{ name: string, important?: boolean, isExtensionPack?: boolean }>;
135135
}
136136

137137
export interface IRemoteExtensionTip {

src/vs/workbench/contrib/extensions/browser/exeBasedRecommendations.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,8 @@ export class ExeBasedRecommendations extends ExtensionRecommendations {
8787

8888
for (const extensionId of recommendations) {
8989
const tip = importantExeBasedRecommendations[extensionId];
90-
const message = localize('exeRecommended', "The '{0}' extension is recommended as you have {1} installed on your system.", tip.friendlyName!, tip.exeFriendlyName || basename(tip.windowsPath!));
90+
const message = tip.isExtensionPack ? localize('extensionPackRecommended', "The '{0}' extension pack is recommended as you have {1} installed on your system.", tip.extensionName!, tip.exeFriendlyName || basename(tip.windowsPath!))
91+
: localize('exeRecommended', "The '{0}' extension is recommended as you have {1} installed on your system.", tip.extensionName!, tip.exeFriendlyName || basename(tip.windowsPath!));
9192
this.promptImportantExtensionInstallNotification(extensionId, message);
9293
}
9394
}
@@ -111,7 +112,7 @@ export class ExeBasedRecommendations extends ExtensionRecommendations {
111112
source: 'executable',
112113
reason: {
113114
reasonId: ExtensionRecommendationReason.Executable,
114-
reasonText: localize('exeBasedRecommendation', "This extension is recommended because you have {0} installed.", tip.friendlyName)
115+
reasonText: localize('exeBasedRecommendation', "This extension is recommended because you have {0} installed.", tip.extensionName)
115116
}
116117
};
117118
}

0 commit comments

Comments
 (0)