UNPKG

lint-filter

Version:
107 lines (86 loc) 4 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.getDiffInformation = undefined; var getDiffInformation = exports.getDiffInformation = function () { var _ref2 = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee() { var _ref3 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, _ref3$branch = _ref3.branch, branch = _ref3$branch === undefined ? 'origin/master' : _ref3$branch, hash = _ref3.hash; var diffAgainst; return regeneratorRuntime.wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: _context.t0 = hash; if (_context.t0) { _context.next = 5; break; } _context.next = 4; return (0, _spawn2.default)('git', ['merge-base', branch, 'HEAD']); case 4: _context.t0 = _context.sent; case 5: diffAgainst = _context.t0; _context.t1 = parseFullDiff; _context.next = 9; return (0, _spawn2.default)('git', ['--no-pager', 'diff', '--no-color', diffAgainst.trim()]); case 9: _context.t2 = _context.sent; return _context.abrupt('return', (0, _context.t1)(_context.t2)); case 11: case 'end': return _context.stop(); } } }, _callee, this); })); return function getDiffInformation() { return _ref2.apply(this, arguments); }; }(); exports.parseDiffRanges = parseDiffRanges; exports.parseDiffForFile = parseDiffForFile; exports.parseFullDiff = parseFullDiff; var _lodash = require('lodash'); var _lodash2 = _interopRequireDefault(_lodash); var _spawn = require('./spawn'); var _spawn2 = _interopRequireDefault(_spawn); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _asyncToGenerator(fn) { return function () { var gen = fn.apply(this, arguments); return new Promise(function (resolve, reject) { function step(key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { return Promise.resolve(value).then(function (value) { step("next", value); }, function (err) { step("throw", err); }); } } return step("next"); }); }; } function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } function parseDiffRanges(diff) { var lines = diff.split(/\r\n|[\n\v\f\r\x85\u2028\u2029]/); var ranges = []; var lineNumber = void 0; lines.forEach(function (line) { var matches = /^@@ -\d+,\d+ \+(\d+),\d+ @@/.exec(line); if (matches) lineNumber = --matches[1]; if (lineNumber !== undefined && /^\+/.test(line)) ranges.push(lineNumber); if (lineNumber !== undefined && !/^-/.test(line)) lineNumber++; }); return ranges.reduce(function (previous, current) { var last = previous[previous.length - 1]; if (last && current === last[1] + 1) last[1] = current;else previous.push([current, current]); return previous; }, []); } var filenameRegex = /^a\/([^\n]+) b\/[^\n]+/; function parseDiffForFile(diff) { var matches = filenameRegex.exec(diff); if (matches === null) { return null; } var filename = matches[1]; return { filename: filename, ranges: parseDiffRanges(diff) }; } function parseFullDiff(diff) { return (0, _lodash2.default)(('\n' + diff).split('\ndiff --git ')).map(parseDiffForFile).filter(_lodash2.default.isObject).reduce(function (lastValue, _ref) { var filename = _ref.filename, ranges = _ref.ranges; return _lodash2.default.assign({}, lastValue, _defineProperty({}, filename, lastValue[filename] ? _lodash2.default.concat(lastValue[filename], ranges) : ranges)); }, {}); }