summaryrefslogtreecommitdiff
path: root/tools/node_modules/eslint/node_modules/eslint-plugin-jsdoc/dist/rules/tagLines.js
diff options
context:
space:
mode:
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.js116
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: {