canonical
Version:
Canonical code style linter and formatter for JavaScript, SCSS, CSS and JSON.
114 lines (77 loc) • 3.04 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _trimLeft2 = require('lodash/string/trimLeft');
var _trimLeft3 = _interopRequireDefault(_trimLeft2);
var _includes2 = require('lodash/collection/includes');
var _includes3 = _interopRequireDefault(_includes2);
var _filter2 = require('lodash/collection/filter');
var _filter3 = _interopRequireDefault(_filter2);
var _isBoolean2 = require('lodash/lang/isBoolean');
var _isBoolean3 = _interopRequireDefault(_isBoolean2);
var _some2 = require('lodash/collection/some');
var _some3 = _interopRequireDefault(_some2);
var _iterateJsdoc = require('./../iterateJsdoc');
var _iterateJsdoc2 = _interopRequireDefault(_iterateJsdoc);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var extractParagraphs = undefined,
isNewLinePrecededByAPeriod = undefined,
validateDescription = undefined;
extractParagraphs = function (text) {
return text.split(/\n\n/);
};
isNewLinePrecededByAPeriod = function (text) {
var lastLineEndsSentence = undefined,
lines = undefined;
lines = text.split('\n');
return !(0, _some3.default)(lines, function (line) {
if ((0, _isBoolean3.default)(lastLineEndsSentence) && !lastLineEndsSentence && /^[A-Z]/.test(line)) {
return true;
}
lastLineEndsSentence = /\.$/.test(line);
});
};
validateDescription = function (description, report) {
var paragraphs = undefined;
if (!description) {
return false;
}
paragraphs = extractParagraphs(description);
return (0, _some3.default)(paragraphs, function (paragraph, index) {
if (!/^[A-Z]/.test(paragraph)) {
if (index === 0) {
report('Description must start with an uppercase character.');
} else {
report('Paragraph must start with an uppercase character.');
}
return true;
}
if (!/\.$/.test(paragraph)) {
report('Sentence must end with a period.');
return true;
}
if (!isNewLinePrecededByAPeriod(paragraph)) {
report('A line of text is started with an uppercase character, but preceding line does not end the sentence.');
return true;
}
});
};
exports.default = (0, _iterateJsdoc2.default)(function (_ref) {
var jsdoc = _ref.jsdoc;
var report = _ref.report;
var tags = undefined;
if (validateDescription(jsdoc.description, report)) {
return;
}
tags = (0, _filter3.default)(jsdoc.tags, function (tag) {
return (0, _includes3.default)(['param', 'returns'], tag.tag);
});
(0, _some3.default)(tags, function (tag) {
var description = undefined;
description = (0, _trimLeft3.default)(tag.description, '- ');
return validateDescription(description, report);
});
});
module.exports = exports['default'];
//# sourceMappingURL=requireDescriptionCompleteSentence.js.map