diff options
author | Nayeem Rahman <nayeemrmn99@gmail.com> | 2024-08-28 05:15:48 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-08-28 05:15:48 +0100 |
commit | 97d1635343dc6e93c8dcf4b116922de5b9c57af3 (patch) | |
tree | 6edb8630d4ec473c73c47ace90a7053a898f5570 /cli/lsp/testing | |
parent | efcabce1c117a2e0fed8604d887695a0a19a37ad (diff) |
fix(lsp): panic on url_to_uri() (#25238)
Diffstat (limited to 'cli/lsp/testing')
-rw-r--r-- | cli/lsp/testing/definitions.rs | 29 | ||||
-rw-r--r-- | cli/lsp/testing/execution.rs | 30 | ||||
-rw-r--r-- | cli/lsp/testing/server.rs | 30 |
3 files changed, 51 insertions, 38 deletions
diff --git a/cli/lsp/testing/definitions.rs b/cli/lsp/testing/definitions.rs index 69baf053e..f23411852 100644 --- a/cli/lsp/testing/definitions.rs +++ b/cli/lsp/testing/definitions.rs @@ -10,6 +10,7 @@ use crate::tools::test::TestDescription; use crate::tools::test::TestStepDescription; use crate::util::checksum; +use deno_core::error::AnyError; use deno_core::ModuleSpecifier; use lsp::Range; use std::collections::HashMap; @@ -144,21 +145,23 @@ impl TestModule { pub fn as_replace_notification( &self, maybe_root_uri: Option<&ModuleSpecifier>, - ) -> TestingNotification { + ) -> Result<TestingNotification, AnyError> { let label = self.label(maybe_root_uri); - TestingNotification::Module(lsp_custom::TestModuleNotificationParams { - text_document: lsp::TextDocumentIdentifier { - uri: url_to_uri(&self.specifier), + Ok(TestingNotification::Module( + lsp_custom::TestModuleNotificationParams { + text_document: lsp::TextDocumentIdentifier { + uri: url_to_uri(&self.specifier)?, + }, + kind: lsp_custom::TestModuleNotificationKind::Replace, + label, + tests: self + .defs + .iter() + .filter(|(_, def)| def.parent_id.is_none()) + .map(|(id, _)| self.get_test_data(id)) + .collect(), }, - kind: lsp_custom::TestModuleNotificationKind::Replace, - label, - tests: self - .defs - .iter() - .filter(|(_, def)| def.parent_id.is_none()) - .map(|(id, _)| self.get_test_data(id)) - .collect(), - }) + )) } pub fn label(&self, maybe_root_uri: Option<&ModuleSpecifier>) -> String { diff --git a/cli/lsp/testing/execution.rs b/cli/lsp/testing/execution.rs index aec91b3e7..4ac565aa0 100644 --- a/cli/lsp/testing/execution.rs +++ b/cli/lsp/testing/execution.rs @@ -186,7 +186,7 @@ impl TestRun { self .queue .iter() - .map(|s| { + .filter_map(|s| { let ids = if let Some((test_module, _)) = tests.get(s) { if let Some(filter) = self.filters.get(s) { filter.as_ids(test_module) @@ -196,10 +196,12 @@ impl TestRun { } else { Vec::new() }; - lsp_custom::EnqueuedTestModule { - text_document: lsp::TextDocumentIdentifier { uri: url_to_uri(s) }, + Some(lsp_custom::EnqueuedTestModule { + text_document: lsp::TextDocumentIdentifier { + uri: url_to_uri(s).ok()?, + }, ids, - } + }) }) .collect() } @@ -591,6 +593,9 @@ impl LspTestReporter { let (test_module, _) = files .entry(specifier.clone()) .or_insert_with(|| (TestModule::new(specifier), "1".to_string())); + let Ok(uri) = url_to_uri(&test_module.specifier) else { + return; + }; let (static_id, is_new) = test_module.register_dynamic(desc); self.tests.insert( desc.id, @@ -601,9 +606,7 @@ impl LspTestReporter { .client .send_test_notification(TestingNotification::Module( lsp_custom::TestModuleNotificationParams { - text_document: lsp::TextDocumentIdentifier { - uri: url_to_uri(&test_module.specifier), - }, + text_document: lsp::TextDocumentIdentifier { uri }, kind: lsp_custom::TestModuleNotificationKind::Insert, label: test_module.label(self.maybe_root_uri.as_ref()), tests: vec![test_module.get_test_data(&static_id)], @@ -701,6 +704,9 @@ impl LspTestReporter { let (test_module, _) = files .entry(specifier.clone()) .or_insert_with(|| (TestModule::new(specifier), "1".to_string())); + let Ok(uri) = url_to_uri(&test_module.specifier) else { + return; + }; let (static_id, is_new) = test_module.register_step_dynamic( desc, self.tests.get(&desc.parent_id).unwrap().static_id(), @@ -714,9 +720,7 @@ impl LspTestReporter { .client .send_test_notification(TestingNotification::Module( lsp_custom::TestModuleNotificationParams { - text_document: lsp::TextDocumentIdentifier { - uri: url_to_uri(&test_module.specifier), - }, + text_document: lsp::TextDocumentIdentifier { uri }, kind: lsp_custom::TestModuleNotificationKind::Insert, label: test_module.label(self.maybe_root_uri.as_ref()), tests: vec![test_module.get_test_data(&static_id)], @@ -800,14 +804,14 @@ mod tests { include: Some(vec![ lsp_custom::TestIdentifier { text_document: lsp::TextDocumentIdentifier { - uri: url_to_uri(&specifier), + uri: url_to_uri(&specifier).unwrap(), }, id: None, step_id: None, }, lsp_custom::TestIdentifier { text_document: lsp::TextDocumentIdentifier { - uri: url_to_uri(&non_test_specifier), + uri: url_to_uri(&non_test_specifier).unwrap(), }, id: None, step_id: None, @@ -815,7 +819,7 @@ mod tests { ]), exclude: vec![lsp_custom::TestIdentifier { text_document: lsp::TextDocumentIdentifier { - uri: url_to_uri(&specifier), + uri: url_to_uri(&specifier).unwrap(), }, id: Some( "69d9fe87f64f5b66cb8b631d4fd2064e8224b8715a049be54276c42189ff8f9f" diff --git a/cli/lsp/testing/server.rs b/cli/lsp/testing/server.rs index 0c34ea7bc..c9c39d9ff 100644 --- a/cli/lsp/testing/server.rs +++ b/cli/lsp/testing/server.rs @@ -27,14 +27,16 @@ use tower_lsp::jsonrpc::Error as LspError; use tower_lsp::jsonrpc::Result as LspResult; use tower_lsp::lsp_types as lsp; -fn as_delete_notification(url: ModuleSpecifier) -> TestingNotification { - TestingNotification::DeleteModule( +fn as_delete_notification( + url: &ModuleSpecifier, +) -> Result<TestingNotification, AnyError> { + Ok(TestingNotification::DeleteModule( lsp_custom::TestModuleDeleteNotificationParams { text_document: lsp::TextDocumentIdentifier { - uri: url_to_uri(&url), + uri: url_to_uri(url)?, }, }, - ) + )) } pub type TestServerTests = @@ -126,20 +128,24 @@ impl TestServer { .map(|tm| tm.as_ref().clone()) .unwrap_or_else(|| TestModule::new(specifier.clone())); if !test_module.is_empty() { - client.send_test_notification( - test_module.as_replace_notification(mru.as_ref()), - ); + if let Ok(params) = + test_module.as_replace_notification(mru.as_ref()) + { + client.send_test_notification(params); + } } else if !was_empty { - client.send_test_notification(as_delete_notification( - specifier.clone(), - )); + if let Ok(params) = as_delete_notification(specifier) { + client.send_test_notification(params); + } } tests .insert(specifier.clone(), (test_module, script_version)); } } - for key in keys { - client.send_test_notification(as_delete_notification(key)); + for key in &keys { + if let Ok(params) = as_delete_notification(key) { + client.send_test_notification(params); + } } performance.measure(mark); } |