requireDescriptionCompleteSentence.js.map 7.5 KB

1
  1. {"version":3,"sources":["../../src/rules/requireDescriptionCompleteSentence.js"],"names":["extractParagraphs","text","split","extractSentences","replace","filter","sentence","test","map","isNewLinePrecededByAPeriod","lastLineEndsSentence","lines","_","some","line","isBoolean","isCapitalized","str","toUpperCase","capitalize","charAt","slice","validateDescription","description","report","jsdocNode","sourceCode","tag","paragraphs","paragraph","sentences","fix","fixer","getText","last","RegExp","escapeRegExp","beginning","reg","$0","$1","sentence_","replaceText","jsdoc","tags","includes","trimStart"],"mappings":"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","sourcesContent":["import _ from 'lodash';\nimport iterateJsdoc from '../iterateJsdoc';\n\nconst extractParagraphs = (text) => {\n return text.split(/\\n\\n/);\n};\n\nconst extractSentences = (text) => {\n return text\n\n // Remove all {} tags.\n .replace(/\\{[\\s\\S]*?\\}\\s*/g, '')\n .split(/[.?!](?:\\s+|$)/)\n\n // Ignore sentences with only whitespaces.\n .filter((sentence) => {\n return !/^\\s*$/.test(sentence);\n })\n\n // Re-add the dot.\n .map((sentence) => {\n return sentence + '.';\n });\n};\n\nconst isNewLinePrecededByAPeriod = (text) => {\n let lastLineEndsSentence;\n\n const lines = text.split('\\n');\n\n return !_.some(lines, (line) => {\n if (_.isBoolean(lastLineEndsSentence) && !lastLineEndsSentence && /^[A-Z]/.test(line)) {\n return true;\n }\n\n lastLineEndsSentence = /[.:?!]$/.test(line);\n\n return false;\n });\n};\n\nconst isCapitalized = (str) => {\n return str[0] === str[0].toUpperCase();\n};\n\nconst capitalize = (str) => {\n return str.charAt(0).toUpperCase() + str.slice(1);\n};\n\nconst validateDescription = (description, report, jsdocNode, sourceCode, tag) => {\n if (!description) {\n return false;\n }\n\n const paragraphs = extractParagraphs(description);\n\n return _.some(paragraphs, (paragraph) => {\n const sentences = extractSentences(paragraph);\n\n const fix = (fixer) => {\n let text = sourceCode.getText(jsdocNode);\n\n if (!/[.:?!]$/.test(paragraph)) {\n const line = _.last(paragraph.split('\\n'));\n\n text = text.replace(new RegExp(_.escapeRegExp(line) + '$', 'm'), line + '.');\n }\n\n for (const sentence of sentences.filter((sentence_) => {\n return !isCapitalized(sentence_);\n })) {\n const beginning = sentence.split('\\n')[0];\n\n if (tag) {\n const reg = new RegExp('(@' + _.escapeRegExp(tag) + '.*)' + _.escapeRegExp(beginning));\n\n text = text.replace(reg, ($0, $1) => {\n return $1 + capitalize(beginning);\n });\n } else {\n text = text.replace(beginning, capitalize(beginning));\n }\n }\n\n return fixer.replaceText(jsdocNode, text);\n };\n\n if (_.some(sentences, (sentence) => {\n return !isCapitalized(sentence);\n })) {\n report('Sentence should start with an uppercase character.', fix);\n }\n\n if (!/[.!?]$/.test(paragraph)) {\n report('Sentence must end with a period.', fix);\n\n return true;\n }\n\n if (!isNewLinePrecededByAPeriod(paragraph)) {\n report('A line of text is started with an uppercase character, but preceding line does not end the sentence.');\n\n return true;\n }\n\n return false;\n });\n};\n\nexport default iterateJsdoc(({\n sourceCode,\n jsdoc,\n report,\n jsdocNode\n}) => {\n if (validateDescription(jsdoc.description, report, jsdocNode, sourceCode)) {\n return;\n }\n\n const tags = _.filter(jsdoc.tags, (tag) => {\n return _.includes(['param', 'arg', 'argument', 'returns', 'return'], tag.tag);\n });\n\n _.some(tags, (tag) => {\n const description = _.trimStart(tag.description, '- ');\n\n return validateDescription(description, report, jsdocNode, sourceCode, tag.tag);\n });\n});\n"],"file":"requireDescriptionCompleteSentence.js"}