检查配置能看到哪几层?
结论
configuration.inspect(key) 把合并前的各层拆开。可以看见默认值、用户值、工作区值、文件夹值,以及按语言覆盖的对应层。get 只给合并后的最终值,查「为什么和我想的不一样」时用 inspect。
展开
const inspected = vscode.workspace
.getConfiguration("myext", document.uri)
.inspect<boolean>("enable");
返回对象里常见字段:
defaultValue:清单里的默认值globalValue:用户设置workspaceValue:工作区设置workspaceFolderValue:多根里的文件夹设置defaultLanguageValue、globalLanguageValue、workspaceLanguageValue、workspaceFolderLanguageValue:语言覆盖层key:完整配置键
优先级可以记成:越贴近这份资源的覆盖越优先。语言加文件夹的值会压过单纯的用户值。某一层是 undefined 表示这一层没写,不是写了布尔 false。
inspect 适合做「恢复默认」和排查。界面上可以告诉用户:当前生效是因为工作区把你的用户设置盖掉了。
写入前也可以先 inspect,避免把从工作区继承来的值再写进用户设置,造成两层一样、以后改工作区却不生效。
容易讲错的点
get的结果看不出值来自哪一层。面试时不要说「读配置只能拿到用户设置」。- 语言层字段只有在作用域和语言对得上时才有意义。没传 URI 就 inspect 语言配置,看到的不是当前文件那一层。
undefined和默认值不同。用户没有写过,globalValue就是undefined,真正生效的是defaultValue。