Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
掘金者说
vscode
提交
44b97e05
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,发现更多精彩内容 >>
未验证
提交
44b97e05
编写于
5月 02, 2021
作者:
L
Ladislau Szomoru
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'lszomoru/extensionSupportCompletionProvider'
上级
c8bd5b21
b7b095cd
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
69 addition
and
10 deletion
+69
-10
extensions/configuration-editing/src/settingsDocumentHelper.ts
...sions/configuration-editing/src/settingsDocumentHelper.ts
+1
-10
src/vs/workbench/contrib/extensions/browser/extensions.contribution.ts
...nch/contrib/extensions/browser/extensions.contribution.ts
+2
-0
src/vs/workbench/contrib/extensions/browser/extensionsCompletionItemsProvider.ts
...b/extensions/browser/extensionsCompletionItemsProvider.ts
+66
-0
未找到文件。
extensions/configuration-editing/src/settingsDocumentHelper.ts
浏览文件 @
44b97e05
...
...
@@ -6,7 +6,7 @@
import
*
as
vscode
from
'
vscode
'
;
import
{
getLocation
,
Location
,
parse
}
from
'
jsonc-parser
'
;
import
*
as
nls
from
'
vscode-nls
'
;
import
{
provideInstalledExtensionProposals
,
provideWorkspaceTrustExtensionProposals
}
from
'
./extensionsProposals
'
;
import
{
provideInstalledExtensionProposals
}
from
'
./extensionsProposals
'
;
const
localize
=
nls
.
loadMessageBundle
();
...
...
@@ -60,15 +60,6 @@ export class SettingsDocument {
return
provideInstalledExtensionProposals
(
alreadyConfigured
,
`: [\n\t"ui"\n]`
,
range
,
true
);
}
// extensions.supportUntrustedWorkspaces
if
(
location
.
path
[
0
]
===
'
extensions.supportUntrustedWorkspaces
'
&&
location
.
path
.
length
===
2
&&
location
.
isAtPropertyKey
)
{
let
alreadyConfigured
:
string
[]
=
[];
try
{
alreadyConfigured
=
Object
.
keys
(
parse
(
this
.
document
.
getText
())[
'
extensions.supportUntrustedWorkspaces
'
]);
}
catch
(
e
)
{
/* ignore error */
}
return
provideWorkspaceTrustExtensionProposals
(
alreadyConfigured
,
range
);
}
return
this
.
provideLanguageOverridesCompletionItems
(
location
,
position
);
}
...
...
src/vs/workbench/contrib/extensions/browser/extensions.contribution.ts
浏览文件 @
44b97e05
...
...
@@ -72,6 +72,7 @@ import { Query } from 'vs/workbench/contrib/extensions/common/extensionQuery';
import
{
Promises
}
from
'
vs/base/common/async
'
;
import
{
EditorExtensions
}
from
'
vs/workbench/common/editor
'
;
import
{
WORKSPACE_TRUST_EXTENSION_SUPPORT
}
from
'
vs/workbench/services/workspaces/common/workspaceTrust
'
;
import
{
ExtensionsCompletionItemsProvider
}
from
'
vs/workbench/contrib/extensions/browser/extensionsCompletionItemsProvider
'
;
// Singletons
registerSingleton
(
IExtensionsWorkbenchService
,
ExtensionsWorkbenchService
);
...
...
@@ -1326,6 +1327,7 @@ workbenchRegistry.registerWorkbenchContribution(ExtensionsViewletViewsContributi
workbenchRegistry
.
registerWorkbenchContribution
(
ExtensionActivationProgress
,
LifecyclePhase
.
Eventually
);
workbenchRegistry
.
registerWorkbenchContribution
(
ExtensionDependencyChecker
,
LifecyclePhase
.
Eventually
);
workbenchRegistry
.
registerWorkbenchContribution
(
ExtensionEnablementByWorkspaceTrustRequirement
,
LifecyclePhase
.
Restored
);
workbenchRegistry
.
registerWorkbenchContribution
(
ExtensionsCompletionItemsProvider
,
LifecyclePhase
.
Restored
);
// Running Extensions
const
actionRegistry
=
Registry
.
as
<
IWorkbenchActionRegistry
>
(
WorkbenchActionExtensions
.
WorkbenchActions
);
...
...
src/vs/workbench/contrib/extensions/browser/extensionsCompletionItemsProvider.ts
0 → 100644
浏览文件 @
44b97e05
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import
{
localize
}
from
'
vs/nls
'
;
import
{
CancellationToken
}
from
'
vs/base/common/cancellation
'
;
import
{
getLocation
,
parse
}
from
'
vs/base/common/json
'
;
import
{
Disposable
}
from
'
vs/base/common/lifecycle
'
;
import
{
Position
}
from
'
vs/editor/common/core/position
'
;
import
{
ITextModel
}
from
'
vs/editor/common/model
'
;
import
{
CompletionContext
,
CompletionList
,
CompletionProviderRegistry
,
CompletionItemKind
,
CompletionItem
}
from
'
vs/editor/common/modes
'
;
import
{
IExtensionManagementService
}
from
'
vs/platform/extensionManagement/common/extensionManagement
'
;
import
{
IWorkbenchContribution
}
from
'
vs/workbench/common/contributions
'
;
import
{
Range
}
from
'
vs/editor/common/core/range
'
;
export
class
ExtensionsCompletionItemsProvider
extends
Disposable
implements
IWorkbenchContribution
{
constructor
(
@
IExtensionManagementService
private
readonly
extensionManagementService
:
IExtensionManagementService
,
)
{
super
();
this
.
_register
(
CompletionProviderRegistry
.
register
({
language
:
'
jsonc
'
,
pattern
:
'
**/settings.json
'
},
{
provideCompletionItems
:
async
(
model
:
ITextModel
,
position
:
Position
,
_context
:
CompletionContext
,
token
:
CancellationToken
):
Promise
<
CompletionList
>
=>
{
const
getWordRangeAtPosition
=
(
model
:
ITextModel
,
position
:
Position
):
Range
|
null
=>
{
const
wordAtPosition
=
model
.
getWordAtPosition
(
position
);
return
wordAtPosition
?
new
Range
(
position
.
lineNumber
,
wordAtPosition
.
startColumn
,
position
.
lineNumber
,
wordAtPosition
.
endColumn
)
:
null
;
};
const
location
=
getLocation
(
model
.
getValue
(),
model
.
getOffsetAt
(
position
));
const
range
=
getWordRangeAtPosition
(
model
,
position
)
??
Range
.
fromPositions
(
position
,
position
);
// extensions.supportUntrustedWorkspaces
if
(
location
.
path
[
0
]
===
'
extensions.supportUntrustedWorkspaces
'
&&
location
.
path
.
length
===
2
&&
location
.
isAtPropertyKey
)
{
let
alreadyConfigured
:
string
[]
=
[];
try
{
alreadyConfigured
=
Object
.
keys
(
parse
(
model
.
getValue
())[
'
extensions.supportUntrustedWorkspaces
'
]);
}
catch
(
e
)
{
/* ignore error */
}
return
{
suggestions
:
await
this
.
provideSupportUntrustedWorkspacesExtensionProposals
(
alreadyConfigured
,
range
)
};
}
return
{
suggestions
:
[]
};
}
}));
}
private
async
provideSupportUntrustedWorkspacesExtensionProposals
(
alreadyConfigured
:
string
[],
range
:
Range
):
Promise
<
CompletionItem
[]
>
{
const
suggestions
:
CompletionItem
[]
=
[];
const
installedExtensions
=
(
await
this
.
extensionManagementService
.
getInstalled
()).
filter
(
e
=>
e
.
manifest
.
main
);
const
proposedExtensions
=
installedExtensions
.
filter
(
e
=>
alreadyConfigured
.
indexOf
(
e
.
identifier
.
id
)
===
-
1
);
if
(
proposedExtensions
.
length
)
{
suggestions
.
push
(...
proposedExtensions
.
map
(
e
=>
{
const
text
=
`"
${
e
.
identifier
.
id
}
": {\n\t"supported": true,\n\t"version": "
${
e
.
manifest
.
version
}
"\n},`
;
return
{
label
:
e
.
identifier
.
id
,
kind
:
CompletionItemKind
.
Value
,
insertText
:
text
,
filterText
:
text
,
range
};
}));
}
else
{
const
text
=
'
"vscode.csharp": {
\n\t
"supported": true,
\n\t
"version": "0.0.0"
\n
},
'
;
suggestions
.
push
({
label
:
localize
(
'
exampleExtension
'
,
"
Example
"
),
kind
:
CompletionItemKind
.
Value
,
insertText
:
text
,
filterText
:
text
,
range
});
}
return
suggestions
;
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录