ZIm/crates/vim_mode_setting/src/vim_mode_setting.rs
Marshall Bowers b102a40e04
Extract VimModeSetting to its own crate (#21019)
This PR extracts the `VimModeSetting` out of the `vim` crate and into
its own `vim_mode_setting` crate.

A number of crates were depending on the entirety of the `vim` crate
just to reference `VimModeSetting`, which was not ideal.

Release Notes:

- N/A
2024-11-21 16:24:38 -05:00

36 lines
1,013 B
Rust

//! Contains the [`VimModeSetting`] used to enable/disable Vim mode.
//!
//! This is in its own crate as we want other crates to be able to enable or
//! disable Vim mode without having to depend on the `vim` crate in its
//! entirety.
use anyhow::Result;
use gpui::AppContext;
use settings::{Settings, SettingsSources};
/// Initializes the `vim_mode_setting` crate.
pub fn init(cx: &mut AppContext) {
VimModeSetting::register(cx);
}
/// Whether or not to enable Vim mode.
///
/// Default: false
pub struct VimModeSetting(pub bool);
impl Settings for VimModeSetting {
const KEY: Option<&'static str> = Some("vim_mode");
type FileContent = Option<bool>;
fn load(sources: SettingsSources<Self::FileContent>, _: &mut AppContext) -> Result<Self> {
Ok(Self(
sources
.user
.or(sources.server)
.copied()
.flatten()
.unwrap_or(sources.default.ok_or_else(Self::missing_default)?),
))
}
}