Visual studio code 我是否正确理解这种VS代码API行为?是否始终合并非默认*对象*设置(如果提供)?
我正在开发一个VS代码扩展,我想我可能在文档中遗漏了什么,或者我看到的行为没有在那里指定,我的假设是错误的 我已经为我的扩展定义了一些默认设置,如 package.jsonVisual studio code 我是否正确理解这种VS代码API行为?是否始终合并非默认*对象*设置(如果提供)?,visual-studio-code,vscode-settings,vscode-extensions,Visual Studio Code,Vscode Settings,Vscode Extensions,我正在开发一个VS代码扩展,我想我可能在文档中遗漏了什么,或者我看到的行为没有在那里指定,我的假设是错误的 我已经为我的扩展定义了一些默认设置,如 package.json "contributes": { "configuration": { "title": "ToggleSettingsChanges", "properties": { "toggleSettingsChanges.settingsToToggle": {
"contributes": {
"configuration": {
"title": "ToggleSettingsChanges",
"properties": {
"toggleSettingsChanges.settingsToToggle": {
"scope": "resource",
"type": "object",
"default": {
"window.zoomLevel": 2,
"editor.fontSize": 22,
"terminal.integrated.fontSize": 16,
"scm.diffDecorations": "none",
"workbench.statusBar.visible": false,
"editor.cursorBlinking": "solid",
"workbench.activityBar.visible": false
},
"description": "[ snip ]"
}
}
}
},
extension.js
//在激活命令时运行的“main”方法中:
const config=vscode.workspace.getConfiguration(“toggleSettingsChanges”);
const settingsToToggle=config.get(“settingsToToggle”);
const-inspectedSettingsToggle=config.inspect(“SettingsToggle”);
console.log(“settingsToToggle:”,JSON.stringify(settingsToToggle),“\n\n”)
console.log(“inspected SettingsToggle:”,JSON.stringify(inspected SettingsToggle),“\n\n”)
返回;
在扩展主机实例中,我可以调整设置,包括:
用户或工作区设置JSON
// ...
"toggleSettingsChanges.settingsToToggle": {
"editor.fontSize": 11,
"pumpkins_are_great": true
},
在控制台输出中,我看到以下内容:
settingsToToggle: {"window.zoomLevel":2,"editor.fontSize":11,"terminal.integrated.fontSize":16,"scm.diffDecorations":"none","workbench.statusBar.visible":false,"editor.cursorBlinking":"solid","workbench.activityBar.visible":false,"pumpkins_are_great":true}
inspected settingsToToggle: {"key":"toggleSettingsChanges.settingsToToggle","defaultValue":{"window.zoomLevel":2,"editor.fontSize":22,"terminal.integrated.fontSize":16,"scm.diffDecorations":"none","workbench.statusBar.visible":false,"editor.cursorBlinking":"solid","workbench.activityBar.visible":false},"globalValue":{"editor.fontSize":11,"pumpkins_are_great":true}}
对于设置切换
行,我希望只看到以下设置:
{"editor.fontSize":11,"pumpkins_are_great":true}
似乎如果提供对象默认值,则提供的任何配置都将与该对象合并,而不是完全替换它。
是这样吗?我是否在文档中遗漏了这一点
在我看来,一个值(甚至是一个对象)将被覆盖,而不是简单地合并 此问题发布后,文档可能已更新。现在的写法对我来说似乎很清楚。我写这篇文章是因为我觉得我在API中发现了一个差异,这可能有助于解决OP 参考文献 注意:仅合并对象值类型,而覆盖所有其他值类型 --
其他信息
"contributes": {
"configuration": {
"title": "ToggleSettingsChanges",
"properties": {
"toggleSettingsChanges.settingsToToggle": {
"scope": "resource",
"type": "object",
"default": {
"window.zoomLevel": 2,
"editor.fontSize": 22,
"terminal.integrated.fontSize": 16,
"scm.diffDecorations": "none",
"workbench.statusBar.visible": false,
"editor.cursorBlinking": "solid",
"workbench.activityBar.visible": false
},
"description": "[ snip ]"
}
}
}
},
我希望我的默认值与用户设置合并,如上所述。看到我的默认设置被覆盖,我感到困惑。这个问题帮助我了解了正在发生的事情。我将分享我的方法,因为OP可能感兴趣。我的意见:
中提供的默认值与用户设置合并,如文档中所述(上面的链接)package.json
- 通过
以编程方式传递的默认值不显示合并行为。目前还不清楚这是否是有意的。更新:此行为按预期工作,请参考WorkspaceConfiguration.get(section,defaultValue)