Skip to content

Instantly share code, notes, and snippets.

@vvakame
Created April 10, 2014 09:22
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save vvakame/10360781 to your computer and use it in GitHub Desktop.
Save vvakame/10360781 to your computer and use it in GitHub Desktop.
行単位でdiffが見たい人生だった… https://github.com/kpdecker/jsdiff
require('colors')
var jsdiff = require('diff');
var fs = require("fs");
// var one = 'beep boop';
// var other = 'beep boob blah';
var one = fs.readFileSync("./sampleA.js", {encoding: "utf-8"});
var other = fs.readFileSync("./sampleB.js", {encoding: "utf-8"});
var LineDiff = new jsdiff.Diff(true);
LineDiff.tokenize = function (value) {
return value.split(/^/m);
};
LineDiff.equals = function (left, right) {
return left.trim() === right.trim();
};
var diff = LineDiff.diff(one, other);
// var diff = jsdiff.createPatch("test.js", one, other, "a", "b");
printDiff(diff);
function printDiff(diff) {
function addLineHeader(decorator, str) {
return str.split("\n").map(function (line, index, array) {
if (index === array.length - 1 && line === "") {
return line;
} else {
return decorator + line;
}
}).join("\n");
}
diff.forEach(function (part) {
// green for additions, red for deletions
// grey for common parts
if (part.added) {
process.stderr.write(addLineHeader("+", part.value).green);
} else if (part.removed) {
process.stderr.write(addLineHeader("-", part.value).red);
} else {
process.stderr.write(addLineHeader(" ", part.value).grey);
}
});
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment