Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
掘金者说
vscode
提交
f79c3e1f
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,发现更多精彩内容 >>
提交
f79c3e1f
编写于
10月 30, 2017
作者:
S
Sandeep Somavarapu
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Fix #33535
上级
465d91db
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
186 addition
and
164 deletion
+186
-164
src/vs/workbench/parts/preferences/browser/preferencesRenderers.ts
...rkbench/parts/preferences/browser/preferencesRenderers.ts
+3
-3
src/vs/workbench/parts/preferences/browser/preferencesService.ts
...workbench/parts/preferences/browser/preferencesService.ts
+5
-9
src/vs/workbench/parts/preferences/common/preferencesModels.ts
...s/workbench/parts/preferences/common/preferencesModels.ts
+178
-152
未找到文件。
src/vs/workbench/parts/preferences/browser/preferencesRenderers.ts
浏览文件 @
f79c3e1f
...
...
@@ -17,7 +17,7 @@ import { Range, IRange } from 'vs/editor/common/core/range';
import
{
IConfigurationRegistry
,
Extensions
as
ConfigurationExtensions
,
ConfigurationScope
,
IConfigurationPropertySchema
}
from
'
vs/platform/configuration/common/configurationRegistry
'
;
import
{
IInstantiationService
}
from
'
vs/platform/instantiation/common/instantiation
'
;
import
{
IPreferencesService
,
ISettingsGroup
,
ISetting
,
IPreferencesEditorModel
,
IFilterResult
,
ISettingsEditorModel
}
from
'
vs/workbench/parts/preferences/common/preferences
'
;
import
{
SettingsEditorModel
,
DefaultSettingsEditorModel
}
from
'
vs/workbench/parts/preferences/common/preferencesModels
'
;
import
{
SettingsEditorModel
,
DefaultSettingsEditorModel
,
WorkspaceConfigurationEditorModel
}
from
'
vs/workbench/parts/preferences/common/preferencesModels
'
;
import
{
ICodeEditor
,
IEditorMouseEvent
,
MouseTargetType
}
from
'
vs/editor/browser/editorBrowser
'
;
import
{
IContextMenuService
,
ContextSubMenu
}
from
'
vs/platform/contextview/browser/contextView
'
;
import
{
SettingsGroupTitleWidget
,
EditPreferenceWidget
,
SettingsHeaderWidget
,
DefaultSettingsHeaderWidget
,
FloatingClickWidget
}
from
'
vs/workbench/parts/preferences/browser/preferencesWidgets
'
;
...
...
@@ -1221,11 +1221,11 @@ class WorkspaceConfigurationRenderer extends Disposable {
}
public
render
():
void
{
if
(
this
.
workspaceContextService
.
getWorkbenchState
()
===
WorkbenchState
.
WORKSPACE
)
{
if
(
this
.
workspaceContextService
.
getWorkbenchState
()
===
WorkbenchState
.
WORKSPACE
&&
this
.
workspaceSettingsEditorModel
instanceof
WorkspaceConfigurationEditorModel
)
{
this
.
editor
.
changeDecorations
(
changeAccessor
=>
this
.
decorationIds
=
changeAccessor
.
deltaDecorations
(
this
.
decorationIds
,
[]));
const
ranges
:
IRange
[]
=
[];
for
(
const
settingsGroup
of
this
.
workspaceSettingsEditorModel
.
settings
Groups
)
{
for
(
const
settingsGroup
of
this
.
workspaceSettingsEditorModel
.
configuration
Groups
)
{
for
(
const
section
of
settingsGroup
.
sections
)
{
for
(
const
setting
of
section
.
settings
)
{
if
(
setting
.
key
!==
'
settings
'
)
{
...
...
src/vs/workbench/parts/preferences/browser/preferencesService.ts
浏览文件 @
f79c3e1f
...
...
@@ -26,7 +26,7 @@ import { IExtensionService } from 'vs/platform/extensions/common/extensions';
import
{
IInstantiationService
}
from
'
vs/platform/instantiation/common/instantiation
'
;
import
{
IEnvironmentService
}
from
'
vs/platform/environment/common/environment
'
;
import
{
IPreferencesService
,
IPreferencesEditorModel
,
ISetting
,
getSettingsTargetName
,
FOLDER_SETTINGS_PATH
,
DEFAULT_SETTINGS_EDITOR_SETTING
}
from
'
vs/workbench/parts/preferences/common/preferences
'
;
import
{
SettingsEditorModel
,
DefaultSettingsEditorModel
,
DefaultKeybindingsEditorModel
,
defaultKeybindingsContents
,
WorkspaceConfigModel
,
DefaultSettings
Model
}
from
'
vs/workbench/parts/preferences/common/preferencesModels
'
;
import
{
SettingsEditorModel
,
DefaultSettingsEditorModel
,
DefaultKeybindingsEditorModel
,
defaultKeybindingsContents
,
DefaultSettingsModel
,
WorkspaceConfigurationEditor
Model
}
from
'
vs/workbench/parts/preferences/common/preferencesModels
'
;
import
{
ITelemetryService
}
from
'
vs/platform/telemetry/common/telemetry
'
;
import
{
DefaultPreferencesEditorInput
,
PreferencesEditorInput
}
from
'
vs/workbench/parts/preferences/browser/preferencesEditor
'
;
import
{
KeybindingsEditorInput
}
from
'
vs/workbench/parts/preferences/browser/keybindingsEditor
'
;
...
...
@@ -96,7 +96,6 @@ export class PreferencesService extends Disposable implements IPreferencesServic
}
readonly
defaultKeybindingsResource
=
URI
.
from
({
scheme
:
network
.
Schemas
.
vscode
,
authority
:
'
defaultsettings
'
,
path
:
'
/keybindings.json
'
});
private
readonly
workspaceConfigSettingsResource
=
URI
.
from
({
scheme
:
network
.
Schemas
.
vscode
,
authority
:
'
settings
'
,
path
:
'
/workspaceSettings.json
'
});
get
userSettingsResource
():
URI
{
return
this
.
getEditableSettingsURI
(
ConfigurationTarget
.
USER
);
...
...
@@ -137,10 +136,6 @@ export class PreferencesService extends Disposable implements IPreferencesServic
return
this
.
createDefaultSettingsEditorModel
(
uri
);
}
if
(
this
.
workspaceConfigSettingsResource
.
toString
()
===
uri
.
toString
())
{
return
this
.
createEditableSettingsEditorModel
(
ConfigurationTarget
.
WORKSPACE
,
uri
);
}
if
(
this
.
getEditableSettingsURI
(
ConfigurationTarget
.
USER
).
toString
()
===
uri
.
toString
())
{
return
this
.
createEditableSettingsEditorModel
(
ConfigurationTarget
.
USER
,
uri
);
}
...
...
@@ -279,9 +274,10 @@ export class PreferencesService extends Disposable implements IPreferencesServic
private
createEditableSettingsEditorModel
(
configurationTarget
:
ConfigurationTarget
,
resource
:
URI
):
TPromise
<
SettingsEditorModel
>
{
const
settingsUri
=
this
.
getEditableSettingsURI
(
configurationTarget
,
resource
);
if
(
settingsUri
)
{
if
(
settingsUri
.
toString
()
===
this
.
workspaceConfigSettingsResource
.
toString
())
{
return
TPromise
.
join
([
this
.
textModelResolverService
.
createModelReference
(
settingsUri
),
this
.
textModelResolverService
.
createModelReference
(
this
.
contextService
.
getWorkspace
().
configuration
)])
.
then
(([
reference
,
workspaceConfigReference
])
=>
this
.
instantiationService
.
createInstance
(
WorkspaceConfigModel
,
reference
,
workspaceConfigReference
,
configurationTarget
,
this
.
_onDispose
.
event
));
const
workspace
=
this
.
contextService
.
getWorkspace
();
if
(
workspace
.
configuration
&&
workspace
.
configuration
.
toString
()
===
settingsUri
.
toString
())
{
return
this
.
textModelResolverService
.
createModelReference
(
settingsUri
)
.
then
(
reference
=>
this
.
instantiationService
.
createInstance
(
WorkspaceConfigurationEditorModel
,
reference
,
configurationTarget
));
}
return
this
.
textModelResolverService
.
createModelReference
(
settingsUri
)
.
then
(
reference
=>
this
.
instantiationService
.
createInstance
(
SettingsEditorModel
,
reference
,
configurationTarget
));
...
...
src/vs/workbench/parts/preferences/common/preferencesModels.ts
浏览文件 @
f79c3e1f
...
...
@@ -126,9 +126,7 @@ export class SettingsEditorModel extends AbstractSettingsModel implements ISetti
super
();
this
.
settingsModel
=
reference
.
object
.
textEditorModel
;
this
.
_register
(
this
.
onDispose
(()
=>
reference
.
dispose
()));
this
.
_register
(
this
.
settingsModel
.
onDidChangeContent
(()
=>
{
this
.
_settingsGroups
=
null
;
}));
this
.
_register
(
this
.
settingsModel
.
onDidChangeContent
(()
=>
this
.
_settingsGroups
=
null
));
this
.
queue
=
new
Queue
<
void
>
();
}
...
...
@@ -163,176 +161,204 @@ export class SettingsEditorModel extends AbstractSettingsModel implements ISetti
return
this
.
queue
.
queue
(()
=>
this
.
doSave
());
}
protected
isSettingsProperty
(
property
:
string
,
previousParents
:
string
[]):
boolean
{
return
previousParents
.
length
===
0
;
// Settings is root
}
protected
doSave
():
TPromise
<
any
>
{
return
this
.
textFileService
.
save
(
this
.
uri
);
}
private
parse
()
{
const
model
=
this
.
settingsModel
;
const
settings
:
ISetting
[]
=
[];
let
overrideSetting
:
ISetting
=
null
;
let
currentProperty
:
string
=
null
;
let
currentParent
:
any
=
[];
let
previousParents
:
any
[]
=
[];
let
range
=
{
startLineNumber
:
0
,
startColumn
:
0
,
endLineNumber
:
0
,
endColumn
:
0
};
protected
parse
():
void
{
this
.
_settingsGroups
=
parse
(
this
.
settingsModel
,
(
property
:
string
,
previousParents
:
string
[]):
boolean
=>
this
.
isSettingsProperty
(
property
,
previousParents
));
}
}
function
onValue
(
value
:
any
,
offset
:
number
,
length
:
number
)
{
if
(
Array
.
isArray
(
currentParent
))
{
(
<
any
[]
>
currentParent
).
push
(
value
);
}
else
if
(
currentProperty
)
{
currentParent
[
currentProperty
]
=
value
;
function
parse
(
model
:
IModel
,
isSettingsProperty
:
(
currentProperty
:
string
,
previousParents
:
string
[])
=>
boolean
):
ISettingsGroup
[]
{
const
settings
:
ISetting
[]
=
[];
let
overrideSetting
:
ISetting
=
null
;
let
currentProperty
:
string
=
null
;
let
currentParent
:
any
=
[];
let
previousParents
:
any
[]
=
[];
let
settingsPropertyIndex
:
number
=
-
1
;
let
range
=
{
startLineNumber
:
0
,
startColumn
:
0
,
endLineNumber
:
0
,
endColumn
:
0
};
function
onValue
(
value
:
any
,
offset
:
number
,
length
:
number
)
{
if
(
Array
.
isArray
(
currentParent
))
{
(
<
any
[]
>
currentParent
).
push
(
value
);
}
else
if
(
currentProperty
)
{
currentParent
[
currentProperty
]
=
value
;
}
if
(
previousParents
.
length
===
settingsPropertyIndex
+
1
||
(
previousParents
.
length
===
settingsPropertyIndex
+
2
&&
overrideSetting
!==
null
))
{
// settings value started
const
setting
=
previousParents
.
length
===
settingsPropertyIndex
+
1
?
settings
[
settings
.
length
-
1
]
:
overrideSetting
.
overrides
[
overrideSetting
.
overrides
.
length
-
1
];
if
(
setting
)
{
let
valueStartPosition
=
model
.
getPositionAt
(
offset
);
let
valueEndPosition
=
model
.
getPositionAt
(
offset
+
length
);
setting
.
value
=
value
;
setting
.
valueRange
=
{
startLineNumber
:
valueStartPosition
.
lineNumber
,
startColumn
:
valueStartPosition
.
column
,
endLineNumber
:
valueEndPosition
.
lineNumber
,
endColumn
:
valueEndPosition
.
column
};
setting
.
range
=
assign
(
setting
.
range
,
{
endLineNumber
:
valueEndPosition
.
lineNumber
,
endColumn
:
valueEndPosition
.
column
});
}
}
}
let
visitor
:
JSONVisitor
=
{
onObjectBegin
:
(
offset
:
number
,
length
:
number
)
=>
{
if
(
isSettingsProperty
(
currentProperty
,
previousParents
))
{
// Settings started
settingsPropertyIndex
=
previousParents
.
length
;
let
position
=
model
.
getPositionAt
(
offset
);
range
.
startLineNumber
=
position
.
lineNumber
;
range
.
startColumn
=
position
.
column
;
}
let
object
=
{};
onValue
(
object
,
offset
,
length
);
currentParent
=
object
;
currentProperty
=
null
;
previousParents
.
push
(
currentParent
);
},
onObjectProperty
:
(
name
:
string
,
offset
:
number
,
length
:
number
)
=>
{
currentProperty
=
name
;
if
(
previousParents
.
length
===
settingsPropertyIndex
+
1
||
(
previousParents
.
length
===
settingsPropertyIndex
+
2
&&
overrideSetting
!==
null
))
{
// setting started
let
settingStartPosition
=
model
.
getPositionAt
(
offset
);
const
setting
:
ISetting
=
{
description
:
[],
key
:
name
,
keyRange
:
{
startLineNumber
:
settingStartPosition
.
lineNumber
,
startColumn
:
settingStartPosition
.
column
+
1
,
endLineNumber
:
settingStartPosition
.
lineNumber
,
endColumn
:
settingStartPosition
.
column
+
length
},
range
:
{
startLineNumber
:
settingStartPosition
.
lineNumber
,
startColumn
:
settingStartPosition
.
column
,
endLineNumber
:
0
,
endColumn
:
0
},
value
:
null
,
valueRange
:
null
,
descriptionRanges
:
null
,
overrides
:
[],
overrideOf
:
overrideSetting
};
if
(
previousParents
.
length
===
settingsPropertyIndex
+
1
)
{
settings
.
push
(
setting
);
if
(
OVERRIDE_PROPERTY_PATTERN
.
test
(
name
))
{
overrideSetting
=
setting
;
}
}
else
{
overrideSetting
.
overrides
.
push
(
setting
);
}
}
if
(
previousParents
.
length
===
1
||
(
previousParents
.
length
===
2
&&
overrideSetting
!==
null
))
{
// settings value started
const
setting
=
previousParents
.
length
===
1
?
settings
[
settings
.
length
-
1
]
:
overrideSetting
.
overrides
[
overrideSetting
.
overrides
.
length
-
1
];
},
onObjectEnd
:
(
offset
:
number
,
length
:
number
)
=>
{
currentParent
=
previousParents
.
pop
();
if
(
previousParents
.
length
===
settingsPropertyIndex
+
1
||
(
previousParents
.
length
===
settingsPropertyIndex
+
2
&&
overrideSetting
!==
null
))
{
// setting ended
const
setting
=
previousParents
.
length
===
settingsPropertyIndex
+
1
?
settings
[
settings
.
length
-
1
]
:
overrideSetting
.
overrides
[
overrideSetting
.
overrides
.
length
-
1
];
if
(
setting
)
{
let
valueStartPosition
=
model
.
getPositionAt
(
offset
);
let
valueEndPosition
=
model
.
getPositionAt
(
offset
+
length
);
setting
.
value
=
value
;
setting
.
valueRange
=
{
startLineNumber
:
valueStartPosition
.
lineNumber
,
startColumn
:
valueStartPosition
.
column
,
setting
.
valueRange
=
assign
(
setting
.
valueRange
,
{
endLineNumber
:
valueEndPosition
.
lineNumber
,
endColumn
:
valueEndPosition
.
column
};
}
)
;
setting
.
range
=
assign
(
setting
.
range
,
{
endLineNumber
:
valueEndPosition
.
lineNumber
,
endColumn
:
valueEndPosition
.
column
});
}
}
}
let
visitor
:
JSONVisitor
=
{
onObjectBegin
:
(
offset
:
number
,
length
:
number
)
=>
{
if
(
previousParents
.
length
===
0
)
{
// Settings started
let
position
=
model
.
getPositionAt
(
offset
);
range
.
startLineNumber
=
position
.
lineNumber
;
range
.
startColumn
=
position
.
column
;
}
let
object
=
{};
onValue
(
object
,
offset
,
length
);
currentParent
=
object
;
currentProperty
=
null
;
previousParents
.
push
(
currentParent
);
},
onObjectProperty
:
(
name
:
string
,
offset
:
number
,
length
:
number
)
=>
{
currentProperty
=
name
;
if
(
previousParents
.
length
===
1
||
(
previousParents
.
length
===
2
&&
overrideSetting
!==
null
))
{
// setting started
let
settingStartPosition
=
model
.
getPositionAt
(
offset
);
const
setting
:
ISetting
=
{
description
:
[],
key
:
name
,
keyRange
:
{
startLineNumber
:
settingStartPosition
.
lineNumber
,
startColumn
:
settingStartPosition
.
column
+
1
,
endLineNumber
:
settingStartPosition
.
lineNumber
,
endColumn
:
settingStartPosition
.
column
+
length
},
range
:
{
startLineNumber
:
settingStartPosition
.
lineNumber
,
startColumn
:
settingStartPosition
.
column
,
endLineNumber
:
0
,
endColumn
:
0
},
value
:
null
,
valueRange
:
null
,
descriptionRanges
:
null
,
overrides
:
[],
overrideOf
:
overrideSetting
};
if
(
previousParents
.
length
===
1
)
{
settings
.
push
(
setting
);
if
(
OVERRIDE_PROPERTY_PATTERN
.
test
(
name
))
{
overrideSetting
=
setting
;
}
}
else
{
overrideSetting
.
overrides
.
push
(
setting
);
}
}
},
onObjectEnd
:
(
offset
:
number
,
length
:
number
)
=>
{
currentParent
=
previousParents
.
pop
();
if
(
previousParents
.
length
===
1
||
(
previousParents
.
length
===
2
&&
overrideSetting
!==
null
))
{
// setting ended
const
setting
=
previousParents
.
length
===
1
?
settings
[
settings
.
length
-
1
]
:
overrideSetting
.
overrides
[
overrideSetting
.
overrides
.
length
-
1
];
if
(
setting
)
{
let
valueEndPosition
=
model
.
getPositionAt
(
offset
+
length
);
setting
.
valueRange
=
assign
(
setting
.
valueRange
,
{
endLineNumber
:
valueEndPosition
.
lineNumber
,
endColumn
:
valueEndPosition
.
column
});
setting
.
range
=
assign
(
setting
.
range
,
{
endLineNumber
:
valueEndPosition
.
lineNumber
,
endColumn
:
valueEndPosition
.
column
});
}
if
(
previousParents
.
length
===
1
)
{
overrideSetting
=
null
;
}
}
if
(
previousParents
.
length
===
0
)
{
// settings ended
let
position
=
model
.
getPositionAt
(
offset
);
range
.
endLineNumber
=
position
.
lineNumber
;
range
.
endColumn
=
position
.
column
;
}
},
onArrayBegin
:
(
offset
:
number
,
length
:
number
)
=>
{
let
array
:
any
[]
=
[];
onValue
(
array
,
offset
,
length
);
previousParents
.
push
(
currentParent
);
currentParent
=
array
;
currentProperty
=
null
;
},
onArrayEnd
:
(
offset
:
number
,
length
:
number
)
=>
{
currentParent
=
previousParents
.
pop
();
if
(
previousParents
.
length
===
1
||
(
previousParents
.
length
===
2
&&
overrideSetting
!==
null
))
{
// setting value ended
const
setting
=
previousParents
.
length
===
1
?
settings
[
settings
.
length
-
1
]
:
overrideSetting
.
overrides
[
overrideSetting
.
overrides
.
length
-
1
];
if
(
setting
)
{
let
valueEndPosition
=
model
.
getPositionAt
(
offset
+
length
);
setting
.
valueRange
=
assign
(
setting
.
valueRange
,
{
endLineNumber
:
valueEndPosition
.
lineNumber
,
endColumn
:
valueEndPosition
.
column
});
setting
.
range
=
assign
(
setting
.
range
,
{
endLineNumber
:
valueEndPosition
.
lineNumber
,
endColumn
:
valueEndPosition
.
column
});
}
if
(
previousParents
.
length
===
settingsPropertyIndex
+
1
)
{
overrideSetting
=
null
;
}
},
onLiteralValue
:
onValue
,
onError
:
(
error
)
=>
{
const
setting
=
settings
[
settings
.
length
-
1
];
if
(
setting
&&
(
!
setting
.
range
||
!
setting
.
keyRange
||
!
setting
.
valueRange
))
{
settings
.
pop
();
}
if
(
previousParents
.
length
===
settingsPropertyIndex
)
{
// settings ended
let
position
=
model
.
getPositionAt
(
offset
);
range
.
endLineNumber
=
position
.
lineNumber
;
range
.
endColumn
=
position
.
column
;
}
},
onArrayBegin
:
(
offset
:
number
,
length
:
number
)
=>
{
let
array
:
any
[]
=
[];
onValue
(
array
,
offset
,
length
);
previousParents
.
push
(
currentParent
);
currentParent
=
array
;
currentProperty
=
null
;
},
onArrayEnd
:
(
offset
:
number
,
length
:
number
)
=>
{
currentParent
=
previousParents
.
pop
();
if
(
previousParents
.
length
===
settingsPropertyIndex
+
1
||
(
previousParents
.
length
===
settingsPropertyIndex
+
2
&&
overrideSetting
!==
null
))
{
// setting value ended
const
setting
=
previousParents
.
length
===
settingsPropertyIndex
+
1
?
settings
[
settings
.
length
-
1
]
:
overrideSetting
.
overrides
[
overrideSetting
.
overrides
.
length
-
1
];
if
(
setting
)
{
let
valueEndPosition
=
model
.
getPositionAt
(
offset
+
length
);
setting
.
valueRange
=
assign
(
setting
.
valueRange
,
{
endLineNumber
:
valueEndPosition
.
lineNumber
,
endColumn
:
valueEndPosition
.
column
});
setting
.
range
=
assign
(
setting
.
range
,
{
endLineNumber
:
valueEndPosition
.
lineNumber
,
endColumn
:
valueEndPosition
.
column
});
}
}
};
if
(
!
model
.
isDisposed
())
{
visit
(
model
.
getValue
(),
visitor
);
},
onLiteralValue
:
onValue
,
onError
:
(
error
)
=>
{
const
setting
=
settings
[
settings
.
length
-
1
];
if
(
setting
&&
(
!
setting
.
range
||
!
setting
.
keyRange
||
!
setting
.
valueRange
))
{
settings
.
pop
();
}
}
this
.
_settingsGroups
=
settings
.
length
>
0
?
[
<
ISettingsGroup
>
{
sections
:
[
{
settings
}
],
title
:
null
,
titleRange
:
null
,
range
}]
:
[];
};
if
(
!
model
.
isDisposed
())
{
visit
(
model
.
getValue
(),
visitor
);
}
return
settings
.
length
>
0
?
[
<
ISettingsGroup
>
{
sections
:
[
{
settings
}
],
title
:
null
,
titleRange
:
null
,
range
}]
:
[];
}
export
class
WorkspaceConfigurationEditorModel
extends
SettingsEditorModel
{
private
_configurationGroups
:
ISettingsGroup
[];
get
configurationGroups
():
ISettingsGroup
[]
{
return
this
.
_configurationGroups
;
}
protected
parse
():
void
{
super
.
parse
();
this
.
_configurationGroups
=
parse
(
this
.
settingsModel
,
(
property
:
string
,
previousParents
:
string
[]):
boolean
=>
previousParents
.
length
===
0
);
}
protected
isSettingsProperty
(
property
:
string
,
previousParents
:
string
[]):
boolean
{
return
property
===
'
settings
'
&&
previousParents
.
length
===
1
;
}
}
export
class
WorkspaceConfigModel
extends
SettingsEditorModel
implements
ISettingsEditorModel
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录