This PR separates out the associated constant `KEY` from the `Settings` trait into a new trait `SettingsKey`. This allows for the key trait to be derived using attributes to specify the path so that the new `SettingsUi` derive macro can use the same attributes to determine top level settings paths thereby removing the need to duplicate the path in both `Settings::KEY` and `#[settings_ui(path = "...")]` Co-authored-by: Ben Kunkle <ben@zed.dev> Release Notes: - N/A --------- Co-authored-by: Ben Kunkle <ben@zed.dev>
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, Copy, 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 {}
|