}
}
+ pub fn did_save_text_document_dynamic_registration(&self) -> bool {
+ let caps =
+ try_or!(self.caps.text_document.as_ref()?.synchronization.clone()?, Default::default());
+ caps.did_save == Some(true) && caps.dynamic_registration == Some(true)
+ }
+ pub fn did_change_watched_files_dynamic_registration(&self) -> bool {
+ try_or!(
+ self.caps.workspace.as_ref()?.did_change_watched_files.as_ref()?.dynamic_registration?,
+ false
+ )
+ }
+
pub fn location_link(&self) -> bool {
try_or!(self.caps.text_document.as_ref()?.definition?.link_support?, false)
}
);
};
- let save_registration_options = lsp_types::TextDocumentSaveRegistrationOptions {
- include_text: Some(false),
- text_document_registration_options: lsp_types::TextDocumentRegistrationOptions {
- document_selector: Some(vec![
- lsp_types::DocumentFilter {
- language: None,
- scheme: None,
- pattern: Some("**/*.rs".into()),
- },
- lsp_types::DocumentFilter {
- language: None,
- scheme: None,
- pattern: Some("**/Cargo.toml".into()),
- },
- lsp_types::DocumentFilter {
- language: None,
- scheme: None,
- pattern: Some("**/Cargo.lock".into()),
- },
- ]),
- },
- };
-
- let registration = lsp_types::Registration {
- id: "textDocument/didSave".to_string(),
- method: "textDocument/didSave".to_string(),
- register_options: Some(serde_json::to_value(save_registration_options).unwrap()),
- };
- self.send_request::<lsp_types::request::RegisterCapability>(
- lsp_types::RegistrationParams { registrations: vec![registration] },
- |_, _| (),
- );
+ if self.config.did_save_text_document_dynamic_registration() {
+ let save_registration_options = lsp_types::TextDocumentSaveRegistrationOptions {
+ include_text: Some(false),
+ text_document_registration_options: lsp_types::TextDocumentRegistrationOptions {
+ document_selector: Some(vec![
+ lsp_types::DocumentFilter {
+ language: None,
+ scheme: None,
+ pattern: Some("**/*.rs".into()),
+ },
+ lsp_types::DocumentFilter {
+ language: None,
+ scheme: None,
+ pattern: Some("**/Cargo.toml".into()),
+ },
+ lsp_types::DocumentFilter {
+ language: None,
+ scheme: None,
+ pattern: Some("**/Cargo.lock".into()),
+ },
+ ]),
+ },
+ };
+
+ let registration = lsp_types::Registration {
+ id: "textDocument/didSave".to_string(),
+ method: "textDocument/didSave".to_string(),
+ register_options: Some(serde_json::to_value(save_registration_options).unwrap()),
+ };
+ self.send_request::<lsp_types::request::RegisterCapability>(
+ lsp_types::RegistrationParams { registrations: vec![registration] },
+ |_, _| (),
+ );
+ }
self.fetch_workspaces_request();
self.fetch_workspaces_if_needed();
}
if let FilesWatcher::Client = self.config.files().watcher {
- let registration_options = lsp_types::DidChangeWatchedFilesRegistrationOptions {
- watchers: workspaces
- .iter()
- .flat_map(ProjectWorkspace::to_roots)
- .filter(|it| it.is_member)
- .flat_map(|root| {
- root.include.into_iter().map(|it| format!("{}/**/*.rs", it.display()))
- })
- .map(|glob_pattern| lsp_types::FileSystemWatcher { glob_pattern, kind: None })
- .collect(),
- };
- let registration = lsp_types::Registration {
- id: "workspace/didChangeWatchedFiles".to_string(),
- method: "workspace/didChangeWatchedFiles".to_string(),
- register_options: Some(serde_json::to_value(registration_options).unwrap()),
- };
- self.send_request::<lsp_types::request::RegisterCapability>(
- lsp_types::RegistrationParams { registrations: vec![registration] },
- |_, _| (),
- );
+ if self.config.did_change_watched_files_dynamic_registration() {
+ let registration_options = lsp_types::DidChangeWatchedFilesRegistrationOptions {
+ watchers: workspaces
+ .iter()
+ .flat_map(ProjectWorkspace::to_roots)
+ .filter(|it| it.is_member)
+ .flat_map(|root| {
+ root.include.into_iter().map(|it| format!("{}/**/*.rs", it.display()))
+ })
+ .map(|glob_pattern| lsp_types::FileSystemWatcher {
+ glob_pattern,
+ kind: None,
+ })
+ .collect(),
+ };
+ let registration = lsp_types::Registration {
+ id: "workspace/didChangeWatchedFiles".to_string(),
+ method: "workspace/didChangeWatchedFiles".to_string(),
+ register_options: Some(serde_json::to_value(registration_options).unwrap()),
+ };
+ self.send_request::<lsp_types::request::RegisterCapability>(
+ lsp_types::RegistrationParams { registrations: vec![registration] },
+ |_, _| (),
+ );
+ }
}
let mut change = Change::new();