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
This commit is contained in:
Marshall Bowers 2024-11-21 16:24:38 -05:00 committed by GitHub
parent 790fdcf737
commit b102a40e04
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
13 changed files with 85 additions and 39 deletions

View file

@ -0,0 +1,17 @@
[package]
name = "vim_mode_setting"
version = "0.1.0"
edition = "2021"
publish = false
license = "GPL-3.0-or-later"
[lints]
workspace = true
[lib]
path = "src/vim_mode_setting.rs"
[dependencies]
anyhow.workspace = true
gpui.workspace = true
settings.workspace = true

View file

@ -0,0 +1 @@
../../LICENSE-GPL

View file

@ -0,0 +1,36 @@
//! 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)?),
))
}
}