eslint-plugin-jsdoc 37.4.0 → 37.5.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.
- package/README.md +120 -1
- package/dist/alignTransform.js.map +1 -1
- package/dist/bin/generateRule.js.map +1 -1
- package/dist/exportParser.js.map +1 -1
- package/dist/generateRule.js.map +1 -1
- package/dist/getDefaultTagStructureForMode.js.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/iterateJsdoc.js.map +1 -1
- package/dist/jsdocUtils.js.map +1 -1
- package/dist/rules/checkAccess.js.map +1 -1
- package/dist/rules/checkExamples.js +2 -2
- package/dist/rules/checkExamples.js.map +1 -1
- package/dist/rules/checkIndentation.js.map +1 -1
- package/dist/rules/checkLineAlignment.js.map +1 -1
- package/dist/rules/checkParamNames.js.map +1 -1
- package/dist/rules/checkPropertyNames.js.map +1 -1
- package/dist/rules/checkSyntax.js.map +1 -1
- package/dist/rules/checkTagNames.js.map +1 -1
- package/dist/rules/checkTypes.js.map +1 -1
- package/dist/rules/emptyTags.js.map +1 -1
- package/dist/rules/matchDescription.js +1 -1
- package/dist/rules/matchDescription.js.map +1 -1
- package/dist/rules/matchName.js.map +1 -1
- package/dist/rules/multilineBlocks.js.map +1 -1
- package/dist/rules/newlineAfterDescription.js.map +1 -1
- package/dist/rules/noBadBlocks.js.map +1 -1
- package/dist/rules/noDefaults.js.map +1 -1
- package/dist/rules/noMissingSyntax.js.map +1 -1
- package/dist/rules/noMultiAsterisks.js +25 -5
- package/dist/rules/noMultiAsterisks.js.map +1 -1
- package/dist/rules/noRestrictedSyntax.js.map +1 -1
- package/dist/rules/noTypes.js.map +1 -1
- package/dist/rules/noUndefinedTypes.js +12 -16
- package/dist/rules/noUndefinedTypes.js.map +1 -1
- package/dist/rules/requireAsteriskPrefix.js.map +1 -1
- package/dist/rules/requireDescription.js.map +1 -1
- package/dist/rules/requireDescriptionCompleteSentence.js.map +1 -1
- package/dist/rules/requireExample.js.map +1 -1
- package/dist/rules/requireFileOverview.js.map +1 -1
- package/dist/rules/requireHyphenBeforeParamDescription.js.map +1 -1
- package/dist/rules/requireJsdoc.js.map +1 -1
- package/dist/rules/requireParam.js.map +1 -1
- package/dist/rules/requireProperty.js.map +1 -1
- package/dist/rules/requireReturns.js.map +1 -1
- package/dist/rules/requireReturnsCheck.js.map +1 -1
- package/dist/rules/requireReturnsDescription.js.map +1 -1
- package/dist/rules/requireThrows.js.map +1 -1
- package/dist/rules/requireYields.js.map +1 -1
- package/dist/rules/requireYieldsCheck.js.map +1 -1
- package/dist/rules/tagLines.js.map +1 -1
- package/dist/rules/validTypes.js.map +1 -1
- package/dist/tagNames.js.map +1 -1
- package/package.json +22 -21
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/rules/newlineAfterDescription.js"],"names":["jsdoc","report","context","jsdocNode","sourceCode","indent","utils","always","description","trim","tags","length","options","lastDescriptionLine","getDescription","descriptionEndsWithANewline","test","sourceLines","getText","split","fixer","injectedLine","endsWith","splice","replaceText","join","line","iterateAllJsdocs","meta","docs","url","fixable","schema","enum","type"],"mappings":";;;;;;;AAAA;;;;eAEe,2BAAa,CAAC;AAC3BA,EAAAA,KAD2B;AAE3BC,EAAAA,MAF2B;AAG3BC,EAAAA,OAH2B;AAI3BC,EAAAA,SAJ2B;AAK3BC,EAAAA,UAL2B;AAM3BC,EAAAA,MAN2B;AAO3BC,EAAAA;AAP2B,CAAD,KAQtB;AACJ,MAAIC,MAAJ;;AAEA,MAAI,CAACP,KAAK,CAACQ,WAAN,CAAkBC,IAAlB,EAAD,IAA6B,CAACT,KAAK,CAACU,IAAN,CAAWC,MAA7C,EAAqD;AACnD;AACD;;AAED,MAAI,KAAKT,OAAO,CAACU,OAAjB,EAA0B;AACxBL,IAAAA,MAAM,GAAGL,OAAO,CAACU,OAAR,CAAgB,CAAhB,MAAuB,QAAhC;AACD,GAFD,MAEO;AACLL,IAAAA,MAAM,GAAG,IAAT;AACD;;AAED,QAAM;
|
|
1
|
+
{"version":3,"sources":["../../src/rules/newlineAfterDescription.js"],"names":["jsdoc","report","context","jsdocNode","sourceCode","indent","utils","always","description","trim","tags","length","options","lastDescriptionLine","getDescription","descriptionEndsWithANewline","test","sourceLines","getText","split","fixer","injectedLine","endsWith","splice","replaceText","join","line","iterateAllJsdocs","meta","docs","url","fixable","schema","enum","type"],"mappings":";;;;;;;AAAA;;;;eAEe,2BAAa,CAAC;AAC3BA,EAAAA,KAD2B;AAE3BC,EAAAA,MAF2B;AAG3BC,EAAAA,OAH2B;AAI3BC,EAAAA,SAJ2B;AAK3BC,EAAAA,UAL2B;AAM3BC,EAAAA,MAN2B;AAO3BC,EAAAA;AAP2B,CAAD,KAQtB;AACJ,MAAIC,MAAJ;;AAEA,MAAI,CAACP,KAAK,CAACQ,WAAN,CAAkBC,IAAlB,EAAD,IAA6B,CAACT,KAAK,CAACU,IAAN,CAAWC,MAA7C,EAAqD;AACnD;AACD;;AAED,MAAI,KAAKT,OAAO,CAACU,OAAjB,EAA0B;AACxBL,IAAAA,MAAM,GAAGL,OAAO,CAACU,OAAR,CAAgB,CAAhB,MAAuB,QAAhC;AACD,GAFD,MAEO;AACLL,IAAAA,MAAM,GAAG,IAAT;AACD;;AAED,QAAM;AACJC,IAAAA,WADI;AAEJK,IAAAA;AAFI,MAGFP,KAAK,CAACQ,cAAN,EAHJ;AAIA,QAAMC,2BAA2B,GAAI,SAAD,CAAYC,IAAZ,CAAiBR,WAAjB,CAApC;;AAEA,MAAID,MAAJ,EAAY;AACV,QAAI,CAACQ,2BAAL,EAAkC;AAChC,YAAME,WAAW,GAAGb,UAAU,CAACc,OAAX,CAAmBf,SAAnB,EAA8BgB,KAA9B,CAAoC,IAApC,CAApB;AAEAlB,MAAAA,MAAM,CAAC,mEAAD,EAAuEmB,KAAD,IAAW;AACrF;AACA,cAAMC,YAAY,GAAI,GAAEhB,MAAO,IAAV,IAClBY,WAAW,CAACJ,mBAAD,CAAX,CAAiCS,QAAjC,CAA0C,IAA1C,IAAkD,IAAlD,GAAyD,EADvC,CAArB;AAEAL,QAAAA,WAAW,CAACM,MAAZ,CAAmBV,mBAAmB,GAAG,CAAzC,EAA4C,CAA5C,EAA+CQ,YAA/C;AAEA,eAAOD,KAAK,CAACI,WAAN,CAAkBrB,SAAlB,EAA6Bc,WAAW,CAACQ,IAAZ,CAAiB,IAAjB,CAA7B,CAAP;AACD,OAPK,EAOH;AACDC,QAAAA,IAAI,EAAEb;AADL,OAPG,CAAN;AAUD;AACF,GAfD,MAeO,IAAIE,2BAAJ,EAAiC;AACtC,UAAME,WAAW,GAAGb,UAAU,CAACc,OAAX,CAAmBf,SAAnB,EAA8BgB,KAA9B,CAAoC,IAApC,CAApB;AACAlB,IAAAA,MAAM,CAAC,oEAAD,EAAwEmB,KAAD,IAAW;AACtF;AACAH,MAAAA,WAAW,CAACM,MAAZ,CAAmBV,mBAAnB,EAAwC,CAAxC;AAEA,aAAOO,KAAK,CAACI,WAAN,CAAkBrB,SAAlB,EAA6Bc,WAAW,CAACQ,IAAZ,CAAiB,IAAjB,CAA7B,CAAP;AACD,KALK,EAKH;AACDC,MAAAA,IAAI,EAAEb;AADL,KALG,CAAN;AAQD;AACF,CArDc,EAqDZ;AACDc,EAAAA,gBAAgB,EAAE,IADjB;AAEDC,EAAAA,IAAI,EAAE;AACJC,IAAAA,IAAI,EAAE;AACJrB,MAAAA,WAAW,EAAE,yDADT;AAEJsB,MAAAA,GAAG,EAAE;AAFD,KADF;AAKJC,IAAAA,OAAO,EAAE,YALL;AAMJC,IAAAA,MAAM,EAAE,CACN;AACEC,MAAAA,IAAI,EAAE,CACJ,QADI,EACM,OADN,CADR;AAIEC,MAAAA,IAAI,EAAE;AAJR,KADM,CANJ;AAcJA,IAAAA,IAAI,EAAE;AAdF;AAFL,CArDY,C","sourcesContent":["import iterateJsdoc from '../iterateJsdoc';\n\nexport default iterateJsdoc(({\n jsdoc,\n report,\n context,\n jsdocNode,\n sourceCode,\n indent,\n utils,\n}) => {\n let always;\n\n if (!jsdoc.description.trim() || !jsdoc.tags.length) {\n return;\n }\n\n if (0 in context.options) {\n always = context.options[0] === 'always';\n } else {\n always = true;\n }\n\n const {\n description,\n lastDescriptionLine,\n } = utils.getDescription();\n const descriptionEndsWithANewline = (/\\n\\r?$/u).test(description);\n\n if (always) {\n if (!descriptionEndsWithANewline) {\n const sourceLines = sourceCode.getText(jsdocNode).split('\\n');\n\n report('There must be a newline after the description of the JSDoc block.', (fixer) => {\n // Add the new line\n const injectedLine = `${indent} *` +\n (sourceLines[lastDescriptionLine].endsWith('\\r') ? '\\r' : '');\n sourceLines.splice(lastDescriptionLine + 1, 0, injectedLine);\n\n return fixer.replaceText(jsdocNode, sourceLines.join('\\n'));\n }, {\n line: lastDescriptionLine,\n });\n }\n } else if (descriptionEndsWithANewline) {\n const sourceLines = sourceCode.getText(jsdocNode).split('\\n');\n report('There must be no newline after the description of the JSDoc block.', (fixer) => {\n // Remove the extra line\n sourceLines.splice(lastDescriptionLine, 1);\n\n return fixer.replaceText(jsdocNode, sourceLines.join('\\n'));\n }, {\n line: lastDescriptionLine,\n });\n }\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Enforces a consistent padding of the block description.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-newline-after-description',\n },\n fixable: 'whitespace',\n schema: [\n {\n enum: [\n 'always', 'never',\n ],\n type: 'string',\n },\n ],\n type: 'layout',\n },\n});\n"],"file":"newlineAfterDescription.js"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/rules/noBadBlocks.js"],"names":["commentRegexp","extraAsteriskCommentRegexp","context","sourceCode","allComments","makeReport","ignore","preventAllMultiAsteriskBlocks","options","extraAsterisks","nonJsdocNodes","filter","comment","commentText","getText","sliceIndex","test","multiline","exec","length","tags","slice","some","tag","includes","node","report","fix","fixer","text","replaceText","replace","checkFile","meta","docs","description","url","fixable","schema","additionalProperties","properties","items","type"],"mappings":";;;;;;;AAAA;;AAGA;;;;AAEA;AACA;AACA,MAAMA,aAAa,GAAG,cAAtB;AACA,MAAMC,0BAA0B,GAAG,YAAnC;;eAEe,2BAAa,CAAC;AAC3BC,EAAAA,OAD2B;AAE3BC,EAAAA,UAF2B;AAG3BC,EAAAA,WAH2B;AAI3BC,EAAAA;AAJ2B,CAAD,KAKtB;AACJ,QAAM,CACJ;AACEC,IAAAA,MAAM,GAAG,CACP,UADO,EAEP,iBAFO,EAGP,WAHO,EAIP,YAJO,CADX;AAOEC,IAAAA,6BAA6B,GAAG;AAPlC,MAQI,EATA,IAUFL,OAAO,CAACM,OAVZ;AAYA,MAAIC,cAAc,GAAG,KAArB;AACA,QAAMC,aAAa,GAAGN,WAAW,CAACO,MAAZ,CAAoBC,OAAD,IAAa;AACpD,UAAMC,WAAW,GAAGV,UAAU,CAACW,OAAX,CAAmBF,OAAnB,CAApB;AACA,QAAIG,UAAU,GAAG,CAAjB;;AACA,QAAI,CAACf,aAAa,CAACgB,IAAd,CAAmBH,WAAnB,CAAL,EAAsC;AAAA;;AACpC,YAAMI,SAAS,4BAAGhB,0BAA0B,CAACiB,IAA3B,CAAgCL,WAAhC,CAAH,0DAAG,sBAA+C,CAA/C,CAAlB;;AACA,UAAI,CAACI,SAAL,EAAgB;AACd,eAAO,KAAP;AACD;;AAEDF,MAAAA,UAAU,GAAGE,SAAS,CAACE,MAAvB;AACAV,MAAAA,cAAc,GAAG,IAAjB;;AACA,UAAIF,6BAAJ,EAAmC;AACjC,eAAO,IAAP;AACD;AACF;;AAED,UAAM,
|
|
1
|
+
{"version":3,"sources":["../../src/rules/noBadBlocks.js"],"names":["commentRegexp","extraAsteriskCommentRegexp","context","sourceCode","allComments","makeReport","ignore","preventAllMultiAsteriskBlocks","options","extraAsterisks","nonJsdocNodes","filter","comment","commentText","getText","sliceIndex","test","multiline","exec","length","tags","slice","some","tag","includes","node","report","fix","fixer","text","replaceText","replace","checkFile","meta","docs","description","url","fixable","schema","additionalProperties","properties","items","type"],"mappings":"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","sourcesContent":["import {\n parse as commentParser,\n} from 'comment-parser';\nimport iterateJsdoc from '../iterateJsdoc';\n\n// Neither a single nor 3+ asterisks are valid jsdoc per\n// https://jsdoc.app/about-getting-started.html#adding-documentation-comments-to-your-code\nconst commentRegexp = /^\\/\\*(?!\\*)/u;\nconst extraAsteriskCommentRegexp = /^\\/\\*{3,}/u;\n\nexport default iterateJsdoc(({\n context,\n sourceCode,\n allComments,\n makeReport,\n}) => {\n const [\n {\n ignore = [\n 'ts-check',\n 'ts-expect-error',\n 'ts-ignore',\n 'ts-nocheck',\n ],\n preventAllMultiAsteriskBlocks = false,\n } = {},\n ] = context.options;\n\n let extraAsterisks = false;\n const nonJsdocNodes = allComments.filter((comment) => {\n const commentText = sourceCode.getText(comment);\n let sliceIndex = 2;\n if (!commentRegexp.test(commentText)) {\n const multiline = extraAsteriskCommentRegexp.exec(commentText)?.[0];\n if (!multiline) {\n return false;\n }\n\n sliceIndex = multiline.length;\n extraAsterisks = true;\n if (preventAllMultiAsteriskBlocks) {\n return true;\n }\n }\n\n const [\n {\n tags = {},\n } = {},\n ] = commentParser(\n `${commentText.slice(0, 2)}*${commentText.slice(sliceIndex)}`,\n );\n\n return tags.length && !tags.some(({\n tag,\n }) => {\n return ignore.includes(tag);\n });\n });\n\n if (!nonJsdocNodes.length) {\n return;\n }\n\n for (const node of nonJsdocNodes) {\n const report = makeReport(context, node);\n\n // eslint-disable-next-line no-loop-func\n const fix = (fixer) => {\n const text = sourceCode.getText(node);\n\n return fixer.replaceText(\n node,\n extraAsterisks ?\n text.replace(extraAsteriskCommentRegexp, '/**') :\n text.replace('/*', '/**'),\n );\n };\n\n report('Expected JSDoc-like comment to begin with two asterisks.', fix);\n }\n}, {\n checkFile: true,\n meta: {\n docs: {\n description: 'This rule checks for multi-line-style comments which fail to meet the criteria of a jsdoc block.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-no-bad-blocks',\n },\n fixable: 'code',\n schema: [\n {\n additionalProperties: false,\n properties: {\n ignore: {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n preventAllMultiAsteriskBlocks: {\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n type: 'layout',\n },\n});\n"],"file":"noBadBlocks.js"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/rules/noDefaults.js"],"names":["context","utils","noOptionalParamNames","options","paramTags","getPresentTags","tag","optional","reportJSDoc","changeTag","name","replace","default","defaultTags","description","trim","postTag","contextDefaults","meta","docs","url","fixable","schema","additionalProperties","properties","contexts","items","anyOf","type","comment"],"mappings":";;;;;;;AAAA;;;;eAEe,2BAAa,CAAC;AAC3BA,EAAAA,OAD2B;AAE3BC,EAAAA;AAF2B,CAAD,KAGtB;AACJ,QAAM;
|
|
1
|
+
{"version":3,"sources":["../../src/rules/noDefaults.js"],"names":["context","utils","noOptionalParamNames","options","paramTags","getPresentTags","tag","optional","reportJSDoc","changeTag","name","replace","default","defaultTags","description","trim","postTag","contextDefaults","meta","docs","url","fixable","schema","additionalProperties","properties","contexts","items","anyOf","type","comment"],"mappings":"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","sourcesContent":["import iterateJsdoc from '../iterateJsdoc';\n\nexport default iterateJsdoc(({\n context,\n utils,\n}) => {\n const {\n noOptionalParamNames,\n } = context.options[0] || {};\n const paramTags = utils.getPresentTags([\n 'param', 'arg', 'argument',\n ]);\n for (const tag of paramTags) {\n if (noOptionalParamNames && tag.optional) {\n utils.reportJSDoc(`Optional param names are not permitted on @${tag.tag}.`, tag, () => {\n utils.changeTag(tag, {\n name: tag.name.replace(/([^=]*)(=.+)?/u, '$1'),\n });\n });\n } else if (tag.default) {\n utils.reportJSDoc(`Defaults are not permitted on @${tag.tag}.`, tag, () => {\n utils.changeTag(tag, {\n name: tag.name.replace(/([^=]*)(=.+)?/u, '[$1]'),\n });\n });\n }\n }\n\n const defaultTags = utils.getPresentTags([\n 'default', 'defaultvalue',\n ]);\n for (const tag of defaultTags) {\n if (tag.description.trim()) {\n utils.reportJSDoc(`Default values are not permitted on @${tag.tag}.`, tag, () => {\n utils.changeTag(tag, {\n description: '',\n postTag: '',\n });\n });\n }\n }\n}, {\n contextDefaults: true,\n meta: {\n docs: {\n description: 'This rule reports defaults being used on the relevant portion of `@param` or `@default`.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-no-defaults',\n },\n fixable: 'code',\n schema: [\n {\n additionalProperties: false,\n properties: {\n contexts: {\n items: {\n anyOf: [\n {\n type: 'string',\n },\n {\n additionalProperties: false,\n properties: {\n comment: {\n type: 'string',\n },\n context: {\n type: 'string',\n },\n },\n type: 'object',\n },\n ],\n },\n type: 'array',\n },\n noOptionalParamNames: {\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"file":"noDefaults.js"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/rules/noMissingSyntax.js"],"names":["setDefaults","state","selectorMap","incrementSelector","selector","comment","context","node","info","options","contexts","foundContext","find","cntxt","esquery","matches","parse","contextStr","contextSelected","exit","length","report","loc","start","column","line","message","some","contextKey","undefined","minimum","Object","values","every","cmmnt","data","end","matchContext","meta","docs","description","url","fixable","schema","additionalProperties","properties","items","anyOf","type"],"mappings":";;;;;;;AAAA;;AACA;;;;AAEA,MAAMA,WAAW,GAAIC,KAAD,IAAW;AAC7B,MAAI,CAACA,KAAK,CAACC,WAAX,EAAwB;AACtBD,IAAAA,KAAK,CAACC,WAAN,GAAoB,EAApB;AACD;AACF,CAJD;;AAMA,MAAMC,iBAAiB,GAAG,CAACF,KAAD,EAAQG,QAAR,EAAkBC,OAAlB,KAA8B;AACtD,MAAI,CAACJ,KAAK,CAACC,WAAN,CAAkBE,QAAlB,CAAL,EAAkC;AAChCH,IAAAA,KAAK,CAACC,WAAN,CAAkBE,QAAlB,IAA8B,EAA9B;AACD;;AAED,MAAI,CAACH,KAAK,CAACC,WAAN,CAAkBE,QAAlB,EAA4BC,OAA5B,CAAL,EAA2C;AACzCJ,IAAAA,KAAK,CAACC,WAAN,CAAkBE,QAAlB,EAA4BC,OAA5B,IAAuC,CAAvC;AACD;;AAEDJ,EAAAA,KAAK,CAACC,WAAN,CAAkBE,QAAlB,EAA4BC,OAA5B;AACD,CAVD;;eAYe,2BAAa,CAAC;AAC3BC,EAAAA,OAD2B;AAE3BC,EAAAA,IAF2B;AAG3BC,EAAAA,IAAI,EAAE;
|
|
1
|
+
{"version":3,"sources":["../../src/rules/noMissingSyntax.js"],"names":["setDefaults","state","selectorMap","incrementSelector","selector","comment","context","node","info","options","contexts","foundContext","find","cntxt","esquery","matches","parse","contextStr","contextSelected","exit","length","report","loc","start","column","line","message","some","contextKey","undefined","minimum","Object","values","every","cmmnt","data","end","matchContext","meta","docs","description","url","fixable","schema","additionalProperties","properties","items","anyOf","type"],"mappings":"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","sourcesContent":["import esquery from 'esquery';\nimport iterateJsdoc from '../iterateJsdoc';\n\nconst setDefaults = (state) => {\n if (!state.selectorMap) {\n state.selectorMap = {};\n }\n};\n\nconst incrementSelector = (state, selector, comment) => {\n if (!state.selectorMap[selector]) {\n state.selectorMap[selector] = {};\n }\n\n if (!state.selectorMap[selector][comment]) {\n state.selectorMap[selector][comment] = 0;\n }\n\n state.selectorMap[selector][comment]++;\n};\n\nexport default iterateJsdoc(({\n context,\n node,\n info: {\n comment,\n },\n state,\n}) => {\n if (!context.options[0]) {\n // Handle error later\n return;\n }\n\n const {\n contexts,\n } = context.options[0];\n\n const foundContext = contexts.find((cntxt) => {\n return typeof cntxt === 'string' ?\n esquery.matches(node, esquery.parse(cntxt)) :\n (!cntxt.context || cntxt.context === 'any' || esquery.matches(node, esquery.parse(cntxt.context))) &&\n comment === cntxt.comment;\n });\n\n const contextStr = typeof foundContext === 'object' ?\n foundContext.context ?? 'any' :\n foundContext;\n\n setDefaults(state);\n\n incrementSelector(state, contextStr, comment);\n}, {\n contextSelected: true,\n exit ({\n context,\n state,\n }) {\n if (!context.options.length) {\n context.report({\n loc: {\n start: {\n column: 1,\n line: 1,\n },\n },\n message: 'Rule `no-missing-syntax` is missing a `context` option.',\n });\n\n return;\n }\n\n setDefaults(state);\n\n const {\n contexts,\n } = context.options[0];\n\n // Report when MISSING\n contexts.some((cntxt) => {\n const contextStr = typeof cntxt === 'object' ? cntxt.context ?? 'any' : cntxt;\n const comment = cntxt?.comment ?? '';\n\n const contextKey = contextStr === 'any' ? undefined : contextStr;\n\n if (\n (!state.selectorMap[contextKey] ||\n !state.selectorMap[contextKey][comment] ||\n state.selectorMap[contextKey][comment] < (cntxt?.minimum ?? 1)) &&\n (contextStr !== 'any' || Object.values(state.selectorMap).every((cmmnt) => {\n return !cmmnt[comment] || cmmnt[comment] < (cntxt?.minimum ?? 1);\n }))\n ) {\n const message = cntxt?.message ?? 'Syntax is required: {{context}}' +\n (comment ? ' with {{comment}}' : '');\n context.report({\n data: {\n comment,\n context: contextStr,\n },\n loc: {\n end: {\n line: 1,\n },\n start: {\n line: 1,\n },\n },\n message,\n });\n\n return true;\n }\n\n return false;\n });\n },\n matchContext: true,\n meta: {\n docs: {\n description: 'Reports when certain comment structures are always expected.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-no-missing-syntax',\n },\n fixable: 'code',\n schema: [\n {\n additionalProperties: false,\n properties: {\n contexts: {\n items: {\n anyOf: [\n {\n type: 'string',\n },\n {\n additionalProperties: false,\n properties: {\n comment: {\n type: 'string',\n },\n context: {\n type: 'string',\n },\n message: {\n type: 'string',\n },\n minimum: {\n type: 'integer',\n },\n },\n type: 'object',\n },\n ],\n },\n type: 'array',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"file":"noMissingSyntax.js"}
|
|
@@ -9,7 +9,12 @@ var _iterateJsdoc = _interopRequireDefault(require("../iterateJsdoc"));
|
|
|
9
9
|
|
|
10
10
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
11
11
|
|
|
12
|
-
const
|
|
12
|
+
const middleAsterisksBlockWS = /^([\t ]|\*(?!\*))+/u;
|
|
13
|
+
const middleAsterisksNoBlockWS = /^\*+/u;
|
|
14
|
+
const endAsterisksSingleLineBlockWS = /\*((?:\*|(?: |\t))*)\*$/u;
|
|
15
|
+
const endAsterisksMultipleLineBlockWS = /((?:\*|(?: |\t))*)\*$/u;
|
|
16
|
+
const endAsterisksSingleLineNoBlockWS = /\*(\**)\*$/u;
|
|
17
|
+
const endAsterisksMultipleLineNoBlockWS = /(\**)\*$/u;
|
|
13
18
|
|
|
14
19
|
var _default = (0, _iterateJsdoc.default)(({
|
|
15
20
|
context,
|
|
@@ -17,9 +22,12 @@ var _default = (0, _iterateJsdoc.default)(({
|
|
|
17
22
|
utils
|
|
18
23
|
}) => {
|
|
19
24
|
const {
|
|
25
|
+
allowWhitespace = false,
|
|
20
26
|
preventAtEnd = true,
|
|
21
27
|
preventAtMiddleLines = true
|
|
22
28
|
} = context.options[0] || {};
|
|
29
|
+
const middleAsterisks = allowWhitespace ? middleAsterisksNoBlockWS : middleAsterisksBlockWS; // eslint-disable-next-line complexity -- Todo
|
|
30
|
+
|
|
23
31
|
jsdoc.source.some(({
|
|
24
32
|
tokens,
|
|
25
33
|
number
|
|
@@ -30,10 +38,12 @@ var _default = (0, _iterateJsdoc.default)(({
|
|
|
30
38
|
name,
|
|
31
39
|
type,
|
|
32
40
|
description,
|
|
33
|
-
end
|
|
41
|
+
end,
|
|
42
|
+
postDelimiter
|
|
34
43
|
} = tokens;
|
|
35
44
|
|
|
36
|
-
if (preventAtMiddleLines && !end && !tag && !type && !name && middleAsterisks.test(description)) {
|
|
45
|
+
if (preventAtMiddleLines && !end && !tag && !type && !name && (!allowWhitespace && middleAsterisks.test(description) || allowWhitespace && middleAsterisks.test(postDelimiter + description))) {
|
|
46
|
+
// console.log('description', JSON.stringify(description));
|
|
37
47
|
const fix = () => {
|
|
38
48
|
tokens.description = description.replace(middleAsterisks, '');
|
|
39
49
|
};
|
|
@@ -50,8 +60,15 @@ var _default = (0, _iterateJsdoc.default)(({
|
|
|
50
60
|
|
|
51
61
|
const isSingleLineBlock = delimiter === '/**';
|
|
52
62
|
const delim = isSingleLineBlock ? '*' : delimiter;
|
|
53
|
-
|
|
54
|
-
|
|
63
|
+
let endAsterisks;
|
|
64
|
+
|
|
65
|
+
if (allowWhitespace) {
|
|
66
|
+
endAsterisks = isSingleLineBlock ? endAsterisksSingleLineNoBlockWS : endAsterisksMultipleLineNoBlockWS;
|
|
67
|
+
} else {
|
|
68
|
+
endAsterisks = isSingleLineBlock ? endAsterisksSingleLineBlockWS : endAsterisksMultipleLineBlockWS;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
const endingAsterisksAndSpaces = (allowWhitespace ? postDelimiter + description + delim : description + delim).match(endAsterisks);
|
|
55
72
|
|
|
56
73
|
if (!endingAsterisksAndSpaces || !isSingleLineBlock && endingAsterisksAndSpaces[1] && !endingAsterisksAndSpaces[1].trim()) {
|
|
57
74
|
return false;
|
|
@@ -81,6 +98,9 @@ var _default = (0, _iterateJsdoc.default)(({
|
|
|
81
98
|
schema: [{
|
|
82
99
|
additionalProperies: false,
|
|
83
100
|
properties: {
|
|
101
|
+
allowWhitespace: {
|
|
102
|
+
type: 'boolean'
|
|
103
|
+
},
|
|
84
104
|
preventAtEnd: {
|
|
85
105
|
type: 'boolean'
|
|
86
106
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/rules/noMultiAsterisks.js"],"names":["
|
|
1
|
+
{"version":3,"sources":["../../src/rules/noMultiAsterisks.js"],"names":["middleAsterisksBlockWS","middleAsterisksNoBlockWS","endAsterisksSingleLineBlockWS","endAsterisksMultipleLineBlockWS","endAsterisksSingleLineNoBlockWS","endAsterisksMultipleLineNoBlockWS","context","jsdoc","utils","allowWhitespace","preventAtEnd","preventAtMiddleLines","options","middleAsterisks","source","some","tokens","number","delimiter","tag","name","type","description","end","postDelimiter","test","fix","replace","reportJSDoc","line","isSingleLineBlock","delim","endAsterisks","endingAsterisksAndSpaces","match","trim","endFix","iterateAllJsdocs","meta","docs","url","fixable","schema","additionalProperies","properties"],"mappings":"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","sourcesContent":["import iterateJsdoc from '../iterateJsdoc';\n\nconst middleAsterisksBlockWS = /^([\\t ]|\\*(?!\\*))+/u;\nconst middleAsterisksNoBlockWS = /^\\*+/u;\n\nconst endAsterisksSingleLineBlockWS = /\\*((?:\\*|(?: |\\t))*)\\*$/u;\nconst endAsterisksMultipleLineBlockWS = /((?:\\*|(?: |\\t))*)\\*$/u;\n\nconst endAsterisksSingleLineNoBlockWS = /\\*(\\**)\\*$/u;\nconst endAsterisksMultipleLineNoBlockWS = /(\\**)\\*$/u;\n\nexport default iterateJsdoc(({\n context,\n jsdoc,\n utils,\n}) => {\n const {\n allowWhitespace = false,\n preventAtEnd = true,\n preventAtMiddleLines = true,\n } = context.options[0] || {};\n\n const middleAsterisks = allowWhitespace ? middleAsterisksNoBlockWS : middleAsterisksBlockWS;\n\n // eslint-disable-next-line complexity -- Todo\n jsdoc.source.some(({\n tokens,\n number,\n }) => {\n const {\n delimiter,\n tag,\n name,\n type,\n description,\n end,\n postDelimiter,\n } = tokens;\n\n if (\n preventAtMiddleLines &&\n !end && !tag && !type && !name &&\n (\n !allowWhitespace && middleAsterisks.test(description) ||\n allowWhitespace && middleAsterisks.test(postDelimiter + description)\n )\n ) {\n // console.log('description', JSON.stringify(description));\n const fix = () => {\n tokens.description = description.replace(middleAsterisks, '');\n };\n\n utils.reportJSDoc(\n 'Should be no multiple asterisks on middle lines.',\n {\n line: number,\n },\n fix,\n true,\n );\n\n return true;\n }\n\n if (!preventAtEnd || !end) {\n return false;\n }\n\n const isSingleLineBlock = delimiter === '/**';\n const delim = isSingleLineBlock ? '*' : delimiter;\n let endAsterisks;\n if (allowWhitespace) {\n endAsterisks = isSingleLineBlock ? endAsterisksSingleLineNoBlockWS : endAsterisksMultipleLineNoBlockWS;\n } else {\n endAsterisks = isSingleLineBlock ? endAsterisksSingleLineBlockWS : endAsterisksMultipleLineBlockWS;\n }\n\n const endingAsterisksAndSpaces = (\n allowWhitespace ? postDelimiter + description + delim : description + delim\n ).match(\n endAsterisks,\n );\n\n if (\n !endingAsterisksAndSpaces ||\n !isSingleLineBlock && endingAsterisksAndSpaces[1] && !endingAsterisksAndSpaces[1].trim()\n ) {\n return false;\n }\n\n const endFix = () => {\n if (!isSingleLineBlock) {\n tokens.delimiter = '';\n }\n\n tokens.description = (description + delim).replace(endAsterisks, '');\n };\n\n utils.reportJSDoc(\n 'Should be no multiple asterisks on end lines.',\n {\n line: number,\n },\n endFix,\n true,\n );\n\n return true;\n });\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: '',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-no-multi-asterisks',\n },\n fixable: 'code',\n schema: [\n {\n additionalProperies: false,\n properties: {\n allowWhitespace: {\n type: 'boolean',\n },\n preventAtEnd: {\n type: 'boolean',\n },\n preventAtMiddleLines: {\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"file":"noMultiAsterisks.js"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/rules/noRestrictedSyntax.js"],"names":["node","context","info","comment","report","options","length","contexts","foundContext","find","cntxt","esquery","matches","parse","contextStr","message","contextSelected","meta","docs","description","url","fixable","schema","additionalProperties","properties","items","anyOf","type","required"],"mappings":";;;;;;;AAAA;;AACA;;;;eAEe,2BAAa,CAAC;AAC3BA,EAAAA,IAD2B;AAE3BC,EAAAA,OAF2B;AAG3BC,EAAAA,IAAI,EAAE;
|
|
1
|
+
{"version":3,"sources":["../../src/rules/noRestrictedSyntax.js"],"names":["node","context","info","comment","report","options","length","contexts","foundContext","find","cntxt","esquery","matches","parse","contextStr","message","contextSelected","meta","docs","description","url","fixable","schema","additionalProperties","properties","items","anyOf","type","required"],"mappings":";;;;;;;AAAA;;AACA;;;;eAEe,2BAAa,CAAC;AAC3BA,EAAAA,IAD2B;AAE3BC,EAAAA,OAF2B;AAG3BC,EAAAA,IAAI,EAAE;AACJC,IAAAA;AADI,GAHqB;AAM3BC,EAAAA;AAN2B,CAAD,KAOtB;AAAA;;AACJ,MAAI,CAACH,OAAO,CAACI,OAAR,CAAgBC,MAArB,EAA6B;AAC3BF,IAAAA,MAAM,CAAC,4DAAD,CAAN;AAEA;AACD;;AAED,QAAM;AACJG,IAAAA;AADI,MAEFN,OAAO,CAACI,OAAR,CAAgB,CAAhB,CAFJ;AAIA,QAAMG,YAAY,GAAGD,QAAQ,CAACE,IAAT,CAAeC,KAAD,IAAW;AAC5C,WAAO,OAAOA,KAAP,KAAiB,QAAjB,GACLC,iBAAQC,OAAR,CAAgBZ,IAAhB,EAAsBW,iBAAQE,KAAR,CAAcH,KAAd,CAAtB,CADK,GAEL,CAAC,CAACA,KAAK,CAACT,OAAP,IAAkBS,KAAK,CAACT,OAAN,KAAkB,KAApC,IAA6CU,iBAAQC,OAAR,CAAgBZ,IAAhB,EAAsBW,iBAAQE,KAAR,CAAcH,KAAK,CAACT,OAApB,CAAtB,CAA9C,KACEE,OAAO,KAAKO,KAAK,CAACP,OAHtB;AAID,GALoB,CAArB,CAXI,CAkBJ;AACA;;AACA,MAAI,CAACK,YAAL,EAAmB;AACjB;AACD;;AAED,QAAMM,UAAU,GAAG,OAAON,YAAP,KAAwB,QAAxB,4BACjBA,YAAY,CAACP,OADI,yEACO,KADP,GAEjBO,YAFF;AAGA,QAAMO,OAAO,4BAAGP,YAAH,aAAGA,YAAH,uBAAGA,YAAY,CAAEO,OAAjB,yEACX,oCADF;AAGAX,EAAAA,MAAM,CAACW,OAAD,EAAU,IAAV,EAAgB,IAAhB,EAAsB;AAC1Bd,IAAAA,OAAO,EAAEa;AADiB,GAAtB,CAAN;AAGD,CAxCc,EAwCZ;AACDE,EAAAA,eAAe,EAAE,IADhB;AAEDC,EAAAA,IAAI,EAAE;AACJC,IAAAA,IAAI,EAAE;AACJC,MAAAA,WAAW,EAAE,sDADT;AAEJC,MAAAA,GAAG,EAAE;AAFD,KADF;AAKJC,IAAAA,OAAO,EAAE,MALL;AAMJC,IAAAA,MAAM,EAAE,CACN;AACEC,MAAAA,oBAAoB,EAAE,KADxB;AAEEC,MAAAA,UAAU,EAAE;AACVjB,QAAAA,QAAQ,EAAE;AACRkB,UAAAA,KAAK,EAAE;AACLC,YAAAA,KAAK,EAAE,CACL;AACEC,cAAAA,IAAI,EAAE;AADR,aADK,EAIL;AACEJ,cAAAA,oBAAoB,EAAE,KADxB;AAEEC,cAAAA,UAAU,EAAE;AACVrB,gBAAAA,OAAO,EAAE;AACPwB,kBAAAA,IAAI,EAAE;AADC,iBADC;AAIV1B,gBAAAA,OAAO,EAAE;AACP0B,kBAAAA,IAAI,EAAE;AADC,iBAJC;AAOVZ,gBAAAA,OAAO,EAAE;AACPY,kBAAAA,IAAI,EAAE;AADC;AAPC,eAFd;AAaEA,cAAAA,IAAI,EAAE;AAbR,aAJK;AADF,WADC;AAuBRA,UAAAA,IAAI,EAAE;AAvBE;AADA,OAFd;AA6BEC,MAAAA,QAAQ,EAAE,CACR,UADQ,CA7BZ;AAgCED,MAAAA,IAAI,EAAE;AAhCR,KADM,CANJ;AA0CJA,IAAAA,IAAI,EAAE;AA1CF;AAFL,CAxCY,C","sourcesContent":["import esquery from 'esquery';\nimport iterateJsdoc from '../iterateJsdoc';\n\nexport default iterateJsdoc(({\n node,\n context,\n info: {\n comment,\n },\n report,\n}) => {\n if (!context.options.length) {\n report('Rule `no-restricted-syntax` is missing a `context` option.');\n\n return;\n }\n\n const {\n contexts,\n } = context.options[0];\n\n const foundContext = contexts.find((cntxt) => {\n return typeof cntxt === 'string' ?\n esquery.matches(node, esquery.parse(cntxt)) :\n (!cntxt.context || cntxt.context === 'any' || esquery.matches(node, esquery.parse(cntxt.context))) &&\n comment === cntxt.comment;\n });\n\n // We are not on the *particular* matching context/comment, so don't assume\n // we need reporting\n if (!foundContext) {\n return;\n }\n\n const contextStr = typeof foundContext === 'object' ?\n foundContext.context ?? 'any' :\n foundContext;\n const message = foundContext?.message ??\n 'Syntax is restricted: {{context}}.';\n\n report(message, null, null, {\n context: contextStr,\n });\n}, {\n contextSelected: true,\n meta: {\n docs: {\n description: 'Reports when certain comment structures are present.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-no-restricted-syntax',\n },\n fixable: 'code',\n schema: [\n {\n additionalProperties: false,\n properties: {\n contexts: {\n items: {\n anyOf: [\n {\n type: 'string',\n },\n {\n additionalProperties: false,\n properties: {\n comment: {\n type: 'string',\n },\n context: {\n type: 'string',\n },\n message: {\n type: 'string',\n },\n },\n type: 'object',\n },\n ],\n },\n type: 'array',\n },\n },\n required: [\n 'contexts',\n ],\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"file":"noRestrictedSyntax.js"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/rules/noTypes.js"],"names":["removeType","tokens","postTag","type","utils","isIteratingFunction","isVirtualFunction","tags","getPresentTags","tag","reportJSDoc","source","contextDefaults","meta","docs","description","url","fixable","schema","additionalProperties","properties","contexts","items","anyOf","comment","context"],"mappings":";;;;;;;AAAA;;;;AAEA,MAAMA,UAAU,GAAG,CAAC;
|
|
1
|
+
{"version":3,"sources":["../../src/rules/noTypes.js"],"names":["removeType","tokens","postTag","type","utils","isIteratingFunction","isVirtualFunction","tags","getPresentTags","tag","reportJSDoc","source","contextDefaults","meta","docs","description","url","fixable","schema","additionalProperties","properties","contexts","items","anyOf","comment","context"],"mappings":";;;;;;;AAAA;;;;AAEA,MAAMA,UAAU,GAAG,CAAC;AAClBC,EAAAA;AADkB,CAAD,KAEb;AACJA,EAAAA,MAAM,CAACC,OAAP,GAAiB,EAAjB;AACAD,EAAAA,MAAM,CAACE,IAAP,GAAc,EAAd;AACD,CALD;;eAOe,2BAAa,CAAC;AAC3BC,EAAAA;AAD2B,CAAD,KAEtB;AACJ,MAAI,CAACA,KAAK,CAACC,mBAAN,EAAD,IAAgC,CAACD,KAAK,CAACE,iBAAN,EAArC,EAAgE;AAC9D;AACD;;AAED,QAAMC,IAAI,GAAGH,KAAK,CAACI,cAAN,CAAqB,CAChC,OADgC,EACvB,KADuB,EAChB,UADgB,EACJ,SADI,EACO,QADP,CAArB,CAAb;;AAIA,OAAK,MAAMC,GAAX,IAAkBF,IAAlB,EAAwB;AACtB,QAAIE,GAAG,CAACN,IAAR,EAAc;AACZC,MAAAA,KAAK,CAACM,WAAN,CAAmB,+BAA8BD,GAAG,CAACA,GAAI,GAAzD,EAA6DA,GAA7D,EAAkE,MAAM;AACtE,aAAK,MAAME,MAAX,IAAqBF,GAAG,CAACE,MAAzB,EAAiC;AAC/BX,UAAAA,UAAU,CAACW,MAAD,CAAV;AACD;AACF,OAJD;AAKD;AACF;AACF,CApBc,EAoBZ;AACDC,EAAAA,eAAe,EAAE,IADhB;AAEDC,EAAAA,IAAI,EAAE;AACJC,IAAAA,IAAI,EAAE;AACJC,MAAAA,WAAW,EAAE,+DADT;AAEJC,MAAAA,GAAG,EAAE;AAFD,KADF;AAKJC,IAAAA,OAAO,EAAE,MALL;AAMJC,IAAAA,MAAM,EAAE,CACN;AACEC,MAAAA,oBAAoB,EAAE,KADxB;AAEEC,MAAAA,UAAU,EAAE;AACVC,QAAAA,QAAQ,EAAE;AACRC,UAAAA,KAAK,EAAE;AACLC,YAAAA,KAAK,EAAE,CACL;AACEpB,cAAAA,IAAI,EAAE;AADR,aADK,EAIL;AACEgB,cAAAA,oBAAoB,EAAE,KADxB;AAEEC,cAAAA,UAAU,EAAE;AACVI,gBAAAA,OAAO,EAAE;AACPrB,kBAAAA,IAAI,EAAE;AADC,iBADC;AAIVsB,gBAAAA,OAAO,EAAE;AACPtB,kBAAAA,IAAI,EAAE;AADC;AAJC,eAFd;AAUEA,cAAAA,IAAI,EAAE;AAVR,aAJK;AADF,WADC;AAoBRA,UAAAA,IAAI,EAAE;AApBE;AADA,OAFd;AA0BEA,MAAAA,IAAI,EAAE;AA1BR,KADM,CANJ;AAoCJA,IAAAA,IAAI,EAAE;AApCF;AAFL,CApBY,C","sourcesContent":["import iterateJsdoc from '../iterateJsdoc';\n\nconst removeType = ({\n tokens,\n}) => {\n tokens.postTag = '';\n tokens.type = '';\n};\n\nexport default iterateJsdoc(({\n utils,\n}) => {\n if (!utils.isIteratingFunction() && !utils.isVirtualFunction()) {\n return;\n }\n\n const tags = utils.getPresentTags([\n 'param', 'arg', 'argument', 'returns', 'return',\n ]);\n\n for (const tag of tags) {\n if (tag.type) {\n utils.reportJSDoc(`Types are not permitted on @${tag.tag}.`, tag, () => {\n for (const source of tag.source) {\n removeType(source);\n }\n });\n }\n }\n}, {\n contextDefaults: true,\n meta: {\n docs: {\n description: 'This rule reports types being used on `@param` or `@returns`.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-no-types',\n },\n fixable: 'code',\n schema: [\n {\n additionalProperties: false,\n properties: {\n contexts: {\n items: {\n anyOf: [\n {\n type: 'string',\n },\n {\n additionalProperties: false,\n properties: {\n comment: {\n type: 'string',\n },\n context: {\n type: 'string',\n },\n },\n type: 'object',\n },\n ],\n },\n type: 'array',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"file":"noTypes.js"}
|
|
@@ -86,16 +86,16 @@ var _default = (0, _iterateJsdoc.default)(({
|
|
|
86
86
|
return tag.name;
|
|
87
87
|
});
|
|
88
88
|
const ancestorNodes = [];
|
|
89
|
-
let
|
|
89
|
+
let currentNode = node; // No need for Program node?
|
|
90
90
|
|
|
91
|
-
while (
|
|
92
|
-
|
|
93
|
-
currentScope = currentScope.upper;
|
|
94
|
-
} // `currentScope` may be `null` or `Program`, so in such a case,
|
|
95
|
-
// we look to present tags instead
|
|
91
|
+
while ((_currentNode = currentNode) !== null && _currentNode !== void 0 && _currentNode.parent) {
|
|
92
|
+
var _currentNode;
|
|
96
93
|
|
|
94
|
+
ancestorNodes.push(currentNode);
|
|
95
|
+
currentNode = currentNode.parent;
|
|
96
|
+
}
|
|
97
97
|
|
|
98
|
-
|
|
98
|
+
const getTemplateTags = function (ancestorNode) {
|
|
99
99
|
const commentNode = (0, _jsdoccomment.getJSDocComment)(sourceCode, ancestorNode, settings);
|
|
100
100
|
|
|
101
101
|
if (!commentNode) {
|
|
@@ -106,17 +106,13 @@ var _default = (0, _iterateJsdoc.default)(({
|
|
|
106
106
|
return _jsdocUtils.default.filterTags(jsdoc.tags, tag => {
|
|
107
107
|
return tag.tag === 'template';
|
|
108
108
|
});
|
|
109
|
-
}
|
|
110
|
-
|
|
109
|
+
}; // `currentScope` may be `null` or `Program`, so in such a case,
|
|
110
|
+
// we look to present tags instead
|
|
111
111
|
|
|
112
|
-
if (classJsdoc !== null && classJsdoc !== void 0 && classJsdoc.tags) {
|
|
113
|
-
templateTags = templateTags.concat(classJsdoc.tags.filter(({
|
|
114
|
-
tag
|
|
115
|
-
}) => {
|
|
116
|
-
return tag === 'template';
|
|
117
|
-
}));
|
|
118
|
-
}
|
|
119
112
|
|
|
113
|
+
const templateTags = ancestorNodes.length ? ancestorNodes.flatMap(ancestorNode => {
|
|
114
|
+
return getTemplateTags(ancestorNode);
|
|
115
|
+
}) : utils.getPresentTags('template');
|
|
120
116
|
const closureGenericTypes = templateTags.flatMap(tag => {
|
|
121
117
|
return utils.parseClosureTemplateTag(tag);
|
|
122
118
|
}); // In modules, including Node, there is a global scope at top with the
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/rules/noUndefinedTypes.js"],"names":["extraTypes","stripPseudoTypes","str","replace","context","node","report","settings","sourceCode","utils","scopeManager","globalScope","definedTypes","options","definedPreferredTypes","preferredTypes","structuredTags","mode","Object","keys","length","values","map","preferredType","undefined","reportSettings","replacement","filter","typedefDeclarations","getAllComments","comment","value","startsWith","commentNode","flatMap","doc","tags","tag","isNamepathDefiningTag","name","ancestorNodes","currentScope","acquire","block","type","push","upper","templateTags","ancestorNode","jsdoc","jsdocUtils","filterTags","getPresentTags","classJsdoc","getClassJsdoc","concat","closureGenericTypes","parseClosureTemplateTag","cjsOrESMScope","childScopes","allDefinedTypes","Set","variables","jsdocTagsWithPossibleType","tagMightHaveTypePosition","parsedType","structuredTypes","has","Array","isArray","includes","markVariableAsUsed","iterateAllJsdocs","meta","docs","description","url","schema","additionalProperties","properties","items"],"mappings":"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","sourcesContent":["import {\n getJSDocComment,\n} from '@es-joy/jsdoccomment';\nimport {\n traverse, parse as parseType, tryParse as tryParseType,\n} from 'jsdoc-type-pratt-parser';\nimport iterateJsdoc, {\n parseComment,\n} from '../iterateJsdoc';\nimport jsdocUtils from '../jsdocUtils';\n\nconst extraTypes = [\n 'null', 'undefined', 'void', 'string', 'boolean', 'object',\n 'function', 'symbol',\n 'number', 'bigint', 'NaN', 'Infinity',\n 'any', '*', 'never',\n 'this', 'true', 'false',\n 'Array', 'Object', 'RegExp', 'Date', 'Function',\n];\n\nconst stripPseudoTypes = (str) => {\n return str && str.replace(/(?:\\.|<>|\\.<>|\\[\\])$/u, '');\n};\n\nexport default iterateJsdoc(({\n context,\n node,\n report,\n settings,\n sourceCode,\n utils,\n}) => {\n const {scopeManager} = sourceCode;\n const {globalScope} = scopeManager;\n\n const {definedTypes = []} = context.options[0] || {};\n\n let definedPreferredTypes = [];\n const {preferredTypes, structuredTags, mode} = settings;\n if (Object.keys(preferredTypes).length) {\n definedPreferredTypes = Object.values(preferredTypes).map((preferredType) => {\n if (typeof preferredType === 'string') {\n // May become an empty string but will be filtered out below\n return stripPseudoTypes(preferredType);\n }\n\n if (!preferredType) {\n return undefined;\n }\n\n if (typeof preferredType !== 'object') {\n utils.reportSettings(\n 'Invalid `settings.jsdoc.preferredTypes`. Values must be falsy, a string, or an object.',\n );\n }\n\n return stripPseudoTypes(preferredType.replacement);\n })\n .filter((preferredType) => {\n return preferredType;\n });\n }\n\n const typedefDeclarations = context.getAllComments()\n .filter((comment) => {\n return comment.value.startsWith('*');\n })\n .map((commentNode) => {\n return parseComment(commentNode, '');\n })\n .flatMap((doc) => {\n return doc.tags.filter(({tag}) => {\n return utils.isNamepathDefiningTag(tag);\n });\n })\n .map((tag) => {\n return tag.name;\n });\n\n const ancestorNodes = [];\n let currentScope = scopeManager.acquire(node);\n\n while (currentScope && currentScope.block.type !== 'Program') {\n ancestorNodes.push(currentScope.block);\n currentScope = currentScope.upper;\n }\n\n // `currentScope` may be `null` or `Program`, so in such a case,\n // we look to present tags instead\n let templateTags = ancestorNodes.length ?\n ancestorNodes.flatMap((ancestorNode) => {\n const commentNode = getJSDocComment(sourceCode, ancestorNode, settings);\n if (!commentNode) {\n return [];\n }\n\n const jsdoc = parseComment(commentNode, '');\n\n return jsdocUtils.filterTags(jsdoc.tags, (tag) => {\n return tag.tag === 'template';\n });\n }) :\n utils.getPresentTags('template');\n\n const classJsdoc = utils.getClassJsdoc();\n if (classJsdoc?.tags) {\n templateTags = templateTags.concat(\n classJsdoc.tags\n .filter(({tag}) => {\n return tag === 'template';\n }),\n );\n }\n\n const closureGenericTypes = templateTags.flatMap((tag) => {\n return utils.parseClosureTemplateTag(tag);\n });\n\n // In modules, including Node, there is a global scope at top with the\n // Program scope inside\n const cjsOrESMScope = globalScope.childScopes[0]?.block.type === 'Program';\n\n const allDefinedTypes = new Set(globalScope.variables.map(({name}) => {\n return name;\n })\n\n // If the file is a module, concat the variables from the module scope.\n .concat(\n cjsOrESMScope ?\n globalScope.childScopes.flatMap(({variables}) => {\n return variables;\n }).map(({name}) => {\n return name;\n }) : [],\n )\n .concat(extraTypes)\n .concat(typedefDeclarations)\n .concat(definedTypes)\n .concat(definedPreferredTypes)\n .concat(settings.mode === 'jsdoc' ? [] : closureGenericTypes));\n\n const jsdocTagsWithPossibleType = utils.filterTags(({tag}) => {\n return utils.tagMightHaveTypePosition(tag) && (tag !== 'suppress' || settings.mode !== 'closure');\n });\n\n for (const tag of jsdocTagsWithPossibleType) {\n let parsedType;\n\n try {\n parsedType = mode === 'permissive' ? tryParseType(tag.type) : parseType(tag.type, mode);\n } catch {\n // On syntax error, will be handled by valid-types.\n continue;\n }\n\n traverse(parsedType, ({type, value}) => {\n if (type === 'JsdocTypeName') {\n const structuredTypes = structuredTags[tag.tag]?.type;\n if (!allDefinedTypes.has(value) &&\n (!Array.isArray(structuredTypes) || !structuredTypes.includes(value))\n ) {\n report(`The type '${value}' is undefined.`, null, tag);\n } else if (!extraTypes.includes(value)) {\n context.markVariableAsUsed(value);\n }\n }\n });\n }\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Checks that types in jsdoc comments are defined.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-no-undefined-types',\n },\n schema: [\n {\n additionalProperties: false,\n properties: {\n definedTypes: {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"file":"noUndefinedTypes.js"}
|
|
1
|
+
{"version":3,"sources":["../../src/rules/noUndefinedTypes.js"],"names":["extraTypes","stripPseudoTypes","str","replace","context","node","report","settings","sourceCode","utils","scopeManager","globalScope","definedTypes","options","definedPreferredTypes","preferredTypes","structuredTags","mode","Object","keys","length","values","map","preferredType","undefined","reportSettings","replacement","filter","typedefDeclarations","getAllComments","comment","value","startsWith","commentNode","flatMap","doc","tags","tag","isNamepathDefiningTag","name","ancestorNodes","currentNode","parent","push","getTemplateTags","ancestorNode","jsdoc","jsdocUtils","filterTags","templateTags","getPresentTags","closureGenericTypes","parseClosureTemplateTag","cjsOrESMScope","childScopes","block","type","allDefinedTypes","Set","variables","concat","jsdocTagsWithPossibleType","tagMightHaveTypePosition","parsedType","structuredTypes","has","Array","isArray","includes","markVariableAsUsed","iterateAllJsdocs","meta","docs","description","url","schema","additionalProperties","properties","items"],"mappings":"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","sourcesContent":["import {\n getJSDocComment,\n} from '@es-joy/jsdoccomment';\nimport {\n traverse,\n parse as parseType,\n tryParse as tryParseType,\n} from 'jsdoc-type-pratt-parser';\nimport iterateJsdoc, {\n parseComment,\n} from '../iterateJsdoc';\nimport jsdocUtils from '../jsdocUtils';\n\nconst extraTypes = [\n 'null', 'undefined', 'void', 'string', 'boolean', 'object',\n 'function', 'symbol',\n 'number', 'bigint', 'NaN', 'Infinity',\n 'any', '*', 'never',\n 'this', 'true', 'false',\n 'Array', 'Object', 'RegExp', 'Date', 'Function',\n];\n\nconst stripPseudoTypes = (str) => {\n return str && str.replace(/(?:\\.|<>|\\.<>|\\[\\])$/u, '');\n};\n\nexport default iterateJsdoc(({\n context,\n node,\n report,\n settings,\n sourceCode,\n utils,\n}) => {\n const {\n scopeManager,\n } = sourceCode;\n const {\n globalScope,\n } = scopeManager;\n\n const {\n definedTypes = [],\n } = context.options[0] || {};\n\n let definedPreferredTypes = [];\n const {\n preferredTypes,\n structuredTags,\n mode,\n } = settings;\n if (Object.keys(preferredTypes).length) {\n definedPreferredTypes = Object.values(preferredTypes).map((preferredType) => {\n if (typeof preferredType === 'string') {\n // May become an empty string but will be filtered out below\n return stripPseudoTypes(preferredType);\n }\n\n if (!preferredType) {\n return undefined;\n }\n\n if (typeof preferredType !== 'object') {\n utils.reportSettings(\n 'Invalid `settings.jsdoc.preferredTypes`. Values must be falsy, a string, or an object.',\n );\n }\n\n return stripPseudoTypes(preferredType.replacement);\n })\n .filter((preferredType) => {\n return preferredType;\n });\n }\n\n const typedefDeclarations = context.getAllComments()\n .filter((comment) => {\n return comment.value.startsWith('*');\n })\n .map((commentNode) => {\n return parseComment(commentNode, '');\n })\n .flatMap((doc) => {\n return doc.tags.filter(({\n tag,\n }) => {\n return utils.isNamepathDefiningTag(tag);\n });\n })\n .map((tag) => {\n return tag.name;\n });\n\n const ancestorNodes = [];\n\n let currentNode = node;\n // No need for Program node?\n while (currentNode?.parent) {\n ancestorNodes.push(currentNode);\n currentNode = currentNode.parent;\n }\n\n const getTemplateTags = function (ancestorNode) {\n const commentNode = getJSDocComment(sourceCode, ancestorNode, settings);\n if (!commentNode) {\n return [];\n }\n\n const jsdoc = parseComment(commentNode, '');\n\n return jsdocUtils.filterTags(jsdoc.tags, (tag) => {\n return tag.tag === 'template';\n });\n };\n\n // `currentScope` may be `null` or `Program`, so in such a case,\n // we look to present tags instead\n const templateTags = ancestorNodes.length ?\n ancestorNodes.flatMap((ancestorNode) => {\n return getTemplateTags(ancestorNode);\n }) :\n utils.getPresentTags('template');\n\n const closureGenericTypes = templateTags.flatMap((tag) => {\n return utils.parseClosureTemplateTag(tag);\n });\n\n // In modules, including Node, there is a global scope at top with the\n // Program scope inside\n const cjsOrESMScope = globalScope.childScopes[0]?.block.type === 'Program';\n\n const allDefinedTypes = new Set(globalScope.variables.map(({\n name,\n }) => {\n return name;\n })\n\n // If the file is a module, concat the variables from the module scope.\n .concat(\n cjsOrESMScope ?\n globalScope.childScopes.flatMap(({\n variables,\n }) => {\n return variables;\n }).map(({\n name,\n }) => {\n return name;\n }) : [],\n )\n .concat(extraTypes)\n .concat(typedefDeclarations)\n .concat(definedTypes)\n .concat(definedPreferredTypes)\n .concat(settings.mode === 'jsdoc' ? [] : closureGenericTypes));\n\n const jsdocTagsWithPossibleType = utils.filterTags(({\n tag,\n }) => {\n return utils.tagMightHaveTypePosition(tag) && (tag !== 'suppress' || settings.mode !== 'closure');\n });\n\n for (const tag of jsdocTagsWithPossibleType) {\n let parsedType;\n\n try {\n parsedType = mode === 'permissive' ? tryParseType(tag.type) : parseType(tag.type, mode);\n } catch {\n // On syntax error, will be handled by valid-types.\n continue;\n }\n\n traverse(parsedType, ({\n type,\n value,\n }) => {\n if (type === 'JsdocTypeName') {\n const structuredTypes = structuredTags[tag.tag]?.type;\n if (!allDefinedTypes.has(value) &&\n (!Array.isArray(structuredTypes) || !structuredTypes.includes(value))\n ) {\n report(`The type '${value}' is undefined.`, null, tag);\n } else if (!extraTypes.includes(value)) {\n context.markVariableAsUsed(value);\n }\n }\n });\n }\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Checks that types in jsdoc comments are defined.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-no-undefined-types',\n },\n schema: [\n {\n additionalProperties: false,\n properties: {\n definedTypes: {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"file":"noUndefinedTypes.js"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/rules/requireAsteriskPrefix.js"],"names":["context","jsdoc","utils","indent","defaultRequireValue","tags","tagMap","options","source","always","never","currentTag","some","number","tokens","delimiter","tag","end","description","neverFix","postDelimiter","checkNever","checkValue","includes","reportJSDoc","column","line","alwaysFix","start","checkAlways","slice","any","iterateAllJsdocs","meta","fixable","schema","enum","type","additionalProperties","properties","items"],"mappings":";;;;;;;AAAA;;;;eAEe,2BAAa,CAAC;AAC3BA,EAAAA,OAD2B;AAE3BC,EAAAA,KAF2B;AAG3BC,EAAAA,KAH2B;AAI3BC,EAAAA;AAJ2B,CAAD,KAKtB;AACJ,QAAM,
|
|
1
|
+
{"version":3,"sources":["../../src/rules/requireAsteriskPrefix.js"],"names":["context","jsdoc","utils","indent","defaultRequireValue","tags","tagMap","options","source","always","never","currentTag","some","number","tokens","delimiter","tag","end","description","neverFix","postDelimiter","checkNever","checkValue","includes","reportJSDoc","column","line","alwaysFix","start","checkAlways","slice","any","iterateAllJsdocs","meta","fixable","schema","enum","type","additionalProperties","properties","items"],"mappings":"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","sourcesContent":["import iterateJsdoc from '../iterateJsdoc';\n\nexport default iterateJsdoc(({\n context,\n jsdoc,\n utils,\n indent,\n}) => {\n const [\n defaultRequireValue = 'always',\n {\n tags: tagMap = {},\n } = {},\n ] = context.options;\n\n const {\n source,\n } = jsdoc;\n\n const always = defaultRequireValue === 'always';\n const never = defaultRequireValue === 'never';\n\n let currentTag;\n source.some(({\n number,\n tokens,\n }) => {\n const {\n delimiter,\n tag,\n end,\n description,\n } = tokens;\n\n const neverFix = () => {\n tokens.delimiter = '';\n tokens.postDelimiter = '';\n };\n\n const checkNever = (checkValue) => {\n if (delimiter && delimiter !== '/**' && (\n never && !tagMap.always?.includes(checkValue) ||\n tagMap.never?.includes(checkValue)\n )) {\n utils.reportJSDoc('Expected JSDoc line to have no prefix.', {\n column: 0,\n line: number,\n }, neverFix);\n\n return true;\n }\n\n return false;\n };\n\n const alwaysFix = () => {\n if (!tokens.start) {\n tokens.start = indent + ' ';\n }\n\n tokens.delimiter = '*';\n tokens.postDelimiter = tag || description ? ' ' : '';\n };\n\n const checkAlways = (checkValue) => {\n if (\n !delimiter && (\n always && !tagMap.never?.includes(checkValue) ||\n tagMap.always?.includes(checkValue)\n )\n ) {\n utils.reportJSDoc('Expected JSDoc line to have the prefix.', {\n column: 0,\n line: number,\n }, alwaysFix);\n\n return true;\n }\n\n return false;\n };\n\n if (tag) {\n // Remove at sign\n currentTag = tag.slice(1);\n }\n\n if (\n // If this is the end but has a tag, the delimiter will also be\n // populated and will be safely ignored later\n end && !tag\n ) {\n return false;\n }\n\n if (!currentTag) {\n if (tagMap.any?.includes('*description')) {\n return false;\n }\n\n if (checkNever('*description')) {\n return true;\n }\n\n if (checkAlways('*description')) {\n return true;\n }\n\n return false;\n }\n\n if (tagMap.any?.includes(currentTag)) {\n return false;\n }\n\n if (checkNever(currentTag)) {\n return true;\n }\n\n if (checkAlways(currentTag)) {\n return true;\n }\n\n return false;\n });\n}, {\n iterateAllJsdocs: true,\n meta: {\n fixable: 'code',\n schema: [\n {\n enum: [\n 'always', 'never', 'any',\n ],\n type: 'string',\n },\n {\n additionalProperties: false,\n properties: {\n tags: {\n properties: {\n always: {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n any: {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n never: {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n },\n type: 'object',\n },\n },\n type: 'object',\n },\n ],\n type: 'layout',\n },\n});\n"],"file":"requireAsteriskPrefix.js"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/rules/requireDescription.js"],"names":["checkDescription","description","trim","split","filter","Boolean","length","jsdoc","report","utils","context","avoidDocs","descriptionStyle","options","targetTagName","getPreferredTagName","skipReportingBlockedTag","tagName","isBlocked","blocked","getDescription","descTags","getPresentTags","tag","functionExamples","tags","example","name","getTagDescription","contextDefaults","meta","docs","url","schema","additionalProperties","properties","checkConstructors","default","type","checkGetters","checkSetters","contexts","items","anyOf","comment","enum","exemptedBy"],"mappings":";;;;;;;AAAA;;;;AAEA,MAAMA,gBAAgB,GAAIC,WAAD,IAAiB;AACxC,SAAOA,WAAW,CACfC,IADI,GAEJC,KAFI,CAEE,IAFF,EAGJC,MAHI,CAGGC,OAHH,EAIJC,MAJH;AAKD,CAND;;eAQe,2BAAa,CAAC;AAC3BC,EAAAA,KAD2B;AAE3BC,EAAAA,MAF2B;AAG3BC,EAAAA,KAH2B;AAI3BC,EAAAA;AAJ2B,CAAD,KAKtB;AACJ,MAAID,KAAK,CAACE,SAAN,EAAJ,EAAuB;AACrB;AACD;;AAED,QAAM;
|
|
1
|
+
{"version":3,"sources":["../../src/rules/requireDescription.js"],"names":["checkDescription","description","trim","split","filter","Boolean","length","jsdoc","report","utils","context","avoidDocs","descriptionStyle","options","targetTagName","getPreferredTagName","skipReportingBlockedTag","tagName","isBlocked","blocked","getDescription","descTags","getPresentTags","tag","functionExamples","tags","example","name","getTagDescription","contextDefaults","meta","docs","url","schema","additionalProperties","properties","checkConstructors","default","type","checkGetters","checkSetters","contexts","items","anyOf","comment","enum","exemptedBy"],"mappings":"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","sourcesContent":["import iterateJsdoc from '../iterateJsdoc';\n\nconst checkDescription = (description) => {\n return description\n .trim()\n .split('\\n')\n .filter(Boolean)\n .length;\n};\n\nexport default iterateJsdoc(({\n jsdoc,\n report,\n utils,\n context,\n}) => {\n if (utils.avoidDocs()) {\n return;\n }\n\n const {\n descriptionStyle = 'body',\n } = context.options[0] || {};\n\n let targetTagName = utils.getPreferredTagName({\n // We skip reporting except when `@description` is essential to the rule,\n // so user can block the tag and still meaningfully use this rule\n // even if the tag is present (and `check-tag-names` is the one to\n // normally report the fact that it is blocked but present)\n skipReportingBlockedTag: descriptionStyle !== 'tag',\n tagName: 'description',\n });\n if (!targetTagName) {\n return;\n }\n\n const isBlocked = typeof targetTagName === 'object' && targetTagName.blocked;\n if (isBlocked) {\n targetTagName = targetTagName.tagName;\n }\n\n if (descriptionStyle !== 'tag') {\n const {\n description,\n } = utils.getDescription();\n if (checkDescription(description || '')) {\n return;\n }\n\n if (descriptionStyle === 'body') {\n const descTags = utils.getPresentTags([\n 'desc', 'description',\n ]);\n if (descTags.length) {\n const [\n {\n tag: tagName,\n },\n ] = descTags;\n report(`Remove the @${tagName} tag to leave a plain block description or add additional description text above the @${tagName} line.`);\n } else {\n report('Missing JSDoc block description.');\n }\n\n return;\n }\n }\n\n const functionExamples = isBlocked ?\n [] :\n jsdoc.tags.filter(({\n tag,\n }) => {\n return tag === targetTagName;\n });\n\n if (!functionExamples.length) {\n report(\n descriptionStyle === 'any' ?\n `Missing JSDoc block description or @${targetTagName} declaration.` :\n `Missing JSDoc @${targetTagName} declaration.`,\n );\n\n return;\n }\n\n for (const example of functionExamples) {\n if (!checkDescription(`${example.name} ${utils.getTagDescription(example)}`)) {\n report(`Missing JSDoc @${targetTagName} description.`, null, example);\n }\n }\n}, {\n contextDefaults: true,\n meta: {\n docs: {\n description: 'Requires that all functions have a description.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-require-description',\n },\n schema: [\n {\n additionalProperties: false,\n properties: {\n checkConstructors: {\n default: true,\n type: 'boolean',\n },\n checkGetters: {\n default: true,\n type: 'boolean',\n },\n checkSetters: {\n default: true,\n type: 'boolean',\n },\n contexts: {\n items: {\n anyOf: [\n {\n type: 'string',\n },\n {\n additionalProperties: false,\n properties: {\n comment: {\n type: 'string',\n },\n context: {\n type: 'string',\n },\n },\n type: 'object',\n },\n ],\n },\n type: 'array',\n },\n descriptionStyle: {\n enum: [\n 'body', 'tag', 'any',\n ],\n type: 'string',\n },\n exemptedBy: {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"file":"requireDescription.js"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/rules/requireDescriptionCompleteSentence.js"],"names":["otherDescriptiveTags","Set","extractParagraphs","text","split","extractSentences","abbreviationsRegex","txt","replace","sentenceEndGrouping","puncts","RegExtras","map","punct","sentence","idx","test","isNewLinePrecededByAPeriod","lastLineEndsSentence","lines","some","line","isCapitalized","str","toUpperCase","isTable","charAt","capitalize","slice","validateDescription","description","reportOrig","jsdocNode","sourceCode","tag","newlineBeforeCapsAssumesBadSentenceEnd","paragraphs","paragraph","parIdx","sentences","fix","fixer","getText","pop","RegExp","filter","sentence_","beginning","reg","_$0","$1","replaceText","report","msg","tagObj","source","number","column","paragraphNoAbbreviations","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"],"mappings":";;;;;;;AAAA;;AACA;;AAGA;;;;AAEA,MAAMA,oBAAoB,GAAG,IAAIC,GAAJ,CAAQ,CACnC;AACA;AACA;AACA,SAJmC,EAIxB,MAJwB,EAIhB,cAJgB,EAIA,UAJA,EAIY,WAJZ,EAIyB,MAJzB,EAKnC,YALmC,EAKrB,QALqB,EAKX,WALW,EAKE,QALF,EAKY,OALZ,CAAR,CAA7B;;AAQA,MAAMC,iBAAiB,GAAIC,IAAD,IAAU;AAClC,SAAOA,IAAI,CAACC,KAAL,CAAW,gBAAX,CAAP;AACD,CAFD;;AAIA,MAAMC,gBAAgB,GAAG,CAACF,IAAD,EAAOG,kBAAP,KAA8B;AACrD,QAAMC,GAAG,GAAGJ,IAAI,CAEd;AAFc,GAGbK,OAHS,CAGD,mBAHC,EAGoB,EAHpB,EAKV;AALU,GAMTA,OANS,CAMDF,kBANC,EAMmB,EANnB,CAAZ;AAQA,QAAMG,mBAAmB,GAAG,mBAA5B,CATqD,CAWrD;;AACA,QAAMC,MAAM,GAAG,IAAIC,kBAAJ,CAAcF,mBAAd,EAAmCG,GAAnC,CAAuCL,GAAvC,EAA6CM,KAAD,IAAW;AACpE,WAAOA,KAAP;AACD,GAFc,CAAf;AAIA,SAAON,GAAG,CAEPH,KAFI,CAEE,iBAFF,EAIL;AAJK,GAKJQ,GALI,CAKA,CAACE,QAAD,EAAWC,GAAX,KAAmB;AACtB,WAAO,SAASC,IAAT,CAAcF,QAAd,IAA0BA,QAA1B,GAAsC,GAAEA,QAAS,GAAEJ,MAAM,CAACK,GAAD,CAAN,IAAe,EAAG,EAA5E;AACD,GAPI,CAAP;AAQD,CAxBD;;AA0BA,MAAME,0BAA0B,GAAId,IAAD,IAAU;AAC3C,MAAIe,oBAAJ;AAEA,QAAMC,KAAK,GAAGhB,IAAI,CAACC,KAAL,CAAW,IAAX,CAAd;AAEA,SAAO,CAACe,KAAK,CAACC,IAAN,CAAYC,IAAD,IAAU;AAC3B,QAAIH,oBAAoB,KAAK,KAAzB,IAAkC,eAAeF,IAAf,CAAoBK,IAApB,CAAtC,EAAiE;AAC/D,aAAO,IAAP;AACD;;AAEDH,IAAAA,oBAAoB,GAAG,YAAYF,IAAZ,CAAiBK,IAAjB,CAAvB;AAEA,WAAO,KAAP;AACD,GARO,CAAR;AASD,CAdD;;AAgBA,MAAMC,aAAa,GAAIC,GAAD,IAAS;AAC7B,SAAOA,GAAG,CAAC,CAAD,CAAH,KAAWA,GAAG,CAAC,CAAD,CAAH,CAAOC,WAAP,EAAlB;AACD,CAFD;;AAIA,MAAMC,OAAO,GAAIF,GAAD,IAAS;AACvB,SAAOA,GAAG,CAACG,MAAJ,OAAiB,GAAxB;AACD,CAFD;;AAIA,MAAMC,UAAU,GAAIJ,GAAD,IAAS;AAC1B,SAAOA,GAAG,CAACG,MAAJ,CAAW,CAAX,EAAcF,WAAd,KAA8BD,GAAG,CAACK,KAAJ,CAAU,CAAV,CAArC;AACD,CAFD;;AAIA,MAAMC,mBAAmB,GAAG,CAC1BC,WAD0B,EACbC,UADa,EACDC,SADC,EACU1B,kBADV,EAE1B2B,UAF0B,EAEdC,GAFc,EAETC,sCAFS,KAGvB;AACH,MAAI,CAACL,WAAL,EAAkB;AAChB,WAAO,KAAP;AACD;;AAED,QAAMM,UAAU,GAAGlC,iBAAiB,CAAC4B,WAAD,CAApC;AAEA,SAAOM,UAAU,CAAChB,IAAX,CAAgB,CAACiB,SAAD,EAAYC,MAAZ,KAAuB;AAC5C,UAAMC,SAAS,GAAGlC,gBAAgB,CAACgC,SAAD,EAAY/B,kBAAZ,CAAlC;;AAEA,UAAMkC,GAAG,GAAIC,KAAD,IAAW;AACrB,UAAItC,IAAI,GAAG8B,UAAU,CAACS,OAAX,CAAmBV,SAAnB,CAAX;;AAEA,UAAI,CAAC,WAAWhB,IAAX,CAAgBqB,SAAhB,CAAL,EAAiC;AAC/B,cAAMhB,IAAI,GAAGgB,SAAS,CAACjC,KAAV,CAAgB,IAAhB,EAAsBuC,GAAtB,EAAb;AAEAxC,QAAAA,IAAI,GAAGA,IAAI,CAACK,OAAL,CAAa,IAAIoC,MAAJ,CAAY,GAAE,iCAAmBvB,IAAnB,CAAyB,GAAvC,EAA2C,IAA3C,CAAb,EAAgE,GAAEA,IAAK,GAAvE,CAAP;AACD;;AAED,WAAK,MAAMP,QAAX,IAAuByB,SAAS,CAACM,MAAV,CAAkBC,SAAD,IAAe;AACrD,eAAO,CAAE,QAAD,CAAW9B,IAAX,CAAgB8B,SAAhB,CAAD,IAA+B,CAACxB,aAAa,CAACwB,SAAD,CAA7C,IACL,CAACrB,OAAO,CAACqB,SAAD,CADV;AAED,OAHsB,CAAvB,EAGI;AACF,cAAMC,SAAS,GAAGjC,QAAQ,CAACV,KAAT,CAAe,IAAf,EAAqB,CAArB,CAAlB;;AAEA,YAAI8B,GAAG,CAACA,GAAR,EAAa;AACX,gBAAMc,GAAG,GAAG,IAAIJ,MAAJ,CAAY,KAAI,iCAAmBV,GAAG,CAACA,GAAvB,CAA4B,MAAK,iCAAmBa,SAAnB,CAA8B,EAA/E,EAAkF,GAAlF,CAAZ;AAEA5C,UAAAA,IAAI,GAAGA,IAAI,CAACK,OAAL,CAAawC,GAAb,EAAkB,CAACC,GAAD,EAAMC,EAAN,KAAa;AACpC,mBAAOA,EAAE,GAAGvB,UAAU,CAACoB,SAAD,CAAtB;AACD,WAFM,CAAP;AAGD,SAND,MAMO;AACL5C,UAAAA,IAAI,GAAGA,IAAI,CAACK,OAAL,CAAa,IAAIoC,MAAJ,CAAW,4BAA4B,iCAAmBG,SAAnB,CAAvC,EAAsE,GAAtE,CAAb,EAAyF,OAAOpB,UAAU,CAACoB,SAAD,CAA1G,CAAP;AACD;AACF;;AAED,aAAON,KAAK,CAACU,WAAN,CAAkBnB,SAAlB,EAA6B7B,IAA7B,CAAP;AACD,KA3BD;;AA6BA,UAAMiD,MAAM,GAAG,CAACC,GAAD,EAAMZ,KAAN,EAAaa,MAAb,KAAwB;AACrC,UAAI,UAAUA,MAAd,EAAsB;AACpBA,QAAAA,MAAM,CAACjC,IAAP,IAAeiB,MAAM,GAAG,CAAxB;AACD,OAFD,MAEO;AACLgB,QAAAA,MAAM,CAACC,MAAP,CAAc,CAAd,EAAiBC,MAAjB,IAA2BlB,MAAM,GAAG,CAApC;AACD,OALoC,CAOrC;;;AACAgB,MAAAA,MAAM,CAACG,MAAP,GAAgB,CAAhB;AACA1B,MAAAA,UAAU,CAACsB,GAAD,EAAMZ,KAAN,EAAaa,MAAb,CAAV;AACD,KAVD;;AAYA,QAAIf,SAAS,CAACnB,IAAV,CAAgBN,QAAD,IAAc;AAC/B,aAAO,CAAE,QAAD,CAAWE,IAAX,CAAgBF,QAAhB,CAAD,IAA8B,CAACQ,aAAa,CAACR,QAAD,CAA5C,IAA0D,CAACW,OAAO,CAACX,QAAD,CAAzE;AACD,KAFG,CAAJ,EAEI;AACFsC,MAAAA,MAAM,CAAC,oDAAD,EAAuDZ,GAAvD,EAA4DN,GAA5D,CAAN;AACD;;AAED,UAAMwB,wBAAwB,GAAGrB,SAAS,CAAC7B,OAAV,CAAkBF,kBAAlB,EAAsC,EAAtC,CAAjC;;AAEA,QAAI,CAAC,cAAcU,IAAd,CAAmB0C,wBAAnB,CAAL,EAAmD;AACjDN,MAAAA,MAAM,CAAC,kCAAD,EAAqCZ,GAArC,EAA0CN,GAA1C,CAAN;AAEA,aAAO,IAAP;AACD;;AAED,QAAIC,sCAAsC,IAAI,CAAClB,0BAA0B,CAACyC,wBAAD,CAAzE,EAAqG;AACnGN,MAAAA,MAAM,CAAC,sGAAD,EAAyG,IAAzG,EAA+GlB,GAA/G,CAAN;AAEA,aAAO,IAAP;AACD;;AAED,WAAO,KAAP;AACD,GAjEM,CAAP;AAkED,CA5ED;;eA8Ee,2BAAa,CAAC;AAC3BD,EAAAA,UAD2B;AAE3B0B,EAAAA,OAF2B;AAG3BC,EAAAA,KAH2B;AAI3BR,EAAAA,MAJ2B;AAK3BpB,EAAAA,SAL2B;AAM3B6B,EAAAA;AAN2B,CAAD,KAOtB;AACJ,QAAMC,OAAO,GAAGH,OAAO,CAACG,OAAR,CAAgB,CAAhB,KAAsB,EAAtC;AACA,QAAM;AACJC,IAAAA,aAAa,GAAG,EADZ;AAEJ5B,IAAAA,sCAAsC,GAAG;AAFrC,MAGF2B,OAHJ;AAKA,QAAMxD,kBAAkB,GAAGyD,aAAa,CAACC,MAAd,GACzB,IAAIpB,MAAJ,CAAW,QAAQmB,aAAa,CAACnD,GAAd,CAAmBqD,YAAD,IAAkB;AACrD,WAAO,iCAAmBA,YAAY,CAACzD,OAAb,CAAqB,OAArB,EAA8B,EAA9B,IAAoC,GAAvD,CAAP;AACD,GAFkB,EAEhB0D,IAFgB,CAEX,GAFW,CAAR,GAEI,WAFf,EAE4B,IAF5B,CADyB,GAIzB,EAJF;AAMA,QAAM;AAACpC,IAAAA;AAAD,MAAgB+B,KAAK,CAACM,cAAN,EAAtB;;AAEA,MAAItC,mBAAmB,CAACC,WAAD,EAAcsB,MAAd,EAAsBpB,SAAtB,EAAiC1B,kBAAjC,EAAqD2B,UAArD,EAAiE;AACtFZ,IAAAA,IAAI,EAAEuC,KAAK,CAACL,MAAN,CAAa,CAAb,EAAgBC,MAAhB,GAAyB;AADuD,GAAjE,EAEpBrB,sCAFoB,CAAvB,EAE4C;AAC1C;AACD;;AAED0B,EAAAA,KAAK,CAACO,mBAAN,CAA0B,aAA1B,EAA0CC,gBAAD,IAAsB;AAC7D,UAAMC,IAAI,GAAI,GAAED,gBAAgB,CAACE,IAAK,IAAGV,KAAK,CAACW,iBAAN,CAAwBH,gBAAxB,CAA0C,EAAtE,CAAwEI,IAAxE,EAAb;AACA5C,IAAAA,mBAAmB,CAACyC,IAAD,EAAOlB,MAAP,EAAepB,SAAf,EAA0B1B,kBAA1B,EAA8C2B,UAA9C,EAA0DoC,gBAA1D,EAA4ElC,sCAA5E,CAAnB;AACD,GAHD,EAGG,IAHH;AAKA,QAAM;AAACuC,IAAAA;AAAD,MAAkBb,KAAK,CAACc,aAAN,CAAoBf,KAAK,CAACgB,IAA1B,CAAxB;AACA,QAAMC,gBAAgB,GAAGhB,KAAK,CAACiB,UAAN,CAAiB,CAAC;AAAC5C,IAAAA,GAAG,EAAE6C;AAAN,GAAD,KAAoB;AAC5D,WAAO/E,oBAAoB,CAACgF,GAArB,CAAyBD,OAAzB,KACLlB,KAAK,CAACoB,YAAN,CAAmBF,OAAnB,KAA+B,CAACL,aAAa,CAACtD,IAAd,CAAmB,CAAC;AAACc,MAAAA;AAAD,KAAD,KAAW;AAC5D;AACA;AACA,aAAOA,GAAG,KAAK6C,OAAf;AACD,KAJ+B,CADlC;AAMD,GAPwB,CAAzB;AASAL,EAAAA,aAAa,CAACtD,IAAd,CAAoBc,GAAD,IAAS;AAC1B,UAAMoC,IAAI,GAAGT,KAAK,CAACW,iBAAN,CAAwBtC,GAAxB,EAA6B1B,OAA7B,CAAqC,MAArC,EAA6C,EAA7C,EAAiD0E,OAAjD,EAAb;AAEA,WAAOrD,mBAAmB,CAACyC,IAAD,EAAOlB,MAAP,EAAepB,SAAf,EAA0B1B,kBAA1B,EAA8C2B,UAA9C,EAA0DC,GAA1D,EAA+DC,sCAA/D,CAA1B;AACD,GAJD;AAMA0C,EAAAA,gBAAgB,CAACzD,IAAjB,CAAuBc,GAAD,IAAS;AAC7B,UAAMoC,IAAI,GAAI,GAAEpC,GAAG,CAACqC,IAAK,IAAGV,KAAK,CAACW,iBAAN,CAAwBtC,GAAxB,CAA6B,EAA5C,CAA8CuC,IAA9C,EAAb;AAEA,WAAO5C,mBAAmB,CAACyC,IAAD,EAAOlB,MAAP,EAAepB,SAAf,EAA0B1B,kBAA1B,EAA8C2B,UAA9C,EAA0DC,GAA1D,EAA+DC,sCAA/D,CAA1B;AACD,GAJD;AAKD,CAtDc,EAsDZ;AACDgD,EAAAA,gBAAgB,EAAE,IADjB;AAEDC,EAAAA,IAAI,EAAE;AACJC,IAAAA,IAAI,EAAE;AACJvD,MAAAA,WAAW,EAAE,uIADT;AAEJwD,MAAAA,GAAG,EAAE;AAFD,KADF;AAKJC,IAAAA,OAAO,EAAE,MALL;AAMJC,IAAAA,MAAM,EAAE,CACN;AACEC,MAAAA,oBAAoB,EAAE,KADxB;AAEEC,MAAAA,UAAU,EAAE;AACV3B,QAAAA,aAAa,EAAE;AACb4B,UAAAA,KAAK,EAAE;AACLC,YAAAA,IAAI,EAAE;AADD,WADM;AAIbA,UAAAA,IAAI,EAAE;AAJO,SADL;AAOVzD,QAAAA,sCAAsC,EAAE;AACtCyD,UAAAA,IAAI,EAAE;AADgC,SAP9B;AAUVhB,QAAAA,IAAI,EAAE;AACJe,UAAAA,KAAK,EAAE;AACLC,YAAAA,IAAI,EAAE;AADD,WADH;AAIJA,UAAAA,IAAI,EAAE;AAJF;AAVI,OAFd;AAmBEA,MAAAA,IAAI,EAAE;AAnBR,KADM,CANJ;AA6BJA,IAAAA,IAAI,EAAE;AA7BF;AAFL,CAtDY,C","sourcesContent":["import escapeStringRegexp from 'escape-string-regexp';\nimport {\n RegExtras,\n} from 'regextras/dist/main-umd';\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+|$)/u;\n\n // eslint-disable-next-line unicorn/no-array-method-this-argument\n const puncts = new RegExtras(sentenceEndGrouping).map(txt, (punct) => {\n return punct;\n });\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 return false;\n }\n\n const paragraphs = extractParagraphs(description);\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').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 {description} = 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 {tagsWithNames} = utils.getTagsByType(jsdoc.tags);\n const tagsWithoutNames = utils.filterTags(({tag: tagName}) => {\n return otherDescriptiveTags.has(tagName) ||\n utils.hasOptionTag(tagName) && !tagsWithNames.some(({tag}) => {\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"],"file":"requireDescriptionCompleteSentence.js"}
|
|
1
|
+
{"version":3,"sources":["../../src/rules/requireDescriptionCompleteSentence.js"],"names":["otherDescriptiveTags","Set","extractParagraphs","text","split","extractSentences","abbreviationsRegex","txt","replace","sentenceEndGrouping","puncts","RegExtras","map","punct","sentence","idx","test","isNewLinePrecededByAPeriod","lastLineEndsSentence","lines","some","line","isCapitalized","str","toUpperCase","isTable","charAt","capitalize","slice","validateDescription","description","reportOrig","jsdocNode","sourceCode","tag","newlineBeforeCapsAssumesBadSentenceEnd","paragraphs","paragraph","parIdx","sentences","fix","fixer","getText","pop","RegExp","filter","sentence_","beginning","reg","_$0","$1","replaceText","report","msg","tagObj","source","number","column","paragraphNoAbbreviations","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"],"mappings":"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","sourcesContent":["import escapeStringRegexp from 'escape-string-regexp';\nimport {\n RegExtras,\n} from 'regextras/dist/main-umd';\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+|$)/u;\n\n // eslint-disable-next-line unicorn/no-array-method-this-argument\n const puncts = new RegExtras(sentenceEndGrouping).map(txt, (punct) => {\n return punct;\n });\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 return false;\n }\n\n const paragraphs = extractParagraphs(description);\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').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"],"file":"requireDescriptionCompleteSentence.js"}
|