-
Notifications
You must be signed in to change notification settings - Fork 119
/
diff.clj
43 lines (36 loc) · 1.15 KB
/
diff.clj
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
(ns cljfmt.diff
(:import [difflib DiffUtils]
[java.io File])
(:require [clojure.string :as str]))
(defn- lines [s]
(str/split s #"\n"))
(defn- unlines [ss]
(str/join "\n" ss))
(defn unified-diff
([filename original revised]
(unified-diff filename original revised 3))
([filename original revised context]
(unlines (DiffUtils/generateUnifiedDiff
(str "a" File/separator filename)
(str "b" File/separator filename)
(lines original)
(DiffUtils/diff (lines original) (lines revised))
context))))
(def ^:private ansi-colors
{:reset "[0m"
:red "[031m"
:green "[032m"
:cyan "[036m"})
(defn- ansi-colors? []
(and (System/console)
(System/getenv "TERM")
(not (System/getenv "NO_COLOR"))))
(defn- colorize [s color]
(if (ansi-colors?)
(str \u001b (ansi-colors color) s \u001b (ansi-colors :reset))
s))
(defn colorize-diff [diff-text]
(-> diff-text
(str/replace #"(?m)^(@@.*@@)$" (colorize "$1" :cyan))
(str/replace #"(?m)^(\+(?!\+\+).*)$" (colorize "$1" :green))
(str/replace #"(?m)^(-(?!--).*)$" (colorize "$1" :red))))