aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTeddy Wing2020-08-22 00:05:11 +0200
committerTeddy Wing2020-08-22 00:05:11 +0200
commit8486be143b44a2d929430d41405124dcd1bfccb9 (patch)
tree2e1a96431baf8bfdd17319601117fc5018dd48f2
parented25d1ae52b137ff445649aeb8cdac4d892ce313 (diff)
downloadgit-suggestion-8486be143b44a2d929430d41405124dcd1bfccb9.tar.bz2
Idea for adding diff coloursdiff-colours
Ideas for getting diff colours from the Git config and parsing them using 'colorparse'. Leaving this aside and planning to add diff colours by executing `git-diff` instead. Shelling out to `git diff` would allow us to accept diff command line options like `--word-diff` and have them work transparently.
-rw-r--r--Cargo.lock26
-rw-r--r--github-suggestion/Cargo.toml2
-rw-r--r--github-suggestion/src/color.rs91
-rw-r--r--github-suggestion/src/lib.rs2
4 files changed, 121 insertions, 0 deletions
diff --git a/Cargo.lock b/Cargo.lock
index e6fd541..b7408da 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -25,6 +25,21 @@ dependencies = [
]
[[package]]
+name = "ansi_term"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "23ac7c30002a5accbf7e8987d0632fa6de155b7c3d39d0067317a391e00a2ef6"
+
+[[package]]
+name = "ansi_term"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2"
+dependencies = [
+ "winapi 0.3.9",
+]
+
+[[package]]
name = "autocfg"
version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -101,6 +116,15 @@ dependencies = [
]
[[package]]
+name = "colorparse"
+version = "2.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "179f9a3462d05f4c15041d8ba8bd59534731fe6ddd89a65ca61ec67655f37379"
+dependencies = [
+ "ansi_term 0.9.0",
+]
+
+[[package]]
name = "crossbeam-deque"
version = "0.7.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -277,6 +301,8 @@ dependencies = [
name = "github-suggestion"
version = "0.1.0"
dependencies = [
+ "ansi_term 0.12.1",
+ "colorparse",
"git2",
"github-rs",
"regex",
diff --git a/github-suggestion/Cargo.toml b/github-suggestion/Cargo.toml
index 34e197c..0ef1959 100644
--- a/github-suggestion/Cargo.toml
+++ b/github-suggestion/Cargo.toml
@@ -4,6 +4,8 @@ version = "0.1.0"
edition = "2018"
[dependencies]
+ansi_term = "0.12.1"
+colorparse = "2.0.1"
git2 = "0.13.8"
github-rs = "0.7.0"
regex = "1.3.9"
diff --git a/github-suggestion/src/color.rs b/github-suggestion/src/color.rs
new file mode 100644
index 0000000..5f4e954
--- /dev/null
+++ b/github-suggestion/src/color.rs
@@ -0,0 +1,91 @@
+// Copyright (c) 2020 Teddy Wing
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program. If not, see <https://www.gnu.org/licenses/>.
+
+
+use ansi_term::Style;
+use colorparse;
+use git2;
+use thiserror::Error;
+
+
+#[derive(Debug, Error)]
+pub enum Error {
+ #[error(transparent)]
+ Git(#[from] git2::Error),
+}
+
+
+static SLOTS: [&'static str; 6] = [
+ "commit",
+ "context",
+ "frag",
+ "func",
+ "old",
+ "new",
+];
+
+
+#[derive(Debug, Default)]
+pub struct Diff {
+ context: Option<Style>,
+ meta: Option<Style>,
+ frag: Option<Style>,
+ func: Option<Style>,
+ old: Option<Style>,
+ new: Option<Style>,
+ commit: Option<Style>,
+ whitespace: Option<Style>,
+ oldMoved: Option<Style>,
+ newMoved: Option<Style>,
+ oldMovedDimmed: Option<Style>,
+ oldMovedAlternative: Option<Style>,
+ oldMovedAlternativeDimmed: Option<Style>,
+ newMovedDimmed: Option<Style>,
+ newMovedAlternative: Option<Style>,
+ newMovedAlternativeDimmed: Option<Style>,
+}
+
+
+// pub fn diff(config: &git2::Config) -> Diff {
+// let diff = Diff::default();
+//
+// for slot in SLOTS {
+// let colors = match config.get_string(slot) {
+// Ok(c) => c,
+// Err(e) if e.code() == git2::ErrorCode::NotFound => return Ok(None),
+// Err(e) => return Err(Error::Git(e)),
+// };
+//
+// colorparse::parse(colors)?;
+// }
+// }
+
+impl Diff {
+ pub fn from_config(config: &git2::Config) -> Result<Self, Error> {
+ let diff = Self::default();
+
+ for slot in &SLOTS {
+ let colors = match config.get_string(slot) {
+ Ok(c) => c,
+ Err(e) if e.code() == git2::ErrorCode::NotFound => return Ok(None),
+ Err(e) => return Err(Error::Git(e)),
+ };
+
+ colorparse::parse(&colors)?;
+ }
+
+ Ok(diff)
+ }
+}
diff --git a/github-suggestion/src/lib.rs b/github-suggestion/src/lib.rs
index 3ec6f00..b7e54cc 100644
--- a/github-suggestion/src/lib.rs
+++ b/github-suggestion/src/lib.rs
@@ -20,6 +20,8 @@
pub mod client;
pub mod suggestion;
+pub(crate) mod color;
+
mod url;
pub use crate::client::Client;