eslint-plugin-jsdoc 39.7.1 → 39.7.3

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.
package/README.md CHANGED
@@ -11296,6 +11296,14 @@ function quux (foo) {
11296
11296
  }
11297
11297
  // "jsdoc/require-description-complete-sentence": ["error"|"warn", {"tags":["template"]}]
11298
11298
  // Message: Sentence should start with an uppercase character.
11299
+
11300
+ /**
11301
+ * Just a component.
11302
+ * @param {Object} props Свойства.
11303
+ * @return {ReactElement}.
11304
+ */
11305
+ function quux () {}
11306
+ // Message: Sentence must be more than punctuation.
11299
11307
  ````
11300
11308
 
11301
11309
  The following patterns are not considered problems:
@@ -11355,7 +11363,7 @@ function quux () {
11355
11363
  }
11356
11364
 
11357
11365
  /**
11358
- * Foo. {@see Math.sin}.
11366
+ * Foo {@see Math.sin}.
11359
11367
  */
11360
11368
  function quux () {
11361
11369
 
@@ -11627,6 +11635,13 @@ export default (foo) => {
11627
11635
 
11628
11636
  /** @file To learn more,
11629
11637
  * see: https://github.com/d3/d3-ease. */
11638
+
11639
+ /**
11640
+ * This is a complete sentence...
11641
+ */
11642
+ function quux () {
11643
+
11644
+ }
11630
11645
  ````
11631
11646
 
11632
11647
 
@@ -24,12 +24,14 @@ const extractSentences = (text, abbreviationsRegex) => {
24
24
  // Remove custom abbreviations
25
25
  .replace(abbreviationsRegex, '');
26
26
  const sentenceEndGrouping = /([.?!])(?:\s+|$)/ug;
27
- const puncts = txt.matchAll(sentenceEndGrouping);
27
+ const puncts = [...txt.matchAll(sentenceEndGrouping)].map(sentEnd => {
28
+ return sentEnd[0];
29
+ });
28
30
  return txt.split(/[.?!](?:\s+|$)/u)
29
31
 
30
32
  // Re-add the dot.
31
33
  .map((sentence, idx) => {
32
- return /^\s*$/u.test(sentence) ? sentence : `${sentence}${puncts[idx] || ''}`;
34
+ return !puncts[idx] && /^\s*$/u.test(sentence) ? sentence : `${sentence}${puncts[idx] || ''}`;
33
35
  });
34
36
  };
35
37
  const isNewLinePrecededByAPeriod = text => {
@@ -91,6 +93,11 @@ const validateDescription = (description, reportOrig, jsdocNode, abbreviationsRe
91
93
  tagObj.column = 0;
92
94
  reportOrig(msg, fixer, tagObj);
93
95
  };
96
+ if (sentences.some(sentence => {
97
+ return /^[.?!]$/u.test(sentence);
98
+ })) {
99
+ report('Sentence must be more than punctuation.', null, tag);
100
+ }
94
101
  if (sentences.some(sentence => {
95
102
  return !/^\s*$/u.test(sentence) && !isCapitalized(sentence) && !isTable(sentence);
96
103
  })) {
@@ -1 +1 @@
1
- {"version":3,"file":"requireDescriptionCompleteSentence.js","names":["otherDescriptiveTags","Set","extractParagraphs","text","split","extractSentences","abbreviationsRegex","txt","replace","sentenceEndGrouping","puncts","matchAll","map","sentence","idx","test","isNewLinePrecededByAPeriod","lastLineEndsSentence","lines","some","line","isCapitalized","str","toUpperCase","isTable","charAt","capitalize","slice","validateDescription","description","reportOrig","jsdocNode","sourceCode","tag","newlineBeforeCapsAssumesBadSentenceEnd","paragraphs","filter","Boolean","paragraph","parIdx","sentences","fix","fixer","getText","pop","RegExp","escapeStringRegexp","sentence_","beginning","reg","_$0","$1","replaceText","report","msg","tagObj","source","number","column","paragraphNoAbbreviations","iterateJsdoc","context","jsdoc","utils","options","abbreviations","length","abbreviation","join","getDescription","forEachPreferredTag","matchingJsdocTag","desc","name","getTagDescription","trim","tagsWithNames","getTagsByType","tags","tagsWithoutNames","filterTags","tagName","has","hasOptionTag","trimEnd","iterateAllJsdocs","meta","docs","url","fixable","schema","additionalProperties","properties","items","type"],"sources":["../../src/rules/requireDescriptionCompleteSentence.js"],"sourcesContent":["import escapeStringRegexp from 'escape-string-regexp';\nimport iterateJsdoc from '../iterateJsdoc';\n\nconst otherDescriptiveTags = new Set([\n // 'copyright' and 'see' might be good addition, but as the former may be\n // sensitive text, and the latter may have just a link, they are not\n // included by default\n 'summary', 'file', 'fileoverview', 'overview', 'classdesc', 'todo',\n 'deprecated', 'throws', 'exception', 'yields', 'yield',\n]);\n\nconst extractParagraphs = (text) => {\n return text.split(/(?<![;:])\\n\\n/u);\n};\n\nconst extractSentences = (text, abbreviationsRegex) => {\n const txt = text\n\n // Remove all {} tags.\n .replace(/\\{[\\s\\S]*?\\}\\s*/gu, '')\n\n // Remove custom abbreviations\n .replace(abbreviationsRegex, '');\n\n const sentenceEndGrouping = /([.?!])(?:\\s+|$)/ug;\n\n const puncts = txt.matchAll(sentenceEndGrouping);\n\n return txt\n\n .split(/[.?!](?:\\s+|$)/u)\n\n // Re-add the dot.\n .map((sentence, idx) => {\n return /^\\s*$/u.test(sentence) ? sentence : `${sentence}${puncts[idx] || ''}`;\n });\n};\n\nconst isNewLinePrecededByAPeriod = (text) => {\n let lastLineEndsSentence;\n\n const lines = text.split('\\n');\n\n return !lines.some((line) => {\n if (lastLineEndsSentence === false && /^[A-Z][a-z]/u.test(line)) {\n return true;\n }\n\n lastLineEndsSentence = /[.:?!|]$/u.test(line);\n\n return false;\n });\n};\n\nconst isCapitalized = (str) => {\n return str[0] === str[0].toUpperCase();\n};\n\nconst isTable = (str) => {\n return str.charAt() === '|';\n};\n\nconst capitalize = (str) => {\n return str.charAt(0).toUpperCase() + str.slice(1);\n};\n\nconst validateDescription = (\n description, reportOrig, jsdocNode, abbreviationsRegex,\n sourceCode, tag, newlineBeforeCapsAssumesBadSentenceEnd,\n) => {\n if (!description || (/^\\n+$/u).test(description)) {\n return false;\n }\n\n const paragraphs = extractParagraphs(description).filter(Boolean);\n\n return paragraphs.some((paragraph, parIdx) => {\n const sentences = extractSentences(paragraph, abbreviationsRegex);\n\n const fix = (fixer) => {\n let text = sourceCode.getText(jsdocNode);\n\n if (!/[.:?!]$/u.test(paragraph)) {\n const line = paragraph.split('\\n').filter(Boolean).pop();\n\n text = text.replace(new RegExp(`${escapeStringRegexp(line)}$`, 'mu'), `${line}.`);\n }\n\n for (const sentence of sentences.filter((sentence_) => {\n return !(/^\\s*$/u).test(sentence_) && !isCapitalized(sentence_) &&\n !isTable(sentence_);\n })) {\n const beginning = sentence.split('\\n')[0];\n\n if (tag.tag) {\n const reg = new RegExp(`(@${escapeStringRegexp(tag.tag)}.*)${escapeStringRegexp(beginning)}`, 'u');\n\n text = text.replace(reg, (_$0, $1) => {\n return $1 + capitalize(beginning);\n });\n } else {\n text = text.replace(new RegExp('((?:[.!?]|\\\\*|\\\\})\\\\s*)' + escapeStringRegexp(beginning), 'u'), '$1' + capitalize(beginning));\n }\n }\n\n return fixer.replaceText(jsdocNode, text);\n };\n\n const report = (msg, fixer, tagObj) => {\n if ('line' in tagObj) {\n tagObj.line += parIdx * 2;\n } else {\n tagObj.source[0].number += parIdx * 2;\n }\n\n // Avoid errors if old column doesn't exist here\n tagObj.column = 0;\n reportOrig(msg, fixer, tagObj);\n };\n\n if (sentences.some((sentence) => {\n return !(/^\\s*$/u).test(sentence) && !isCapitalized(sentence) && !isTable(sentence);\n })) {\n report('Sentence should start with an uppercase character.', fix, tag);\n }\n\n const paragraphNoAbbreviations = paragraph.replace(abbreviationsRegex, '');\n\n if (!/[.!?|]\\s*$/u.test(paragraphNoAbbreviations)) {\n report('Sentence must end with a period.', fix, tag);\n\n return true;\n }\n\n if (newlineBeforeCapsAssumesBadSentenceEnd && !isNewLinePrecededByAPeriod(paragraphNoAbbreviations)) {\n report('A line of text is started with an uppercase character, but preceding line does not end the sentence.', null, tag);\n\n return true;\n }\n\n return false;\n });\n};\n\nexport default iterateJsdoc(({\n sourceCode,\n context,\n jsdoc,\n report,\n jsdocNode,\n utils,\n}) => {\n const options = context.options[0] || {};\n const {\n abbreviations = [],\n newlineBeforeCapsAssumesBadSentenceEnd = false,\n } = options;\n\n const abbreviationsRegex = abbreviations.length ?\n new RegExp('\\\\b' + abbreviations.map((abbreviation) => {\n return escapeStringRegexp(abbreviation.replace(/\\.$/ug, '') + '.');\n }).join('|') + '(?:$|\\\\s)', 'gu') :\n '';\n\n const {\n description,\n } = utils.getDescription();\n\n if (validateDescription(description, report, jsdocNode, abbreviationsRegex, sourceCode, {\n line: jsdoc.source[0].number + 1,\n }, newlineBeforeCapsAssumesBadSentenceEnd)) {\n return;\n }\n\n utils.forEachPreferredTag('description', (matchingJsdocTag) => {\n const desc = `${matchingJsdocTag.name} ${utils.getTagDescription(matchingJsdocTag)}`.trim();\n validateDescription(desc, report, jsdocNode, abbreviationsRegex, sourceCode, matchingJsdocTag, newlineBeforeCapsAssumesBadSentenceEnd);\n }, true);\n\n const {\n tagsWithNames,\n } = utils.getTagsByType(jsdoc.tags);\n const tagsWithoutNames = utils.filterTags(({\n tag: tagName,\n }) => {\n return otherDescriptiveTags.has(tagName) ||\n utils.hasOptionTag(tagName) && !tagsWithNames.some(({\n tag,\n }) => {\n // If user accidentally adds tags with names (or like `returns`\n // get parsed as having names), do not add to this list\n return tag === tagName;\n });\n });\n\n tagsWithNames.some((tag) => {\n const desc = utils.getTagDescription(tag).replace(/^- /u, '').trimEnd();\n\n return validateDescription(desc, report, jsdocNode, abbreviationsRegex, sourceCode, tag, newlineBeforeCapsAssumesBadSentenceEnd);\n });\n\n tagsWithoutNames.some((tag) => {\n const desc = `${tag.name} ${utils.getTagDescription(tag)}`.trim();\n\n return validateDescription(desc, report, jsdocNode, abbreviationsRegex, sourceCode, tag, newlineBeforeCapsAssumesBadSentenceEnd);\n });\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Requires that block description, explicit `@description`, and `@param`/`@returns` tag descriptions are written in complete sentences.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-require-description-complete-sentence',\n },\n fixable: 'code',\n schema: [\n {\n additionalProperties: false,\n properties: {\n abbreviations: {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n newlineBeforeCapsAssumesBadSentenceEnd: {\n type: 'boolean',\n },\n tags: {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"mappings":"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"}
1
+ {"version":3,"file":"requireDescriptionCompleteSentence.js","names":["otherDescriptiveTags","Set","extractParagraphs","text","split","extractSentences","abbreviationsRegex","txt","replace","sentenceEndGrouping","puncts","matchAll","map","sentEnd","sentence","idx","test","isNewLinePrecededByAPeriod","lastLineEndsSentence","lines","some","line","isCapitalized","str","toUpperCase","isTable","charAt","capitalize","slice","validateDescription","description","reportOrig","jsdocNode","sourceCode","tag","newlineBeforeCapsAssumesBadSentenceEnd","paragraphs","filter","Boolean","paragraph","parIdx","sentences","fix","fixer","getText","pop","RegExp","escapeStringRegexp","sentence_","beginning","reg","_$0","$1","replaceText","report","msg","tagObj","source","number","column","paragraphNoAbbreviations","iterateJsdoc","context","jsdoc","utils","options","abbreviations","length","abbreviation","join","getDescription","forEachPreferredTag","matchingJsdocTag","desc","name","getTagDescription","trim","tagsWithNames","getTagsByType","tags","tagsWithoutNames","filterTags","tagName","has","hasOptionTag","trimEnd","iterateAllJsdocs","meta","docs","url","fixable","schema","additionalProperties","properties","items","type"],"sources":["../../src/rules/requireDescriptionCompleteSentence.js"],"sourcesContent":["import escapeStringRegexp from 'escape-string-regexp';\nimport iterateJsdoc from '../iterateJsdoc';\n\nconst otherDescriptiveTags = new Set([\n // 'copyright' and 'see' might be good addition, but as the former may be\n // sensitive text, and the latter may have just a link, they are not\n // included by default\n 'summary', 'file', 'fileoverview', 'overview', 'classdesc', 'todo',\n 'deprecated', 'throws', 'exception', 'yields', 'yield',\n]);\n\nconst extractParagraphs = (text) => {\n return text.split(/(?<![;:])\\n\\n/u);\n};\n\nconst extractSentences = (text, abbreviationsRegex) => {\n const txt = text\n\n // Remove all {} tags.\n .replace(/\\{[\\s\\S]*?\\}\\s*/gu, '')\n\n // Remove custom abbreviations\n .replace(abbreviationsRegex, '');\n\n const sentenceEndGrouping = /([.?!])(?:\\s+|$)/ug;\n\n const puncts = [\n ...txt.matchAll(sentenceEndGrouping),\n ].map((sentEnd) => {\n return sentEnd[0];\n });\n\n return txt\n .split(/[.?!](?:\\s+|$)/u)\n\n // Re-add the dot.\n .map((sentence, idx) => {\n return !puncts[idx] && /^\\s*$/u.test(sentence) ? sentence : `${sentence}${puncts[idx] || ''}`;\n });\n};\n\nconst isNewLinePrecededByAPeriod = (text) => {\n let lastLineEndsSentence;\n\n const lines = text.split('\\n');\n\n return !lines.some((line) => {\n if (lastLineEndsSentence === false && /^[A-Z][a-z]/u.test(line)) {\n return true;\n }\n\n lastLineEndsSentence = /[.:?!|]$/u.test(line);\n\n return false;\n });\n};\n\nconst isCapitalized = (str) => {\n return str[0] === str[0].toUpperCase();\n};\n\nconst isTable = (str) => {\n return str.charAt() === '|';\n};\n\nconst capitalize = (str) => {\n return str.charAt(0).toUpperCase() + str.slice(1);\n};\n\nconst validateDescription = (\n description, reportOrig, jsdocNode, abbreviationsRegex,\n sourceCode, tag, newlineBeforeCapsAssumesBadSentenceEnd,\n) => {\n if (!description || (/^\\n+$/u).test(description)) {\n return false;\n }\n\n const paragraphs = extractParagraphs(description).filter(Boolean);\n\n return paragraphs.some((paragraph, parIdx) => {\n const sentences = extractSentences(paragraph, abbreviationsRegex);\n\n const fix = (fixer) => {\n let text = sourceCode.getText(jsdocNode);\n\n if (!/[.:?!]$/u.test(paragraph)) {\n const line = paragraph.split('\\n').filter(Boolean).pop();\n\n text = text.replace(new RegExp(`${escapeStringRegexp(line)}$`, 'mu'), `${line}.`);\n }\n\n for (const sentence of sentences.filter((sentence_) => {\n return !(/^\\s*$/u).test(sentence_) && !isCapitalized(sentence_) &&\n !isTable(sentence_);\n })) {\n const beginning = sentence.split('\\n')[0];\n\n if (tag.tag) {\n const reg = new RegExp(`(@${escapeStringRegexp(tag.tag)}.*)${escapeStringRegexp(beginning)}`, 'u');\n\n text = text.replace(reg, (_$0, $1) => {\n return $1 + capitalize(beginning);\n });\n } else {\n text = text.replace(new RegExp('((?:[.!?]|\\\\*|\\\\})\\\\s*)' + escapeStringRegexp(beginning), 'u'), '$1' + capitalize(beginning));\n }\n }\n\n return fixer.replaceText(jsdocNode, text);\n };\n\n const report = (msg, fixer, tagObj) => {\n if ('line' in tagObj) {\n tagObj.line += parIdx * 2;\n } else {\n tagObj.source[0].number += parIdx * 2;\n }\n\n // Avoid errors if old column doesn't exist here\n tagObj.column = 0;\n reportOrig(msg, fixer, tagObj);\n };\n\n if (sentences.some((sentence) => {\n return (/^[.?!]$/u).test(sentence);\n })) {\n report('Sentence must be more than punctuation.', null, tag);\n }\n\n if (sentences.some((sentence) => {\n return !(/^\\s*$/u).test(sentence) && !isCapitalized(sentence) && !isTable(sentence);\n })) {\n report('Sentence should start with an uppercase character.', fix, tag);\n }\n\n const paragraphNoAbbreviations = paragraph.replace(abbreviationsRegex, '');\n\n if (!/[.!?|]\\s*$/u.test(paragraphNoAbbreviations)) {\n report('Sentence must end with a period.', fix, tag);\n\n return true;\n }\n\n if (newlineBeforeCapsAssumesBadSentenceEnd && !isNewLinePrecededByAPeriod(paragraphNoAbbreviations)) {\n report('A line of text is started with an uppercase character, but preceding line does not end the sentence.', null, tag);\n\n return true;\n }\n\n return false;\n });\n};\n\nexport default iterateJsdoc(({\n sourceCode,\n context,\n jsdoc,\n report,\n jsdocNode,\n utils,\n}) => {\n const options = context.options[0] || {};\n const {\n abbreviations = [],\n newlineBeforeCapsAssumesBadSentenceEnd = false,\n } = options;\n\n const abbreviationsRegex = abbreviations.length ?\n new RegExp('\\\\b' + abbreviations.map((abbreviation) => {\n return escapeStringRegexp(abbreviation.replace(/\\.$/ug, '') + '.');\n }).join('|') + '(?:$|\\\\s)', 'gu') :\n '';\n\n const {\n description,\n } = utils.getDescription();\n\n if (validateDescription(description, report, jsdocNode, abbreviationsRegex, sourceCode, {\n line: jsdoc.source[0].number + 1,\n }, newlineBeforeCapsAssumesBadSentenceEnd)) {\n return;\n }\n\n utils.forEachPreferredTag('description', (matchingJsdocTag) => {\n const desc = `${matchingJsdocTag.name} ${utils.getTagDescription(matchingJsdocTag)}`.trim();\n validateDescription(desc, report, jsdocNode, abbreviationsRegex, sourceCode, matchingJsdocTag, newlineBeforeCapsAssumesBadSentenceEnd);\n }, true);\n\n const {\n tagsWithNames,\n } = utils.getTagsByType(jsdoc.tags);\n const tagsWithoutNames = utils.filterTags(({\n tag: tagName,\n }) => {\n return otherDescriptiveTags.has(tagName) ||\n utils.hasOptionTag(tagName) && !tagsWithNames.some(({\n tag,\n }) => {\n // If user accidentally adds tags with names (or like `returns`\n // get parsed as having names), do not add to this list\n return tag === tagName;\n });\n });\n\n tagsWithNames.some((tag) => {\n const desc = utils.getTagDescription(tag).replace(/^- /u, '').trimEnd();\n\n return validateDescription(desc, report, jsdocNode, abbreviationsRegex, sourceCode, tag, newlineBeforeCapsAssumesBadSentenceEnd);\n });\n\n tagsWithoutNames.some((tag) => {\n const desc = `${tag.name} ${utils.getTagDescription(tag)}`.trim();\n\n return validateDescription(desc, report, jsdocNode, abbreviationsRegex, sourceCode, tag, newlineBeforeCapsAssumesBadSentenceEnd);\n });\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Requires that block description, explicit `@description`, and `@param`/`@returns` tag descriptions are written in complete sentences.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-require-description-complete-sentence',\n },\n fixable: 'code',\n schema: [\n {\n additionalProperties: false,\n properties: {\n abbreviations: {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n newlineBeforeCapsAssumesBadSentenceEnd: {\n type: 'boolean',\n },\n tags: {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"mappings":"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"}
package/package.json CHANGED
@@ -120,5 +120,5 @@
120
120
  "test-cov": "cross-env TIMING=1 nyc --reporter text npm run test-no-cov",
121
121
  "test-index": "npm run test-no-cov -- test/rules/index.js"
122
122
  },
123
- "version": "39.7.1"
123
+ "version": "39.7.3"
124
124
  }