eslint-plugin-jsdoc 36.1.0 → 37.0.2
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 +37 -16
- package/dist/alignTransform.js +3 -1
- package/dist/alignTransform.js.map +1 -1
- package/dist/bin/generateRule.js.map +1 -1
- package/dist/exportParser.js +29 -17
- package/dist/exportParser.js.map +1 -1
- package/dist/generateRule.js.map +1 -1
- package/dist/iterateJsdoc.js +43 -35
- package/dist/iterateJsdoc.js.map +1 -1
- package/dist/jsdocUtils.js +26 -13
- package/dist/jsdocUtils.js.map +1 -1
- package/dist/rules/checkAccess.js.map +1 -1
- package/dist/rules/checkExamples.js +19 -7
- package/dist/rules/checkExamples.js.map +1 -1
- package/dist/rules/checkIndentation.js +2 -2
- package/dist/rules/checkIndentation.js.map +1 -1
- package/dist/rules/checkLineAlignment.js +6 -4
- package/dist/rules/checkLineAlignment.js.map +1 -1
- package/dist/rules/checkParamNames.js +17 -12
- package/dist/rules/checkParamNames.js.map +1 -1
- package/dist/rules/checkPropertyNames.js.map +1 -1
- package/dist/rules/checkTagNames.js +4 -4
- package/dist/rules/checkTagNames.js.map +1 -1
- package/dist/rules/checkTypes.js +9 -7
- package/dist/rules/checkTypes.js.map +1 -1
- package/dist/rules/checkValues.js.map +1 -1
- package/dist/rules/emptyTags.js +3 -2
- 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 +6 -4
- package/dist/rules/matchName.js.map +1 -1
- package/dist/rules/multilineBlocks.js +4 -2
- package/dist/rules/multilineBlocks.js.map +1 -1
- package/dist/rules/newlineAfterDescription.js +1 -1
- package/dist/rules/newlineAfterDescription.js.map +1 -1
- package/dist/rules/noBadBlocks.js +3 -3
- package/dist/rules/noBadBlocks.js.map +1 -1
- package/dist/rules/noDefaults.js +9 -6
- package/dist/rules/noDefaults.js.map +1 -1
- package/dist/rules/noMissingSyntax.js.map +1 -1
- package/dist/rules/noMultiAsterisks.js +1 -1
- package/dist/rules/noMultiAsterisks.js.map +1 -1
- package/dist/rules/noRestrictedSyntax.js.map +1 -1
- package/dist/rules/noTypes.js +6 -3
- package/dist/rules/noTypes.js.map +1 -1
- package/dist/rules/noUndefinedTypes.js +5 -4
- package/dist/rules/noUndefinedTypes.js.map +1 -1
- package/dist/rules/requireAsteriskPrefix.js.map +1 -1
- package/dist/rules/requireDescription.js +2 -2
- package/dist/rules/requireDescription.js.map +1 -1
- package/dist/rules/requireDescriptionCompleteSentence.js +4 -3
- package/dist/rules/requireDescriptionCompleteSentence.js.map +1 -1
- package/dist/rules/requireExample.js +2 -2
- package/dist/rules/requireExample.js.map +1 -1
- package/dist/rules/requireFileOverview.js.map +1 -1
- package/dist/rules/requireHyphenBeforeParamDescription.js +10 -7
- package/dist/rules/requireHyphenBeforeParamDescription.js.map +1 -1
- package/dist/rules/requireJsdoc.js +10 -6
- package/dist/rules/requireJsdoc.js.map +1 -1
- package/dist/rules/requireParam.js +34 -28
- package/dist/rules/requireParam.js.map +1 -1
- package/dist/rules/requireProperty.js +3 -3
- 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/tagLines.js +11 -8
- package/dist/rules/tagLines.js.map +1 -1
- package/dist/rules/validTypes.js +15 -13
- package/dist/rules/validTypes.js.map +1 -1
- package/dist/tagNames.js +1 -1
- package/package.json +52 -49
package/dist/rules/noDefaults.js
CHANGED
|
@@ -17,23 +17,26 @@ var _default = (0, _iterateJsdoc.default)(({
|
|
|
17
17
|
noOptionalParamNames
|
|
18
18
|
} = context.options[0] || {};
|
|
19
19
|
const paramTags = utils.getPresentTags(['param', 'arg', 'argument']);
|
|
20
|
-
|
|
20
|
+
|
|
21
|
+
for (const tag of paramTags) {
|
|
21
22
|
if (noOptionalParamNames && tag.optional) {
|
|
22
23
|
utils.reportJSDoc(`Optional param names are not permitted on @${tag.tag}.`, tag, () => {
|
|
23
24
|
utils.changeTag(tag, {
|
|
24
|
-
name: tag.name.replace(/([^=]*)(=.+)
|
|
25
|
+
name: tag.name.replace(/([^=]*)(=.+)?/u, '$1')
|
|
25
26
|
});
|
|
26
27
|
});
|
|
27
28
|
} else if (tag.default) {
|
|
28
29
|
utils.reportJSDoc(`Defaults are not permitted on @${tag.tag}.`, tag, () => {
|
|
29
30
|
utils.changeTag(tag, {
|
|
30
|
-
name: tag.name.replace(/([^=]*)(=.+)
|
|
31
|
+
name: tag.name.replace(/([^=]*)(=.+)?/u, '[$1]')
|
|
31
32
|
});
|
|
32
33
|
});
|
|
33
34
|
}
|
|
34
|
-
}
|
|
35
|
+
}
|
|
36
|
+
|
|
35
37
|
const defaultTags = utils.getPresentTags(['default', 'defaultvalue']);
|
|
36
|
-
|
|
38
|
+
|
|
39
|
+
for (const tag of defaultTags) {
|
|
37
40
|
if (tag.description.trim()) {
|
|
38
41
|
utils.reportJSDoc(`Default values are not permitted on @${tag.tag}.`, tag, () => {
|
|
39
42
|
utils.changeTag(tag, {
|
|
@@ -42,7 +45,7 @@ var _default = (0, _iterateJsdoc.default)(({
|
|
|
42
45
|
});
|
|
43
46
|
});
|
|
44
47
|
}
|
|
45
|
-
}
|
|
48
|
+
}
|
|
46
49
|
}, {
|
|
47
50
|
contextDefaults: true,
|
|
48
51
|
meta: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/rules/noDefaults.js"],"names":["context","utils","noOptionalParamNames","options","paramTags","getPresentTags","
|
|
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;AAACC,IAAAA;AAAD,MAAyBF,OAAO,CAACG,OAAR,CAAgB,CAAhB,KAAsB,EAArD;AACA,QAAMC,SAAS,GAAGH,KAAK,CAACI,cAAN,CAAqB,CAAC,OAAD,EAAU,KAAV,EAAiB,UAAjB,CAArB,CAAlB;;AACA,OAAK,MAAMC,GAAX,IAAkBF,SAAlB,EAA6B;AAC3B,QAAIF,oBAAoB,IAAII,GAAG,CAACC,QAAhC,EAA0C;AACxCN,MAAAA,KAAK,CAACO,WAAN,CAAmB,8CAA6CF,GAAG,CAACA,GAAI,GAAxE,EAA4EA,GAA5E,EAAiF,MAAM;AACrFL,QAAAA,KAAK,CAACQ,SAAN,CAAgBH,GAAhB,EAAqB;AACnBI,UAAAA,IAAI,EAAEJ,GAAG,CAACI,IAAJ,CAASC,OAAT,CAAiB,gBAAjB,EAAmC,IAAnC;AADa,SAArB;AAGD,OAJD;AAKD,KAND,MAMO,IAAIL,GAAG,CAACM,OAAR,EAAiB;AACtBX,MAAAA,KAAK,CAACO,WAAN,CAAmB,kCAAiCF,GAAG,CAACA,GAAI,GAA5D,EAAgEA,GAAhE,EAAqE,MAAM;AACzEL,QAAAA,KAAK,CAACQ,SAAN,CAAgBH,GAAhB,EAAqB;AACnBI,UAAAA,IAAI,EAAEJ,GAAG,CAACI,IAAJ,CAASC,OAAT,CAAiB,gBAAjB,EAAmC,MAAnC;AADa,SAArB;AAGD,OAJD;AAKD;AACF;;AAED,QAAME,WAAW,GAAGZ,KAAK,CAACI,cAAN,CAAqB,CAAC,SAAD,EAAY,cAAZ,CAArB,CAApB;;AACA,OAAK,MAAMC,GAAX,IAAkBO,WAAlB,EAA+B;AAC7B,QAAIP,GAAG,CAACQ,WAAJ,CAAgBC,IAAhB,EAAJ,EAA4B;AAC1Bd,MAAAA,KAAK,CAACO,WAAN,CAAmB,wCAAuCF,GAAG,CAACA,GAAI,GAAlE,EAAsEA,GAAtE,EAA2E,MAAM;AAC/EL,QAAAA,KAAK,CAACQ,SAAN,CAAgBH,GAAhB,EAAqB;AACnBQ,UAAAA,WAAW,EAAE,EADM;AAEnBE,UAAAA,OAAO,EAAE;AAFU,SAArB;AAID,OALD;AAMD;AACF;AACF,CAjCc,EAiCZ;AACDC,EAAAA,eAAe,EAAE,IADhB;AAEDC,EAAAA,IAAI,EAAE;AACJC,IAAAA,IAAI,EAAE;AACJL,MAAAA,WAAW,EAAE,0FADT;AAEJM,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;AACEC,cAAAA,IAAI,EAAE;AADR,aADK,EAIL;AACEL,cAAAA,oBAAoB,EAAE,KADxB;AAEEC,cAAAA,UAAU,EAAE;AACVK,gBAAAA,OAAO,EAAE;AACPD,kBAAAA,IAAI,EAAE;AADC,iBADC;AAIV5B,gBAAAA,OAAO,EAAE;AACP4B,kBAAAA,IAAI,EAAE;AADC;AAJC,eAFd;AAUEA,cAAAA,IAAI,EAAE;AAVR,aAJK;AADF,WADC;AAoBRA,UAAAA,IAAI,EAAE;AApBE,SADA;AAuBV1B,QAAAA,oBAAoB,EAAE;AACpB0B,UAAAA,IAAI,EAAE;AADc;AAvBZ,OAFd;AA6BEA,MAAAA,IAAI,EAAE;AA7BR,KADM,CANJ;AAuCJA,IAAAA,IAAI,EAAE;AAvCF;AAFL,CAjCY,C","sourcesContent":["import iterateJsdoc from '../iterateJsdoc';\n\nexport default iterateJsdoc(({\n context,\n utils,\n}) => {\n const {noOptionalParamNames} = context.options[0] || {};\n const paramTags = utils.getPresentTags(['param', 'arg', 'argument']);\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(['default', 'defaultvalue']);\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","info","contextSelected","exit","context","options","length","report","loc","start","column","line","message","contexts","some","cntxt","contextStr","contextKey","undefined","minimum","Object","values","every","cmmnt","data","end","meta","docs","description","url","fixable","schema","additionalProperties","properties","items","anyOf","type"],"mappings":";;;;;;;AAAA;;;;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;;
|
|
1
|
+
{"version":3,"sources":["../../src/rules/noMissingSyntax.js"],"names":["setDefaults","state","selectorMap","incrementSelector","selector","comment","info","contextSelected","exit","context","options","length","report","loc","start","column","line","message","contexts","some","cntxt","contextStr","contextKey","undefined","minimum","Object","values","every","cmmnt","data","end","meta","docs","description","url","fixable","schema","additionalProperties","properties","items","anyOf","type"],"mappings":"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","sourcesContent":["import 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 info: {selector, comment},\n state,\n}) => {\n setDefaults(state);\n\n incrementSelector(state, selector, comment);\n}, {\n contextSelected: true,\n exit ({\n context, 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: {line: 1},\n start: {line: 1},\n },\n message,\n });\n\n return true;\n }\n\n return false;\n });\n },\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,7 @@ var _iterateJsdoc = _interopRequireDefault(require("../iterateJsdoc"));
|
|
|
9
9
|
|
|
10
10
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
11
11
|
|
|
12
|
-
const middleAsterisks = /^[
|
|
12
|
+
const middleAsterisks = /^([\t ]|\*(?!\*))+/u;
|
|
13
13
|
|
|
14
14
|
var _default = (0, _iterateJsdoc.default)(({
|
|
15
15
|
context,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/rules/noMultiAsterisks.js"],"names":["middleAsterisks","context","jsdoc","utils","preventAtEnd","preventAtMiddleLines","options","source","some","tokens","number","delimiter","tag","name","type","description","end","test","fix","replace","reportJSDoc","line","isSingleLineBlock","delim","endAsterisks","endingAsterisksAndSpaces","match","trim","endFix","iterateAllJsdocs","meta","docs","url","fixable","schema","additionalProperies","properties"],"mappings":";;;;;;;AAAA;;;;AAEA,MAAMA,eAAe,GAAG,
|
|
1
|
+
{"version":3,"sources":["../../src/rules/noMultiAsterisks.js"],"names":["middleAsterisks","context","jsdoc","utils","preventAtEnd","preventAtMiddleLines","options","source","some","tokens","number","delimiter","tag","name","type","description","end","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 middleAsterisks = /^([\\t ]|\\*(?!\\*))+/u;\n\nexport default iterateJsdoc(({\n context,\n jsdoc,\n utils,\n}) => {\n const {\n preventAtEnd = true,\n preventAtMiddleLines = true,\n } = context.options[0] || {};\n\n jsdoc.source.some(({tokens, number}) => {\n const {\n delimiter, tag, name, type, description, end,\n } = tokens;\n if (\n preventAtMiddleLines &&\n !end && !tag && !type && !name && middleAsterisks.test(description)\n ) {\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 const endAsterisks = isSingleLineBlock ?\n /\\*((?:\\*|(?: |\\t))*)\\*$/u :\n /((?:\\*|(?: |\\t))*)\\*$/u;\n\n const endingAsterisksAndSpaces = (description + delim).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 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":["context","info","selector","comment","report","options","length","contexts","foundContext","find","cntxt","contextStr","message","contextSelected","meta","docs","description","url","fixable","schema","additionalProperties","properties","items","anyOf","type","required"],"mappings":";;;;;;;AAAA;;;;eAEe,2BAAa,CAAC;AAC3BA,EAAAA,OAD2B;AAE3BC,EAAAA,IAAI,EAAE;AAACC,IAAAA,QAAD;AAAWC,IAAAA;AAAX,GAFqB;AAG3BC,EAAAA;AAH2B,CAAD,KAItB;AAAA;;AACJ,MAAI,CAACJ,OAAO,CAACK,OAAR,CAAgBC,MAArB,EAA6B;AAC3BF,IAAAA,MAAM,CAAC,4DAAD,CAAN;AAEA;AACD;;
|
|
1
|
+
{"version":3,"sources":["../../src/rules/noRestrictedSyntax.js"],"names":["context","info","selector","comment","report","options","length","contexts","foundContext","find","cntxt","contextStr","message","contextSelected","meta","docs","description","url","fixable","schema","additionalProperties","properties","items","anyOf","type","required"],"mappings":";;;;;;;AAAA;;;;eAEe,2BAAa,CAAC;AAC3BA,EAAAA,OAD2B;AAE3BC,EAAAA,IAAI,EAAE;AAACC,IAAAA,QAAD;AAAWC,IAAAA;AAAX,GAFqB;AAG3BC,EAAAA;AAH2B,CAAD,KAItB;AAAA;;AACJ,MAAI,CAACJ,OAAO,CAACK,OAAR,CAAgBC,MAArB,EAA6B;AAC3BF,IAAAA,MAAM,CAAC,4DAAD,CAAN;AAEA;AACD;;AAED,QAAM;AAACG,IAAAA;AAAD,MAAaP,OAAO,CAACK,OAAR,CAAgB,CAAhB,CAAnB;AAEA,QAAMG,YAAY,GAAGD,QAAQ,CAACE,IAAT,CAAeC,KAAD,IAAW;AAC5C,WAAOA,KAAK,KAAKR,QAAV,IACL,OAAOQ,KAAP,KAAiB,QAAjB,KACC,CAACA,KAAK,CAACV,OAAP,IAAkBU,KAAK,CAACV,OAAN,KAAkB,KAApC,IAA6CE,QAAQ,KAAKQ,KAAK,CAACV,OADjE,KAEEG,OAAO,KAAKO,KAAK,CAACP,OAHtB;AAID,GALoB,CAArB;AAOA,QAAMQ,UAAU,GAAG,OAAOH,YAAP,KAAwB,QAAxB,4BACjBA,YAAY,CAACR,OADI,yEACO,KADP,GAEjBQ,YAFF;AAGA,QAAMI,OAAO,4BAAGJ,YAAH,aAAGA,YAAH,uBAAGA,YAAY,CAAEI,OAAjB,yEACX,oCADF;AAGAR,EAAAA,MAAM,CAACQ,OAAD,EAAU,IAAV,EAAgB,IAAhB,EAAsB;AAC1BZ,IAAAA,OAAO,EAAEW;AADiB,GAAtB,CAAN;AAGD,CA7Bc,EA6BZ;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;AACVd,QAAAA,QAAQ,EAAE;AACRe,UAAAA,KAAK,EAAE;AACLC,YAAAA,KAAK,EAAE,CACL;AACEC,cAAAA,IAAI,EAAE;AADR,aADK,EAIL;AACEJ,cAAAA,oBAAoB,EAAE,KADxB;AAEEC,cAAAA,UAAU,EAAE;AACVlB,gBAAAA,OAAO,EAAE;AACPqB,kBAAAA,IAAI,EAAE;AADC,iBADC;AAIVxB,gBAAAA,OAAO,EAAE;AACPwB,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,CAAC,UAAD,CA7BZ;AA8BED,MAAAA,IAAI,EAAE;AA9BR,KADM,CANJ;AAwCJA,IAAAA,IAAI,EAAE;AAxCF;AAFL,CA7BY,C","sourcesContent":["import iterateJsdoc from '../iterateJsdoc';\n\nexport default iterateJsdoc(({\n context,\n info: {selector, comment},\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 {contexts} = context.options[0];\n\n const foundContext = contexts.find((cntxt) => {\n return cntxt === selector ||\n typeof cntxt === 'object' &&\n (!cntxt.context || cntxt.context === 'any' || selector === cntxt.context) &&\n comment === cntxt.comment;\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: ['contexts'],\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"file":"noRestrictedSyntax.js"}
|
package/dist/rules/noTypes.js
CHANGED
|
@@ -24,13 +24,16 @@ var _default = (0, _iterateJsdoc.default)(({
|
|
|
24
24
|
}
|
|
25
25
|
|
|
26
26
|
const tags = utils.getPresentTags(['param', 'arg', 'argument', 'returns', 'return']);
|
|
27
|
-
|
|
27
|
+
|
|
28
|
+
for (const tag of tags) {
|
|
28
29
|
if (tag.type) {
|
|
29
30
|
utils.reportJSDoc(`Types are not permitted on @${tag.tag}.`, tag, () => {
|
|
30
|
-
tag.source
|
|
31
|
+
for (const source of tag.source) {
|
|
32
|
+
removeType(source);
|
|
33
|
+
}
|
|
31
34
|
});
|
|
32
35
|
}
|
|
33
|
-
}
|
|
36
|
+
}
|
|
34
37
|
}, {
|
|
35
38
|
contextDefaults: true,
|
|
36
39
|
meta: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/rules/noTypes.js"],"names":["removeType","tokens","postTag","type","utils","isIteratingFunction","isVirtualFunction","tags","getPresentTags","
|
|
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;AAACC,EAAAA;AAAD,CAAD,KAAc;AAC/BA,EAAAA,MAAM,CAACC,OAAP,GAAiB,EAAjB;AACAD,EAAAA,MAAM,CAACE,IAAP,GAAc,EAAd;AACD,CAHD;;eAKe,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,CAAC,OAAD,EAAU,KAAV,EAAiB,UAAjB,EAA6B,SAA7B,EAAwC,QAAxC,CAArB,CAAb;;AAEA,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,CAlBc,EAkBZ;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,CAlBY,C","sourcesContent":["import iterateJsdoc from '../iterateJsdoc';\n\nconst removeType = ({tokens}) => {\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(['param', 'arg', 'argument', 'returns', 'return']);\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"}
|
|
@@ -106,7 +106,7 @@ var _default = (0, _iterateJsdoc.default)(({
|
|
|
106
106
|
|
|
107
107
|
const jsdoc = (0, _iterateJsdoc.parseComment)(commentNode, '');
|
|
108
108
|
return _jsdocUtils.default.filterTags(jsdoc.tags, tag => {
|
|
109
|
-
return 'template'
|
|
109
|
+
return tag.tag === 'template';
|
|
110
110
|
});
|
|
111
111
|
}).value() : utils.getPresentTags('template');
|
|
112
112
|
const classJsdoc = utils.getClassJsdoc();
|
|
@@ -145,14 +145,15 @@ var _default = (0, _iterateJsdoc.default)(({
|
|
|
145
145
|
}) => {
|
|
146
146
|
return utils.tagMightHaveTypePosition(tag);
|
|
147
147
|
});
|
|
148
|
-
|
|
148
|
+
|
|
149
|
+
for (const tag of jsdocTagsWithPossibleType) {
|
|
149
150
|
let parsedType;
|
|
150
151
|
|
|
151
152
|
try {
|
|
152
153
|
parsedType = mode === 'permissive' ? (0, _jsdocTypePrattParser.tryParse)(tag.type) : (0, _jsdocTypePrattParser.parse)(tag.type, mode);
|
|
153
154
|
} catch {
|
|
154
155
|
// On syntax error, will be handled by valid-types.
|
|
155
|
-
|
|
156
|
+
continue;
|
|
156
157
|
}
|
|
157
158
|
|
|
158
159
|
(0, _jsdocTypePrattParser.traverse)(parsedType, ({
|
|
@@ -171,7 +172,7 @@ var _default = (0, _iterateJsdoc.default)(({
|
|
|
171
172
|
}
|
|
172
173
|
}
|
|
173
174
|
});
|
|
174
|
-
}
|
|
175
|
+
}
|
|
175
176
|
}, {
|
|
176
177
|
iterateAllJsdocs: true,
|
|
177
178
|
meta: {
|
|
@@ -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","forEach","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 _ from 'lodash';\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', '*',\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 if (!preferredType) {\n return undefined;\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 }).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 .value();\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 'template' === tag.tag;\n });\n }).value() :\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 = _.flatMap(templateTags, (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 _.flatMap(globalScope.childScopes, ({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);\n });\n\n jsdocTagsWithPossibleType.forEach((tag) => {\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 return;\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","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 _ from 'lodash';\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', '*',\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 .value();\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 .value() :\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 = _.flatMap(templateTags, (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 _.flatMap(globalScope.childScopes, ({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);\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 +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,CAACC,mBAAmB,GAAG,QAAvB,EAAiC;AACrCC,IAAAA,IAAI,EAAEC,MAAM,GAAG;AADsB,MAEnC,EAFE,IAEIN,OAAO,CAACO,OAFlB;AAIA,QAAM;AAACC,IAAAA;AAAD,MAAWP,KAAjB;AAEA,QAAMQ,MAAM,GAAGL,mBAAmB,KAAK,QAAvC;AACA,QAAMM,KAAK,GAAGN,mBAAmB,KAAK,OAAtC;AAEA,MAAIO,UAAJ;AACAH,EAAAA,MAAM,CAACI,IAAP,CAAY,CAAC;AAACC,IAAAA,MAAD;AAASC,IAAAA;AAAT,GAAD,KAAsB;AAAA;;AAChC,UAAM;AAACC,MAAAA,SAAD;AAAYC,MAAAA,GAAZ;AAAiBC,MAAAA,GAAjB;AAAsBC,MAAAA;AAAtB,QAAqCJ,MAA3C;;AAEA,UAAMK,QAAQ,GAAG,MAAM;AACrBL,MAAAA,MAAM,CAACC,SAAP,GAAmB,EAAnB;AACAD,MAAAA,MAAM,CAACM,aAAP,GAAuB,EAAvB;AACD,KAHD;;
|
|
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 [defaultRequireValue = 'always', {\n tags: tagMap = {},\n } = {}] = context.options;\n\n const {source} = jsdoc;\n\n const always = defaultRequireValue === 'always';\n const never = defaultRequireValue === 'never';\n\n let currentTag;\n source.some(({number, tokens}) => {\n const {delimiter, tag, end, description} = 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: ['always', 'never', 'any'],\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"}
|
|
@@ -83,11 +83,11 @@ var _default = (0, _iterateJsdoc.default)(({
|
|
|
83
83
|
return;
|
|
84
84
|
}
|
|
85
85
|
|
|
86
|
-
|
|
86
|
+
for (const example of functionExamples) {
|
|
87
87
|
if (!checkDescription(`${example.name} ${utils.getTagDescription(example)}`)) {
|
|
88
88
|
report(`Missing JSDoc @${targetTagName} description.`, null, example);
|
|
89
89
|
}
|
|
90
|
-
}
|
|
90
|
+
}
|
|
91
91
|
}, {
|
|
92
92
|
contextDefaults: true,
|
|
93
93
|
meta: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/rules/requireDescription.js"],"names":["jsdoc","report","utils","context","avoidDocs","descriptionStyle","options","targetTagName","getPreferredTagName","skipReportingBlockedTag","tagName","isBlocked","blocked","checkDescription","description","exampleContent","_","compact","trim","split","length","getDescription","descTags","getPresentTags","tag","functionExamples","filter","tags","
|
|
1
|
+
{"version":3,"sources":["../../src/rules/requireDescription.js"],"names":["jsdoc","report","utils","context","avoidDocs","descriptionStyle","options","targetTagName","getPreferredTagName","skipReportingBlockedTag","tagName","isBlocked","blocked","checkDescription","description","exampleContent","_","compact","trim","split","length","getDescription","descTags","getPresentTags","tag","functionExamples","filter","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 _ from 'lodash';\nimport iterateJsdoc from '../iterateJsdoc';\n\nexport default iterateJsdoc(({\n jsdoc,\n report,\n utils,\n context,\n}) => {\n if (utils.avoidDocs()) {\n return;\n }\n\n const {descriptionStyle = 'body'} = 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 const checkDescription = (description) => {\n const exampleContent = _.compact(description.trim().split('\\n'));\n\n return exampleContent.length;\n };\n\n if (descriptionStyle !== 'tag') {\n const {description} = utils.getDescription();\n if (checkDescription(description || '')) {\n return;\n }\n\n if (descriptionStyle === 'body') {\n const descTags = utils.getPresentTags(['desc', 'description']);\n if (descTags.length) {\n const [{tag: tagName}] = 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 _.filter(jsdoc.tags, {\n 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: ['body', 'tag', 'any'],\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"}
|
|
@@ -26,8 +26,9 @@ const extractSentences = (text, abbreviationsRegex) => {
|
|
|
26
26
|
const txt = text // Remove all {} tags.
|
|
27
27
|
.replace(/\{[\s\S]*?\}\s*/gu, '') // Remove custom abbreviations
|
|
28
28
|
.replace(abbreviationsRegex, '');
|
|
29
|
-
const sentenceEndGrouping = /([.?!])(?:\s+|$)/u;
|
|
30
|
-
|
|
29
|
+
const sentenceEndGrouping = /([.?!])(?:\s+|$)/u; // eslint-disable-next-line unicorn/no-array-method-this-argument, unicorn/no-array-callback-reference
|
|
30
|
+
|
|
31
|
+
const puncts = new _mainUmd.RegExtras(sentenceEndGrouping).map(txt, punct => {
|
|
31
32
|
return punct;
|
|
32
33
|
});
|
|
33
34
|
return txt.split(/[.?!](?:\s+|$)/u) // Re-add the dot.
|
|
@@ -144,7 +145,7 @@ var _default = (0, _iterateJsdoc.default)(({
|
|
|
144
145
|
newlineBeforeCapsAssumesBadSentenceEnd = false
|
|
145
146
|
} = options;
|
|
146
147
|
const abbreviationsRegex = abbreviations.length ? new RegExp('\\b' + abbreviations.map(abbreviation => {
|
|
147
|
-
return _lodash.default.escapeRegExp(abbreviation.replace(/\.$/
|
|
148
|
+
return _lodash.default.escapeRegExp(abbreviation.replace(/\.$/ug, '') + '.');
|
|
148
149
|
}).join('|') + '(?:$|\\s)', 'gu') : '';
|
|
149
150
|
const {
|
|
150
151
|
description
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/rules/requireDescriptionCompleteSentence.js"],"names":["otherDescriptiveTags","Set","extractParagraphs","text","split","extractSentences","abbreviationsRegex","txt","replace","sentenceEndGrouping","puncts","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","_","escapeRegExp","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","trimStart","trimEnd","iterateAllJsdocs","meta","docs","url","fixable","schema","additionalProperties","properties","items","type"],"mappings":"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","sourcesContent":["import _ from 'lodash';\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 const puncts = 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(`${_.escapeRegExp(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(`(@${_.escapeRegExp(tag.tag)}.*)${_.escapeRegExp(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*)' + _.escapeRegExp(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 _.escapeRegExp(abbreviation.replace(/\\.$/g, '') + '.');\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 = _.trimStart(utils.getTagDescription(tag), '- ').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","_","escapeRegExp","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","trimStart","trimEnd","iterateAllJsdocs","meta","docs","url","fixable","schema","additionalProperties","properties","items","type"],"mappings":"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","sourcesContent":["import _ from 'lodash';\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, unicorn/no-array-callback-reference\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(`${_.escapeRegExp(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(`(@${_.escapeRegExp(tag.tag)}.*)${_.escapeRegExp(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*)' + _.escapeRegExp(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 _.escapeRegExp(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 = _.trimStart(utils.getTagDescription(tag), '- ').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"}
|
|
@@ -41,13 +41,13 @@ var _default = (0, _iterateJsdoc.default)(({
|
|
|
41
41
|
return;
|
|
42
42
|
}
|
|
43
43
|
|
|
44
|
-
|
|
44
|
+
for (const example of functionExamples) {
|
|
45
45
|
const exampleContent = _lodash.default.compact(`${example.name} ${utils.getTagDescription(example)}`.trim().split('\n'));
|
|
46
46
|
|
|
47
47
|
if (!exampleContent.length) {
|
|
48
48
|
report(`Missing JSDoc @${targetTagName} description.`, null, example);
|
|
49
49
|
}
|
|
50
|
-
}
|
|
50
|
+
}
|
|
51
51
|
}, {
|
|
52
52
|
contextDefaults: true,
|
|
53
53
|
meta: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/rules/requireExample.js"],"names":["context","jsdoc","report","utils","avoidDocs","exemptNoArguments","options","targetTagName","functionExamples","_","filter","tags","tag","length","isIteratingFunction","hasParams","reportJSDoc","addTag","
|
|
1
|
+
{"version":3,"sources":["../../src/rules/requireExample.js"],"names":["context","jsdoc","report","utils","avoidDocs","exemptNoArguments","options","targetTagName","functionExamples","_","filter","tags","tag","length","isIteratingFunction","hasParams","reportJSDoc","addTag","example","exampleContent","compact","name","getTagDescription","trim","split","contextDefaults","meta","docs","description","url","fixable","schema","additionalProperties","properties","checkConstructors","default","type","checkGetters","checkSetters","contexts","items","anyOf","comment","exemptedBy"],"mappings":"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","sourcesContent":["import _ from 'lodash';\nimport iterateJsdoc from '../iterateJsdoc';\n\nexport default iterateJsdoc(({\n context,\n jsdoc,\n report,\n utils,\n}) => {\n if (utils.avoidDocs()) {\n return;\n }\n\n const {\n exemptNoArguments = false,\n } = context.options[0] || {};\n\n const targetTagName = 'example';\n\n const functionExamples = _.filter(jsdoc.tags, {\n tag: targetTagName,\n });\n\n if (!functionExamples.length) {\n if (exemptNoArguments && utils.isIteratingFunction() &&\n !utils.hasParams()\n ) {\n return;\n }\n\n utils.reportJSDoc(`Missing JSDoc @${targetTagName} declaration.`, null, () => {\n utils.addTag(targetTagName);\n });\n\n return;\n }\n\n for (const example of functionExamples) {\n const exampleContent = _.compact(`${example.name} ${utils.getTagDescription(example)}`.trim().split('\\n'));\n\n if (!exampleContent.length) {\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 examples.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-require-example',\n },\n fixable: 'code',\n schema: [\n {\n additionalProperties: false,\n properties: {\n checkConstructors: {\n default: true,\n type: 'boolean',\n },\n checkGetters: {\n default: false,\n type: 'boolean',\n },\n checkSetters: {\n default: false,\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 exemptedBy: {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n exemptNoArguments: {\n default: false,\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"file":"requireExample.js"}
|