eslint-plugin-jsdoc 58.1.1 → 59.0.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.
- package/README.md +66 -62
- package/dist/buildForbidRuleDefinition.cjs +0 -1
- package/dist/buildForbidRuleDefinition.cjs.map +1 -1
- package/dist/buildRejectOrPreferRuleDefinition.cjs +7 -2
- package/dist/buildRejectOrPreferRuleDefinition.cjs.map +1 -1
- package/dist/cjs/rules/convertToJsdocComments.d.ts +7 -0
- package/dist/generateDocs.cjs +129 -3
- package/dist/generateDocs.cjs.map +1 -1
- package/dist/generateRule.cjs +3 -1
- package/dist/generateRule.cjs.map +1 -1
- package/dist/generateRuleTypes.cjs +5 -5
- package/dist/generateRuleTypes.cjs.map +1 -1
- package/dist/index-cjs.cjs +30 -0
- package/dist/index-cjs.cjs.map +1 -1
- package/dist/index.cjs +30 -0
- package/dist/index.cjs.map +1 -1
- package/dist/rules/checkAccess.cjs +1 -1
- package/dist/rules/checkAccess.cjs.map +1 -1
- package/dist/rules/checkAlignment.cjs +4 -1
- package/dist/rules/checkAlignment.cjs.map +1 -1
- package/dist/rules/checkExamples.cjs +1 -1
- package/dist/rules/checkExamples.cjs.map +1 -1
- package/dist/rules/checkIndentation.cjs +19 -0
- package/dist/rules/checkIndentation.cjs.map +1 -1
- package/dist/rules/checkLineAlignment.cjs +25 -1
- package/dist/rules/checkLineAlignment.cjs.map +1 -1
- package/dist/rules/checkParamNames.cjs +62 -1
- package/dist/rules/checkParamNames.cjs.map +1 -1
- package/dist/rules/checkPropertyNames.cjs +6 -0
- package/dist/rules/checkPropertyNames.cjs.map +1 -1
- package/dist/rules/checkTagNames.cjs +71 -0
- package/dist/rules/checkTagNames.cjs.map +1 -1
- package/dist/rules/checkTypes.cjs +16 -1
- package/dist/rules/checkTypes.cjs.map +1 -1
- package/dist/rules/checkValues.cjs +17 -1
- package/dist/rules/checkValues.cjs.map +1 -1
- package/dist/rules/convertToJsdocComments.cjs +48 -0
- package/dist/rules/convertToJsdocComments.cjs.map +1 -1
- package/dist/rules/convertToJsdocComments.d.ts +7 -0
- package/dist/rules/emptyTags.cjs +10 -1
- package/dist/rules/emptyTags.cjs.map +1 -1
- package/dist/rules/implementsOnClasses.cjs +15 -1
- package/dist/rules/implementsOnClasses.cjs.map +1 -1
- package/dist/rules/informativeDocs.cjs +45 -0
- package/dist/rules/informativeDocs.cjs.map +1 -1
- package/dist/rules/linesBeforeBlock.cjs +14 -0
- package/dist/rules/linesBeforeBlock.cjs.map +1 -1
- package/dist/rules/matchDescription.cjs +129 -0
- package/dist/rules/matchDescription.cjs.map +1 -1
- package/dist/rules/matchName.cjs +30 -0
- package/dist/rules/matchName.cjs.map +1 -1
- package/dist/rules/multilineBlocks.cjs +78 -6
- package/dist/rules/multilineBlocks.cjs.map +1 -1
- package/dist/rules/noBadBlocks.cjs +11 -2
- package/dist/rules/noBadBlocks.cjs.map +1 -1
- package/dist/rules/noBlankBlockDescriptions.cjs +1 -1
- package/dist/rules/noBlankBlockDescriptions.cjs.map +1 -1
- package/dist/rules/noBlankBlocks.cjs +3 -1
- package/dist/rules/noBlankBlocks.cjs.map +1 -1
- package/dist/rules/noDefaults.cjs +19 -0
- package/dist/rules/noDefaults.cjs.map +1 -1
- package/dist/rules/noMissingSyntax.cjs +22 -2
- package/dist/rules/noMissingSyntax.cjs.map +1 -1
- package/dist/rules/noMultiAsterisks.cjs +29 -0
- package/dist/rules/noMultiAsterisks.cjs.map +1 -1
- package/dist/rules/noRestrictedSyntax.cjs +17 -1
- package/dist/rules/noRestrictedSyntax.cjs.map +1 -1
- package/dist/rules/noTypes.cjs +17 -1
- package/dist/rules/noTypes.cjs.map +1 -1
- package/dist/rules/noUndefinedTypes.cjs +11 -1
- package/dist/rules/noUndefinedTypes.cjs.map +1 -1
- package/dist/rules/requireAsteriskPrefix.cjs +28 -0
- package/dist/rules/requireAsteriskPrefix.cjs.map +1 -1
- package/dist/rules/requireDescription.cjs +30 -1
- package/dist/rules/requireDescription.cjs.map +1 -1
- package/dist/rules/requireDescriptionCompleteSentence.cjs +27 -0
- package/dist/rules/requireDescriptionCompleteSentence.cjs.map +1 -1
- package/dist/rules/requireExample.cjs +26 -1
- package/dist/rules/requireExample.cjs.map +1 -1
- package/dist/rules/requireFileOverview.cjs +61 -0
- package/dist/rules/requireFileOverview.cjs.map +1 -1
- package/dist/rules/requireHyphenBeforeParamDescription.cjs +20 -2
- package/dist/rules/requireHyphenBeforeParamDescription.cjs.map +1 -1
- package/dist/rules/requireJsdoc.cjs +82 -3
- package/dist/rules/requireJsdoc.cjs.map +1 -1
- package/dist/rules/requireParam.cjs +213 -1
- package/dist/rules/requireParam.cjs.map +1 -1
- package/dist/rules/requireParamDescription.cjs +21 -0
- package/dist/rules/requireParamDescription.cjs.map +1 -1
- package/dist/rules/requireParamName.cjs +16 -1
- package/dist/rules/requireParamName.cjs.map +1 -1
- package/dist/rules/requireParamType.cjs +21 -1
- package/dist/rules/requireParamType.cjs.map +1 -1
- package/dist/rules/requirePropertyName.cjs +1 -1
- package/dist/rules/requirePropertyName.cjs.map +1 -1
- package/dist/rules/requirePropertyType.cjs +1 -1
- package/dist/rules/requirePropertyType.cjs.map +1 -1
- package/dist/rules/requireReturns.cjs +54 -1
- package/dist/rules/requireReturns.cjs.map +1 -1
- package/dist/rules/requireReturnsCheck.cjs +22 -1
- package/dist/rules/requireReturnsCheck.cjs.map +1 -1
- package/dist/rules/requireReturnsDescription.cjs +15 -1
- package/dist/rules/requireReturnsDescription.cjs.map +1 -1
- package/dist/rules/requireReturnsType.cjs +15 -1
- package/dist/rules/requireReturnsType.cjs.map +1 -1
- package/dist/rules/requireTemplate.cjs +17 -1
- package/dist/rules/requireTemplate.cjs.map +1 -1
- package/dist/rules/requireThrows.cjs +18 -1
- package/dist/rules/requireThrows.cjs.map +1 -1
- package/dist/rules/requireYields.cjs +50 -1
- package/dist/rules/requireYields.cjs.map +1 -1
- package/dist/rules/requireYieldsCheck.cjs +25 -7
- package/dist/rules/requireYieldsCheck.cjs.map +1 -1
- package/dist/rules/sortTags.cjs +200 -1
- package/dist/rules/sortTags.cjs.map +1 -1
- package/dist/rules/tagLines.cjs +32 -2
- package/dist/rules/tagLines.cjs.map +1 -1
- package/dist/rules/textEscaping.cjs +5 -1
- package/dist/rules/textEscaping.cjs.map +1 -1
- package/dist/rules/typeFormatting.cjs +47 -10
- package/dist/rules/typeFormatting.cjs.map +1 -1
- package/dist/rules/validTypes.cjs +8 -1
- package/dist/rules/validTypes.cjs.map +1 -1
- package/dist/rules.d.ts +2130 -32
- package/package.json +1 -1
- package/src/buildForbidRuleDefinition.js +0 -1
- package/src/buildRejectOrPreferRuleDefinition.js +12 -2
- package/src/index-cjs.js +36 -0
- package/src/index.js +36 -0
- package/src/rules/checkAccess.js +1 -1
- package/src/rules/checkAlignment.js +3 -0
- package/src/rules/checkExamples.js +1 -1
- package/src/rules/checkIndentation.js +19 -0
- package/src/rules/checkLineAlignment.js +24 -0
- package/src/rules/checkParamNames.js +62 -1
- package/src/rules/checkPropertyNames.js +6 -0
- package/src/rules/checkTagNames.js +71 -0
- package/src/rules/checkTypes.js +16 -1
- package/src/rules/checkValues.js +16 -0
- package/src/rules/convertToJsdocComments.js +48 -0
- package/src/rules/emptyTags.js +10 -1
- package/src/rules/implementsOnClasses.js +15 -1
- package/src/rules/informativeDocs.js +45 -0
- package/src/rules/linesBeforeBlock.js +14 -0
- package/src/rules/matchDescription.js +129 -0
- package/src/rules/matchName.js +30 -0
- package/src/rules/multilineBlocks.js +77 -5
- package/src/rules/noBadBlocks.js +11 -2
- package/src/rules/noBlankBlockDescriptions.js +1 -1
- package/src/rules/noBlankBlocks.js +2 -0
- package/src/rules/noDefaults.js +19 -0
- package/src/rules/noMissingSyntax.js +22 -2
- package/src/rules/noMultiAsterisks.js +29 -0
- package/src/rules/noRestrictedSyntax.js +17 -1
- package/src/rules/noTypes.js +17 -1
- package/src/rules/noUndefinedTypes.js +11 -1
- package/src/rules/requireAsteriskPrefix.js +28 -0
- package/src/rules/requireDescription.js +30 -1
- package/src/rules/requireDescriptionCompleteSentence.js +27 -0
- package/src/rules/requireExample.js +26 -1
- package/src/rules/requireFileOverview.js +61 -0
- package/src/rules/requireHyphenBeforeParamDescription.js +19 -1
- package/src/rules/requireJsdoc.js +80 -1
- package/src/rules/requireParam.js +213 -1
- package/src/rules/requireParamDescription.js +21 -0
- package/src/rules/requireParamName.js +16 -1
- package/src/rules/requireParamType.js +21 -1
- package/src/rules/requirePropertyName.js +1 -1
- package/src/rules/requirePropertyType.js +1 -1
- package/src/rules/requireReturns.js +54 -1
- package/src/rules/requireReturnsCheck.js +22 -1
- package/src/rules/requireReturnsDescription.js +15 -1
- package/src/rules/requireReturnsType.js +15 -1
- package/src/rules/requireTemplate.js +17 -1
- package/src/rules/requireThrows.js +18 -1
- package/src/rules/requireYields.js +50 -1
- package/src/rules/requireYieldsCheck.js +25 -7
- package/src/rules/sortTags.js +200 -1
- package/src/rules/tagLines.js +30 -0
- package/src/rules/textEscaping.js +5 -1
- package/src/rules/typeFormatting.js +44 -7
- package/src/rules/validTypes.js +8 -1
- package/src/rules.d.ts +2130 -32
- package/typings/gitdown.d.ts +4 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sortTags.cjs","names":["_defaultTagOrder","_interopRequireDefault","require","_iterateJsdoc","e","__esModule","default","_default","exports","iterateJsdoc","context","jsdoc","utils","alphabetizeExtras","linesBetween","reportIntraTagGroupSpacing","reportTagGroupSpacing","tagSequence","defaultTagOrder","options","tagList","flatMap","obj","tags","otherPos","indexOf","endPos","length","ongoingCount","idx","tag","entries","originalIndex","source","originalLine","firstChangedTagLine","firstChangedTagIndex","sortedTags","JSON","parse","stringify","sort","tagNew","tagOld","checkOrSetFirstChanged","newPos","oldPos","preferredNewPos","preferredOldPos","undefined","lastTagsOfGroup","badLastTagsOfGroup","countTagEmptyLines","reduce","acc","tokens","description","end","name","tg","type","empty","Number","innerIdx","currentTag","lastTag","includes","some","tgs","push","ct","fixer","currIdx","newIdx","emptyLine","number","seedTokens","delimiter","start","existingEmptyLines","nextTokens","lineDiff","lines","Array","from","splice","srcIdx","src","reportJSDoc","tagIdx","foundFirstTag","nextIdx","ignore","lastTagOfGroup","firstLine","getFirstLine","fix","itemsToMoveRange","keys","unchangedPriorTagDescriptions","slice","initialOffset","removeTag","changedTags","extraTagCount","changedTag","addTag","addLine","join","iterateAllJsdocs","meta","docs","url","fixable","schema","additionalProperties","properties","items","module"],"sources":["../../src/rules/sortTags.js"],"sourcesContent":["import defaultTagOrder from '../defaultTagOrder.js';\nimport iterateJsdoc from '../iterateJsdoc.js';\n\nexport default iterateJsdoc(({\n context,\n jsdoc,\n utils,\n}) => {\n const\n /**\n * @type {{\n * linesBetween: import('../iterateJsdoc.js').Integer,\n * tagSequence: {\n * tags: string[]\n * }[],\n * alphabetizeExtras: boolean,\n * reportTagGroupSpacing: boolean,\n * reportIntraTagGroupSpacing: boolean,\n * }}\n */ {\n alphabetizeExtras = false,\n linesBetween = 1,\n reportIntraTagGroupSpacing = true,\n reportTagGroupSpacing = true,\n tagSequence = defaultTagOrder,\n } = context.options[0] || {};\n\n const tagList = tagSequence.flatMap((obj) => {\n /* typeof obj === 'string' ? obj : */\n return obj.tags;\n });\n\n const otherPos = tagList.indexOf('-other');\n const endPos = otherPos > -1 ? otherPos : tagList.length;\n\n let ongoingCount = 0;\n for (const [\n idx,\n tag,\n ] of\n /**\n * @type {(\n * import('@es-joy/jsdoccomment').JsdocTagWithInline & {\n * originalIndex: import('../iterateJsdoc.js').Integer,\n * originalLine: import('../iterateJsdoc.js').Integer,\n * }\n * )[]}\n */ (jsdoc.tags).entries()) {\n tag.originalIndex = idx;\n ongoingCount += tag.source.length;\n tag.originalLine = ongoingCount;\n }\n\n /** @type {import('../iterateJsdoc.js').Integer|undefined} */\n let firstChangedTagLine;\n /** @type {import('../iterateJsdoc.js').Integer|undefined} */\n let firstChangedTagIndex;\n\n /**\n * @type {(import('comment-parser').Spec & {\n * originalIndex: import('../iterateJsdoc.js').Integer,\n * originalLine: import('../iterateJsdoc.js').Integer,\n * })[]}\n */\n const sortedTags = JSON.parse(JSON.stringify(jsdoc.tags));\n sortedTags.sort(({\n tag: tagNew,\n }, {\n originalIndex,\n originalLine,\n tag: tagOld,\n }) => {\n // Optimize: Just keep relative positions if the same tag name\n if (tagNew === tagOld) {\n return 0;\n }\n\n const checkOrSetFirstChanged = () => {\n if (!firstChangedTagLine || originalLine < firstChangedTagLine) {\n firstChangedTagLine = originalLine;\n firstChangedTagIndex = originalIndex;\n }\n };\n\n const newPos = tagList.indexOf(tagNew);\n const oldPos = tagList.indexOf(tagOld);\n\n const preferredNewPos = newPos === -1 ? endPos : newPos;\n const preferredOldPos = oldPos === -1 ? endPos : oldPos;\n\n if (preferredNewPos < preferredOldPos) {\n checkOrSetFirstChanged();\n return -1;\n }\n\n if (preferredNewPos > preferredOldPos) {\n return 1;\n }\n\n // preferredNewPos === preferredOldPos\n if (\n !alphabetizeExtras ||\n\n // Optimize: If tagNew (or tagOld which is the same) was found in the\n // priority array, it can maintain its relative position—without need\n // of alphabetizing (secondary sorting)\n newPos >= 0\n ) {\n return 0;\n }\n\n if (tagNew < tagOld) {\n checkOrSetFirstChanged();\n return -1;\n }\n\n // tagNew > tagOld\n return 1;\n });\n\n if (firstChangedTagLine === undefined) {\n // Should be ordered by now\n\n /**\n * @type {import('comment-parser').Spec[]}\n */\n const lastTagsOfGroup = [];\n\n /**\n * @type {[\n * import('comment-parser').Spec,\n * import('../iterateJsdoc.js').Integer\n * ][]}\n */\n const badLastTagsOfGroup = [];\n\n /**\n * @param {import('comment-parser').Spec} tag\n */\n const countTagEmptyLines = (tag) => {\n return tag.source.reduce((acc, {\n tokens: {\n description,\n end,\n name,\n tag: tg,\n type,\n },\n }) => {\n const empty = !tg && !type && !name && !description;\n // Reset the count so long as there is content\n return empty ? acc + Number(empty && !end) : 0;\n }, 0);\n };\n\n let idx = 0;\n for (const {\n tags,\n } of tagSequence) {\n let innerIdx;\n /** @type {import('comment-parser').Spec} */\n let currentTag;\n /** @type {import('comment-parser').Spec|undefined} */\n let lastTag;\n do {\n currentTag = jsdoc.tags[idx];\n if (!currentTag) {\n idx++;\n break;\n }\n\n innerIdx = tags.indexOf(currentTag.tag);\n\n if (\n innerIdx === -1 &&\n // eslint-disable-next-line no-loop-func -- Safe\n (!tags.includes('-other') || tagSequence.some(({\n tags: tgs,\n }) => {\n return tgs.includes(currentTag.tag);\n }))\n ) {\n idx++;\n break;\n }\n\n lastTag = currentTag;\n\n idx++;\n } while (true);\n\n idx--;\n\n if (lastTag) {\n lastTagsOfGroup.push(lastTag);\n const ct = countTagEmptyLines(lastTag);\n if (\n ct !== linesBetween &&\n // Use another rule for adding to end (should be of interest outside this rule)\n jsdoc.tags[idx]\n ) {\n badLastTagsOfGroup.push([\n lastTag, ct,\n ]);\n }\n }\n }\n\n if (reportTagGroupSpacing && badLastTagsOfGroup.length) {\n /**\n * @param {import('comment-parser').Spec} tg\n * @returns {() => void}\n */\n const fixer = (tg) => {\n return () => {\n // Due to https://github.com/syavorsky/comment-parser/issues/110 ,\n // we have to modify `jsdoc.source` rather than just modify tags\n // directly\n for (const [\n currIdx,\n {\n tokens,\n },\n ] of jsdoc.source.entries()) {\n if (tokens.tag !== '@' + tg.tag) {\n continue;\n }\n\n // Cannot be `tokens.end`, as dropped off last tag, so safe to\n // go on\n let newIdx = currIdx;\n\n const emptyLine = () => {\n return {\n number: 0,\n source: '',\n tokens: utils.seedTokens({\n delimiter: '*',\n start: jsdoc.source[newIdx - 1].tokens.start,\n }),\n };\n };\n\n let existingEmptyLines = 0;\n while (true) {\n const nextTokens = jsdoc.source[++newIdx]?.tokens;\n\n /* c8 ignore next 3 -- Guard */\n if (!nextTokens) {\n return;\n }\n\n // Should be no `nextTokens.end` to worry about since ignored\n // if not followed by tag\n\n if (nextTokens.tag) {\n // Haven't made it to last tag instance yet, so keep looking\n if (nextTokens.tag === tokens.tag) {\n existingEmptyLines = 0;\n continue;\n }\n\n const lineDiff = linesBetween - existingEmptyLines;\n if (lineDiff > 0) {\n const lines = Array.from({\n length: lineDiff,\n }, () => {\n return emptyLine();\n });\n jsdoc.source.splice(newIdx, 0, ...lines);\n } else {\n // lineDiff < 0\n jsdoc.source.splice(\n newIdx + lineDiff,\n -lineDiff,\n );\n }\n\n break;\n }\n\n const empty = !nextTokens.type && !nextTokens.name &&\n !nextTokens.description;\n\n if (empty) {\n existingEmptyLines++;\n } else {\n // Has content again, so reset empty line count\n existingEmptyLines = 0;\n }\n }\n\n break;\n }\n\n for (const [\n srcIdx,\n src,\n ] of jsdoc.source.entries()) {\n src.number = srcIdx;\n }\n };\n };\n\n for (const [\n tg,\n ] of badLastTagsOfGroup) {\n utils.reportJSDoc(\n 'Tag groups do not have the expected whitespace',\n tg,\n fixer(tg),\n );\n }\n\n return;\n }\n\n if (!reportIntraTagGroupSpacing) {\n return;\n }\n\n for (const [\n tagIdx,\n tag,\n ] of jsdoc.tags.entries()) {\n if (!jsdoc.tags[tagIdx + 1] || lastTagsOfGroup.includes(tag)) {\n continue;\n }\n\n const ct = countTagEmptyLines(tag);\n if (ct) {\n const fixer = () => {\n let foundFirstTag = false;\n\n /** @type {string|undefined} */\n let currentTag;\n\n for (const [\n currIdx,\n {\n tokens: {\n description,\n end,\n name,\n tag: tg,\n type,\n },\n },\n ] of jsdoc.source.entries()) {\n if (tg) {\n foundFirstTag = true;\n currentTag = tg;\n }\n\n if (!foundFirstTag) {\n continue;\n }\n\n if (currentTag && !tg && !type && !name && !description && !end) {\n let nextIdx = currIdx;\n\n let ignore = true;\n // Even if a tag of the same name as the last tags in a group,\n // could still be an earlier tag in that group\n\n // eslint-disable-next-line no-loop-func -- Safe\n if (lastTagsOfGroup.some((lastTagOfGroup) => {\n return currentTag === '@' + lastTagOfGroup.tag;\n })) {\n while (true) {\n const nextTokens = jsdoc.source[++nextIdx]?.tokens;\n if (!nextTokens) {\n break;\n }\n\n if (!nextTokens.tag) {\n continue;\n }\n\n // Followed by the same tag name, so not actually last in group,\n // and of interest\n if (nextTokens.tag === currentTag) {\n ignore = false;\n }\n }\n } else {\n while (true) {\n const nextTokens = jsdoc.source[++nextIdx]?.tokens;\n if (!nextTokens || nextTokens.end) {\n break;\n }\n\n // Not the very last tag, so don't ignore\n if (nextTokens.tag) {\n ignore = false;\n break;\n }\n }\n }\n\n if (!ignore) {\n jsdoc.source.splice(currIdx, 1);\n for (const [\n srcIdx,\n src,\n ] of jsdoc.source.entries()) {\n src.number = srcIdx;\n }\n }\n }\n }\n };\n\n utils.reportJSDoc(\n 'Intra-group tags have unexpected whitespace',\n tag,\n fixer,\n );\n }\n }\n\n return;\n }\n\n const firstLine = utils.getFirstLine();\n\n const fix = () => {\n const itemsToMoveRange = [\n ...Array.from({\n length: jsdoc.tags.length -\n /** @type {import('../iterateJsdoc.js').Integer} */ (\n firstChangedTagIndex\n ),\n }).keys(),\n ];\n\n const unchangedPriorTagDescriptions = jsdoc.tags.slice(\n 0,\n firstChangedTagIndex,\n ).reduce((ct, {\n source,\n }) => {\n return ct + source.length - 1;\n }, 0);\n\n // This offset includes not only the offset from where the first tag\n // must begin, and the additional offset of where the first changed\n // tag begins, but it must also account for prior descriptions\n const initialOffset = /** @type {import('../iterateJsdoc.js').Integer} */ (\n firstLine\n ) + /** @type {import('../iterateJsdoc.js').Integer} */ (firstChangedTagIndex) +\n\n // May be the first tag, so don't try finding a prior one if so\n unchangedPriorTagDescriptions;\n\n // Use `firstChangedTagLine` for line number to begin reporting/splicing\n for (const idx of itemsToMoveRange) {\n utils.removeTag(\n idx +\n /** @type {import('../iterateJsdoc.js').Integer} */ (\n firstChangedTagIndex\n ),\n );\n }\n\n const changedTags = sortedTags.slice(firstChangedTagIndex);\n let extraTagCount = 0;\n\n for (const idx of itemsToMoveRange) {\n const changedTag = changedTags[idx];\n\n utils.addTag(\n changedTag.tag,\n extraTagCount + initialOffset + idx,\n {\n ...changedTag.source[0].tokens,\n\n // `comment-parser` puts the `end` within the `tags` section, so\n // avoid adding another to jsdoc.source\n end: '',\n },\n );\n\n for (const {\n tokens,\n } of changedTag.source.slice(1)) {\n if (!tokens.end) {\n utils.addLine(\n extraTagCount + initialOffset + idx + 1,\n {\n ...tokens,\n end: '',\n },\n );\n extraTagCount++;\n }\n }\n }\n };\n\n utils.reportJSDoc(\n `Tags are not in the prescribed order: ${\n tagList.join(', ') || '(alphabetical)'\n }`,\n jsdoc.tags[/** @type {import('../iterateJsdoc.js').Integer} */ (\n firstChangedTagIndex\n )],\n fix,\n true,\n );\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Sorts tags by a specified sequence according to tag name.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/sort-tags.md#repos-sticky-header',\n },\n fixable: 'code',\n schema: [\n {\n additionalProperties: false,\n properties: {\n alphabetizeExtras: {\n type: 'boolean',\n },\n linesBetween: {\n type: 'integer',\n },\n reportIntraTagGroupSpacing: {\n type: 'boolean',\n },\n reportTagGroupSpacing: {\n type: 'boolean',\n },\n tagSequence: {\n items: {\n additionalProperties: false,\n properties: {\n tags: {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n },\n type: 'object',\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":"sortTags.cjs","names":["_defaultTagOrder","_interopRequireDefault","require","_iterateJsdoc","e","__esModule","default","_default","exports","iterateJsdoc","context","jsdoc","utils","alphabetizeExtras","linesBetween","reportIntraTagGroupSpacing","reportTagGroupSpacing","tagSequence","defaultTagOrder","options","tagList","flatMap","obj","tags","otherPos","indexOf","endPos","length","ongoingCount","idx","tag","entries","originalIndex","source","originalLine","firstChangedTagLine","firstChangedTagIndex","sortedTags","JSON","parse","stringify","sort","tagNew","tagOld","checkOrSetFirstChanged","newPos","oldPos","preferredNewPos","preferredOldPos","undefined","lastTagsOfGroup","badLastTagsOfGroup","countTagEmptyLines","reduce","acc","tokens","description","end","name","tg","type","empty","Number","innerIdx","currentTag","lastTag","includes","some","tgs","push","ct","fixer","currIdx","newIdx","emptyLine","number","seedTokens","delimiter","start","existingEmptyLines","nextTokens","lineDiff","lines","Array","from","splice","srcIdx","src","reportJSDoc","tagIdx","foundFirstTag","nextIdx","ignore","lastTagOfGroup","firstLine","getFirstLine","fix","itemsToMoveRange","keys","unchangedPriorTagDescriptions","slice","initialOffset","removeTag","changedTags","extraTagCount","changedTag","addTag","addLine","join","iterateAllJsdocs","meta","docs","url","fixable","schema","additionalProperties","properties","items","module"],"sources":["../../src/rules/sortTags.js"],"sourcesContent":["import defaultTagOrder from '../defaultTagOrder.js';\nimport iterateJsdoc from '../iterateJsdoc.js';\n\nexport default iterateJsdoc(({\n context,\n jsdoc,\n utils,\n}) => {\n const\n /**\n * @type {{\n * linesBetween: import('../iterateJsdoc.js').Integer,\n * tagSequence: {\n * tags: string[]\n * }[],\n * alphabetizeExtras: boolean,\n * reportTagGroupSpacing: boolean,\n * reportIntraTagGroupSpacing: boolean,\n * }}\n */ {\n alphabetizeExtras = false,\n linesBetween = 1,\n reportIntraTagGroupSpacing = true,\n reportTagGroupSpacing = true,\n tagSequence = defaultTagOrder,\n } = context.options[0] || {};\n\n const tagList = tagSequence.flatMap((obj) => {\n /* typeof obj === 'string' ? obj : */\n return obj.tags;\n });\n\n const otherPos = tagList.indexOf('-other');\n const endPos = otherPos > -1 ? otherPos : tagList.length;\n\n let ongoingCount = 0;\n for (const [\n idx,\n tag,\n ] of\n /**\n * @type {(\n * import('@es-joy/jsdoccomment').JsdocTagWithInline & {\n * originalIndex: import('../iterateJsdoc.js').Integer,\n * originalLine: import('../iterateJsdoc.js').Integer,\n * }\n * )[]}\n */ (jsdoc.tags).entries()) {\n tag.originalIndex = idx;\n ongoingCount += tag.source.length;\n tag.originalLine = ongoingCount;\n }\n\n /** @type {import('../iterateJsdoc.js').Integer|undefined} */\n let firstChangedTagLine;\n /** @type {import('../iterateJsdoc.js').Integer|undefined} */\n let firstChangedTagIndex;\n\n /**\n * @type {(import('comment-parser').Spec & {\n * originalIndex: import('../iterateJsdoc.js').Integer,\n * originalLine: import('../iterateJsdoc.js').Integer,\n * })[]}\n */\n const sortedTags = JSON.parse(JSON.stringify(jsdoc.tags));\n sortedTags.sort(({\n tag: tagNew,\n }, {\n originalIndex,\n originalLine,\n tag: tagOld,\n }) => {\n // Optimize: Just keep relative positions if the same tag name\n if (tagNew === tagOld) {\n return 0;\n }\n\n const checkOrSetFirstChanged = () => {\n if (!firstChangedTagLine || originalLine < firstChangedTagLine) {\n firstChangedTagLine = originalLine;\n firstChangedTagIndex = originalIndex;\n }\n };\n\n const newPos = tagList.indexOf(tagNew);\n const oldPos = tagList.indexOf(tagOld);\n\n const preferredNewPos = newPos === -1 ? endPos : newPos;\n const preferredOldPos = oldPos === -1 ? endPos : oldPos;\n\n if (preferredNewPos < preferredOldPos) {\n checkOrSetFirstChanged();\n return -1;\n }\n\n if (preferredNewPos > preferredOldPos) {\n return 1;\n }\n\n // preferredNewPos === preferredOldPos\n if (\n !alphabetizeExtras ||\n\n // Optimize: If tagNew (or tagOld which is the same) was found in the\n // priority array, it can maintain its relative position—without need\n // of alphabetizing (secondary sorting)\n newPos >= 0\n ) {\n return 0;\n }\n\n if (tagNew < tagOld) {\n checkOrSetFirstChanged();\n return -1;\n }\n\n // tagNew > tagOld\n return 1;\n });\n\n if (firstChangedTagLine === undefined) {\n // Should be ordered by now\n\n /**\n * @type {import('comment-parser').Spec[]}\n */\n const lastTagsOfGroup = [];\n\n /**\n * @type {[\n * import('comment-parser').Spec,\n * import('../iterateJsdoc.js').Integer\n * ][]}\n */\n const badLastTagsOfGroup = [];\n\n /**\n * @param {import('comment-parser').Spec} tag\n */\n const countTagEmptyLines = (tag) => {\n return tag.source.reduce((acc, {\n tokens: {\n description,\n end,\n name,\n tag: tg,\n type,\n },\n }) => {\n const empty = !tg && !type && !name && !description;\n // Reset the count so long as there is content\n return empty ? acc + Number(empty && !end) : 0;\n }, 0);\n };\n\n let idx = 0;\n for (const {\n tags,\n } of tagSequence) {\n let innerIdx;\n /** @type {import('comment-parser').Spec} */\n let currentTag;\n /** @type {import('comment-parser').Spec|undefined} */\n let lastTag;\n do {\n currentTag = jsdoc.tags[idx];\n if (!currentTag) {\n idx++;\n break;\n }\n\n innerIdx = tags.indexOf(currentTag.tag);\n\n if (\n innerIdx === -1 &&\n // eslint-disable-next-line no-loop-func -- Safe\n (!tags.includes('-other') || tagSequence.some(({\n tags: tgs,\n }) => {\n return tgs.includes(currentTag.tag);\n }))\n ) {\n idx++;\n break;\n }\n\n lastTag = currentTag;\n\n idx++;\n } while (true);\n\n idx--;\n\n if (lastTag) {\n lastTagsOfGroup.push(lastTag);\n const ct = countTagEmptyLines(lastTag);\n if (\n ct !== linesBetween &&\n // Use another rule for adding to end (should be of interest outside this rule)\n jsdoc.tags[idx]\n ) {\n badLastTagsOfGroup.push([\n lastTag, ct,\n ]);\n }\n }\n }\n\n if (reportTagGroupSpacing && badLastTagsOfGroup.length) {\n /**\n * @param {import('comment-parser').Spec} tg\n * @returns {() => void}\n */\n const fixer = (tg) => {\n return () => {\n // Due to https://github.com/syavorsky/comment-parser/issues/110 ,\n // we have to modify `jsdoc.source` rather than just modify tags\n // directly\n for (const [\n currIdx,\n {\n tokens,\n },\n ] of jsdoc.source.entries()) {\n if (tokens.tag !== '@' + tg.tag) {\n continue;\n }\n\n // Cannot be `tokens.end`, as dropped off last tag, so safe to\n // go on\n let newIdx = currIdx;\n\n const emptyLine = () => {\n return {\n number: 0,\n source: '',\n tokens: utils.seedTokens({\n delimiter: '*',\n start: jsdoc.source[newIdx - 1].tokens.start,\n }),\n };\n };\n\n let existingEmptyLines = 0;\n while (true) {\n const nextTokens = jsdoc.source[++newIdx]?.tokens;\n\n /* c8 ignore next 3 -- Guard */\n if (!nextTokens) {\n return;\n }\n\n // Should be no `nextTokens.end` to worry about since ignored\n // if not followed by tag\n\n if (nextTokens.tag) {\n // Haven't made it to last tag instance yet, so keep looking\n if (nextTokens.tag === tokens.tag) {\n existingEmptyLines = 0;\n continue;\n }\n\n const lineDiff = linesBetween - existingEmptyLines;\n if (lineDiff > 0) {\n const lines = Array.from({\n length: lineDiff,\n }, () => {\n return emptyLine();\n });\n jsdoc.source.splice(newIdx, 0, ...lines);\n } else {\n // lineDiff < 0\n jsdoc.source.splice(\n newIdx + lineDiff,\n -lineDiff,\n );\n }\n\n break;\n }\n\n const empty = !nextTokens.type && !nextTokens.name &&\n !nextTokens.description;\n\n if (empty) {\n existingEmptyLines++;\n } else {\n // Has content again, so reset empty line count\n existingEmptyLines = 0;\n }\n }\n\n break;\n }\n\n for (const [\n srcIdx,\n src,\n ] of jsdoc.source.entries()) {\n src.number = srcIdx;\n }\n };\n };\n\n for (const [\n tg,\n ] of badLastTagsOfGroup) {\n utils.reportJSDoc(\n 'Tag groups do not have the expected whitespace',\n tg,\n fixer(tg),\n );\n }\n\n return;\n }\n\n if (!reportIntraTagGroupSpacing) {\n return;\n }\n\n for (const [\n tagIdx,\n tag,\n ] of jsdoc.tags.entries()) {\n if (!jsdoc.tags[tagIdx + 1] || lastTagsOfGroup.includes(tag)) {\n continue;\n }\n\n const ct = countTagEmptyLines(tag);\n if (ct) {\n const fixer = () => {\n let foundFirstTag = false;\n\n /** @type {string|undefined} */\n let currentTag;\n\n for (const [\n currIdx,\n {\n tokens: {\n description,\n end,\n name,\n tag: tg,\n type,\n },\n },\n ] of jsdoc.source.entries()) {\n if (tg) {\n foundFirstTag = true;\n currentTag = tg;\n }\n\n if (!foundFirstTag) {\n continue;\n }\n\n if (currentTag && !tg && !type && !name && !description && !end) {\n let nextIdx = currIdx;\n\n let ignore = true;\n // Even if a tag of the same name as the last tags in a group,\n // could still be an earlier tag in that group\n\n // eslint-disable-next-line no-loop-func -- Safe\n if (lastTagsOfGroup.some((lastTagOfGroup) => {\n return currentTag === '@' + lastTagOfGroup.tag;\n })) {\n while (true) {\n const nextTokens = jsdoc.source[++nextIdx]?.tokens;\n if (!nextTokens) {\n break;\n }\n\n if (!nextTokens.tag) {\n continue;\n }\n\n // Followed by the same tag name, so not actually last in group,\n // and of interest\n if (nextTokens.tag === currentTag) {\n ignore = false;\n }\n }\n } else {\n while (true) {\n const nextTokens = jsdoc.source[++nextIdx]?.tokens;\n if (!nextTokens || nextTokens.end) {\n break;\n }\n\n // Not the very last tag, so don't ignore\n if (nextTokens.tag) {\n ignore = false;\n break;\n }\n }\n }\n\n if (!ignore) {\n jsdoc.source.splice(currIdx, 1);\n for (const [\n srcIdx,\n src,\n ] of jsdoc.source.entries()) {\n src.number = srcIdx;\n }\n }\n }\n }\n };\n\n utils.reportJSDoc(\n 'Intra-group tags have unexpected whitespace',\n tag,\n fixer,\n );\n }\n }\n\n return;\n }\n\n const firstLine = utils.getFirstLine();\n\n const fix = () => {\n const itemsToMoveRange = [\n ...Array.from({\n length: jsdoc.tags.length -\n /** @type {import('../iterateJsdoc.js').Integer} */ (\n firstChangedTagIndex\n ),\n }).keys(),\n ];\n\n const unchangedPriorTagDescriptions = jsdoc.tags.slice(\n 0,\n firstChangedTagIndex,\n ).reduce((ct, {\n source,\n }) => {\n return ct + source.length - 1;\n }, 0);\n\n // This offset includes not only the offset from where the first tag\n // must begin, and the additional offset of where the first changed\n // tag begins, but it must also account for prior descriptions\n const initialOffset = /** @type {import('../iterateJsdoc.js').Integer} */ (\n firstLine\n ) + /** @type {import('../iterateJsdoc.js').Integer} */ (firstChangedTagIndex) +\n\n // May be the first tag, so don't try finding a prior one if so\n unchangedPriorTagDescriptions;\n\n // Use `firstChangedTagLine` for line number to begin reporting/splicing\n for (const idx of itemsToMoveRange) {\n utils.removeTag(\n idx +\n /** @type {import('../iterateJsdoc.js').Integer} */ (\n firstChangedTagIndex\n ),\n );\n }\n\n const changedTags = sortedTags.slice(firstChangedTagIndex);\n let extraTagCount = 0;\n\n for (const idx of itemsToMoveRange) {\n const changedTag = changedTags[idx];\n\n utils.addTag(\n changedTag.tag,\n extraTagCount + initialOffset + idx,\n {\n ...changedTag.source[0].tokens,\n\n // `comment-parser` puts the `end` within the `tags` section, so\n // avoid adding another to jsdoc.source\n end: '',\n },\n );\n\n for (const {\n tokens,\n } of changedTag.source.slice(1)) {\n if (!tokens.end) {\n utils.addLine(\n extraTagCount + initialOffset + idx + 1,\n {\n ...tokens,\n end: '',\n },\n );\n extraTagCount++;\n }\n }\n }\n };\n\n utils.reportJSDoc(\n `Tags are not in the prescribed order: ${\n tagList.join(', ') || '(alphabetical)'\n }`,\n jsdoc.tags[/** @type {import('../iterateJsdoc.js').Integer} */ (\n firstChangedTagIndex\n )],\n fix,\n true,\n );\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Sorts tags by a specified sequence according to tag name, optionally adding line breaks between tag groups.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/sort-tags.md#repos-sticky-header',\n },\n fixable: 'code',\n schema: [\n {\n additionalProperties: false,\n properties: {\n alphabetizeExtras: {\n description: `Defaults to \\`false\\`. Alphabetizes any items not within \\`tagSequence\\` after any\nitems within \\`tagSequence\\` (or in place of the special \\`-other\\` pseudo-tag)\nare sorted.\n\nIf you want all your tags alphabetized, you can supply an empty array for\n\\`tagSequence\\` along with setting this option to \\`true\\`.`,\n type: 'boolean',\n },\n linesBetween: {\n description: `Indicates the number of lines to be added between tag groups. Defaults to 1.\nDo not set to 0 or 2+ if you are using \\`tag-lines\\` and \\`\"always\"\\` and do not\nset to 1+ if you are using \\`tag-lines\\` and \\`\"never\"\\`.`,\n type: 'integer',\n },\n reportIntraTagGroupSpacing: {\n description: `Whether to enable reporting and fixing of line breaks within tags of a given\ntag group. Defaults to \\`true\\` which will remove any line breaks at the end of\nsuch tags. Do not use with \\`true\\` if you are using \\`tag-lines\\` and \\`always\\`.`,\n type: 'boolean',\n },\n reportTagGroupSpacing: {\n description: `Whether to enable reporting and fixing of line breaks between tag groups\nas set by \\`linesBetween\\`. Defaults to \\`true\\`. Note that the very last tag\nwill not have spacing applied regardless. For adding line breaks there, you\nmay wish to use the \\`endLines\\` option of the \\`tag-lines\\` rule.`,\n type: 'boolean',\n },\n tagSequence: {\n description: `An array of tag group objects indicating the preferred sequence for sorting tags.\n\nEach item in the array should be an object with a \\`tags\\` property set to an array\nof tag names.\n\nTag names earlier in the list will be arranged first. The relative position of\ntags of the same name will not be changed.\n\nEarlier groups will also be arranged before later groups, but with the added\nfeature that additional line breaks may be added between (or before or after)\nsuch groups (depending on the setting of \\`linesBetween\\`).\n\nTag names not in the list will be grouped together at the end. The pseudo-tag\n\\`-other\\` can be used to place them anywhere else if desired. The tags will be\nplaced in their order of appearance, or alphabetized if \\`alphabetizeExtras\\`\nis enabled, see more below about that option.\n\nDefaults to the array below (noting that it is just a single tag group with\nno lines between groups by default).\n\nPlease note that this order is still experimental, so if you want to retain\na fixed order that doesn't change into the future, supply your own\n\\`tagSequence\\`.\n\n\\`\\`\\`js\n[{tags: [\n // Brief descriptions\n 'summary',\n 'typeSummary',\n\n // Module/file-level\n 'module',\n 'exports',\n 'file',\n 'fileoverview',\n 'overview',\n 'import',\n\n // Identifying (name, type)\n 'typedef',\n 'interface',\n 'record',\n 'template',\n 'name',\n 'kind',\n 'type',\n 'alias',\n 'external',\n 'host',\n 'callback',\n 'func',\n 'function',\n 'method',\n 'class',\n 'constructor',\n\n // Relationships\n 'modifies',\n 'mixes',\n 'mixin',\n 'mixinClass',\n 'mixinFunction',\n 'namespace',\n 'borrows',\n 'constructs',\n 'lends',\n 'implements',\n 'requires',\n\n // Long descriptions\n 'desc',\n 'description',\n 'classdesc',\n 'tutorial',\n 'copyright',\n 'license',\n\n // Simple annotations\n 'const',\n 'constant',\n 'final',\n 'global',\n 'readonly',\n 'abstract',\n 'virtual',\n 'var',\n 'member',\n 'memberof',\n 'memberof!',\n 'inner',\n 'instance',\n 'inheritdoc',\n 'inheritDoc',\n 'override',\n 'hideconstructor',\n\n // Core function/object info\n 'param',\n 'arg',\n 'argument',\n 'prop',\n 'property',\n 'return',\n 'returns',\n\n // Important behavior details\n 'async',\n 'generator',\n 'default',\n 'defaultvalue',\n 'enum',\n 'augments',\n 'extends',\n 'throws',\n 'exception',\n 'yield',\n 'yields',\n 'event',\n 'fires',\n 'emits',\n 'listens',\n 'this',\n\n // Access\n 'static',\n 'private',\n 'protected',\n 'public',\n 'access',\n 'package',\n\n '-other',\n\n // Supplementary descriptions\n 'see',\n 'example',\n\n // METADATA\n\n // Other Closure (undocumented) metadata\n 'closurePrimitive',\n 'customElement',\n 'expose',\n 'hidden',\n 'idGenerator',\n 'meaning',\n 'ngInject',\n 'owner',\n 'wizaction',\n\n // Other Closure (documented) metadata\n 'define',\n 'dict',\n 'export',\n 'externs',\n 'implicitCast',\n 'noalias',\n 'nocollapse',\n 'nocompile',\n 'noinline',\n 'nosideeffects',\n 'polymer',\n 'polymerBehavior',\n 'preserve',\n 'struct',\n 'suppress',\n 'unrestricted',\n\n // @homer0/prettier-plugin-jsdoc metadata\n 'category',\n\n // Non-Closure metadata\n 'ignore',\n 'author',\n 'version',\n 'variation',\n 'since',\n 'deprecated',\n 'todo',\n]}];\n\\`\\`\\`\n`,\n items: {\n additionalProperties: false,\n properties: {\n tags: {\n description: 'See description on `tagSequence`.',\n items: {\n type: 'string',\n },\n type: 'array',\n },\n },\n type: 'object',\n },\n type: 'array',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"mappings":"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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;UACW6D,KAAK,EAAE;YACLF,oBAAoB,EAAE,KAAK;YAC3BC,UAAU,EAAE;cACV7F,IAAI,EAAE;gBACJiC,WAAW,EAAE,mCAAmC;gBAChD6D,KAAK,EAAE;kBACLzD,IAAI,EAAE;gBACR,CAAC;gBACDA,IAAI,EAAE;cACR;YACF,CAAC;YACDA,IAAI,EAAE;UACR,CAAC;UACDA,IAAI,EAAE;QACR;MACF,CAAC;MACDA,IAAI,EAAE;IACR,CAAC,CACF;IACDA,IAAI,EAAE;EACR;AACF,CAAC,CAAC;AAAA0D,MAAA,CAAA9G,OAAA,GAAAA,OAAA,CAAAF,OAAA","ignoreList":[]}
|
package/dist/rules/tagLines.cjs
CHANGED
|
@@ -216,15 +216,27 @@ var _default = exports.default = (0, _iterateJsdoc.default)(({
|
|
|
216
216
|
},
|
|
217
217
|
fixable: 'code',
|
|
218
218
|
schema: [{
|
|
219
|
+
description: `Defaults to "never". "any" is only useful with \`tags\` (allowing non-enforcement of lines except
|
|
220
|
+
for particular tags) or with \`startLines\` or \`endLines\`. It is also
|
|
221
|
+
necessary if using the linebreak-setting options of the \`sort-tags\` rule
|
|
222
|
+
so that the two rules won't conflict in both attempting to set lines
|
|
223
|
+
between tags.`,
|
|
219
224
|
enum: ['always', 'any', 'never'],
|
|
220
225
|
type: 'string'
|
|
221
226
|
}, {
|
|
222
227
|
additionalProperties: false,
|
|
223
228
|
properties: {
|
|
224
229
|
applyToEndTag: {
|
|
230
|
+
description: `Set to \`false\` and use with "always" to indicate the normal lines to be
|
|
231
|
+
added after tags should not be added after the final tag.
|
|
232
|
+
|
|
233
|
+
Defaults to \`true\`.`,
|
|
225
234
|
type: 'boolean'
|
|
226
235
|
},
|
|
227
236
|
count: {
|
|
237
|
+
description: `Use with "always" to indicate the number of lines to require be present.
|
|
238
|
+
|
|
239
|
+
Defaults to 1.`,
|
|
228
240
|
type: 'integer'
|
|
229
241
|
},
|
|
230
242
|
endLines: {
|
|
@@ -232,16 +244,34 @@ var _default = exports.default = (0, _iterateJsdoc.default)(({
|
|
|
232
244
|
type: 'integer'
|
|
233
245
|
}, {
|
|
234
246
|
type: 'null'
|
|
235
|
-
}]
|
|
247
|
+
}],
|
|
248
|
+
description: `If not set to \`null\`, will enforce end lines to the given count on the
|
|
249
|
+
final tag only.
|
|
250
|
+
|
|
251
|
+
Defaults to \`0\`.`
|
|
236
252
|
},
|
|
237
253
|
startLines: {
|
|
238
254
|
anyOf: [{
|
|
239
255
|
type: 'integer'
|
|
240
256
|
}, {
|
|
241
257
|
type: 'null'
|
|
242
|
-
}]
|
|
258
|
+
}],
|
|
259
|
+
description: `If not set to \`null\`, will enforce end lines to the given count before the
|
|
260
|
+
first tag only, unless there is only whitespace content, in which case,
|
|
261
|
+
a line count will not be enforced.
|
|
262
|
+
|
|
263
|
+
Defaults to \`0\`.`
|
|
243
264
|
},
|
|
244
265
|
tags: {
|
|
266
|
+
description: `Overrides the default behavior depending on specific tags.
|
|
267
|
+
|
|
268
|
+
An object whose keys are tag names and whose values are objects with the
|
|
269
|
+
following keys:
|
|
270
|
+
|
|
271
|
+
1. \`lines\` - Set to \`always\`, \`never\`, or \`any\` to override.
|
|
272
|
+
2. \`count\` - Overrides main \`count\` (for "always")
|
|
273
|
+
|
|
274
|
+
Defaults to empty object.`,
|
|
245
275
|
patternProperties: {
|
|
246
276
|
'.*': {
|
|
247
277
|
additionalProperties: false,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tagLines.cjs","names":["_iterateJsdoc","_interopRequireDefault","require","e","__esModule","default","_default","exports","iterateJsdoc","context","jsdoc","utils","alwaysNever","applyToEndTag","count","endLines","startLines","tags","options","some","tg","tagIdx","lastTag","lastEmpty","reportIndex","emptyLinesCount","idx","tokens","description","end","name","tag","type","source","entries","includes","slice","lines","empty","length","lineDiff","fixer","removeTag","tagSourceOffset","reportJSDoc","line","number","addLines","currentTag","tagSourceIdx","splice","push","currentTg","tagCount","defaultAlways","overrideAlways","fixCount","lastDescriptionLine","getDescription","test","trailingLines","match","trailingDiff","setBlockDescription","info","seedTokens","descLines","map","desc","postDelimiter","trim","Array","from","iterateAllJsdocs","meta","docs","url","fixable","schema","enum","additionalProperties","properties","anyOf","patternProperties","module"],"sources":["../../src/rules/tagLines.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc.js';\n\nexport default iterateJsdoc(({\n context,\n jsdoc,\n utils,\n}) => {\n const [\n alwaysNever = 'never',\n {\n applyToEndTag = true,\n count = 1,\n endLines = 0,\n startLines = 0,\n tags = {},\n } = {},\n ] = context.options;\n\n jsdoc.tags.some((tg, tagIdx) => {\n let lastTag;\n\n /**\n * @type {null|import('../iterateJsdoc.js').Integer}\n */\n let lastEmpty = null;\n\n /**\n * @type {null|import('../iterateJsdoc.js').Integer}\n */\n let reportIndex = null;\n let emptyLinesCount = 0;\n for (const [\n idx,\n {\n tokens: {\n description,\n end,\n name,\n tag,\n type,\n },\n },\n ] 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 && [\n 'always', 'any',\n ].includes(tags[lastTag.slice(1)]?.lines)) {\n continue;\n }\n\n const empty = !tag && !name && !type && !description;\n if (\n empty && !end &&\n (alwaysNever === 'never' ||\n lastTag && tags[lastTag.slice(1)]?.lines === 'never'\n )\n ) {\n reportIndex = idx;\n\n continue;\n }\n\n if (!end) {\n if (empty) {\n emptyLinesCount++;\n } else {\n emptyLinesCount = 0;\n }\n\n lastEmpty = empty ? idx : null;\n }\n\n lastTag = tag;\n }\n\n if (\n typeof endLines === 'number' &&\n lastEmpty !== null && tagIdx === jsdoc.tags.length - 1\n ) {\n const lineDiff = endLines - emptyLinesCount;\n\n if (lineDiff < 0) {\n const fixer = () => {\n utils.removeTag(tagIdx, {\n tagSourceOffset: /** @type {import('../iterateJsdoc.js').Integer} */ (\n lastEmpty\n ) + lineDiff + 1,\n });\n };\n\n utils.reportJSDoc(\n `Expected ${endLines} trailing lines`,\n {\n line: tg.source[lastEmpty].number + lineDiff + 1,\n },\n fixer,\n );\n } else if (lineDiff > 0) {\n const fixer = () => {\n utils.addLines(\n tagIdx,\n /** @type {import('../iterateJsdoc.js').Integer} */ (lastEmpty),\n endLines - emptyLinesCount,\n );\n };\n\n utils.reportJSDoc(\n `Expected ${endLines} trailing lines`,\n {\n line: tg.source[lastEmpty].number,\n },\n fixer,\n );\n }\n\n return true;\n }\n\n if (reportIndex !== null) {\n const fixer = () => {\n utils.removeTag(tagIdx, {\n tagSourceOffset: /** @type {import('../iterateJsdoc.js').Integer} */ (\n reportIndex\n ),\n });\n };\n\n utils.reportJSDoc(\n 'Expected no lines between tags',\n {\n line: tg.source[0].number + 1,\n },\n fixer,\n );\n\n return true;\n }\n\n return false;\n });\n\n (applyToEndTag ? jsdoc.tags : jsdoc.tags.slice(0, -1)).some((tg, tagIdx) => {\n /**\n * @type {{\n * idx: import('../iterateJsdoc.js').Integer,\n * number: import('../iterateJsdoc.js').Integer\n * }[]}\n */\n const lines = [];\n\n let currentTag;\n let tagSourceIdx = 0;\n for (const [\n idx,\n {\n number,\n tokens: {\n description,\n end,\n name,\n tag,\n type,\n },\n },\n ] of tg.source.entries()) {\n if (description) {\n lines.splice(0);\n tagSourceIdx = idx;\n }\n\n if (tag) {\n currentTag = tag;\n }\n\n if (!tag && !name && !type && !description && !end) {\n lines.push({\n idx,\n number,\n });\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 if (typeof startLines === 'number') {\n if (!jsdoc.tags.length) {\n return;\n }\n\n const {\n description,\n lastDescriptionLine,\n } = utils.getDescription();\n if (!(/\\S/v).test(description)) {\n return;\n }\n\n const trailingLines = description.match(/\\n+$/v)?.[0]?.length;\n const trailingDiff = (trailingLines ?? 0) - startLines;\n if (trailingDiff > 0) {\n utils.reportJSDoc(\n `Expected only ${startLines} line after block description`,\n {\n line: lastDescriptionLine - trailingDiff,\n },\n () => {\n utils.setBlockDescription((info, seedTokens, descLines) => {\n return descLines.slice(0, -trailingDiff).map((desc) => {\n return {\n number: 0,\n source: '',\n tokens: seedTokens({\n ...info,\n description: desc,\n postDelimiter: desc.trim() ? info.postDelimiter : '',\n }),\n };\n });\n });\n },\n );\n } else if (trailingDiff < 0) {\n utils.reportJSDoc(\n `Expected ${startLines} lines after block description`,\n {\n line: lastDescriptionLine,\n },\n () => {\n utils.setBlockDescription((info, seedTokens, descLines) => {\n return [\n ...descLines,\n ...Array.from({\n length: -trailingDiff,\n }, () => {\n return '';\n }),\n ].map((desc) => {\n return {\n number: 0,\n source: '',\n tokens: seedTokens({\n ...info,\n description: desc,\n postDelimiter: desc.trim() ? info.postDelimiter : '',\n }),\n };\n });\n });\n },\n );\n }\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/blob/main/docs/rules/tag-lines.md#repos-sticky-header',\n },\n fixable: 'code',\n schema: [\n {\n enum: [\n 'always', 'any', 'never',\n ],\n type: 'string',\n },\n {\n additionalProperties: false,\n properties: {\n applyToEndTag: {\n type: 'boolean',\n },\n count: {\n type: 'integer',\n },\n endLines: {\n anyOf: [\n {\n type: 'integer',\n },\n {\n type: 'null',\n },\n ],\n },\n startLines: {\n anyOf: [\n {\n type: 'integer',\n },\n {\n type: 'null',\n },\n ],\n },\n tags: {\n patternProperties: {\n '.*': {\n additionalProperties: false,\n properties: {\n count: {\n type: 'integer',\n },\n lines: {\n enum: [\n 'always', 'never', 'any',\n ],\n type: 'string',\n },\n },\n },\n },\n type: 'object',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"tagLines.cjs","names":["_iterateJsdoc","_interopRequireDefault","require","e","__esModule","default","_default","exports","iterateJsdoc","context","jsdoc","utils","alwaysNever","applyToEndTag","count","endLines","startLines","tags","options","some","tg","tagIdx","lastTag","lastEmpty","reportIndex","emptyLinesCount","idx","tokens","description","end","name","tag","type","source","entries","includes","slice","lines","empty","length","lineDiff","fixer","removeTag","tagSourceOffset","reportJSDoc","line","number","addLines","currentTag","tagSourceIdx","splice","push","currentTg","tagCount","defaultAlways","overrideAlways","fixCount","lastDescriptionLine","getDescription","test","trailingLines","match","trailingDiff","setBlockDescription","info","seedTokens","descLines","map","desc","postDelimiter","trim","Array","from","iterateAllJsdocs","meta","docs","url","fixable","schema","enum","additionalProperties","properties","anyOf","patternProperties","module"],"sources":["../../src/rules/tagLines.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc.js';\n\nexport default iterateJsdoc(({\n context,\n jsdoc,\n utils,\n}) => {\n const [\n alwaysNever = 'never',\n {\n applyToEndTag = true,\n count = 1,\n endLines = 0,\n startLines = 0,\n tags = {},\n } = {},\n ] = context.options;\n\n jsdoc.tags.some((tg, tagIdx) => {\n let lastTag;\n\n /**\n * @type {null|import('../iterateJsdoc.js').Integer}\n */\n let lastEmpty = null;\n\n /**\n * @type {null|import('../iterateJsdoc.js').Integer}\n */\n let reportIndex = null;\n let emptyLinesCount = 0;\n for (const [\n idx,\n {\n tokens: {\n description,\n end,\n name,\n tag,\n type,\n },\n },\n ] 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 && [\n 'always', 'any',\n ].includes(tags[lastTag.slice(1)]?.lines)) {\n continue;\n }\n\n const empty = !tag && !name && !type && !description;\n if (\n empty && !end &&\n (alwaysNever === 'never' ||\n lastTag && tags[lastTag.slice(1)]?.lines === 'never'\n )\n ) {\n reportIndex = idx;\n\n continue;\n }\n\n if (!end) {\n if (empty) {\n emptyLinesCount++;\n } else {\n emptyLinesCount = 0;\n }\n\n lastEmpty = empty ? idx : null;\n }\n\n lastTag = tag;\n }\n\n if (\n typeof endLines === 'number' &&\n lastEmpty !== null && tagIdx === jsdoc.tags.length - 1\n ) {\n const lineDiff = endLines - emptyLinesCount;\n\n if (lineDiff < 0) {\n const fixer = () => {\n utils.removeTag(tagIdx, {\n tagSourceOffset: /** @type {import('../iterateJsdoc.js').Integer} */ (\n lastEmpty\n ) + lineDiff + 1,\n });\n };\n\n utils.reportJSDoc(\n `Expected ${endLines} trailing lines`,\n {\n line: tg.source[lastEmpty].number + lineDiff + 1,\n },\n fixer,\n );\n } else if (lineDiff > 0) {\n const fixer = () => {\n utils.addLines(\n tagIdx,\n /** @type {import('../iterateJsdoc.js').Integer} */ (lastEmpty),\n endLines - emptyLinesCount,\n );\n };\n\n utils.reportJSDoc(\n `Expected ${endLines} trailing lines`,\n {\n line: tg.source[lastEmpty].number,\n },\n fixer,\n );\n }\n\n return true;\n }\n\n if (reportIndex !== null) {\n const fixer = () => {\n utils.removeTag(tagIdx, {\n tagSourceOffset: /** @type {import('../iterateJsdoc.js').Integer} */ (\n reportIndex\n ),\n });\n };\n\n utils.reportJSDoc(\n 'Expected no lines between tags',\n {\n line: tg.source[0].number + 1,\n },\n fixer,\n );\n\n return true;\n }\n\n return false;\n });\n\n (applyToEndTag ? jsdoc.tags : jsdoc.tags.slice(0, -1)).some((tg, tagIdx) => {\n /**\n * @type {{\n * idx: import('../iterateJsdoc.js').Integer,\n * number: import('../iterateJsdoc.js').Integer\n * }[]}\n */\n const lines = [];\n\n let currentTag;\n let tagSourceIdx = 0;\n for (const [\n idx,\n {\n number,\n tokens: {\n description,\n end,\n name,\n tag,\n type,\n },\n },\n ] of tg.source.entries()) {\n if (description) {\n lines.splice(0);\n tagSourceIdx = idx;\n }\n\n if (tag) {\n currentTag = tag;\n }\n\n if (!tag && !name && !type && !description && !end) {\n lines.push({\n idx,\n number,\n });\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 if (typeof startLines === 'number') {\n if (!jsdoc.tags.length) {\n return;\n }\n\n const {\n description,\n lastDescriptionLine,\n } = utils.getDescription();\n if (!(/\\S/v).test(description)) {\n return;\n }\n\n const trailingLines = description.match(/\\n+$/v)?.[0]?.length;\n const trailingDiff = (trailingLines ?? 0) - startLines;\n if (trailingDiff > 0) {\n utils.reportJSDoc(\n `Expected only ${startLines} line after block description`,\n {\n line: lastDescriptionLine - trailingDiff,\n },\n () => {\n utils.setBlockDescription((info, seedTokens, descLines) => {\n return descLines.slice(0, -trailingDiff).map((desc) => {\n return {\n number: 0,\n source: '',\n tokens: seedTokens({\n ...info,\n description: desc,\n postDelimiter: desc.trim() ? info.postDelimiter : '',\n }),\n };\n });\n });\n },\n );\n } else if (trailingDiff < 0) {\n utils.reportJSDoc(\n `Expected ${startLines} lines after block description`,\n {\n line: lastDescriptionLine,\n },\n () => {\n utils.setBlockDescription((info, seedTokens, descLines) => {\n return [\n ...descLines,\n ...Array.from({\n length: -trailingDiff,\n }, () => {\n return '';\n }),\n ].map((desc) => {\n return {\n number: 0,\n source: '',\n tokens: seedTokens({\n ...info,\n description: desc,\n postDelimiter: desc.trim() ? info.postDelimiter : '',\n }),\n };\n });\n });\n },\n );\n }\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/blob/main/docs/rules/tag-lines.md#repos-sticky-header',\n },\n fixable: 'code',\n schema: [\n {\n description: `Defaults to \"never\". \"any\" is only useful with \\`tags\\` (allowing non-enforcement of lines except\nfor particular tags) or with \\`startLines\\` or \\`endLines\\`. It is also\nnecessary if using the linebreak-setting options of the \\`sort-tags\\` rule\nso that the two rules won't conflict in both attempting to set lines\nbetween tags.`,\n enum: [\n 'always', 'any', 'never',\n ],\n type: 'string',\n },\n {\n additionalProperties: false,\n properties: {\n applyToEndTag: {\n description: `Set to \\`false\\` and use with \"always\" to indicate the normal lines to be\nadded after tags should not be added after the final tag.\n\nDefaults to \\`true\\`.`,\n type: 'boolean',\n },\n count: {\n description: `Use with \"always\" to indicate the number of lines to require be present.\n\nDefaults to 1.`,\n type: 'integer',\n },\n endLines: {\n anyOf: [\n {\n type: 'integer',\n },\n {\n type: 'null',\n },\n ],\n description: `If not set to \\`null\\`, will enforce end lines to the given count on the\nfinal tag only.\n\nDefaults to \\`0\\`.`,\n },\n startLines: {\n anyOf: [\n {\n type: 'integer',\n },\n {\n type: 'null',\n },\n ],\n description: `If not set to \\`null\\`, will enforce end lines to the given count before the\nfirst tag only, unless there is only whitespace content, in which case,\na line count will not be enforced.\n\nDefaults to \\`0\\`.`,\n },\n tags: {\n description: `Overrides the default behavior depending on specific tags.\n\nAn object whose keys are tag names and whose values are objects with the\nfollowing keys:\n\n1. \\`lines\\` - Set to \\`always\\`, \\`never\\`, or \\`any\\` to override.\n2. \\`count\\` - Overrides main \\`count\\` (for \"always\")\n\nDefaults to empty object.`,\n patternProperties: {\n '.*': {\n additionalProperties: false,\n properties: {\n count: {\n type: 'integer',\n },\n lines: {\n enum: [\n 'always', 'never', 'any',\n ],\n type: 'string',\n },\n },\n },\n },\n type: 'object',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -120,11 +120,15 @@ var _default = exports.default = (0, _iterateJsdoc.default)(({
|
|
|
120
120
|
schema: [{
|
|
121
121
|
additionalProperties: false,
|
|
122
122
|
properties: {
|
|
123
|
-
// Option properties here (or remove the object)
|
|
124
123
|
escapeHTML: {
|
|
124
|
+
description: `This option escapes all \`<\` and \`&\` characters (except those followed by
|
|
125
|
+
whitespace which are treated as literals by Visual Studio Code). Defaults to
|
|
126
|
+
\`false\`.`,
|
|
125
127
|
type: 'boolean'
|
|
126
128
|
},
|
|
127
129
|
escapeMarkdown: {
|
|
130
|
+
description: `This option escapes the first backtick (\`\` \` \`\`) in a paired sequence.
|
|
131
|
+
Defaults to \`false\`.`,
|
|
128
132
|
type: 'boolean'
|
|
129
133
|
}
|
|
130
134
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"textEscaping.cjs","names":["_iterateJsdoc","_interopRequireDefault","require","e","__esModule","default","htmlRegex","markdownRegex","htmlReplacer","desc","replaceAll","RegExp","_","markdownReplacer","backticks","encapsed","bookend","repeat","length","_default","exports","iterateJsdoc","context","jsdoc","utils","escapeHTML","escapeMarkdown","options","report","loc","end","column","line","start","message","descriptions","getDescription","some","test","setDescriptionLines","reportJSDoc","tag","tags","getTagDescription","setTagDescription","source","number","iterateAllJsdocs","meta","docs","description","url","fixable","schema","additionalProperties","properties","type","module"],"sources":["../../src/rules/textEscaping.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc.js';\n\n// We could disallow raw gt, quot, and apos, but allow for parity; but we do\n// not allow hex or decimal character references\nconst htmlRegex = /(<|&(?!(?:amp|lt|gt|quot|apos);))(?=\\S)/v;\nconst markdownRegex = /(?<!\\\\)(`+)([^`]+)\\1(?!`)/v;\n\n/**\n * @param {string} desc\n * @returns {string}\n */\nconst htmlReplacer = (desc) => {\n return desc.replaceAll(new RegExp(htmlRegex, 'gv'), (_) => {\n if (_ === '<') {\n return '<';\n }\n\n return '&';\n });\n};\n\n/**\n * @param {string} desc\n * @returns {string}\n */\nconst markdownReplacer = (desc) => {\n return desc.replaceAll(new RegExp(markdownRegex, 'gv'), (_, backticks, encapsed) => {\n const bookend = '`'.repeat(backticks.length);\n return `\\\\${bookend}${encapsed}${bookend}`;\n });\n};\n\nexport default iterateJsdoc(({\n context,\n jsdoc,\n utils,\n}) => {\n const {\n escapeHTML,\n escapeMarkdown,\n } = context.options[0] || {};\n\n if (!escapeHTML && !escapeMarkdown) {\n context.report({\n loc: {\n end: {\n column: 1,\n line: 1,\n },\n start: {\n column: 1,\n line: 1,\n },\n },\n message: 'You must include either `escapeHTML` or `escapeMarkdown`',\n });\n return;\n }\n\n const {\n descriptions,\n } = utils.getDescription();\n\n if (escapeHTML) {\n if (descriptions.some((desc) => {\n return htmlRegex.test(desc);\n })) {\n const line = utils.setDescriptionLines(htmlRegex, htmlReplacer);\n utils.reportJSDoc('You have unescaped HTML characters < or &', {\n line,\n }, () => {}, true);\n return;\n }\n\n for (const tag of jsdoc.tags) {\n if (tag.tag === 'example') {\n continue;\n }\n\n if (/** @type {string[]} */ (\n utils.getTagDescription(tag, true)\n ).some((desc) => {\n return htmlRegex.test(desc);\n })) {\n const line = utils.setTagDescription(tag, htmlRegex, htmlReplacer) +\n tag.source[0].number;\n utils.reportJSDoc('You have unescaped HTML characters < or & in a tag', {\n line,\n }, () => {}, true);\n }\n }\n\n return;\n }\n\n if (descriptions.some((desc) => {\n return markdownRegex.test(desc);\n })) {\n const line = utils.setDescriptionLines(markdownRegex, markdownReplacer);\n utils.reportJSDoc('You have unescaped Markdown backtick sequences', {\n line,\n }, () => {}, true);\n return;\n }\n\n for (const tag of jsdoc.tags) {\n if (tag.tag === 'example') {\n continue;\n }\n\n if (/** @type {string[]} */ (\n utils.getTagDescription(tag, true)\n ).some((desc) => {\n return markdownRegex.test(desc);\n })) {\n const line = utils.setTagDescription(\n tag, markdownRegex, markdownReplacer,\n ) + tag.source[0].number;\n utils.reportJSDoc(\n 'You have unescaped Markdown backtick sequences in a tag',\n {\n line,\n },\n () => {},\n true,\n );\n }\n }\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Auto-escape certain characters that are input within block and tag descriptions.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/text-escaping.md#repos-sticky-header',\n },\n fixable: 'code',\n schema: [\n {\n additionalProperties: false,\n properties: {\n
|
|
1
|
+
{"version":3,"file":"textEscaping.cjs","names":["_iterateJsdoc","_interopRequireDefault","require","e","__esModule","default","htmlRegex","markdownRegex","htmlReplacer","desc","replaceAll","RegExp","_","markdownReplacer","backticks","encapsed","bookend","repeat","length","_default","exports","iterateJsdoc","context","jsdoc","utils","escapeHTML","escapeMarkdown","options","report","loc","end","column","line","start","message","descriptions","getDescription","some","test","setDescriptionLines","reportJSDoc","tag","tags","getTagDescription","setTagDescription","source","number","iterateAllJsdocs","meta","docs","description","url","fixable","schema","additionalProperties","properties","type","module"],"sources":["../../src/rules/textEscaping.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc.js';\n\n// We could disallow raw gt, quot, and apos, but allow for parity; but we do\n// not allow hex or decimal character references\nconst htmlRegex = /(<|&(?!(?:amp|lt|gt|quot|apos);))(?=\\S)/v;\nconst markdownRegex = /(?<!\\\\)(`+)([^`]+)\\1(?!`)/v;\n\n/**\n * @param {string} desc\n * @returns {string}\n */\nconst htmlReplacer = (desc) => {\n return desc.replaceAll(new RegExp(htmlRegex, 'gv'), (_) => {\n if (_ === '<') {\n return '<';\n }\n\n return '&';\n });\n};\n\n/**\n * @param {string} desc\n * @returns {string}\n */\nconst markdownReplacer = (desc) => {\n return desc.replaceAll(new RegExp(markdownRegex, 'gv'), (_, backticks, encapsed) => {\n const bookend = '`'.repeat(backticks.length);\n return `\\\\${bookend}${encapsed}${bookend}`;\n });\n};\n\nexport default iterateJsdoc(({\n context,\n jsdoc,\n utils,\n}) => {\n const {\n escapeHTML,\n escapeMarkdown,\n } = context.options[0] || {};\n\n if (!escapeHTML && !escapeMarkdown) {\n context.report({\n loc: {\n end: {\n column: 1,\n line: 1,\n },\n start: {\n column: 1,\n line: 1,\n },\n },\n message: 'You must include either `escapeHTML` or `escapeMarkdown`',\n });\n return;\n }\n\n const {\n descriptions,\n } = utils.getDescription();\n\n if (escapeHTML) {\n if (descriptions.some((desc) => {\n return htmlRegex.test(desc);\n })) {\n const line = utils.setDescriptionLines(htmlRegex, htmlReplacer);\n utils.reportJSDoc('You have unescaped HTML characters < or &', {\n line,\n }, () => {}, true);\n return;\n }\n\n for (const tag of jsdoc.tags) {\n if (tag.tag === 'example') {\n continue;\n }\n\n if (/** @type {string[]} */ (\n utils.getTagDescription(tag, true)\n ).some((desc) => {\n return htmlRegex.test(desc);\n })) {\n const line = utils.setTagDescription(tag, htmlRegex, htmlReplacer) +\n tag.source[0].number;\n utils.reportJSDoc('You have unescaped HTML characters < or & in a tag', {\n line,\n }, () => {}, true);\n }\n }\n\n return;\n }\n\n if (descriptions.some((desc) => {\n return markdownRegex.test(desc);\n })) {\n const line = utils.setDescriptionLines(markdownRegex, markdownReplacer);\n utils.reportJSDoc('You have unescaped Markdown backtick sequences', {\n line,\n }, () => {}, true);\n return;\n }\n\n for (const tag of jsdoc.tags) {\n if (tag.tag === 'example') {\n continue;\n }\n\n if (/** @type {string[]} */ (\n utils.getTagDescription(tag, true)\n ).some((desc) => {\n return markdownRegex.test(desc);\n })) {\n const line = utils.setTagDescription(\n tag, markdownRegex, markdownReplacer,\n ) + tag.source[0].number;\n utils.reportJSDoc(\n 'You have unescaped Markdown backtick sequences in a tag',\n {\n line,\n },\n () => {},\n true,\n );\n }\n }\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Auto-escape certain characters that are input within block and tag descriptions.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/text-escaping.md#repos-sticky-header',\n },\n fixable: 'code',\n schema: [\n {\n additionalProperties: false,\n properties: {\n escapeHTML: {\n description: `This option escapes all \\`<\\` and \\`&\\` characters (except those followed by\nwhitespace which are treated as literals by Visual Studio Code). Defaults to\n\\`false\\`.`,\n type: 'boolean',\n },\n escapeMarkdown: {\n description: `This option escapes the first backtick (\\`\\` \\` \\`\\`) in a paired sequence.\nDefaults to \\`false\\`.`,\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -298,46 +298,83 @@ var _default = exports.default = (0, _iterateJsdoc.default)(({
|
|
|
298
298
|
additionalProperties: false,
|
|
299
299
|
properties: {
|
|
300
300
|
arrayBrackets: {
|
|
301
|
-
|
|
301
|
+
description: 'Determines how array generics are represented. Set to `angle` for the style `Array<type>` or `square` for the style `type[]`. Defaults to "square".',
|
|
302
|
+
enum: ['angle', 'square'],
|
|
303
|
+
type: 'string'
|
|
302
304
|
},
|
|
303
305
|
enableFixer: {
|
|
306
|
+
description: 'Whether to enable the fixer. Defaults to `true`.',
|
|
304
307
|
type: 'boolean'
|
|
305
308
|
},
|
|
306
309
|
genericDot: {
|
|
310
|
+
description: 'Boolean value of whether to use a dot before the angled brackets of a generic (e.g., `SomeType.<AnotherType>`). Defaults to `false`.',
|
|
307
311
|
type: 'boolean'
|
|
308
312
|
},
|
|
309
313
|
objectFieldIndent: {
|
|
314
|
+
description: `A string indicating the whitespace to be added on each line preceding an
|
|
315
|
+
object property-value field. Defaults to the empty string.`,
|
|
310
316
|
type: 'string'
|
|
311
317
|
},
|
|
312
318
|
objectFieldQuote: {
|
|
319
|
+
description: `Whether and how object field properties should be quoted (e.g., \`{"a": string}\`).
|
|
320
|
+
Set to \`single\`, \`double\`, or \`null\`. Defaults to \`null\` (no quotes unless
|
|
321
|
+
required due to special characters within the field). Digits will be kept as is,
|
|
322
|
+
regardless of setting (they can either represent a digit or a string digit).`,
|
|
313
323
|
enum: ['double', 'single', null]
|
|
314
324
|
},
|
|
315
325
|
objectFieldSeparator: {
|
|
316
|
-
|
|
326
|
+
description: `For object properties, specify whether a "semicolon", "comma", "linebreak",
|
|
327
|
+
"semicolon-and-linebreak", or "comma-and-linebreak" should be used after
|
|
328
|
+
each object property-value pair.
|
|
329
|
+
|
|
330
|
+
Defaults to \`"comma"\`.`,
|
|
331
|
+
enum: ['comma', 'comma-and-linebreak', 'linebreak', 'semicolon', 'semicolon-and-linebreak'],
|
|
332
|
+
type: 'string'
|
|
317
333
|
},
|
|
318
334
|
objectFieldSeparatorOptionalLinebreak: {
|
|
335
|
+
description: `Whether \`objectFieldSeparator\` set to \`"semicolon-and-linebreak"\` or
|
|
336
|
+
\`"comma-and-linebreak"\` should be allowed to optionally drop the linebreak.
|
|
337
|
+
|
|
338
|
+
Defaults to \`true\`.`,
|
|
319
339
|
type: 'boolean'
|
|
320
340
|
},
|
|
321
341
|
objectFieldSeparatorTrailingPunctuation: {
|
|
342
|
+
description: `If \`separatorForSingleObjectField\` is not in effect (i.e., if it is \`false\`
|
|
343
|
+
or there are multiple property-value object fields present), this property
|
|
344
|
+
will determine whether to add punctuation corresponding to the
|
|
345
|
+
\`objectFieldSeparator\` (e.g., a semicolon) to the final object field.
|
|
346
|
+
Defaults to \`false\`.`,
|
|
322
347
|
type: 'boolean'
|
|
323
348
|
},
|
|
324
|
-
//
|
|
325
|
-
//
|
|
326
|
-
//
|
|
327
|
-
//
|
|
328
|
-
//
|
|
329
|
-
//
|
|
330
|
-
//
|
|
349
|
+
// propertyQuotes: {
|
|
350
|
+
// description: `Whether and how namepath properties should be quoted (e.g., \`ab."cd"."ef"\`).
|
|
351
|
+
// Set to \`single\`, \`double\`, or \`null\`. Defaults to \`null\` (no quotes unless
|
|
352
|
+
// required due to whitespace within the property).`,
|
|
353
|
+
// enum: [
|
|
354
|
+
// 'double',
|
|
355
|
+
// 'single',
|
|
356
|
+
// null,
|
|
357
|
+
// ],
|
|
358
|
+
// },
|
|
331
359
|
separatorForSingleObjectField: {
|
|
360
|
+
description: `Whether to apply the \`objectFieldSeparator\` (e.g., a semicolon) when there
|
|
361
|
+
is only one property-value object field present. Defaults to \`false\`.`,
|
|
332
362
|
type: 'boolean'
|
|
333
363
|
},
|
|
334
364
|
stringQuotes: {
|
|
335
|
-
|
|
365
|
+
description: `How string literals should be quoted (e.g., \`"abc"\`). Set to \`single\`
|
|
366
|
+
or \`double\`. Defaults to 'single'.`,
|
|
367
|
+
enum: ['double', 'single'],
|
|
368
|
+
type: 'string'
|
|
336
369
|
},
|
|
337
370
|
typeBracketSpacing: {
|
|
371
|
+
description: `A string of spaces that will be added immediately after the type's initial
|
|
372
|
+
curly bracket and immediately before its ending curly bracket. Defaults
|
|
373
|
+
to the empty string.`,
|
|
338
374
|
type: 'string'
|
|
339
375
|
},
|
|
340
376
|
unionSpacing: {
|
|
377
|
+
description: 'Determines the spacing to add to unions (`|`). Defaults to a single space (`" "`).',
|
|
341
378
|
type: 'string'
|
|
342
379
|
}
|
|
343
380
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"typeFormatting.cjs","names":["_iterateJsdoc","_interopRequireDefault","require","_jsdoccomment","e","__esModule","default","digitRegex","_default","exports","iterateJsdoc","context","indent","jsdoc","settings","utils","arrayBrackets","enableFixer","genericDot","objectFieldIndent","objectFieldQuote","objectFieldSeparator","objectFieldSeparatorOptionalLinebreak","objectFieldSeparatorTrailingPunctuation","separatorForSingleObjectField","stringQuotes","typeBracketSpacing","unionSpacing","options","mode","checkTypeFormats","tag","potentialType","type","parsedType","tryParseType","parseType","fix","typeLines","stringify","split","firstTypeLine","shift","lastTypeLine","pop","beginNameOrDescIdx","source","findIndex","tokens","name","description","nameAndDesc","slice","initialNumber","number","src","length","end","postName","postType","undefined","map","typeLine","idx","delimiter","postTag","start","push","firstTagIdx","tg","initialEndSource","find","tags","flatMap","at","errorMessages","startsWith","endsWith","test","traverse","nde","errorMessage","typeNode","left","value","meta","brackets","dot","separator","propertyIndent","trailingPunctuation","replace","key","quote","spacing","differentResult","reportJSDoc","getPresentTags","iterateAllJsdocs","docs","url","fixable","schema","additionalProperties","properties","enum","module"],"sources":["../../src/rules/typeFormatting.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc.js';\nimport {\n parse as parseType,\n stringify,\n traverse,\n tryParse as tryParseType,\n} from '@es-joy/jsdoccomment';\n\nconst digitRegex = (/^(\\d+(\\.\\d*)?|\\.\\d+)([eE][\\-+]?\\d+)?$/v);\n\nexport default iterateJsdoc(({\n context,\n indent,\n jsdoc,\n settings,\n utils,\n}) => {\n const {\n arrayBrackets = 'square',\n enableFixer = true,\n genericDot = false,\n objectFieldIndent = '',\n objectFieldQuote = null,\n objectFieldSeparator = 'comma',\n objectFieldSeparatorOptionalLinebreak = true,\n objectFieldSeparatorTrailingPunctuation = false,\n // propertyQuotes = null,\n separatorForSingleObjectField = false,\n stringQuotes = 'single',\n typeBracketSpacing = '',\n unionSpacing = ' ',\n } = context.options[0] || {};\n\n const {\n mode,\n } = settings;\n\n /**\n * @param {import('@es-joy/jsdoccomment').JsdocTagWithInline} tag\n */\n const checkTypeFormats = (tag) => {\n const potentialType = tag.type;\n let parsedType;\n try {\n parsedType = mode === 'permissive' ?\n tryParseType(/** @type {string} */ (potentialType)) :\n parseType(/** @type {string} */ (potentialType), mode);\n } catch {\n return;\n }\n\n const fix = () => {\n const typeLines = stringify(parsedType).split('\\n');\n const firstTypeLine = typeLines.shift();\n const lastTypeLine = typeLines.pop();\n\n const beginNameOrDescIdx = tag.source.findIndex(({\n tokens,\n }) => {\n return tokens.name || tokens.description;\n });\n\n const nameAndDesc = beginNameOrDescIdx === -1 ?\n null :\n tag.source.slice(beginNameOrDescIdx);\n\n const initialNumber = tag.source[0].number;\n const src = [\n // Get inevitably present tag from first `tag.source`\n {\n number: initialNumber,\n source: '',\n tokens: {\n ...tag.source[0].tokens,\n ...(typeLines.length || lastTypeLine ? {\n end: '',\n name: '',\n postName: '',\n postType: '',\n } : {}),\n type: '{' + typeBracketSpacing + firstTypeLine + (!typeLines.length && lastTypeLine === undefined ? typeBracketSpacing + '}' : ''),\n },\n },\n // Get any intervening type lines\n ...(typeLines.length ? typeLines.map((typeLine, idx) => {\n return {\n number: initialNumber + idx + 1,\n source: '',\n tokens: {\n // Grab any delimiter info from first item\n ...tag.source[0].tokens,\n delimiter: tag.source[0].tokens.delimiter === '/**' ? '*' : tag.source[0].tokens.delimiter,\n end: '',\n name: '',\n postName: '',\n postTag: '',\n postType: '',\n start: indent + ' ',\n tag: '',\n type: typeLine,\n },\n };\n }) : []),\n ];\n\n // Merge any final type line and name and description\n if (\n // Name and description may be already included if present with the tag\n nameAndDesc && beginNameOrDescIdx > 0\n ) {\n src.push({\n number: src.length + 1,\n source: '',\n tokens: {\n ...nameAndDesc[0].tokens,\n type: lastTypeLine + typeBracketSpacing + '}',\n },\n });\n\n if (\n // Get any remaining description lines\n nameAndDesc.length > 1\n ) {\n src.push(\n ...nameAndDesc.slice(1).map(({\n source,\n tokens,\n }, idx) => {\n return {\n number: src.length + idx + 2,\n source,\n tokens,\n };\n }),\n );\n }\n } else if (nameAndDesc) {\n if (lastTypeLine) {\n src.push({\n number: src.length + 1,\n source: '',\n tokens: {\n ...nameAndDesc[0].tokens,\n delimiter: nameAndDesc[0].tokens.delimiter === '/**' ? '*' : nameAndDesc[0].tokens.delimiter,\n postTag: '',\n start: indent + ' ',\n tag: '',\n type: lastTypeLine + typeBracketSpacing + '}',\n },\n });\n }\n\n if (\n // Get any remaining description lines\n nameAndDesc.length > 1\n ) {\n src.push(\n ...nameAndDesc.slice(1).map(({\n source,\n tokens,\n }, idx) => {\n return {\n number: src.length + idx + 2,\n source,\n tokens,\n };\n }),\n );\n }\n }\n\n tag.source = src;\n\n // Properly rewire `jsdoc.source`\n const firstTagIdx = jsdoc.source.findIndex(({\n tokens: {\n tag: tg,\n },\n }) => {\n return tg;\n });\n\n const initialEndSource = jsdoc.source.find(({\n tokens: {\n end,\n },\n }) => {\n return end;\n });\n\n jsdoc.source = [\n ...jsdoc.source.slice(0, firstTagIdx),\n ...jsdoc.tags.flatMap(({\n source,\n }) => {\n return source;\n }),\n ];\n\n if (initialEndSource && !jsdoc.source.at(-1)?.tokens?.end) {\n jsdoc.source.push(initialEndSource);\n }\n };\n\n /** @type {string[]} */\n const errorMessages = [];\n\n if (typeBracketSpacing && (!tag.type.startsWith(typeBracketSpacing) || !tag.type.endsWith(typeBracketSpacing))) {\n errorMessages.push(`Must have initial and final \"${typeBracketSpacing}\" spacing`);\n } else if (!typeBracketSpacing && ((/^\\s/v).test(tag.type) || (/\\s$/v).test(tag.type))) {\n errorMessages.push('Must have no initial spacing');\n }\n\n // eslint-disable-next-line complexity -- Todo\n traverse(parsedType, (nde) => {\n let errorMessage = '';\n\n switch (nde.type) {\n case 'JsdocTypeGeneric': {\n const typeNode = /** @type {import('jsdoc-type-pratt-parser').GenericResult} */ (nde);\n if ('value' in typeNode.left && typeNode.left.value === 'Array') {\n if (typeNode.meta.brackets !== arrayBrackets) {\n typeNode.meta.brackets = arrayBrackets;\n errorMessage = `Array bracket style should be ${arrayBrackets}`;\n }\n } else if (typeNode.meta.dot !== genericDot) {\n typeNode.meta.dot = genericDot;\n errorMessage = `Dot usage should be ${genericDot}`;\n }\n\n break;\n }\n\n case 'JsdocTypeObject': {\n const typeNode = /** @type {import('jsdoc-type-pratt-parser').ObjectResult} */ (nde);\n /* c8 ignore next -- Guard */\n const separator = typeNode.meta.separator ?? 'comma';\n if (\n (separator !== objectFieldSeparator &&\n (!objectFieldSeparatorOptionalLinebreak ||\n !(objectFieldSeparator.endsWith('-linebreak') &&\n objectFieldSeparator.startsWith(separator)))) ||\n (typeNode.meta.separatorForSingleObjectField ?? false) !== separatorForSingleObjectField ||\n ((typeNode.meta.propertyIndent ?? '') !== objectFieldIndent &&\n separator.endsWith('-linebreak')) ||\n (typeNode.meta.trailingPunctuation ?? false) !== objectFieldSeparatorTrailingPunctuation\n ) {\n typeNode.meta.separator = objectFieldSeparatorOptionalLinebreak && !separator.endsWith('and-linebreak') ?\n objectFieldSeparator.replace(/-and-linebreak$/v, '') :\n objectFieldSeparator;\n typeNode.meta.separatorForSingleObjectField = separatorForSingleObjectField;\n typeNode.meta.propertyIndent = objectFieldIndent;\n typeNode.meta.trailingPunctuation = objectFieldSeparatorTrailingPunctuation;\n errorMessage = `Inconsistent ${objectFieldSeparator} separator usage`;\n }\n\n break;\n }\n\n case 'JsdocTypeObjectField': {\n const typeNode = /** @type {import('jsdoc-type-pratt-parser').ObjectFieldResult} */ (nde);\n if ((objectFieldQuote ||\n (typeof typeNode.key === 'string' &&\n (\n (/^[\\p{ID_Start}$_][\\p{ID_Continue}$\\u200C\\u200D]*$/v).test(typeNode.key) ||\n digitRegex.test(typeNode.key)\n )\n )) &&\n typeNode.meta.quote !== (objectFieldQuote ?? undefined) &&\n (typeof typeNode.key !== 'string' ||\n !digitRegex.test(typeNode.key))\n ) {\n typeNode.meta.quote = objectFieldQuote ?? undefined;\n errorMessage = `Inconsistent object field quotes ${objectFieldQuote}`;\n }\n\n break;\n }\n\n // Only suitable for namepaths (and would need changes); see https://github.com/gajus/eslint-plugin-jsdoc/issues/1524\n // case 'JsdocTypeProperty': {\n // const typeNode = /** @type {import('jsdoc-type-pratt-parser').PropertyResult} */ (nde);\n\n // if ((propertyQuotes ||\n // (typeof typeNode.value === 'string' && !(/\\s/v).test(typeNode.value))) &&\n // typeNode.meta.quote !== (propertyQuotes ?? undefined)\n // ) {\n // typeNode.meta.quote = propertyQuotes ?? undefined;\n // errorMessage = `Inconsistent ${propertyQuotes} property quotes usage`;\n // }\n\n // break;\n // }\n\n case 'JsdocTypeStringValue': {\n const typeNode = /** @type {import('jsdoc-type-pratt-parser').StringValueResult} */ (nde);\n if (typeNode.meta.quote !== stringQuotes) {\n typeNode.meta.quote = stringQuotes;\n errorMessage = `Inconsistent ${stringQuotes} string quotes usage`;\n }\n\n break;\n }\n\n case 'JsdocTypeUnion': {\n const typeNode = /** @type {import('jsdoc-type-pratt-parser').UnionResult} */ (nde);\n /* c8 ignore next -- Guard */\n if ((typeNode.meta?.spacing ?? ' ') !== unionSpacing) {\n typeNode.meta = {\n spacing: unionSpacing,\n };\n errorMessage = `Inconsistent \"${unionSpacing}\" union spacing usage`;\n }\n\n break;\n }\n\n default:\n break;\n }\n\n if (errorMessage) {\n errorMessages.push(errorMessage);\n }\n });\n\n const differentResult = tag.type !==\n typeBracketSpacing + stringify(parsedType) + typeBracketSpacing;\n\n if (errorMessages.length && differentResult) {\n for (const errorMessage of errorMessages) {\n utils.reportJSDoc(\n errorMessage, tag, enableFixer ? fix : null,\n );\n }\n // Stringification may have been equal previously (and thus no error reported)\n // because the stringification doesn't preserve everything\n } else if (differentResult) {\n utils.reportJSDoc(\n 'There was an error with type formatting', tag, enableFixer ? fix : null,\n );\n }\n };\n\n const tags = utils.getPresentTags([\n 'param',\n 'property',\n 'returns',\n 'this',\n 'throws',\n 'type',\n 'typedef',\n 'yields',\n ]);\n for (const tag of tags) {\n if (tag.type) {\n checkTypeFormats(tag);\n }\n }\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Formats JSDoc type values.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/type-formatting.md#repos-sticky-header',\n },\n fixable: 'code',\n schema: [\n {\n additionalProperties: false,\n properties: {\n arrayBrackets: {\n enum: [\n 'angle',\n 'square',\n ],\n },\n enableFixer: {\n type: 'boolean',\n },\n genericDot: {\n type: 'boolean',\n },\n objectFieldIndent: {\n type: 'string',\n },\n objectFieldQuote: {\n enum: [\n 'double',\n 'single',\n null,\n ],\n },\n objectFieldSeparator: {\n enum: [\n 'comma',\n 'comma-and-linebreak',\n 'linebreak',\n 'semicolon',\n 'semicolon-and-linebreak',\n ],\n },\n objectFieldSeparatorOptionalLinebreak: {\n type: 'boolean',\n },\n objectFieldSeparatorTrailingPunctuation: {\n type: 'boolean',\n },\n // propertyQuotes: {\n // enum: [\n // 'double',\n // 'single',\n // null,\n // ],\n // },\n separatorForSingleObjectField: {\n type: 'boolean',\n },\n stringQuotes: {\n enum: [\n 'double',\n 'single',\n ],\n },\n typeBracketSpacing: {\n type: 'string',\n },\n unionSpacing: {\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":"typeFormatting.cjs","names":["_iterateJsdoc","_interopRequireDefault","require","_jsdoccomment","e","__esModule","default","digitRegex","_default","exports","iterateJsdoc","context","indent","jsdoc","settings","utils","arrayBrackets","enableFixer","genericDot","objectFieldIndent","objectFieldQuote","objectFieldSeparator","objectFieldSeparatorOptionalLinebreak","objectFieldSeparatorTrailingPunctuation","separatorForSingleObjectField","stringQuotes","typeBracketSpacing","unionSpacing","options","mode","checkTypeFormats","tag","potentialType","type","parsedType","tryParseType","parseType","fix","typeLines","stringify","split","firstTypeLine","shift","lastTypeLine","pop","beginNameOrDescIdx","source","findIndex","tokens","name","description","nameAndDesc","slice","initialNumber","number","src","length","end","postName","postType","undefined","map","typeLine","idx","delimiter","postTag","start","push","firstTagIdx","tg","initialEndSource","find","tags","flatMap","at","errorMessages","startsWith","endsWith","test","traverse","nde","errorMessage","typeNode","left","value","meta","brackets","dot","separator","propertyIndent","trailingPunctuation","replace","key","quote","spacing","differentResult","reportJSDoc","getPresentTags","iterateAllJsdocs","docs","url","fixable","schema","additionalProperties","properties","enum","module"],"sources":["../../src/rules/typeFormatting.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc.js';\nimport {\n parse as parseType,\n stringify,\n traverse,\n tryParse as tryParseType,\n} from '@es-joy/jsdoccomment';\n\nconst digitRegex = (/^(\\d+(\\.\\d*)?|\\.\\d+)([eE][\\-+]?\\d+)?$/v);\n\nexport default iterateJsdoc(({\n context,\n indent,\n jsdoc,\n settings,\n utils,\n}) => {\n const {\n arrayBrackets = 'square',\n enableFixer = true,\n genericDot = false,\n objectFieldIndent = '',\n objectFieldQuote = null,\n objectFieldSeparator = 'comma',\n objectFieldSeparatorOptionalLinebreak = true,\n objectFieldSeparatorTrailingPunctuation = false,\n // propertyQuotes = null,\n separatorForSingleObjectField = false,\n stringQuotes = 'single',\n typeBracketSpacing = '',\n unionSpacing = ' ',\n } = context.options[0] || {};\n\n const {\n mode,\n } = settings;\n\n /**\n * @param {import('@es-joy/jsdoccomment').JsdocTagWithInline} tag\n */\n const checkTypeFormats = (tag) => {\n const potentialType = tag.type;\n let parsedType;\n try {\n parsedType = mode === 'permissive' ?\n tryParseType(/** @type {string} */ (potentialType)) :\n parseType(/** @type {string} */ (potentialType), mode);\n } catch {\n return;\n }\n\n const fix = () => {\n const typeLines = stringify(parsedType).split('\\n');\n const firstTypeLine = typeLines.shift();\n const lastTypeLine = typeLines.pop();\n\n const beginNameOrDescIdx = tag.source.findIndex(({\n tokens,\n }) => {\n return tokens.name || tokens.description;\n });\n\n const nameAndDesc = beginNameOrDescIdx === -1 ?\n null :\n tag.source.slice(beginNameOrDescIdx);\n\n const initialNumber = tag.source[0].number;\n const src = [\n // Get inevitably present tag from first `tag.source`\n {\n number: initialNumber,\n source: '',\n tokens: {\n ...tag.source[0].tokens,\n ...(typeLines.length || lastTypeLine ? {\n end: '',\n name: '',\n postName: '',\n postType: '',\n } : {}),\n type: '{' + typeBracketSpacing + firstTypeLine + (!typeLines.length && lastTypeLine === undefined ? typeBracketSpacing + '}' : ''),\n },\n },\n // Get any intervening type lines\n ...(typeLines.length ? typeLines.map((typeLine, idx) => {\n return {\n number: initialNumber + idx + 1,\n source: '',\n tokens: {\n // Grab any delimiter info from first item\n ...tag.source[0].tokens,\n delimiter: tag.source[0].tokens.delimiter === '/**' ? '*' : tag.source[0].tokens.delimiter,\n end: '',\n name: '',\n postName: '',\n postTag: '',\n postType: '',\n start: indent + ' ',\n tag: '',\n type: typeLine,\n },\n };\n }) : []),\n ];\n\n // Merge any final type line and name and description\n if (\n // Name and description may be already included if present with the tag\n nameAndDesc && beginNameOrDescIdx > 0\n ) {\n src.push({\n number: src.length + 1,\n source: '',\n tokens: {\n ...nameAndDesc[0].tokens,\n type: lastTypeLine + typeBracketSpacing + '}',\n },\n });\n\n if (\n // Get any remaining description lines\n nameAndDesc.length > 1\n ) {\n src.push(\n ...nameAndDesc.slice(1).map(({\n source,\n tokens,\n }, idx) => {\n return {\n number: src.length + idx + 2,\n source,\n tokens,\n };\n }),\n );\n }\n } else if (nameAndDesc) {\n if (lastTypeLine) {\n src.push({\n number: src.length + 1,\n source: '',\n tokens: {\n ...nameAndDesc[0].tokens,\n delimiter: nameAndDesc[0].tokens.delimiter === '/**' ? '*' : nameAndDesc[0].tokens.delimiter,\n postTag: '',\n start: indent + ' ',\n tag: '',\n type: lastTypeLine + typeBracketSpacing + '}',\n },\n });\n }\n\n if (\n // Get any remaining description lines\n nameAndDesc.length > 1\n ) {\n src.push(\n ...nameAndDesc.slice(1).map(({\n source,\n tokens,\n }, idx) => {\n return {\n number: src.length + idx + 2,\n source,\n tokens,\n };\n }),\n );\n }\n }\n\n tag.source = src;\n\n // Properly rewire `jsdoc.source`\n const firstTagIdx = jsdoc.source.findIndex(({\n tokens: {\n tag: tg,\n },\n }) => {\n return tg;\n });\n\n const initialEndSource = jsdoc.source.find(({\n tokens: {\n end,\n },\n }) => {\n return end;\n });\n\n jsdoc.source = [\n ...jsdoc.source.slice(0, firstTagIdx),\n ...jsdoc.tags.flatMap(({\n source,\n }) => {\n return source;\n }),\n ];\n\n if (initialEndSource && !jsdoc.source.at(-1)?.tokens?.end) {\n jsdoc.source.push(initialEndSource);\n }\n };\n\n /** @type {string[]} */\n const errorMessages = [];\n\n if (typeBracketSpacing && (!tag.type.startsWith(typeBracketSpacing) || !tag.type.endsWith(typeBracketSpacing))) {\n errorMessages.push(`Must have initial and final \"${typeBracketSpacing}\" spacing`);\n } else if (!typeBracketSpacing && ((/^\\s/v).test(tag.type) || (/\\s$/v).test(tag.type))) {\n errorMessages.push('Must have no initial spacing');\n }\n\n // eslint-disable-next-line complexity -- Todo\n traverse(parsedType, (nde) => {\n let errorMessage = '';\n\n switch (nde.type) {\n case 'JsdocTypeGeneric': {\n const typeNode = /** @type {import('jsdoc-type-pratt-parser').GenericResult} */ (nde);\n if ('value' in typeNode.left && typeNode.left.value === 'Array') {\n if (typeNode.meta.brackets !== arrayBrackets) {\n typeNode.meta.brackets = arrayBrackets;\n errorMessage = `Array bracket style should be ${arrayBrackets}`;\n }\n } else if (typeNode.meta.dot !== genericDot) {\n typeNode.meta.dot = genericDot;\n errorMessage = `Dot usage should be ${genericDot}`;\n }\n\n break;\n }\n\n case 'JsdocTypeObject': {\n const typeNode = /** @type {import('jsdoc-type-pratt-parser').ObjectResult} */ (nde);\n /* c8 ignore next -- Guard */\n const separator = typeNode.meta.separator ?? 'comma';\n if (\n (separator !== objectFieldSeparator &&\n (!objectFieldSeparatorOptionalLinebreak ||\n !(objectFieldSeparator.endsWith('-linebreak') &&\n objectFieldSeparator.startsWith(separator)))) ||\n (typeNode.meta.separatorForSingleObjectField ?? false) !== separatorForSingleObjectField ||\n ((typeNode.meta.propertyIndent ?? '') !== objectFieldIndent &&\n separator.endsWith('-linebreak')) ||\n (typeNode.meta.trailingPunctuation ?? false) !== objectFieldSeparatorTrailingPunctuation\n ) {\n typeNode.meta.separator = objectFieldSeparatorOptionalLinebreak && !separator.endsWith('and-linebreak') ?\n objectFieldSeparator.replace(/-and-linebreak$/v, '') :\n objectFieldSeparator;\n typeNode.meta.separatorForSingleObjectField = separatorForSingleObjectField;\n typeNode.meta.propertyIndent = objectFieldIndent;\n typeNode.meta.trailingPunctuation = objectFieldSeparatorTrailingPunctuation;\n errorMessage = `Inconsistent ${objectFieldSeparator} separator usage`;\n }\n\n break;\n }\n\n case 'JsdocTypeObjectField': {\n const typeNode = /** @type {import('jsdoc-type-pratt-parser').ObjectFieldResult} */ (nde);\n if ((objectFieldQuote ||\n (typeof typeNode.key === 'string' &&\n (\n (/^[\\p{ID_Start}$_][\\p{ID_Continue}$\\u200C\\u200D]*$/v).test(typeNode.key) ||\n digitRegex.test(typeNode.key)\n )\n )) &&\n typeNode.meta.quote !== (objectFieldQuote ?? undefined) &&\n (typeof typeNode.key !== 'string' ||\n !digitRegex.test(typeNode.key))\n ) {\n typeNode.meta.quote = objectFieldQuote ?? undefined;\n errorMessage = `Inconsistent object field quotes ${objectFieldQuote}`;\n }\n\n break;\n }\n\n // Only suitable for namepaths (and would need changes); see https://github.com/gajus/eslint-plugin-jsdoc/issues/1524\n // case 'JsdocTypeProperty': {\n // const typeNode = /** @type {import('jsdoc-type-pratt-parser').PropertyResult} */ (nde);\n\n // if ((propertyQuotes ||\n // (typeof typeNode.value === 'string' && !(/\\s/v).test(typeNode.value))) &&\n // typeNode.meta.quote !== (propertyQuotes ?? undefined)\n // ) {\n // typeNode.meta.quote = propertyQuotes ?? undefined;\n // errorMessage = `Inconsistent ${propertyQuotes} property quotes usage`;\n // }\n\n // break;\n // }\n\n case 'JsdocTypeStringValue': {\n const typeNode = /** @type {import('jsdoc-type-pratt-parser').StringValueResult} */ (nde);\n if (typeNode.meta.quote !== stringQuotes) {\n typeNode.meta.quote = stringQuotes;\n errorMessage = `Inconsistent ${stringQuotes} string quotes usage`;\n }\n\n break;\n }\n\n case 'JsdocTypeUnion': {\n const typeNode = /** @type {import('jsdoc-type-pratt-parser').UnionResult} */ (nde);\n /* c8 ignore next -- Guard */\n if ((typeNode.meta?.spacing ?? ' ') !== unionSpacing) {\n typeNode.meta = {\n spacing: unionSpacing,\n };\n errorMessage = `Inconsistent \"${unionSpacing}\" union spacing usage`;\n }\n\n break;\n }\n\n default:\n break;\n }\n\n if (errorMessage) {\n errorMessages.push(errorMessage);\n }\n });\n\n const differentResult = tag.type !==\n typeBracketSpacing + stringify(parsedType) + typeBracketSpacing;\n\n if (errorMessages.length && differentResult) {\n for (const errorMessage of errorMessages) {\n utils.reportJSDoc(\n errorMessage, tag, enableFixer ? fix : null,\n );\n }\n // Stringification may have been equal previously (and thus no error reported)\n // because the stringification doesn't preserve everything\n } else if (differentResult) {\n utils.reportJSDoc(\n 'There was an error with type formatting', tag, enableFixer ? fix : null,\n );\n }\n };\n\n const tags = utils.getPresentTags([\n 'param',\n 'property',\n 'returns',\n 'this',\n 'throws',\n 'type',\n 'typedef',\n 'yields',\n ]);\n for (const tag of tags) {\n if (tag.type) {\n checkTypeFormats(tag);\n }\n }\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Formats JSDoc type values.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/type-formatting.md#repos-sticky-header',\n },\n fixable: 'code',\n schema: [\n {\n additionalProperties: false,\n properties: {\n arrayBrackets: {\n description: 'Determines how array generics are represented. Set to `angle` for the style `Array<type>` or `square` for the style `type[]`. Defaults to \"square\".',\n enum: [\n 'angle',\n 'square',\n ],\n type: 'string',\n },\n enableFixer: {\n description: 'Whether to enable the fixer. Defaults to `true`.',\n type: 'boolean',\n },\n genericDot: {\n description: 'Boolean value of whether to use a dot before the angled brackets of a generic (e.g., `SomeType.<AnotherType>`). Defaults to `false`.',\n type: 'boolean',\n },\n objectFieldIndent: {\n description: `A string indicating the whitespace to be added on each line preceding an\nobject property-value field. Defaults to the empty string.`,\n type: 'string',\n },\n objectFieldQuote: {\n description: `Whether and how object field properties should be quoted (e.g., \\`{\"a\": string}\\`).\nSet to \\`single\\`, \\`double\\`, or \\`null\\`. Defaults to \\`null\\` (no quotes unless\nrequired due to special characters within the field). Digits will be kept as is,\nregardless of setting (they can either represent a digit or a string digit).`,\n enum: [\n 'double',\n 'single',\n null,\n ],\n },\n objectFieldSeparator: {\n description: `For object properties, specify whether a \"semicolon\", \"comma\", \"linebreak\",\n\"semicolon-and-linebreak\", or \"comma-and-linebreak\" should be used after\neach object property-value pair.\n\nDefaults to \\`\"comma\"\\`.`,\n enum: [\n 'comma',\n 'comma-and-linebreak',\n 'linebreak',\n 'semicolon',\n 'semicolon-and-linebreak',\n ],\n type: 'string',\n },\n objectFieldSeparatorOptionalLinebreak: {\n description: `Whether \\`objectFieldSeparator\\` set to \\`\"semicolon-and-linebreak\"\\` or\n\\`\"comma-and-linebreak\"\\` should be allowed to optionally drop the linebreak.\n\nDefaults to \\`true\\`.`,\n type: 'boolean',\n },\n objectFieldSeparatorTrailingPunctuation: {\n description: `If \\`separatorForSingleObjectField\\` is not in effect (i.e., if it is \\`false\\`\nor there are multiple property-value object fields present), this property\nwill determine whether to add punctuation corresponding to the\n\\`objectFieldSeparator\\` (e.g., a semicolon) to the final object field.\nDefaults to \\`false\\`.`,\n type: 'boolean',\n },\n // propertyQuotes: {\n // description: `Whether and how namepath properties should be quoted (e.g., \\`ab.\"cd\".\"ef\"\\`).\n // Set to \\`single\\`, \\`double\\`, or \\`null\\`. Defaults to \\`null\\` (no quotes unless\n // required due to whitespace within the property).`,\n // enum: [\n // 'double',\n // 'single',\n // null,\n // ],\n // },\n separatorForSingleObjectField: {\n description: `Whether to apply the \\`objectFieldSeparator\\` (e.g., a semicolon) when there\nis only one property-value object field present. Defaults to \\`false\\`.`,\n type: 'boolean',\n },\n stringQuotes: {\n description: `How string literals should be quoted (e.g., \\`\"abc\"\\`). Set to \\`single\\`\nor \\`double\\`. Defaults to 'single'.`,\n enum: [\n 'double',\n 'single',\n ],\n type: 'string',\n },\n typeBracketSpacing: {\n description: `A string of spaces that will be added immediately after the type's initial\ncurly bracket and immediately before its ending curly bracket. Defaults\nto the empty string.`,\n type: 'string',\n },\n unionSpacing: {\n description: 'Determines the spacing to add to unions (`|`). Defaults to a single space (`\" \"`).',\n type: 'string',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"mappings":"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","ignoreList":[]}
|