跳到主要内容

检查配置能看到哪几层?

结论​

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。