diff options
author | David Sherret <dsherret@users.noreply.github.com> | 2023-03-09 15:09:03 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-03-09 15:09:03 -0500 |
commit | 47012bd931e785073e943b82dd397386b6ee7ca5 (patch) | |
tree | 82e2695413c72bd124f55a8bc5423c2b79d63f34 /cli/bench | |
parent | 2f81e555d88e45a7ec9b5a5bc511fd3ea4d9c75f (diff) |
refactor(tests/lsp): consolidate more into test LspClient and reduce verbosity (#18100)
Diffstat (limited to 'cli/bench')
-rw-r--r-- | cli/bench/lsp.rs | 153 | ||||
-rw-r--r-- | cli/bench/lsp_bench_standalone.rs | 47 | ||||
-rw-r--r-- | cli/bench/main.rs | 2 |
3 files changed, 83 insertions, 119 deletions
diff --git a/cli/bench/lsp.rs b/cli/bench/lsp.rs index b0682e2e9..15f3ee762 100644 --- a/cli/bench/lsp.rs +++ b/cli/bench/lsp.rs @@ -1,6 +1,5 @@ // Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. -use deno_core::error::AnyError; use deno_core::serde::Deserialize; use deno_core::serde_json; use deno_core::serde_json::json; @@ -10,7 +9,6 @@ use std::collections::HashMap; use std::path::Path; use std::time::Duration; use test_util::lsp::LspClientBuilder; -use test_util::lsp::LspResponseError; use tower_lsp::lsp_types as lsp; static FIXTURE_CODE_LENS_TS: &str = include_str!("testdata/code_lens.ts"); @@ -41,7 +39,7 @@ struct FixtureMessage { /// A benchmark that opens a 8000+ line TypeScript document, adds a function to /// the end of the document and does a level of hovering and gets quick fix /// code actions. -fn bench_big_file_edits(deno_exe: &Path) -> Result<Duration, AnyError> { +fn bench_big_file_edits(deno_exe: &Path) -> Duration { let mut client = LspClientBuilder::new().deno_exe(deno_exe).build(); client.initialize_default(); @@ -55,9 +53,9 @@ fn bench_big_file_edits(deno_exe: &Path) -> Result<Duration, AnyError> { "text": FIXTURE_DB_TS } }), - )?; + ); - let (id, method, _): (u64, String, Option<Value>) = client.read_request()?; + let (id, method, _): (u64, String, Option<Value>) = client.read_request(); assert_eq!(method, "workspace/configuration"); client.write_response( @@ -65,58 +63,45 @@ fn bench_big_file_edits(deno_exe: &Path) -> Result<Duration, AnyError> { json!({ "enable": true }), - )?; + ); - let (method, _): (String, Option<Value>) = client.read_notification()?; + let (method, _): (String, Option<Value>) = client.read_notification(); assert_eq!(method, "textDocument/publishDiagnostics"); - let (method, _): (String, Option<Value>) = client.read_notification()?; + let (method, _): (String, Option<Value>) = client.read_notification(); assert_eq!(method, "textDocument/publishDiagnostics"); - let (method, _): (String, Option<Value>) = client.read_notification()?; + let (method, _): (String, Option<Value>) = client.read_notification(); assert_eq!(method, "textDocument/publishDiagnostics"); let messages: Vec<FixtureMessage> = - serde_json::from_slice(FIXTURE_DB_MESSAGES)?; + serde_json::from_slice(FIXTURE_DB_MESSAGES).unwrap(); for msg in messages { match msg.fixture_type { FixtureType::Action => { - client.write_request::<_, _, Value>( - "textDocument/codeAction", - msg.params, - )?; + client.write_request("textDocument/codeAction", msg.params); } FixtureType::Change => { - client.write_notification("textDocument/didChange", msg.params)?; + client.write_notification("textDocument/didChange", msg.params); } FixtureType::Completion => { - client.write_request::<_, _, Value>( - "textDocument/completion", - msg.params, - )?; + client.write_request("textDocument/completion", msg.params); } FixtureType::Highlight => { - client.write_request::<_, _, Value>( - "textDocument/documentHighlight", - msg.params, - )?; + client.write_request("textDocument/documentHighlight", msg.params); } FixtureType::Hover => { - client - .write_request::<_, _, Value>("textDocument/hover", msg.params)?; + client.write_request("textDocument/hover", msg.params); } } } - let (_, response_error): (Option<Value>, Option<LspResponseError>) = - client.write_request("shutdown", json!(null))?; - assert!(response_error.is_none()); + client.write_request("shutdown", json!(null)); + client.write_notification("exit", json!(null)); - client.write_notification("exit", json!(null))?; - - Ok(client.duration()) + client.duration() } -fn bench_code_lens(deno_exe: &Path) -> Result<Duration, AnyError> { +fn bench_code_lens(deno_exe: &Path) -> Duration { let mut client = LspClientBuilder::new().deno_exe(deno_exe).build(); client.initialize_default(); @@ -130,9 +115,9 @@ fn bench_code_lens(deno_exe: &Path) -> Result<Duration, AnyError> { "text": FIXTURE_CODE_LENS_TS } }), - )?; + ); - let (id, method, _): (u64, String, Option<Value>) = client.read_request()?; + let (id, method, _): (u64, String, Option<Value>) = client.read_request(); assert_eq!(method, "workspace/configuration"); client.write_response( @@ -140,42 +125,33 @@ fn bench_code_lens(deno_exe: &Path) -> Result<Duration, AnyError> { json!({ "enable": true }), - )?; + ); - let (method, _): (String, Option<Value>) = client.read_notification()?; + let (method, _): (String, Option<Value>) = client.read_notification(); assert_eq!(method, "textDocument/publishDiagnostics"); - let (method, _): (String, Option<Value>) = client.read_notification()?; + let (method, _): (String, Option<Value>) = client.read_notification(); assert_eq!(method, "textDocument/publishDiagnostics"); - let (method, _): (String, Option<Value>) = client.read_notification()?; + let (method, _): (String, Option<Value>) = client.read_notification(); assert_eq!(method, "textDocument/publishDiagnostics"); - let (maybe_res, maybe_err) = client - .write_request::<_, _, Vec<lsp::CodeLens>>( - "textDocument/codeLens", - json!({ - "textDocument": { - "uri": "file:///testdata/code_lens.ts" - } - }), - ) - .unwrap(); - assert!(maybe_err.is_none()); - assert!(maybe_res.is_some()); - let res = maybe_res.unwrap(); + let res = client.write_request_with_res_as::<Vec<lsp::CodeLens>>( + "textDocument/codeLens", + json!({ + "textDocument": { + "uri": "file:///testdata/code_lens.ts" + } + }), + ); assert!(!res.is_empty()); for code_lens in res { - let (maybe_res, maybe_err) = client - .write_request::<_, _, lsp::CodeLens>("codeLens/resolve", code_lens) - .unwrap(); - assert!(maybe_err.is_none()); - assert!(maybe_res.is_some()); + client.write_request("codeLens/resolve", code_lens); } - Ok(client.duration()) + client.duration() } -fn bench_find_replace(deno_exe: &Path) -> Result<Duration, AnyError> { +fn bench_find_replace(deno_exe: &Path) -> Duration { let mut client = LspClientBuilder::new().deno_exe(deno_exe).build(); client.initialize_default(); @@ -190,17 +166,17 @@ fn bench_find_replace(deno_exe: &Path) -> Result<Duration, AnyError> { "text": "console.log(\"000\");\n" } }), - )?; + ); } for _ in 0..10 { - let (id, method, _) = client.read_request::<Value>()?; + let (id, method, _) = client.read_request::<Value>(); assert_eq!(method, "workspace/configuration"); - client.write_response(id, json!({ "enable": true }))?; + client.write_response(id, json!({ "enable": true })); } for _ in 0..3 { - let (method, _): (String, Option<Value>) = client.read_notification()?; + let (method, _): (String, Option<Value>) = client.read_notification(); assert_eq!(method, "textDocument/publishDiagnostics"); } @@ -228,12 +204,12 @@ fn bench_find_replace(deno_exe: &Path) -> Result<Duration, AnyError> { text: "111".to_string(), }], }, - )?; + ); } for i in 0..10 { let file_name = format!("file:///a/file_{i}.ts"); - let (maybe_res, maybe_err) = client.write_request::<_, _, Value>( + client.write_request( "textDocument/formatting", lsp::DocumentFormattingParams { text_document: lsp::TextDocumentIdentifier { @@ -246,27 +222,22 @@ fn bench_find_replace(deno_exe: &Path) -> Result<Duration, AnyError> { }, work_done_progress_params: Default::default(), }, - )?; - assert!(maybe_err.is_none()); - assert!(maybe_res.is_some()); + ); } for _ in 0..3 { - let (method, _): (String, Option<Value>) = client.read_notification()?; + let (method, _): (String, Option<Value>) = client.read_notification(); assert_eq!(method, "textDocument/publishDiagnostics"); } - let (_, response_error): (Option<Value>, Option<LspResponseError>) = - client.write_request("shutdown", json!(null))?; - assert!(response_error.is_none()); - - client.write_notification("exit", json!(null))?; + client.write_request("shutdown", json!(null)); + client.write_notification("exit", json!(null)); - Ok(client.duration()) + client.duration() } /// A test that starts up the LSP, opens a single line document, and exits. -fn bench_startup_shutdown(deno_exe: &Path) -> Result<Duration, AnyError> { +fn bench_startup_shutdown(deno_exe: &Path) -> Duration { let mut client = LspClientBuilder::new().deno_exe(deno_exe).build(); client.initialize_default(); @@ -280,9 +251,9 @@ fn bench_startup_shutdown(deno_exe: &Path) -> Result<Duration, AnyError> { "text": "console.log(Deno.args);\n" } }), - )?; + ); - let (id, method, _) = client.read_request::<Value>()?; + let (id, method, _) = client.read_request::<Value>(); assert_eq!(method, "workspace/configuration"); client.write_response( @@ -290,33 +261,31 @@ fn bench_startup_shutdown(deno_exe: &Path) -> Result<Duration, AnyError> { json!({ "enable": true }), - )?; + ); - let (method, _): (String, Option<Value>) = client.read_notification()?; + let (method, _): (String, Option<Value>) = client.read_notification(); assert_eq!(method, "textDocument/publishDiagnostics"); - let (method, _): (String, Option<Value>) = client.read_notification()?; + let (method, _): (String, Option<Value>) = client.read_notification(); assert_eq!(method, "textDocument/publishDiagnostics"); - let (method, _): (String, Option<Value>) = client.read_notification()?; + let (method, _): (String, Option<Value>) = client.read_notification(); assert_eq!(method, "textDocument/publishDiagnostics"); - let (_, response_error): (Option<Value>, Option<LspResponseError>) = - client.write_request("shutdown", json!(null))?; - assert!(response_error.is_none()); + client.write_request("shutdown", json!(null)); - client.write_notification("exit", json!(null))?; + client.write_notification("exit", json!(null)); - Ok(client.duration()) + client.duration() } /// Generate benchmarks for the LSP server. -pub fn benchmarks(deno_exe: &Path) -> Result<HashMap<String, i64>, AnyError> { +pub fn benchmarks(deno_exe: &Path) -> HashMap<String, i64> { println!("-> Start benchmarking lsp"); let mut exec_times = HashMap::new(); println!(" - Simple Startup/Shutdown "); let mut times = Vec::new(); for _ in 0..10 { - times.push(bench_startup_shutdown(deno_exe)?); + times.push(bench_startup_shutdown(deno_exe)); } let mean = (times.iter().sum::<Duration>() / times.len() as u32).as_millis() as i64; @@ -326,7 +295,7 @@ pub fn benchmarks(deno_exe: &Path) -> Result<HashMap<String, i64>, AnyError> { println!(" - Big Document/Several Edits "); let mut times = Vec::new(); for _ in 0..5 { - times.push(bench_big_file_edits(deno_exe)?); + times.push(bench_big_file_edits(deno_exe)); } let mean = (times.iter().sum::<Duration>() / times.len() as u32).as_millis() as i64; @@ -336,7 +305,7 @@ pub fn benchmarks(deno_exe: &Path) -> Result<HashMap<String, i64>, AnyError> { println!(" - Find/Replace"); let mut times = Vec::new(); for _ in 0..10 { - times.push(bench_find_replace(deno_exe)?); + times.push(bench_find_replace(deno_exe)); } let mean = (times.iter().sum::<Duration>() / times.len() as u32).as_millis() as i64; @@ -346,7 +315,7 @@ pub fn benchmarks(deno_exe: &Path) -> Result<HashMap<String, i64>, AnyError> { println!(" - Code Lens"); let mut times = Vec::new(); for _ in 0..10 { - times.push(bench_code_lens(deno_exe)?); + times.push(bench_code_lens(deno_exe)); } let mean = (times.iter().sum::<Duration>() / times.len() as u32).as_millis() as i64; @@ -355,5 +324,5 @@ pub fn benchmarks(deno_exe: &Path) -> Result<HashMap<String, i64>, AnyError> { println!("<- End benchmarking lsp"); - Ok(exec_times) + exec_times } diff --git a/cli/bench/lsp_bench_standalone.rs b/cli/bench/lsp_bench_standalone.rs index 888d959ac..60d5be2d1 100644 --- a/cli/bench/lsp_bench_standalone.rs +++ b/cli/bench/lsp_bench_standalone.rs @@ -14,34 +14,29 @@ fn incremental_change_wait(bench: &mut Bencher) { let mut client = LspClientBuilder::new().build(); client.initialize_default(); - client - .write_notification( - "textDocument/didOpen", - json!({ - "textDocument": { - "uri": "file:///testdata/express-router.js", - "languageId": "javascript", - "version": 0, - "text": include_str!("testdata/express-router.js") - } - }), - ) - .unwrap(); + client.write_notification( + "textDocument/didOpen", + json!({ + "textDocument": { + "uri": "file:///testdata/express-router.js", + "languageId": "javascript", + "version": 0, + "text": include_str!("testdata/express-router.js") + } + }), + ); - let (id, method, _): (u64, String, Option<Value>) = - client.read_request().unwrap(); + let (id, method, _): (u64, String, Option<Value>) = client.read_request(); assert_eq!(method, "workspace/configuration"); - client - .write_response( - id, - json!({ - "enable": true - }), - ) - .unwrap(); + client.write_response( + id, + json!({ + "enable": true + }), + ); let (method, _maybe_diag): (String, Option<Value>) = - client.read_notification().unwrap(); + client.read_notification(); assert_eq!(method, "textDocument/publishDiagnostics"); let mut document_version: u64 = 0; @@ -61,7 +56,7 @@ fn incremental_change_wait(bench: &mut Bencher) { {"text": text, "range":{"start":{"line":509,"character":10},"end":{"line":509,"character":16}}} ] }) - ).unwrap(); + ); wait_for_deno_lint_diagnostic(document_version, &mut client); @@ -75,7 +70,7 @@ fn wait_for_deno_lint_diagnostic( ) { loop { let (method, maybe_diag): (String, Option<Value>) = - client.read_notification().unwrap(); + client.read_notification(); if method == "textDocument/publishDiagnostics" { let d = maybe_diag.unwrap(); let msg = d.as_object().unwrap(); diff --git a/cli/bench/main.rs b/cli/bench/main.rs index 747407945..3bf73e78d 100644 --- a/cli/bench/main.rs +++ b/cli/bench/main.rs @@ -472,7 +472,7 @@ async fn main() -> Result<()> { } if benchmarks.contains(&"lsp") { - let lsp_exec_times = lsp::benchmarks(&deno_exe)?; + let lsp_exec_times = lsp::benchmarks(&deno_exe); new_data.lsp_exec_time = lsp_exec_times; } |