Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
掘金者说
vscode
提交
f57ac767
V
vscode
项目概览
掘金者说
/
vscode
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
V
vscode
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
f57ac767
编写于
9月 25, 2020
作者:
S
Sandeep Somavarapu
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
create workspace extension config service
上级
1fd7ee15
变更
26
隐藏空白更改
内联
并排
Showing
26 changed file
with
199 addition
and
140 deletion
+199
-140
src/vs/workbench/contrib/extensions/browser/configBasedRecommendations.ts
.../contrib/extensions/browser/configBasedRecommendations.ts
+1
-1
src/vs/workbench/contrib/extensions/browser/dynamicWorkspaceRecommendations.ts
...rib/extensions/browser/dynamicWorkspaceRecommendations.ts
+1
-1
src/vs/workbench/contrib/extensions/browser/exeBasedRecommendations.ts
...nch/contrib/extensions/browser/exeBasedRecommendations.ts
+1
-1
src/vs/workbench/contrib/extensions/browser/experimentalRecommendations.ts
...contrib/extensions/browser/experimentalRecommendations.ts
+1
-1
src/vs/workbench/contrib/extensions/browser/extensionEditor.ts
...s/workbench/contrib/extensions/browser/extensionEditor.ts
+1
-1
src/vs/workbench/contrib/extensions/browser/extensionRecommendations.ts
...ch/contrib/extensions/browser/extensionRecommendations.ts
+2
-1
src/vs/workbench/contrib/extensions/browser/extensionRecommendationsService.ts
...rib/extensions/browser/extensionRecommendationsService.ts
+1
-1
src/vs/workbench/contrib/extensions/browser/extensions.contribution.ts
...nch/contrib/extensions/browser/extensions.contribution.ts
+2
-1
src/vs/workbench/contrib/extensions/browser/extensionsActions.ts
...workbench/contrib/extensions/browser/extensionsActions.ts
+4
-2
src/vs/workbench/contrib/extensions/browser/extensionsViews.ts
...s/workbench/contrib/extensions/browser/extensionsViews.ts
+2
-1
src/vs/workbench/contrib/extensions/browser/extensionsWidgets.ts
...workbench/contrib/extensions/browser/extensionsWidgets.ts
+2
-1
src/vs/workbench/contrib/extensions/browser/fileBasedRecommendations.ts
...ch/contrib/extensions/browser/fileBasedRecommendations.ts
+2
-1
src/vs/workbench/contrib/extensions/browser/keymapRecommendations.ts
...bench/contrib/extensions/browser/keymapRecommendations.ts
+1
-1
src/vs/workbench/contrib/extensions/browser/workspaceRecommendations.ts
...ch/contrib/extensions/browser/workspaceRecommendations.ts
+11
-58
src/vs/workbench/contrib/extensions/common/extensions.ts
src/vs/workbench/contrib/extensions/common/extensions.ts
+0
-2
src/vs/workbench/contrib/extensions/common/extensionsUtils.ts
...vs/workbench/contrib/extensions/common/extensionsUtils.ts
+2
-1
src/vs/workbench/contrib/extensions/test/electron-browser/extensionRecommendationsService.test.ts
.../electron-browser/extensionRecommendationsService.test.ts
+2
-0
src/vs/workbench/contrib/extensions/test/electron-browser/extensionsActions.test.ts
...xtensions/test/electron-browser/extensionsActions.test.ts
+2
-1
src/vs/workbench/contrib/extensions/test/electron-browser/extensionsViews.test.ts
.../extensions/test/electron-browser/extensionsViews.test.ts
+2
-1
src/vs/workbench/contrib/extensions/test/electron-browser/extensionsWorkbenchService.test.ts
.../test/electron-browser/extensionsWorkbenchService.test.ts
+2
-1
src/vs/workbench/contrib/welcome/page/browser/welcomePage.ts
src/vs/workbench/contrib/welcome/page/browser/welcomePage.ts
+2
-1
src/vs/workbench/electron-sandbox/sandbox.simpleservices.ts
src/vs/workbench/electron-sandbox/sandbox.simpleservices.ts
+2
-1
src/vs/workbench/services/extensionManagement/common/extensionManagement.ts
...ervices/extensionManagement/common/extensionManagement.ts
+0
-60
src/vs/workbench/services/extensionRecommendations/common/extensionRecommendations.ts
...tensionRecommendations/common/extensionRecommendations.ts
+67
-0
src/vs/workbench/services/extensionRecommendations/common/workspaceExtensionsConfig.ts
...ensionRecommendations/common/workspaceExtensionsConfig.ts
+85
-0
src/vs/workbench/workbench.common.main.ts
src/vs/workbench/workbench.common.main.ts
+1
-0
未找到文件。
src/vs/workbench/contrib/extensions/browser/configBasedRecommendations.ts
浏览文件 @
f57ac767
...
...
@@ -6,7 +6,7 @@
import
{
IExtensionTipsService
,
IConfigBasedExtensionTip
}
from
'
vs/platform/extensionManagement/common/extensionManagement
'
;
import
{
ExtensionRecommendations
,
ExtensionRecommendation
,
PromptedExtensionRecommendations
}
from
'
vs/workbench/contrib/extensions/browser/extensionRecommendations
'
;
import
{
localize
}
from
'
vs/nls
'
;
import
{
ExtensionRecommendationReason
}
from
'
vs/workbench/services/extension
Management/common/extensionManagement
'
;
import
{
ExtensionRecommendationReason
}
from
'
vs/workbench/services/extension
Recommendations/common/extensionRecommendations
'
;
import
{
IWorkspaceContextService
,
IWorkspaceFoldersChangeEvent
}
from
'
vs/platform/workspace/common/workspace
'
;
import
{
Emitter
}
from
'
vs/base/common/event
'
;
...
...
src/vs/workbench/contrib/extensions/browser/dynamicWorkspaceRecommendations.ts
浏览文件 @
f57ac767
...
...
@@ -12,7 +12,7 @@ import { isNonEmptyArray } from 'vs/base/common/arrays';
import
{
IWorkspaceTagsService
}
from
'
vs/workbench/contrib/tags/common/workspaceTags
'
;
import
{
isNumber
}
from
'
vs/base/common/types
'
;
import
{
ExtensionRecommendations
,
ExtensionRecommendation
,
PromptedExtensionRecommendations
}
from
'
vs/workbench/contrib/extensions/browser/extensionRecommendations
'
;
import
{
ExtensionRecommendationReason
}
from
'
vs/workbench/services/extension
Management/common/extensionManagement
'
;
import
{
ExtensionRecommendationReason
}
from
'
vs/workbench/services/extension
Recommendations/common/extensionRecommendations
'
;
import
{
localize
}
from
'
vs/nls
'
;
type
DynamicWorkspaceRecommendationsClassification
=
{
...
...
src/vs/workbench/contrib/extensions/browser/exeBasedRecommendations.ts
浏览文件 @
f57ac767
...
...
@@ -10,7 +10,7 @@ import { timeout } from 'vs/base/common/async';
import
{
localize
}
from
'
vs/nls
'
;
import
{
optional
}
from
'
vs/platform/instantiation/common/instantiation
'
;
import
{
basename
}
from
'
vs/base/common/path
'
;
import
{
ExtensionRecommendationReason
}
from
'
vs/workbench/services/extension
Management/common/extensionManagement
'
;
import
{
ExtensionRecommendationReason
}
from
'
vs/workbench/services/extension
Recommendations/common/extensionRecommendations
'
;
import
{
ITASExperimentService
}
from
'
vs/workbench/services/experiment/common/experimentService
'
;
type
ExeExtensionRecommendationsClassification
=
{
...
...
src/vs/workbench/contrib/extensions/browser/experimentalRecommendations.ts
浏览文件 @
f57ac767
...
...
@@ -5,7 +5,7 @@
import
{
isNonEmptyArray
}
from
'
vs/base/common/arrays
'
;
import
{
ExtensionRecommendations
,
ExtensionRecommendation
,
PromptedExtensionRecommendations
}
from
'
vs/workbench/contrib/extensions/browser/extensionRecommendations
'
;
import
{
ExtensionRecommendationReason
}
from
'
vs/workbench/services/extension
Management/common/extensionManagement
'
;
import
{
ExtensionRecommendationReason
}
from
'
vs/workbench/services/extension
Recommendations/common/extensionRecommendations
'
;
import
{
IExperimentService
,
ExperimentActionType
,
ExperimentState
}
from
'
vs/workbench/contrib/experiments/common/experimentService
'
;
export
class
ExperimentalRecommendations
extends
ExtensionRecommendations
{
...
...
src/vs/workbench/contrib/extensions/browser/extensionEditor.ts
浏览文件 @
f57ac767
...
...
@@ -19,7 +19,7 @@ import { EditorPane } from 'vs/workbench/browser/parts/editor/editorPane';
import
{
IViewletService
}
from
'
vs/workbench/services/viewlet/browser/viewlet
'
;
import
{
ITelemetryService
}
from
'
vs/platform/telemetry/common/telemetry
'
;
import
{
IInstantiationService
,
ServicesAccessor
}
from
'
vs/platform/instantiation/common/instantiation
'
;
import
{
IExtensionRecommendationsService
}
from
'
vs/workbench/services/extension
Management/common/extensionManagement
'
;
import
{
IExtensionRecommendationsService
}
from
'
vs/workbench/services/extension
Recommendations/common/extensionRecommendations
'
;
import
{
IExtensionManifest
,
IKeyBinding
,
IView
,
IViewContainer
,
ExtensionType
}
from
'
vs/platform/extensions/common/extensions
'
;
import
{
ResolvedKeybinding
,
KeyMod
,
KeyCode
}
from
'
vs/base/common/keyCodes
'
;
import
{
ExtensionsInput
}
from
'
vs/workbench/contrib/extensions/common/extensionsInput
'
;
...
...
src/vs/workbench/contrib/extensions/browser/extensionRecommendations.ts
浏览文件 @
f57ac767
...
...
@@ -9,7 +9,8 @@ import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry';
import
{
IInstantiationService
}
from
'
vs/platform/instantiation/common/instantiation
'
;
import
{
localize
}
from
'
vs/nls
'
;
import
{
SearchExtensionsAction
}
from
'
vs/workbench/contrib/extensions/browser/extensionsActions
'
;
import
{
EnablementState
,
ExtensionRecommendationSource
,
IExtensionRecommendationReson
,
IWorkbenchExtensionEnablementService
}
from
'
vs/workbench/services/extensionManagement/common/extensionManagement
'
;
import
{
EnablementState
,
IWorkbenchExtensionEnablementService
}
from
'
vs/workbench/services/extensionManagement/common/extensionManagement
'
;
import
{
ExtensionRecommendationSource
,
IExtensionRecommendationReson
}
from
'
vs/workbench/services/extensionRecommendations/common/extensionRecommendations
'
;
import
{
IExtensionsConfiguration
,
ConfigurationKey
,
IExtension
,
IExtensionsWorkbenchService
}
from
'
vs/workbench/contrib/extensions/common/extensions
'
;
import
{
IConfigurationService
,
ConfigurationTarget
}
from
'
vs/platform/configuration/common/configuration
'
;
import
{
IStorageService
,
StorageScope
}
from
'
vs/platform/storage/common/storage
'
;
...
...
src/vs/workbench/contrib/extensions/browser/extensionRecommendationsService.ts
浏览文件 @
f57ac767
...
...
@@ -5,7 +5,7 @@
import
{
Disposable
}
from
'
vs/base/common/lifecycle
'
;
import
{
IExtensionManagementService
,
IExtensionGalleryService
,
InstallOperation
,
DidInstallExtensionEvent
}
from
'
vs/platform/extensionManagement/common/extensionManagement
'
;
import
{
IExtensionRecommendationsService
,
ExtensionRecommendationReason
,
RecommendationChangeNotification
,
IExtensionRecommendation
,
ExtensionRecommendationSource
}
from
'
vs/workbench/services/extension
Management/common/extensionManagement
'
;
import
{
IExtensionRecommendationsService
,
ExtensionRecommendationReason
,
RecommendationChangeNotification
,
IExtensionRecommendation
,
ExtensionRecommendationSource
}
from
'
vs/workbench/services/extension
Recommendations/common/extensionRecommendations
'
;
import
{
IStorageService
,
StorageScope
,
IWorkspaceStorageChangeEvent
}
from
'
vs/platform/storage/common/storage
'
;
import
{
IInstantiationService
}
from
'
vs/platform/instantiation/common/instantiation
'
;
import
{
ShowRecommendationsOnlyOnDemandKey
}
from
'
vs/workbench/contrib/extensions/common/extensions
'
;
...
...
src/vs/workbench/contrib/extensions/browser/extensions.contribution.ts
浏览文件 @
f57ac767
...
...
@@ -9,7 +9,8 @@ import { Registry } from 'vs/platform/registry/common/platform';
import
{
MenuRegistry
,
MenuId
,
registerAction2
,
Action2
}
from
'
vs/platform/actions/common/actions
'
;
import
{
registerSingleton
}
from
'
vs/platform/instantiation/common/extensions
'
;
import
{
ExtensionsLabel
,
ExtensionsLocalizedLabel
,
ExtensionsChannelId
,
IExtensionManagementService
,
IExtensionGalleryService
,
PreferencesLocalizedLabel
}
from
'
vs/platform/extensionManagement/common/extensionManagement
'
;
import
{
IExtensionManagementServerService
,
IExtensionRecommendationsService
}
from
'
vs/workbench/services/extensionManagement/common/extensionManagement
'
;
import
{
IExtensionManagementServerService
}
from
'
vs/workbench/services/extensionManagement/common/extensionManagement
'
;
import
{
IExtensionRecommendationsService
}
from
'
vs/workbench/services/extensionRecommendations/common/extensionRecommendations
'
;
import
{
IWorkbenchContributionsRegistry
,
Extensions
as
WorkbenchExtensions
,
IWorkbenchContribution
}
from
'
vs/workbench/common/contributions
'
;
import
{
IOutputChannelRegistry
,
Extensions
as
OutputExtensions
}
from
'
vs/workbench/services/output/common/output
'
;
import
{
SyncDescriptor
}
from
'
vs/platform/instantiation/common/descriptors
'
;
...
...
src/vs/workbench/contrib/extensions/browser/extensionsActions.ts
浏览文件 @
f57ac767
...
...
@@ -12,10 +12,11 @@ import { Event } from 'vs/base/common/event';
import
*
as
json
from
'
vs/base/common/json
'
;
import
{
IContextMenuService
}
from
'
vs/platform/contextview/browser/contextView
'
;
import
{
dispose
,
Disposable
}
from
'
vs/base/common/lifecycle
'
;
import
{
IExtension
,
ExtensionState
,
IExtensionsWorkbenchService
,
VIEWLET_ID
,
IExtensionsViewPaneContainer
,
AutoUpdateConfigurationKey
,
IExtensionContainer
,
EXTENSIONS_CONFIG
,
TOGGLE_IGNORE_EXTENSION_ACTION_ID
}
from
'
vs/workbench/contrib/extensions/common/extensions
'
;
import
{
IExtension
,
ExtensionState
,
IExtensionsWorkbenchService
,
VIEWLET_ID
,
IExtensionsViewPaneContainer
,
AutoUpdateConfigurationKey
,
IExtensionContainer
,
TOGGLE_IGNORE_EXTENSION_ACTION_ID
}
from
'
vs/workbench/contrib/extensions/common/extensions
'
;
import
{
ExtensionsConfigurationInitialContent
}
from
'
vs/workbench/contrib/extensions/common/extensionsFileTemplate
'
;
import
{
IGalleryExtension
,
IExtensionGalleryService
,
INSTALL_ERROR_MALICIOUS
,
INSTALL_ERROR_INCOMPATIBLE
,
IGalleryExtensionVersion
,
ILocalExtension
,
INSTALL_ERROR_NOT_SUPPORTED
}
from
'
vs/platform/extensionManagement/common/extensionManagement
'
;
import
{
IWorkbenchExtensionEnablementService
,
EnablementState
,
IExtensionManagementServerService
,
IExtensionRecommendationsService
,
IExtensionsConfigContent
,
IExtensionManagementServer
}
from
'
vs/workbench/services/extensionManagement/common/extensionManagement
'
;
import
{
IWorkbenchExtensionEnablementService
,
EnablementState
,
IExtensionManagementServerService
,
IExtensionManagementServer
}
from
'
vs/workbench/services/extensionManagement/common/extensionManagement
'
;
import
{
IExtensionRecommendationsService
,
IExtensionsConfigContent
}
from
'
vs/workbench/services/extensionRecommendations/common/extensionRecommendations
'
;
import
{
areSameExtensions
}
from
'
vs/platform/extensionManagement/common/extensionManagementUtil
'
;
import
{
ExtensionType
,
ExtensionIdentifier
,
IExtensionDescription
,
IExtensionManifest
,
isLanguagePackExtension
}
from
'
vs/platform/extensions/common/extensions
'
;
import
{
IInstantiationService
,
ServicesAccessor
}
from
'
vs/platform/instantiation/common/instantiation
'
;
...
...
@@ -60,6 +61,7 @@ import { IProgressService, ProgressLocation } from 'vs/platform/progress/common/
import
{
Codicon
}
from
'
vs/base/common/codicons
'
;
import
{
IViewsService
}
from
'
vs/workbench/common/views
'
;
import
{
IActionViewItemOptions
,
ActionViewItem
}
from
'
vs/base/browser/ui/actionbar/actionViewItems
'
;
import
{
EXTENSIONS_CONFIG
}
from
'
vs/workbench/services/extensionRecommendations/common/workspaceExtensionsConfig
'
;
export
function
toExtensionDescription
(
local
:
ILocalExtension
):
IExtensionDescription
{
return
{
...
...
src/vs/workbench/contrib/extensions/browser/extensionsViews.ts
浏览文件 @
f57ac767
...
...
@@ -9,7 +9,8 @@ import { Event, Emitter } from 'vs/base/common/event';
import
{
isPromiseCanceledError
,
getErrorMessage
}
from
'
vs/base/common/errors
'
;
import
{
PagedModel
,
IPagedModel
,
IPager
,
DelayedPagedModel
}
from
'
vs/base/common/paging
'
;
import
{
SortBy
,
SortOrder
,
IQueryOptions
,
IExtensionManagementService
}
from
'
vs/platform/extensionManagement/common/extensionManagement
'
;
import
{
IExtensionManagementServer
,
IExtensionManagementServerService
,
IExtensionRecommendationsService
,
IExtensionRecommendation
,
EnablementState
}
from
'
vs/workbench/services/extensionManagement/common/extensionManagement
'
;
import
{
IExtensionManagementServer
,
IExtensionManagementServerService
,
EnablementState
}
from
'
vs/workbench/services/extensionManagement/common/extensionManagement
'
;
import
{
IExtensionRecommendationsService
,
IExtensionRecommendation
}
from
'
vs/workbench/services/extensionRecommendations/common/extensionRecommendations
'
;
import
{
areSameExtensions
}
from
'
vs/platform/extensionManagement/common/extensionManagementUtil
'
;
import
{
IKeybindingService
}
from
'
vs/platform/keybinding/common/keybinding
'
;
import
{
IContextMenuService
}
from
'
vs/platform/contextview/browser/contextView
'
;
...
...
src/vs/workbench/contrib/extensions/browser/extensionsWidgets.ts
浏览文件 @
f57ac767
...
...
@@ -9,7 +9,8 @@ import { IExtension, IExtensionsWorkbenchService, IExtensionContainer } from 'vs
import
{
append
,
$
}
from
'
vs/base/browser/dom
'
;
import
*
as
platform
from
'
vs/base/common/platform
'
;
import
{
localize
}
from
'
vs/nls
'
;
import
{
IExtensionRecommendationsService
,
IExtensionManagementServerService
}
from
'
vs/workbench/services/extensionManagement/common/extensionManagement
'
;
import
{
IExtensionManagementServerService
}
from
'
vs/workbench/services/extensionManagement/common/extensionManagement
'
;
import
{
IExtensionRecommendationsService
}
from
'
vs/workbench/services/extensionRecommendations/common/extensionRecommendations
'
;
import
{
ILabelService
}
from
'
vs/platform/label/common/label
'
;
import
{
extensionButtonProminentBackground
,
extensionButtonProminentForeground
,
ExtensionToolTipAction
}
from
'
vs/workbench/contrib/extensions/browser/extensionsActions
'
;
import
{
IThemeService
,
IColorTheme
}
from
'
vs/platform/theme/common/themeService
'
;
...
...
src/vs/workbench/contrib/extensions/browser/fileBasedRecommendations.ts
浏览文件 @
f57ac767
...
...
@@ -6,7 +6,8 @@
import
{
ITelemetryService
}
from
'
vs/platform/telemetry/common/telemetry
'
;
import
{
ExtensionRecommendations
,
ExtensionRecommendation
,
PromptedExtensionRecommendations
}
from
'
vs/workbench/contrib/extensions/browser/extensionRecommendations
'
;
import
{
INotificationService
,
Severity
}
from
'
vs/platform/notification/common/notification
'
;
import
{
ExtensionRecommendationSource
,
ExtensionRecommendationReason
,
EnablementState
}
from
'
vs/workbench/services/extensionManagement/common/extensionManagement
'
;
import
{
EnablementState
}
from
'
vs/workbench/services/extensionManagement/common/extensionManagement
'
;
import
{
ExtensionRecommendationSource
,
ExtensionRecommendationReason
}
from
'
vs/workbench/services/extensionRecommendations/common/extensionRecommendations
'
;
import
{
IExtensionsViewPaneContainer
,
IExtensionsWorkbenchService
,
IExtension
}
from
'
vs/workbench/contrib/extensions/common/extensions
'
;
import
{
CancellationToken
}
from
'
vs/base/common/cancellation
'
;
import
{
localize
}
from
'
vs/nls
'
;
...
...
src/vs/workbench/contrib/extensions/browser/keymapRecommendations.ts
浏览文件 @
f57ac767
...
...
@@ -5,7 +5,7 @@
import
{
ExtensionRecommendations
,
ExtensionRecommendation
,
PromptedExtensionRecommendations
}
from
'
vs/workbench/contrib/extensions/browser/extensionRecommendations
'
;
import
{
IProductService
}
from
'
vs/platform/product/common/productService
'
;
import
{
ExtensionRecommendationReason
}
from
'
vs/workbench/services/extension
Management/common/extensionManagement
'
;
import
{
ExtensionRecommendationReason
}
from
'
vs/workbench/services/extension
Recommendations/common/extensionRecommendations
'
;
export
class
KeymapRecommendations
extends
ExtensionRecommendations
{
...
...
src/vs/workbench/contrib/extensions/browser/workspaceRecommendations.ts
浏览文件 @
f57ac767
...
...
@@ -4,18 +4,16 @@
*--------------------------------------------------------------------------------------------*/
import
{
EXTENSION_IDENTIFIER_PATTERN
,
IExtensionGalleryService
}
from
'
vs/platform/extensionManagement/common/extensionManagement
'
;
import
{
IWorkspaceContextService
,
IWorkspaceFolder
,
IWorkspace
,
IWorkspaceFoldersChangeEvent
}
from
'
vs/platform/workspace/common/workspace
'
;
import
{
IFileService
}
from
'
vs/platform/files/common/files
'
;
import
{
distinct
,
flatten
,
coalesce
}
from
'
vs/base/common/arrays
'
;
import
{
IWorkspaceContextService
,
IWorkspaceFoldersChangeEvent
}
from
'
vs/platform/workspace/common/workspace
'
;
import
{
distinct
,
flatten
}
from
'
vs/base/common/arrays
'
;
import
{
ExtensionRecommendations
,
ExtensionRecommendation
,
PromptedExtensionRecommendations
}
from
'
vs/workbench/contrib/extensions/browser/extensionRecommendations
'
;
import
{
INotificationService
}
from
'
vs/platform/notification/common/notification
'
;
import
{
IExtensionsConfigContent
,
ExtensionRecommendationSource
,
ExtensionRecommendationReason
}
from
'
vs/workbench/services/extensionManagement/common/extensionManagement
'
;
import
{
parse
}
from
'
vs/base/common/json
'
;
import
{
EXTENSIONS_CONFIG
}
from
'
vs/workbench/contrib/extensions/common/extensions
'
;
import
{
IExtensionsConfigContent
,
ExtensionRecommendationReason
}
from
'
vs/workbench/services/extensionRecommendations/common/extensionRecommendations
'
;
import
{
ILogService
}
from
'
vs/platform/log/common/log
'
;
import
{
CancellationToken
}
from
'
vs/base/common/cancellation
'
;
import
{
localize
}
from
'
vs/nls
'
;
import
{
Emitter
}
from
'
vs/base/common/event
'
;
import
{
IWorkpsaceExtensionsConfigService
}
from
'
vs/workbench/services/extensionRecommendations/common/workspaceExtensionsConfig
'
;
export
class
WorkspaceRecommendations
extends
ExtensionRecommendations
{
...
...
@@ -31,9 +29,9 @@ export class WorkspaceRecommendations extends ExtensionRecommendations {
constructor
(
promptedExtensionRecommendations
:
PromptedExtensionRecommendations
,
@
IWorkspaceContextService
private
readonly
contextService
:
IWorkspaceContextService
,
@
IWorkpsaceExtensionsConfigService
private
readonly
workpsaceExtensionsConfigService
:
IWorkpsaceExtensionsConfigService
,
@
IExtensionGalleryService
private
readonly
galleryService
:
IExtensionGalleryService
,
@
ILogService
private
readonly
logService
:
ILogService
,
@
IFileService
private
readonly
fileService
:
IFileService
,
@
INotificationService
private
readonly
notificationService
:
INotificationService
,
)
{
super
(
promptedExtensionRecommendations
);
...
...
@@ -49,26 +47,26 @@ export class WorkspaceRecommendations extends ExtensionRecommendations {
*/
private
async
fetch
():
Promise
<
void
>
{
const
extensionsConfig
BySource
=
await
this
.
fetchExtensionsConfigBySource
();
const
extensionsConfig
s
=
await
this
.
workpsaceExtensionsConfigService
.
getExtensionsConfigs
();
const
{
invalidRecommendations
,
message
}
=
await
this
.
validateExtensions
(
extensionsConfig
BySource
.
map
(({
contents
})
=>
contents
)
);
const
{
invalidRecommendations
,
message
}
=
await
this
.
validateExtensions
(
extensionsConfig
s
);
if
(
invalidRecommendations
.
length
)
{
this
.
notificationService
.
warn
(
`The
${
invalidRecommendations
.
length
}
extension(s) below, in workspace recommendations have issues:\n
${
message
}
`
);
}
this
.
_ignoredRecommendations
=
[];
for
(
const
extensionsConfig
of
extensionsConfig
BySource
)
{
for
(
const
unwantedRecommendation
of
extensionsConfig
.
contents
.
unwantedRecommendations
)
{
for
(
const
extensionsConfig
of
extensionsConfig
s
)
{
for
(
const
unwantedRecommendation
of
extensionsConfig
.
unwantedRecommendations
)
{
if
(
invalidRecommendations
.
indexOf
(
unwantedRecommendation
)
===
-
1
)
{
this
.
_ignoredRecommendations
.
push
(
unwantedRecommendation
);
}
}
for
(
const
extensionId
of
extensionsConfig
.
contents
.
recommendations
)
{
for
(
const
extensionId
of
extensionsConfig
.
recommendations
)
{
if
(
invalidRecommendations
.
indexOf
(
extensionId
)
===
-
1
)
{
this
.
_recommendations
.
push
({
extensionId
,
source
:
extensionsConfig
.
source
,
source
:
this
.
contextService
.
getWorkspace
()
,
reason
:
{
reasonId
:
ExtensionRecommendationReason
.
Workspace
,
reasonText
:
localize
(
'
workspaceRecommendation
'
,
"
This extension is recommended by users of the current workspace.
"
)
...
...
@@ -79,41 +77,6 @@ export class WorkspaceRecommendations extends ExtensionRecommendations {
}
}
private
async
fetchExtensionsConfigBySource
():
Promise
<
{
contents
:
IExtensionsConfigContent
,
source
:
ExtensionRecommendationSource
}[]
>
{
const
workspace
=
this
.
contextService
.
getWorkspace
();
const
result
=
await
Promise
.
all
([
this
.
resolveWorkspaceExtensionConfig
(
workspace
),
...
workspace
.
folders
.
map
(
workspaceFolder
=>
this
.
resolveWorkspaceFolderExtensionConfig
(
workspaceFolder
))
]);
return
coalesce
(
result
);
}
private
async
resolveWorkspaceExtensionConfig
(
workspace
:
IWorkspace
):
Promise
<
{
contents
:
IExtensionsConfigContent
,
source
:
ExtensionRecommendationSource
}
|
null
>
{
try
{
if
(
workspace
.
configuration
)
{
const
content
=
await
this
.
fileService
.
readFile
(
workspace
.
configuration
);
const
extensionsConfigContent
=
<
IExtensionsConfigContent
|
undefined
>
parse
(
content
.
value
.
toString
())[
'
extensions
'
];
const
contents
=
this
.
parseExtensionConfig
(
extensionsConfigContent
);
if
(
contents
)
{
return
{
contents
,
source
:
workspace
};
}
}
}
catch
(
e
)
{
/* Ignore */
}
return
null
;
}
private
async
resolveWorkspaceFolderExtensionConfig
(
workspaceFolder
:
IWorkspaceFolder
):
Promise
<
{
contents
:
IExtensionsConfigContent
,
source
:
ExtensionRecommendationSource
}
|
null
>
{
try
{
const
content
=
await
this
.
fileService
.
readFile
(
workspaceFolder
.
toResource
(
EXTENSIONS_CONFIG
));
const
extensionsConfigContent
=
<
IExtensionsConfigContent
>
parse
(
content
.
value
.
toString
());
const
contents
=
this
.
parseExtensionConfig
(
extensionsConfigContent
);
if
(
contents
)
{
return
{
contents
,
source
:
workspaceFolder
};
}
}
catch
(
e
)
{
/* ignore */
}
return
null
;
}
private
async
validateExtensions
(
contents
:
IExtensionsConfigContent
[]):
Promise
<
{
validRecommendations
:
string
[],
invalidRecommendations
:
string
[],
message
:
string
}
>
{
const
validExtensions
:
string
[]
=
[];
...
...
@@ -165,15 +128,5 @@ export class WorkspaceRecommendations extends ExtensionRecommendations {
}
}
private
parseExtensionConfig
(
extensionsConfigContent
:
IExtensionsConfigContent
|
undefined
):
IExtensionsConfigContent
|
null
{
if
(
extensionsConfigContent
)
{
return
{
recommendations
:
distinct
((
extensionsConfigContent
.
recommendations
||
[]).
map
(
e
=>
e
.
toLowerCase
())),
unwantedRecommendations
:
distinct
((
extensionsConfigContent
.
unwantedRecommendations
||
[]).
map
(
e
=>
e
.
toLowerCase
()))
};
}
return
null
;
}
}
src/vs/workbench/contrib/extensions/common/extensions.ts
浏览文件 @
f57ac767
...
...
@@ -17,8 +17,6 @@ import { IViewPaneContainer } from 'vs/workbench/common/views';
export
const
VIEWLET_ID
=
'
workbench.view.extensions
'
;
export
const
EXTENSIONS_CONFIG
=
'
.vscode/extensions.json
'
;
export
interface
IExtensionsViewPaneContainer
extends
IViewPaneContainer
{
search
(
text
:
string
,
refresh
?:
boolean
):
void
;
}
...
...
src/vs/workbench/contrib/extensions/common/extensionsUtils.ts
浏览文件 @
f57ac767
...
...
@@ -9,7 +9,8 @@ import { onUnexpectedError } from 'vs/base/common/errors';
import
{
Disposable
}
from
'
vs/base/common/lifecycle
'
;
import
{
ITelemetryService
}
from
'
vs/platform/telemetry/common/telemetry
'
;
import
{
IExtensionManagementService
,
ILocalExtension
,
IExtensionIdentifier
,
InstallOperation
}
from
'
vs/platform/extensionManagement/common/extensionManagement
'
;
import
{
IWorkbenchExtensionEnablementService
,
EnablementState
,
IExtensionRecommendationsService
}
from
'
vs/workbench/services/extensionManagement/common/extensionManagement
'
;
import
{
IWorkbenchExtensionEnablementService
,
EnablementState
}
from
'
vs/workbench/services/extensionManagement/common/extensionManagement
'
;
import
{
IExtensionRecommendationsService
}
from
'
vs/workbench/services/extensionRecommendations/common/extensionRecommendations
'
;
import
{
ILifecycleService
}
from
'
vs/platform/lifecycle/common/lifecycle
'
;
import
{
IWorkbenchContribution
}
from
'
vs/workbench/common/contributions
'
;
import
{
ServicesAccessor
,
IInstantiationService
}
from
'
vs/platform/instantiation/common/instantiation
'
;
...
...
src/vs/workbench/contrib/extensions/test/electron-browser/extensionRecommendationsService.test.ts
浏览文件 @
f57ac767
...
...
@@ -58,6 +58,7 @@ import { IWorkspaceTagsService } from 'vs/workbench/contrib/tags/common/workspac
import
{
IStorageKeysSyncRegistryService
,
StorageKeysSyncRegistryService
}
from
'
vs/platform/userDataSync/common/storageKeys
'
;
import
{
ExtensionsWorkbenchService
}
from
'
vs/workbench/contrib/extensions/browser/extensionsWorkbenchService
'
;
import
{
IExtensionService
}
from
'
vs/workbench/services/extensions/common/extensions
'
;
import
{
IWorkpsaceExtensionsConfigService
,
WorkspaceExtensionsConfigService
}
from
'
vs/workbench/services/extensionRecommendations/common/workspaceExtensionsConfig
'
;
const
mockExtensionGallery
:
IGalleryExtension
[]
=
[
aGalleryExtension
(
'
MockExtension1
'
,
{
...
...
@@ -301,6 +302,7 @@ suite('ExtensionRecommendationsService Test', () => {
const
myWorkspace
=
testWorkspace
(
URI
.
from
({
scheme
:
'
file
'
,
path
:
folderDir
}));
workspaceService
=
new
TestContextService
(
myWorkspace
);
instantiationService
.
stub
(
IWorkspaceContextService
,
workspaceService
);
instantiationService
.
stub
(
IWorkpsaceExtensionsConfigService
,
instantiationService
.
createInstance
(
WorkspaceExtensionsConfigService
));
const
fileService
=
new
FileService
(
new
NullLogService
());
fileService
.
registerProvider
(
Schemas
.
file
,
new
DiskFileSystemProvider
(
new
NullLogService
()));
instantiationService
.
stub
(
IFileService
,
fileService
);
...
...
src/vs/workbench/contrib/extensions/test/electron-browser/extensionsActions.test.ts
浏览文件 @
f57ac767
...
...
@@ -12,7 +12,8 @@ import {
IExtensionManagementService
,
IExtensionGalleryService
,
ILocalExtension
,
IGalleryExtension
,
DidInstallExtensionEvent
,
DidUninstallExtensionEvent
,
InstallExtensionEvent
,
IExtensionIdentifier
,
InstallOperation
,
IExtensionTipsService
,
IGalleryMetadata
}
from
'
vs/platform/extensionManagement/common/extensionManagement
'
;
import
{
IWorkbenchExtensionEnablementService
,
EnablementState
,
IExtensionManagementServerService
,
IExtensionManagementServer
,
IExtensionRecommendationsService
}
from
'
vs/workbench/services/extensionManagement/common/extensionManagement
'
;
import
{
IWorkbenchExtensionEnablementService
,
EnablementState
,
IExtensionManagementServerService
,
IExtensionManagementServer
}
from
'
vs/workbench/services/extensionManagement/common/extensionManagement
'
;
import
{
IExtensionRecommendationsService
}
from
'
vs/workbench/services/extensionRecommendations/common/extensionRecommendations
'
;
import
{
getGalleryExtensionId
}
from
'
vs/platform/extensionManagement/common/extensionManagementUtil
'
;
import
{
TestExtensionEnablementService
}
from
'
vs/workbench/services/extensionManagement/test/browser/extensionEnablementService.test
'
;
import
{
ExtensionGalleryService
}
from
'
vs/platform/extensionManagement/common/extensionGalleryService
'
;
...
...
src/vs/workbench/contrib/extensions/test/electron-browser/extensionsViews.test.ts
浏览文件 @
f57ac767
...
...
@@ -13,7 +13,8 @@ import {
IExtensionManagementService
,
IExtensionGalleryService
,
ILocalExtension
,
IGalleryExtension
,
IQueryOptions
,
DidInstallExtensionEvent
,
DidUninstallExtensionEvent
,
InstallExtensionEvent
,
IExtensionIdentifier
,
SortBy
}
from
'
vs/platform/extensionManagement/common/extensionManagement
'
;
import
{
IWorkbenchExtensionEnablementService
,
EnablementState
,
IExtensionManagementServerService
,
IExtensionManagementServer
,
IExtensionRecommendationsService
,
ExtensionRecommendationReason
,
IExtensionRecommendation
}
from
'
vs/workbench/services/extensionManagement/common/extensionManagement
'
;
import
{
IWorkbenchExtensionEnablementService
,
EnablementState
,
IExtensionManagementServerService
,
IExtensionManagementServer
}
from
'
vs/workbench/services/extensionManagement/common/extensionManagement
'
;
import
{
IExtensionRecommendationsService
,
ExtensionRecommendationReason
,
IExtensionRecommendation
}
from
'
vs/workbench/services/extensionRecommendations/common/extensionRecommendations
'
;
import
{
getGalleryExtensionId
}
from
'
vs/platform/extensionManagement/common/extensionManagementUtil
'
;
import
{
TestExtensionEnablementService
}
from
'
vs/workbench/services/extensionManagement/test/browser/extensionEnablementService.test
'
;
import
{
ExtensionGalleryService
}
from
'
vs/platform/extensionManagement/common/extensionGalleryService
'
;
...
...
src/vs/workbench/contrib/extensions/test/electron-browser/extensionsWorkbenchService.test.ts
浏览文件 @
f57ac767
...
...
@@ -13,7 +13,8 @@ import {
IExtensionManagementService
,
IExtensionGalleryService
,
ILocalExtension
,
IGalleryExtension
,
DidInstallExtensionEvent
,
DidUninstallExtensionEvent
,
InstallExtensionEvent
,
IGalleryExtensionAssets
,
IExtensionIdentifier
,
InstallOperation
,
IExtensionTipsService
,
IGalleryMetadata
}
from
'
vs/platform/extensionManagement/common/extensionManagement
'
;
import
{
IWorkbenchExtensionEnablementService
,
EnablementState
,
IExtensionManagementServerService
,
IExtensionRecommendationsService
,
IExtensionManagementServer
}
from
'
vs/workbench/services/extensionManagement/common/extensionManagement
'
;
import
{
IWorkbenchExtensionEnablementService
,
EnablementState
,
IExtensionManagementServerService
,
IExtensionManagementServer
}
from
'
vs/workbench/services/extensionManagement/common/extensionManagement
'
;
import
{
IExtensionRecommendationsService
}
from
'
vs/workbench/services/extensionRecommendations/common/extensionRecommendations
'
;
import
{
getGalleryExtensionId
}
from
'
vs/platform/extensionManagement/common/extensionManagementUtil
'
;
import
{
TestExtensionEnablementService
}
from
'
vs/workbench/services/extensionManagement/test/browser/extensionEnablementService.test
'
;
import
{
ExtensionGalleryService
}
from
'
vs/platform/extensionManagement/common/extensionGalleryService
'
;
...
...
src/vs/workbench/contrib/welcome/page/browser/welcomePage.ts
浏览文件 @
f57ac767
...
...
@@ -23,7 +23,8 @@ import { Schemas } from 'vs/base/common/network';
import
{
IBackupFileService
}
from
'
vs/workbench/services/backup/common/backup
'
;
import
{
getInstalledExtensions
,
IExtensionStatus
,
onExtensionChanged
,
isKeymapExtension
}
from
'
vs/workbench/contrib/extensions/common/extensionsUtils
'
;
import
{
IExtensionManagementService
,
IExtensionGalleryService
,
ILocalExtension
}
from
'
vs/platform/extensionManagement/common/extensionManagement
'
;
import
{
IWorkbenchExtensionEnablementService
,
EnablementState
,
IExtensionRecommendationsService
}
from
'
vs/workbench/services/extensionManagement/common/extensionManagement
'
;
import
{
IWorkbenchExtensionEnablementService
,
EnablementState
}
from
'
vs/workbench/services/extensionManagement/common/extensionManagement
'
;
import
{
IExtensionRecommendationsService
}
from
'
vs/workbench/services/extensionRecommendations/common/extensionRecommendations
'
;
import
{
ILifecycleService
,
StartupKind
}
from
'
vs/platform/lifecycle/common/lifecycle
'
;
import
{
Disposable
}
from
'
vs/base/common/lifecycle
'
;
import
{
splitName
}
from
'
vs/base/common/labels
'
;
...
...
src/vs/workbench/electron-sandbox/sandbox.simpleservices.ts
浏览文件 @
f57ac767
...
...
@@ -38,7 +38,8 @@ import { isWindows, OS } from 'vs/base/common/platform';
import
{
IWebviewService
,
WebviewContentOptions
,
WebviewElement
,
WebviewExtensionDescription
,
WebviewIcons
,
WebviewOptions
,
WebviewOverlay
}
from
'
vs/workbench/contrib/webview/browser/webview
'
;
import
{
ITextFileService
}
from
'
vs/workbench/services/textfile/common/textfiles
'
;
import
{
AbstractTextFileService
}
from
'
vs/workbench/services/textfile/browser/textFileService
'
;
import
{
ExtensionRecommendationReason
,
IExtensionManagementServer
,
IExtensionManagementServerService
,
IExtensionRecommendation
}
from
'
vs/workbench/services/extensionManagement/common/extensionManagement
'
;
import
{
IExtensionManagementServer
,
IExtensionManagementServerService
}
from
'
vs/workbench/services/extensionManagement/common/extensionManagement
'
;
import
{
ExtensionRecommendationReason
,
IExtensionRecommendation
}
from
'
vs/workbench/services/extensionRecommendations/common/extensionRecommendations
'
;
import
{
ITunnelProvider
,
ITunnelService
,
RemoteTunnel
}
from
'
vs/platform/remote/common/tunnel
'
;
import
{
Disposable
,
IDisposable
}
from
'
vs/base/common/lifecycle
'
;
import
{
IManualSyncTask
,
IResourcePreview
,
ISyncResourceHandle
,
ISyncTask
,
IUserDataAutoSyncService
,
IUserDataSyncService
,
IUserDataSyncStore
,
IUserDataSyncStoreManagementService
,
SyncResource
,
SyncStatus
,
UserDataSyncStoreType
}
from
'
vs/platform/userDataSync/common/userDataSync
'
;
...
...
src/vs/workbench/services/extensionManagement/common/extensionManagement.ts
浏览文件 @
f57ac767
...
...
@@ -5,11 +5,8 @@
import
{
Event
}
from
'
vs/base/common/event
'
;
import
{
createDecorator
}
from
'
vs/platform/instantiation/common/instantiation
'
;
import
{
URI
}
from
'
vs/base/common/uri
'
;
import
{
IExtension
,
IScannedExtension
,
ExtensionType
,
ITranslatedScannedExtension
}
from
'
vs/platform/extensions/common/extensions
'
;
import
{
IExtensionManagementService
,
IGalleryExtension
,
IExtensionIdentifier
}
from
'
vs/platform/extensionManagement/common/extensionManagement
'
;
import
{
IWorkspace
,
IWorkspaceFolder
}
from
'
vs/platform/workspace/common/workspace
'
;
import
{
IStringDictionary
}
from
'
vs/base/common/collections
'
;
export
const
IExtensionManagementServerService
=
createDecorator
<
IExtensionManagementServerService
>
(
'
extensionManagementServerService
'
);
...
...
@@ -88,63 +85,6 @@ export interface IWorkbenchExtensionEnablementService {
setEnablement
(
extensions
:
IExtension
[],
state
:
EnablementState
):
Promise
<
boolean
[]
>
;
}
export
interface
IExtensionsConfigContent
{
recommendations
:
string
[];
unwantedRecommendations
:
string
[];
}
export
type
RecommendationChangeNotification
=
{
extensionId
:
string
,
isRecommended
:
boolean
};
export
type
DynamicRecommendation
=
'
dynamic
'
;
export
type
ConfigRecommendation
=
'
config
'
;
export
type
ExecutableRecommendation
=
'
executable
'
;
export
type
CachedRecommendation
=
'
cached
'
;
export
type
ApplicationRecommendation
=
'
application
'
;
export
type
ExperimentalRecommendation
=
'
experimental
'
;
export
type
ExtensionRecommendationSource
=
IWorkspace
|
IWorkspaceFolder
|
URI
|
DynamicRecommendation
|
ExecutableRecommendation
|
CachedRecommendation
|
ApplicationRecommendation
|
ExperimentalRecommendation
|
ConfigRecommendation
;
export
interface
IExtensionRecommendation
{
extensionId
:
string
;
sources
:
ExtensionRecommendationSource
[];
}
export
const
enum
ExtensionRecommendationReason
{
Workspace
,
File
,
Executable
,
WorkspaceConfig
,
DynamicWorkspace
,
Experimental
,
Application
,
}
export
interface
IExtensionRecommendationReson
{
reasonId
:
ExtensionRecommendationReason
;
reasonText
:
string
;
}
export
const
IExtensionRecommendationsService
=
createDecorator
<
IExtensionRecommendationsService
>
(
'
extensionRecommendationsService
'
);
export
interface
IExtensionRecommendationsService
{
readonly
_serviceBrand
:
undefined
;
getAllRecommendationsWithReason
():
IStringDictionary
<
IExtensionRecommendationReson
>
;
getImportantRecommendations
():
Promise
<
IExtensionRecommendation
[]
>
;
getOtherRecommendations
():
Promise
<
IExtensionRecommendation
[]
>
;
getFileBasedRecommendations
():
IExtensionRecommendation
[];
getExeBasedRecommendations
(
exe
?:
string
):
Promise
<
{
important
:
IExtensionRecommendation
[],
others
:
IExtensionRecommendation
[]
}
>
;
getConfigBasedRecommendations
():
Promise
<
{
important
:
IExtensionRecommendation
[],
others
:
IExtensionRecommendation
[]
}
>
;
getWorkspaceRecommendations
():
Promise
<
IExtensionRecommendation
[]
>
;
getKeymapRecommendations
():
IExtensionRecommendation
[];
toggleIgnoredRecommendation
(
extensionId
:
string
,
shouldIgnore
:
boolean
):
void
;
getIgnoredRecommendations
():
ReadonlyArray
<
string
>
;
onRecommendationChange
:
Event
<
RecommendationChangeNotification
>
;
}
export
const
IWebExtensionsScannerService
=
createDecorator
<
IWebExtensionsScannerService
>
(
'
IWebExtensionsScannerService
'
);
export
interface
IWebExtensionsScannerService
{
readonly
_serviceBrand
:
undefined
;
...
...
src/vs/workbench/services/extensionRecommendations/common/extensionRecommendations.ts
0 → 100644
浏览文件 @
f57ac767
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import
{
Event
}
from
'
vs/base/common/event
'
;
import
{
createDecorator
}
from
'
vs/platform/instantiation/common/instantiation
'
;
import
{
URI
}
from
'
vs/base/common/uri
'
;
import
{
IWorkspace
,
IWorkspaceFolder
}
from
'
vs/platform/workspace/common/workspace
'
;
import
{
IStringDictionary
}
from
'
vs/base/common/collections
'
;
export
interface
IExtensionsConfigContent
{
recommendations
:
string
[];
unwantedRecommendations
:
string
[];
}
export
type
RecommendationChangeNotification
=
{
extensionId
:
string
,
isRecommended
:
boolean
};
export
type
DynamicRecommendation
=
'
dynamic
'
;
export
type
ConfigRecommendation
=
'
config
'
;
export
type
ExecutableRecommendation
=
'
executable
'
;
export
type
CachedRecommendation
=
'
cached
'
;
export
type
ApplicationRecommendation
=
'
application
'
;
export
type
ExperimentalRecommendation
=
'
experimental
'
;
export
type
ExtensionRecommendationSource
=
IWorkspace
|
IWorkspaceFolder
|
URI
|
DynamicRecommendation
|
ExecutableRecommendation
|
CachedRecommendation
|
ApplicationRecommendation
|
ExperimentalRecommendation
|
ConfigRecommendation
;
export
interface
IExtensionRecommendation
{
extensionId
:
string
;
sources
:
ExtensionRecommendationSource
[];
}
export
const
enum
ExtensionRecommendationReason
{
Workspace
,
File
,
Executable
,
WorkspaceConfig
,
DynamicWorkspace
,
Experimental
,
Application
,
}
export
interface
IExtensionRecommendationReson
{
reasonId
:
ExtensionRecommendationReason
;
reasonText
:
string
;
}
export
const
IExtensionRecommendationsService
=
createDecorator
<
IExtensionRecommendationsService
>
(
'
extensionRecommendationsService
'
);
export
interface
IExtensionRecommendationsService
{
readonly
_serviceBrand
:
undefined
;
getAllRecommendationsWithReason
():
IStringDictionary
<
IExtensionRecommendationReson
>
;
getImportantRecommendations
():
Promise
<
IExtensionRecommendation
[]
>
;
getOtherRecommendations
():
Promise
<
IExtensionRecommendation
[]
>
;
getFileBasedRecommendations
():
IExtensionRecommendation
[];
getExeBasedRecommendations
(
exe
?:
string
):
Promise
<
{
important
:
IExtensionRecommendation
[],
others
:
IExtensionRecommendation
[]
}
>
;
getConfigBasedRecommendations
():
Promise
<
{
important
:
IExtensionRecommendation
[],
others
:
IExtensionRecommendation
[]
}
>
;
getWorkspaceRecommendations
():
Promise
<
IExtensionRecommendation
[]
>
;
getKeymapRecommendations
():
IExtensionRecommendation
[];
toggleIgnoredRecommendation
(
extensionId
:
string
,
shouldIgnore
:
boolean
):
void
;
getIgnoredRecommendations
():
ReadonlyArray
<
string
>
;
onRecommendationChange
:
Event
<
RecommendationChangeNotification
>
;
}
src/vs/workbench/services/extensionRecommendations/common/workspaceExtensionsConfig.ts
0 → 100644
浏览文件 @
f57ac767
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import
{
coalesce
,
distinct
,
flatten
}
from
'
vs/base/common/arrays
'
;
import
{
parse
}
from
'
vs/base/common/json
'
;
import
{
IFileService
}
from
'
vs/platform/files/common/files
'
;
import
{
registerSingleton
}
from
'
vs/platform/instantiation/common/extensions
'
;
import
{
createDecorator
}
from
'
vs/platform/instantiation/common/instantiation
'
;
import
{
IWorkspace
,
IWorkspaceContextService
,
IWorkspaceFolder
}
from
'
vs/platform/workspace/common/workspace
'
;
export
const
EXTENSIONS_CONFIG
=
'
.vscode/extensions.json
'
;
export
interface
IExtensionsConfigContent
{
recommendations
:
string
[];
unwantedRecommendations
:
string
[];
}
export
const
IWorkpsaceExtensionsConfigService
=
createDecorator
<
IWorkpsaceExtensionsConfigService
>
(
'
IWorkpsaceExtensionsConfigService
'
);
export
interface
IWorkpsaceExtensionsConfigService
{
readonly
_serviceBrand
:
undefined
;
getExtensionsConfigs
():
Promise
<
IExtensionsConfigContent
[]
>
;
getUnwantedRecommendations
():
Promise
<
string
[]
>
;
}
export
class
WorkspaceExtensionsConfigService
implements
IWorkpsaceExtensionsConfigService
{
declare
readonly
_serviceBrand
:
undefined
;
constructor
(
@
IWorkspaceContextService
private
readonly
workspaceContextService
:
IWorkspaceContextService
,
@
IFileService
private
readonly
fileService
:
IFileService
,
)
{
}
async
getExtensionsConfigs
():
Promise
<
IExtensionsConfigContent
[]
>
{
const
workspace
=
this
.
workspaceContextService
.
getWorkspace
();
const
result
=
await
Promise
.
all
([
this
.
resolveWorkspaceExtensionConfig
(
workspace
),
...
workspace
.
folders
.
map
(
workspaceFolder
=>
this
.
resolveWorkspaceFolderExtensionConfig
(
workspaceFolder
))
]);
return
coalesce
(
result
);
}
async
getUnwantedRecommendations
():
Promise
<
string
[]
>
{
const
configs
=
await
this
.
getExtensionsConfigs
();
return
distinct
(
flatten
(
configs
.
map
(
c
=>
c
.
unwantedRecommendations
)));
}
private
async
resolveWorkspaceExtensionConfig
(
workspace
:
IWorkspace
):
Promise
<
IExtensionsConfigContent
|
null
>
{
try
{
if
(
workspace
.
configuration
)
{
const
content
=
await
this
.
fileService
.
readFile
(
workspace
.
configuration
);
const
extensionsConfigContent
=
<
IExtensionsConfigContent
|
undefined
>
parse
(
content
.
value
.
toString
())[
'
extensions
'
];
return
this
.
parseExtensionConfig
(
extensionsConfigContent
);
}
}
catch
(
e
)
{
/* Ignore */
}
return
null
;
}
private
async
resolveWorkspaceFolderExtensionConfig
(
workspaceFolder
:
IWorkspaceFolder
):
Promise
<
IExtensionsConfigContent
|
null
>
{
try
{
const
content
=
await
this
.
fileService
.
readFile
(
workspaceFolder
.
toResource
(
EXTENSIONS_CONFIG
));
const
extensionsConfigContent
=
<
IExtensionsConfigContent
>
parse
(
content
.
value
.
toString
());
return
this
.
parseExtensionConfig
(
extensionsConfigContent
);
}
catch
(
e
)
{
/* ignore */
}
return
null
;
}
private
parseExtensionConfig
(
extensionsConfigContent
:
IExtensionsConfigContent
|
undefined
):
IExtensionsConfigContent
|
null
{
if
(
extensionsConfigContent
)
{
return
{
recommendations
:
distinct
((
extensionsConfigContent
.
recommendations
||
[]).
map
(
e
=>
e
.
toLowerCase
())),
unwantedRecommendations
:
distinct
((
extensionsConfigContent
.
unwantedRecommendations
||
[]).
map
(
e
=>
e
.
toLowerCase
()))
};
}
return
null
;
}
}
registerSingleton
(
IWorkpsaceExtensionsConfigService
,
WorkspaceExtensionsConfigService
);
src/vs/workbench/workbench.common.main.ts
浏览文件 @
f57ac767
...
...
@@ -75,6 +75,7 @@ import 'vs/workbench/services/label/common/labelService';
import
'
vs/workbench/services/extensionManagement/common/webExtensionsScannerService
'
;
import
'
vs/workbench/services/extensionManagement/common/extensionEnablementService
'
;
import
'
vs/workbench/services/extensionManagement/browser/builtinExtensionsScannerService
'
;
import
'
vs/workbench/services/extensionRecommendations/common/workspaceExtensionsConfig
'
;
import
'
vs/workbench/services/notification/common/notificationService
'
;
import
'
vs/workbench/services/userDataSync/common/userDataSyncUtil
'
;
import
'
vs/workbench/services/remote/common/remoteExplorerService
'
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录