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.
Files changed (72) hide show
  1. package/README.md +37 -16
  2. package/dist/alignTransform.js +3 -1
  3. package/dist/alignTransform.js.map +1 -1
  4. package/dist/bin/generateRule.js.map +1 -1
  5. package/dist/exportParser.js +29 -17
  6. package/dist/exportParser.js.map +1 -1
  7. package/dist/generateRule.js.map +1 -1
  8. package/dist/iterateJsdoc.js +43 -35
  9. package/dist/iterateJsdoc.js.map +1 -1
  10. package/dist/jsdocUtils.js +26 -13
  11. package/dist/jsdocUtils.js.map +1 -1
  12. package/dist/rules/checkAccess.js.map +1 -1
  13. package/dist/rules/checkExamples.js +19 -7
  14. package/dist/rules/checkExamples.js.map +1 -1
  15. package/dist/rules/checkIndentation.js +2 -2
  16. package/dist/rules/checkIndentation.js.map +1 -1
  17. package/dist/rules/checkLineAlignment.js +6 -4
  18. package/dist/rules/checkLineAlignment.js.map +1 -1
  19. package/dist/rules/checkParamNames.js +17 -12
  20. package/dist/rules/checkParamNames.js.map +1 -1
  21. package/dist/rules/checkPropertyNames.js.map +1 -1
  22. package/dist/rules/checkTagNames.js +4 -4
  23. package/dist/rules/checkTagNames.js.map +1 -1
  24. package/dist/rules/checkTypes.js +9 -7
  25. package/dist/rules/checkTypes.js.map +1 -1
  26. package/dist/rules/checkValues.js.map +1 -1
  27. package/dist/rules/emptyTags.js +3 -2
  28. package/dist/rules/emptyTags.js.map +1 -1
  29. package/dist/rules/matchDescription.js +1 -1
  30. package/dist/rules/matchDescription.js.map +1 -1
  31. package/dist/rules/matchName.js +6 -4
  32. package/dist/rules/matchName.js.map +1 -1
  33. package/dist/rules/multilineBlocks.js +4 -2
  34. package/dist/rules/multilineBlocks.js.map +1 -1
  35. package/dist/rules/newlineAfterDescription.js +1 -1
  36. package/dist/rules/newlineAfterDescription.js.map +1 -1
  37. package/dist/rules/noBadBlocks.js +3 -3
  38. package/dist/rules/noBadBlocks.js.map +1 -1
  39. package/dist/rules/noDefaults.js +9 -6
  40. package/dist/rules/noDefaults.js.map +1 -1
  41. package/dist/rules/noMissingSyntax.js.map +1 -1
  42. package/dist/rules/noMultiAsterisks.js +1 -1
  43. package/dist/rules/noMultiAsterisks.js.map +1 -1
  44. package/dist/rules/noRestrictedSyntax.js.map +1 -1
  45. package/dist/rules/noTypes.js +6 -3
  46. package/dist/rules/noTypes.js.map +1 -1
  47. package/dist/rules/noUndefinedTypes.js +5 -4
  48. package/dist/rules/noUndefinedTypes.js.map +1 -1
  49. package/dist/rules/requireAsteriskPrefix.js.map +1 -1
  50. package/dist/rules/requireDescription.js +2 -2
  51. package/dist/rules/requireDescription.js.map +1 -1
  52. package/dist/rules/requireDescriptionCompleteSentence.js +4 -3
  53. package/dist/rules/requireDescriptionCompleteSentence.js.map +1 -1
  54. package/dist/rules/requireExample.js +2 -2
  55. package/dist/rules/requireExample.js.map +1 -1
  56. package/dist/rules/requireFileOverview.js.map +1 -1
  57. package/dist/rules/requireHyphenBeforeParamDescription.js +10 -7
  58. package/dist/rules/requireHyphenBeforeParamDescription.js.map +1 -1
  59. package/dist/rules/requireJsdoc.js +10 -6
  60. package/dist/rules/requireJsdoc.js.map +1 -1
  61. package/dist/rules/requireParam.js +34 -28
  62. package/dist/rules/requireParam.js.map +1 -1
  63. package/dist/rules/requireProperty.js +3 -3
  64. package/dist/rules/requireProperty.js.map +1 -1
  65. package/dist/rules/requireReturns.js.map +1 -1
  66. package/dist/rules/requireReturnsCheck.js.map +1 -1
  67. package/dist/rules/tagLines.js +11 -8
  68. package/dist/rules/tagLines.js.map +1 -1
  69. package/dist/rules/validTypes.js +15 -13
  70. package/dist/rules/validTypes.js.map +1 -1
  71. package/dist/tagNames.js +1 -1
  72. package/package.json +52 -49
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/rules/requireReturns.js"],"names":["canSkip","utils","hasATag","avoidDocs","report","context","forceRequireReturn","forceReturnsWithAsync","options","tagName","getPreferredTagName","tags","getTags","length","iteratingFunction","isIteratingFunction","tag","missingReturnTag","shouldReport","isVirtualFunction","isAsync","hasTag","hasValueOrExecutorHasNonEmptyResolveValue","contextDefaults","meta","docs","description","url","schema","additionalProperties","properties","checkConstructors","default","type","checkGetters","contexts","items","anyOf","comment","exemptedBy"],"mappings":"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","sourcesContent":["import iterateJsdoc from '../iterateJsdoc';\n\n/**\n * We can skip checking for a return value, in case the documentation is inherited\n * or the method is either a constructor or an abstract method.\n *\n * In either of these cases the return value is optional or not defined.\n *\n * @param {*} utils\n * a reference to the utils which are used to probe if a tag is present or not.\n * @returns {boolean}\n * true in case deep checking can be skipped; otherwise false.\n */\nconst canSkip = (utils) => {\n return utils.hasATag([\n // inheritdoc implies that all documentation is inherited\n // see https://jsdoc.app/tags-inheritdoc.html\n //\n // Abstract methods are by definition incomplete,\n // so it is not an error if it declares a return value but does not implement it.\n 'abstract',\n 'virtual',\n\n // Constructors do not have a return value by definition (https://jsdoc.app/tags-class.html)\n // So we can bail out here, too.\n 'class',\n 'constructor',\n\n // Return type is specified by type in @type\n 'type',\n\n // This seems to imply a class as well\n 'interface',\n ]) ||\n utils.avoidDocs();\n};\n\nexport default iterateJsdoc(({\n report,\n utils,\n context,\n}) => {\n const {\n forceRequireReturn = false,\n forceReturnsWithAsync = false,\n } = context.options[0] || {};\n\n // A preflight check. We do not need to run a deep check\n // in case the @returns comment is optional or undefined.\n if (canSkip(utils)) {\n return;\n }\n\n const tagName = utils.getPreferredTagName({tagName: 'returns'});\n if (!tagName) {\n return;\n }\n const tags = utils.getTags(tagName);\n\n if (tags.length > 1) {\n report(`Found more than one @${tagName} declaration.`);\n }\n\n const iteratingFunction = utils.isIteratingFunction();\n\n // In case the code returns something, we expect a return value in JSDoc.\n const [tag] = tags;\n const missingReturnTag = typeof tag === 'undefined' || tag === null;\n\n const shouldReport = () => {\n if (!missingReturnTag) {\n return false;\n }\n\n if (forceRequireReturn && (\n iteratingFunction || utils.isVirtualFunction()\n )) {\n return true;\n }\n\n const isAsync = !iteratingFunction && utils.hasTag('async') ||\n iteratingFunction && utils.isAsync();\n\n if (forceReturnsWithAsync && isAsync) {\n return true;\n }\n\n return iteratingFunction && utils.hasValueOrExecutorHasNonEmptyResolveValue(\n forceReturnsWithAsync,\n );\n };\n\n if (shouldReport()) {\n report(`Missing JSDoc @${tagName} declaration.`);\n }\n}, {\n contextDefaults: true,\n meta: {\n docs: {\n description: 'Requires returns are documented.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-require-returns',\n },\n schema: [\n {\n additionalProperties: false,\n properties: {\n checkConstructors: {\n default: false,\n type: 'boolean',\n },\n checkGetters: {\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 exemptedBy: {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n forceRequireReturn: {\n default: false,\n type: 'boolean',\n },\n forceReturnsWithAsync: {\n default: false,\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"file":"requireReturns.js"}
1
+ {"version":3,"sources":["../../src/rules/requireReturns.js"],"names":["canSkip","utils","hasATag","avoidDocs","report","context","forceRequireReturn","forceReturnsWithAsync","options","tagName","getPreferredTagName","tags","getTags","length","iteratingFunction","isIteratingFunction","tag","missingReturnTag","shouldReport","isVirtualFunction","isAsync","hasTag","hasValueOrExecutorHasNonEmptyResolveValue","contextDefaults","meta","docs","description","url","schema","additionalProperties","properties","checkConstructors","default","type","checkGetters","contexts","items","anyOf","comment","exemptedBy"],"mappings":"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","sourcesContent":["import iterateJsdoc from '../iterateJsdoc';\n\n/**\n * We can skip checking for a return value, in case the documentation is inherited\n * or the method is either a constructor or an abstract method.\n *\n * In either of these cases the return value is optional or not defined.\n *\n * @param {*} utils\n * a reference to the utils which are used to probe if a tag is present or not.\n * @returns {boolean}\n * true in case deep checking can be skipped; otherwise false.\n */\nconst canSkip = (utils) => {\n return utils.hasATag([\n // inheritdoc implies that all documentation is inherited\n // see https://jsdoc.app/tags-inheritdoc.html\n //\n // Abstract methods are by definition incomplete,\n // so it is not an error if it declares a return value but does not implement it.\n 'abstract',\n 'virtual',\n\n // Constructors do not have a return value by definition (https://jsdoc.app/tags-class.html)\n // So we can bail out here, too.\n 'class',\n 'constructor',\n\n // Return type is specified by type in @type\n 'type',\n\n // This seems to imply a class as well\n 'interface',\n ]) ||\n utils.avoidDocs();\n};\n\nexport default iterateJsdoc(({\n report,\n utils,\n context,\n}) => {\n const {\n forceRequireReturn = false,\n forceReturnsWithAsync = false,\n } = context.options[0] || {};\n\n // A preflight check. We do not need to run a deep check\n // in case the @returns comment is optional or undefined.\n if (canSkip(utils)) {\n return;\n }\n\n const tagName = utils.getPreferredTagName({tagName: 'returns'});\n if (!tagName) {\n return;\n }\n\n const tags = utils.getTags(tagName);\n\n if (tags.length > 1) {\n report(`Found more than one @${tagName} declaration.`);\n }\n\n const iteratingFunction = utils.isIteratingFunction();\n\n // In case the code returns something, we expect a return value in JSDoc.\n const [tag] = tags;\n const missingReturnTag = typeof tag === 'undefined' || tag === null;\n\n const shouldReport = () => {\n if (!missingReturnTag) {\n return false;\n }\n\n if (forceRequireReturn && (\n iteratingFunction || utils.isVirtualFunction()\n )) {\n return true;\n }\n\n const isAsync = !iteratingFunction && utils.hasTag('async') ||\n iteratingFunction && utils.isAsync();\n\n if (forceReturnsWithAsync && isAsync) {\n return true;\n }\n\n return iteratingFunction && utils.hasValueOrExecutorHasNonEmptyResolveValue(\n forceReturnsWithAsync,\n );\n };\n\n if (shouldReport()) {\n report(`Missing JSDoc @${tagName} declaration.`);\n }\n}, {\n contextDefaults: true,\n meta: {\n docs: {\n description: 'Requires returns are documented.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-require-returns',\n },\n schema: [\n {\n additionalProperties: false,\n properties: {\n checkConstructors: {\n default: false,\n type: 'boolean',\n },\n checkGetters: {\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 exemptedBy: {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n forceRequireReturn: {\n default: false,\n type: 'boolean',\n },\n forceReturnsWithAsync: {\n default: false,\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"file":"requireReturns.js"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/rules/requireReturnsCheck.js"],"names":["canSkip","utils","settings","voidingTags","mode","push","hasATag","isConstructor","classHasTag","context","node","report","exemptAsync","exemptGenerators","reportMissingReturnForUndefinedTypes","options","isAsync","tagName","getPreferredTagName","tags","getTags","length","hasDefinedTypeTag","hasValueOrExecutorHasNonEmptyResolveValue","generator","meta","docs","description","url","schema","additionalProperties","properties","default","type"],"mappings":";;;;;;;AAAA;;;;AAEA,MAAMA,OAAO,GAAG,CAACC,KAAD,EAAQC,QAAR,KAAqB;AACnC,QAAMC,WAAW,GAAG,CAClB;AACA;AACA;AACA;AACA;AACA,YANkB,EAOlB,SAPkB,EASlB;AACA;AACA,SAXkB,EAYlB,aAZkB,EAalB,WAbkB,CAApB;;AAgBA,MAAID,QAAQ,CAACE,IAAT,KAAkB,SAAtB,EAAiC;AAC/B;AACAD,IAAAA,WAAW,CAACE,IAAZ,CAAiB,QAAjB;AACD;;AAED,SAAOJ,KAAK,CAACK,OAAN,CAAcH,WAAd,KACLF,KAAK,CAACM,aAAN,EADK,IAELN,KAAK,CAACO,WAAN,CAAkB,WAAlB,CAFK,IAGLN,QAAQ,CAACE,IAAT,KAAkB,SAAlB,IAA+BH,KAAK,CAACO,WAAN,CAAkB,QAAlB,CAHjC;AAID,CA1BD;;eA4Be,2BAAa,CAAC;AAC3BC,EAAAA,OAD2B;AAE3BC,EAAAA,IAF2B;AAG3BC,EAAAA,MAH2B;AAI3BT,EAAAA,QAJ2B;AAK3BD,EAAAA;AAL2B,CAAD,KAMtB;AACJ,QAAM;AACJW,IAAAA,WAAW,GAAG,IADV;AAEJC,IAAAA,gBAAgB,GAAGX,QAAQ,CAACE,IAAT,KAAkB,YAFjC;AAGJU,IAAAA,oCAAoC,GAAG;AAHnC,MAIFL,OAAO,CAACM,OAAR,CAAgB,CAAhB,KAAsB,EAJ1B;;AAMA,MAAIf,OAAO,CAACC,KAAD,EAAQC,QAAR,CAAX,EAA8B;AAC5B;AACD;;AAED,MAAIU,WAAW,IAAIX,KAAK,CAACe,OAAN,EAAnB,EAAoC;AAClC;AACD;;AAED,QAAMC,OAAO,GAAGhB,KAAK,CAACiB,mBAAN,CAA0B;AAACD,IAAAA,OAAO,EAAE;AAAV,GAA1B,CAAhB;;AACA,MAAI,CAACA,OAAL,EAAc;AACZ;AACD;;AACD,QAAME,IAAI,GAAGlB,KAAK,CAACmB,OAAN,CAAcH,OAAd,CAAb;;AAEA,MAAIE,IAAI,CAACE,MAAL,KAAgB,CAApB,EAAuB;AACrB;AACD;;AAED,MAAIF,IAAI,CAACE,MAAL,GAAc,CAAlB,EAAqB;AACnBV,IAAAA,MAAM,CAAE,wBAAuBM,OAAQ,eAAjC,CAAN;AAEA;AACD,GA7BG,CA+BJ;;;AACA,MAAI,CAACH,oCAAoC,IAAIb,KAAK,CAACqB,iBAAN,CAAwBH,IAAI,CAAC,CAAD,CAA5B,CAAzC,KAA8E,CAAClB,KAAK,CAACsB,yCAAN,CACjFX,WADiF,CAA/E,KAEE,CAACC,gBAAD,IAAqB,CAACH,IAAI,CAACc,SAF7B,CAAJ,EAE6C;AAC3Cb,IAAAA,MAAM,CAAE,UAASM,OAAQ,uEAAnB,CAAN;AACD;AACF,CA3Cc,EA2CZ;AACDQ,EAAAA,IAAI,EAAE;AACJC,IAAAA,IAAI,EAAE;AACJC,MAAAA,WAAW,EAAE,iGADT;AAEJC,MAAAA,GAAG,EAAE;AAFD,KADF;AAKJC,IAAAA,MAAM,EAAE,CACN;AACEC,MAAAA,oBAAoB,EAAE,KADxB;AAEEC,MAAAA,UAAU,EAAE;AACVnB,QAAAA,WAAW,EAAE;AACXoB,UAAAA,OAAO,EAAE,IADE;AAEXC,UAAAA,IAAI,EAAE;AAFK,SADH;AAKVpB,QAAAA,gBAAgB,EAAE;AAChBoB,UAAAA,IAAI,EAAE;AADU,SALR;AAQVnB,QAAAA,oCAAoC,EAAE;AACpCkB,UAAAA,OAAO,EAAE,KAD2B;AAEpCC,UAAAA,IAAI,EAAE;AAF8B;AAR5B,OAFd;AAeEA,MAAAA,IAAI,EAAE;AAfR,KADM,CALJ;AAwBJA,IAAAA,IAAI,EAAE;AAxBF;AADL,CA3CY,C","sourcesContent":["import iterateJsdoc from '../iterateJsdoc';\n\nconst canSkip = (utils, settings) => {\n const voidingTags = [\n // An abstract function is by definition incomplete\n // so it is perfectly fine if a return is documented but\n // not present within the function.\n // A subclass may inherit the doc and implement the\n // missing return.\n 'abstract',\n 'virtual',\n\n // A constructor function returns `this` by default, so may be `@returns`\n // tag indicating this but no explicit return\n 'class',\n 'constructor',\n 'interface',\n ];\n\n if (settings.mode === 'closure') {\n // Structural Interface in GCC terms, equivalent to @interface tag as far as this rule is concerned\n voidingTags.push('record');\n }\n\n return utils.hasATag(voidingTags) ||\n utils.isConstructor() ||\n utils.classHasTag('interface') ||\n settings.mode === 'closure' && utils.classHasTag('record');\n};\n\nexport default iterateJsdoc(({\n context,\n node,\n report,\n settings,\n utils,\n}) => {\n const {\n exemptAsync = true,\n exemptGenerators = settings.mode === 'typescript',\n reportMissingReturnForUndefinedTypes = false,\n } = context.options[0] || {};\n\n if (canSkip(utils, settings)) {\n return;\n }\n\n if (exemptAsync && utils.isAsync()) {\n return;\n }\n\n const tagName = utils.getPreferredTagName({tagName: 'returns'});\n if (!tagName) {\n return;\n }\n const tags = utils.getTags(tagName);\n\n if (tags.length === 0) {\n return;\n }\n\n if (tags.length > 1) {\n report(`Found more than one @${tagName} declaration.`);\n\n return;\n }\n\n // In case a return value is declared in JSDoc, we also expect one in the code.\n if ((reportMissingReturnForUndefinedTypes || utils.hasDefinedTypeTag(tags[0])) && !utils.hasValueOrExecutorHasNonEmptyResolveValue(\n exemptAsync,\n ) && (!exemptGenerators || !node.generator)) {\n report(`JSDoc @${tagName} declaration present but return expression not available in function.`);\n }\n}, {\n meta: {\n docs: {\n description: 'Requires a return statement in function body if a `@returns` tag is specified in jsdoc comment.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-require-returns-check',\n },\n schema: [\n {\n additionalProperties: false,\n properties: {\n exemptAsync: {\n default: true,\n type: 'boolean',\n },\n exemptGenerators: {\n type: 'boolean',\n },\n reportMissingReturnForUndefinedTypes: {\n default: false,\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"file":"requireReturnsCheck.js"}
1
+ {"version":3,"sources":["../../src/rules/requireReturnsCheck.js"],"names":["canSkip","utils","settings","voidingTags","mode","push","hasATag","isConstructor","classHasTag","context","node","report","exemptAsync","exemptGenerators","reportMissingReturnForUndefinedTypes","options","isAsync","tagName","getPreferredTagName","tags","getTags","length","hasDefinedTypeTag","hasValueOrExecutorHasNonEmptyResolveValue","generator","meta","docs","description","url","schema","additionalProperties","properties","default","type"],"mappings":";;;;;;;AAAA;;;;AAEA,MAAMA,OAAO,GAAG,CAACC,KAAD,EAAQC,QAAR,KAAqB;AACnC,QAAMC,WAAW,GAAG,CAClB;AACA;AACA;AACA;AACA;AACA,YANkB,EAOlB,SAPkB,EASlB;AACA;AACA,SAXkB,EAYlB,aAZkB,EAalB,WAbkB,CAApB;;AAgBA,MAAID,QAAQ,CAACE,IAAT,KAAkB,SAAtB,EAAiC;AAC/B;AACAD,IAAAA,WAAW,CAACE,IAAZ,CAAiB,QAAjB;AACD;;AAED,SAAOJ,KAAK,CAACK,OAAN,CAAcH,WAAd,KACLF,KAAK,CAACM,aAAN,EADK,IAELN,KAAK,CAACO,WAAN,CAAkB,WAAlB,CAFK,IAGLN,QAAQ,CAACE,IAAT,KAAkB,SAAlB,IAA+BH,KAAK,CAACO,WAAN,CAAkB,QAAlB,CAHjC;AAID,CA1BD;;eA4Be,2BAAa,CAAC;AAC3BC,EAAAA,OAD2B;AAE3BC,EAAAA,IAF2B;AAG3BC,EAAAA,MAH2B;AAI3BT,EAAAA,QAJ2B;AAK3BD,EAAAA;AAL2B,CAAD,KAMtB;AACJ,QAAM;AACJW,IAAAA,WAAW,GAAG,IADV;AAEJC,IAAAA,gBAAgB,GAAGX,QAAQ,CAACE,IAAT,KAAkB,YAFjC;AAGJU,IAAAA,oCAAoC,GAAG;AAHnC,MAIFL,OAAO,CAACM,OAAR,CAAgB,CAAhB,KAAsB,EAJ1B;;AAMA,MAAIf,OAAO,CAACC,KAAD,EAAQC,QAAR,CAAX,EAA8B;AAC5B;AACD;;AAED,MAAIU,WAAW,IAAIX,KAAK,CAACe,OAAN,EAAnB,EAAoC;AAClC;AACD;;AAED,QAAMC,OAAO,GAAGhB,KAAK,CAACiB,mBAAN,CAA0B;AAACD,IAAAA,OAAO,EAAE;AAAV,GAA1B,CAAhB;;AACA,MAAI,CAACA,OAAL,EAAc;AACZ;AACD;;AAED,QAAME,IAAI,GAAGlB,KAAK,CAACmB,OAAN,CAAcH,OAAd,CAAb;;AAEA,MAAIE,IAAI,CAACE,MAAL,KAAgB,CAApB,EAAuB;AACrB;AACD;;AAED,MAAIF,IAAI,CAACE,MAAL,GAAc,CAAlB,EAAqB;AACnBV,IAAAA,MAAM,CAAE,wBAAuBM,OAAQ,eAAjC,CAAN;AAEA;AACD,GA9BG,CAgCJ;;;AACA,MAAI,CAACH,oCAAoC,IAAIb,KAAK,CAACqB,iBAAN,CAAwBH,IAAI,CAAC,CAAD,CAA5B,CAAzC,KAA8E,CAAClB,KAAK,CAACsB,yCAAN,CACjFX,WADiF,CAA/E,KAEE,CAACC,gBAAD,IAAqB,CAACH,IAAI,CAACc,SAF7B,CAAJ,EAE6C;AAC3Cb,IAAAA,MAAM,CAAE,UAASM,OAAQ,uEAAnB,CAAN;AACD;AACF,CA5Cc,EA4CZ;AACDQ,EAAAA,IAAI,EAAE;AACJC,IAAAA,IAAI,EAAE;AACJC,MAAAA,WAAW,EAAE,iGADT;AAEJC,MAAAA,GAAG,EAAE;AAFD,KADF;AAKJC,IAAAA,MAAM,EAAE,CACN;AACEC,MAAAA,oBAAoB,EAAE,KADxB;AAEEC,MAAAA,UAAU,EAAE;AACVnB,QAAAA,WAAW,EAAE;AACXoB,UAAAA,OAAO,EAAE,IADE;AAEXC,UAAAA,IAAI,EAAE;AAFK,SADH;AAKVpB,QAAAA,gBAAgB,EAAE;AAChBoB,UAAAA,IAAI,EAAE;AADU,SALR;AAQVnB,QAAAA,oCAAoC,EAAE;AACpCkB,UAAAA,OAAO,EAAE,KAD2B;AAEpCC,UAAAA,IAAI,EAAE;AAF8B;AAR5B,OAFd;AAeEA,MAAAA,IAAI,EAAE;AAfR,KADM,CALJ;AAwBJA,IAAAA,IAAI,EAAE;AAxBF;AADL,CA5CY,C","sourcesContent":["import iterateJsdoc from '../iterateJsdoc';\n\nconst canSkip = (utils, settings) => {\n const voidingTags = [\n // An abstract function is by definition incomplete\n // so it is perfectly fine if a return is documented but\n // not present within the function.\n // A subclass may inherit the doc and implement the\n // missing return.\n 'abstract',\n 'virtual',\n\n // A constructor function returns `this` by default, so may be `@returns`\n // tag indicating this but no explicit return\n 'class',\n 'constructor',\n 'interface',\n ];\n\n if (settings.mode === 'closure') {\n // Structural Interface in GCC terms, equivalent to @interface tag as far as this rule is concerned\n voidingTags.push('record');\n }\n\n return utils.hasATag(voidingTags) ||\n utils.isConstructor() ||\n utils.classHasTag('interface') ||\n settings.mode === 'closure' && utils.classHasTag('record');\n};\n\nexport default iterateJsdoc(({\n context,\n node,\n report,\n settings,\n utils,\n}) => {\n const {\n exemptAsync = true,\n exemptGenerators = settings.mode === 'typescript',\n reportMissingReturnForUndefinedTypes = false,\n } = context.options[0] || {};\n\n if (canSkip(utils, settings)) {\n return;\n }\n\n if (exemptAsync && utils.isAsync()) {\n return;\n }\n\n const tagName = utils.getPreferredTagName({tagName: 'returns'});\n if (!tagName) {\n return;\n }\n\n const tags = utils.getTags(tagName);\n\n if (tags.length === 0) {\n return;\n }\n\n if (tags.length > 1) {\n report(`Found more than one @${tagName} declaration.`);\n\n return;\n }\n\n // In case a return value is declared in JSDoc, we also expect one in the code.\n if ((reportMissingReturnForUndefinedTypes || utils.hasDefinedTypeTag(tags[0])) && !utils.hasValueOrExecutorHasNonEmptyResolveValue(\n exemptAsync,\n ) && (!exemptGenerators || !node.generator)) {\n report(`JSDoc @${tagName} declaration present but return expression not available in function.`);\n }\n}, {\n meta: {\n docs: {\n description: 'Requires a return statement in function body if a `@returns` tag is specified in jsdoc comment.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-require-returns-check',\n },\n schema: [\n {\n additionalProperties: false,\n properties: {\n exemptAsync: {\n default: true,\n type: 'boolean',\n },\n exemptGenerators: {\n type: 'boolean',\n },\n reportMissingReturnForUndefinedTypes: {\n default: false,\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"file":"requireReturnsCheck.js"}
@@ -22,7 +22,8 @@ var _default = (0, _iterateJsdoc.default)(({
22
22
  jsdoc.tags.some((tg, tagIdx) => {
23
23
  let lastTag;
24
24
  let reportIndex = null;
25
- tg.source.forEach(({
25
+
26
+ for (const [idx, {
26
27
  tokens: {
27
28
  tag,
28
29
  name,
@@ -30,7 +31,7 @@ var _default = (0, _iterateJsdoc.default)(({
30
31
  description,
31
32
  end
32
33
  }
33
- }, idx) => {
34
+ }] of tg.source.entries()) {
34
35
  var _tags$lastTag$slice, _tags$lastTag$slice2;
35
36
 
36
37
  // May be text after a line break within a tag description
@@ -39,16 +40,16 @@ var _default = (0, _iterateJsdoc.default)(({
39
40
  }
40
41
 
41
42
  if (lastTag && ['any', 'always'].includes((_tags$lastTag$slice = tags[lastTag.slice(1)]) === null || _tags$lastTag$slice === void 0 ? void 0 : _tags$lastTag$slice.lines)) {
42
- return;
43
+ continue;
43
44
  }
44
45
 
45
46
  if (!tag && !name && !type && !description && !end && (alwaysNever === 'never' || lastTag && ((_tags$lastTag$slice2 = tags[lastTag.slice(1)]) === null || _tags$lastTag$slice2 === void 0 ? void 0 : _tags$lastTag$slice2.lines) === 'never')) {
46
47
  reportIndex = idx;
47
- return;
48
+ continue;
48
49
  }
49
50
 
50
51
  lastTag = tag;
51
- });
52
+ }
52
53
 
53
54
  if (reportIndex !== null) {
54
55
  const fixer = () => {
@@ -67,7 +68,8 @@ var _default = (0, _iterateJsdoc.default)(({
67
68
  const lines = [];
68
69
  let currentTag;
69
70
  let tagSourceIdx = 0;
70
- tg.source.forEach(({
71
+
72
+ for (const [idx, {
71
73
  number,
72
74
  tokens: {
73
75
  tag,
@@ -76,7 +78,7 @@ var _default = (0, _iterateJsdoc.default)(({
76
78
  description,
77
79
  end
78
80
  }
79
- }, idx) => {
81
+ }] of tg.source.entries()) {
80
82
  if (description) {
81
83
  lines.splice(0, lines.length);
82
84
  tagSourceIdx = idx;
@@ -92,7 +94,8 @@ var _default = (0, _iterateJsdoc.default)(({
92
94
  number
93
95
  });
94
96
  }
95
- });
97
+ }
98
+
96
99
  const currentTg = currentTag && tags[currentTag.slice(1)];
97
100
  const tagCount = currentTg === null || currentTg === void 0 ? void 0 : currentTg.count;
98
101
  const defaultAlways = alwaysNever === 'always' && (currentTg === null || currentTg === void 0 ? void 0 : currentTg.lines) !== 'never' && (currentTg === null || currentTg === void 0 ? void 0 : currentTg.lines) !== 'any' && lines.length < count;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/rules/tagLines.js"],"names":["context","jsdoc","utils","alwaysNever","count","noEndLines","tags","options","some","tg","tagIdx","lastTag","reportIndex","source","forEach","tokens","tag","name","type","description","end","idx","includes","slice","lines","fixer","removeTagItem","reportJSDoc","line","number","currentTag","tagSourceIdx","splice","length","push","currentTg","tagCount","defaultAlways","overrideAlways","fixCount","addLines","iterateAllJsdocs","meta","docs","url","fixable","schema","enum","additionalProperies","properties","patternProperties","additionalProperties"],"mappings":"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","sourcesContent":["import iterateJsdoc from '../iterateJsdoc';\n\nexport default iterateJsdoc(({\n context,\n jsdoc,\n utils,\n}) => {\n const [\n alwaysNever = 'never',\n {\n count = 1,\n noEndLines = false,\n tags = {},\n } = {},\n ] = context.options;\n\n jsdoc.tags.some((tg, tagIdx) => {\n let lastTag;\n\n let reportIndex = null;\n tg.source.forEach(({tokens: {tag, name, type, description, end}}, idx) => {\n // May be text after a line break within a tag description\n if (description) {\n reportIndex = null;\n }\n if (lastTag && ['any', 'always'].includes(tags[lastTag.slice(1)]?.lines)) {\n return;\n }\n\n if (\n !tag && !name && !type && !description && !end &&\n (alwaysNever === 'never' ||\n lastTag && tags[lastTag.slice(1)]?.lines === 'never'\n )\n ) {\n reportIndex = idx;\n\n return;\n }\n\n lastTag = tag;\n });\n if (reportIndex !== null) {\n const fixer = () => {\n utils.removeTagItem(tagIdx, reportIndex);\n };\n utils.reportJSDoc(\n 'Expected no lines between tags',\n {line: tg.source[0].number + 1},\n fixer,\n );\n\n return true;\n }\n\n return false;\n });\n\n (noEndLines ? jsdoc.tags.slice(0, -1) : jsdoc.tags).some((tg, tagIdx) => {\n const lines = [];\n\n let currentTag;\n let tagSourceIdx = 0;\n tg.source.forEach(({number, tokens: {tag, name, type, description, end}}, idx) => {\n if (description) {\n lines.splice(0, lines.length);\n tagSourceIdx = idx;\n }\n if (tag) {\n currentTag = tag;\n }\n if (!tag && !name && !type && !description && !end) {\n lines.push({idx, number});\n }\n });\n\n const currentTg = currentTag && tags[currentTag.slice(1)];\n const tagCount = currentTg?.count;\n\n const defaultAlways = alwaysNever === 'always' && currentTg?.lines !== 'never' &&\n currentTg?.lines !== 'any' && lines.length < count;\n\n let overrideAlways;\n let fixCount = count;\n if (!defaultAlways) {\n fixCount = typeof tagCount === 'number' ? tagCount : count;\n overrideAlways = currentTg?.lines === 'always' &&\n lines.length < fixCount;\n }\n\n if (defaultAlways || overrideAlways) {\n const fixer = () => {\n utils.addLines(tagIdx, lines[lines.length - 1]?.idx || tagSourceIdx + 1, fixCount - lines.length);\n };\n const line = lines[lines.length - 1]?.number || tg.source[tagSourceIdx].number;\n utils.reportJSDoc(\n `Expected ${fixCount} line${fixCount === 1 ? '' : 's'} between tags but found ${lines.length}`,\n {\n line,\n },\n fixer,\n );\n\n return true;\n }\n\n return false;\n });\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Enforces lines (or no lines) between tags.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-tag-lines',\n },\n fixable: 'code',\n schema: [\n {\n enum: ['always', 'any', 'never'],\n type: 'string',\n },\n {\n additionalProperies: false,\n properties: {\n count: {\n type: 'integer',\n },\n noEndLines: {\n type: 'boolean',\n },\n tags: {\n patternProperties: {\n '.*': {\n additionalProperties: false,\n properties: {\n count: {\n type: 'integer',\n },\n lines: {\n enum: ['always', 'never', 'any'],\n type: 'string',\n },\n },\n },\n },\n type: 'object',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"file":"tagLines.js"}
1
+ {"version":3,"sources":["../../src/rules/tagLines.js"],"names":["context","jsdoc","utils","alwaysNever","count","noEndLines","tags","options","some","tg","tagIdx","lastTag","reportIndex","idx","tokens","tag","name","type","description","end","source","entries","includes","slice","lines","fixer","removeTagItem","reportJSDoc","line","number","currentTag","tagSourceIdx","splice","length","push","currentTg","tagCount","defaultAlways","overrideAlways","fixCount","addLines","iterateAllJsdocs","meta","docs","url","fixable","schema","enum","additionalProperies","properties","patternProperties","additionalProperties"],"mappings":"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","sourcesContent":["import iterateJsdoc from '../iterateJsdoc';\n\nexport default iterateJsdoc(({\n context,\n jsdoc,\n utils,\n}) => {\n const [\n alwaysNever = 'never',\n {\n count = 1,\n noEndLines = false,\n tags = {},\n } = {},\n ] = context.options;\n\n jsdoc.tags.some((tg, tagIdx) => {\n let lastTag;\n\n let reportIndex = null;\n for (const [idx, {tokens: {tag, name, type, description, end}}] of tg.source.entries()) {\n // May be text after a line break within a tag description\n if (description) {\n reportIndex = null;\n }\n\n if (lastTag && ['any', 'always'].includes(tags[lastTag.slice(1)]?.lines)) {\n continue;\n }\n\n if (\n !tag && !name && !type && !description && !end &&\n (alwaysNever === 'never' ||\n lastTag && tags[lastTag.slice(1)]?.lines === 'never'\n )\n ) {\n reportIndex = idx;\n\n continue;\n }\n\n lastTag = tag;\n }\n\n if (reportIndex !== null) {\n const fixer = () => {\n utils.removeTagItem(tagIdx, reportIndex);\n };\n\n utils.reportJSDoc(\n 'Expected no lines between tags',\n {line: tg.source[0].number + 1},\n fixer,\n );\n\n return true;\n }\n\n return false;\n });\n\n (noEndLines ? jsdoc.tags.slice(0, -1) : jsdoc.tags).some((tg, tagIdx) => {\n const lines = [];\n\n let currentTag;\n let tagSourceIdx = 0;\n for (const [idx, {number, tokens: {tag, name, type, description, end}}] of tg.source.entries()) {\n if (description) {\n lines.splice(0, lines.length);\n tagSourceIdx = idx;\n }\n\n if (tag) {\n currentTag = tag;\n }\n\n if (!tag && !name && !type && !description && !end) {\n lines.push({idx, number});\n }\n }\n\n const currentTg = currentTag && tags[currentTag.slice(1)];\n const tagCount = currentTg?.count;\n\n const defaultAlways = alwaysNever === 'always' && currentTg?.lines !== 'never' &&\n currentTg?.lines !== 'any' && lines.length < count;\n\n let overrideAlways;\n let fixCount = count;\n if (!defaultAlways) {\n fixCount = typeof tagCount === 'number' ? tagCount : count;\n overrideAlways = currentTg?.lines === 'always' &&\n lines.length < fixCount;\n }\n\n if (defaultAlways || overrideAlways) {\n const fixer = () => {\n utils.addLines(tagIdx, lines[lines.length - 1]?.idx || tagSourceIdx + 1, fixCount - lines.length);\n };\n\n const line = lines[lines.length - 1]?.number || tg.source[tagSourceIdx].number;\n utils.reportJSDoc(\n `Expected ${fixCount} line${fixCount === 1 ? '' : 's'} between tags but found ${lines.length}`,\n {\n line,\n },\n fixer,\n );\n\n return true;\n }\n\n return false;\n });\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Enforces lines (or no lines) between tags.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-tag-lines',\n },\n fixable: 'code',\n schema: [\n {\n enum: ['always', 'any', 'never'],\n type: 'string',\n },\n {\n additionalProperies: false,\n properties: {\n count: {\n type: 'integer',\n },\n noEndLines: {\n type: 'boolean',\n },\n tags: {\n patternProperties: {\n '.*': {\n additionalProperties: false,\n properties: {\n count: {\n type: 'integer',\n },\n lines: {\n enum: ['always', 'never', 'any'],\n type: 'string',\n },\n },\n },\n },\n type: 'object',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"file":"tagLines.js"}
@@ -21,7 +21,8 @@ const tryParsePathIgnoreError = path => {
21
21
  }
22
22
 
23
23
  return false;
24
- };
24
+ }; // eslint-disable-next-line complexity
25
+
25
26
 
26
27
  var _default = (0, _iterateJsdoc.default)(({
27
28
  jsdoc,
@@ -35,9 +36,9 @@ var _default = (0, _iterateJsdoc.default)(({
35
36
  } = context.options[0] || {};
36
37
  const {
37
38
  mode
38
- } = settings; // eslint-disable-next-line complexity
39
+ } = settings;
39
40
 
40
- jsdoc.tags.forEach(tag => {
41
+ for (const tag of jsdoc.tags) {
41
42
  const validNamepathParsing = function (namepath, tagName) {
42
43
  if (tryParsePathIgnoreError(namepath)) {
43
44
  return true;
@@ -46,6 +47,7 @@ var _default = (0, _iterateJsdoc.default)(({
46
47
  let handled = false;
47
48
 
48
49
  if (tagName) {
50
+ // eslint-disable-next-line default-case
49
51
  switch (tagName) {
50
52
  case 'module':
51
53
  {
@@ -107,7 +109,7 @@ var _default = (0, _iterateJsdoc.default)(({
107
109
 
108
110
  if (!asExpression.test(utils.getTagDescription(tag)) || !thisNamepath) {
109
111
  report(`@borrows must have an "as" expression. Found "${utils.getTagDescription(tag)}"`, null, tag);
110
- return;
112
+ continue;
111
113
  }
112
114
 
113
115
  if (validNamepathParsing(thisNamepath, 'borrows')) {
@@ -115,7 +117,7 @@ var _default = (0, _iterateJsdoc.default)(({
115
117
  validNamepathParsing(thatNamepath);
116
118
  }
117
119
 
118
- return;
120
+ continue;
119
121
  }
120
122
 
121
123
  const otherModeMaps = ['jsdoc', 'typescript', 'closure', 'permissive'].filter(mde => {
@@ -128,7 +130,7 @@ var _default = (0, _iterateJsdoc.default)(({
128
130
  if (tagMightHaveNamePosition !== true && tag.name) {
129
131
  const modeInfo = tagMightHaveNamePosition === false ? '' : ` in "${mode}" mode`;
130
132
  report(`@${tag.tag} should not have a name${modeInfo}.`, null, tag);
131
- return;
133
+ continue;
132
134
  }
133
135
 
134
136
  const mightHaveTypePosition = utils.tagMightHaveTypePosition(tag.tag, otherModeMaps);
@@ -136,7 +138,7 @@ var _default = (0, _iterateJsdoc.default)(({
136
138
  if (mightHaveTypePosition !== true && tag.type) {
137
139
  const modeInfo = mightHaveTypePosition === false ? '' : ` in "${mode}" mode`;
138
140
  report(`@${tag.tag} should not have a bracketed type${modeInfo}.`, null, tag);
139
- return;
141
+ continue;
140
142
  } // REQUIRED NAME
141
143
 
142
144
 
@@ -147,7 +149,7 @@ var _default = (0, _iterateJsdoc.default)(({
147
149
  if (tagMustHaveNamePosition !== false && !tag.name && !allowEmptyNamepaths && !['param', 'arg', 'argument', 'property', 'prop'].includes(tag.tag) && (tag.tag !== 'see' || !utils.getTagDescription(tag).includes('{@link'))) {
148
150
  const modeInfo = tagMustHaveNamePosition === true ? '' : ` in "${mode}" mode`;
149
151
  report(`Tag @${tag.tag} must have a name/namepath${modeInfo}.`, null, tag);
150
- return;
152
+ continue;
151
153
  } // REQUIRED TYPE
152
154
 
153
155
 
@@ -156,7 +158,7 @@ var _default = (0, _iterateJsdoc.default)(({
156
158
  if (mustHaveTypePosition !== false && !tag.type) {
157
159
  const modeInfo = mustHaveTypePosition === true ? '' : ` in "${mode}" mode`;
158
160
  report(`Tag @${tag.tag} must have a type${modeInfo}.`, null, tag);
159
- return;
161
+ continue;
160
162
  } // REQUIRED TYPE OR NAME/NAMEPATH
161
163
 
162
164
 
@@ -165,7 +167,7 @@ var _default = (0, _iterateJsdoc.default)(({
165
167
  if (tagMissingRequiredTypeOrNamepath !== false && !allowEmptyNamepaths) {
166
168
  const modeInfo = tagMissingRequiredTypeOrNamepath === true ? '' : ` in "${mode}" mode`;
167
169
  report(`Tag @${tag.tag} must have either a type or namepath${modeInfo}.`, null, tag);
168
- return;
170
+ continue;
169
171
  } // VALID TYPE
170
172
 
171
173
 
@@ -180,14 +182,14 @@ var _default = (0, _iterateJsdoc.default)(({
180
182
 
181
183
  if (hasNameOrNamepathPosition) {
182
184
  if (mode !== 'jsdoc' && tag.tag === 'template') {
183
- utils.parseClosureTemplateTag(tag).forEach(namepath => {
185
+ for (const namepath of utils.parseClosureTemplateTag(tag)) {
184
186
  validNamepathParsing(namepath);
185
- });
187
+ }
186
188
  } else {
187
189
  validNamepathParsing(tag.name, tag.tag);
188
190
  }
189
191
  }
190
- });
192
+ }
191
193
  }, {
192
194
  iterateAllJsdocs: true,
193
195
  meta: {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/rules/validTypes.js"],"names":["asExpression","tryParsePathIgnoreError","path","jsdoc","report","utils","context","settings","allowEmptyNamepaths","options","mode","tags","forEach","tag","validNamepathParsing","namepath","tagName","handled","startsWith","endChar","slice","includes","startChar","charAt","validTypeParsing","type","thisNamepath","getTagDescription","replace","trim","test","thatNamepath","name","otherModeMaps","filter","mde","map","getTagStructureForMode","tagMightHaveNamePosition","modeInfo","mightHaveTypePosition","tagMightHaveTypePosition","tagMustHaveNamePosition","mustHaveTypePosition","tagMustHaveTypePosition","tagMissingRequiredTypeOrNamepath","hasTypePosition","Boolean","hasNameOrNamepathPosition","tagMightHaveNamepath","parseClosureTemplateTag","iterateAllJsdocs","meta","docs","description","url","schema","additionalProperies","properties","default"],"mappings":"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","sourcesContent":["import {\n tryParse, parse,\n} from 'jsdoc-type-pratt-parser';\nimport iterateJsdoc from '../iterateJsdoc';\n\nconst asExpression = /as\\s+/u;\n\nconst tryParsePathIgnoreError = (path) => {\n try {\n tryParse(path);\n\n return true;\n } catch {\n // Keep the original error for including the whole type\n }\n\n return false;\n};\n\nexport default iterateJsdoc(({\n jsdoc,\n report,\n utils,\n context,\n settings,\n}) => {\n const {\n allowEmptyNamepaths = false,\n } = context.options[0] || {};\n const {mode} = settings;\n\n // eslint-disable-next-line complexity\n jsdoc.tags.forEach((tag) => {\n const validNamepathParsing = function (namepath, tagName) {\n if (tryParsePathIgnoreError(namepath)) {\n return true;\n }\n let handled = false;\n\n if (tagName) {\n switch (tagName) {\n case 'module': {\n if (!namepath.startsWith('module:')) {\n handled = tryParsePathIgnoreError(`module:${namepath}`);\n }\n break;\n }\n case 'memberof': case 'memberof!': {\n const endChar = namepath.slice(-1);\n if (['#', '.', '~'].includes(endChar)) {\n handled = tryParsePathIgnoreError(namepath.slice(0, -1));\n }\n break;\n }\n case 'borrows': {\n const startChar = namepath.charAt();\n if (['#', '.', '~'].includes(startChar)) {\n handled = tryParsePathIgnoreError(namepath.slice(1));\n }\n }\n }\n }\n\n if (!handled) {\n report(`Syntax error in namepath: ${namepath}`, null, tag);\n\n return false;\n }\n\n return true;\n };\n\n const validTypeParsing = function (type) {\n try {\n if (mode === 'permissive') {\n tryParse(type);\n } else {\n parse(type, mode);\n }\n } catch {\n report(`Syntax error in type: ${type}`, null, tag);\n\n return false;\n }\n\n return true;\n };\n\n if (tag.tag === 'borrows') {\n const thisNamepath = utils.getTagDescription(tag).replace(asExpression, '').trim();\n\n if (!asExpression.test(utils.getTagDescription(tag)) || !thisNamepath) {\n report(`@borrows must have an \"as\" expression. Found \"${utils.getTagDescription(tag)}\"`, null, tag);\n\n return;\n }\n\n if (validNamepathParsing(thisNamepath, 'borrows')) {\n const thatNamepath = tag.name;\n\n validNamepathParsing(thatNamepath);\n }\n\n return;\n }\n\n const otherModeMaps = ['jsdoc', 'typescript', 'closure', 'permissive'].filter(\n (mde) => {\n return mde !== mode;\n },\n ).map((mde) => {\n return utils.getTagStructureForMode(mde);\n });\n\n const tagMightHaveNamePosition = utils.tagMightHaveNamePosition(tag.tag, otherModeMaps);\n if (tagMightHaveNamePosition !== true && tag.name) {\n const modeInfo = tagMightHaveNamePosition === false ? '' : ` in \"${mode}\" mode`;\n report(`@${tag.tag} should not have a name${modeInfo}.`, null, tag);\n\n return;\n }\n\n const mightHaveTypePosition = utils.tagMightHaveTypePosition(tag.tag, otherModeMaps);\n if (mightHaveTypePosition !== true && tag.type) {\n const modeInfo = mightHaveTypePosition === false ? '' : ` in \"${mode}\" mode`;\n report(`@${tag.tag} should not have a bracketed type${modeInfo}.`, null, tag);\n\n return;\n }\n\n // REQUIRED NAME\n const tagMustHaveNamePosition = utils.tagMustHaveNamePosition(tag.tag, otherModeMaps);\n\n // Don't handle `@param` here though it does require name as handled by\n // `require-param-name` (`@property` would similarly seem to require one,\n // but is handled by `require-property-name`)\n if (tagMustHaveNamePosition !== false && !tag.name && !allowEmptyNamepaths && ![\n 'param', 'arg', 'argument',\n 'property', 'prop',\n ].includes(tag.tag) &&\n (tag.tag !== 'see' || !utils.getTagDescription(tag).includes('{@link'))\n ) {\n const modeInfo = tagMustHaveNamePosition === true ? '' : ` in \"${mode}\" mode`;\n report(`Tag @${tag.tag} must have a name/namepath${modeInfo}.`, null, tag);\n\n return;\n }\n\n // REQUIRED TYPE\n const mustHaveTypePosition = utils.tagMustHaveTypePosition(tag.tag, otherModeMaps);\n if (mustHaveTypePosition !== false && !tag.type) {\n const modeInfo = mustHaveTypePosition === true ? '' : ` in \"${mode}\" mode`;\n report(`Tag @${tag.tag} must have a type${modeInfo}.`, null, tag);\n\n return;\n }\n\n // REQUIRED TYPE OR NAME/NAMEPATH\n const tagMissingRequiredTypeOrNamepath = utils.tagMissingRequiredTypeOrNamepath(tag, otherModeMaps);\n if (tagMissingRequiredTypeOrNamepath !== false && !allowEmptyNamepaths) {\n const modeInfo = tagMissingRequiredTypeOrNamepath === true ? '' : ` in \"${mode}\" mode`;\n report(`Tag @${tag.tag} must have either a type or namepath${modeInfo}.`, null, tag);\n\n return;\n }\n\n // VALID TYPE\n const hasTypePosition = mightHaveTypePosition === true && Boolean(tag.type);\n if (hasTypePosition) {\n validTypeParsing(tag.type);\n }\n\n // VALID NAME/NAMEPATH\n const hasNameOrNamepathPosition = (\n tagMustHaveNamePosition !== false ||\n utils.tagMightHaveNamepath(tag.tag)\n ) && Boolean(tag.name);\n\n if (hasNameOrNamepathPosition) {\n if (mode !== 'jsdoc' && tag.tag === 'template') {\n utils.parseClosureTemplateTag(tag).forEach((namepath) => {\n validNamepathParsing(namepath);\n });\n } else {\n validNamepathParsing(tag.name, tag.tag);\n }\n }\n });\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Requires all types to be valid JSDoc or Closure compiler types without syntax errors.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-valid-types',\n },\n schema: [\n {\n additionalProperies: false,\n properties: {\n allowEmptyNamepaths: {\n default: false,\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"file":"validTypes.js"}
1
+ {"version":3,"sources":["../../src/rules/validTypes.js"],"names":["asExpression","tryParsePathIgnoreError","path","jsdoc","report","utils","context","settings","allowEmptyNamepaths","options","mode","tag","tags","validNamepathParsing","namepath","tagName","handled","startsWith","endChar","slice","includes","startChar","charAt","validTypeParsing","type","thisNamepath","getTagDescription","replace","trim","test","thatNamepath","name","otherModeMaps","filter","mde","map","getTagStructureForMode","tagMightHaveNamePosition","modeInfo","mightHaveTypePosition","tagMightHaveTypePosition","tagMustHaveNamePosition","mustHaveTypePosition","tagMustHaveTypePosition","tagMissingRequiredTypeOrNamepath","hasTypePosition","Boolean","hasNameOrNamepathPosition","tagMightHaveNamepath","parseClosureTemplateTag","iterateAllJsdocs","meta","docs","description","url","schema","additionalProperies","properties","default"],"mappings":"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","sourcesContent":["import {\n tryParse, parse,\n} from 'jsdoc-type-pratt-parser';\nimport iterateJsdoc from '../iterateJsdoc';\n\nconst asExpression = /as\\s+/u;\n\nconst tryParsePathIgnoreError = (path) => {\n try {\n tryParse(path);\n\n return true;\n } catch {\n // Keep the original error for including the whole type\n }\n\n return false;\n};\n\n// eslint-disable-next-line complexity\nexport default iterateJsdoc(({\n jsdoc,\n report,\n utils,\n context,\n settings,\n}) => {\n const {\n allowEmptyNamepaths = false,\n } = context.options[0] || {};\n const {mode} = settings;\n\n for (const tag of jsdoc.tags) {\n const validNamepathParsing = function (namepath, tagName) {\n if (tryParsePathIgnoreError(namepath)) {\n return true;\n }\n\n let handled = false;\n\n if (tagName) {\n // eslint-disable-next-line default-case\n switch (tagName) {\n case 'module': {\n if (!namepath.startsWith('module:')) {\n handled = tryParsePathIgnoreError(`module:${namepath}`);\n }\n\n break;\n }\n\n case 'memberof': case 'memberof!': {\n const endChar = namepath.slice(-1);\n if (['#', '.', '~'].includes(endChar)) {\n handled = tryParsePathIgnoreError(namepath.slice(0, -1));\n }\n\n break;\n }\n\n case 'borrows': {\n const startChar = namepath.charAt();\n if (['#', '.', '~'].includes(startChar)) {\n handled = tryParsePathIgnoreError(namepath.slice(1));\n }\n }\n }\n }\n\n if (!handled) {\n report(`Syntax error in namepath: ${namepath}`, null, tag);\n\n return false;\n }\n\n return true;\n };\n\n const validTypeParsing = function (type) {\n try {\n if (mode === 'permissive') {\n tryParse(type);\n } else {\n parse(type, mode);\n }\n } catch {\n report(`Syntax error in type: ${type}`, null, tag);\n\n return false;\n }\n\n return true;\n };\n\n if (tag.tag === 'borrows') {\n const thisNamepath = utils.getTagDescription(tag).replace(asExpression, '')\n .trim();\n\n if (!asExpression.test(utils.getTagDescription(tag)) || !thisNamepath) {\n report(`@borrows must have an \"as\" expression. Found \"${utils.getTagDescription(tag)}\"`, null, tag);\n\n continue;\n }\n\n if (validNamepathParsing(thisNamepath, 'borrows')) {\n const thatNamepath = tag.name;\n\n validNamepathParsing(thatNamepath);\n }\n\n continue;\n }\n\n const otherModeMaps = ['jsdoc', 'typescript', 'closure', 'permissive'].filter(\n (mde) => {\n return mde !== mode;\n },\n ).map((mde) => {\n return utils.getTagStructureForMode(mde);\n });\n\n const tagMightHaveNamePosition = utils.tagMightHaveNamePosition(tag.tag, otherModeMaps);\n if (tagMightHaveNamePosition !== true && tag.name) {\n const modeInfo = tagMightHaveNamePosition === false ? '' : ` in \"${mode}\" mode`;\n report(`@${tag.tag} should not have a name${modeInfo}.`, null, tag);\n\n continue;\n }\n\n const mightHaveTypePosition = utils.tagMightHaveTypePosition(tag.tag, otherModeMaps);\n if (mightHaveTypePosition !== true && tag.type) {\n const modeInfo = mightHaveTypePosition === false ? '' : ` in \"${mode}\" mode`;\n report(`@${tag.tag} should not have a bracketed type${modeInfo}.`, null, tag);\n\n continue;\n }\n\n // REQUIRED NAME\n const tagMustHaveNamePosition = utils.tagMustHaveNamePosition(tag.tag, otherModeMaps);\n\n // Don't handle `@param` here though it does require name as handled by\n // `require-param-name` (`@property` would similarly seem to require one,\n // but is handled by `require-property-name`)\n if (tagMustHaveNamePosition !== false && !tag.name && !allowEmptyNamepaths && ![\n 'param', 'arg', 'argument',\n 'property', 'prop',\n ].includes(tag.tag) &&\n (tag.tag !== 'see' || !utils.getTagDescription(tag).includes('{@link'))\n ) {\n const modeInfo = tagMustHaveNamePosition === true ? '' : ` in \"${mode}\" mode`;\n report(`Tag @${tag.tag} must have a name/namepath${modeInfo}.`, null, tag);\n\n continue;\n }\n\n // REQUIRED TYPE\n const mustHaveTypePosition = utils.tagMustHaveTypePosition(tag.tag, otherModeMaps);\n if (mustHaveTypePosition !== false && !tag.type) {\n const modeInfo = mustHaveTypePosition === true ? '' : ` in \"${mode}\" mode`;\n report(`Tag @${tag.tag} must have a type${modeInfo}.`, null, tag);\n\n continue;\n }\n\n // REQUIRED TYPE OR NAME/NAMEPATH\n const tagMissingRequiredTypeOrNamepath = utils.tagMissingRequiredTypeOrNamepath(tag, otherModeMaps);\n if (tagMissingRequiredTypeOrNamepath !== false && !allowEmptyNamepaths) {\n const modeInfo = tagMissingRequiredTypeOrNamepath === true ? '' : ` in \"${mode}\" mode`;\n report(`Tag @${tag.tag} must have either a type or namepath${modeInfo}.`, null, tag);\n\n continue;\n }\n\n // VALID TYPE\n const hasTypePosition = mightHaveTypePosition === true && Boolean(tag.type);\n if (hasTypePosition) {\n validTypeParsing(tag.type);\n }\n\n // VALID NAME/NAMEPATH\n const hasNameOrNamepathPosition = (\n tagMustHaveNamePosition !== false ||\n utils.tagMightHaveNamepath(tag.tag)\n ) && Boolean(tag.name);\n\n if (hasNameOrNamepathPosition) {\n if (mode !== 'jsdoc' && tag.tag === 'template') {\n for (const namepath of utils.parseClosureTemplateTag(tag)) {\n validNamepathParsing(namepath);\n }\n } else {\n validNamepathParsing(tag.name, tag.tag);\n }\n }\n }\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Requires all types to be valid JSDoc or Closure compiler types without syntax errors.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-valid-types',\n },\n schema: [\n {\n additionalProperies: false,\n properties: {\n allowEmptyNamepaths: {\n default: false,\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"file":"validTypes.js"}
package/dist/tagNames.js CHANGED
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.typeScriptTags = exports.closureTags = exports.jsdocTags = void 0;
6
+ exports.typeScriptTags = exports.jsdocTags = exports.closureTags = void 0;
7
7
  const jsdocTagsUndocumented = {
8
8
  // Undocumented but present; see
9
9
  // https://github.com/jsdoc/jsdoc/issues/1283#issuecomment-516816802
package/package.json CHANGED
@@ -5,11 +5,11 @@
5
5
  "url": "http://gajus.com"
6
6
  },
7
7
  "dependencies": {
8
- "@es-joy/jsdoccomment": "0.10.8",
8
+ "@es-joy/jsdoccomment": "0.12.0",
9
9
  "comment-parser": "1.2.4",
10
10
  "debug": "^4.3.2",
11
11
  "esquery": "^1.4.0",
12
- "jsdoc-type-pratt-parser": "^1.1.1",
12
+ "jsdoc-type-pratt-parser": "^2.0.0",
13
13
  "lodash": "^4.17.21",
14
14
  "regextras": "^0.8.0",
15
15
  "semver": "^7.3.5",
@@ -17,44 +17,35 @@
17
17
  },
18
18
  "description": "JSDoc linting rules for ESLint.",
19
19
  "devDependencies": {
20
- "@babel/cli": "^7.15.4",
21
- "@babel/core": "^7.15.5",
22
- "@babel/eslint-parser": "^7.15.4",
23
- "@babel/node": "^7.15.4",
20
+ "@babel/cli": "^7.15.7",
21
+ "@babel/core": "^7.15.8",
22
+ "@babel/eslint-parser": "^7.15.8",
23
+ "@babel/node": "^7.15.8",
24
24
  "@babel/plugin-syntax-class-properties": "^7.12.13",
25
25
  "@babel/plugin-transform-flow-strip-types": "^7.14.5",
26
- "@babel/preset-env": "^7.15.4",
26
+ "@babel/preset-env": "^7.15.8",
27
27
  "@babel/register": "^7.15.3",
28
28
  "@hkdobrev/run-if-changed": "^0.3.1",
29
- "@typescript-eslint/parser": "^4.31.0",
29
+ "@typescript-eslint/parser": "^5.2.0",
30
30
  "babel-plugin-add-module-exports": "^1.0.4",
31
- "babel-plugin-istanbul": "^6.0.0",
31
+ "babel-plugin-istanbul": "^6.1.1",
32
32
  "chai": "^4.3.4",
33
33
  "cross-env": "^7.0.3",
34
- "eslint": "7.32.0",
35
- "eslint-config-canonical": "^27.0.0",
34
+ "eslint": "^8.1.0",
35
+ "eslint-config-canonical": "^32.10.0",
36
36
  "gitdown": "^3.1.4",
37
- "glob": "^7.1.7",
38
- "husky": "^7.0.2",
39
- "lint-staged": "^11.1.2",
40
- "mocha": "^9.1.1",
37
+ "glob": "^7.2.0",
38
+ "husky": "^7.0.4",
39
+ "lint-staged": "^11.2.4",
40
+ "mocha": "^9.1.3",
41
41
  "nyc": "^15.1.0",
42
42
  "open-editor": "^3.0.0",
43
43
  "rimraf": "^3.0.2",
44
- "semantic-release": "^17.4.7",
45
- "typescript": "^4.4.2"
44
+ "semantic-release": "^18.0.0",
45
+ "typescript": "^4.4.4"
46
46
  },
47
47
  "engines": {
48
- "node": "^12 || ^14 || ^16"
49
- },
50
- "lint-staged": {
51
- ".eslintignore": "npm run lint",
52
- "./*.js": "npm run lint-arg --",
53
- "src/**/*.js": "npm run lint-arg --",
54
- "test/**/*.js": "npm run lint-arg --"
55
- },
56
- "run-if-changed": {
57
- "package-lock.json": "npm run install-offline"
48
+ "node": "^12 || ^14 || ^16 || ^17"
58
49
  },
59
50
  "keywords": [
60
51
  "eslint",
@@ -62,44 +53,56 @@
62
53
  "jsdoc"
63
54
  ],
64
55
  "license": "BSD-3-Clause",
56
+ "lint-staged": {
57
+ "./*.js": "npm run lint-arg --",
58
+ ".eslintignore": "npm run lint",
59
+ "src/**/*.js": "npm run lint-arg --",
60
+ "test/**/*.js": "npm run lint-arg --"
61
+ },
65
62
  "main": "./dist/index.js",
66
63
  "name": "eslint-plugin-jsdoc",
64
+ "nyc": {
65
+ "branches": 100,
66
+ "check-coverage": false,
67
+ "exclude": [
68
+ "src/rules/checkExamples.js"
69
+ ],
70
+ "functions": 100,
71
+ "include": [
72
+ "src/"
73
+ ],
74
+ "instrument": false,
75
+ "lines": 100,
76
+ "require": [
77
+ "@babel/register"
78
+ ],
79
+ "sourceMap": false,
80
+ "statements": 100
81
+ },
67
82
  "peerDependencies": {
68
- "eslint": "^6.0.0 || ^7.0.0"
83
+ "eslint": "^7.0.0 || ^8.0.0"
69
84
  },
70
85
  "repository": {
71
86
  "type": "git",
72
87
  "url": "https://github.com/gajus/eslint-plugin-jsdoc"
73
88
  },
89
+ "run-if-changed": {
90
+ "package-lock.json": "npm run install-offline"
91
+ },
74
92
  "scripts": {
75
93
  "build": "rimraf ./dist && cross-env NODE_ENV=production babel ./src --out-dir ./dist --copy-files --source-maps --ignore ./src/bin/*.js --no-copy-ignored",
76
94
  "check-readme": "babel-node ./src/bin/generateReadme.js --check",
77
95
  "create-readme": "babel-node ./src/bin/generateReadme.js",
78
96
  "create-rule": "babel-node ./src/bin/generateRule.js",
79
97
  "install-offline": "npm install --prefer-offline --no-audit",
80
- "lint-fix": "eslint --report-unused-disable-directives --fix ./src ./test",
81
98
  "lint": "eslint --report-unused-disable-directives --ignore-pattern '!.ncurc.js' ./src ./test .ncurc.js",
82
99
  "lint-arg": "eslint --report-unused-disable-directives",
83
- "test-cov": "cross-env BABEL_ENV=test nyc mocha --parallel --reporter dot --recursive --require @babel/register --timeout 12000",
84
- "test-no-cov": "cross-env BABEL_ENV=test mocha --parallel --reporter dot --recursive --require @babel/register --timeout 12000",
100
+ "lint-fix": "eslint --report-unused-disable-directives --fix ./src ./test",
101
+ "prepare": "husky install",
102
+ "test": "cross-env BABEL_ENV=test nyc --reporter text-summary mocha --reporter dot --recursive --require @babel/register --timeout 12000",
103
+ "test-cov": "cross-env BABEL_ENV=test nyc mocha --reporter dot --recursive --require @babel/register --timeout 12000",
85
104
  "test-index": "cross-env BABEL_ENV=test mocha --recursive --require @babel/register --reporter progress --timeout 12000 test/rules/index.js",
86
- "test": "cross-env BABEL_ENV=test nyc --reporter text-summary mocha --parallel --reporter dot --recursive --require @babel/register --timeout 12000",
87
- "prepare": "husky install"
88
- },
89
- "nyc": {
90
- "require": [
91
- "@babel/register"
92
- ],
93
- "sourceMap": false,
94
- "instrument": false,
95
- "include": [
96
- "src/"
97
- ],
98
- "check-coverage": true,
99
- "branches": 100,
100
- "lines": 100,
101
- "functions": 100,
102
- "statements": 100
105
+ "test-no-cov": "cross-env BABEL_ENV=test mocha --reporter dot --recursive --require @babel/register --timeout 12000"
103
106
  },
104
- "version": "36.1.0"
107
+ "version": "37.0.2"
105
108
  }