UNPKG

canonical

Version:

Canonical code style linter and formatter for JavaScript, SCSS and CSS.

114 lines (77 loc) 3.03 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _trimLeft = require('lodash/string/trimLeft'); var _trimLeft2 = _interopRequireDefault(_trimLeft); var _includes = require('lodash/collection/includes'); var _includes2 = _interopRequireDefault(_includes); var _filter = require('lodash/collection/filter'); var _filter2 = _interopRequireDefault(_filter); var _isBoolean = require('lodash/lang/isBoolean'); var _isBoolean2 = _interopRequireDefault(_isBoolean); var _some = require('lodash/collection/some'); var _some2 = _interopRequireDefault(_some); 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, _some2.default)(lines, function (line) { if ((0, _isBoolean2.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, _some2.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, _filter2.default)(jsdoc.tags, function (tag) { return (0, _includes2.default)(['param', 'returns'], tag.tag); }); (0, _some2.default)(tags, function (tag) { var description = undefined; description = (0, _trimLeft2.default)(tag.description, '- '); return validateDescription(description, report); }); }); module.exports = exports['default']; //# sourceMappingURL=requireDescriptionCompleteSentence.js.map