eslint-plugin-jsdoc 60.5.0 → 60.7.0

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 (91) hide show
  1. package/README.md +2 -0
  2. package/dist/cjs/jsdocUtils.d.ts +1 -0
  3. package/dist/cjs/rules/escapeInlineTags.d.ts +2 -0
  4. package/dist/generateDocs.cjs +5 -6
  5. package/dist/generateDocs.cjs.map +1 -1
  6. package/dist/index-cjs.cjs +4 -1
  7. package/dist/index-cjs.cjs.map +1 -1
  8. package/dist/index.cjs +4 -1
  9. package/dist/index.cjs.map +1 -1
  10. package/dist/jsdocUtils.cjs +3 -2
  11. package/dist/jsdocUtils.cjs.map +1 -1
  12. package/dist/jsdocUtils.d.ts +1 -0
  13. package/dist/rules/checkLineAlignment.cjs +1 -2
  14. package/dist/rules/checkLineAlignment.cjs.map +1 -1
  15. package/dist/rules/checkTypes.cjs +2 -3
  16. package/dist/rules/checkTypes.cjs.map +1 -1
  17. package/dist/rules/convertToJsdocComments.cjs +2 -4
  18. package/dist/rules/convertToJsdocComments.cjs.map +1 -1
  19. package/dist/rules/emptyTags.cjs +1 -2
  20. package/dist/rules/emptyTags.cjs.map +1 -1
  21. package/dist/rules/escapeInlineTags.cjs +149 -0
  22. package/dist/rules/escapeInlineTags.cjs.map +1 -0
  23. package/dist/rules/escapeInlineTags.d.ts +3 -0
  24. package/dist/rules/informativeDocs.cjs +3 -6
  25. package/dist/rules/informativeDocs.cjs.map +1 -1
  26. package/dist/rules/linesBeforeBlock.cjs +4 -8
  27. package/dist/rules/linesBeforeBlock.cjs.map +1 -1
  28. package/dist/rules/matchDescription.cjs +2 -4
  29. package/dist/rules/matchDescription.cjs.map +1 -1
  30. package/dist/rules/matchName.cjs +1 -2
  31. package/dist/rules/matchName.cjs.map +1 -1
  32. package/dist/rules/multilineBlocks.cjs +3 -6
  33. package/dist/rules/multilineBlocks.cjs.map +1 -1
  34. package/dist/rules/noBadBlocks.cjs +1 -2
  35. package/dist/rules/noBadBlocks.cjs.map +1 -1
  36. package/dist/rules/noTypes.cjs +1 -2
  37. package/dist/rules/noTypes.cjs.map +1 -1
  38. package/dist/rules/preferImportTag.cjs +6 -2
  39. package/dist/rules/preferImportTag.cjs.map +1 -1
  40. package/dist/rules/requireAsteriskPrefix.cjs +1 -2
  41. package/dist/rules/requireAsteriskPrefix.cjs.map +1 -1
  42. package/dist/rules/requireDescriptionCompleteSentence.cjs +1 -2
  43. package/dist/rules/requireDescriptionCompleteSentence.cjs.map +1 -1
  44. package/dist/rules/requireFileOverview.cjs +1 -3
  45. package/dist/rules/requireFileOverview.cjs.map +1 -1
  46. package/dist/rules/requireHyphenBeforeParamDescription.cjs +1 -2
  47. package/dist/rules/requireHyphenBeforeParamDescription.cjs.map +1 -1
  48. package/dist/rules/requireJsdoc.cjs +3 -6
  49. package/dist/rules/requireJsdoc.cjs.map +1 -1
  50. package/dist/rules/requireParam.cjs +6 -12
  51. package/dist/rules/requireParam.cjs.map +1 -1
  52. package/dist/rules/requireParamName.cjs +1 -2
  53. package/dist/rules/requireParamName.cjs.map +1 -1
  54. package/dist/rules/requireReturns.cjs +1 -2
  55. package/dist/rules/requireReturns.cjs.map +1 -1
  56. package/dist/rules/requireReturnsCheck.cjs +13 -1
  57. package/dist/rules/requireReturnsCheck.cjs.map +1 -1
  58. package/dist/rules/requireTemplate.cjs +1 -2
  59. package/dist/rules/requireTemplate.cjs.map +1 -1
  60. package/dist/rules/sortTags.cjs +1 -2
  61. package/dist/rules/sortTags.cjs.map +1 -1
  62. package/dist/rules.d.ts +30 -37
  63. package/package.json +9 -9
  64. package/src/index-cjs.js +4 -0
  65. package/src/index.js +4 -0
  66. package/src/jsdocUtils.js +17 -1
  67. package/src/rules/checkLineAlignment.js +1 -2
  68. package/src/rules/checkTypes.js +3 -15
  69. package/src/rules/convertToJsdocComments.js +2 -4
  70. package/src/rules/emptyTags.js +1 -2
  71. package/src/rules/escapeInlineTags.js +189 -0
  72. package/src/rules/informativeDocs.js +3 -6
  73. package/src/rules/linesBeforeBlock.js +4 -8
  74. package/src/rules/matchDescription.js +2 -4
  75. package/src/rules/matchName.js +1 -2
  76. package/src/rules/multilineBlocks.js +3 -6
  77. package/src/rules/noBadBlocks.js +1 -2
  78. package/src/rules/noTypes.js +1 -2
  79. package/src/rules/preferImportTag.js +8 -3
  80. package/src/rules/requireAsteriskPrefix.js +1 -2
  81. package/src/rules/requireDescriptionCompleteSentence.js +1 -2
  82. package/src/rules/requireFileOverview.js +1 -3
  83. package/src/rules/requireHyphenBeforeParamDescription.js +1 -2
  84. package/src/rules/requireJsdoc.js +3 -6
  85. package/src/rules/requireParam.js +6 -12
  86. package/src/rules/requireParamName.js +1 -2
  87. package/src/rules/requireReturns.js +1 -2
  88. package/src/rules/requireReturnsCheck.js +16 -1
  89. package/src/rules/requireTemplate.js +1 -2
  90. package/src/rules/sortTags.js +1 -2
  91. package/src/rules.d.ts +30 -37
@@ -5,8 +5,7 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.default = void 0;
7
7
  var _buildRejectOrPreferRuleDefinition = require("../buildRejectOrPreferRuleDefinition.cjs");
8
- const strictNativeTypes = ['undefined', 'null', 'boolean', 'number', 'bigint', 'string', 'symbol', 'object', 'Array', 'Function', 'Date', 'RegExp'];
9
-
8
+ var _jsdocUtils = require("../jsdocUtils.cjs");
10
9
  /**
11
10
  * @callback CheckNativeTypes
12
11
  * Iterates strict types to see if any should be added to `invalidTypes` (and
@@ -22,7 +21,7 @@ const strictNativeTypes = ['undefined', 'null', 'boolean', 'number', 'bigint', '
22
21
  /** @type {CheckNativeTypes} */
23
22
  const checkNativeTypes = (preferredTypes, typeNodeName, preferred, parentNode, invalidTypes) => {
24
23
  let changedPreferred = preferred;
25
- for (const strictNativeType of strictNativeTypes) {
24
+ for (const strictNativeType of _jsdocUtils.strictNativeTypes) {
26
25
  if (strictNativeType === 'object' && (
27
26
  // This is not set to remap with exact type match (e.g.,
28
27
  // `object: 'Object'`), so can ignore (including if circular)
@@ -1 +1 @@
1
- {"version":3,"file":"checkTypes.cjs","names":["_buildRejectOrPreferRuleDefinition","require","strictNativeTypes","checkNativeTypes","preferredTypes","typeNodeName","preferred","parentNode","invalidTypes","changedPreferred","strictNativeType","elements","length","left","type","value","toLowerCase","undefined","push","_default","exports","default","buildRejectOrPreferRuleDefinition","schema","additionalProperties","properties","exemptTagContexts","description","items","tag","types","oneOf","noDefaults","unifyParentAndChildTypeChecks","module"],"sources":["../../src/rules/checkTypes.js"],"sourcesContent":["import {\n buildRejectOrPreferRuleDefinition,\n} from '../buildRejectOrPreferRuleDefinition.js';\n\nconst strictNativeTypes = [\n 'undefined',\n 'null',\n 'boolean',\n 'number',\n 'bigint',\n 'string',\n 'symbol',\n 'object',\n 'Array',\n 'Function',\n 'Date',\n 'RegExp',\n];\n\n/**\n * @callback CheckNativeTypes\n * Iterates strict types to see if any should be added to `invalidTypes` (and\n * the the relevant strict type returned as the new preferred type).\n * @param {import('../iterateJsdoc.js').PreferredTypes} preferredTypes\n * @param {string} typeNodeName\n * @param {string|undefined} preferred\n * @param {import('jsdoc-type-pratt-parser').NonRootResult|undefined} parentNode\n * @param {(string|false|undefined)[][]} invalidTypes\n * @returns {string|undefined} The `preferred` type string, optionally changed\n */\n\n/** @type {CheckNativeTypes} */\nconst checkNativeTypes = (preferredTypes, typeNodeName, preferred, parentNode, invalidTypes) => {\n let changedPreferred = preferred;\n for (const strictNativeType of strictNativeTypes) {\n if (\n strictNativeType === 'object' &&\n (\n // This is not set to remap with exact type match (e.g.,\n // `object: 'Object'`), so can ignore (including if circular)\n !preferredTypes?.[typeNodeName] ||\n // Although present on `preferredTypes` for remapping, this is a\n // parent object without a parent match (and not\n // `unifyParentAndChildTypeChecks`) and we don't want\n // `object<>` given TypeScript issue https://github.com/microsoft/TypeScript/issues/20555\n /**\n * @type {import('jsdoc-type-pratt-parser').GenericResult}\n */\n (\n parentNode\n )?.elements?.length && (\n /**\n * @type {import('jsdoc-type-pratt-parser').GenericResult}\n */\n (\n parentNode\n )?.left?.type === 'JsdocTypeName' &&\n /**\n * @type {import('jsdoc-type-pratt-parser').GenericResult}\n */\n (parentNode)?.left?.value === 'Object'\n )\n )\n ) {\n continue;\n }\n\n if (strictNativeType !== typeNodeName &&\n strictNativeType.toLowerCase() === typeNodeName.toLowerCase() &&\n\n // Don't report if user has own map for a strict native type\n (!preferredTypes || preferredTypes?.[strictNativeType] === undefined)\n ) {\n changedPreferred = strictNativeType;\n invalidTypes.push([\n typeNodeName, changedPreferred,\n ]);\n break;\n }\n }\n\n return changedPreferred;\n};\n\nexport default buildRejectOrPreferRuleDefinition({\n checkNativeTypes,\n schema: [\n {\n additionalProperties: false,\n properties: {\n exemptTagContexts: {\n description: 'Avoids reporting when a bad type is found on a specified tag.',\n items: {\n additionalProperties: false,\n properties: {\n tag: {\n description: 'Set a key `tag` to the tag to exempt',\n type: 'string',\n },\n types: {\n description: `Set to \\`true\\` to indicate that any types on that tag will be allowed,\nor to an array of strings which will only allow specific bad types.\nIf an array of strings is given, these must match the type exactly,\ne.g., if you only allow \\`\"object\"\\`, it will not allow\n\\`\"object<string, string>\"\\`. Note that this is different from the\nbehavior of \\`settings.jsdoc.preferredTypes\\`. This option is useful\nfor normally restricting generic types like \\`object\\` with\n\\`preferredTypes\\`, but allowing \\`typedef\\` to indicate that its base\ntype is \\`object\\`.`,\n oneOf: [\n {\n type: 'boolean',\n },\n {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n ],\n },\n },\n type: 'object',\n },\n type: 'array',\n },\n noDefaults: {\n description: `Insists that only the supplied option type\nmap is to be used, and that the default preferences (such as \"string\"\nover \"String\") will not be enforced. The option's default is \\`false\\`.`,\n type: 'boolean',\n },\n unifyParentAndChildTypeChecks: {\n description: `@deprecated Use the \\`preferredTypes[preferredType]\\` setting of the same name instead.\nIf this option is \\`true\\`, will currently override \\`unifyParentAndChildTypeChecks\\` on the \\`preferredTypes\\` setting.`,\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n});\n"],"mappings":";;;;;;AAAA,IAAAA,kCAAA,GAAAC,OAAA;AAIA,MAAMC,iBAAiB,GAAG,CACxB,WAAW,EACX,MAAM,EACN,SAAS,EACT,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,OAAO,EACP,UAAU,EACV,MAAM,EACN,QAAQ,CACT;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,MAAMC,gBAAgB,GAAGA,CAACC,cAAc,EAAEC,YAAY,EAAEC,SAAS,EAAEC,UAAU,EAAEC,YAAY,KAAK;EAC9F,IAAIC,gBAAgB,GAAGH,SAAS;EAChC,KAAK,MAAMI,gBAAgB,IAAIR,iBAAiB,EAAE;IAChD,IACEQ,gBAAgB,KAAK,QAAQ;IAE3B;IACA;IACA,CAACN,cAAc,GAAGC,YAAY,CAAC;IAC/B;IACA;IACA;IACA;IACA;AACR;AACA;IAEUE,UAAU,EACTI,QAAQ,EAAEC,MAAM;IACnB;AACR;AACA;IAEYL,UAAU,EACTM,IAAI,EAAEC,IAAI,KAAK,eAAe;IACjC;AACV;AACA;IACWP,UAAU,EAAGM,IAAI,EAAEE,KAAK,KAAK,QAAQ,CACvC,CACF,EACD;MACA;IACF;IAEA,IAAIL,gBAAgB,KAAKL,YAAY,IACnCK,gBAAgB,CAACM,WAAW,CAAC,CAAC,KAAKX,YAAY,CAACW,WAAW,CAAC,CAAC;IAE7D;IACC,CAACZ,cAAc,IAAIA,cAAc,GAAGM,gBAAgB,CAAC,KAAKO,SAAS,CAAC,EACrE;MACAR,gBAAgB,GAAGC,gBAAgB;MACnCF,YAAY,CAACU,IAAI,CAAC,CAChBb,YAAY,EAAEI,gBAAgB,CAC/B,CAAC;MACF;IACF;EACF;EAEA,OAAOA,gBAAgB;AACzB,CAAC;AAAC,IAAAU,QAAA,GAAAC,OAAA,CAAAC,OAAA,GAEa,IAAAC,oEAAiC,EAAC;EAC/CnB,gBAAgB;EAChBoB,MAAM,EAAE,CACN;IACEC,oBAAoB,EAAE,KAAK;IAC3BC,UAAU,EAAE;MACVC,iBAAiB,EAAE;QACjBC,WAAW,EAAE,+DAA+D;QAC5EC,KAAK,EAAE;UACLJ,oBAAoB,EAAE,KAAK;UAC3BC,UAAU,EAAE;YACVI,GAAG,EAAE;cACHF,WAAW,EAAE,sCAAsC;cACnDb,IAAI,EAAE;YACR,CAAC;YACDgB,KAAK,EAAE;cACLH,WAAW,EAAE;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;cACJI,KAAK,EAAE,CACL;gBACEjB,IAAI,EAAE;cACR,CAAC,EACD;gBACEc,KAAK,EAAE;kBACLd,IAAI,EAAE;gBACR,CAAC;gBACDA,IAAI,EAAE;cACR,CAAC;YAEL;UACF,CAAC;UACDA,IAAI,EAAE;QACR,CAAC;QACDA,IAAI,EAAE;MACR,CAAC;MACDkB,UAAU,EAAE;QACVL,WAAW,EAAE;AACvB;AACA,wEAAwE;QAC9Db,IAAI,EAAE;MACR,CAAC;MACDmB,6BAA6B,EAAE;QAC7BN,WAAW,EAAE;AACvB,yHAAyH;QAC/Gb,IAAI,EAAE;MACR;IACF,CAAC;IACDA,IAAI,EAAE;EACR,CAAC;AAEL,CAAC,CAAC;AAAAoB,MAAA,CAAAd,OAAA,GAAAA,OAAA,CAAAC,OAAA","ignoreList":[]}
1
+ {"version":3,"file":"checkTypes.cjs","names":["_buildRejectOrPreferRuleDefinition","require","_jsdocUtils","checkNativeTypes","preferredTypes","typeNodeName","preferred","parentNode","invalidTypes","changedPreferred","strictNativeType","strictNativeTypes","elements","length","left","type","value","toLowerCase","undefined","push","_default","exports","default","buildRejectOrPreferRuleDefinition","schema","additionalProperties","properties","exemptTagContexts","description","items","tag","types","oneOf","noDefaults","unifyParentAndChildTypeChecks","module"],"sources":["../../src/rules/checkTypes.js"],"sourcesContent":["import {\n buildRejectOrPreferRuleDefinition,\n} from '../buildRejectOrPreferRuleDefinition.js';\nimport {\n strictNativeTypes,\n} from '../jsdocUtils.js';\n\n/**\n * @callback CheckNativeTypes\n * Iterates strict types to see if any should be added to `invalidTypes` (and\n * the the relevant strict type returned as the new preferred type).\n * @param {import('../iterateJsdoc.js').PreferredTypes} preferredTypes\n * @param {string} typeNodeName\n * @param {string|undefined} preferred\n * @param {import('jsdoc-type-pratt-parser').NonRootResult|undefined} parentNode\n * @param {(string|false|undefined)[][]} invalidTypes\n * @returns {string|undefined} The `preferred` type string, optionally changed\n */\n\n/** @type {CheckNativeTypes} */\nconst checkNativeTypes = (preferredTypes, typeNodeName, preferred, parentNode, invalidTypes) => {\n let changedPreferred = preferred;\n for (const strictNativeType of strictNativeTypes) {\n if (\n strictNativeType === 'object' &&\n (\n // This is not set to remap with exact type match (e.g.,\n // `object: 'Object'`), so can ignore (including if circular)\n !preferredTypes?.[typeNodeName] ||\n // Although present on `preferredTypes` for remapping, this is a\n // parent object without a parent match (and not\n // `unifyParentAndChildTypeChecks`) and we don't want\n // `object<>` given TypeScript issue https://github.com/microsoft/TypeScript/issues/20555\n /**\n * @type {import('jsdoc-type-pratt-parser').GenericResult}\n */\n (\n parentNode\n )?.elements?.length && (\n /**\n * @type {import('jsdoc-type-pratt-parser').GenericResult}\n */\n (\n parentNode\n )?.left?.type === 'JsdocTypeName' &&\n /**\n * @type {import('jsdoc-type-pratt-parser').GenericResult}\n */\n (parentNode)?.left?.value === 'Object'\n )\n )\n ) {\n continue;\n }\n\n if (strictNativeType !== typeNodeName &&\n strictNativeType.toLowerCase() === typeNodeName.toLowerCase() &&\n\n // Don't report if user has own map for a strict native type\n (!preferredTypes || preferredTypes?.[strictNativeType] === undefined)\n ) {\n changedPreferred = strictNativeType;\n invalidTypes.push([\n typeNodeName, changedPreferred,\n ]);\n break;\n }\n }\n\n return changedPreferred;\n};\n\nexport default buildRejectOrPreferRuleDefinition({\n checkNativeTypes,\n schema: [\n {\n additionalProperties: false,\n properties: {\n exemptTagContexts: {\n description: 'Avoids reporting when a bad type is found on a specified tag.',\n items: {\n additionalProperties: false,\n properties: {\n tag: {\n description: 'Set a key `tag` to the tag to exempt',\n type: 'string',\n },\n types: {\n description: `Set to \\`true\\` to indicate that any types on that tag will be allowed,\nor to an array of strings which will only allow specific bad types.\nIf an array of strings is given, these must match the type exactly,\ne.g., if you only allow \\`\"object\"\\`, it will not allow\n\\`\"object<string, string>\"\\`. Note that this is different from the\nbehavior of \\`settings.jsdoc.preferredTypes\\`. This option is useful\nfor normally restricting generic types like \\`object\\` with\n\\`preferredTypes\\`, but allowing \\`typedef\\` to indicate that its base\ntype is \\`object\\`.`,\n oneOf: [\n {\n type: 'boolean',\n },\n {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n ],\n },\n },\n type: 'object',\n },\n type: 'array',\n },\n noDefaults: {\n description: `Insists that only the supplied option type\nmap is to be used, and that the default preferences (such as \"string\"\nover \"String\") will not be enforced. The option's default is \\`false\\`.`,\n type: 'boolean',\n },\n unifyParentAndChildTypeChecks: {\n description: `@deprecated Use the \\`preferredTypes[preferredType]\\` setting of the same name instead.\nIf this option is \\`true\\`, will currently override \\`unifyParentAndChildTypeChecks\\` on the \\`preferredTypes\\` setting.`,\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n});\n"],"mappings":";;;;;;AAAA,IAAAA,kCAAA,GAAAC,OAAA;AAGA,IAAAC,WAAA,GAAAD,OAAA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,MAAME,gBAAgB,GAAGA,CAACC,cAAc,EAAEC,YAAY,EAAEC,SAAS,EAAEC,UAAU,EAAEC,YAAY,KAAK;EAC9F,IAAIC,gBAAgB,GAAGH,SAAS;EAChC,KAAK,MAAMI,gBAAgB,IAAIC,6BAAiB,EAAE;IAChD,IACED,gBAAgB,KAAK,QAAQ;IAE3B;IACA;IACA,CAACN,cAAc,GAAGC,YAAY,CAAC;IAC/B;IACA;IACA;IACA;IACA;AACR;AACA;IAEUE,UAAU,EACTK,QAAQ,EAAEC,MAAM;IACnB;AACR;AACA;IAEYN,UAAU,EACTO,IAAI,EAAEC,IAAI,KAAK,eAAe;IACjC;AACV;AACA;IACWR,UAAU,EAAGO,IAAI,EAAEE,KAAK,KAAK,QAAQ,CACvC,CACF,EACD;MACA;IACF;IAEA,IAAIN,gBAAgB,KAAKL,YAAY,IACnCK,gBAAgB,CAACO,WAAW,CAAC,CAAC,KAAKZ,YAAY,CAACY,WAAW,CAAC,CAAC;IAE7D;IACC,CAACb,cAAc,IAAIA,cAAc,GAAGM,gBAAgB,CAAC,KAAKQ,SAAS,CAAC,EACrE;MACAT,gBAAgB,GAAGC,gBAAgB;MACnCF,YAAY,CAACW,IAAI,CAAC,CAChBd,YAAY,EAAEI,gBAAgB,CAC/B,CAAC;MACF;IACF;EACF;EAEA,OAAOA,gBAAgB;AACzB,CAAC;AAAC,IAAAW,QAAA,GAAAC,OAAA,CAAAC,OAAA,GAEa,IAAAC,oEAAiC,EAAC;EAC/CpB,gBAAgB;EAChBqB,MAAM,EAAE,CACN;IACEC,oBAAoB,EAAE,KAAK;IAC3BC,UAAU,EAAE;MACVC,iBAAiB,EAAE;QACjBC,WAAW,EAAE,+DAA+D;QAC5EC,KAAK,EAAE;UACLJ,oBAAoB,EAAE,KAAK;UAC3BC,UAAU,EAAE;YACVI,GAAG,EAAE;cACHF,WAAW,EAAE,sCAAsC;cACnDb,IAAI,EAAE;YACR,CAAC;YACDgB,KAAK,EAAE;cACLH,WAAW,EAAE;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;cACJI,KAAK,EAAE,CACL;gBACEjB,IAAI,EAAE;cACR,CAAC,EACD;gBACEc,KAAK,EAAE;kBACLd,IAAI,EAAE;gBACR,CAAC;gBACDA,IAAI,EAAE;cACR,CAAC;YAEL;UACF,CAAC;UACDA,IAAI,EAAE;QACR,CAAC;QACDA,IAAI,EAAE;MACR,CAAC;MACDkB,UAAU,EAAE;QACVL,WAAW,EAAE;AACvB;AACA,wEAAwE;QAC9Db,IAAI,EAAE;MACR,CAAC;MACDmB,6BAA6B,EAAE;QAC7BN,WAAW,EAAE;AACvB,yHAAyH;QAC/Gb,IAAI,EAAE;MACR;IACF,CAAC;IACDA,IAAI,EAAE;EACR,CAAC;AAEL,CAAC,CAAC;AAAAoB,MAAA,CAAAd,OAAA,GAAAA,OAAA,CAAAC,OAAA","ignoreList":[]}
@@ -243,8 +243,7 @@ Supplying your own value overrides the defaults.`,
243
243
  Can either be strings or an object with a \`context\` string and an optional, default \`false\` \`inlineCommentBlock\` boolean.
244
244
 
245
245
  Defaults to \`ArrowFunctionExpression\`, \`FunctionDeclaration\`,
246
- \`FunctionExpression\`, \`TSDeclareFunction\`.
247
- `,
246
+ \`FunctionExpression\`, \`TSDeclareFunction\`.`,
248
247
  items: {
249
248
  anyOf: [{
250
249
  type: 'string'
@@ -332,8 +331,7 @@ be converted to \`multi\` style JSDoc comments.)
332
331
  /** Some text */
333
332
  \`\`\`
334
333
 
335
- Defaults to \`multi\`.
336
- `,
334
+ Defaults to \`multi\`.`,
337
335
  enum: ['multi', 'single'],
338
336
  type: 'string'
339
337
  },
@@ -1 +1 @@
1
- {"version":3,"file":"convertToJsdocComments.cjs","names":["_iterateJsdoc","require","_jsdocUtils","_jsdoccomment","_default","exports","default","create","context","sourceCode","getSourceCode","settings","getSettings","allowedPrefixes","contexts","contextsAfter","contextsBeforeAndAfter","enableFixer","enforceJsdocLineStyle","lineOrBlockStyle","options","reportingNonJsdoc","report","messageId","comment","node","fixer","loc","end","column","line","start","fix","getFixer","addComment","ctxts","lines","minLines","maxLines","baseNode","getReducedASTNode","decorator","getDecorator","indent","getIndent","text","getText","inlineCommentBlock","find","contxt","ctxt","type","reportings","checkNonJsdoc","_info","_handler","getNonJsdocComment","some","prefix","value","trimStart","startsWith","commentToAdd","insertion","trim","trimEnd","repeat","replaceText","checkNonJsdocAfter","getFollowingComment","slice","remove","insertTextBefore","parent","getContextObject","enforcedContexts","meta","docs","description","url","fixable","messages","blockCommentsJsdocStyle","lineCommentsJsdocStyle","schema","additionalProperties","properties","items","anyOf","enum","module"],"sources":["../../src/rules/convertToJsdocComments.js"],"sourcesContent":["import {\n getSettings,\n} from '../iterateJsdoc.js';\nimport {\n enforcedContexts,\n getContextObject,\n getIndent,\n} from '../jsdocUtils.js';\nimport {\n getDecorator,\n getFollowingComment,\n getNonJsdocComment,\n getReducedASTNode,\n} from '@es-joy/jsdoccomment';\n\n/** @type {import('eslint').Rule.RuleModule} */\nexport default {\n create (context) {\n /**\n * @typedef {import('eslint').AST.Token | import('estree').Comment | {\n * type: import('eslint').AST.TokenType|\"Line\"|\"Block\"|\"Shebang\",\n * range: [number, number],\n * value: string\n * }} Token\n */\n\n /**\n * @callback AddComment\n * @param {boolean|undefined} inlineCommentBlock\n * @param {Token} comment\n * @param {string} indent\n * @param {number} lines\n * @param {import('eslint').Rule.RuleFixer} fixer\n */\n\n /* c8 ignore next -- Fallback to deprecated method */\n const {\n sourceCode = context.getSourceCode(),\n } = context;\n const settings = getSettings(context);\n if (!settings) {\n return {};\n }\n\n const {\n allowedPrefixes = [\n '@ts-', 'istanbul ', 'c8 ', 'v8 ', 'eslint', 'prettier-',\n ],\n contexts = settings.contexts || [],\n contextsAfter = /** @type {string[]} */ ([]),\n contextsBeforeAndAfter = [\n 'VariableDeclarator', 'TSPropertySignature', 'PropertyDefinition',\n ],\n enableFixer = true,\n enforceJsdocLineStyle = 'multi',\n lineOrBlockStyle = 'both',\n } = context.options[0] ?? {};\n\n let reportingNonJsdoc = false;\n\n /**\n * @param {string} messageId\n * @param {import('estree').Comment|Token} comment\n * @param {import('eslint').Rule.Node} node\n * @param {import('eslint').Rule.ReportFixer} fixer\n */\n const report = (messageId, comment, node, fixer) => {\n const loc = {\n end: {\n column: 0,\n /* c8 ignore next 2 -- Guard */\n // @ts-expect-error Ok\n line: (comment.loc?.start?.line ?? 1),\n },\n start: {\n column: 0,\n /* c8 ignore next 2 -- Guard */\n // @ts-expect-error Ok\n line: (comment.loc?.start?.line ?? 1),\n },\n };\n\n context.report({\n fix: enableFixer ? fixer : null,\n loc,\n messageId,\n node,\n });\n };\n\n /**\n * @param {import('eslint').Rule.Node} node\n * @param {import('eslint').AST.Token | import('estree').Comment | {\n * type: import('eslint').AST.TokenType|\"Line\"|\"Block\"|\"Shebang\",\n * range: [number, number],\n * value: string\n * }} comment\n * @param {AddComment} addComment\n * @param {import('../iterateJsdoc.js').Context[]} ctxts\n */\n const getFixer = (node, comment, addComment, ctxts) => {\n return /** @type {import('eslint').Rule.ReportFixer} */ (fixer) => {\n // Default to one line break if the `minLines`/`maxLines` settings allow\n const lines = settings.minLines === 0 && settings.maxLines >= 1 ? 1 : settings.minLines;\n let baseNode =\n /**\n * @type {import('@typescript-eslint/types').TSESTree.Node|import('eslint').Rule.Node}\n */ (\n getReducedASTNode(node, sourceCode)\n );\n\n const decorator = getDecorator(\n /** @type {import('eslint').Rule.Node} */\n (baseNode),\n );\n if (decorator) {\n baseNode = /** @type {import('@typescript-eslint/types').TSESTree.Decorator} */ (\n decorator\n );\n }\n\n const indent = getIndent({\n text: sourceCode.getText(\n /** @type {import('eslint').Rule.Node} */ (baseNode),\n /** @type {import('eslint').AST.SourceLocation} */\n (\n /** @type {import('eslint').Rule.Node} */ (baseNode).loc\n ).start.column,\n ),\n });\n\n const {\n inlineCommentBlock,\n } =\n /**\n * @type {{\n * context: string,\n * inlineCommentBlock: boolean,\n * minLineCount: import('../iterateJsdoc.js').Integer\n * }[]}\n */ (ctxts).find((contxt) => {\n if (typeof contxt === 'string') {\n return false;\n }\n\n const {\n context: ctxt,\n } = contxt;\n return ctxt === node.type;\n }) || {};\n\n return addComment(inlineCommentBlock, comment, indent, lines, fixer);\n };\n };\n\n /**\n * @param {import('eslint').AST.Token | import('estree').Comment | {\n * type: import('eslint').AST.TokenType|\"Line\"|\"Block\"|\"Shebang\",\n * range: [number, number],\n * value: string\n * }} comment\n * @param {import('eslint').Rule.Node} node\n * @param {AddComment} addComment\n * @param {import('../iterateJsdoc.js').Context[]} ctxts\n */\n const reportings = (comment, node, addComment, ctxts) => {\n const fixer = getFixer(node, comment, addComment, ctxts);\n\n if (comment.type === 'Block') {\n if (lineOrBlockStyle === 'line') {\n return;\n }\n\n report('blockCommentsJsdocStyle', comment, node, fixer);\n return;\n }\n\n if (comment.type === 'Line') {\n if (lineOrBlockStyle === 'block') {\n return;\n }\n\n report('lineCommentsJsdocStyle', comment, node, fixer);\n }\n };\n\n /**\n * @type {import('../iterateJsdoc.js').CheckJsdoc}\n */\n const checkNonJsdoc = (_info, _handler, node) => {\n const comment = getNonJsdocComment(sourceCode, node, settings);\n\n if (\n !comment ||\n /** @type {string[]} */\n (allowedPrefixes).some((prefix) => {\n return comment.value.trimStart().startsWith(prefix);\n })\n ) {\n return;\n }\n\n reportingNonJsdoc = true;\n\n /** @type {AddComment} */\n // eslint-disable-next-line unicorn/consistent-function-scoping -- Avoid conflicts\n const addComment = (inlineCommentBlock, commentToAdd, indent, lines, fixer) => {\n const insertion = (\n inlineCommentBlock || enforceJsdocLineStyle === 'single' ?\n `/** ${commentToAdd.value.trim()} ` :\n `/**\\n${indent}*${commentToAdd.value.trimEnd()}\\n${indent}`\n ) +\n `*/${'\\n'.repeat((lines || 1) - 1)}`;\n\n return fixer.replaceText(\n /** @type {import('eslint').AST.Token} */\n (commentToAdd),\n insertion,\n );\n };\n\n reportings(comment, node, addComment, contexts);\n };\n\n /**\n * @param {import('eslint').Rule.Node} node\n * @param {import('../iterateJsdoc.js').Context[]} ctxts\n */\n const checkNonJsdocAfter = (node, ctxts) => {\n const comment = getFollowingComment(sourceCode, node);\n\n if (\n !comment ||\n comment.value.startsWith('*') ||\n /** @type {string[]} */\n (allowedPrefixes).some((prefix) => {\n return comment.value.trimStart().startsWith(prefix);\n })\n ) {\n return;\n }\n\n /** @type {AddComment} */\n const addComment = (inlineCommentBlock, commentToAdd, indent, lines, fixer) => {\n const insertion = (\n inlineCommentBlock || enforceJsdocLineStyle === 'single' ?\n `/** ${commentToAdd.value.trim()} ` :\n `/**\\n${indent}*${commentToAdd.value.trimEnd()}\\n${indent}`\n ) +\n `*/${'\\n'.repeat((lines || 1) - 1)}${lines ? `\\n${indent.slice(1)}` : ' '}`;\n\n return [\n fixer.remove(\n /** @type {import('eslint').AST.Token} */\n (commentToAdd),\n ), fixer.insertTextBefore(\n node.type === 'VariableDeclarator' ? node.parent : node,\n insertion,\n ),\n ];\n };\n\n reportings(comment, node, addComment, ctxts);\n };\n\n // Todo: add contexts to check after (and handle if want both before and after)\n return {\n ...getContextObject(\n enforcedContexts(context, true, settings),\n checkNonJsdoc,\n ),\n ...getContextObject(\n contextsAfter,\n (_info, _handler, node) => {\n checkNonJsdocAfter(node, contextsAfter);\n },\n ),\n ...getContextObject(\n contextsBeforeAndAfter,\n (_info, _handler, node) => {\n checkNonJsdoc({}, null, node);\n if (!reportingNonJsdoc) {\n checkNonJsdocAfter(node, contextsBeforeAndAfter);\n }\n },\n ),\n };\n },\n meta: {\n docs: {\n description: 'Converts non-JSDoc comments preceding or following nodes into JSDoc ones',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/convert-to-jsdoc-comments.md#repos-sticky-header',\n },\n\n fixable: 'code',\n\n messages: {\n blockCommentsJsdocStyle: 'Block comments should be JSDoc-style.',\n lineCommentsJsdocStyle: 'Line comments should be JSDoc-style.',\n },\n schema: [\n {\n additionalProperties: false,\n properties: {\n allowedPrefixes: {\n description: `An array of prefixes to allow at the beginning of a comment.\n\nDefaults to \\`['@ts-', 'istanbul ', 'c8 ', 'v8 ', 'eslint', 'prettier-']\\`.\n\nSupplying your own value overrides the defaults.`,\n items: {\n type: 'string',\n },\n type: 'array',\n },\n contexts: {\n description: `The contexts array which will be checked for preceding content.\n\nCan either be strings or an object with a \\`context\\` string and an optional, default \\`false\\` \\`inlineCommentBlock\\` boolean.\n\nDefaults to \\`ArrowFunctionExpression\\`, \\`FunctionDeclaration\\`,\n\\`FunctionExpression\\`, \\`TSDeclareFunction\\`.\n`,\n items: {\n anyOf: [\n {\n type: 'string',\n },\n {\n additionalProperties: false,\n properties: {\n context: {\n type: 'string',\n },\n inlineCommentBlock: {\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n },\n type: 'array',\n },\n contextsAfter: {\n description: `The contexts array which will be checked for content on the same line after.\n\nCan either be strings or an object with a \\`context\\` string and an optional, default \\`false\\` \\`inlineCommentBlock\\` boolean.\n\nDefaults to an empty array.`,\n items: {\n anyOf: [\n {\n type: 'string',\n },\n {\n additionalProperties: false,\n properties: {\n context: {\n type: 'string',\n },\n inlineCommentBlock: {\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n },\n type: 'array',\n },\n contextsBeforeAndAfter: {\n description: `The contexts array which will be checked for content before and on the same\nline after.\n\nCan either be strings or an object with a \\`context\\` string and an optional, default \\`false\\` \\`inlineCommentBlock\\` boolean.\n\nDefaults to \\`VariableDeclarator\\`, \\`TSPropertySignature\\`, \\`PropertyDefinition\\`.`,\n items: {\n anyOf: [\n {\n type: 'string',\n },\n {\n additionalProperties: false,\n properties: {\n context: {\n type: 'string',\n },\n inlineCommentBlock: {\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n },\n type: 'array',\n },\n enableFixer: {\n description: 'Set to `false` to disable fixing.',\n type: 'boolean',\n },\n enforceJsdocLineStyle: {\n description: `What policy to enforce on the conversion of non-JSDoc comments without\nline breaks. (Non-JSDoc (mulitline) comments with line breaks will always\nbe converted to \\`multi\\` style JSDoc comments.)\n\n- \\`multi\\` - Convert to multi-line style\n\\`\\`\\`js\n/**\n * Some text\n */\n\\`\\`\\`\n- \\`single\\` - Convert to single-line style\n\\`\\`\\`js\n/** Some text */\n\\`\\`\\`\n\nDefaults to \\`multi\\`.\n`,\n enum: [\n 'multi', 'single',\n ],\n type: 'string',\n },\n lineOrBlockStyle: {\n description: `What style of comments to which to apply JSDoc conversion.\n\n- \\`block\\` - Applies to block-style comments (\\`/* ... */\\`)\n- \\`line\\` - Applies to line-style comments (\\`// ...\\`)\n- \\`both\\` - Applies to both block and line-style comments\n\nDefaults to \\`both\\`.`,\n enum: [\n 'block', 'line', 'both',\n ],\n type: 'string',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n};\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"convertToJsdocComments.cjs","names":["_iterateJsdoc","require","_jsdocUtils","_jsdoccomment","_default","exports","default","create","context","sourceCode","getSourceCode","settings","getSettings","allowedPrefixes","contexts","contextsAfter","contextsBeforeAndAfter","enableFixer","enforceJsdocLineStyle","lineOrBlockStyle","options","reportingNonJsdoc","report","messageId","comment","node","fixer","loc","end","column","line","start","fix","getFixer","addComment","ctxts","lines","minLines","maxLines","baseNode","getReducedASTNode","decorator","getDecorator","indent","getIndent","text","getText","inlineCommentBlock","find","contxt","ctxt","type","reportings","checkNonJsdoc","_info","_handler","getNonJsdocComment","some","prefix","value","trimStart","startsWith","commentToAdd","insertion","trim","trimEnd","repeat","replaceText","checkNonJsdocAfter","getFollowingComment","slice","remove","insertTextBefore","parent","getContextObject","enforcedContexts","meta","docs","description","url","fixable","messages","blockCommentsJsdocStyle","lineCommentsJsdocStyle","schema","additionalProperties","properties","items","anyOf","enum","module"],"sources":["../../src/rules/convertToJsdocComments.js"],"sourcesContent":["import {\n getSettings,\n} from '../iterateJsdoc.js';\nimport {\n enforcedContexts,\n getContextObject,\n getIndent,\n} from '../jsdocUtils.js';\nimport {\n getDecorator,\n getFollowingComment,\n getNonJsdocComment,\n getReducedASTNode,\n} from '@es-joy/jsdoccomment';\n\n/** @type {import('eslint').Rule.RuleModule} */\nexport default {\n create (context) {\n /**\n * @typedef {import('eslint').AST.Token | import('estree').Comment | {\n * type: import('eslint').AST.TokenType|\"Line\"|\"Block\"|\"Shebang\",\n * range: [number, number],\n * value: string\n * }} Token\n */\n\n /**\n * @callback AddComment\n * @param {boolean|undefined} inlineCommentBlock\n * @param {Token} comment\n * @param {string} indent\n * @param {number} lines\n * @param {import('eslint').Rule.RuleFixer} fixer\n */\n\n /* c8 ignore next -- Fallback to deprecated method */\n const {\n sourceCode = context.getSourceCode(),\n } = context;\n const settings = getSettings(context);\n if (!settings) {\n return {};\n }\n\n const {\n allowedPrefixes = [\n '@ts-', 'istanbul ', 'c8 ', 'v8 ', 'eslint', 'prettier-',\n ],\n contexts = settings.contexts || [],\n contextsAfter = /** @type {string[]} */ ([]),\n contextsBeforeAndAfter = [\n 'VariableDeclarator', 'TSPropertySignature', 'PropertyDefinition',\n ],\n enableFixer = true,\n enforceJsdocLineStyle = 'multi',\n lineOrBlockStyle = 'both',\n } = context.options[0] ?? {};\n\n let reportingNonJsdoc = false;\n\n /**\n * @param {string} messageId\n * @param {import('estree').Comment|Token} comment\n * @param {import('eslint').Rule.Node} node\n * @param {import('eslint').Rule.ReportFixer} fixer\n */\n const report = (messageId, comment, node, fixer) => {\n const loc = {\n end: {\n column: 0,\n /* c8 ignore next 2 -- Guard */\n // @ts-expect-error Ok\n line: (comment.loc?.start?.line ?? 1),\n },\n start: {\n column: 0,\n /* c8 ignore next 2 -- Guard */\n // @ts-expect-error Ok\n line: (comment.loc?.start?.line ?? 1),\n },\n };\n\n context.report({\n fix: enableFixer ? fixer : null,\n loc,\n messageId,\n node,\n });\n };\n\n /**\n * @param {import('eslint').Rule.Node} node\n * @param {import('eslint').AST.Token | import('estree').Comment | {\n * type: import('eslint').AST.TokenType|\"Line\"|\"Block\"|\"Shebang\",\n * range: [number, number],\n * value: string\n * }} comment\n * @param {AddComment} addComment\n * @param {import('../iterateJsdoc.js').Context[]} ctxts\n */\n const getFixer = (node, comment, addComment, ctxts) => {\n return /** @type {import('eslint').Rule.ReportFixer} */ (fixer) => {\n // Default to one line break if the `minLines`/`maxLines` settings allow\n const lines = settings.minLines === 0 && settings.maxLines >= 1 ? 1 : settings.minLines;\n let baseNode =\n /**\n * @type {import('@typescript-eslint/types').TSESTree.Node|import('eslint').Rule.Node}\n */ (\n getReducedASTNode(node, sourceCode)\n );\n\n const decorator = getDecorator(\n /** @type {import('eslint').Rule.Node} */\n (baseNode),\n );\n if (decorator) {\n baseNode = /** @type {import('@typescript-eslint/types').TSESTree.Decorator} */ (\n decorator\n );\n }\n\n const indent = getIndent({\n text: sourceCode.getText(\n /** @type {import('eslint').Rule.Node} */ (baseNode),\n /** @type {import('eslint').AST.SourceLocation} */\n (\n /** @type {import('eslint').Rule.Node} */ (baseNode).loc\n ).start.column,\n ),\n });\n\n const {\n inlineCommentBlock,\n } =\n /**\n * @type {{\n * context: string,\n * inlineCommentBlock: boolean,\n * minLineCount: import('../iterateJsdoc.js').Integer\n * }[]}\n */ (ctxts).find((contxt) => {\n if (typeof contxt === 'string') {\n return false;\n }\n\n const {\n context: ctxt,\n } = contxt;\n return ctxt === node.type;\n }) || {};\n\n return addComment(inlineCommentBlock, comment, indent, lines, fixer);\n };\n };\n\n /**\n * @param {import('eslint').AST.Token | import('estree').Comment | {\n * type: import('eslint').AST.TokenType|\"Line\"|\"Block\"|\"Shebang\",\n * range: [number, number],\n * value: string\n * }} comment\n * @param {import('eslint').Rule.Node} node\n * @param {AddComment} addComment\n * @param {import('../iterateJsdoc.js').Context[]} ctxts\n */\n const reportings = (comment, node, addComment, ctxts) => {\n const fixer = getFixer(node, comment, addComment, ctxts);\n\n if (comment.type === 'Block') {\n if (lineOrBlockStyle === 'line') {\n return;\n }\n\n report('blockCommentsJsdocStyle', comment, node, fixer);\n return;\n }\n\n if (comment.type === 'Line') {\n if (lineOrBlockStyle === 'block') {\n return;\n }\n\n report('lineCommentsJsdocStyle', comment, node, fixer);\n }\n };\n\n /**\n * @type {import('../iterateJsdoc.js').CheckJsdoc}\n */\n const checkNonJsdoc = (_info, _handler, node) => {\n const comment = getNonJsdocComment(sourceCode, node, settings);\n\n if (\n !comment ||\n /** @type {string[]} */\n (allowedPrefixes).some((prefix) => {\n return comment.value.trimStart().startsWith(prefix);\n })\n ) {\n return;\n }\n\n reportingNonJsdoc = true;\n\n /** @type {AddComment} */\n // eslint-disable-next-line unicorn/consistent-function-scoping -- Avoid conflicts\n const addComment = (inlineCommentBlock, commentToAdd, indent, lines, fixer) => {\n const insertion = (\n inlineCommentBlock || enforceJsdocLineStyle === 'single' ?\n `/** ${commentToAdd.value.trim()} ` :\n `/**\\n${indent}*${commentToAdd.value.trimEnd()}\\n${indent}`\n ) +\n `*/${'\\n'.repeat((lines || 1) - 1)}`;\n\n return fixer.replaceText(\n /** @type {import('eslint').AST.Token} */\n (commentToAdd),\n insertion,\n );\n };\n\n reportings(comment, node, addComment, contexts);\n };\n\n /**\n * @param {import('eslint').Rule.Node} node\n * @param {import('../iterateJsdoc.js').Context[]} ctxts\n */\n const checkNonJsdocAfter = (node, ctxts) => {\n const comment = getFollowingComment(sourceCode, node);\n\n if (\n !comment ||\n comment.value.startsWith('*') ||\n /** @type {string[]} */\n (allowedPrefixes).some((prefix) => {\n return comment.value.trimStart().startsWith(prefix);\n })\n ) {\n return;\n }\n\n /** @type {AddComment} */\n const addComment = (inlineCommentBlock, commentToAdd, indent, lines, fixer) => {\n const insertion = (\n inlineCommentBlock || enforceJsdocLineStyle === 'single' ?\n `/** ${commentToAdd.value.trim()} ` :\n `/**\\n${indent}*${commentToAdd.value.trimEnd()}\\n${indent}`\n ) +\n `*/${'\\n'.repeat((lines || 1) - 1)}${lines ? `\\n${indent.slice(1)}` : ' '}`;\n\n return [\n fixer.remove(\n /** @type {import('eslint').AST.Token} */\n (commentToAdd),\n ), fixer.insertTextBefore(\n node.type === 'VariableDeclarator' ? node.parent : node,\n insertion,\n ),\n ];\n };\n\n reportings(comment, node, addComment, ctxts);\n };\n\n // Todo: add contexts to check after (and handle if want both before and after)\n return {\n ...getContextObject(\n enforcedContexts(context, true, settings),\n checkNonJsdoc,\n ),\n ...getContextObject(\n contextsAfter,\n (_info, _handler, node) => {\n checkNonJsdocAfter(node, contextsAfter);\n },\n ),\n ...getContextObject(\n contextsBeforeAndAfter,\n (_info, _handler, node) => {\n checkNonJsdoc({}, null, node);\n if (!reportingNonJsdoc) {\n checkNonJsdocAfter(node, contextsBeforeAndAfter);\n }\n },\n ),\n };\n },\n meta: {\n docs: {\n description: 'Converts non-JSDoc comments preceding or following nodes into JSDoc ones',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/convert-to-jsdoc-comments.md#repos-sticky-header',\n },\n\n fixable: 'code',\n\n messages: {\n blockCommentsJsdocStyle: 'Block comments should be JSDoc-style.',\n lineCommentsJsdocStyle: 'Line comments should be JSDoc-style.',\n },\n schema: [\n {\n additionalProperties: false,\n properties: {\n allowedPrefixes: {\n description: `An array of prefixes to allow at the beginning of a comment.\n\nDefaults to \\`['@ts-', 'istanbul ', 'c8 ', 'v8 ', 'eslint', 'prettier-']\\`.\n\nSupplying your own value overrides the defaults.`,\n items: {\n type: 'string',\n },\n type: 'array',\n },\n contexts: {\n description: `The contexts array which will be checked for preceding content.\n\nCan either be strings or an object with a \\`context\\` string and an optional, default \\`false\\` \\`inlineCommentBlock\\` boolean.\n\nDefaults to \\`ArrowFunctionExpression\\`, \\`FunctionDeclaration\\`,\n\\`FunctionExpression\\`, \\`TSDeclareFunction\\`.`,\n items: {\n anyOf: [\n {\n type: 'string',\n },\n {\n additionalProperties: false,\n properties: {\n context: {\n type: 'string',\n },\n inlineCommentBlock: {\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n },\n type: 'array',\n },\n contextsAfter: {\n description: `The contexts array which will be checked for content on the same line after.\n\nCan either be strings or an object with a \\`context\\` string and an optional, default \\`false\\` \\`inlineCommentBlock\\` boolean.\n\nDefaults to an empty array.`,\n items: {\n anyOf: [\n {\n type: 'string',\n },\n {\n additionalProperties: false,\n properties: {\n context: {\n type: 'string',\n },\n inlineCommentBlock: {\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n },\n type: 'array',\n },\n contextsBeforeAndAfter: {\n description: `The contexts array which will be checked for content before and on the same\nline after.\n\nCan either be strings or an object with a \\`context\\` string and an optional, default \\`false\\` \\`inlineCommentBlock\\` boolean.\n\nDefaults to \\`VariableDeclarator\\`, \\`TSPropertySignature\\`, \\`PropertyDefinition\\`.`,\n items: {\n anyOf: [\n {\n type: 'string',\n },\n {\n additionalProperties: false,\n properties: {\n context: {\n type: 'string',\n },\n inlineCommentBlock: {\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n },\n type: 'array',\n },\n enableFixer: {\n description: 'Set to `false` to disable fixing.',\n type: 'boolean',\n },\n enforceJsdocLineStyle: {\n description: `What policy to enforce on the conversion of non-JSDoc comments without\nline breaks. (Non-JSDoc (mulitline) comments with line breaks will always\nbe converted to \\`multi\\` style JSDoc comments.)\n\n- \\`multi\\` - Convert to multi-line style\n\\`\\`\\`js\n/**\n * Some text\n */\n\\`\\`\\`\n- \\`single\\` - Convert to single-line style\n\\`\\`\\`js\n/** Some text */\n\\`\\`\\`\n\nDefaults to \\`multi\\`.`,\n enum: [\n 'multi', 'single',\n ],\n type: 'string',\n },\n lineOrBlockStyle: {\n description: `What style of comments to which to apply JSDoc conversion.\n\n- \\`block\\` - Applies to block-style comments (\\`/* ... */\\`)\n- \\`line\\` - Applies to line-style comments (\\`// ...\\`)\n- \\`both\\` - Applies to both block and line-style comments\n\nDefaults to \\`both\\`.`,\n enum: [\n 'block', 'line', 'both',\n ],\n type: 'string',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n};\n"],"mappings":"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","ignoreList":[]}
@@ -69,8 +69,7 @@ add them within this option.
69
69
  {
70
70
  'jsdoc/empty-tags': ['error', {tags: ['event']}]
71
71
  }
72
- \`\`\`
73
- `,
72
+ \`\`\``,
74
73
  items: {
75
74
  type: 'string'
76
75
  },
@@ -1 +1 @@
1
- {"version":3,"file":"emptyTags.cjs","names":["_iterateJsdoc","_interopRequireDefault","require","e","__esModule","default","defaultEmptyTags","Set","emptyIfNotClosure","emptyIfClosure","_default","exports","iterateJsdoc","jsdoc","settings","utils","emptyTags","filterTags","tag","tagName","has","hasOptionTag","tags","some","mode","key","entries","content","name","description","type","trim","length","test","fix","setTag","reportJSDoc","checkInternal","checkPrivate","iterateAllJsdocs","meta","docs","url","fixable","schema","additionalProperties","properties","items","module"],"sources":["../../src/rules/emptyTags.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc.js';\n\nconst defaultEmptyTags = new Set([\n 'abstract', 'async', 'generator', 'global', 'hideconstructor',\n\n // jsdoc doesn't use this form in its docs, but allow for compatibility with\n // TypeScript which allows and Closure which requires\n 'ignore',\n\n // jsdoc doesn't use but allow for TypeScript\n 'inheritDoc', 'inner', 'instance',\n 'internal',\n\n 'overload',\n\n 'override',\n 'readonly',\n]);\n\nconst emptyIfNotClosure = new Set([\n // Closure doesn't allow with this casing\n 'inheritdoc', 'package', 'private', 'protected', 'public',\n\n 'static',\n]);\n\nconst emptyIfClosure = new Set([\n 'interface',\n]);\n\nexport default iterateJsdoc(({\n jsdoc,\n settings,\n utils,\n}) => {\n const emptyTags = utils.filterTags(({\n tag: tagName,\n }) => {\n return defaultEmptyTags.has(tagName) ||\n utils.hasOptionTag(tagName) && jsdoc.tags.some(({\n tag,\n }) => {\n return tag === tagName;\n }) ||\n settings.mode === 'closure' && emptyIfClosure.has(tagName) ||\n settings.mode !== 'closure' && emptyIfNotClosure.has(tagName);\n });\n\n for (const [\n key,\n tag,\n ] of emptyTags.entries()) {\n const content = tag.name || tag.description || tag.type;\n if (content.trim() && (\n // Allow for JSDoc-block final asterisks\n key !== emptyTags.length - 1 || !(/^\\s*\\*+$/v).test(content)\n )) {\n const fix = () => {\n // By time of call in fixer, `tag` will have `line` added\n utils.setTag(\n /**\n * @type {import('comment-parser').Spec & {\n * line: import('../iterateJsdoc.js').Integer\n * }}\n */ (tag),\n );\n };\n\n utils.reportJSDoc(`@${tag.tag} should be empty.`, tag, fix, true);\n }\n }\n}, {\n checkInternal: true,\n checkPrivate: true,\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Checks tags that are expected to be empty (e.g., `@abstract` or `@async`), reporting if they have content',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/empty-tags.md#repos-sticky-header',\n },\n fixable: 'code',\n schema: [\n {\n additionalProperties: false,\n properties: {\n tags: {\n description: `If you want additional tags to be checked for their descriptions, you may\nadd them within this option.\n\n\\`\\`\\`js\n{\n 'jsdoc/empty-tags': ['error', {tags: ['event']}]\n}\n\\`\\`\\`\n`,\n items: {\n type: 'string',\n },\n type: 'array',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"emptyTags.cjs","names":["_iterateJsdoc","_interopRequireDefault","require","e","__esModule","default","defaultEmptyTags","Set","emptyIfNotClosure","emptyIfClosure","_default","exports","iterateJsdoc","jsdoc","settings","utils","emptyTags","filterTags","tag","tagName","has","hasOptionTag","tags","some","mode","key","entries","content","name","description","type","trim","length","test","fix","setTag","reportJSDoc","checkInternal","checkPrivate","iterateAllJsdocs","meta","docs","url","fixable","schema","additionalProperties","properties","items","module"],"sources":["../../src/rules/emptyTags.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc.js';\n\nconst defaultEmptyTags = new Set([\n 'abstract', 'async', 'generator', 'global', 'hideconstructor',\n\n // jsdoc doesn't use this form in its docs, but allow for compatibility with\n // TypeScript which allows and Closure which requires\n 'ignore',\n\n // jsdoc doesn't use but allow for TypeScript\n 'inheritDoc', 'inner', 'instance',\n 'internal',\n\n 'overload',\n\n 'override',\n 'readonly',\n]);\n\nconst emptyIfNotClosure = new Set([\n // Closure doesn't allow with this casing\n 'inheritdoc', 'package', 'private', 'protected', 'public',\n\n 'static',\n]);\n\nconst emptyIfClosure = new Set([\n 'interface',\n]);\n\nexport default iterateJsdoc(({\n jsdoc,\n settings,\n utils,\n}) => {\n const emptyTags = utils.filterTags(({\n tag: tagName,\n }) => {\n return defaultEmptyTags.has(tagName) ||\n utils.hasOptionTag(tagName) && jsdoc.tags.some(({\n tag,\n }) => {\n return tag === tagName;\n }) ||\n settings.mode === 'closure' && emptyIfClosure.has(tagName) ||\n settings.mode !== 'closure' && emptyIfNotClosure.has(tagName);\n });\n\n for (const [\n key,\n tag,\n ] of emptyTags.entries()) {\n const content = tag.name || tag.description || tag.type;\n if (content.trim() && (\n // Allow for JSDoc-block final asterisks\n key !== emptyTags.length - 1 || !(/^\\s*\\*+$/v).test(content)\n )) {\n const fix = () => {\n // By time of call in fixer, `tag` will have `line` added\n utils.setTag(\n /**\n * @type {import('comment-parser').Spec & {\n * line: import('../iterateJsdoc.js').Integer\n * }}\n */ (tag),\n );\n };\n\n utils.reportJSDoc(`@${tag.tag} should be empty.`, tag, fix, true);\n }\n }\n}, {\n checkInternal: true,\n checkPrivate: true,\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Checks tags that are expected to be empty (e.g., `@abstract` or `@async`), reporting if they have content',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/empty-tags.md#repos-sticky-header',\n },\n fixable: 'code',\n schema: [\n {\n additionalProperties: false,\n properties: {\n tags: {\n description: `If you want additional tags to be checked for their descriptions, you may\nadd them within this option.\n\n\\`\\`\\`js\n{\n 'jsdoc/empty-tags': ['error', {tags: ['event']}]\n}\n\\`\\`\\``,\n items: {\n type: 'string',\n },\n type: 'array',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,149 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _iterateJsdoc = _interopRequireDefault(require("../iterateJsdoc.cjs"));
8
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
9
+ var _default = exports.default = (0, _iterateJsdoc.default)(({
10
+ context,
11
+ jsdoc,
12
+ settings,
13
+ utils
14
+ }) => {
15
+ const {
16
+ mode
17
+ } = settings;
18
+ if (mode !== 'typescript') {
19
+ return;
20
+ }
21
+ const {
22
+ allowedInlineTags = [],
23
+ enableFixer = false,
24
+ fixType = 'backslash'
25
+ } = context.options[0] || {};
26
+ const {
27
+ description
28
+ } = utils.getDescription();
29
+
30
+ /** @type {string[]} */
31
+ const tagNames = [];
32
+
33
+ /** @type {number[]} */
34
+ const indexes = [];
35
+ const unescapedInlineTagRegex = /(?:^|\s)@(\w+)/gv;
36
+ for (const [idx, descLine] of (description.startsWith('\n') ? description.slice(1) : description).split('\n').entries()) {
37
+ descLine.replaceAll(unescapedInlineTagRegex, (_, tagName) => {
38
+ if (allowedInlineTags.includes(tagName)) {
39
+ return _;
40
+ }
41
+ tagNames.push(tagName);
42
+ indexes.push(idx);
43
+ return _;
44
+ });
45
+ }
46
+ for (const [idx, tagName] of tagNames.entries()) {
47
+ utils.reportJSDoc(`Unexpected inline JSDoc tag. Did you mean to use {@${tagName}}, \\@${tagName}, or \`@${tagName}\`?`, {
48
+ line: indexes[idx] + 1
49
+ }, enableFixer ? () => {
50
+ utils.setBlockDescription((info, seedTokens, descLines) => {
51
+ return descLines.map(desc => {
52
+ const newDesc = desc.replaceAll(new RegExp(`(^|\\s)@${
53
+ // No need to escape, as contains only safe characters
54
+ tagName}`, 'gv'), fixType === 'backticks' ? '$1`@' + tagName + '`' : '$1\\@' + tagName);
55
+ return {
56
+ number: 0,
57
+ source: '',
58
+ tokens: seedTokens({
59
+ ...info,
60
+ description: newDesc,
61
+ postDelimiter: newDesc.trim() ? ' ' : ''
62
+ })
63
+ };
64
+ });
65
+ });
66
+ } : null);
67
+ }
68
+
69
+ /**
70
+ * @param {string} tagName
71
+ * @returns {[
72
+ * RegExp,
73
+ * (description: string) => string
74
+ * ]}
75
+ */
76
+ const escapeInlineTags = tagName => {
77
+ const regex = new RegExp(`(^|\\s)@${
78
+ // No need to escape, as contains only safe characters
79
+ tagName}`, 'gv');
80
+ return [regex,
81
+ /**
82
+ * @param {string} desc
83
+ */
84
+ desc => {
85
+ return desc.replaceAll(regex, fixType === 'backticks' ? '$1`@' + tagName + '`' : '$1\\@' + tagName);
86
+ }];
87
+ };
88
+ for (const tag of jsdoc.tags) {
89
+ if (tag.tag === 'example') {
90
+ continue;
91
+ }
92
+
93
+ /** @type {string} */
94
+ let tagName = '';
95
+ while (/** @type {string[]} */utils.getTagDescription(tag, true)
96
+ // eslint-disable-next-line no-loop-func -- Safe
97
+ .some(desc => {
98
+ tagName = unescapedInlineTagRegex.exec(desc)?.[1] ?? '';
99
+ if (allowedInlineTags.includes(tagName)) {
100
+ return false;
101
+ }
102
+ return tagName;
103
+ })) {
104
+ const line = utils.setTagDescription(tag, ...escapeInlineTags(tagName)) + tag.source[0].number;
105
+ utils.reportJSDoc(`Unexpected inline JSDoc tag. Did you mean to use {@${tagName}}, \\@${tagName}, or \`@${tagName}\`?`, {
106
+ line
107
+ }, enableFixer ? () => {} : null, true);
108
+ }
109
+ }
110
+ }, {
111
+ iterateAllJsdocs: true,
112
+ meta: {
113
+ docs: {
114
+ description: 'Reports use of JSDoc tags in non-tag positions (in the default "typescript" mode).',
115
+ url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/escape-inline-tags.md#repos-sticky-header'
116
+ },
117
+ fixable: 'code',
118
+ schema: [{
119
+ additionalProperties: false,
120
+ properties: {
121
+ allowedInlineTags: {
122
+ description: 'A listing of tags you wish to allow unescaped. Defaults to an empty array.',
123
+ items: {
124
+ type: 'string'
125
+ },
126
+ type: 'array'
127
+ },
128
+ enableFixer: {
129
+ description: 'Whether to enable the fixer. Defaults to `false`.',
130
+ type: 'boolean'
131
+ },
132
+ fixType: {
133
+ description: `How to escape the inline tag.
134
+
135
+ May be "backticks" to enclose tags in backticks (treating as code segments), or
136
+ "backslash" to escape tags with a backslash, i.e., \`\\@\`
137
+
138
+ Defaults to "backslash".`,
139
+ enum: ['backticks', 'backslash'],
140
+ type: 'string'
141
+ }
142
+ },
143
+ type: 'object'
144
+ }],
145
+ type: 'suggestion'
146
+ }
147
+ });
148
+ module.exports = exports.default;
149
+ //# sourceMappingURL=escapeInlineTags.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"escapeInlineTags.cjs","names":["_iterateJsdoc","_interopRequireDefault","require","e","__esModule","default","_default","exports","iterateJsdoc","context","jsdoc","settings","utils","mode","allowedInlineTags","enableFixer","fixType","options","description","getDescription","tagNames","indexes","unescapedInlineTagRegex","idx","descLine","startsWith","slice","split","entries","replaceAll","_","tagName","includes","push","reportJSDoc","line","setBlockDescription","info","seedTokens","descLines","map","desc","newDesc","RegExp","number","source","tokens","postDelimiter","trim","escapeInlineTags","regex","tag","tags","getTagDescription","some","exec","setTagDescription","iterateAllJsdocs","meta","docs","url","fixable","schema","additionalProperties","properties","items","type","enum","module"],"sources":["../../src/rules/escapeInlineTags.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc.js';\n\nexport default iterateJsdoc(({\n context,\n jsdoc,\n settings,\n utils,\n}) => {\n const {\n mode,\n } = settings;\n\n if (mode !== 'typescript') {\n return;\n }\n\n const {\n allowedInlineTags = [],\n enableFixer = false,\n fixType = 'backslash',\n } = context.options[0] || {};\n\n const {\n description,\n } = utils.getDescription();\n\n /** @type {string[]} */\n const tagNames = [];\n\n /** @type {number[]} */\n const indexes = [];\n\n const unescapedInlineTagRegex = /(?:^|\\s)@(\\w+)/gv;\n for (const [\n idx,\n descLine,\n ] of (\n description.startsWith('\\n') ? description.slice(1) : description\n ).split('\\n').entries()\n ) {\n descLine.replaceAll(unescapedInlineTagRegex, (_, tagName) => {\n if (allowedInlineTags.includes(tagName)) {\n return _;\n }\n\n tagNames.push(tagName);\n indexes.push(idx);\n\n return _;\n });\n }\n\n for (const [\n idx,\n tagName,\n ] of tagNames.entries()) {\n utils.reportJSDoc(\n `Unexpected inline JSDoc tag. Did you mean to use {@${tagName}}, \\\\@${tagName}, or \\`@${tagName}\\`?`,\n {\n line: indexes[idx] + 1,\n },\n enableFixer ?\n () => {\n utils.setBlockDescription((info, seedTokens, descLines) => {\n return descLines.map((desc) => {\n const newDesc = desc.replaceAll(\n new RegExp(`(^|\\\\s)@${\n // No need to escape, as contains only safe characters\n tagName\n }`, 'gv'),\n fixType === 'backticks' ? '$1`@' + tagName + '`' : '$1\\\\@' + tagName,\n );\n\n return {\n number: 0,\n source: '',\n tokens: seedTokens({\n ...info,\n description: newDesc,\n postDelimiter: newDesc.trim() ? ' ' : '',\n }),\n };\n });\n });\n } :\n null,\n );\n }\n\n /**\n * @param {string} tagName\n * @returns {[\n * RegExp,\n * (description: string) => string\n * ]}\n */\n const escapeInlineTags = (tagName) => {\n const regex = new RegExp(`(^|\\\\s)@${\n // No need to escape, as contains only safe characters\n tagName\n }`, 'gv');\n\n return [\n regex,\n /**\n * @param {string} desc\n */\n (desc) => {\n return desc.replaceAll(\n regex,\n fixType === 'backticks' ? '$1`@' + tagName + '`' : '$1\\\\@' + tagName,\n );\n },\n ];\n };\n\n for (const tag of jsdoc.tags) {\n if (tag.tag === 'example') {\n continue;\n }\n\n /** @type {string} */\n let tagName = '';\n while (/** @type {string[]} */ (\n utils.getTagDescription(tag, true)\n // eslint-disable-next-line no-loop-func -- Safe\n ).some((desc) => {\n tagName = unescapedInlineTagRegex.exec(desc)?.[1] ?? '';\n if (allowedInlineTags.includes(tagName)) {\n return false;\n }\n\n return tagName;\n })) {\n const line = utils.setTagDescription(tag, ...escapeInlineTags(tagName)) +\n tag.source[0].number;\n utils.reportJSDoc(\n `Unexpected inline JSDoc tag. Did you mean to use {@${tagName}}, \\\\@${tagName}, or \\`@${tagName}\\`?`,\n {\n line,\n },\n enableFixer ? () => {} : null,\n true,\n );\n }\n }\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Reports use of JSDoc tags in non-tag positions (in the default \"typescript\" mode).',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/escape-inline-tags.md#repos-sticky-header',\n },\n fixable: 'code',\n schema: [\n {\n additionalProperties: false,\n properties: {\n allowedInlineTags: {\n description: 'A listing of tags you wish to allow unescaped. Defaults to an empty array.',\n items: {\n type: 'string',\n },\n type: 'array',\n },\n enableFixer: {\n description: 'Whether to enable the fixer. Defaults to `false`.',\n type: 'boolean',\n },\n fixType: {\n description: `How to escape the inline tag.\n\nMay be \"backticks\" to enclose tags in backticks (treating as code segments), or\n\"backslash\" to escape tags with a backslash, i.e., \\`\\\\@\\`\n\nDefaults to \"backslash\".`,\n enum: [\n 'backticks',\n 'backslash',\n ],\n type: 'string',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,3 @@
1
+ declare const _default: import("eslint").Rule.RuleModule;
2
+ export default _default;
3
+ //# sourceMappingURL=escapeInlineTags.d.ts.map
@@ -129,8 +129,7 @@ The default \`aliases\` option is:
129
129
  {
130
130
  "a": ["an", "our"]
131
131
  }
132
- \`\`\`
133
- `,
132
+ \`\`\``,
134
133
  patternProperties: {
135
134
  '.*': {
136
135
  items: {
@@ -152,8 +151,7 @@ function computeTypes(node) {
152
151
  }
153
152
  \`\`\`
154
153
 
155
- No tags are excluded by default.
156
- `,
154
+ No tags are excluded by default.`,
157
155
  items: {
158
156
  type: 'string'
159
157
  },
@@ -173,8 +171,7 @@ The default \`uselessWords\` option is:
173
171
 
174
172
  \`\`\`json
175
173
  ["a", "an", "i", "in", "of", "s", "the"]
176
- \`\`\`
177
- `,
174
+ \`\`\``,
178
175
  items: {
179
176
  type: 'string'
180
177
  },
@@ -1 +1 @@
1
- {"version":3,"file":"informativeDocs.cjs","names":["_iterateJsdoc","_interopRequireDefault","require","_areDocsInformative","e","__esModule","default","defaultAliases","a","defaultUselessWords","getNamesFromNode","node","type","parent","key","id","declaration","name","declarations","init","filter","Boolean","_default","exports","iterateJsdoc","context","jsdoc","report","utils","aliases","excludedTags","uselessWords","options","nodeNames","descriptionIsRedundant","text","extraName","textTrimmed","trim","areDocsInformative","join","description","lastDescriptionLine","getDescription","descriptionReported","tag","tags","includes","reportJSDoc","line","iterateAllJsdocs","meta","docs","url","schema","additionalProperties","properties","patternProperties","items","module"],"sources":["../../src/rules/informativeDocs.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc.js';\nimport {\n areDocsInformative,\n} from 'are-docs-informative';\n\nconst defaultAliases = {\n a: [\n 'an', 'our',\n ],\n};\n\nconst defaultUselessWords = [\n 'a', 'an', 'i', 'in', 'of', 's', 'the',\n];\n\n/**\n * @param {import('eslint').Rule.Node|import('@typescript-eslint/types').TSESTree.Node|null|undefined} node\n * @returns {string[]}\n */\nconst getNamesFromNode = (node) => {\n switch (node?.type) {\n case 'AccessorProperty':\n case 'MethodDefinition':\n case 'PropertyDefinition':\n case 'TSAbstractAccessorProperty':\n case 'TSAbstractMethodDefinition':\n case 'TSAbstractPropertyDefinition':\n return [\n ...getNamesFromNode(\n /** @type {import('@typescript-eslint/types').TSESTree.Node} */ (\n node.parent\n ).parent,\n ),\n ...getNamesFromNode(\n /** @type {import('@typescript-eslint/types').TSESTree.Node} */\n (node.key),\n ),\n ];\n\n case 'ClassDeclaration':\n case 'ClassExpression':\n case 'FunctionDeclaration':\n case 'FunctionExpression':\n case 'TSDeclareFunction':\n case 'TSEnumDeclaration':\n case 'TSEnumMember':\n case 'TSInterfaceDeclaration':\n case 'TSMethodSignature':\n case 'TSModuleDeclaration':\n case 'TSTypeAliasDeclaration':\n return getNamesFromNode(\n /** @type {import('@typescript-eslint/types').TSESTree.ClassDeclaration} */\n (node).id,\n );\n case 'ExportDefaultDeclaration':\n case 'ExportNamedDeclaration':\n return getNamesFromNode(\n /** @type {import('@typescript-eslint/types').TSESTree.ExportNamedDeclaration} */\n (node).declaration,\n );\n case 'Identifier':\n return [\n node.name,\n ];\n case 'Property':\n return getNamesFromNode(\n /** @type {import('@typescript-eslint/types').TSESTree.Node} */\n (node.key),\n );\n case 'VariableDeclaration':\n return getNamesFromNode(\n /** @type {import('@typescript-eslint/types').TSESTree.Node} */\n (node.declarations[0]),\n );\n case 'VariableDeclarator':\n return [\n ...getNamesFromNode(\n /** @type {import('@typescript-eslint/types').TSESTree.Node} */\n (node.id),\n ),\n ...getNamesFromNode(\n /** @type {import('@typescript-eslint/types').TSESTree.Node} */\n (node.init),\n ),\n ].filter(Boolean);\n default:\n return [];\n }\n};\n\nexport default iterateJsdoc(({\n context,\n jsdoc,\n node,\n report,\n utils,\n}) => {\n const /** @type {{aliases: {[key: string]: string[]}, excludedTags: string[], uselessWords: string[]}} */ {\n aliases = defaultAliases,\n excludedTags = [],\n uselessWords = defaultUselessWords,\n } = context.options[0] || {};\n const nodeNames = getNamesFromNode(node);\n\n /**\n * @param {string} text\n * @param {string} extraName\n * @returns {boolean}\n */\n const descriptionIsRedundant = (text, extraName = '') => {\n const textTrimmed = text.trim();\n return Boolean(textTrimmed) && !areDocsInformative(textTrimmed, [\n extraName, nodeNames,\n ].filter(Boolean).join(' '), {\n aliases,\n uselessWords,\n });\n };\n\n const {\n description,\n lastDescriptionLine,\n } = utils.getDescription();\n let descriptionReported = false;\n\n for (const tag of jsdoc.tags) {\n if (excludedTags.includes(tag.tag)) {\n continue;\n }\n\n if (descriptionIsRedundant(tag.description, tag.name)) {\n utils.reportJSDoc(\n 'This tag description only repeats the name it describes.',\n tag,\n );\n }\n\n descriptionReported ||= tag.description === description &&\n /** @type {import('comment-parser').Spec & {line: import('../iterateJsdoc.js').Integer}} */\n (tag).line === lastDescriptionLine;\n }\n\n if (!descriptionReported && descriptionIsRedundant(description)) {\n report('This description only repeats the name it describes.');\n }\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description:\n 'This rule reports doc comments that only restate their attached name.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/informative-docs.md#repos-sticky-header',\n },\n schema: [\n {\n additionalProperties: false,\n properties: {\n aliases: {\n description: `The \\`aliases\\` option allows indicating words as synonyms (aliases) of each other.\n\nFor example, with \\`{ aliases: { emoji: [\"smiley\", \"winkey\"] } }\\`, the following comment would be considered uninformative:\n\n\\`\\`\\`js\n/** A smiley/winkey. */\nlet emoji;\n\\`\\`\\`\n\nThe default \\`aliases\\` option is:\n\n\\`\\`\\`json\n{\n \"a\": [\"an\", \"our\"]\n}\n\\`\\`\\`\n`,\n patternProperties: {\n '.*': {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n },\n },\n excludedTags: {\n description: `Tags that should not be checked for valid contents.\n\nFor example, with \\`{ excludedTags: [\"category\"] }\\`, the following comment would not be considered uninformative:\n\n\\`\\`\\`js\n/** @category Types */\nfunction computeTypes(node) {\n // ...\n}\n\\`\\`\\`\n\nNo tags are excluded by default.\n`,\n items: {\n type: 'string',\n },\n type: 'array',\n },\n uselessWords: {\n description: `Words that are ignored when searching for one that adds meaning.\n\nFor example, with \\`{ uselessWords: [\"our\"] }\\`, the following comment would be considered uninformative:\n\n\\`\\`\\`js\n/** Our text. */\nlet text;\n\\`\\`\\`\n\nThe default \\`uselessWords\\` option is:\n\n\\`\\`\\`json\n[\"a\", \"an\", \"i\", \"in\", \"of\", \"s\", \"the\"]\n\\`\\`\\`\n`,\n items: {\n type: 'string',\n },\n type: 'array',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"informativeDocs.cjs","names":["_iterateJsdoc","_interopRequireDefault","require","_areDocsInformative","e","__esModule","default","defaultAliases","a","defaultUselessWords","getNamesFromNode","node","type","parent","key","id","declaration","name","declarations","init","filter","Boolean","_default","exports","iterateJsdoc","context","jsdoc","report","utils","aliases","excludedTags","uselessWords","options","nodeNames","descriptionIsRedundant","text","extraName","textTrimmed","trim","areDocsInformative","join","description","lastDescriptionLine","getDescription","descriptionReported","tag","tags","includes","reportJSDoc","line","iterateAllJsdocs","meta","docs","url","schema","additionalProperties","properties","patternProperties","items","module"],"sources":["../../src/rules/informativeDocs.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc.js';\nimport {\n areDocsInformative,\n} from 'are-docs-informative';\n\nconst defaultAliases = {\n a: [\n 'an', 'our',\n ],\n};\n\nconst defaultUselessWords = [\n 'a', 'an', 'i', 'in', 'of', 's', 'the',\n];\n\n/**\n * @param {import('eslint').Rule.Node|import('@typescript-eslint/types').TSESTree.Node|null|undefined} node\n * @returns {string[]}\n */\nconst getNamesFromNode = (node) => {\n switch (node?.type) {\n case 'AccessorProperty':\n case 'MethodDefinition':\n case 'PropertyDefinition':\n case 'TSAbstractAccessorProperty':\n case 'TSAbstractMethodDefinition':\n case 'TSAbstractPropertyDefinition':\n return [\n ...getNamesFromNode(\n /** @type {import('@typescript-eslint/types').TSESTree.Node} */ (\n node.parent\n ).parent,\n ),\n ...getNamesFromNode(\n /** @type {import('@typescript-eslint/types').TSESTree.Node} */\n (node.key),\n ),\n ];\n\n case 'ClassDeclaration':\n case 'ClassExpression':\n case 'FunctionDeclaration':\n case 'FunctionExpression':\n case 'TSDeclareFunction':\n case 'TSEnumDeclaration':\n case 'TSEnumMember':\n case 'TSInterfaceDeclaration':\n case 'TSMethodSignature':\n case 'TSModuleDeclaration':\n case 'TSTypeAliasDeclaration':\n return getNamesFromNode(\n /** @type {import('@typescript-eslint/types').TSESTree.ClassDeclaration} */\n (node).id,\n );\n case 'ExportDefaultDeclaration':\n case 'ExportNamedDeclaration':\n return getNamesFromNode(\n /** @type {import('@typescript-eslint/types').TSESTree.ExportNamedDeclaration} */\n (node).declaration,\n );\n case 'Identifier':\n return [\n node.name,\n ];\n case 'Property':\n return getNamesFromNode(\n /** @type {import('@typescript-eslint/types').TSESTree.Node} */\n (node.key),\n );\n case 'VariableDeclaration':\n return getNamesFromNode(\n /** @type {import('@typescript-eslint/types').TSESTree.Node} */\n (node.declarations[0]),\n );\n case 'VariableDeclarator':\n return [\n ...getNamesFromNode(\n /** @type {import('@typescript-eslint/types').TSESTree.Node} */\n (node.id),\n ),\n ...getNamesFromNode(\n /** @type {import('@typescript-eslint/types').TSESTree.Node} */\n (node.init),\n ),\n ].filter(Boolean);\n default:\n return [];\n }\n};\n\nexport default iterateJsdoc(({\n context,\n jsdoc,\n node,\n report,\n utils,\n}) => {\n const /** @type {{aliases: {[key: string]: string[]}, excludedTags: string[], uselessWords: string[]}} */ {\n aliases = defaultAliases,\n excludedTags = [],\n uselessWords = defaultUselessWords,\n } = context.options[0] || {};\n const nodeNames = getNamesFromNode(node);\n\n /**\n * @param {string} text\n * @param {string} extraName\n * @returns {boolean}\n */\n const descriptionIsRedundant = (text, extraName = '') => {\n const textTrimmed = text.trim();\n return Boolean(textTrimmed) && !areDocsInformative(textTrimmed, [\n extraName, nodeNames,\n ].filter(Boolean).join(' '), {\n aliases,\n uselessWords,\n });\n };\n\n const {\n description,\n lastDescriptionLine,\n } = utils.getDescription();\n let descriptionReported = false;\n\n for (const tag of jsdoc.tags) {\n if (excludedTags.includes(tag.tag)) {\n continue;\n }\n\n if (descriptionIsRedundant(tag.description, tag.name)) {\n utils.reportJSDoc(\n 'This tag description only repeats the name it describes.',\n tag,\n );\n }\n\n descriptionReported ||= tag.description === description &&\n /** @type {import('comment-parser').Spec & {line: import('../iterateJsdoc.js').Integer}} */\n (tag).line === lastDescriptionLine;\n }\n\n if (!descriptionReported && descriptionIsRedundant(description)) {\n report('This description only repeats the name it describes.');\n }\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description:\n 'This rule reports doc comments that only restate their attached name.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/informative-docs.md#repos-sticky-header',\n },\n schema: [\n {\n additionalProperties: false,\n properties: {\n aliases: {\n description: `The \\`aliases\\` option allows indicating words as synonyms (aliases) of each other.\n\nFor example, with \\`{ aliases: { emoji: [\"smiley\", \"winkey\"] } }\\`, the following comment would be considered uninformative:\n\n\\`\\`\\`js\n/** A smiley/winkey. */\nlet emoji;\n\\`\\`\\`\n\nThe default \\`aliases\\` option is:\n\n\\`\\`\\`json\n{\n \"a\": [\"an\", \"our\"]\n}\n\\`\\`\\``,\n patternProperties: {\n '.*': {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n },\n },\n excludedTags: {\n description: `Tags that should not be checked for valid contents.\n\nFor example, with \\`{ excludedTags: [\"category\"] }\\`, the following comment would not be considered uninformative:\n\n\\`\\`\\`js\n/** @category Types */\nfunction computeTypes(node) {\n // ...\n}\n\\`\\`\\`\n\nNo tags are excluded by default.`,\n items: {\n type: 'string',\n },\n type: 'array',\n },\n uselessWords: {\n description: `Words that are ignored when searching for one that adds meaning.\n\nFor example, with \\`{ uselessWords: [\"our\"] }\\`, the following comment would be considered uninformative:\n\n\\`\\`\\`js\n/** Our text. */\nlet text;\n\\`\\`\\`\n\nThe default \\`uselessWords\\` option is:\n\n\\`\\`\\`json\n[\"a\", \"an\", \"i\", \"in\", \"of\", \"s\", \"the\"]\n\\`\\`\\``,\n items: {\n type: 'string',\n },\n type: 'array',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"mappings":"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","ignoreList":[]}
@@ -84,15 +84,13 @@ var _default = exports.default = (0, _iterateJsdoc.default)(({
84
84
  properties: {
85
85
  checkBlockStarts: {
86
86
  description: `Whether to additionally check the start of blocks, such as classes or functions.
87
- Defaults to \`false\`.
88
- `,
87
+ Defaults to \`false\`.`,
89
88
  type: 'boolean'
90
89
  },
91
90
  excludedTags: {
92
91
  description: `An array of tags whose presence in the JSDoc block will prevent the
93
92
  application of the rule. Defaults to \`['type']\` (i.e., if \`@type\` is present,
94
- lines before the block will not be added).
95
- `,
93
+ lines before the block will not be added).`,
96
94
  items: {
97
95
  type: 'string'
98
96
  },
@@ -100,14 +98,12 @@ lines before the block will not be added).
100
98
  },
101
99
  ignoreSameLine: {
102
100
  description: `This option excludes cases where the JSDoc block occurs on the same line as a
103
- preceding code or comment. Defaults to \`true\`.
104
- `,
101
+ preceding code or comment. Defaults to \`true\`.`,
105
102
  type: 'boolean'
106
103
  },
107
104
  ignoreSingleLines: {
108
105
  description: `This option excludes cases where the JSDoc block is only one line long.
109
- Defaults to \`true\`.
110
- `,
106
+ Defaults to \`true\`.`,
111
107
  type: 'boolean'
112
108
  },
113
109
  lines: {
@@ -1 +1 @@
1
- {"version":3,"file":"linesBeforeBlock.cjs","names":["_iterateJsdoc","_interopRequireDefault","require","e","__esModule","default","startPunctuators","Set","_default","exports","iterateJsdoc","context","jsdocNode","report","sourceCode","utils","checkBlockStarts","excludedTags","ignoreSameLine","ignoreSingleLines","lines","options","hasATag","tokensBefore","getTokensBefore","includeComments","tokenBefore","at","type","has","value","loc","end","line","start","startLine","sameLine","fix","fixer","indent","spaceDiff","column","match","slice","tokenPrior","startColumn","pop","repeat","insertTextAfter","iterateAllJsdocs","meta","docs","description","url","fixable","schema","additionalProperties","properties","items","module"],"sources":["../../src/rules/linesBeforeBlock.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc.js';\n\n/**\n * Punctuators that begin a logical group should not require a line before it skipped. Specifically\n * `[` starts an array, `{` starts an object or block, `(` starts a grouping, and `=` starts a\n * declaration (like a variable or a type alias).\n */\nconst startPunctuators = new Set([\n '(', '=', '[', '{',\n]);\n\nexport default iterateJsdoc(({\n context,\n jsdocNode,\n report,\n sourceCode,\n utils,\n}) => {\n const {\n checkBlockStarts,\n excludedTags = [\n 'type',\n ],\n ignoreSameLine = true,\n ignoreSingleLines = true,\n lines = 1,\n } = context.options[0] || {};\n\n if (utils.hasATag(excludedTags)) {\n return;\n }\n\n const tokensBefore = sourceCode.getTokensBefore(jsdocNode, {\n includeComments: true,\n });\n const tokenBefore = tokensBefore.at(-1);\n if (\n !tokenBefore || (\n tokenBefore.type === 'Punctuator' &&\n !checkBlockStarts &&\n startPunctuators.has(tokenBefore.value)\n )\n ) {\n return;\n }\n\n if (tokenBefore.loc?.end?.line + lines >=\n /** @type {number} */\n (jsdocNode.loc?.start?.line)\n ) {\n const startLine = jsdocNode.loc?.start?.line;\n const sameLine = tokenBefore.loc?.end?.line === startLine;\n\n if (sameLine && ignoreSameLine) {\n return;\n }\n\n if (ignoreSingleLines && jsdocNode.loc?.start.line === jsdocNode.loc?.end.line) {\n return;\n }\n\n /** @type {import('eslint').Rule.ReportFixer} */\n const fix = (fixer) => {\n let indent = '';\n if (sameLine) {\n const spaceDiff = /** @type {number} */ (jsdocNode.loc?.start?.column) -\n /** @type {number} */ (tokenBefore.loc?.end?.column);\n // @ts-expect-error Should be a comment\n indent = /** @type {import('estree').Comment} */ (\n jsdocNode\n ).value.match(/^\\*\\n([\\t ]*) \\*/v)?.[1]?.slice(spaceDiff);\n if (!indent) {\n /** @type {import('eslint').AST.Token|import('estree').Comment|undefined} */\n let tokenPrior = tokenBefore;\n let startColumn;\n while (tokenPrior && tokenPrior?.loc?.start?.line === startLine) {\n startColumn = tokenPrior.loc?.start?.column;\n tokenPrior = tokensBefore.pop();\n }\n\n indent = ' '.repeat(\n /* c8 ignore next */\n /** @type {number} */ (startColumn ? startColumn - 1 : 0),\n );\n }\n }\n\n return fixer.insertTextAfter(\n /** @type {import('eslint').AST.Token} */\n (tokenBefore),\n '\\n'.repeat(lines) +\n (sameLine ? '\\n' + indent : ''),\n );\n };\n\n report(`Required ${lines} line(s) before JSDoc block`, fix);\n }\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Enforces minimum number of newlines before JSDoc comment blocks',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/lines-before-block.md#repos-sticky-header',\n },\n fixable: 'code',\n schema: [\n {\n additionalProperties: false,\n properties: {\n checkBlockStarts: {\n description: `Whether to additionally check the start of blocks, such as classes or functions.\nDefaults to \\`false\\`.\n`,\n type: 'boolean',\n },\n excludedTags: {\n description: `An array of tags whose presence in the JSDoc block will prevent the\napplication of the rule. Defaults to \\`['type']\\` (i.e., if \\`@type\\` is present,\nlines before the block will not be added).\n`,\n items: {\n type: 'string',\n },\n type: 'array',\n },\n ignoreSameLine: {\n description: `This option excludes cases where the JSDoc block occurs on the same line as a\npreceding code or comment. Defaults to \\`true\\`.\n`,\n type: 'boolean',\n },\n ignoreSingleLines: {\n description: `This option excludes cases where the JSDoc block is only one line long.\nDefaults to \\`true\\`.\n`,\n type: 'boolean',\n },\n lines: {\n description: 'The minimum number of lines to require. Defaults to 1.',\n type: 'integer',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"linesBeforeBlock.cjs","names":["_iterateJsdoc","_interopRequireDefault","require","e","__esModule","default","startPunctuators","Set","_default","exports","iterateJsdoc","context","jsdocNode","report","sourceCode","utils","checkBlockStarts","excludedTags","ignoreSameLine","ignoreSingleLines","lines","options","hasATag","tokensBefore","getTokensBefore","includeComments","tokenBefore","at","type","has","value","loc","end","line","start","startLine","sameLine","fix","fixer","indent","spaceDiff","column","match","slice","tokenPrior","startColumn","pop","repeat","insertTextAfter","iterateAllJsdocs","meta","docs","description","url","fixable","schema","additionalProperties","properties","items","module"],"sources":["../../src/rules/linesBeforeBlock.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc.js';\n\n/**\n * Punctuators that begin a logical group should not require a line before it skipped. Specifically\n * `[` starts an array, `{` starts an object or block, `(` starts a grouping, and `=` starts a\n * declaration (like a variable or a type alias).\n */\nconst startPunctuators = new Set([\n '(', '=', '[', '{',\n]);\n\nexport default iterateJsdoc(({\n context,\n jsdocNode,\n report,\n sourceCode,\n utils,\n}) => {\n const {\n checkBlockStarts,\n excludedTags = [\n 'type',\n ],\n ignoreSameLine = true,\n ignoreSingleLines = true,\n lines = 1,\n } = context.options[0] || {};\n\n if (utils.hasATag(excludedTags)) {\n return;\n }\n\n const tokensBefore = sourceCode.getTokensBefore(jsdocNode, {\n includeComments: true,\n });\n const tokenBefore = tokensBefore.at(-1);\n if (\n !tokenBefore || (\n tokenBefore.type === 'Punctuator' &&\n !checkBlockStarts &&\n startPunctuators.has(tokenBefore.value)\n )\n ) {\n return;\n }\n\n if (tokenBefore.loc?.end?.line + lines >=\n /** @type {number} */\n (jsdocNode.loc?.start?.line)\n ) {\n const startLine = jsdocNode.loc?.start?.line;\n const sameLine = tokenBefore.loc?.end?.line === startLine;\n\n if (sameLine && ignoreSameLine) {\n return;\n }\n\n if (ignoreSingleLines && jsdocNode.loc?.start.line === jsdocNode.loc?.end.line) {\n return;\n }\n\n /** @type {import('eslint').Rule.ReportFixer} */\n const fix = (fixer) => {\n let indent = '';\n if (sameLine) {\n const spaceDiff = /** @type {number} */ (jsdocNode.loc?.start?.column) -\n /** @type {number} */ (tokenBefore.loc?.end?.column);\n // @ts-expect-error Should be a comment\n indent = /** @type {import('estree').Comment} */ (\n jsdocNode\n ).value.match(/^\\*\\n([\\t ]*) \\*/v)?.[1]?.slice(spaceDiff);\n if (!indent) {\n /** @type {import('eslint').AST.Token|import('estree').Comment|undefined} */\n let tokenPrior = tokenBefore;\n let startColumn;\n while (tokenPrior && tokenPrior?.loc?.start?.line === startLine) {\n startColumn = tokenPrior.loc?.start?.column;\n tokenPrior = tokensBefore.pop();\n }\n\n indent = ' '.repeat(\n /* c8 ignore next */\n /** @type {number} */ (startColumn ? startColumn - 1 : 0),\n );\n }\n }\n\n return fixer.insertTextAfter(\n /** @type {import('eslint').AST.Token} */\n (tokenBefore),\n '\\n'.repeat(lines) +\n (sameLine ? '\\n' + indent : ''),\n );\n };\n\n report(`Required ${lines} line(s) before JSDoc block`, fix);\n }\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Enforces minimum number of newlines before JSDoc comment blocks',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/lines-before-block.md#repos-sticky-header',\n },\n fixable: 'code',\n schema: [\n {\n additionalProperties: false,\n properties: {\n checkBlockStarts: {\n description: `Whether to additionally check the start of blocks, such as classes or functions.\nDefaults to \\`false\\`.`,\n type: 'boolean',\n },\n excludedTags: {\n description: `An array of tags whose presence in the JSDoc block will prevent the\napplication of the rule. Defaults to \\`['type']\\` (i.e., if \\`@type\\` is present,\nlines before the block will not be added).`,\n items: {\n type: 'string',\n },\n type: 'array',\n },\n ignoreSameLine: {\n description: `This option excludes cases where the JSDoc block occurs on the same line as a\npreceding code or comment. Defaults to \\`true\\`.`,\n type: 'boolean',\n },\n ignoreSingleLines: {\n description: `This option excludes cases where the JSDoc block is only one line long.\nDefaults to \\`true\\`.`,\n type: 'boolean',\n },\n lines: {\n description: 'The minimum number of lines to require. Defaults to 1.',\n type: 'integer',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"mappings":"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","ignoreList":[]}
@@ -147,8 +147,7 @@ Overrides the default contexts (\`ArrowFunctionExpression\`, \`FunctionDeclarati
147
147
  JSDoc block throughout your files.
148
148
 
149
149
  See the ["AST and Selectors"](../#advanced-ast-and-selectors)
150
- section of our Advanced docs for more on the expected format.
151
- `,
150
+ section of our Advanced docs for more on the expected format.`,
152
151
  items: {
153
152
  anyOf: [{
154
153
  type: 'string'
@@ -255,8 +254,7 @@ literal, e.g., \`/[A-Z].*\\./vi\`.
255
254
  \`\`\`
256
255
 
257
256
  This can be overridden per tag or for the main block description by setting
258
- \`message\` within \`tags\` or \`mainDescription\`, respectively.
259
- `,
257
+ \`message\` within \`tags\` or \`mainDescription\`, respectively.`,
260
258
  type: 'string'
261
259
  },
262
260
  nonemptyTags: {