{"version": 2, "width": 133, "height": 24, "timestamp": 1648331634, "env": {"SHELL": "/bin/zsh", "TERM": "xterm-256color"}} [0.058188, "o", "\u001b[1m\u001b[7m%\u001b[27m\u001b[1m\u001b[0m \r \r"] [0.059315, "o", "\u001b]7;file:///home/wilfred/projects/difftastic\u001b\\"] [0.059474, "o", "\r\u001b[0m\u001b[27m\u001b[24m\u001b[J$ \u001b[K\u001b[?2004h"] [2.5995, "o", "# Difftastic is a tool for comparing files based on syntax."] [3.226385, "o", "\u001b[?2004l\r\r\n"] [3.226734, "o", "\u001b[1m\u001b[7m%\u001b[27m\u001b[1m\u001b[0m \r \r"] [3.227569, "o", "\u001b]7;file:///home/wilfred/projects/difftastic\u001b\\"] [3.227785, "o", "\r\u001b[0m\u001b[27m\u001b[24m\u001b[J$ \u001b[K\u001b[?2004h"] [6.365599, "o", "# You can give it two paths to compare, just like diff."] [7.648592, "o", "\u001b[?2004l\r\r\n"] [7.648843, "o", "\u001b[1m\u001b[7m%\u001b[27m\u001b[1m\u001b[0m \r \r"] [7.649941, "o", "\u001b]7;file:///home/wilfred/projects/difftastic\u001b\\"] [7.650048, "o", "\r\u001b[0m\u001b[27m\u001b[24m\u001b[J$ \u001b[K\u001b[?2004h"] [10.137345, "o", "d"] [10.257334, "o", "\bdi"] [10.334579, "o", "f"] [10.483799, "o", "f"] [10.67091, "o", "t"] [10.736178, "o", " "] [10.924637, "o", "s"] [10.987535, "o", "a"] [11.092373, "o", "m"] [11.283115, "o", "ple_files\u001b[1m/\u001b[0m"] [11.689602, "o", "\b\u001b[0m/c"] [11.794798, "o", "l"] [11.950613, "o", "o"] [12.096605, "o", "jure_"] [12.435091, "o", "b"] [12.515293, "o", "efore.clj\u001b[1m \u001b[0m"] [13.113687, "o", "\b\u001b[0m s"] [13.199507, "o", "a"] [13.351514, "o", "m"] [13.494273, "o", "ple_files\u001b[1m/\u001b[0m"] [13.867224, "o", "\b\u001b[0m/c"] [13.956386, "o", "l"] [14.158282, "o", "o"] [14.260931, "o", "jure_"] [14.575625, "o", "a"] [14.794025, "o", "fter.clj\u001b[1m \u001b[0m"] [15.340386, "o", "\b\u001b[0m \b\u001b[?2004l\r\r\n"] [15.344656, "o", "\u001b[1m\u001b[93msample_files/clojure_after.clj\u001b[39m\u001b[0m --- 1/1 --- Clojure\r\n1 \u001b[94;3m;; Example from Autochrome, under EPL-1.0 license.\u001b[0m 1 \u001b[94;3m;; Example from Autochrome, under EPL-1.0 license.\u001b[0m \r\n2 (defn example 2 (defn example \r\n3 [x] 3 [x] \r\n\u001b[91m4 \u001b[39m \u001b[91;1m(\u001b[0m\u001b[91mprintln\u001b[0m \u001b[91m\"hello!\"\u001b[0m\u001b[91;1m)\u001b[0m \u001b[2m. \u001b[0m\r\n5 {\u001b[1m:more\u001b[0m (inc x) \u001b[92m4 \u001b[39m \u001b[92;1m(\u001b[0m\u001b[92m->\u001b[0m {\u001b[1m:more\u001b[0m (inc x) \r\n6 \u001b[1m:less\u001b[0m (dec x)}) 5 \u001b[1m:less\u001b[0m (dec x)} \r\n\u001b[2m \u001b[0m "] [15.34478, "o", " \u001b[92m6 \u001b[39m \u001b[92;1m(\u001b[0m\u001b[92massoc\u001b[0m \u001b[92;1m:twice\u001b[0m \u001b[92;1m(\u001b[0m\u001b[92m+\u001b[0m \u001b[92mx\u001b[0m \u001b[92mx\u001b[0m\u001b[92;1m)\u001b[0m\u001b[92;1m)\u001b[0m\u001b[92;1m)\u001b[0m) \r\n\r\n"] [15.345119, "o", "\u001b[1m\u001b[7m%\u001b[27m\u001b[1m\u001b[0m \r \r"] [15.346128, "o", "\u001b]7;file:///home/wilfred/projects/difftastic\u001b\\"] [15.346218, "o", "\r\u001b[0m\u001b[27m\u001b[24m\u001b[J$ \u001b[K\u001b[?2004h"] [20.072257, "o", "# Difftastic has support for git too! Let's look at some recent commits."] [20.908263, "o", "\u001b[?2004l\r\r\n"] [20.908512, "o", "\u001b[1m\u001b[7m%\u001b[27m\u001b[1m\u001b[0m \r \r"] [20.909869, "o", "\u001b]7;file:///home/wilfred/projects/difftastic\u001b\\"] [20.910001, "o", "\r\u001b[0m\u001b[27m\u001b[24m\u001b[J$ \u001b[K\u001b[?2004h"] [25.174718, "o", "GIT_EXTERNAL_DIFF=difft git log -p --ext-diff"] [27.066311, "o", "\u001b[?2004l\r\r\n"] [27.073778, "o", "\u001b[?1h\u001b=\r"] [27.073956, "o", "\u001b[33mcommit 905fc9ec8be333bee05595091207d30d69ec14b9\u001b[m\u001b[33m (\u001b[m\u001b[1;36mHEAD\u001b[m\u001b[33m)\u001b[m\u001b[m\r\nAuthor: Wilfred Hughes \u001b[m\r\nDate: Sun Mar 20 22:24:21 2022 -0700\u001b[m\r\n\u001b[m\r\n Ignore the trailing newline in source files\u001b[m\r\n \u001b[m\r\n This should have produced a change in output, but it's currently\u001b[m\r\n ignored due to #163.\u001b[m\r\n\u001b[m\r\n"] [27.118907, "o", "\u001b[1m\u001b[93msrc/main.rs\u001b[39m\u001b[0m --- 1/1 --- Rust\u001b[m\r\n"] [27.119099, "o", "215 215 }\u001b[m\r\n216 216 \u001b[m\r\n217 217 \u001b[94;3m// TODO: don't replace tab characters inside string literals.\u001b[0m\u001b[m\r\n218 \u001b[92m218 \u001b[39m \u001b[1mlet\u001b[0m \u001b[92;1mmut\u001b[0m lhs_src = \u001b[1mString\u001b[0m::from_utf8_lossy(lhs_bytes)\u001b[m\r\n219 219 .to_string()\u001b[m\r\n220 220 .replace(\u001b[95m'\\t'\u001b[0m, \u001b[95m\" \"\u001b[0m);\u001b[m\r\n221 \u001b[92m221 \u001b[39m \u001b[1mlet\u001b[0m \u001b[92;1mmut\u001b[0m rhs_src = \u001b[1mString\u001b[0m::from_utf8_lossy(rhs_bytes)\u001b[m\r\n222 222 .to_string()\u001b[m\r\n223 223 .replace(\u001b[95m'\\t'\u001b[0m, \u001b[95m\" \"\u001b[0m);\u001b[m\r\n\u001b[2m... \u001b[0m\u001b[92m224 \u001b[39m\u001b[m\r\n\u001b[2m... \u001b[0m\u001b[92m225 \u001b[39m \u001b[92;3m// Ignore the trailing newline, if present.\u001b[0m\u001b[m\r\n\u001b[2m... \u001b[0m\u001b[92m226 \u001b[39m \u001b[92;3m// TODO: highlight if this has changes (#144).\u001b[0m\u001b[m\r\n\u001b[2m... \u001b[0m\u001b[92m227 \u001b[39m \u001b[92;3m// TODO: factor out a string cleaning function.\u001b[0m\u001b[m\r\n:\u001b[K"] [28.741062, "o", "\r\u001b[K \u001b[KESC\b\b\bESC\u001b[KO\bO\u001b[KB\bB\r\u001b[K\u001b[2m... \u001b[0m\u001b[92m228 \u001b[39m \u001b[92;1mif\u001b[0m \u001b[92mlhs_src\u001b[0m\u001b[92m.\u001b[0m\u001b[92mends_with\u001b[0m\u001b[92;1m(\u001b[0m\u001b[92m'\\n'\u001b[0m\u001b[92;1m)\u001b[0m \u001b[92;1m{\u001b[0m\u001b[m\r\n:\u001b[K"] [29.058528, "o", "\r\u001b[K \u001b[KESC\b\b\bESC\u001b[KO\bO\u001b[KB\bB\r\u001b[K\u001b[2m... \u001b[0m\u001b[92m229 \u001b[39m \u001b[92mlhs_src\u001b[0m\u001b[92m.\u001b[0m\u001b[92mpop\u001b[0m\u001b[92;1m(\u001b[0m\u001b[92;1m)\u001b[0m\u001b[92m;\u001b[0m\u001b[m\r\n:\u001b[K"] [29.36318, "o", "\r\u001b[K \u001b[KESC\b\b\bESC\u001b[KO\bO\u001b[KB\bB\r\u001b[K\u001b[2m... \u001b[0m\u001b[92m230 \u001b[39m \u001b[92;1m}\u001b[0m\u001b[m\r\n:\u001b[K"] [29.610836, "o", "\r\u001b[K \u001b[KESC\b\b\bESC\u001b[KO\bO\u001b[KB\bB\r\u001b[K\u001b[2m... \u001b[0m\u001b[92m231 \u001b[39m \u001b[92;1mif\u001b[0m \u001b[92mrhs_src\u001b[0m\u001b[92m.\u001b[0m\u001b[92mends_with\u001b[0m\u001b[92;1m(\u001b[0m\u001b[92m'\\n'\u001b[0m\u001b[92;1m)\u001b[0m \u001b[92;1m{\u001b[0m\u001b[m\r\n:\u001b[K"] [29.822642, "o", "\r\u001b[K \u001b[KESC\b\b\bESC\u001b[KO\bO\u001b[KB\bB\r\u001b[K\u001b[2m... \u001b[0m\u001b[92m232 \u001b[39m \u001b[92mrhs_src\u001b[0m\u001b[92m.\u001b[0m\u001b[92mpop\u001b[0m\u001b[92;1m(\u001b[0m\u001b[92;1m)\u001b[0m\u001b[92m;\u001b[0m\u001b[m\r\n:\u001b[K"] [30.079355, "o", "\r\u001b[K \u001b[KESC\b\b\bESC\u001b[KO\bO\u001b[KB\bB\r\u001b[K"] [30.079516, "o", "\u001b[2m... \u001b[0m\u001b[92m233 \u001b[39m \u001b[92;1m}\u001b[0m\u001b[m\r\n:\u001b[K"] [30.350258, "o", "\r\u001b[K \u001b[KESC\b\b\bESC\u001b[KO\bO\u001b[KB\bB\r\u001b[K224 234 \u001b[m\r\n:\u001b[K"] [30.60035, "o", "\r\u001b[K \u001b[KESC\b\b\bESC\u001b[KO\bO\u001b[KB\bB\r\u001b[K"] [30.60053, "o", "225 235 \u001b[94;3m// TODO: take a Path directly instead.\u001b[0m\u001b[m\r\n:\u001b[K"] [30.834164, "o", "\r\u001b[K \u001b[KESC\b\b\bESC\u001b[KO\bO\u001b[KB\bB\r\u001b[K226 236 \u001b[1mlet\u001b[0m path = \u001b[1mPath\u001b[0m::new(\u001b[1m&\u001b[0mdisplay_path);\u001b[m\r\n:\u001b[K"] [31.07936, "o", "\r\u001b[K \u001b[KESC\b\b\bESC\u001b[KO\bO\u001b[KB\bB\r\u001b[K\u001b[m\r\n:\u001b[K"] [31.313919, "o", "\r\u001b[K \u001b[KESC\b\b\bESC\u001b[KO\bO\u001b[KB\bB\r\u001b[K\u001b[m\r\n:\u001b[K"] [31.547364, "o", "\r\u001b[K \u001b[KESC\b\b\bESC\u001b[KO\bO\u001b[KB\bB\r\u001b[K"] [31.547527, "o", "\u001b[33mcommit c7795111f5767e54205dda13f82c97b2ef5743a1\u001b[m\u001b[m\r\n:\u001b[K"] [31.795514, "o", "\r\u001b[K \u001b[KESC\b\b\bESC\u001b[KO\bO\u001b[KB\bB\r\u001b[K"] [31.795633, "o", "Author: Wilfred Hughes \u001b[m\r\n:\u001b[K"] [32.057382, "o", "\r\u001b[K \u001b[KESC\b\b\bESC\u001b[KO\bO\u001b[KB\bB\r\u001b[K"] [32.057519, "o", "Date: Sun Mar 20 21:30:17 2022 -0700\u001b[m\r\n:\u001b[K"] [32.309801, "o", "\r\u001b[K \u001b[KESC\b\b\bESC\u001b[KO\bO\u001b[KB\bB\r\u001b[K\u001b[m\r\n:\u001b[K"] [32.5347, "o", "\r\u001b[K \u001b[KESC\b\b\bESC\u001b[KO\bO\u001b[KB\bB\r\u001b[K cargo fmt\u001b[m\r\n:\u001b[K"] [32.783008, "o", "\r\u001b[K \u001b[KESC\b\b\bESC\u001b[KO\bO\u001b[KB\bB\r\u001b[K\u001b[m\r\n:\u001b[K"] [33.00581, "o", "\r\u001b[K \u001b[KESC\b\b\bESC\u001b[KO\bO\u001b[KB\bB\r\u001b[K\u001b[1m\u001b[93msrc/hunks.rs\u001b[39m\u001b[0m --- 1/1 --- Rust\u001b[m\r\n:\u001b[K"] [33.255364, "o", "\r\u001b[K \u001b[KESC\b\b\bESC\u001b[KO\bO\u001b[KB\bB\r\u001b[K"] [33.255475, "o", "No syntactic changes.\u001b[m\r\n:\u001b[K"] [33.491872, "o", "\r\u001b[K \u001b[KESC\b\b\bESC\u001b[KO\bO\u001b[KB\bB\r\u001b[K\u001b[m\r\n:\u001b[K"] [33.735072, "o", "\r\u001b[K \u001b[KESC\b\b\bESC\u001b[KO\bO\u001b[KB\bB\r\u001b[K\u001b[m\r\n:\u001b[K"] [33.977973, "o", "\r\u001b[K \u001b[KESC\b\b\bESC\u001b[KO\bO\u001b[KB\bB\r\u001b[K\u001b[33mcommit 68f3ab2b9243fbbefdb2a5f68a531754cae4c4f7\u001b[m\u001b[m\r\n:\u001b[K"] [34.225023, "o", "\r\u001b[K \u001b[KESC\b\b\bESC\u001b[KO\bO\u001b[KB\bB\r\u001b[KAuthor: Wilfred Hughes \u001b[m\r\n:\u001b[K"] [34.466161, "o", "\r\u001b[K \u001b[KESC\b\b\bESC\u001b[KO\bO\u001b[KB\bB\r\u001b[K"] [34.466259, "o", "Date: Sun Mar 20 19:48:14 2022 -0700\u001b[m\r\n:\u001b[K"] [34.698357, "o", "\r\u001b[K \u001b[KESC\b\b\bESC\u001b[KO\bO\u001b[KB\bB\r\u001b[K\u001b[m\r\n:\u001b[K"] [34.941211, "o", "\r\u001b[K \u001b[KESC\b\b\bESC\u001b[KO\bO\u001b[KB\bB\r\u001b[K"] [34.941426, "o", " Don't consider lines with whitespace to have missing syntax\u001b[m\r\n:\u001b[K"] [35.174346, "o", "\r\u001b[K \u001b[KESC\b\b\bESC\u001b[KO\bO\u001b[KB\bB\r\u001b[K"] [35.174501, "o", " \u001b[m\r\n:\u001b[K"] [35.444257, "o", "\r\u001b[K \u001b[KESC\b\b\bESC\u001b[KO\bO\u001b[KB\bB\r\u001b[K"] [35.444401, "o", " Fixes #171\u001b[m\r\n:\u001b[K"] [35.688874, "o", "\r\u001b[K \u001b[KESC\b\b\bESC\u001b[KO\bO\u001b[KB\bB\r\u001b[K\u001b[m\r\n:\u001b[K"] [35.928177, "o", "\r\u001b[K \u001b[KESC\b\b\bESC\u001b[KO\bO\u001b[KB\bB\r\u001b[K\u001b[1m\u001b[93mCHANGELOG.md\u001b[39m\u001b[0m --- 1/1 --- Text\u001b[m\r\n:\u001b[K"] [36.159364, "o", "\r\u001b[K \u001b[KESC\b\b\bESC\u001b[KO\bO\u001b[KB\bB\r\u001b[K"] [36.159518, "o", " 6 6 certain circumstances when a line contained both changed and unchanged\u001b[m\r\n:\u001b[K"] [36.389208, "o", "\r\u001b[K \u001b[KESC\b\b\bESC\u001b[KO\bO\u001b[KB\bB\r\u001b[K 7 7 parts.\u001b[m\r\n:\u001b[K"] [36.596542, "o", "\r\u001b[K \u001b[KESC\b\b\bESC\u001b[KO\bO\u001b[KB\bB\r\u001b[K 8 8 \u001b[m\r\n:\u001b[K"] [36.817159, "o", "\r\u001b[K \u001b[KESC\b\b\bESC\u001b[KO\bO\u001b[KB\bB\r\u001b[K"] [36.817259, "o", "\u001b[2m . \u001b[0m\u001b[92m 9 \u001b[39m\u001b[92;1mFixed\u001b[0m\u001b[92;1m \u001b[0m\u001b[92;1man\u001b[0m\u001b[92;1m \u001b[0m\u001b[92;1missue\u001b[0m\u001b[92;1m \u001b[0m\u001b[92;1mwhere\u001b[0m\u001b[92;1m \u001b[0m\u001b[92;1mlines\u001b[0m\u001b[92;1m \u001b[0m\u001b[92;1mcontaining\u001b[0m\u001b[92;1m \u001b[0m\u001b[92;1monly\u001b[0m\u001b[92;1m \u001b[0m\u001b[92;1mwhitespace\u001b[0m\u001b[92;1m \u001b[0m\u001b[92;1mwould\u001b[0m\u001b[92;1m \u001b[0m\u001b[92;1mbe\u001b[0m\u001b[m\r\n:\u001b[K"] [37.046838, "o", "\r\u001b[K \u001b[KESC\b\b\bESC\u001b[KO\bO\u001b[KB\bB\r\u001b[K\u001b[2m . \u001b[0m\u001b[92m10 \u001b[39m\u001b[92;1mhighlighted\u001b[0m\u001b[92;1m \u001b[0m\u001b[92;1min\u001b[0m\u001b[92;1m \u001b[0m\u001b[92;1mpurple\u001b[0m\u001b[92;1m.\u001b[0m\u001b[m\r\n:\u001b[K"] [37.31998, "o", "\r\u001b[K \u001b[KESC\b\b\bESC\u001b[KO\bO\u001b[KB\bB\r\u001b[K\u001b[2m . \u001b[0m\u001b[92m11 \u001b[39m\u001b[m\r\n:\u001b[K"] [37.551033, "o", "\r\u001b[K \u001b[KESC\b\b\bESC\u001b[KO\bO\u001b[KB\bB\r\u001b[K 9 12 ### Parsing\u001b[m\r\n:\u001b[K"] [37.80635, "o", "\r\u001b[K \u001b[KESC\b\b\bESC\u001b[KO\bO\u001b[KB\bB\r\u001b[K10 13 \u001b[m\r\n:\u001b[K"] [38.029595, "o", "\r\u001b[K \u001b[KESC\b\b\bESC\u001b[KO\bO\u001b[KB\bB\r\u001b[K\u001b[m\r\n:\u001b[K"] [38.264066, "o", "\r\u001b[K \u001b[KESC\b\b\bESC\u001b[KO\bO\u001b[KB\bB\r\u001b[K\u001b[1m\u001b[93msrc/style.rs\u001b[39m\u001b[0m --- 1/1 --- Rust\u001b[m\r\n:\u001b[K"] [38.504341, "o", "\r\u001b[K \u001b[KESC\b\b\bESC\u001b[KO\bO\u001b[KB\bB\r\u001b[K"] [38.504471, "o", "83 use_color: \u001b[1mbool\u001b[0m,\u001b[m\r\n:\u001b[K"] [38.735321, "o", "\r\u001b[K \u001b[KESC\b\b\bESC\u001b[KO\bO\u001b[KB\bB\r\u001b[K84 styles: \u001b[1m&\u001b[0m[(\u001b[1mSingleLineSpan\u001b[0m, \u001b[1mStyle\u001b[0m)],\u001b[m\r\n:\u001b[K"] [38.962007, "o", "\r\u001b[K \u001b[KESC\b\b\bESC\u001b[KO\bO\u001b[KB\bB\r\u001b[K85 ) -> \u001b[1mVec\u001b[0m<\u001b[1mString\u001b[0m> {\u001b[m\r\n:\u001b[K"] [39.208804, "o", "\r\u001b[K \u001b[KESC\b\b\bESC\u001b[KO\bO\u001b[KB\bB\r\u001b[K\u001b[92m86 \u001b[39m \u001b[1mif\u001b[0m styles.is_empty() && !line\u001b[92m.\u001b[0m\u001b[92mtrim\u001b[0m\u001b[92;1m(\u001b[0m\u001b[92;1m)\u001b[0m.is_empty() {\u001b[m\r\n:\u001b[K"] [39.455321, "o", "\r\u001b[K \u001b[KESC\b\b\bESC\u001b[KO\bO\u001b[KB\bB\r\u001b[K87 \u001b[94;3m// Missing styles is a bug, so highlight in purple to make this obvious.\u001b[0m\u001b[m\r\n:\u001b[K"] [39.719675, "o", "\r\u001b[K \u001b[KESC\b\b\bESC\u001b[KO\bO\u001b[KB\bB\r\u001b[K"] [39.719789, "o", "88 \u001b[1mreturn\u001b[0m split_string_by_codepoint(line, max_len)\u001b[m\r\n:\u001b[K"] [40.000366, "o", "\r\u001b[K \u001b[KESC\b\b\bESC\u001b[KO\bO\u001b[KB\bB\r\u001b[K"] [40.000537, "o", "89 .into_iter()\u001b[m\r\n:\u001b[K"] [40.263044, "o", "\r\u001b[K \u001b[KESC\b\b\bESC\u001b[KO\bO\u001b[KB\bB\r\u001b[K\u001b[m\r\n:\u001b[K"] [40.532331, "o", "\r\u001b[K \u001b[KESC\b\b\bESC\u001b[KO\bO\u001b[KB\bB\r\u001b[K\u001b[m\r\n:\u001b[K"] [40.799186, "o", "\r\u001b[K \u001b[KESC\b\b\bESC\u001b[KO\bO\u001b[KB\bB\r\u001b[K"] [40.799289, "o", "\u001b[33mcommit 4563648a9fba93356e9df6be842023ca1c4fb2f4\u001b[m\u001b[m\r\n:\u001b[K"] [41.05339, "o", "\r\u001b[K \u001b[KESC\b\b\bESC\u001b[KO\bO\u001b[KB\bB\r\u001b[K"] [41.053535, "o", "Author: Wilfred Hughes \u001b[m\r\n:\u001b[K"] [41.30637, "o", "\r\u001b[K \u001b[KESC\b\b\bESC\u001b[KO\bO\u001b[KB\bB\r\u001b[K"] [41.306496, "o", "Date: Sun Mar 20 15:17:32 2022 -0700\u001b[m\r\n:\u001b[K"] [41.59527, "o", "\r\u001b[K \u001b[KESC\b\b\bESC\u001b[KO\bO\u001b[KB\bB\r\u001b[K\u001b[m\r\n:\u001b[K"] [41.874913, "o", "\r\u001b[K \u001b[KESC\b\b\bESC\u001b[KO\bO\u001b[KB\bB\r\u001b[K Clarify ChangeKind helper method name\u001b[m\r\n:\u001b[K"] [42.123997, "o", "\r\u001b[K \u001b[KESC\b\b\bESC\u001b[KO\bO\u001b[KB\bB\r\u001b[K\u001b[m\r\n:\u001b[K"] [42.406332, "o", "\r\u001b[K \u001b[KESC\b\b\bESC\u001b[KO\bO\u001b[KB\bB\r\u001b[K"] [42.40648, "o", "\u001b[1m\u001b[93msrc/hunks.rs\u001b[39m\u001b[0m --- 1/2 --- Rust\u001b[m\r\n:\u001b[K"] [42.673176, "o", "\r\u001b[K \u001b[KESC\b\b\bESC\u001b[KO\bO\u001b[KB\bB\r\u001b[K467 \u001b[1mloop\u001b[0m { 467 \u001b[1mloop\u001b[0m { \u001b[m\r\n:\u001b[K"] [42.936558, "o", "\r\u001b[K \u001b[KESC\b\b\bESC\u001b[KO\bO\u001b[KB\bB\r\u001b[K"] [42.936738, "o", "468 \u001b[1mmatch\u001b[0m (lhs_iter.peek(), rhs_iter.peek()) { 468 \u001b[1mmatch\u001b[0m (lhs_iter.peek(), rhs_iter.peek()) { \u001b[m\r\n:\u001b[K"] [43.187389, "o", "\r\u001b[K \u001b[KESC\b\b\bESC\u001b[KO\bO\u001b[KB\bB\r\u001b[K"] [43.187461, "o", "469 (Some(lhs_mp), Some(rhs_mp)) 469 (Some(lhs_mp), Some(rhs_mp)) \u001b[m\r\n:\u001b[K"] [43.439206, "o", "\r\u001b[K \u001b[KESC\b\b\bESC\u001b[KO\bO\u001b[KB\bB\r\u001b[K\u001b[91m470 \u001b[39m \u001b[1mif\u001b[0m !lhs_mp.kind.\u001b[91mis_change\u001b[0m() && !rhs_mp.kind.\u001b[91mis\u001b[0m \u001b[92m470 \u001b[39m \u001b[1mif\u001b[0m !lhs_mp.kind.\u001b[92mis_novel\u001b[0m() && !rhs_mp.kind.\u001b[92mis_\u001b[0m\u001b[m\r\n:\u001b[K"] [43.756317, "o", "\r\u001b[K \u001b[KESC\b\b\bESC\u001b[KO\bO\u001b[KB\bB\r\u001b[K"] [43.756474, "o", "\u001b[91m\u001b[2m... \u001b[0m\u001b[39m\u001b[91m_change\u001b[0m() => \u001b[92m\u001b[2m... \u001b[0m\u001b[39m\u001b[92mnovel\u001b[0m() => \u001b[m\r\n:\u001b[K"] [44.023372, "o", "\r\u001b[K \u001b[KESC\b\b\bESC\u001b[KO\bO\u001b[KB\bB\r\u001b[K"] [44.023425, "o", "471 { 471 { \u001b[m\r\n:\u001b[K"] [44.289699, "o", "\r\u001b[K \u001b[KESC\b\b\bESC\u001b[KO\bO\u001b[KB\bB\r\u001b[K"] [44.289782, "o", "472 res.append(\u001b[1m&\u001b[0m\u001b[1mmut\u001b[0m novel_section_in_order( 472 res.append(\u001b[1m&\u001b[0m\u001b[1mmut\u001b[0m novel_section_in_order( \u001b[m\r\n:\u001b[K"] [44.560326, "o", "\r\u001b[K \u001b[KESC\b\b\bESC\u001b[KO\bO\u001b[KB\bB\r\u001b[K"] [44.560452, "o", "473 \u001b[1m&\u001b[0mlhs_section, 473 \u001b[1m&\u001b[0mlhs_section, \u001b[m\r\n:\u001b[K"] [44.813655, "o", "\r\u001b[K \u001b[KESC\b\b\bESC\u001b[KO\bO\u001b[KB\bB\r\u001b[K"] [44.813687, "o", "\u001b[m\r\n:\u001b[K"] [45.078314, "o", "\r\u001b[K \u001b[KESC\b\b\bESC\u001b[KO\bO\u001b[KB\bB\r\u001b[K\u001b[1m\u001b[93msrc/hunks.rs\u001b[39m\u001b[0m --- 2/2 --- Rust\u001b[m\r\n:\u001b[K"] [45.34377, "o", "\r\u001b[K \u001b[KESC\b\b\bESC\u001b[KO\bO\u001b[KB\bB\r\u001b[K485 lhs_iter.next(); 485 lhs_iter.next(); \u001b[m\r\n:\u001b[K"] [45.734703, "o", "\r\u001b[K \u001b[KESC\b\b\bESC\u001b[KO\bO\u001b[KB\bB\r\u001b[K486 rhs_iter.next(); 486 rhs_iter.next(); \u001b[m\r\n:\u001b[K"] [45.978713, "o", "\r\u001b[K \u001b[KESC\b\b\bESC\u001b[KO\bO\u001b[KB\bB\r\u001b[K"] [45.978757, "o", "487 } 487 } \u001b[m\r\n:\u001b[K"] [46.300028, "o", "\r\u001b[K \u001b[KESC\b\b\bESC\u001b[KO\bO\u001b[KB\bB\r\u001b[K\u001b[91m488 \u001b[39m (Some(lhs_mp), _) \u001b[1mif\u001b[0m lhs_mp.kind.\u001b[91mis_change\u001b[0m() => { \u001b[92m488 \u001b[39m (Some(lhs_mp), _) \u001b[1mif\u001b[0m lhs_mp.kind.\u001b[92mis_novel\u001b[0m() => { \u001b[m\r\n:\u001b[K"] [46.584687, "o", "\r\u001b[K \u001b[KESC\b\b\bESC\u001b[KO\bO\u001b[KB\bB\r\u001b[K"] [46.584758, "o", "489 lhs_section.push(lhs_mp); 489 lhs_section.push(lhs_mp); \u001b[m\r\n:\u001b[K"] [46.920832, "o", "\r\u001b[K \u001b[KESC\b\b\bESC\u001b[KO\bO\u001b[KB\bB\r\u001b[K"] [46.920879, "o", "490 lhs_iter.next(); 490 lhs_iter.next(); \u001b[m\r\n:\u001b[K"] [47.192163, "o", "\r\u001b[K \u001b[KESC\b\b\bESC\u001b[KO\bO\u001b[KB\bB\r\u001b[K491 } 491 } \u001b[m\r\n:\u001b[K"] [47.505025, "o", "\r\u001b[K \u001b[KESC\b\b\bESC\u001b[KO\bO\u001b[KB\bB\r\u001b[K\u001b[91m492 \u001b[39m (_, Some(rhs_mp)) \u001b[1mif\u001b[0m rhs_mp.kind.\u001b[91mis_change\u001b[0m() => { \u001b[92m492 \u001b[39m (_, Some(rhs_mp)) \u001b[1mif\u001b[0m rhs_mp.kind.\u001b[92mis_novel\u001b[0m() => { \u001b[m\r\n:\u001b[K"] [47.947911, "o", "\r\u001b[K \u001b[KESC\b\b\bESC\u001b[KO\bO\u001b[KB\bB\r\u001b[K493 rhs_section.push(rhs_mp); 493 rhs_section.push(rhs_mp); \u001b[m\r\n:\u001b[K"] [48.219369, "o", "\r\u001b[K \u001b[KESC\b\b\bESC\u001b[KO\bO\u001b[KB\bB\r\u001b[K"] [48.219504, "o", "494 rhs_iter.next(); 494 rhs_iter.next(); \u001b[m\r\n:\u001b[K"] [48.511357, "o", "\r\u001b[K \u001b[KESC\b\b\bESC\u001b[KO\bO\u001b[KB\bB\r\u001b[K495 } 495 } \u001b[m\r\n:\u001b[K"] [48.811117, "o", "\r\u001b[K \u001b[KESC\b\b\bESC\u001b[KO\bO\u001b[KB\bB\r\u001b[K\u001b[m\r\n:\u001b[K"] [49.116431, "o", "\r\u001b[K \u001b[KESC\b\b\bESC\u001b[KO\bO\u001b[KB\bB\r\u001b[K"] [49.116552, "o", "\u001b[1m\u001b[93msrc/line_parser.rs\u001b[39m\u001b[0m --- 1/2 --- Rust\u001b[m\r\n:\u001b[K"] [49.900367, "o", "\r\u001b[K \u001b[KESC\b\b\bESC\u001b[KO\bO\u001b[KB\bB\r\u001b[K"] [49.900419, "o", "257 \u001b[1mlet\u001b[0m positions = change_positions(\u001b[95m\"foo\"\u001b[0m, \u001b[95m\"foo\"\u001b[0m); 257 \u001b[1mlet\u001b[0m positions = change_positions(\u001b[95m\"foo\"\u001b[0m, \u001b[95m\"foo\"\u001b[0m); \u001b[m\r\n:\u001b[K"] [50.151024, "o", "\r\u001b[K \u001b[KESC\b\b\bESC\u001b[KO\bO\u001b[KB\bB\r\u001b[K258 258 \u001b[m\r\n:\u001b[K"] [50.418958, "o", "\r\u001b[K \u001b[KESC\b\b\bESC\u001b[KO\bO\u001b[KB\bB\r\u001b[K259 assert_eq!(positions.len(), \u001b[1m1\u001b[0m); 259 assert_eq!(positions.len(), \u001b[1m1\u001b[0m); \u001b[m\r\n:\u001b[K"] [50.776112, "o", "\r\u001b[K \u001b[KESC\b\b\bESC\u001b[KO\bO\u001b[KB\bB\r\u001b[K\u001b[91m260 \u001b[39m assert!(!positions[\u001b[1m0\u001b[0m].kind.\u001b[91mis_change\u001b[0m()); \u001b[92m260 \u001b[39m assert!(!positions[\u001b[1m0\u001b[0m].kind.\u001b[92mis_novel\u001b[0m()); \u001b[m\r\n:\u001b[K"] [51.087847, "o", "\r\u001b[K \u001b[KESC\b\b\bESC\u001b[KO\bO\u001b[KB\bB\r\u001b[K261 } 261 } \u001b[m\r\n:\u001b[K"] [51.368352, "o", "\r\u001b[K \u001b[KESC\b\b\bESC\u001b[KO\bO\u001b[KB\bB\r\u001b[K"] [51.368527, "o", "262 262 \u001b[m\r\n:\u001b[K"] [51.846789, "o", "\r\u001b[K \u001b[KESC\b\b\bESC\u001b[KO\bO\u001b[KB\bB\r\u001b[K263 #[test] 263 #[test] \u001b[m\r\n:\u001b[K"] [52.220319, "o", "\r\u001b[K \u001b[KESC\b\b\bESC\u001b[KO\bO\u001b[KB\bB\r\u001b[K"] [52.220412, "o", "\u001b[m\r\n:\u001b[K"] [52.529333, "o", "\r\u001b[K \u001b[KESC\b\b\bESC\u001b[KO\bO\u001b[KB\bB\r\u001b[K"] [52.529464, "o", "\u001b[1m\u001b[93msrc/line_parser.rs\u001b[39m\u001b[0m --- 2/2 --- Rust\u001b[m\r\n:\u001b[K"] [53.277786, "o", "\r\u001b[K \u001b[KESC\b\b\bESC\u001b[KO\bO\u001b[KB\bB\r\u001b[K"] [53.277922, "o", "266 \u001b[94;3m// be treated as a change. We're doing a line-based di\u001b[0m 266 \u001b[94;3m// be treated as a change. We're doing a line-based di\u001b[0m\u001b[m\r\n:\u001b[K"] [53.580018, "o", "\r\u001b[K \u001b[KESC\b\b\bESC\u001b[KO\bO\u001b[KB\bB\r\u001b[K\u001b[2m... \u001b[0m\u001b[94;3mff and\u001b[0m \u001b[2m... \u001b[0m\u001b[94;3mff and\u001b[0m \u001b[m\r\n:\u001b[K"] [53.86212, "o", "\r\u001b[K \u001b[KESC\b\b\bESC\u001b[KO\bO\u001b[KB\bB\r\u001b[K"] [53.86232, "o", "267 \u001b[94;3m// the lines are different.\u001b[0m 267 \u001b[94;3m// the lines are different.\u001b[0m \u001b[m\r\n:\u001b[K"] [54.144105, "o", "\r\u001b[K \u001b[KESC\b\b\bESC\u001b[KO\bO\u001b[KB\bB\r\u001b[K"] [54.144228, "o", "268 \u001b[1mlet\u001b[0m positions = change_positions(\u001b[95m\"foo\"\u001b[0m, \u001b[95m\" foo\"\u001b[0m); 268 \u001b[1mlet\u001b[0m positions = change_positions(\u001b[95m\"foo\"\u001b[0m, \u001b[95m\" foo\"\u001b[0m); \u001b[m\r\n:\u001b[K"] [54.424201, "o", "\r\u001b[K \u001b[KESC\b\b\bESC\u001b[KO\bO\u001b[KB\bB\r\u001b[K\u001b[91m269 \u001b[39m assert!(positions[\u001b[1m0\u001b[0m].kind.\u001b[91mis_change\u001b[0m()); \u001b[92m269 \u001b[39m assert!(positions[\u001b[1m0\u001b[0m].kind.\u001b[92mis_novel\u001b[0m()); \u001b[m\r\n:\u001b[K"] [54.721199, "o", "\r\u001b[K \u001b[KESC\b\b\bESC\u001b[KO\bO\u001b[KB\bB\r\u001b[K270 } 270 } \u001b[m\r\n:\u001b[K"] [55.5252, "o", "\r\u001b[K \u001b[KESC\b\b\bESC\u001b[KO\bO\u001b[KB\bB\r\u001b[K271 271 \u001b[m\r\n:\u001b[K"] [55.808335, "o", "\r\u001b[K \u001b[KESC\b\b\bESC\u001b[KO\bO\u001b[KB\bB\r\u001b[K"] [55.808517, "o", "272 #[test] 272 #[test] \u001b[m\r\n:\u001b[K"] [56.134264, "o", "\r\u001b[K \u001b[KESC\b\b\bESC\u001b[KO\bO\u001b[KB\bB\r\u001b[K"] [56.134383, "o", "273 \u001b[1mfn\u001b[0m test_no_changes_trailing_newlines() { 273 \u001b[1mfn\u001b[0m test_no_changes_trailing_newlines() { \u001b[m\r\n:\u001b[K"] [56.488093, "o", "\r\u001b[K \u001b[KESC\b\b\bESC\u001b[KO\bO\u001b[KB\bB\r\u001b[K274 \u001b[1mlet\u001b[0m positions = change_positions(\u001b[95m\"foo\\n\"\u001b[0m, \u001b[95m\"foo\\n\"\u001b[0m); 274 \u001b[1mlet\u001b[0m positions = change_positions(\u001b[95m\"foo\\n\"\u001b[0m, \u001b[95m\"foo\\n\"\u001b[0m); \u001b[m\r\n:\u001b[K"] [56.771359, "o", "\r\u001b[K \u001b[KESC\b\b\bESC\u001b[KO\bO\u001b[KB\bB\r\u001b[K"] [56.771495, "o", "275 275 \u001b[m\r\n:\u001b[K"] [57.0932, "o", "\r\u001b[K \u001b[KESC\b\b\bESC\u001b[KO\bO\u001b[KB\bB\r\u001b[K"] [57.09332, "o", "276 assert_eq!(positions.len(), \u001b[1m1\u001b[0m); 276 assert_eq!(positions.len(), \u001b[1m1\u001b[0m); \u001b[m\r\n:\u001b[K"] [57.380651, "o", "\r\u001b[K \u001b[KESC\b\b\bESC\u001b[KO\bO\u001b[KB\bB\r\u001b[K"] [57.380791, "o", "\u001b[91m277 \u001b[39m assert!(!positions[\u001b[1m0\u001b[0m].kind.\u001b[91mis_change\u001b[0m()); \u001b[92m277 \u001b[39m assert!(!positions[\u001b[1m0\u001b[0m].kind.\u001b[92mis_novel\u001b[0m()); \u001b[m\r\n:\u001b[K"] [57.676578, "o", "\r\u001b[K \u001b[KESC\b\b\bESC\u001b[KO\bO\u001b[KB\bB\r\u001b[K278 } 278 } \u001b[m\r\n:\u001b[K"] [57.991349, "o", "\r\u001b[K \u001b[KESC\b\b\bESC\u001b[KO\bO\u001b[KB\bB\r\u001b[K"] [57.991482, "o", "279 279 \u001b[m\r\n:\u001b[K"] [58.252298, "o", "\r\u001b[K \u001b[KESC\b\b\bESC\u001b[KO\bO\u001b[KB\bB\r\u001b[K280 #[test] 280 #[test] \u001b[m\r\n:\u001b[K"] [58.575488, "o", "\r\u001b[K \u001b[KESC\b\b\bESC\u001b[KO\bO\u001b[KB\bB\r\u001b[K281 \u001b[1mfn\u001b[0m test_novel_lhs_trailing_newlines() { 281 \u001b[1mfn\u001b[0m test_novel_lhs_trailing_newlines() { \u001b[m\r\n:\u001b[K"] [58.817923, "o", "\r\u001b[K \u001b[KESC\b\b\bESC\u001b[KO\bO\u001b[KB\bB\r\u001b[K"] [58.818047, "o", "282 \u001b[1mlet\u001b[0m positions = change_positions(\u001b[95m\"foo\\n\"\u001b[0m, \u001b[95m\"\"\u001b[0m); 282 \u001b[1mlet\u001b[0m positions = change_positions(\u001b[95m\"foo\\n\"\u001b[0m, \u001b[95m\"\"\u001b[0m); \u001b[m\r\n:\u001b[K"] [59.083857, "o", "\r\u001b[K \u001b[KESC\b\b\bESC\u001b[KO\bO\u001b[KB\bB\r\u001b[K283 283 \u001b[m\r\n:\u001b[K"] [59.373054, "o", "\r\u001b[K \u001b[KESC\b\b\bESC\u001b[KO\bO\u001b[KB\bB\r\u001b[K284 assert_eq!(positions.len(), \u001b[1m1\u001b[0m); 284 assert_eq!(positions.len(), \u001b[1m1\u001b[0m); \u001b[m\r\n:\u001b[K"] [59.651963, "o", "\r\u001b[K \u001b[KESC\b\b\bESC\u001b[KO\bO\u001b[KB\bB\r\u001b[K\u001b[91m285 \u001b[39m assert!(positions[\u001b[1m0\u001b[0m].kind.\u001b[91mis_change\u001b[0m()); \u001b[92m285 \u001b[39m assert!(positions[\u001b[1m0\u001b[0m].kind.\u001b[92mis_novel\u001b[0m()); \u001b[m\r\n:\u001b[K"] [59.890377, "o", "\r\u001b[K \u001b[KESC\b\b\bESC\u001b[KO\bO\u001b[KB\bB\r\u001b[K"] [59.890501, "o", "286 } 286 } \u001b[m\r\n:\u001b[K"] [60.155924, "o", "\r\u001b[K \u001b[KESC\b\b\bESC\u001b[KO\bO\u001b[KB\bB\r\u001b[K287 287 \u001b[m\r\n:\u001b[K"] [60.399366, "o", "\r\u001b[K \u001b[KESC\b\b\bESC\u001b[KO\bO\u001b[KB\bB\r\u001b[K"] [60.399523, "o", "288 #[test] 288 #[test] \u001b[m\r\n:\u001b[K"] [60.648342, "o", "\r\u001b[K \u001b[KESC\b\b\bESC\u001b[KO\bO\u001b[KB\bB\r\u001b[K"] [60.648484, "o", "289 \u001b[1mfn\u001b[0m test_positions_novel_lhs() { 289 \u001b[1mfn\u001b[0m test_positions_novel_lhs() { \u001b[m\r\n:\u001b[K"] [60.914846, "o", "\r\u001b[K \u001b[KESC\b\b\bESC\u001b[KO\bO\u001b[KB\bB\r\u001b[K290 \u001b[1mlet\u001b[0m positions = change_positions(\u001b[95m\"foo\"\u001b[0m, \u001b[95m\"\"\u001b[0m); 290 \u001b[1mlet\u001b[0m positions = change_positions(\u001b[95m\"foo\"\u001b[0m, \u001b[95m\"\"\u001b[0m); \u001b[m\r\n:\u001b[K"] [61.196992, "o", "\r\u001b[K \u001b[KESC\b\b\bESC\u001b[KO\bO\u001b[KB\bB\r\u001b[K"] [61.197123, "o", "291 291 \u001b[m\r\n:\u001b[K"] [61.43917, "o", "\r\u001b[K \u001b[KESC\b\b\bESC\u001b[KO\bO\u001b[KB\bB\r\u001b[K292 assert_eq!(positions.len(), \u001b[1m1\u001b[0m); 292 assert_eq!(positions.len(), \u001b[1m1\u001b[0m); \u001b[m\r\n:\u001b[K"] [61.678722, "o", "\r\u001b[K \u001b[KESC\b\b\bESC\u001b[KO\bO\u001b[KB\bB\r\u001b[K"] [61.678806, "o", "\u001b[91m293 \u001b[39m assert!(positions[\u001b[1m0\u001b[0m].kind.\u001b[91mis_change\u001b[0m()); \u001b[92m293 \u001b[39m assert!(positions[\u001b[1m0\u001b[0m].kind.\u001b[92mis_novel\u001b[0m()); \u001b[m\r\n:\u001b[K"] [61.934891, "o", "\r\u001b[K \u001b[KESC\b\b\bESC\u001b[KO\bO\u001b[KB\bB\r\u001b[K"] [61.935035, "o", "294 } 294 } \u001b[m\r\n:\u001b[K"] [62.191021, "o", "\r\u001b[K \u001b[KESC\b\b\bESC\u001b[KO\bO\u001b[KB\bB\r\u001b[K295 } 295 } \u001b[m\r\n:\u001b[K"] [62.428708, "o", "\r\u001b[K \u001b[KESC\b\b\bESC\u001b[KO\bO\u001b[KB\bB\r\u001b[K\u001b[m\r\n:\u001b[K"] [62.670875, "o", "\r\u001b[K \u001b[KESC\b\b\bESC\u001b[KO\bO\u001b[KB\bB\r\u001b[K"] [63.441112, "o", "\r\u001b[K\u001b[?1l\u001b>"] [63.443863, "o", "\u001b[1m\u001b[7m%\u001b[27m\u001b[1m\u001b[0m \r \r"] [63.444894, "o", "\u001b]7;file:///home/wilfred/projects/difftastic\u001b\\"] [63.444993, "o", "\r\u001b[0m\u001b[27m\u001b[24m\u001b[J$ \u001b[K\u001b[?2004h"] [67.143027, "o", "# Want to learn more? Check out the GitHub repository for installation instructions:"] [67.375589, "o", "\u001b[?2004l\r\r\n"] [67.376115, "o", "\u001b[1m\u001b[7m%\u001b[27m\u001b[1m\u001b[0m \r \r"] [67.376986, "o", "\u001b]7;file:///home/wilfred/projects/difftastic\u001b\\"] [67.377235, "o", "\r\u001b[0m\u001b[27m\u001b[24m\u001b[J$ \u001b[K\u001b[?2004h"] [70.297425, "o", "# https://github.com/wilfred/difftastic"] [70.673514, "o", "\u001b[?2004l\r\r\n"] [70.673731, "o", "\u001b[1m\u001b[7m%\u001b[27m\u001b[1m\u001b[0m \r \r"] [70.675, "o", "\u001b]7;file:///home/wilfred/projects/difftastic\u001b\\"]