UNPKG

canonical

Version:

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

107 lines (72 loc) 2.89 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _trimStart2 = require('lodash/trimStart'); var _trimStart3 = _interopRequireDefault(_trimStart2); var _includes2 = require('lodash/includes'); var _includes3 = _interopRequireDefault(_includes2); var _filter2 = require('lodash/filter'); var _filter3 = _interopRequireDefault(_filter2); var _isBoolean2 = require('lodash/isBoolean'); var _isBoolean3 = _interopRequireDefault(_isBoolean2); var _some2 = require('lodash/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 = function extractParagraphs(text) { return text.split(/\n\n/); }; var isNewLinePrecededByAPeriod = function isNewLinePrecededByAPeriod(text) { var lastLineEndsSentence = undefined; var 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); return false; }); }; var validateDescription = function validateDescription(description, report) { if (!description) { return false; } var 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; } return false; }); }; exports.default = (0, _iterateJsdoc2.default)(function (_ref) { var jsdoc = _ref.jsdoc; var report = _ref.report; if (validateDescription(jsdoc.description, report)) { return; } var tags = (0, _filter3.default)(jsdoc.tags, function (tag) { return (0, _includes3.default)(['param', 'returns'], tag.tag); }); (0, _some3.default)(tags, function (tag) { var description = (0, _trimStart3.default)(tag.description, '- '); return validateDescription(description, report); }); }); module.exports = exports['default']; //# sourceMappingURL=requireDescriptionCompleteSentence.js.map