This is an initial implementation that isn't used for any settings yet, but will be used once `Vec<String>` is implemented. I also updated the window.with_state api to grant access to a `Context<S>` app reference instead of just an App. ## Example <img width="603" height="83" alt="Screenshot 2025-09-09 at 2 15 56 PM" src="https://github.com/user-attachments/assets/7b3fc350-a157-431f-a4bc-80a1806a3147" /> Release Notes: - N/A
78 lines
2.4 KiB
Rust
78 lines
2.4 KiB
Rust
use dap_types::SteppingGranularity;
|
|
use gpui::{App, Global};
|
|
use schemars::JsonSchema;
|
|
use serde::{Deserialize, Serialize};
|
|
use settings::{Settings, SettingsKey, SettingsSources, SettingsUi};
|
|
|
|
#[derive(Copy, Clone, Debug, Serialize, Deserialize, JsonSchema, PartialEq, Eq, SettingsUi)]
|
|
#[serde(rename_all = "snake_case")]
|
|
pub enum DebugPanelDockPosition {
|
|
Left,
|
|
Bottom,
|
|
Right,
|
|
}
|
|
|
|
#[derive(Serialize, Deserialize, JsonSchema, Clone, SettingsUi, SettingsKey)]
|
|
#[serde(default)]
|
|
// todo(settings_ui) @ben: I'm pretty sure not having the fields be optional here is a bug,
|
|
// it means the defaults will override previously set values if a single key is missing
|
|
#[settings_ui(group = "Debugger")]
|
|
#[settings_key(key = "debugger")]
|
|
pub struct DebuggerSettings {
|
|
/// Determines the stepping granularity.
|
|
///
|
|
/// Default: line
|
|
#[settings_ui(skip)]
|
|
pub stepping_granularity: SteppingGranularity,
|
|
/// Whether the breakpoints should be reused across Zed sessions.
|
|
///
|
|
/// Default: true
|
|
pub save_breakpoints: bool,
|
|
/// Whether to show the debug button in the status bar.
|
|
///
|
|
/// Default: true
|
|
pub button: bool,
|
|
/// Time in milliseconds until timeout error when connecting to a TCP debug adapter
|
|
///
|
|
/// Default: 2000ms
|
|
pub timeout: u64,
|
|
/// Whether to log messages between active debug adapters and Zed
|
|
///
|
|
/// Default: true
|
|
pub log_dap_communications: bool,
|
|
/// Whether to format dap messages in when adding them to debug adapter logger
|
|
///
|
|
/// Default: true
|
|
pub format_dap_log_messages: bool,
|
|
/// The dock position of the debug panel
|
|
///
|
|
/// Default: Bottom
|
|
pub dock: DebugPanelDockPosition,
|
|
}
|
|
|
|
impl Default for DebuggerSettings {
|
|
fn default() -> Self {
|
|
Self {
|
|
button: true,
|
|
save_breakpoints: true,
|
|
stepping_granularity: SteppingGranularity::Line,
|
|
timeout: 2000,
|
|
log_dap_communications: true,
|
|
format_dap_log_messages: true,
|
|
dock: DebugPanelDockPosition::Bottom,
|
|
}
|
|
}
|
|
}
|
|
|
|
impl Settings for DebuggerSettings {
|
|
type FileContent = Self;
|
|
|
|
fn load(sources: SettingsSources<Self::FileContent>, _: &mut App) -> anyhow::Result<Self> {
|
|
sources.json_merge()
|
|
}
|
|
|
|
fn import_from_vscode(_vscode: &settings::VsCodeSettings, _current: &mut Self::FileContent) {}
|
|
}
|
|
|
|
impl Global for DebuggerSettings {}
|