on master help sign in
Add eval command
3197c25Dmitry Sharshakov
helix-dap/src/client.rs+15
@@ -352,4 +352,19 @@ impl Client {
352
352
353 self.request::<requests::Pause>(args).await
353 self.request::<requests::Pause>(args).await
354 }
354 }
355+
356+ pub async fn eval(
357+ &mut self,
358+ expression: String,
359+ frame_id: Option<usize>,
360+ ) -> Result<requests::EvaluateResponse> {
361+ let args = requests::EvaluateArguments {
362+ expression,
363+ frame_id,
364+ context: None,
365+ format: None,
366+ };
367+
368+ self.request::<requests::Evaluate>(args).await
369+ }
355}
370}
helix-dap/src/types.rs+31
@@ -484,6 +484,37 @@ pub mod requests {
484 type Result = ();
484 type Result = ();
485 const COMMAND: &'static str = "pause";
485 const COMMAND: &'static str = "pause";
486 }
486 }
487+
488+ #[derive(Debug, PartialEq, Clone, Deserialize, Serialize)]
489+ #[serde(rename_all = "camelCase")]
490+ pub struct EvaluateArguments {
491+ pub expression: String,
492+ pub frame_id: Option<usize>,
493+ pub context: Option<String>,
494+ pub format: Option<ValueFormat>,
495+ }
496+
497+ #[derive(Debug, PartialEq, Clone, Deserialize, Serialize)]
498+ #[serde(rename_all = "camelCase")]
499+ pub struct EvaluateResponse {
500+ pub result: String,
501+ #[serde(rename = "type")]
502+ pub data_type: Option<String>,
503+ pub presentation_hint: Option<VariablePresentationHint>,
504+ pub variables_reference: usize,
505+ pub named_variables: Option<usize>,
506+ pub indexed_variables: Option<usize>,
507+ pub memory_reference: Option<String>,
508+ }
509+
510+ #[derive(Debug)]
511+ pub enum Evaluate {}
512+
513+ impl Request for Evaluate {
514+ type Arguments = EvaluateArguments;
515+ type Result = EvaluateResponse;
516+ const COMMAND: &'static str = "evaluate";
517+ }
487}
518}
488
519
489// Events
520// Events
helix-term/src/commands.rs+21
@@ -1910,6 +1910,20 @@ mod cmd {
1910 Ok(())
1910 Ok(())
1911 }
1911 }
1912
1912
1913+ fn debug_eval(
1914+ cx: &mut compositor::Context,
1915+ args: &[&str],
1916+ _event: PromptEvent,
1917+ ) -> anyhow::Result<()> {
1918+ use helix_lsp::block_on;
1919+ if let Some(debugger) = cx.editor.debugger.as_mut() {
1920+ let id = debugger.stack_pointer.clone().map(|x| x.id);
1921+ let response = block_on(debugger.eval(args.join(" "), id))?;
1922+ cx.editor.set_status(response.result);
1923+ }
1924+ Ok(())
1925+ }
1926+
1913 pub const TYPABLE_COMMAND_LIST: &[TypableCommand] = &[
1927 pub const TYPABLE_COMMAND_LIST: &[TypableCommand] = &[
1914 TypableCommand {
1928 TypableCommand {
1915 name: "quit",
1929 name: "quit",
@@ -2148,6 +2162,13 @@ mod cmd {
2148 doc: "Display tree sitter scopes, primarily for theming and development.",
2162 doc: "Display tree sitter scopes, primarily for theming and development.",
2149 fun: tree_sitter_scopes,
2163 fun: tree_sitter_scopes,
2150 completer: None,
2164 completer: None,
2165+ },
2166+ TypableCommand {
2167+ name: "debug-eval",
2168+ alias: None,
2169+ doc: "Evaluate expression in current debug context.",
2170+ fun: debug_eval,
2171+ completer: None,
2151 }
2172 }
2152 ];
2173 ];
2153
2174