Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
掘金者说
vscode
提交
77cd0abb
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,发现更多精彩内容 >>
未验证
提交
77cd0abb
编写于
6月 29, 2020
作者:
A
Aditya Thakral
提交者:
GitHub
6月 29, 2020
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Render a select box for adding static keys in object renderer (#101308)
上级
9e6f0ddf
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
45 addition
and
4 deletion
+45
-4
src/vs/workbench/contrib/preferences/browser/settingsTree.ts
src/vs/workbench/contrib/preferences/browser/settingsTree.ts
+26
-2
src/vs/workbench/contrib/preferences/browser/settingsWidgets.ts
.../workbench/contrib/preferences/browser/settingsWidgets.ts
+19
-2
未找到文件。
src/vs/workbench/contrib/preferences/browser/settingsTree.ts
浏览文件 @
77cd0abb
...
...
@@ -44,7 +44,7 @@ import { ICssStyleCollector, IColorTheme, IThemeService, registerThemingParticip
import
{
getIgnoredSettings
}
from
'
vs/platform/userDataSync/common/settingsMerge
'
;
import
{
ITOCEntry
}
from
'
vs/workbench/contrib/preferences/browser/settingsLayout
'
;
import
{
ISettingsEditorViewState
,
settingKeyToDisplayFormat
,
SettingsTreeElement
,
SettingsTreeGroupChild
,
SettingsTreeGroupElement
,
SettingsTreeNewExtensionsElement
,
SettingsTreeSettingElement
}
from
'
vs/workbench/contrib/preferences/browser/settingsTreeModels
'
;
import
{
ExcludeSettingWidget
,
ISettingListChangeEvent
,
IListDataItem
,
ListSettingWidget
,
settingsHeaderForeground
,
settingsNumberInputBackground
,
settingsNumberInputBorder
,
settingsNumberInputForeground
,
settingsSelectBackground
,
settingsSelectBorder
,
settingsSelectForeground
,
settingsSelectListBorder
,
settingsTextInputBackground
,
settingsTextInputBorder
,
settingsTextInputForeground
,
ObjectSettingWidget
,
IObjectDataItem
,
IObjectEnumOption
,
ObjectValue
,
IObjectValueSuggester
}
from
'
vs/workbench/contrib/preferences/browser/settingsWidgets
'
;
import
{
ExcludeSettingWidget
,
ISettingListChangeEvent
,
IListDataItem
,
ListSettingWidget
,
settingsHeaderForeground
,
settingsNumberInputBackground
,
settingsNumberInputBorder
,
settingsNumberInputForeground
,
settingsSelectBackground
,
settingsSelectBorder
,
settingsSelectForeground
,
settingsSelectListBorder
,
settingsTextInputBackground
,
settingsTextInputBorder
,
settingsTextInputForeground
,
ObjectSettingWidget
,
IObjectDataItem
,
IObjectEnumOption
,
ObjectValue
,
IObjectValueSuggester
,
IObjectKeySuggester
}
from
'
vs/workbench/contrib/preferences/browser/settingsWidgets
'
;
import
{
SETTINGS_EDITOR_COMMAND_SHOW_CONTEXT_MENU
}
from
'
vs/workbench/contrib/preferences/common/preferences
'
;
import
{
IWorkbenchEnvironmentService
}
from
'
vs/workbench/services/environment/common/environmentService
'
;
import
{
ISetting
,
ISettingsGroup
,
SettingValueType
}
from
'
vs/workbench/services/preferences/common/preferences
'
;
...
...
@@ -174,6 +174,26 @@ function getObjectDisplayValue(element: SettingsTreeSettingElement): IObjectData
});
}
function
createObjectKeySuggester
(
element
:
SettingsTreeSettingElement
):
IObjectKeySuggester
{
const
{
objectProperties
}
=
element
.
setting
;
const
allStaticKeys
=
Object
.
keys
(
objectProperties
??
{});
return
keys
=>
{
const
existingKeys
=
new
Set
(
keys
);
const
enumOptions
:
IObjectEnumOption
[]
=
[];
allStaticKeys
.
forEach
(
staticKey
=>
{
if
(
!
existingKeys
.
has
(
staticKey
))
{
enumOptions
.
push
({
value
:
staticKey
,
description
:
objectProperties
!
[
staticKey
].
description
});
}
});
return
enumOptions
.
length
>
0
?
{
type
:
'
enum
'
,
data
:
enumOptions
[
0
].
value
,
options
:
enumOptions
}
:
undefined
;
};
}
function
createObjectValueSuggester
(
element
:
SettingsTreeSettingElement
):
IObjectValueSuggester
{
const
{
objectProperties
,
objectPatternProperties
,
objectAdditionalProperties
}
=
element
.
setting
;
...
...
@@ -204,8 +224,11 @@ function createObjectValueSuggester(element: SettingsTreeSettingElement): IObjec
if
(
type
===
'
boolean
'
)
{
return
{
type
,
data
:
suggestedSchema
.
default
??
true
};
}
else
if
(
type
===
'
enum
'
)
{
const
options
=
getEnumOptionsFromSchema
(
suggestedSchema
);
return
{
type
,
data
:
suggestedSchema
.
default
??
options
[
0
].
value
,
options
};
}
else
{
return
{
type
,
data
:
suggestedSchema
.
default
??
''
,
options
:
getEnumOptionsFromSchema
(
suggestedSchema
)
};
return
{
type
,
data
:
suggestedSchema
.
default
??
''
};
}
}
...
...
@@ -1084,6 +1107,7 @@ export class SettingObjectRenderer extends AbstractSettingRenderer implements IT
isDefined
(
dataElement
.
setting
.
objectPatternProperties
)
||
!
areAllPropertiesDefined
(
Object
.
keys
(
dataElement
.
setting
.
objectProperties
??
{}),
items
)
),
keySuggester
:
createObjectKeySuggester
(
dataElement
),
valueSuggester
:
createObjectValueSuggester
(
dataElement
),
});
...
...
src/vs/workbench/contrib/preferences/browser/settingsWidgets.ts
浏览文件 @
77cd0abb
...
...
@@ -659,8 +659,13 @@ export interface IObjectValueSuggester {
(
key
:
string
):
ObjectValue
|
undefined
;
}
export
interface
IObjectKeySuggester
{
(
existingKeys
:
string
[]):
IObjectEnumData
|
undefined
;
}
interface
IObjectSetValueOptions
{
showAddButton
:
boolean
;
keySuggester
:
IObjectKeySuggester
;
valueSuggester
:
IObjectValueSuggester
;
}
...
...
@@ -674,10 +679,12 @@ interface IObjectRenderEditWidgetOptions {
export
class
ObjectSettingWidget
extends
AbstractListSettingWidget
<
IObjectDataItem
>
{
private
showAddButton
:
boolean
=
true
;
private
valueSuggester
:
IObjectValueSuggester
=
()
=>
undefined
;;
private
keySuggester
:
IObjectKeySuggester
=
()
=>
undefined
;
private
valueSuggester
:
IObjectValueSuggester
=
()
=>
undefined
;
setValue
(
listData
:
IObjectDataItem
[],
options
?:
IObjectSetValueOptions
):
void
{
this
.
showAddButton
=
options
?.
showAddButton
??
this
.
showAddButton
;
this
.
keySuggester
=
options
?.
keySuggester
??
this
.
keySuggester
;
this
.
valueSuggester
=
options
?.
valueSuggester
??
this
.
valueSuggester
;
super
.
setValue
(
listData
);
}
...
...
@@ -784,7 +791,17 @@ export class ObjectSettingWidget extends AbstractListSettingWidget<IObjectDataIt
let
keyElement
:
HTMLElement
;
if
(
this
.
showAddButton
)
{
const
{
widget
,
element
}
=
this
.
renderEditWidget
(
item
.
key
,
{
if
(
this
.
isItemNew
(
item
))
{
const
suggestedKey
=
this
.
keySuggester
(
this
.
model
.
items
.
map
(({
key
:
{
data
}
})
=>
data
));
if
(
isDefined
(
suggestedKey
))
{
changedItem
.
key
=
suggestedKey
;
const
suggestedValue
=
this
.
valueSuggester
(
changedItem
.
key
.
data
);
onValueChange
(
suggestedValue
??
changedItem
.
value
);
}
}
const
{
widget
,
element
}
=
this
.
renderEditWidget
(
changedItem
.
key
,
{
idx
,
isKey
:
true
,
originalItem
:
item
,
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录