diff options
-rw-r--r-- | helix-dap/src/client.rs | 323 | ||||
-rw-r--r-- | helix-dap/src/lib.rs | 4 | ||||
-rw-r--r-- | helix-dap/src/types.rs | 324 |
3 files changed, 328 insertions, 323 deletions
diff --git a/helix-dap/src/client.rs b/helix-dap/src/client.rs index 333b18a0..a0133d7d 100644 --- a/helix-dap/src/client.rs +++ b/helix-dap/src/client.rs @@ -1,5 +1,6 @@ use crate::{ transport::{Event, Payload, Request, Response, Transport}, + types::*, Result, }; use log::{error, info}; @@ -29,328 +30,6 @@ use tokio::{ time, }; -#[derive(Debug, PartialEq, Clone, Deserialize, Serialize)] -#[serde(rename_all = "camelCase")] -pub struct ColumnDescriptor { - pub attribute_name: String, - pub label: String, - pub format: Option<String>, - #[serde(rename = "type")] - pub col_type: Option<String>, - pub width: Option<usize>, -} - -#[derive(Debug, PartialEq, Clone, Deserialize, Serialize)] -#[serde(rename_all = "camelCase")] -pub struct ExceptionBreakpointsFilter { - pub filter: String, - pub label: String, - pub description: Option<String>, - pub default: Option<bool>, - pub supports_condition: Option<bool>, - pub condition_description: Option<String>, -} - -#[derive(Debug, PartialEq, Clone, Deserialize, Serialize)] -#[serde(rename_all = "camelCase")] -pub struct DebuggerCapabilities { - pub supports_configuration_done_request: Option<bool>, - pub supports_function_breakpoints: Option<bool>, - pub supports_conditional_breakpoints: Option<bool>, - pub supports_hit_conditional_breakpoints: Option<bool>, - pub supports_evaluate_for_hovers: Option<bool>, - pub supports_step_back: Option<bool>, - pub supports_set_variable: Option<bool>, - pub supports_restart_frame: Option<bool>, - pub supports_goto_targets_request: Option<bool>, - pub supports_step_in_targets_request: Option<bool>, - pub supports_completions_request: Option<bool>, - pub supports_modules_request: Option<bool>, - pub supports_restart_request: Option<bool>, - pub supports_exception_options: Option<bool>, - pub supports_value_formatting_options: Option<bool>, - pub supports_exception_info_request: Option<bool>, - pub support_terminate_debuggee: Option<bool>, - pub support_suspend_debuggee: Option<bool>, - pub supports_delayed_stack_trace_loading: Option<bool>, - pub supports_loaded_sources_request: Option<bool>, - pub supports_log_points: Option<bool>, - pub supports_terminate_threads_request: Option<bool>, - pub supports_set_expression: Option<bool>, - pub supports_terminate_request: Option<bool>, - pub supports_data_breakpoints: Option<bool>, - pub supports_read_memory_request: Option<bool>, - pub supports_write_memory_request: Option<bool>, - pub supports_disassemble_request: Option<bool>, - pub supports_cancel_request: Option<bool>, - pub supports_breakpoint_locations_request: Option<bool>, - pub supports_clipboard_context: Option<bool>, - pub supports_stepping_granularity: Option<bool>, - pub supports_instruction_breakpoints: Option<bool>, - pub supports_exception_filter_options: Option<bool>, - pub exception_breakpoint_filters: Option<Vec<ExceptionBreakpointsFilter>>, - pub completion_trigger_characters: Option<Vec<String>>, - pub additional_module_columns: Option<Vec<ColumnDescriptor>>, - pub supported_checksum_algorithms: Option<Vec<String>>, -} - -impl std::ops::Deref for DebuggerCapabilities { - type Target = Option<bool>; - - fn deref(&self) -> &Self::Target { - &self.supports_exception_options - } -} - -#[derive(Debug, PartialEq, Clone, Deserialize, Serialize)] -#[serde(rename_all = "camelCase")] -struct InitializeArguments { - #[serde(rename = "clientID")] - client_id: Option<String>, - client_name: Option<String>, - #[serde(rename = "adapterID")] - adapter_id: String, - locale: Option<String>, - #[serde(rename = "linesStartAt1")] - lines_start_at_one: Option<bool>, - #[serde(rename = "columnsStartAt1")] - columns_start_at_one: Option<bool>, - path_format: Option<String>, - supports_variable_type: Option<bool>, - supports_variable_paging: Option<bool>, - supports_run_in_terminal_request: Option<bool>, - supports_memory_references: Option<bool>, - supports_progress_reporting: Option<bool>, - supports_invalidated_event: Option<bool>, -} - -#[derive(Debug, PartialEq, Clone, Deserialize, Serialize)] -#[serde(rename_all = "camelCase")] -pub struct Checksum { - pub algorithm: String, - pub checksum: String, -} - -#[derive(Debug, PartialEq, Clone, Deserialize, Serialize)] -#[serde(rename_all = "camelCase")] -pub struct Source { - pub name: Option<String>, - pub path: Option<String>, - pub source_reference: Option<usize>, - pub presentation_hint: Option<String>, - pub origin: Option<String>, - pub sources: Option<Vec<Source>>, - pub adapter_data: Option<Value>, - pub checksums: Option<Vec<Checksum>>, -} - -#[derive(Debug, PartialEq, Clone, Deserialize, Serialize)] -#[serde(rename_all = "camelCase")] -pub struct SourceBreakpoint { - pub line: usize, - pub column: Option<usize>, - pub condition: Option<String>, - pub hit_condition: Option<String>, - pub log_message: Option<String>, -} - -#[derive(Debug, PartialEq, Clone, Deserialize, Serialize)] -#[serde(rename_all = "camelCase")] -struct SetBreakpointsArguments { - source: Source, - breakpoints: Option<Vec<SourceBreakpoint>>, - // lines is deprecated - source_modified: Option<bool>, -} - -#[derive(Debug, PartialEq, Clone, Deserialize, Serialize)] -#[serde(rename_all = "camelCase")] -pub struct Breakpoint { - pub id: Option<usize>, - pub verified: bool, - pub message: Option<String>, - pub source: Option<Source>, - pub line: Option<usize>, - pub column: Option<usize>, - pub end_line: Option<usize>, - pub end_column: Option<usize>, - pub instruction_reference: Option<String>, - pub offset: Option<usize>, -} - -#[derive(Debug, PartialEq, Clone, Deserialize, Serialize)] -#[serde(rename_all = "camelCase")] -struct SetBreakpointsResponseBody { - breakpoints: Option<Vec<Breakpoint>>, -} - -#[derive(Debug, PartialEq, Clone, Deserialize, Serialize)] -#[serde(rename_all = "camelCase")] -struct ContinueArguments { - thread_id: usize, -} - -#[derive(Debug, PartialEq, Clone, Deserialize, Serialize)] -#[serde(rename_all = "camelCase")] -struct ContinueResponseBody { - all_threads_continued: Option<bool>, -} - -#[derive(Debug, PartialEq, Clone, Deserialize, Serialize)] -#[serde(rename_all = "camelCase")] -struct StackFrameFormat { - parameters: Option<bool>, - parameter_types: Option<bool>, - parameter_names: Option<bool>, - parameter_values: Option<bool>, - line: Option<bool>, - module: Option<bool>, - include_all: Option<bool>, -} - -#[derive(Debug, PartialEq, Clone, Deserialize, Serialize)] -#[serde(rename_all = "camelCase")] -struct StackTraceArguments { - thread_id: usize, - start_frame: Option<usize>, - levels: Option<usize>, - format: Option<StackFrameFormat>, -} - -#[derive(Debug, PartialEq, Clone, Deserialize, Serialize)] -#[serde(rename_all = "camelCase")] -pub struct StackFrame { - pub id: usize, - pub name: String, - pub source: Option<Source>, - pub line: usize, - pub column: usize, - pub end_line: Option<usize>, - pub end_column: Option<usize>, - pub can_restart: Option<bool>, - pub instruction_pointer_reference: Option<String>, - pub module_id: Option<Value>, - pub presentation_hint: Option<String>, -} - -#[derive(Debug, PartialEq, Clone, Deserialize, Serialize)] -#[serde(rename_all = "camelCase")] -struct StackTraceResponseBody { - total_frames: Option<usize>, - stack_frames: Vec<StackFrame>, -} - -#[derive(Debug, PartialEq, Clone, Deserialize, Serialize)] -#[serde(rename_all = "camelCase")] -pub struct Thread { - pub id: usize, - pub name: String, -} - -#[derive(Debug, PartialEq, Clone, Deserialize, Serialize)] -#[serde(rename_all = "camelCase")] -struct ThreadsResponseBody { - threads: Vec<Thread>, -} - -#[derive(Debug, PartialEq, Clone, Deserialize, Serialize)] -#[serde(rename_all = "camelCase")] -struct ScopesArguments { - frame_id: usize, -} - -#[derive(Debug, PartialEq, Clone, Deserialize, Serialize)] -#[serde(rename_all = "camelCase")] -pub struct Scope { - pub name: String, - pub presentation_hint: Option<String>, - pub variables_reference: usize, - pub named_variables: Option<usize>, - pub indexed_variables: Option<usize>, - pub expensive: bool, - pub source: Option<Source>, - pub line: Option<usize>, - pub column: Option<usize>, - pub end_line: Option<usize>, - pub end_column: Option<usize>, -} - -#[derive(Debug, PartialEq, Clone, Deserialize, Serialize)] -#[serde(rename_all = "camelCase")] -struct ScopesResponseBody { - scopes: Vec<Scope>, -} - -#[derive(Debug, PartialEq, Clone, Deserialize, Serialize)] -#[serde(rename_all = "camelCase")] -struct ValueFormat { - hex: Option<bool>, -} - -#[derive(Debug, PartialEq, Clone, Deserialize, Serialize)] -#[serde(rename_all = "camelCase")] -struct VariablesArguments { - variables_reference: usize, - filter: Option<String>, - start: Option<usize>, - count: Option<usize>, - format: Option<ValueFormat>, -} - -#[derive(Debug, PartialEq, Clone, Deserialize, Serialize)] -#[serde(rename_all = "camelCase")] -pub struct VariablePresentationHint { - pub kind: Option<String>, - pub attributes: Option<Vec<String>>, - pub visibility: Option<String>, -} - -#[derive(Debug, PartialEq, Clone, Deserialize, Serialize)] -#[serde(rename_all = "camelCase")] -pub struct Variable { - pub name: String, - pub value: String, - #[serde(rename = "type")] - pub data_type: Option<String>, - pub presentation_hint: Option<VariablePresentationHint>, - pub evaluate_name: Option<String>, - pub variables_reference: usize, - pub named_variables: Option<usize>, - pub indexed_variables: Option<usize>, - pub memory_reference: Option<String>, -} - -#[derive(Debug, PartialEq, Clone, Deserialize, Serialize)] -#[serde(rename_all = "camelCase")] -struct VariablesResponseBody { - variables: Vec<Variable>, -} - -#[derive(Debug, PartialEq, Clone, Deserialize, Serialize)] -#[serde(rename_all = "camelCase")] -pub struct OutputEventBody { - pub output: String, - pub category: Option<String>, - pub group: Option<String>, - pub line: Option<usize>, - pub column: Option<usize>, - pub variables_reference: Option<usize>, - pub source: Option<Source>, - pub data: Option<Value>, -} - -#[derive(Debug, PartialEq, Clone, Deserialize, Serialize)] -#[serde(rename_all = "camelCase")] -pub struct StoppedEventBody { - pub reason: String, - pub description: Option<String>, - pub thread_id: Option<usize>, - pub preserve_focus_hint: Option<bool>, - pub text: Option<String>, - pub all_threads_stopped: Option<bool>, - pub hit_breakpoint_ids: Option<Vec<usize>>, -} - #[derive(Debug)] pub struct Client { id: usize, diff --git a/helix-dap/src/lib.rs b/helix-dap/src/lib.rs index 87eea8e4..04d9ba8b 100644 --- a/helix-dap/src/lib.rs +++ b/helix-dap/src/lib.rs @@ -1,8 +1,10 @@ mod client; mod transport; +mod types; -pub use client::{Breakpoint, Client, OutputEventBody, SourceBreakpoint, StoppedEventBody}; +pub use client::Client; pub use transport::{Event, Payload, Request, Response, Transport}; +pub use types::*; use thiserror::Error; #[derive(Error, Debug)] diff --git a/helix-dap/src/types.rs b/helix-dap/src/types.rs new file mode 100644 index 00000000..6b2d4975 --- /dev/null +++ b/helix-dap/src/types.rs @@ -0,0 +1,324 @@ +use serde::{Deserialize, Serialize}; +use serde_json::Value; + +#[derive(Debug, PartialEq, Clone, Deserialize, Serialize)] +#[serde(rename_all = "camelCase")] +pub struct ColumnDescriptor { + pub attribute_name: String, + pub label: String, + pub format: Option<String>, + #[serde(rename = "type")] + pub col_type: Option<String>, + pub width: Option<usize>, +} + +#[derive(Debug, PartialEq, Clone, Deserialize, Serialize)] +#[serde(rename_all = "camelCase")] +pub struct ExceptionBreakpointsFilter { + pub filter: String, + pub label: String, + pub description: Option<String>, + pub default: Option<bool>, + pub supports_condition: Option<bool>, + pub condition_description: Option<String>, +} + +#[derive(Debug, PartialEq, Clone, Deserialize, Serialize)] +#[serde(rename_all = "camelCase")] +pub struct DebuggerCapabilities { + pub supports_configuration_done_request: Option<bool>, + pub supports_function_breakpoints: Option<bool>, + pub supports_conditional_breakpoints: Option<bool>, + pub supports_hit_conditional_breakpoints: Option<bool>, + pub supports_evaluate_for_hovers: Option<bool>, + pub supports_step_back: Option<bool>, + pub supports_set_variable: Option<bool>, + pub supports_restart_frame: Option<bool>, + pub supports_goto_targets_request: Option<bool>, + pub supports_step_in_targets_request: Option<bool>, + pub supports_completions_request: Option<bool>, + pub supports_modules_request: Option<bool>, + pub supports_restart_request: Option<bool>, + pub supports_exception_options: Option<bool>, + pub supports_value_formatting_options: Option<bool>, + pub supports_exception_info_request: Option<bool>, + pub support_terminate_debuggee: Option<bool>, + pub support_suspend_debuggee: Option<bool>, + pub supports_delayed_stack_trace_loading: Option<bool>, + pub supports_loaded_sources_request: Option<bool>, + pub supports_log_points: Option<bool>, + pub supports_terminate_threads_request: Option<bool>, + pub supports_set_expression: Option<bool>, + pub supports_terminate_request: Option<bool>, + pub supports_data_breakpoints: Option<bool>, + pub supports_read_memory_request: Option<bool>, + pub supports_write_memory_request: Option<bool>, + pub supports_disassemble_request: Option<bool>, + pub supports_cancel_request: Option<bool>, + pub supports_breakpoint_locations_request: Option<bool>, + pub supports_clipboard_context: Option<bool>, + pub supports_stepping_granularity: Option<bool>, + pub supports_instruction_breakpoints: Option<bool>, + pub supports_exception_filter_options: Option<bool>, + pub exception_breakpoint_filters: Option<Vec<ExceptionBreakpointsFilter>>, + pub completion_trigger_characters: Option<Vec<String>>, + pub additional_module_columns: Option<Vec<ColumnDescriptor>>, + pub supported_checksum_algorithms: Option<Vec<String>>, +} + +impl std::ops::Deref for DebuggerCapabilities { + type Target = Option<bool>; + + fn deref(&self) -> &Self::Target { + &self.supports_exception_options + } +} + +#[derive(Debug, PartialEq, Clone, Deserialize, Serialize)] +#[serde(rename_all = "camelCase")] +pub struct InitializeArguments { + #[serde(rename = "clientID")] + pub client_id: Option<String>, + pub client_name: Option<String>, + #[serde(rename = "adapterID")] + pub adapter_id: String, + pub locale: Option<String>, + #[serde(rename = "linesStartAt1")] + pub lines_start_at_one: Option<bool>, + #[serde(rename = "columnsStartAt1")] + pub columns_start_at_one: Option<bool>, + pub path_format: Option<String>, + pub supports_variable_type: Option<bool>, + pub supports_variable_paging: Option<bool>, + pub supports_run_in_terminal_request: Option<bool>, + pub supports_memory_references: Option<bool>, + pub supports_progress_reporting: Option<bool>, + pub supports_invalidated_event: Option<bool>, +} + +#[derive(Debug, PartialEq, Clone, Deserialize, Serialize)] +#[serde(rename_all = "camelCase")] +pub struct Checksum { + pub algorithm: String, + pub checksum: String, +} + +#[derive(Debug, PartialEq, Clone, Deserialize, Serialize)] +#[serde(rename_all = "camelCase")] +pub struct Source { + pub name: Option<String>, + pub path: Option<String>, + pub source_reference: Option<usize>, + pub presentation_hint: Option<String>, + pub origin: Option<String>, + pub sources: Option<Vec<Source>>, + pub adapter_data: Option<Value>, + pub checksums: Option<Vec<Checksum>>, +} + +#[derive(Debug, PartialEq, Clone, Deserialize, Serialize)] +#[serde(rename_all = "camelCase")] +pub struct SourceBreakpoint { + pub line: usize, + pub column: Option<usize>, + pub condition: Option<String>, + pub hit_condition: Option<String>, + pub log_message: Option<String>, +} + +#[derive(Debug, PartialEq, Clone, Deserialize, Serialize)] +#[serde(rename_all = "camelCase")] +pub struct SetBreakpointsArguments { + pub source: Source, + pub breakpoints: Option<Vec<SourceBreakpoint>>, + // lines is deprecated + pub source_modified: Option<bool>, +} + +#[derive(Debug, PartialEq, Clone, Deserialize, Serialize)] +#[serde(rename_all = "camelCase")] +pub struct Breakpoint { + pub id: Option<usize>, + pub verified: bool, + pub message: Option<String>, + pub source: Option<Source>, + pub line: Option<usize>, + pub column: Option<usize>, + pub end_line: Option<usize>, + pub end_column: Option<usize>, + pub instruction_reference: Option<String>, + pub offset: Option<usize>, +} + +#[derive(Debug, PartialEq, Clone, Deserialize, Serialize)] +#[serde(rename_all = "camelCase")] +pub struct SetBreakpointsResponseBody { + pub breakpoints: Option<Vec<Breakpoint>>, +} + +#[derive(Debug, PartialEq, Clone, Deserialize, Serialize)] +#[serde(rename_all = "camelCase")] +pub struct ContinueArguments { + pub thread_id: usize, +} + +#[derive(Debug, PartialEq, Clone, Deserialize, Serialize)] +#[serde(rename_all = "camelCase")] +pub struct ContinueResponseBody { + pub all_threads_continued: Option<bool>, +} + +#[derive(Debug, PartialEq, Clone, Deserialize, Serialize)] +#[serde(rename_all = "camelCase")] +pub struct StackFrameFormat { + pub parameters: Option<bool>, + pub parameter_types: Option<bool>, + pub parameter_names: Option<bool>, + pub parameter_values: Option<bool>, + pub line: Option<bool>, + pub module: Option<bool>, + pub include_all: Option<bool>, +} + +#[derive(Debug, PartialEq, Clone, Deserialize, Serialize)] +#[serde(rename_all = "camelCase")] +pub struct StackTraceArguments { + pub thread_id: usize, + pub start_frame: Option<usize>, + pub levels: Option<usize>, + pub format: Option<StackFrameFormat>, +} + +#[derive(Debug, PartialEq, Clone, Deserialize, Serialize)] +#[serde(rename_all = "camelCase")] +pub struct StackFrame { + pub id: usize, + pub name: String, + pub source: Option<Source>, + pub line: usize, + pub column: usize, + pub end_line: Option<usize>, + pub end_column: Option<usize>, + pub can_restart: Option<bool>, + pub instruction_pointer_reference: Option<String>, + pub module_id: Option<Value>, + pub presentation_hint: Option<String>, +} + +#[derive(Debug, PartialEq, Clone, Deserialize, Serialize)] +#[serde(rename_all = "camelCase")] +pub struct StackTraceResponseBody { + pub total_frames: Option<usize>, + pub stack_frames: Vec<StackFrame>, +} + +#[derive(Debug, PartialEq, Clone, Deserialize, Serialize)] +#[serde(rename_all = "camelCase")] +pub struct Thread { + pub id: usize, + pub name: String, +} + +#[derive(Debug, PartialEq, Clone, Deserialize, Serialize)] +#[serde(rename_all = "camelCase")] +pub struct ThreadsResponseBody { + pub threads: Vec<Thread>, +} + +#[derive(Debug, PartialEq, Clone, Deserialize, Serialize)] +#[serde(rename_all = "camelCase")] +pub struct ScopesArguments { + pub frame_id: usize, +} + +#[derive(Debug, PartialEq, Clone, Deserialize, Serialize)] +#[serde(rename_all = "camelCase")] +pub struct Scope { + pub name: String, + pub presentation_hint: Option<String>, + pub variables_reference: usize, + pub named_variables: Option<usize>, + pub indexed_variables: Option<usize>, + pub expensive: bool, + pub source: Option<Source>, + pub line: Option<usize>, + pub column: Option<usize>, + pub end_line: Option<usize>, + pub end_column: Option<usize>, +} + +#[derive(Debug, PartialEq, Clone, Deserialize, Serialize)] +#[serde(rename_all = "camelCase")] +pub struct ScopesResponseBody { + pub scopes: Vec<Scope>, +} + +#[derive(Debug, PartialEq, Clone, Deserialize, Serialize)] +#[serde(rename_all = "camelCase")] +pub struct ValueFormat { + pub hex: Option<bool>, +} + +#[derive(Debug, PartialEq, Clone, Deserialize, Serialize)] +#[serde(rename_all = "camelCase")] +pub struct VariablesArguments { + pub variables_reference: usize, + pub filter: Option<String>, + pub start: Option<usize>, + pub count: Option<usize>, + pub format: Option<ValueFormat>, +} + +#[derive(Debug, PartialEq, Clone, Deserialize, Serialize)] +#[serde(rename_all = "camelCase")] +pub struct VariablePresentationHint { + pub kind: Option<String>, + pub attributes: Option<Vec<String>>, + pub visibility: Option<String>, +} + +#[derive(Debug, PartialEq, Clone, Deserialize, Serialize)] +#[serde(rename_all = "camelCase")] +pub struct Variable { + pub name: String, + pub value: String, + #[serde(rename = "type")] + pub data_type: Option<String>, + pub presentation_hint: Option<VariablePresentationHint>, + pub evaluate_name: Option<String>, + pub variables_reference: usize, + pub named_variables: Option<usize>, + pub indexed_variables: Option<usize>, + pub memory_reference: Option<String>, +} + +#[derive(Debug, PartialEq, Clone, Deserialize, Serialize)] +#[serde(rename_all = "camelCase")] +pub struct VariablesResponseBody { + pub variables: Vec<Variable>, +} + +#[derive(Debug, PartialEq, Clone, Deserialize, Serialize)] +#[serde(rename_all = "camelCase")] +pub struct OutputEventBody { + pub output: String, + pub category: Option<String>, + pub group: Option<String>, + pub line: Option<usize>, + pub column: Option<usize>, + pub variables_reference: Option<usize>, + pub source: Option<Source>, + pub data: Option<Value>, +} + +#[derive(Debug, PartialEq, Clone, Deserialize, Serialize)] +#[serde(rename_all = "camelCase")] +pub struct StoppedEventBody { + pub reason: String, + pub description: Option<String>, + pub thread_id: Option<usize>, + pub preserve_focus_hint: Option<bool>, + pub text: Option<String>, + pub all_threads_stopped: Option<bool>, + pub hit_breakpoint_ids: Option<Vec<usize>>, +} |