summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTim Oram <dev@mitmaro.ca>2021-06-20 13:45:51 -0230
committerTim Oram <dev@mitmaro.ca>2021-07-05 16:27:53 -0230
commit18712c928fd5a697fbd74d80dd886ed6155d2d99 (patch)
tree26f00a4f0a0105ca4d18256afafa2f78533156ed
parent21747bb23ef5f9b309eb79df728f55e00245c675 (diff)
Move config module to a crate
-rw-r--r--Cargo.lock13
-rw-r--r--Cargo.toml6
-rwxr-xr-xscripts/coverage.bash2
-rwxr-xr-xscripts/test.bash2
-rw-r--r--src/config/Cargo.toml30
-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.rs3
-rw-r--r--src/display/mod.rs4
-rw-r--r--src/display/utils.rs3
-rw-r--r--src/input/key_bindings.rs4
-rw-r--r--src/list/mod.rs3
-rw-r--r--src/list/utils.rs3
-rw-r--r--src/main.rs1
-rw-r--r--src/process/testutil/process_module_test.rs2
-rw-r--r--src/show_commit/mod.rs2
-rw-r--r--src/show_commit/util.rs2
-rw-r--r--src/view/tests.rs7
26 files changed, 175 insertions, 95 deletions
diff --git a/Cargo.lock b/Cargo.lock
index cb28030..e47b0db 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -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",
diff --git a/Cargo.toml b/Cargo.toml
index efdd9e7..6032712 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -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();