Initial import with skill sheet working
This commit is contained in:
237
node_modules/eslint-plugin-jsdoc/dist/rules/multilineBlocks.cjs
generated
vendored
Normal file
237
node_modules/eslint-plugin-jsdoc/dist/rules/multilineBlocks.cjs
generated
vendored
Normal file
@ -0,0 +1,237 @@
|
||||
"use strict";
|
||||
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
exports.default = void 0;
|
||||
var _iterateJsdoc = _interopRequireDefault(require("../iterateJsdoc.cjs"));
|
||||
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
||||
var _default = exports.default = (0, _iterateJsdoc.default)(({
|
||||
context,
|
||||
jsdoc,
|
||||
utils
|
||||
}) => {
|
||||
const {
|
||||
allowMultipleTags = true,
|
||||
noFinalLineText = true,
|
||||
noZeroLineText = true,
|
||||
noSingleLineBlocks = false,
|
||||
singleLineTags = ['lends', 'type'],
|
||||
noMultilineBlocks = false,
|
||||
minimumLengthForMultiline = Number.POSITIVE_INFINITY,
|
||||
multilineTags = ['*']
|
||||
} = context.options[0] || {};
|
||||
const {
|
||||
source: [{
|
||||
tokens
|
||||
}]
|
||||
} = jsdoc;
|
||||
const {
|
||||
description,
|
||||
tag
|
||||
} = tokens;
|
||||
const sourceLength = jsdoc.source.length;
|
||||
|
||||
/**
|
||||
* @param {string} tagName
|
||||
* @returns {boolean}
|
||||
*/
|
||||
const isInvalidSingleLine = tagName => {
|
||||
return noSingleLineBlocks && (!tagName || !singleLineTags.includes(tagName) && !singleLineTags.includes('*'));
|
||||
};
|
||||
if (sourceLength === 1) {
|
||||
if (!isInvalidSingleLine(tag.slice(1))) {
|
||||
return;
|
||||
}
|
||||
const fixer = () => {
|
||||
utils.makeMultiline();
|
||||
};
|
||||
utils.reportJSDoc('Single line blocks are not permitted by your configuration.', null, fixer, true);
|
||||
return;
|
||||
}
|
||||
const lineChecks = () => {
|
||||
if (noZeroLineText && (tag || description)) {
|
||||
const fixer = () => {
|
||||
const line = {
|
||||
...tokens
|
||||
};
|
||||
utils.emptyTokens(tokens);
|
||||
const {
|
||||
tokens: {
|
||||
delimiter,
|
||||
start
|
||||
}
|
||||
} = jsdoc.source[1];
|
||||
utils.addLine(1, {
|
||||
...line,
|
||||
delimiter,
|
||||
start
|
||||
});
|
||||
};
|
||||
utils.reportJSDoc('Should have no text on the "0th" line (after the `/**`).', null, fixer);
|
||||
return;
|
||||
}
|
||||
const finalLine = jsdoc.source[jsdoc.source.length - 1];
|
||||
const finalLineTokens = finalLine.tokens;
|
||||
if (noFinalLineText && finalLineTokens.description.trim()) {
|
||||
const fixer = () => {
|
||||
const line = {
|
||||
...finalLineTokens
|
||||
};
|
||||
line.description = line.description.trimEnd();
|
||||
const {
|
||||
delimiter
|
||||
} = line;
|
||||
for (const prop of ['delimiter', 'postDelimiter', 'tag', 'type', 'lineEnd', 'postType', 'postTag', 'name', 'postName', 'description']) {
|
||||
finalLineTokens[(
|
||||
/**
|
||||
* @type {"delimiter"|"postDelimiter"|"tag"|"type"|
|
||||
* "lineEnd"|"postType"|"postTag"|"name"|
|
||||
* "postName"|"description"}
|
||||
*/
|
||||
prop)] = '';
|
||||
}
|
||||
utils.addLine(jsdoc.source.length - 1, {
|
||||
...line,
|
||||
delimiter,
|
||||
end: ''
|
||||
});
|
||||
};
|
||||
utils.reportJSDoc('Should have no text on the final line (before the `*/`).', null, fixer);
|
||||
}
|
||||
};
|
||||
if (noMultilineBlocks) {
|
||||
if (jsdoc.tags.length && (multilineTags.includes('*') || utils.hasATag(multilineTags))) {
|
||||
lineChecks();
|
||||
return;
|
||||
}
|
||||
if (jsdoc.description.length >= minimumLengthForMultiline) {
|
||||
lineChecks();
|
||||
return;
|
||||
}
|
||||
if (noSingleLineBlocks && (!jsdoc.tags.length || !utils.filterTags(({
|
||||
tag: tg
|
||||
}) => {
|
||||
return !isInvalidSingleLine(tg);
|
||||
}).length)) {
|
||||
utils.reportJSDoc('Multiline jsdoc blocks are prohibited by ' + 'your configuration but fixing would result in a single ' + 'line block which you have prohibited with `noSingleLineBlocks`.');
|
||||
return;
|
||||
}
|
||||
if (jsdoc.tags.length > 1) {
|
||||
if (!allowMultipleTags) {
|
||||
utils.reportJSDoc('Multiline jsdoc blocks are prohibited by ' + 'your configuration but the block has multiple tags.');
|
||||
return;
|
||||
}
|
||||
} else if (jsdoc.tags.length === 1 && jsdoc.description.trim()) {
|
||||
if (!allowMultipleTags) {
|
||||
utils.reportJSDoc('Multiline jsdoc blocks are prohibited by ' + 'your configuration but the block has a description with a tag.');
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
const fixer = () => {
|
||||
jsdoc.source = [{
|
||||
number: 1,
|
||||
source: '',
|
||||
tokens: jsdoc.source.reduce((obj, {
|
||||
tokens: {
|
||||
description: desc,
|
||||
tag: tg,
|
||||
type: typ,
|
||||
name: nme,
|
||||
lineEnd,
|
||||
postType,
|
||||
postName,
|
||||
postTag
|
||||
}
|
||||
}) => {
|
||||
if (typ) {
|
||||
obj.type = typ;
|
||||
}
|
||||
if (tg && typ && nme) {
|
||||
obj.postType = postType;
|
||||
}
|
||||
if (nme) {
|
||||
obj.name += nme;
|
||||
}
|
||||
if (nme && desc) {
|
||||
obj.postName = postName;
|
||||
}
|
||||
obj.description += desc;
|
||||
const nameOrDescription = obj.description || obj.name;
|
||||
if (nameOrDescription && nameOrDescription.slice(-1) !== ' ') {
|
||||
obj.description += ' ';
|
||||
}
|
||||
obj.lineEnd = lineEnd;
|
||||
|
||||
// Already filtered for multiple tags
|
||||
obj.tag += tg;
|
||||
if (tg) {
|
||||
obj.postTag = postTag || ' ';
|
||||
}
|
||||
return obj;
|
||||
}, utils.seedTokens({
|
||||
delimiter: '/**',
|
||||
end: '*/',
|
||||
postDelimiter: ' '
|
||||
}))
|
||||
}];
|
||||
};
|
||||
utils.reportJSDoc('Multiline jsdoc blocks are prohibited by ' + 'your configuration.', null, fixer);
|
||||
return;
|
||||
}
|
||||
}
|
||||
lineChecks();
|
||||
}, {
|
||||
iterateAllJsdocs: true,
|
||||
meta: {
|
||||
docs: {
|
||||
description: 'Controls how and whether jsdoc blocks can be expressed as single or multiple line blocks.',
|
||||
url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/multiline-blocks.md#repos-sticky-header'
|
||||
},
|
||||
fixable: 'code',
|
||||
schema: [{
|
||||
additionalProperties: false,
|
||||
properties: {
|
||||
allowMultipleTags: {
|
||||
type: 'boolean'
|
||||
},
|
||||
minimumLengthForMultiline: {
|
||||
type: 'integer'
|
||||
},
|
||||
multilineTags: {
|
||||
anyOf: [{
|
||||
enum: ['*'],
|
||||
type: 'string'
|
||||
}, {
|
||||
items: {
|
||||
type: 'string'
|
||||
},
|
||||
type: 'array'
|
||||
}]
|
||||
},
|
||||
noFinalLineText: {
|
||||
type: 'boolean'
|
||||
},
|
||||
noMultilineBlocks: {
|
||||
type: 'boolean'
|
||||
},
|
||||
noSingleLineBlocks: {
|
||||
type: 'boolean'
|
||||
},
|
||||
noZeroLineText: {
|
||||
type: 'boolean'
|
||||
},
|
||||
singleLineTags: {
|
||||
items: {
|
||||
type: 'string'
|
||||
},
|
||||
type: 'array'
|
||||
}
|
||||
},
|
||||
type: 'object'
|
||||
}],
|
||||
type: 'suggestion'
|
||||
}
|
||||
});
|
||||
module.exports = exports.default;
|
||||
//# sourceMappingURL=multilineBlocks.cjs.map
|
Reference in New Issue
Block a user