diff options
author | Dmitry Sharshakov | 2021-08-22 11:44:16 +0000 |
---|---|---|
committer | Dmitry Sharshakov | 2021-08-22 11:44:16 +0000 |
commit | 3197c2536ecb0f4f7aa4dfb75ece549b72249541 (patch) | |
tree | dbba559627220579fffbd00c45eea9107673eae8 | |
parent | 838f69929db3d9d1e30fa52913a730f2e64b0681 (diff) |
Add eval command
-rw-r--r-- | helix-dap/src/client.rs | 15 | ||||
-rw-r--r-- | helix-dap/src/types.rs | 31 | ||||
-rw-r--r-- | helix-term/src/commands.rs | 21 |
3 files changed, 67 insertions, 0 deletions
diff --git a/helix-dap/src/client.rs b/helix-dap/src/client.rs index ebaae83c..98b88e23 100644 --- a/helix-dap/src/client.rs +++ b/helix-dap/src/client.rs @@ -352,4 +352,19 @@ impl Client { self.request::<requests::Pause>(args).await } + + pub async fn eval( + &mut self, + expression: String, + frame_id: Option<usize>, + ) -> Result<requests::EvaluateResponse> { + let args = requests::EvaluateArguments { + expression, + frame_id, + context: None, + format: None, + }; + + self.request::<requests::Evaluate>(args).await + } } diff --git a/helix-dap/src/types.rs b/helix-dap/src/types.rs index 4ee796b3..bb73e5e9 100644 --- a/helix-dap/src/types.rs +++ b/helix-dap/src/types.rs @@ -484,6 +484,37 @@ pub mod requests { type Result = ();
const COMMAND: &'static str = "pause";
}
+
+ #[derive(Debug, PartialEq, Clone, Deserialize, Serialize)]
+ #[serde(rename_all = "camelCase")]
+ pub struct EvaluateArguments {
+ pub expression: String,
+ pub frame_id: Option<usize>,
+ pub context: Option<String>,
+ pub format: Option<ValueFormat>,
+ }
+
+ #[derive(Debug, PartialEq, Clone, Deserialize, Serialize)]
+ #[serde(rename_all = "camelCase")]
+ pub struct EvaluateResponse {
+ pub result: String,
+ #[serde(rename = "type")]
+ pub data_type: Option<String>,
+ pub presentation_hint: Option<VariablePresentationHint>,
+ pub variables_reference: usize,
+ pub named_variables: Option<usize>,
+ pub indexed_variables: Option<usize>,
+ pub memory_reference: Option<String>,
+ }
+
+ #[derive(Debug)]
+ pub enum Evaluate {}
+
+ impl Request for Evaluate {
+ type Arguments = EvaluateArguments;
+ type Result = EvaluateResponse;
+ const COMMAND: &'static str = "evaluate";
+ }
}
// Events
diff --git a/helix-term/src/commands.rs b/helix-term/src/commands.rs index 3449d94b..cc5ce67c 100644 --- a/helix-term/src/commands.rs +++ b/helix-term/src/commands.rs @@ -1910,6 +1910,20 @@ mod cmd { Ok(()) } + fn debug_eval( + cx: &mut compositor::Context, + args: &[&str], + _event: PromptEvent, + ) -> anyhow::Result<()> { + use helix_lsp::block_on; + if let Some(debugger) = cx.editor.debugger.as_mut() { + let id = debugger.stack_pointer.clone().map(|x| x.id); + let response = block_on(debugger.eval(args.join(" "), id))?; + cx.editor.set_status(response.result); + } + Ok(()) + } + pub const TYPABLE_COMMAND_LIST: &[TypableCommand] = &[ TypableCommand { name: "quit", @@ -2148,6 +2162,13 @@ mod cmd { doc: "Display tree sitter scopes, primarily for theming and development.", fun: tree_sitter_scopes, completer: None, + }, + TypableCommand { + name: "debug-eval", + alias: None, + doc: "Evaluate expression in current debug context.", + fun: debug_eval, + completer: None, } ]; |