diff options
-rw-r--r-- | cli/lsp/language_server.rs | 34 | ||||
-rw-r--r-- | cli/lsp/lsp_custom.rs | 24 | ||||
-rw-r--r-- | cli/tests/integration/lsp_tests.rs | 41 |
3 files changed, 74 insertions, 25 deletions
diff --git a/cli/lsp/language_server.rs b/cli/lsp/language_server.rs index a3c817526..921e34bcd 100644 --- a/cli/lsp/language_server.rs +++ b/cli/lsp/language_server.rs @@ -1629,7 +1629,10 @@ impl Inner { .iter() .filter(|e| files_to_check.contains(&e.uri)) .map(|e| lsp_custom::DenoConfigurationChangeEvent { - file_event: e.clone(), + uri: e.uri.clone(), + typ: lsp_custom::DenoConfigurationChangeType::from_file_change_type( + e.typ, + ), configuration_type: lsp_custom::DenoConfigurationType::DenoJson, }), ); @@ -1660,7 +1663,10 @@ impl Inner { .iter() .filter(|e| files_to_check.contains(&e.uri)) .map(|e| lsp_custom::DenoConfigurationChangeEvent { - file_event: e.clone(), + uri: e.uri.clone(), + typ: lsp_custom::DenoConfigurationChangeType::from_file_change_type( + e.typ, + ), configuration_type: lsp_custom::DenoConfigurationType::PackageJson, }), ); @@ -3303,6 +3309,30 @@ impl tower_lsp::LanguageServer for LanguageServer { ); ls.maybe_testing_server = Some(test_server); } + + let mut config_events = vec![]; + if let Some(config_file) = ls.config.maybe_config_file() { + config_events.push(lsp_custom::DenoConfigurationChangeEvent { + uri: config_file.specifier.clone(), + typ: lsp_custom::DenoConfigurationChangeType::Added, + configuration_type: lsp_custom::DenoConfigurationType::DenoJson, + }); + } + if let Some(package_json) = &ls.maybe_package_json { + config_events.push(lsp_custom::DenoConfigurationChangeEvent { + uri: package_json.specifier(), + typ: lsp_custom::DenoConfigurationChangeType::Added, + configuration_type: lsp_custom::DenoConfigurationType::PackageJson, + }); + } + if !config_events.is_empty() { + ls.client.send_did_change_deno_configuration_notification( + lsp_custom::DidChangeDenoConfigurationNotificationParams { + changes: config_events, + }, + ); + } + (ls.client.clone(), ls.http_client.clone()) }; diff --git a/cli/lsp/lsp_custom.rs b/cli/lsp/lsp_custom.rs index 7abe56125..63f50d39f 100644 --- a/cli/lsp/lsp_custom.rs +++ b/cli/lsp/lsp_custom.rs @@ -62,6 +62,25 @@ pub struct DiagnosticBatchNotificationParams { #[derive(Debug, Eq, Hash, PartialEq, Copy, Clone, Deserialize, Serialize)] #[serde(rename_all = "camelCase")] +pub enum DenoConfigurationChangeType { + Added, + Changed, + Removed, +} + +impl DenoConfigurationChangeType { + pub fn from_file_change_type(file_event: lsp::FileChangeType) -> Self { + match file_event { + lsp::FileChangeType::CREATED => Self::Added, + lsp::FileChangeType::CHANGED => Self::Changed, + lsp::FileChangeType::DELETED => Self::Removed, + _ => Self::Changed, // non-exhaustable enum + } + } +} + +#[derive(Debug, Eq, Hash, PartialEq, Copy, Clone, Deserialize, Serialize)] +#[serde(rename_all = "camelCase")] pub enum DenoConfigurationType { DenoJson, PackageJson, @@ -70,8 +89,9 @@ pub enum DenoConfigurationType { #[derive(Debug, Eq, Hash, PartialEq, Clone, Deserialize, Serialize)] #[serde(rename_all = "camelCase")] pub struct DenoConfigurationChangeEvent { - #[serde(flatten)] - pub file_event: lsp::FileEvent, + pub uri: lsp::Url, + #[serde(rename = "type")] + pub typ: DenoConfigurationChangeType, pub configuration_type: DenoConfigurationType, } diff --git a/cli/tests/integration/lsp_tests.rs b/cli/tests/integration/lsp_tests.rs index 018dc9330..e267a9acb 100644 --- a/cli/tests/integration/lsp_tests.rs +++ b/cli/tests/integration/lsp_tests.rs @@ -857,7 +857,7 @@ fn lsp_did_change_deno_configuration_notification() { Some(json!({ "changes": [{ "uri": temp_dir.uri().join("deno.json").unwrap(), - "type": 1, + "type": "added", "configurationType": "denoJson" }], })) @@ -880,7 +880,7 @@ fn lsp_did_change_deno_configuration_notification() { Some(json!({ "changes": [{ "uri": temp_dir.uri().join("deno.json").unwrap(), - "type": 2, + "type": "changed", "configurationType": "denoJson" }], })) @@ -900,7 +900,7 @@ fn lsp_did_change_deno_configuration_notification() { Some(json!({ "changes": [{ "uri": temp_dir.uri().join("deno.json").unwrap(), - "type": 3, + "type": "removed", "configurationType": "denoJson" }], })) @@ -920,7 +920,7 @@ fn lsp_did_change_deno_configuration_notification() { Some(json!({ "changes": [{ "uri": temp_dir.uri().join("package.json").unwrap(), - "type": 1, + "type": "added", "configurationType": "packageJson" }], })) @@ -940,7 +940,7 @@ fn lsp_did_change_deno_configuration_notification() { Some(json!({ "changes": [{ "uri": temp_dir.uri().join("package.json").unwrap(), - "type": 2, + "type": "changed", "configurationType": "packageJson" }], })) @@ -960,7 +960,7 @@ fn lsp_did_change_deno_configuration_notification() { Some(json!({ "changes": [{ "uri": temp_dir.uri().join("package.json").unwrap(), - "type": 3, + "type": "removed", "configurationType": "packageJson" }], })) @@ -10037,9 +10037,8 @@ Deno.test({ assert_eq!(res.enqueued[0].text_document.uri, specifier); assert_eq!(res.enqueued[0].ids.len(), 1); let id = res.enqueued[0].ids[0].clone(); - - let (method, notification) = client.read_notification::<Value>(); - assert_eq!(method, "deno/testRunProgress"); + let notification = + client.read_notification_with_method::<Value>("deno/testRunProgress"); assert_eq!( notification, Some(json!({ @@ -10056,8 +10055,8 @@ Deno.test({ })) ); - let (method, notification) = client.read_notification::<Value>(); - assert_eq!(method, "deno/testRunProgress"); + let notification = + client.read_notification_with_method::<Value>("deno/testRunProgress"); let notification_value = notification .as_ref() .unwrap() @@ -10092,8 +10091,8 @@ Deno.test({ })) ); - let (method, notification) = client.read_notification::<Value>(); - assert_eq!(method, "deno/testRunProgress"); + let notification = + client.read_notification_with_method::<Value>("deno/testRunProgress"); assert_eq!( notification, Some(json!({ @@ -10111,8 +10110,8 @@ Deno.test({ })) ); - let (method, notification) = client.read_notification::<Value>(); - assert_eq!(method, "deno/testRunProgress"); + let notification = + client.read_notification_with_method::<Value>("deno/testRunProgress"); let mut notification = notification.unwrap(); let duration = notification .as_object_mut() @@ -10140,8 +10139,8 @@ Deno.test({ }) ); - let (method, notification) = client.read_notification::<Value>(); - assert_eq!(method, "deno/testRunProgress"); + let notification = + client.read_notification_with_method::<Value>("deno/testRunProgress"); let notification = notification.unwrap(); let obj = notification.as_object().unwrap(); assert_eq!(obj.get("id"), Some(&json!(1))); @@ -10159,8 +10158,8 @@ Deno.test({ ); assert!(message.contains_key("duration")); - let (method, notification) = client.read_notification::<Value>(); - assert_eq!(method, "deno/testRunProgress"); + let notification = + client.read_notification_with_method::<Value>("deno/testRunProgress"); assert_eq!( notification, Some(json!({ @@ -10193,8 +10192,8 @@ Deno.test({ assert_eq!(client.read_diagnostics().all().len(), 0); - let (method, notification) = client.read_notification::<Value>(); - assert_eq!(method, "deno/testModuleDelete"); + let notification = + client.read_notification_with_method::<Value>("deno/testModuleDelete"); assert_eq!( notification, Some(json!({ |