diff options
Diffstat (limited to 'tools/node_modules/eslint/node_modules/eslint-plugin-jsdoc/dist/rules/tagLines.js')
-rw-r--r-- | tools/node_modules/eslint/node_modules/eslint-plugin-jsdoc/dist/rules/tagLines.js | 116 |
1 files changed, 101 insertions, 15 deletions
diff --git a/tools/node_modules/eslint/node_modules/eslint-plugin-jsdoc/dist/rules/tagLines.js b/tools/node_modules/eslint/node_modules/eslint-plugin-jsdoc/dist/rules/tagLines.js index 88ecce9a2b..0143787114 100644 --- a/tools/node_modules/eslint/node_modules/eslint-plugin-jsdoc/dist/rules/tagLines.js +++ b/tools/node_modules/eslint/node_modules/eslint-plugin-jsdoc/dist/rules/tagLines.js @@ -13,14 +13,18 @@ var _default = (0, _iterateJsdoc.default)(({ }) => { const [alwaysNever = 'never', { count = 1, - dropEndLines = false, - noEndLines = false, + endLines = 0, + startLines = 0, + applyToEndTag = true, tags = {} } = {}] = context.options; + + // eslint-disable-next-line complexity -- Temporary jsdoc.tags.some((tg, tagIdx) => { let lastTag; let lastEmpty = null; let reportIndex = null; + let emptyLinesCount = 0; for (const [idx, { tokens: { tag, @@ -44,22 +48,41 @@ var _default = (0, _iterateJsdoc.default)(({ continue; } if (!end) { + if (empty) { + emptyLinesCount++; + } else { + emptyLinesCount = 0; + } lastEmpty = empty ? idx : null; } lastTag = tag; } - if (dropEndLines && lastEmpty !== null && tagIdx === jsdoc.tags.length - 1) { - const fixer = () => { - utils.removeTagItem(tagIdx, lastEmpty); - }; - utils.reportJSDoc('Expected no trailing lines', { - line: tg.source[lastEmpty].number - }, fixer); + if (typeof endLines === 'number' && lastEmpty !== null && tagIdx === jsdoc.tags.length - 1) { + const lineDiff = endLines - emptyLinesCount; + if (lineDiff < 0) { + const fixer = () => { + utils.removeTag(tagIdx, { + tagSourceOffset: lastEmpty + lineDiff + 1 + }); + }; + utils.reportJSDoc(`Expected ${endLines} trailing lines`, { + line: tg.source[lastEmpty].number + lineDiff + 1 + }, fixer); + } else if (lineDiff > 0) { + const fixer = () => { + utils.addLines(tagIdx, lastEmpty, endLines - emptyLinesCount); + }; + utils.reportJSDoc(`Expected ${endLines} trailing lines`, { + line: tg.source[lastEmpty].number + }, fixer); + } return true; } if (reportIndex !== null) { const fixer = () => { - utils.removeTagItem(tagIdx, reportIndex); + utils.removeTag(tagIdx, { + tagSourceOffset: reportIndex + }); }; utils.reportJSDoc('Expected no lines between tags', { line: tg.source[0].number + 1 @@ -68,7 +91,7 @@ var _default = (0, _iterateJsdoc.default)(({ } return false; }); - (noEndLines ? jsdoc.tags.slice(0, -1) : jsdoc.tags).some((tg, tagIdx) => { + (applyToEndTag ? jsdoc.tags : jsdoc.tags.slice(0, -1)).some((tg, tagIdx) => { const lines = []; let currentTag; let tagSourceIdx = 0; @@ -119,6 +142,58 @@ var _default = (0, _iterateJsdoc.default)(({ } return false; }); + if (typeof startLines === 'number') { + var _description$match, _description$match$; + if (!jsdoc.tags.length) { + return; + } + const { + description, + lastDescriptionLine + } = utils.getDescription(); + if (!/\S/u.test(description)) { + return; + } + const trailingLines = (_description$match = description.match(/\n+$/u)) === null || _description$match === void 0 ? void 0 : (_description$match$ = _description$match[0]) === null || _description$match$ === void 0 ? void 0 : _description$match$.length; + const trailingDiff = (trailingLines ?? 0) - startLines; + if (trailingDiff > 0) { + utils.reportJSDoc(`Expected only ${startLines} line after block description`, { + line: lastDescriptionLine - trailingDiff + }, () => { + utils.setBlockDescription((info, seedTokens, descLines) => { + return descLines.slice(0, -trailingDiff).map(desc => { + return { + tokens: seedTokens({ + ...info, + description: desc, + postDelimiter: desc.trim() ? info.postDelimiter : '' + }) + }; + }); + }); + }); + } else if (trailingDiff < 0) { + utils.reportJSDoc(`Expected ${startLines} lines after block description`, { + line: lastDescriptionLine + }, () => { + utils.setBlockDescription((info, seedTokens, descLines) => { + return [...descLines, ...Array.from({ + length: -trailingDiff + }, () => { + return ''; + })].map(desc => { + return { + tokens: seedTokens({ + ...info, + description: desc, + postDelimiter: desc.trim() ? info.postDelimiter : '' + }) + }; + }); + }); + }); + } + } }, { iterateAllJsdocs: true, meta: { @@ -133,14 +208,25 @@ var _default = (0, _iterateJsdoc.default)(({ }, { additionalProperties: false, properties: { + applyToEndTag: { + type: 'boolean' + }, count: { type: 'integer' }, - dropEndLines: { - type: 'boolean' + endLines: { + anyOf: [{ + type: 'integer' + }, { + type: 'null' + }] }, - noEndLines: { - type: 'boolean' + startLines: { + anyOf: [{ + type: 'integer' + }, { + type: 'null' + }] }, tags: { patternProperties: { |