Configuration

Configuration 请求

从版本 3.6.0 开始

请求从服务器发送到客户端,以从客户端获取配置设置。该请求可以在一次往返中获取多个配置设置。返回的配置设置的顺序对应于传递的 ConfigurationItems 的顺序(例如,响应中的第一项是参数中第一个配置项的结果)。

ConfigurationItem 由要请求的配置节和其他范围 URI 组成。请求的配置部分由服务器定义,不一定需要与客户端使用的配置存储相对应。因此,服务器可能会要求提供配置 cpp.formatterOptions,但客户端以不同的方式将配置存储在 XML 存储布局中。由客户端进行必要的转换。如果提供了作用域 URI,则客户端应返回作用域为所提供资源的设置。例如,如果客户端使用 EditorConfig 管理其设置,则应为传递的资源 URI 返回配置。如果客户端无法为给定范围提供配置设置,则返回的数组中需要存在 null

此拉取模型取代了旧的推送模型,客户端通过事件发出配置更改信号。如果服务器仍需要对配置更改做出反应(因为服务器缓存 workspace/configuration 请求的结果),则服务器应使用注册模式注册空配置更改。

客户端能力(Client capability):

  • 属性路径: workspace.configuration
  • 属性类型: boolean

请求(Request):

  • method: "workspace/configuration"
  • params: ConfigurationParams, 定义如下:
export interface ConfigurationParams {
	items: ConfigurationItem[];
}
export interface ConfigurationItem {
	/**
	 * The scope to get the configuration section for.
	 */
	scopeUri?: URI;

	/**
	 * The configuration section asked for.
	 */
	section?: string;
}

响应(Response):

  • result: LSPAny[]
  • error: codemessage,以防在请求期间发生异常。

DidChangeConfiguration 通知

从客户端发送到服务器的通知,以发出配置设置更改的信号。要让客户端发送此通知,则必须动态注册此通知。

客户端能力(Client capability):

  • 属性路径: workspace.didChangeConfiguration
  • 属性类型: DidChangeConfigurationClientCapabilities, 定义如下:
export interface DidChangeConfigurationClientCapabilities {
	/**
	 * Did change configuration notification supports dynamic registration.
	 *
	 * @since 3.6.0 to support the new pull model.
	 */
	dynamicRegistration?: boolean;
}

注册选项(Registration Options): undefined,因为只有动态注册了此通知,此通知才会被客户端发送,如果不注册此通知,那么服务器不应该缓存配置设置

通知(Notification):

  • method: "workspace/didChangeConfiguration"
  • params: DidChangeConfigurationParams, 定义如下:
interface DidChangeConfigurationParams {
	/**
	 * The actual changed settings
	 */
	settings: LSPAny;
}