summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNayeem Rahman <nayeemrmn99@gmail.com>2024-01-17 20:22:28 +0000
committerGitHub <noreply@github.com>2024-01-17 20:22:28 +0000
commit2141543105dd9aabc0aca0534abc837f114e5bac (patch)
treee610510204beea26afa2d12178191ec78fcf151d
parent7662b056231b6ffa3106be795b9f19ab409543ab (diff)
feat(lsp): send "deno/didChangeDenoConfiguration" on init (#21965)
-rw-r--r--cli/lsp/language_server.rs34
-rw-r--r--cli/lsp/lsp_custom.rs24
-rw-r--r--cli/tests/integration/lsp_tests.rs41
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!({