conventional-changelog-lint
Version:
Lint commit messages against a conventional-changelog preset and ruleset
95 lines (74 loc) • 2.29 kB
JavaScript
Object.defineProperty(exports, "__esModule", {
value: true
});
var _slicedToArray2 = require('babel-runtime/helpers/slicedToArray');
var _slicedToArray3 = _interopRequireDefault(_slicedToArray2);
var _toConsumableArray2 = require('babel-runtime/helpers/toConsumableArray');
var _toConsumableArray3 = _interopRequireDefault(_toConsumableArray2);
var _pos = require('pos');
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var lexer = new _pos.Lexer();
var tagger = new _pos.Tagger();
var tenses = {
'past-tense': ['VB', 'VBD'],
'present-imperative': ['VB', 'VBN', 'VBP'],
'present-participle': ['VB', 'VBG'],
'present-third-person': ['VB', 'VBZ']
};
function getLemmata(input) {
try {
return lexer.lex(input);
} catch (err) {
return [];
}
}
function getTags(lemmata) {
try {
return tagger.tag(lemmata);
} catch (err) {
return [];
}
}
exports.default = function (input, allowed) {
var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
var lemmata = getLemmata(input);
var tagged = getTags(lemmata);
var verbs = tagged.filter(function (tag) {
return tag[1][0] === 'V';
});
var tags = allowed.reduce(function (registry, name) {
return [].concat((0, _toConsumableArray3.default)(registry), (0, _toConsumableArray3.default)(tenses[name] || []));
}, []);
var offending = verbs.filter(function (verb) {
var _verb = (0, _slicedToArray3.default)(verb, 2),
tag = _verb[1];
return tags.length > 0 && tags.indexOf(tag) === -1;
}).filter(function (verb) {
var _verb2 = (0, _slicedToArray3.default)(verb, 1),
word = _verb2[0];
return !(options.ignored || []).some(function (ignored) {
return ignored.indexOf(word) > -1;
});
}).filter(Boolean).map(function (verb) {
var _verb3 = (0, _slicedToArray3.default)(verb, 2),
lemma = _verb3[0],
tag = _verb3[1];
var tense = Object.entries(tenses).filter(function (item) {
var _item = (0, _slicedToArray3.default)(item, 2),
tags = _item[1];
return tags.indexOf(tag) > -1;
}).map(function (item) {
return item[0];
})[0];
return {
lemma,
tense
};
});
return {
matches: offending.length === 0,
offending
};
};
module.exports = exports['default'];
;