feat(lsp): send "deno/didChangeDenoConfiguration" on init (#21965)

This commit is contained in:
Nayeem Rahman 2024-01-17 20:22:28 +00:00 committed by GitHub
parent 7662b05623
commit 2141543105
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 74 additions and 25 deletions

View file

@ -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())
};

View file

@ -60,6 +60,25 @@ pub struct DiagnosticBatchNotificationParams {
pub messages_len: usize,
}
#[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 {
@ -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,
}

View file

@ -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!({