diff options
author | Tim Oram <dev@mitmaro.ca> | 2021-06-20 13:45:51 -0230 |
---|---|---|
committer | Tim Oram <dev@mitmaro.ca> | 2021-07-05 16:27:53 -0230 |
commit | 18712c928fd5a697fbd74d80dd886ed6155d2d99 (patch) | |
tree | 26f00a4f0a0105ca4d18256afafa2f78533156ed | |
parent | 21747bb23ef5f9b309eb79df728f55e00245c675 (diff) |
Move config module to a crate
-rw-r--r-- | Cargo.lock | 13 | ||||
-rw-r--r-- | Cargo.toml | 6 | ||||
-rwxr-xr-x | scripts/coverage.bash | 2 | ||||
-rwxr-xr-x | scripts/test.bash | 2 | ||||
-rw-r--r-- | src/config/Cargo.toml | 30 | ||||
-rw-r--r-- | src/config/src/color.rs (renamed from src/config/color.rs) | 1 | ||||
-rw-r--r-- | src/config/src/diff_ignore_whitespace_setting.rs (renamed from src/config/diff_ignore_whitespace_setting.rs) | 1 | ||||
-rw-r--r-- | src/config/src/diff_show_whitespace_setting.rs (renamed from src/config/diff_show_whitespace_setting.rs) | 1 | ||||
-rw-r--r-- | src/config/src/git_config.rs (renamed from src/config/git_config.rs) | 16 | ||||
-rw-r--r-- | src/config/src/key_bindings.rs (renamed from src/config/key_bindings.rs) | 68 | ||||
-rw-r--r-- | src/config/src/lib.rs (renamed from src/config/mod.rs) | 51 | ||||
-rw-r--r-- | src/config/src/tests.rs (renamed from src/config/tests.rs) | 1 | ||||
-rw-r--r-- | src/config/src/testutil.rs (renamed from src/config/testutil.rs) | 2 | ||||
-rw-r--r-- | src/config/src/theme.rs (renamed from src/config/theme.rs) | 42 | ||||
-rw-r--r-- | src/config/src/utils.rs (renamed from src/config/utils.rs) | 0 | ||||
-rw-r--r-- | src/core/main.rs | 3 | ||||
-rw-r--r-- | src/display/mod.rs | 4 | ||||
-rw-r--r-- | src/display/utils.rs | 3 | ||||
-rw-r--r-- | src/input/key_bindings.rs | 4 | ||||
-rw-r--r-- | src/list/mod.rs | 3 | ||||
-rw-r--r-- | src/list/utils.rs | 3 | ||||
-rw-r--r-- | src/main.rs | 1 | ||||
-rw-r--r-- | src/process/testutil/process_module_test.rs | 2 | ||||
-rw-r--r-- | src/show_commit/mod.rs | 2 | ||||
-rw-r--r-- | src/show_commit/util.rs | 2 | ||||
-rw-r--r-- | src/view/tests.rs | 7 |
26 files changed, 175 insertions, 95 deletions
@@ -120,6 +120,18 @@ dependencies = [ ] [[package]] +name = "girt-config" +version = "1.0.0" +dependencies = [ + "anyhow", + "concat-idents", + "git2", + "rstest", + "serial_test", + "tempfile", +] + +[[package]] name = "git-interactive-rebase-tool" version = "2.1.0" dependencies = [ @@ -127,6 +139,7 @@ dependencies = [ "chrono", "concat-idents", "crossterm", + "girt-config", "git2", "lazy_static", "num-format", @@ -23,6 +23,11 @@ edition = "2018" name = "interactive-rebase-tool" path = "src/main.rs" +[workspace] +members = [ + "src/config", +] + [dependencies] anyhow = "1.0" chrono = "0.4" @@ -33,6 +38,7 @@ pico-args = "0.4.2" unicode-segmentation = "1.7.1" unicode-width = "0.1.8" xi-unicode = "0.3.0" +girt-config = {version = "1.0.0", path = "src/config"} [dependencies.uuid] version = "0.8.1" diff --git a/scripts/coverage.bash b/scripts/coverage.bash index 7a797d9..83d1732 100755 --- a/scripts/coverage.bash +++ b/scripts/coverage.bash @@ -6,4 +6,4 @@ set -o pipefail rustup update nightly cargo +nightly install --version 0.16.0 cargo-tarpaulin -cargo +nightly tarpaulin --exclude-files=src/display/crossterm.rs --all-features --ignore-tests --line --verbose --out Html --out Lcov --output-dir coverage "$@" +cargo +nightly tarpaulin --exclude-files=src/display/crossterm.rs --workspace --all-features --ignore-tests --line --verbose --out Html --out Lcov --output-dir coverage "$@" diff --git a/scripts/test.bash b/scripts/test.bash index 55c058d..929d0bd 100755 --- a/scripts/test.bash +++ b/scripts/test.bash @@ -5,4 +5,4 @@ set -u set -o pipefail rustup update stable -cargo test +cargo test --workspace diff --git a/src/config/Cargo.toml b/src/config/Cargo.toml new file mode 100644 index 0000000..c14ec36 --- /dev/null +++ b/src/config/Cargo.toml @@ -0,0 +1,30 @@ +[package] +name = "girt-config" +version = "1.0.0" +authors = ["Tim Oram <dev@mitmaro.ca>"] +license = "GPL-3.0-or-later" +description = "Configuration for git-interactive-rebase-tool" +homepage = "https://gitrebasetool.mitmaro.ca/" +repository = "https://github.com/MitMaro/git-interactive-rebase-tool" +edition = "2018" +keywords = [ "git", "config" ] +categories = ["config"] +readme = "../../README.md" + + +[lib] +name = "config" + +[dependencies] +anyhow = "1.0" + +[dependencies.git2] +version = "0.13.20" +default-features = false +features = [] + +[dev-dependencies] +concat-idents = "1.1.2" +rstest = "0.6.4" +serial_test = "0.5.1" +tempfile = "3.2.0" diff --git a/src/config/color.rs b/src/config/src/color.rs index ad99f67..ef0afa7 100644 --- a/src/config/color.rs +++ b/src/config/src/color.rs @@ -3,6 +3,7 @@ use std::convert::TryFrom; use anyhow::{anyhow, Error}; #[derive(Clone, Copy, Debug, PartialEq)] +#[allow(clippy::exhaustive_enums)] pub enum Color { Default, LightWhite, diff --git a/src/config/diff_ignore_whitespace_setting.rs b/src/config/src/diff_ignore_whitespace_setting.rs index c8b3cd5..a3c548c 100644 --- a/src/config/diff_ignore_whitespace_setting.rs +++ b/src/config/src/diff_ignore_whitespace_setting.rs @@ -1,4 +1,5 @@ #[derive(Clone, PartialEq, Debug)] +#[non_exhaustive] pub enum DiffIgnoreWhitespaceSetting { None, All, diff --git a/src/config/diff_show_whitespace_setting.rs b/src/config/src/diff_show_whitespace_setting.rs index f7fa12e..c2da3b6 100644 --- a/src/config/diff_show_whitespace_setting.rs +++ b/src/config/src/diff_show_whitespace_setting.rs @@ -1,4 +1,5 @@ #[derive(Clone, PartialEq, Debug)] +#[non_exhaustive] pub enum DiffShowWhitespaceSetting { None, Trailing, diff --git a/src/config/git_config.rs b/src/config/src/git_config.rs index c496759..0f37ce1 100644 --- a/src/config/git_config.rs +++ b/src/config/src/git_config.rs @@ -1,17 +1,17 @@ use anyhow::{anyhow, Result}; use git2::Config; -use crate::config::utils::{editor_from_env, get_string, get_unsigned_integer}; +use super::utils::{editor_from_env, get_string, get_unsigned_integer}; #[derive(Clone, Debug)] pub struct GitConfig { - pub(crate) comment_char: String, - pub(crate) diff_context: u32, - pub(crate) diff_interhunk_lines: u32, - pub(crate) diff_rename_limit: u32, - pub(crate) diff_renames: bool, - pub(crate) diff_copies: bool, - pub(crate) editor: String, + pub comment_char: String, + pub diff_context: u32, + pub diff_interhunk_lines: u32, + pub diff_rename_limit: u32, + pub diff_renames: bool, + pub diff_copies: bool, + pub editor: String, } impl GitConfig { diff --git a/src/config/key_bindings.rs b/src/config/src/key_bindings.rs index e30680b..65b112f 100644 --- a/src/config/key_bindings.rs +++ b/src/config/src/key_bindings.rs @@ -1,43 +1,43 @@ use anyhow::Result; use git2::Config; -use crate::config::utils::get_input; +use super::utils::get_input; #[derive(Clone, Debug)] pub struct KeyBindings { - pub(crate) abort: Vec<String>, - pub(crate) action_break: Vec<String>, - pub(crate) action_drop: Vec<String>, - pub(crate) action_edit: Vec<String>, - pub(crate) action_fixup: Vec<String>, - pub(crate) action_pick: Vec<String>, - pub(crate) action_reword: Vec<String>, - pub(crate) action_squash: Vec<String>, - pub(crate) confirm_no: Vec<String>, - pub(crate) confirm_yes: Vec<String>, - pub(crate) edit: Vec<String>, - pub(crate) force_abort: Vec<String>, - pub(crate) force_rebase: Vec<String>, - pub(crate) help: Vec<String>, - pub(crate) insert_line: Vec<String>, - pub(crate) move_down: Vec<String>, - pub(crate) move_down_step: Vec<String>, - pub(crate) move_end: Vec<String>, - pub(crate) move_home: Vec<String>, - pub(crate) move_left: Vec<String>, - pub(crate) move_right: Vec<String>, - pub(crate) move_selection_down: Vec<String>, - pub(crate) move_selection_up: Vec<String>, - pub(crate) move_up: Vec<String>, - pub(crate) move_up_step: Vec<String>, - pub(crate) open_in_external_editor: Vec<String>, - pub(crate) rebase: Vec<String>, - pub(crate) redo: Vec<String>, - pub(crate) remove_line: Vec<String>, - pub(crate) show_commit: Vec<String>, - pub(crate) show_diff: Vec<String>, - pub(crate) toggle_visual_mode: Vec<String>, - pub(crate) undo: Vec<String>, + pub abort: Vec<String>, + pub action_break: Vec<String>, + pub action_drop: Vec<String>, + pub action_edit: Vec<String>, + pub action_fixup: Vec<String>, + pub action_pick: Vec<String>, + pub action_reword: Vec<String>, + pub action_squash: Vec<String>, + pub confirm_no: Vec<String>, + pub confirm_yes: Vec<String>, + pub edit: Vec<String>, + pub force_abort: Vec<String>, + pub force_rebase: Vec<String>, + pub help: Vec<String>, + pub insert_line: Vec<String>, + pub move_down: Vec<String>, + pub move_down_step: Vec<String>, + pub move_end: Vec<String>, + pub move_home: Vec<String>, + pub move_left: Vec<String>, + pub move_right: Vec<String>, + pub move_selection_down: Vec<String>, + pub move_selection_up: Vec<String>, + pub move_up: Vec<String>, + pub move_up_step: Vec<String>, + pub open_in_external_editor: Vec<String>, + pub rebase: Vec<String>, + pub redo: Vec<String>, + pub remove_line: Vec<String>, + pub show_commit: Vec<String>, + pub show_diff: Vec<String>, + pub toggle_visual_mode: Vec<String>, + pub undo: Vec<String>, } impl KeyBindings { diff --git a/src/config/mod.rs b/src/config/src/lib.rs index 6858c58..d59575a 100644 --- a/src/config/mod.rs +++ b/src/config/src/lib.rs @@ -1,15 +1,38 @@ +// Make rustc's built-in lints more strict and set clippy into a whitelist-based configuration +#![deny( + warnings, + nonstandard_style, + unused, + future_incompatible, + rust_2018_idioms, + unsafe_code +)] +#![deny(clippy::all, clippy::cargo, clippy::nursery, clippy::pedantic, clippy::restriction)] +#![allow(clippy::blanket_clippy_restriction_lints)] +#![allow(clippy::as_conversions)] +#![allow(clippy::cast_possible_truncation)] +#![allow(clippy::cast_sign_loss)] +#![allow(clippy::exhaustive_structs)] +#![allow(clippy::implicit_return)] +#![allow(clippy::indexing_slicing)] +#![allow(clippy::integer_arithmetic)] +#![allow(clippy::missing_docs_in_private_items)] +#![allow(clippy::missing_errors_doc)] +#![allow(clippy::missing_inline_in_public_items)] +#![allow(clippy::non_ascii_literal)] +#![allow(clippy::wildcard_enum_match_arm)] + mod color; mod diff_ignore_whitespace_setting; mod diff_show_whitespace_setting; mod git_config; mod key_bindings; +pub mod testutil; mod theme; mod utils; #[cfg(test)] mod tests; -#[cfg(test)] -pub mod testutil; use anyhow::Result; @@ -20,7 +43,7 @@ pub use self::{ key_bindings::KeyBindings, theme::Theme, }; -use crate::config::{ +use self::{ git_config::GitConfig, utils::{ get_bool, @@ -34,20 +57,20 @@ use crate::config::{ #[derive(Clone, Debug)] pub struct Config { - pub(crate) auto_select_next: bool, - pub(crate) diff_ignore_whitespace: DiffIgnoreWhitespaceSetting, - pub(crate) diff_show_whitespace: DiffShowWhitespaceSetting, - pub(crate) diff_space_symbol: String, - pub(crate) diff_tab_symbol: String, - pub(crate) diff_tab_width: u32, - pub(crate) undo_limit: u32, - pub(crate) git: GitConfig, - pub(crate) key_bindings: KeyBindings, - pub(crate) theme: Theme, + pub auto_select_next: bool, + pub diff_ignore_whitespace: DiffIgnoreWhitespaceSetting, + pub diff_show_whitespace: DiffShowWhitespaceSetting, + pub diff_space_symbol: String, + pub diff_tab_symbol: String, + pub diff_tab_width: u32, + pub undo_limit: u32, + pub git: GitConfig, + pub key_bindings: KeyBindings, + pub theme: Theme, } impl Config { - pub(crate) fn new() -> Result<Self> { + pub fn new() -> Result<Self> { let config = open_git_config().map_err(|e| e.context("Error loading git config"))?; Self::new_from_config(&config).map_err(|e| e.context("Error reading git config")) } diff --git a/src/config/tests.rs b/src/config/src/tests.rs index 1022bfd..b39b3d1 100644 --- a/src/config/tests.rs +++ b/src/config/src/tests.rs @@ -33,6 +33,7 @@ fn config_new() { set_var( "GIT_DIR", Path::new(env!("CARGO_MANIFEST_DIR")) + .join("../..") .join("test") .join("fixtures") .join("simple") diff --git a/src/config/testutil.rs b/src/config/src/testutil.rs index a7698bc..4cdf9cf 100644 --- a/src/config/testutil.rs +++ b/src/config/src/testutil.rs @@ -8,6 +8,7 @@ use super::{ KeyBindings, }; +#[must_use] pub fn create_config() -> Config { Config { auto_select_next: false, @@ -65,6 +66,7 @@ pub fn create_config() -> Config { } } +#[must_use] pub fn create_theme() -> Theme { Theme { character_vertical_spacing: String::from("~"), diff --git a/src/config/theme.rs b/src/config/src/theme.rs index ae30c36..661574d 100644 --- a/src/config/theme.rs +++ b/src/config/src/theme.rs @@ -8,27 +8,27 @@ use super::{ #[derive(Clone, Debug)] pub struct Theme { - pub(crate) character_vertical_spacing: String, - pub(crate) color_action_break: Color, - pub(crate) color_action_drop: Color, - pub(crate) color_action_edit: Color, - pub(crate) color_action_exec: Color, - pub(crate) color_action_fixup: Color, - pub(crate) color_action_pick: Color, - pub(crate) color_action_reword: Color, - pub(crate) color_action_squash: Color, - pub(crate) color_action_label: Color, - pub(crate) color_action_reset: Color, - pub(crate) color_action_merge: Color, - pub(crate) color_background: Color, - pub(crate) color_diff_add: Color, - pub(crate) color_diff_change: Color, - pub(crate) color_diff_context: Color, - pub(crate) color_diff_remove: Color, - pub(crate) color_diff_whitespace: Color, - pub(crate) color_foreground: Color, - pub(crate) color_indicator: Color, - pub(crate) color_selected_background: Color, + pub character_vertical_spacing: String, + pub color_action_break: Color, + pub color_action_drop: Color, + pub color_action_edit: Color, + pub color_action_exec: Color, + pub color_action_fixup: Color, + pub color_action_pick: Color, + pub color_action_reword: Color, + pub color_action_squash: Color, + pub color_action_label: Color, + pub color_action_reset: Color, + pub color_action_merge: Color, + pub color_background: Color, + pub color_diff_add: Color, + pub color_diff_change: Color, + pub color_diff_context: Color, + pub color_diff_remove: Color, + pub color_diff_whitespace: Color, + pub color_foreground: Color, + pub color_indicator: Color, + pub color_selected_background: Color, } impl Theme { diff --git a/src/config/utils.rs b/src/config/src/utils.rs index 7a474dc..7a474dc 100644 --- a/src/config/utils.rs +++ b/src/config/src/utils.rs diff --git a/src/core/main.rs b/src/core/main.rs index 649a218..c9632af 100644 --- a/src/core/main.rs +++ b/src/core/main.rs @@ -1,5 +1,6 @@ +use config::Config; + use crate::{ - config::Config, confirm_abort::ConfirmAbort, confirm_rebase::ConfirmRebase, core::{arguments::Args, exit::Exit, help::build_help}, diff --git a/src/display/mod.rs b/src/display/mod.rs index dab43ae..ff46915 100644 --- a/src/display/mod.rs +++ b/src/display/mod.rs @@ -11,6 +11,7 @@ mod mockcrossterm; pub mod testutil; use anyhow::Result; +use config::Theme; #[cfg(test)] pub use testutil::CrossTerm; @@ -18,7 +19,6 @@ pub use testutil::CrossTerm; pub use self::crossterm::CrossTerm; use self::{crossterm::Color as CrosstermColor, utils::register_selectable_color_pairs}; pub use self::{crossterm::Colors, display_color::DisplayColor, size::Size, tui::Tui}; -use crate::config::Theme; pub struct Display<T: Tui> { action_break: (Colors, Colors), @@ -288,10 +288,10 @@ impl<T: Tui> Display<T> { #[cfg(test)] mod tests { + use config::testutil::create_theme; use rstest::rstest; use super::{mockcrossterm::State, testutil::CrossTerm, *}; - use crate::config::testutil::create_theme; #[test] fn draw_str() { diff --git a/src/display/utils.rs b/src/display/utils.rs index b8fbe70..f4707e0 100644 --- a/src/display/utils.rs +++ b/src/display/utils.rs @@ -1,7 +1,8 @@ use std::env::var; +use config::Color; + use super::{color_mode::ColorMode, Colors, CrosstermColor}; -use crate::config::Color; pub(super) fn detect_color_mode(number_of_colors: u16) -> ColorMode { // respect COLORTERM being truecolor or 24bit diff --git a/src/input/key_bindings.rs b/src/input/key_bindings.rs index f7c626e..76f14af 100644 --- a/src/input/key_bindings.rs +++ b/src/input/key_bindings.rs @@ -87,7 +87,7 @@ fn map_keybindings(bindings: &[String]) -> Vec<Event> { } impl KeyBindings { - pub fn new(key_bindings: &crate::config::KeyBindings) -> Self { + pub fn new(key_bindings: &config::KeyBindings) -> Self { Self { abort: map_keybindings(&key_bindings.abort), action_break: map_keybindings(&key_bindings.action_break), @@ -127,10 +127,10 @@ impl KeyBindings { #[cfg(test)] mod tests { + use config::testutil::create_config; use rstest::rstest; use super::*; - use crate::config::testutil::create_config; #[test] fn new() { diff --git a/src/list/mod.rs b/src/list/mod.rs index 3b666bb..ca3269b 100644 --- a/src/list/mod.rs +++ b/src/list/mod.rs @@ -6,9 +6,10 @@ mod tests; use std::cmp::min; +use config::Config; + use crate::{ components::{edit::Edit, help::Help}, - config::Config, display::DisplayColor, input::{Event, EventHandler, MetaEvent}, list::{ diff --git a/src/list/utils.rs b/src/list/utils.rs index 5c0293d..078d1d1 100644 --- a/src/list/utils.rs +++ b/src/list/utils.rs @@ -1,7 +1,8 @@ use std::cmp; +use config::KeyBindings; + use crate::{ - config::KeyBindings, display::DisplayColor, todo_file::{Action, Line}, view::LineSegment, diff --git a/src/main.rs b/src/main.rs index c204604..03aea14 100644 --- a/src/main.rs +++ b/src/main.rs @@ -35,7 +35,6 @@ #![allow(clippy::default_numeric_fallback)] mod components; -mod config; mod confirm_abort; mod confirm_rebase; mod core; diff --git a/src/process/testutil/process_module_test.rs b/src/process/testutil/process_module_test.rs index e97f1c8..5316114 100644 --- a/src/process/testutil/process_module_test.rs +++ b/src/process/testutil/process_module_test.rs @@ -1,9 +1,9 @@ use std::{cell::Cell, path::Path}; +use config::{testutil::create_config, Config}; use tempfile::{Builder, NamedTempFile}; use crate::{ - config::{testutil::create_config, Config}, input::{ testutil::{with_event_handler, TestContext as EventHandlerTestContext}, Event, diff --git a/src/show_commit/mod.rs b/src/show_commit/mod.rs index ecbe7a4..4bb31fa 100644 --- a/src/show_commit/mod.rs +++ b/src/show_commit/mod.rs @@ -14,11 +14,11 @@ mod view_builder; mod tests; use anyhow::anyhow; +use config::{Config, DiffIgnoreWhitespaceSetting, DiffShowWhitespaceSetting}; use lazy_static::lazy_static; use crate::{ components::help::Help, - config::{Config, DiffIgnoreWhitespaceSetting, DiffShowWhitespaceSetting}, input::{Event, EventHandler, InputOptions, MetaEvent}, module::{Module, ProcessResult, State}, show_commit::{ diff --git a/src/show_commit/util.rs b/src/show_commit/util.rs index 1447be0..748278d 100644 --- a/src/show_commit/util.rs +++ b/src/show_commit/util.rs @@ -1,8 +1,8 @@ +use config::KeyBindings; use num_format::{Locale, ToFormattedString}; use unicode_segmentation::UnicodeSegmentation; use crate::{ - config::KeyBindings, display::DisplayColor, show_commit::{commit::Commit, status::Status}, view::{LineSegment, ViewLine}, diff --git a/src/view/tests.rs b/src/view/tests.rs index e5afcb0..3244829 100644 --- a/src/view/tests.rs +++ b/src/view/tests.rs @@ -1,8 +1,7 @@ +use config::testutil::create_config; + use super::*; -use crate::{ - config::testutil::create_config, - display::testutil::{assert_output, CrossTerm}, -}; +use crate::display::testutil::{assert_output, CrossTerm}; fn assert_render(width: usize, height: usize, view_data: &ViewData, expected: &[&str]) { let config = create_config(); |