Skip to content

Commit cc99387

Browse files
authored
Support filtering remoteExtensionTips by platform (microsoft#175246)
1 parent 7cfe4e0 commit cc99387

File tree

5 files changed

+19
-9
lines changed

5 files changed

+19
-9
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "code-oss-dev",
33
"version": "1.76.0",
4-
"distro": "ef7b3fe403fb76194fc61bc83b4b53af19a8f704",
4+
"distro": "30820417178d1e9f8ca7347ab291696ee134692f",
55
"author": {
66
"name": "Microsoft Corporation"
77
},

src/vs/base/common/platform.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,9 @@ export const enum Platform {
135135
Linux,
136136
Windows
137137
}
138-
export function PlatformToString(platform: Platform) {
138+
export type PlatformName = 'Web' | 'Windows' | 'Mac' | 'Linux';
139+
140+
export function PlatformToString(platform: Platform): PlatformName {
139141
switch (platform) {
140142
case Platform.Web: return 'Web';
141143
case Platform.Mac: return 'Mac';

src/vs/base/common/product.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
*--------------------------------------------------------------------------------------------*/
55

66
import { IStringDictionary } from 'vs/base/common/collections';
7+
import { PlatformName } from 'vs/base/common/platform';
78

89
export interface IBuiltInExtension {
910
readonly name: string;
@@ -198,11 +199,13 @@ export interface IExeBasedExtensionTip {
198199
export interface IRemoteExtensionTip {
199200
friendlyName: string;
200201
extensionId: string;
202+
supportedPlatforms?: PlatformName[];
201203
}
202204

203205
export interface IVirtualWorkspaceExtensionTip {
204206
friendlyName: string;
205207
extensionId: string;
208+
supportedPlatforms?: PlatformName[];
206209
}
207210

208211
export interface ISurveyData {

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import { ExtensionRecommendations, ExtensionRecommendation } from 'vs/workbench/contrib/extensions/browser/extensionRecommendations';
77
import { IProductService } from 'vs/platform/product/common/productService';
88
import { ExtensionRecommendationReason } from 'vs/workbench/services/extensionRecommendations/common/extensionRecommendations';
9+
import { PlatformToString, platform } from 'vs/base/common/platform';
910

1011
export class RemoteRecommendations extends ExtensionRecommendations {
1112

@@ -20,7 +21,8 @@ export class RemoteRecommendations extends ExtensionRecommendations {
2021

2122
protected async doActivate(): Promise<void> {
2223
const extensionTips = { ...this.productService.remoteExtensionTips, ...this.productService.virtualWorkspaceExtensionTips };
23-
this._recommendations = Object.entries(extensionTips).map(([_, extension]) => ({
24+
const currentPlatform = PlatformToString(platform);
25+
this._recommendations = Object.values(extensionTips).filter(({ supportedPlatforms }) => !supportedPlatforms || supportedPlatforms.includes(currentPlatform)).map(extension => ({
2426
extensionId: extension.extensionId.toLowerCase(),
2527
reason: {
2628
reasonId: ExtensionRecommendationReason.Application,

src/vs/workbench/contrib/remote/browser/remoteIndicator.ts

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ import { IBrowserWorkbenchEnvironmentService } from 'vs/workbench/services/envir
2121
import { PersistentConnectionEventType } from 'vs/platform/remote/common/remoteAgentConnection';
2222
import { IRemoteAuthorityResolverService } from 'vs/platform/remote/common/remoteAuthorityResolver';
2323
import { IHostService } from 'vs/workbench/services/host/browser/host';
24-
import { isWeb } from 'vs/base/common/platform';
24+
import { PlatformToString, isWeb, platform } from 'vs/base/common/platform';
2525
import { once } from 'vs/base/common/functional';
2626
import { truncate } from 'vs/base/common/strings';
2727
import { IWorkspaceContextService } from 'vs/platform/workspace/common/workspace';
@@ -513,11 +513,14 @@ export class RemoteStatusIndicator extends Disposable implements IWorkbenchContr
513513

514514
private hasAdditionalRemoteExtensions() {
515515
const extensionTips = { ...this.productService.remoteExtensionTips, ...this.productService.virtualWorkspaceExtensionTips };
516-
for (const [_, extension] of Object.entries(extensionTips)) {
517-
const { extensionId: recommendedExtensionId } = extension;
518-
// if this recommended extension isn't already installed, return early
519-
if (!this.extensionService.extensions.some((extension) => extension.id?.toLowerCase() === recommendedExtensionId.toLowerCase())) {
520-
return true;
516+
const currentPlatform = PlatformToString(platform);
517+
for (const extension of Object.values(extensionTips)) {
518+
const { extensionId: recommendedExtensionId, supportedPlatforms } = extension;
519+
if (!supportedPlatforms || supportedPlatforms.includes(currentPlatform)) {
520+
// if this recommended extension isn't already installed, return early
521+
if (!this.extensionService.extensions.some((extension) => extension.id?.toLowerCase() === recommendedExtensionId.toLowerCase())) {
522+
return true;
523+
}
521524
}
522525
}
523526
return false;

0 commit comments

Comments
 (0)