diff options
-rw-r--r-- | cli/lsp/code_lens.rs | 82 | ||||
-rw-r--r-- | cli/tests/testdata/lsp/code_lens_response_test.json | 224 |
2 files changed, 293 insertions, 13 deletions
diff --git a/cli/lsp/code_lens.rs b/cli/lsp/code_lens.rs index 635f34916..42c9123fb 100644 --- a/cli/lsp/code_lens.rs +++ b/cli/lsp/code_lens.rs @@ -80,14 +80,32 @@ impl DenoTestCollector { } } - fn add_code_lens<N: AsRef<str>>(&mut self, name: N, span: &Span) { + fn add_code_lenses<N: AsRef<str>>(&mut self, name: N, span: &Span) { let range = span_to_range(span, &self.parsed_source); + self.add_code_lens(&name, range, "▶\u{fe0e} Run Test", false); + self.add_code_lens(&name, range, "Debug", true); + } + + fn add_code_lens<N: AsRef<str>>( + &mut self, + name: &N, + range: lsp::Range, + title: &str, + inspect: bool, + ) { + let options = json!({ + "inspect": inspect, + }); self.code_lenses.push(lsp::CodeLens { range, command: Some(lsp::Command { - title: "▶\u{fe0e} Run Test".to_string(), + title: title.to_string(), command: "deno.test".to_string(), - arguments: Some(vec![json!(self.specifier), json!(name.as_ref())]), + arguments: Some(vec![ + json!(self.specifier), + json!(name.as_ref()), + options, + ]), }), data: None, }); @@ -106,7 +124,7 @@ impl DenoTestCollector { key_value_prop.value.as_ref() { let name = lit_str.value.to_string(); - self.add_code_lens(name, span); + self.add_code_lenses(name, span); } } } @@ -116,7 +134,7 @@ impl DenoTestCollector { } ast::Expr::Lit(ast::Lit::Str(lit_str)) => { let name = lit_str.value.to_string(); - self.add_code_lens(name, span); + self.add_code_lenses(name, span); } _ => (), } @@ -581,6 +599,33 @@ mod tests { arguments: Some(vec![ json!("https://deno.land/x/mod.ts"), json!("test a"), + json!({ + "inspect": false, + }), + ]) + }), + data: None, + }, + lsp::CodeLens { + range: lsp::Range { + start: lsp::Position { + line: 1, + character: 11 + }, + end: lsp::Position { + line: 1, + character: 15 + } + }, + command: Some(lsp::Command { + title: "Debug".to_string(), + command: "deno.test".to_string(), + arguments: Some(vec![ + json!("https://deno.land/x/mod.ts"), + json!("test a"), + json!({ + "inspect": true, + }), ]) }), data: None, @@ -602,6 +647,33 @@ mod tests { arguments: Some(vec![ json!("https://deno.land/x/mod.ts"), json!("test b"), + json!({ + "inspect": false, + }), + ]) + }), + data: None, + }, + lsp::CodeLens { + range: lsp::Range { + start: lsp::Position { + line: 6, + character: 11 + }, + end: lsp::Position { + line: 6, + character: 15 + } + }, + command: Some(lsp::Command { + title: "Debug".to_string(), + command: "deno.test".to_string(), + arguments: Some(vec![ + json!("https://deno.land/x/mod.ts"), + json!("test b"), + json!({ + "inspect": true, + }), ]) }), data: None, diff --git a/cli/tests/testdata/lsp/code_lens_response_test.json b/cli/tests/testdata/lsp/code_lens_response_test.json index b2cb4588a..159839816 100644 --- a/cli/tests/testdata/lsp/code_lens_response_test.json +++ b/cli/tests/testdata/lsp/code_lens_response_test.json @@ -15,7 +15,33 @@ "command": "deno.test", "arguments": [ "file:///a/file.ts", - "test a" + "test a", + { + "inspect": false + } + ] + } + }, + { + "range": { + "start": { + "line": 4, + "character": 5 + }, + "end": { + "line": 4, + "character": 9 + } + }, + "command": { + "title": "Debug", + "command": "deno.test", + "arguments": [ + "file:///a/file.ts", + "test a", + { + "inspect": true + } ] } }, @@ -35,7 +61,33 @@ "command": "deno.test", "arguments": [ "file:///a/file.ts", - "test b" + "test b", + { + "inspect": false + } + ] + } + }, + { + "range": { + "start": { + "line": 5, + "character": 5 + }, + "end": { + "line": 5, + "character": 9 + } + }, + "command": { + "title": "Debug", + "command": "deno.test", + "arguments": [ + "file:///a/file.ts", + "test b", + { + "inspect": true + } ] } }, @@ -55,7 +107,33 @@ "command": "deno.test", "arguments": [ "file:///a/file.ts", - "test c" + "test c", + { + "inspect": false + } + ] + } + }, + { + "range": { + "start": { + "line": 9, + "character": 0 + }, + "end": { + "line": 9, + "character": 4 + } + }, + "command": { + "title": "Debug", + "command": "deno.test", + "arguments": [ + "file:///a/file.ts", + "test c", + { + "inspect": true + } ] } }, @@ -75,7 +153,33 @@ "command": "deno.test", "arguments": [ "file:///a/file.ts", - "test d" + "test d", + { + "inspect": false + } + ] + } + }, + { + "range": { + "start": { + "line": 13, + "character": 0 + }, + "end": { + "line": 13, + "character": 4 + } + }, + "command": { + "title": "Debug", + "command": "deno.test", + "arguments": [ + "file:///a/file.ts", + "test d", + { + "inspect": true + } ] } }, @@ -95,7 +199,33 @@ "command": "deno.test", "arguments": [ "file:///a/file.ts", - "test e" + "test e", + { + "inspect": false + } + ] + } + }, + { + "range": { + "start": { + "line": 14, + "character": 0 + }, + "end": { + "line": 14, + "character": 5 + } + }, + "command": { + "title": "Debug", + "command": "deno.test", + "arguments": [ + "file:///a/file.ts", + "test e", + { + "inspect": true + } ] } }, @@ -115,7 +245,33 @@ "command": "deno.test", "arguments": [ "file:///a/file.ts", - "test f" + "test f", + { + "inspect": false + } + ] + } + }, + { + "range": { + "start": { + "line": 18, + "character": 0 + }, + "end": { + "line": 18, + "character": 5 + } + }, + "command": { + "title": "Debug", + "command": "deno.test", + "arguments": [ + "file:///a/file.ts", + "test f", + { + "inspect": true + } ] } }, @@ -135,7 +291,33 @@ "command": "deno.test", "arguments": [ "file:///a/file.ts", - "test g" + "test g", + { + "inspect": false + } + ] + } + }, + { + "range": { + "start": { + "line": 19, + "character": 0 + }, + "end": { + "line": 19, + "character": 5 + } + }, + "command": { + "title": "Debug", + "command": "deno.test", + "arguments": [ + "file:///a/file.ts", + "test g", + { + "inspect": true + } ] } }, @@ -155,7 +337,33 @@ "command": "deno.test", "arguments": [ "file:///a/file.ts", - "test h" + "test h", + { + "inspect": false + } + ] + } + }, + { + "range": { + "start": { + "line": 23, + "character": 0 + }, + "end": { + "line": 23, + "character": 5 + } + }, + "command": { + "title": "Debug", + "command": "deno.test", + "arguments": [ + "file:///a/file.ts", + "test h", + { + "inspect": true + } ] } } |