eslint-plugin-jsdoc 3.9.0 → 3.9.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -17,7 +17,7 @@ var extractParagraphs = function extractParagraphs(text) {
17
17
 
18
18
  var extractSentences = function extractSentences(text) {
19
19
  return text // Remove all {} tags.
20
- .replace(/\{[\s\S]*?\}\s*/g, '').split(/[.?!:](?:\s+|$)/) // Ignore sentences with only whitespaces.
20
+ .replace(/\{[\s\S]*?\}\s*/g, '').split(/[.?!](?:\s+|$)/) // Ignore sentences with only whitespaces.
21
21
  .filter(function (sentence) {
22
22
  return !/^\s*$/.test(sentence);
23
23
  }) // Re-add the dot.
@@ -1 +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"}
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"}
package/package.json CHANGED
@@ -60,5 +60,5 @@
60
60
  "lint": "eslint ./src ./test",
61
61
  "test": "mocha --recursive --compilers js:@babel/register"
62
62
  },
63
- "version": "3.9.0"
63
+ "version": "3.9.1"
64
64
  }