eslint-plugin-jsdoc 51.4.1 → 52.0.1
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/dist/alignTransform.cjs +1 -1
- package/dist/alignTransform.cjs.map +1 -1
- package/dist/generateRule.cjs +5 -5
- package/dist/generateRule.cjs.map +1 -1
- package/dist/getJsdocProcessorPlugin.cjs +8 -8
- package/dist/getJsdocProcessorPlugin.cjs.map +1 -1
- package/dist/getJsdocProcessorPlugin.d.ts +92 -0
- package/dist/getJsdocProcessorPlugin.d.ts.map +1 -0
- package/dist/iterateJsdoc.cjs +3 -3
- package/dist/iterateJsdoc.cjs.map +1 -1
- package/dist/iterateJsdoc.d.ts +462 -0
- package/dist/iterateJsdoc.d.ts.map +1 -0
- package/dist/jsdocUtils.cjs +9 -9
- package/dist/jsdocUtils.cjs.map +1 -1
- package/dist/rules/checkAlignment.cjs +1 -1
- package/dist/rules/checkAlignment.cjs.map +1 -1
- package/dist/rules/checkExamples.cjs +5 -5
- package/dist/rules/checkExamples.cjs.map +1 -1
- package/dist/rules/checkIndentation.cjs +6 -6
- package/dist/rules/checkIndentation.cjs.map +1 -1
- package/dist/rules/checkLineAlignment.cjs +3 -3
- package/dist/rules/checkLineAlignment.cjs.map +1 -1
- package/dist/rules/checkTagNames.cjs +1 -1
- package/dist/rules/checkTagNames.cjs.map +1 -1
- package/dist/rules/checkTemplateNames.cjs +1 -1
- package/dist/rules/checkTemplateNames.cjs.map +1 -1
- package/dist/rules/checkTypes.cjs +2 -2
- package/dist/rules/checkTypes.cjs.map +1 -1
- package/dist/rules/checkValues.cjs +1 -1
- package/dist/rules/checkValues.cjs.map +1 -1
- package/dist/rules/emptyTags.cjs +1 -1
- package/dist/rules/emptyTags.cjs.map +1 -1
- package/dist/rules/importsAsDependencies.cjs +2 -2
- package/dist/rules/importsAsDependencies.cjs.map +1 -1
- package/dist/rules/linesBeforeBlock.cjs +1 -1
- package/dist/rules/linesBeforeBlock.cjs.map +1 -1
- package/dist/rules/matchDescription.cjs +4 -4
- package/dist/rules/matchDescription.cjs.map +1 -1
- package/dist/rules/matchName.cjs +1 -1
- package/dist/rules/matchName.cjs.map +1 -1
- package/dist/rules/noBadBlocks.cjs +2 -2
- package/dist/rules/noBadBlocks.cjs.map +1 -1
- package/dist/rules/noBlankBlockDescriptions.cjs +2 -2
- package/dist/rules/noBlankBlockDescriptions.cjs.map +1 -1
- package/dist/rules/noDefaults.cjs +2 -2
- package/dist/rules/noDefaults.cjs.map +1 -1
- package/dist/rules/noMultiAsterisks.cjs +6 -6
- package/dist/rules/noMultiAsterisks.cjs.map +1 -1
- package/dist/rules/noUndefinedTypes.cjs +4 -4
- package/dist/rules/noUndefinedTypes.cjs.map +1 -1
- package/dist/rules/requireDescriptionCompleteSentence.cjs +21 -21
- package/dist/rules/requireDescriptionCompleteSentence.cjs.map +1 -1
- package/dist/rules/requireHyphenBeforeParamDescription.cjs +3 -3
- package/dist/rules/requireHyphenBeforeParamDescription.cjs.map +1 -1
- package/dist/rules/requireJsdoc.cjs +1 -1
- package/dist/rules/requireJsdoc.cjs.map +1 -1
- package/dist/rules/requireReturnsCheck.cjs +1 -1
- package/dist/rules/requireReturnsCheck.cjs.map +1 -1
- package/dist/rules/requireTemplate.cjs +2 -2
- package/dist/rules/requireTemplate.cjs.map +1 -1
- package/dist/rules/tagLines.cjs +2 -2
- package/dist/rules/tagLines.cjs.map +1 -1
- package/dist/rules/textEscaping.cjs +4 -4
- package/dist/rules/textEscaping.cjs.map +1 -1
- package/dist/rules/validTypes.cjs +1 -1
- package/dist/rules/validTypes.cjs.map +1 -1
- package/package.json +1 -1
- package/src/alignTransform.js +1 -1
- package/src/getJsdocProcessorPlugin.js +8 -8
- package/src/iterateJsdoc.js +3 -3
- package/src/jsdocUtils.js +9 -9
- package/src/rules/checkAlignment.js +1 -1
- package/src/rules/checkExamples.js +5 -5
- package/src/rules/checkIndentation.js +6 -6
- package/src/rules/checkLineAlignment.js +3 -3
- package/src/rules/checkTagNames.js +1 -1
- package/src/rules/checkTemplateNames.js +1 -1
- package/src/rules/checkTypes.js +2 -2
- package/src/rules/checkValues.js +1 -1
- package/src/rules/emptyTags.js +1 -1
- package/src/rules/importsAsDependencies.js +2 -2
- package/src/rules/linesBeforeBlock.js +1 -1
- package/src/rules/matchDescription.js +4 -4
- package/src/rules/matchName.js +1 -1
- package/src/rules/noBadBlocks.js +2 -2
- package/src/rules/noBlankBlockDescriptions.js +2 -2
- package/src/rules/noDefaults.js +2 -2
- package/src/rules/noMultiAsterisks.js +6 -6
- package/src/rules/noUndefinedTypes.js +4 -4
- package/src/rules/requireDescriptionCompleteSentence.js +21 -21
- package/src/rules/requireHyphenBeforeParamDescription.js +3 -3
- package/src/rules/requireJsdoc.js +1 -1
- package/src/rules/requireReturnsCheck.js +1 -1
- package/src/rules/requireTemplate.js +2 -2
- package/src/rules/tagLines.js +2 -2
- package/src/rules/textEscaping.js +4 -4
- package/src/rules/validTypes.js +1 -1
- package/eslint.config.js +0 -86
- package/pnpm-workspace.yaml +0 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"requireHyphenBeforeParamDescription.cjs","names":["_iterateJsdoc","_interopRequireDefault","require","e","__esModule","default","_default","exports","iterateJsdoc","context","jsdoc","utils","mainCircumstance","tags","options","tgs","checkHyphens","jsdocTag","targetTagName","circumstance","always","desc","getTagDescription","trim","startsWithHyphen","test","lines","tokens","source","description","reportJSDoc","line","number","replace","forEachPreferredTag","tagEntries","Object","entries","tagName","preferredParamTag","getPreferredTagName","tag","some","tagNme","iterateAllJsdocs","meta","docs","url","fixable","schema","enum","type","additionalProperties","properties","anyOf","patternProperties","module"],"sources":["../../src/rules/requireHyphenBeforeParamDescription.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc.js';\n\nexport default iterateJsdoc(({\n context,\n jsdoc,\n utils,\n}) => {\n const [\n mainCircumstance,\n {\n tags = null,\n } = {},\n ] = context.options;\n\n const tgs = /**\n * @type {null|\"any\"|{[key: string]: \"always\"|\"never\"}}\n */ (tags);\n\n /**\n * @param {import('@es-joy/jsdoccomment').JsdocTagWithInline} jsdocTag\n * @param {string} targetTagName\n * @param {\"always\"|\"never\"} [circumstance]\n * @returns {void}\n */\n const checkHyphens = (jsdocTag, targetTagName, circumstance = mainCircumstance) => {\n const always = !circumstance || circumstance === 'always';\n const desc = /** @type {string} */ (utils.getTagDescription(jsdocTag));\n if (!desc.trim()) {\n return;\n }\n\n const startsWithHyphen = (/^\\s*-/
|
|
1
|
+
{"version":3,"file":"requireHyphenBeforeParamDescription.cjs","names":["_iterateJsdoc","_interopRequireDefault","require","e","__esModule","default","_default","exports","iterateJsdoc","context","jsdoc","utils","mainCircumstance","tags","options","tgs","checkHyphens","jsdocTag","targetTagName","circumstance","always","desc","getTagDescription","trim","startsWithHyphen","test","lines","tokens","source","description","reportJSDoc","line","number","replace","forEachPreferredTag","tagEntries","Object","entries","tagName","preferredParamTag","getPreferredTagName","tag","some","tagNme","iterateAllJsdocs","meta","docs","url","fixable","schema","enum","type","additionalProperties","properties","anyOf","patternProperties","module"],"sources":["../../src/rules/requireHyphenBeforeParamDescription.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc.js';\n\nexport default iterateJsdoc(({\n context,\n jsdoc,\n utils,\n}) => {\n const [\n mainCircumstance,\n {\n tags = null,\n } = {},\n ] = context.options;\n\n const tgs = /**\n * @type {null|\"any\"|{[key: string]: \"always\"|\"never\"}}\n */ (tags);\n\n /**\n * @param {import('@es-joy/jsdoccomment').JsdocTagWithInline} jsdocTag\n * @param {string} targetTagName\n * @param {\"always\"|\"never\"} [circumstance]\n * @returns {void}\n */\n const checkHyphens = (jsdocTag, targetTagName, circumstance = mainCircumstance) => {\n const always = !circumstance || circumstance === 'always';\n const desc = /** @type {string} */ (utils.getTagDescription(jsdocTag));\n if (!desc.trim()) {\n return;\n }\n\n const startsWithHyphen = (/^\\s*-/v).test(desc);\n let lines = 0;\n for (const {\n tokens,\n } of jsdocTag.source) {\n if (tokens.description) {\n break;\n }\n\n lines++;\n }\n\n if (always) {\n if (!startsWithHyphen) {\n utils.reportJSDoc(\n `There must be a hyphen before @${targetTagName} description.`,\n {\n line: jsdocTag.source[0].number + lines,\n },\n () => {\n for (const {\n tokens,\n } of jsdocTag.source) {\n if (tokens.description) {\n tokens.description = tokens.description.replace(\n /^(\\s*)/v, '$1- ',\n );\n break;\n }\n }\n },\n );\n }\n } else if (startsWithHyphen) {\n utils.reportJSDoc(\n `There must be no hyphen before @${targetTagName} description.`,\n {\n line: jsdocTag.source[0].number + lines,\n },\n () => {\n for (const {\n tokens,\n } of jsdocTag.source) {\n if (tokens.description) {\n tokens.description = tokens.description.replace(\n /^\\s*-\\s*/v, '',\n );\n break;\n }\n }\n },\n true,\n );\n }\n };\n\n utils.forEachPreferredTag('param', checkHyphens);\n if (tgs) {\n const tagEntries = Object.entries(tgs);\n for (const [\n tagName,\n circumstance,\n ] of tagEntries) {\n if (tagName === '*') {\n const preferredParamTag = utils.getPreferredTagName({\n tagName: 'param',\n });\n for (const {\n tag,\n } of jsdoc.tags) {\n if (tag === preferredParamTag || tagEntries.some(([\n tagNme,\n ]) => {\n return tagNme !== '*' && tagNme === tag;\n })) {\n continue;\n }\n\n utils.forEachPreferredTag(tag, (jsdocTag, targetTagName) => {\n checkHyphens(\n jsdocTag,\n targetTagName,\n /** @type {\"always\"|\"never\"} */ (circumstance),\n );\n });\n }\n\n continue;\n }\n\n utils.forEachPreferredTag(tagName, (jsdocTag, targetTagName) => {\n checkHyphens(\n jsdocTag,\n targetTagName,\n /** @type {\"always\"|\"never\"} */ (circumstance),\n );\n });\n }\n }\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Requires a hyphen before the `@param` description.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/require-hyphen-before-param-description.md#repos-sticky-header',\n },\n fixable: 'code',\n schema: [\n {\n enum: [\n 'always', 'never',\n ],\n type: 'string',\n },\n {\n additionalProperties: false,\n properties: {\n tags: {\n anyOf: [\n {\n patternProperties: {\n '.*': {\n enum: [\n 'always', 'never',\n ],\n type: 'string',\n },\n },\n type: 'object',\n },\n {\n enum: [\n 'any',\n ],\n type: 'string',\n },\n ],\n },\n },\n type: 'object',\n },\n ],\n type: 'layout',\n },\n});\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -350,7 +350,7 @@ var _default = exports.default = {
|
|
|
350
350
|
* @param {undefined|import('../iterateJsdoc.js').Integer} count
|
|
351
351
|
*/
|
|
352
352
|
const underMinLine = count => {
|
|
353
|
-
return count !== undefined && count > (sourceCode.getText(node).match(/\n/
|
|
353
|
+
return count !== undefined && count > (sourceCode.getText(node).match(/\n/gv)?.length ?? 0) + 1;
|
|
354
354
|
};
|
|
355
355
|
if (underMinLine(minLineCount)) {
|
|
356
356
|
return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"requireJsdoc.cjs","names":["_exportParser","_interopRequireDefault","require","_iterateJsdoc","_jsdocUtils","_jsdoccomment","e","__esModule","default","OPTIONS_SCHEMA","additionalProperties","properties","checkConstructors","type","checkGetters","anyOf","enum","checkSetters","contexts","items","context","inlineCommentBlock","minLineCount","enableFixer","exemptEmptyConstructors","exemptEmptyFunctions","fixerMessage","publicOnly","oneOf","ancestorsOnly","cjs","esm","window","ArrowFunctionExpression","ClassDeclaration","ClassExpression","FunctionDeclaration","FunctionExpression","MethodDefinition","getMethodOnInterface","interfaceName","methodName","scope","scp","identifiers","name","variables","identifier","interfaceDeclaration","parent","bodyItem","body","methodSig","key","upper","isExemptedImplementer","node","sourceCode","settings","implments","implements","impl","expression","interfaceMethodNode","getScope","comment","getJSDocComment","getOption","baseObject","option","options","getOptions","undefined","baseObj","prop","Object","keys","opt","_default","exports","create","getSourceCode","getSettings","opts","requireOption","checkJsDoc","info","_handler","some","ctxt","count","underMinLine","getText","match","length","contextMinLineCount","find","ctx","selector","jsDocNode","exemptSpeciaMethods","description","inlineTags","problems","source","tags","isFunctionContext","isConstructor","functionParameterNames","getFunctionParameterNames","hasReturnValue","fix","fixer","lines","minLines","maxLines","baseNode","getReducedASTNode","decorator","getDecorator","indent","getIndent","text","loc","start","column","contxt","insertion","repeat","slice","insertTextBefore","report","end","line","messageId","Boolean","initModuleExports","initWindow","exported","exportParser","isUncommentedExport","hasOption","getContextObject","enforcedContexts","includes","value","meta","docs","category","recommended","url","fixable","messages","missingJsDoc","schema","module"],"sources":["../../src/rules/requireJsdoc.js"],"sourcesContent":["import exportParser from '../exportParser.js';\nimport {\n getSettings,\n} from '../iterateJsdoc.js';\nimport {\n enforcedContexts,\n exemptSpeciaMethods,\n getContextObject,\n getFunctionParameterNames,\n getIndent,\n hasReturnValue,\n isConstructor,\n} from '../jsdocUtils.js';\nimport {\n getDecorator,\n getJSDocComment,\n getReducedASTNode,\n} from '@es-joy/jsdoccomment';\n\n/**\n * @typedef {{\n * ancestorsOnly: boolean,\n * esm: boolean,\n * initModuleExports: boolean,\n * initWindow: boolean\n * }} RequireJsdocOpts\n */\n\n/**\n * @typedef {import('eslint').Rule.Node|\n * import('@typescript-eslint/types').TSESTree.Node} ESLintOrTSNode\n */\n\n/** @type {import('json-schema').JSONSchema4} */\nconst OPTIONS_SCHEMA = {\n additionalProperties: false,\n properties: {\n checkConstructors: {\n default: true,\n type: 'boolean',\n },\n checkGetters: {\n anyOf: [\n {\n type: 'boolean',\n },\n {\n enum: [\n 'no-setter',\n ],\n type: 'string',\n },\n ],\n default: true,\n },\n checkSetters: {\n anyOf: [\n {\n type: 'boolean',\n },\n {\n enum: [\n 'no-getter',\n ],\n type: 'string',\n },\n ],\n default: true,\n },\n contexts: {\n items: {\n anyOf: [\n {\n type: 'string',\n },\n {\n additionalProperties: false,\n properties: {\n context: {\n type: 'string',\n },\n inlineCommentBlock: {\n type: 'boolean',\n },\n minLineCount: {\n type: 'integer',\n },\n },\n type: 'object',\n },\n ],\n },\n type: 'array',\n },\n enableFixer: {\n default: true,\n type: 'boolean',\n },\n exemptEmptyConstructors: {\n default: false,\n type: 'boolean',\n },\n exemptEmptyFunctions: {\n default: false,\n type: 'boolean',\n },\n fixerMessage: {\n default: '',\n type: 'string',\n },\n minLineCount: {\n type: 'integer',\n },\n publicOnly: {\n oneOf: [\n {\n default: false,\n type: 'boolean',\n },\n {\n additionalProperties: false,\n default: {},\n properties: {\n ancestorsOnly: {\n type: 'boolean',\n },\n cjs: {\n type: 'boolean',\n },\n esm: {\n type: 'boolean',\n },\n window: {\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n },\n require: {\n additionalProperties: false,\n default: {},\n properties: {\n ArrowFunctionExpression: {\n default: false,\n type: 'boolean',\n },\n ClassDeclaration: {\n default: false,\n type: 'boolean',\n },\n ClassExpression: {\n default: false,\n type: 'boolean',\n },\n FunctionDeclaration: {\n default: true,\n type: 'boolean',\n },\n FunctionExpression: {\n default: false,\n type: 'boolean',\n },\n MethodDefinition: {\n default: false,\n type: 'boolean',\n },\n },\n type: 'object',\n },\n },\n type: 'object',\n};\n\n/**\n * @param {string} interfaceName\n * @param {string} methodName\n * @param {import(\"eslint\").Scope.Scope | null} scope\n * @returns {import('@typescript-eslint/types').TSESTree.TSMethodSignature|null}\n */\nconst getMethodOnInterface = (interfaceName, methodName, scope) => {\n let scp = scope;\n while (scp) {\n for (const {\n identifiers,\n name,\n } of scp.variables) {\n if (interfaceName !== name) {\n continue;\n }\n\n for (const identifier of identifiers) {\n const interfaceDeclaration = /** @type {import('@typescript-eslint/types').TSESTree.Identifier & {parent: import('@typescript-eslint/types').TSESTree.TSInterfaceDeclaration}} */ (\n identifier\n ).parent;\n /* c8 ignore next 3 -- TS */\n if (interfaceDeclaration.type !== 'TSInterfaceDeclaration') {\n continue;\n }\n\n for (const bodyItem of interfaceDeclaration.body.body) {\n const methodSig = /** @type {import('@typescript-eslint/types').TSESTree.TSMethodSignature} */ (\n bodyItem\n );\n if (methodName === /** @type {import('@typescript-eslint/types').TSESTree.Identifier} */ (\n methodSig.key\n ).name) {\n return methodSig;\n }\n }\n }\n }\n\n scp = scp.upper;\n }\n\n return null;\n};\n\n/**\n * @param {import('eslint').Rule.Node} node\n * @param {import('eslint').SourceCode} sourceCode\n * @param {import('eslint').Rule.RuleContext} context\n * @param {import('../iterateJsdoc.js').Settings} settings\n */\nconst isExemptedImplementer = (node, sourceCode, context, settings) => {\n if (node.type === 'FunctionExpression' &&\n node.parent.type === 'MethodDefinition' &&\n node.parent.parent.type === 'ClassBody' &&\n node.parent.parent.parent.type === 'ClassDeclaration' &&\n 'implements' in node.parent.parent.parent\n ) {\n const implments = /** @type {import('@typescript-eslint/types').TSESTree.TSClassImplements[]} */ (\n node.parent.parent.parent.implements\n );\n\n const {\n name: methodName,\n } = /** @type {import('@typescript-eslint/types').TSESTree.Identifier} */ (\n node.parent.key\n );\n\n for (const impl of implments) {\n const {\n name: interfaceName,\n } = /** @type {import('@typescript-eslint/types').TSESTree.Identifier} */ (\n impl.expression\n );\n\n const interfaceMethodNode = getMethodOnInterface(interfaceName, methodName, node && (\n (sourceCode.getScope &&\n /* c8 ignore next 2 */\n sourceCode.getScope(node)) ||\n context.getScope()\n ));\n if (interfaceMethodNode) {\n // @ts-expect-error Ok\n const comment = getJSDocComment(sourceCode, interfaceMethodNode, settings);\n if (comment) {\n return true;\n }\n }\n }\n }\n\n return false;\n};\n\n/**\n * @param {import('eslint').Rule.RuleContext} context\n * @param {import('json-schema').JSONSchema4Object} baseObject\n * @param {string} option\n * @param {string} key\n * @returns {boolean|undefined}\n */\nconst getOption = (context, baseObject, option, key) => {\n if (context.options[0] && option in context.options[0] &&\n // Todo: boolean shouldn't be returning property, but\n // tests currently require\n (typeof context.options[0][option] === 'boolean' ||\n key in context.options[0][option])\n ) {\n return context.options[0][option][key];\n }\n\n return /** @type {{[key: string]: {default?: boolean|undefined}}} */ (\n baseObject.properties\n )[key].default;\n};\n\n/**\n * @param {import('eslint').Rule.RuleContext} context\n * @param {import('../iterateJsdoc.js').Settings} settings\n * @returns {{\n * contexts: (string|{\n * context: string,\n * inlineCommentBlock: boolean,\n * minLineCount: import('../iterateJsdoc.js').Integer\n * })[],\n * enableFixer: boolean,\n * exemptEmptyConstructors: boolean,\n * exemptEmptyFunctions: boolean,\n * fixerMessage: string,\n * minLineCount: undefined|import('../iterateJsdoc.js').Integer,\n * publicOnly: boolean|{[key: string]: boolean|undefined}\n * require: {[key: string]: boolean|undefined}\n * }}\n */\nconst getOptions = (context, settings) => {\n const {\n contexts = settings.contexts || [],\n enableFixer = true,\n exemptEmptyConstructors = true,\n exemptEmptyFunctions = false,\n fixerMessage = '',\n minLineCount = undefined,\n publicOnly,\n } = context.options[0] || {};\n\n return {\n contexts,\n enableFixer,\n exemptEmptyConstructors,\n exemptEmptyFunctions,\n fixerMessage,\n minLineCount,\n publicOnly: ((baseObj) => {\n if (!publicOnly) {\n return false;\n }\n\n /** @type {{[key: string]: boolean|undefined}} */\n const properties = {};\n for (const prop of Object.keys(\n /** @type {import('json-schema').JSONSchema4Object} */ (\n /** @type {import('json-schema').JSONSchema4Object} */ (\n baseObj\n ).properties),\n )) {\n const opt = getOption(\n context,\n /** @type {import('json-schema').JSONSchema4Object} */ (baseObj),\n 'publicOnly',\n prop,\n );\n\n properties[prop] = opt;\n }\n\n return properties;\n })(\n /** @type {import('json-schema').JSONSchema4Object} */\n (\n /** @type {import('json-schema').JSONSchema4Object} */\n (\n /** @type {import('json-schema').JSONSchema4Object} */\n (\n OPTIONS_SCHEMA.properties\n ).publicOnly\n ).oneOf\n )[1],\n ),\n require: ((baseObj) => {\n /** @type {{[key: string]: boolean|undefined}} */\n const properties = {};\n for (const prop of Object.keys(\n /** @type {import('json-schema').JSONSchema4Object} */ (\n /** @type {import('json-schema').JSONSchema4Object} */ (\n baseObj\n ).properties),\n )) {\n const opt = getOption(\n context,\n /** @type {import('json-schema').JSONSchema4Object} */\n (baseObj),\n 'require',\n prop,\n );\n properties[prop] = opt;\n }\n\n return properties;\n })(\n /** @type {import('json-schema').JSONSchema4Object} */\n (OPTIONS_SCHEMA.properties).require,\n ),\n };\n};\n\n/** @type {import('eslint').Rule.RuleModule} */\nexport default {\n create (context) {\n /* c8 ignore next -- Fallback to deprecated method */\n const {\n sourceCode = context.getSourceCode(),\n } = context;\n const settings = getSettings(context);\n if (!settings) {\n return {};\n }\n\n const opts = getOptions(context, settings);\n\n const {\n contexts,\n enableFixer,\n exemptEmptyConstructors,\n exemptEmptyFunctions,\n fixerMessage,\n minLineCount,\n require: requireOption,\n } = opts;\n\n const publicOnly =\n\n /**\n * @type {{\n * [key: string]: boolean | undefined;\n * }}\n */ (\n opts.publicOnly\n );\n\n /**\n * @type {import('../iterateJsdoc.js').CheckJsdoc}\n */\n const checkJsDoc = (info, _handler, node) => {\n if (\n // Optimize\n minLineCount !== undefined || contexts.some((ctxt) => {\n if (typeof ctxt === 'string') {\n return false;\n }\n\n const {\n minLineCount: count,\n } = ctxt;\n return count !== undefined;\n })\n ) {\n /**\n * @param {undefined|import('../iterateJsdoc.js').Integer} count\n */\n const underMinLine = (count) => {\n return count !== undefined && count >\n (sourceCode.getText(node).match(/\\n/gu)?.length ?? 0) + 1;\n };\n\n if (underMinLine(minLineCount)) {\n return;\n }\n\n const {\n minLineCount: contextMinLineCount,\n } =\n /**\n * @type {{\n * context: string;\n * inlineCommentBlock: boolean;\n * minLineCount: number;\n * }}\n */ (contexts.find((ctxt) => {\n if (typeof ctxt === 'string') {\n return false;\n }\n\n const {\n context: ctx,\n } = ctxt;\n return ctx === (info.selector || node.type);\n })) || {};\n if (underMinLine(contextMinLineCount)) {\n return;\n }\n }\n\n const jsDocNode = getJSDocComment(sourceCode, node, settings);\n\n if (jsDocNode) {\n return;\n }\n\n // For those who have options configured against ANY constructors (or\n // setters or getters) being reported\n if (exemptSpeciaMethods(\n {\n description: '',\n inlineTags: [],\n problems: [],\n source: [],\n tags: [],\n },\n node,\n context,\n [\n OPTIONS_SCHEMA,\n ],\n )) {\n return;\n }\n\n if (\n // Avoid reporting param-less, return-less functions (when\n // `exemptEmptyFunctions` option is set)\n exemptEmptyFunctions && info.isFunctionContext ||\n\n // Avoid reporting param-less, return-less constructor methods (when\n // `exemptEmptyConstructors` option is set)\n exemptEmptyConstructors && isConstructor(node)\n ) {\n const functionParameterNames = getFunctionParameterNames(node);\n if (!functionParameterNames.length && !hasReturnValue(node)) {\n return;\n }\n }\n\n if (isExemptedImplementer(node, sourceCode, context, settings)) {\n return;\n }\n\n const fix = /** @type {import('eslint').Rule.ReportFixer} */ (fixer) => {\n // Default to one line break if the `minLines`/`maxLines` settings allow\n const lines = settings.minLines === 0 && settings.maxLines >= 1 ? 1 : settings.minLines;\n /** @type {ESLintOrTSNode|import('@typescript-eslint/types').TSESTree.Decorator} */\n let baseNode = getReducedASTNode(node, sourceCode);\n\n const decorator = getDecorator(\n /** @type {import('eslint').Rule.Node} */\n (baseNode),\n );\n if (decorator) {\n baseNode = decorator;\n }\n\n const indent = getIndent({\n text: sourceCode.getText(\n /** @type {import('eslint').Rule.Node} */ (baseNode),\n /** @type {import('eslint').AST.SourceLocation} */\n (\n /** @type {import('eslint').Rule.Node} */ (baseNode).loc\n ).start.column,\n ),\n });\n\n const {\n inlineCommentBlock,\n } =\n /**\n * @type {{\n * context: string,\n * inlineCommentBlock: boolean,\n * minLineCount: import('../iterateJsdoc.js').Integer\n * }}\n */ (contexts.find((contxt) => {\n if (typeof contxt === 'string') {\n return false;\n }\n\n const {\n context: ctxt,\n } = contxt;\n return ctxt === node.type;\n })) || {};\n const insertion = (inlineCommentBlock ?\n `/** ${fixerMessage}` :\n `/**\\n${indent}*${fixerMessage}\\n${indent}`) +\n `*/${'\\n'.repeat(lines)}${indent.slice(0, -1)}`;\n\n return fixer.insertTextBefore(\n /** @type {import('eslint').Rule.Node} */\n (baseNode),\n insertion,\n );\n };\n\n const report = () => {\n const {\n start,\n } = /** @type {import('eslint').AST.SourceLocation} */ (node.loc);\n const loc = {\n end: {\n column: 0,\n line: start.line + 1,\n },\n start,\n };\n context.report({\n fix: enableFixer ? fix : null,\n loc,\n messageId: 'missingJsDoc',\n node,\n });\n };\n\n if (publicOnly) {\n /** @type {RequireJsdocOpts} */\n const opt = {\n ancestorsOnly: Boolean(publicOnly?.ancestorsOnly ?? false),\n esm: Boolean(publicOnly?.esm ?? true),\n initModuleExports: Boolean(publicOnly?.cjs ?? true),\n initWindow: Boolean(publicOnly?.window ?? false),\n };\n const exported = exportParser.isUncommentedExport(node, sourceCode, opt, settings);\n\n if (exported) {\n report();\n }\n } else {\n report();\n }\n };\n\n /**\n * @param {string} prop\n * @returns {boolean}\n */\n const hasOption = (prop) => {\n return requireOption[prop] || contexts.some((ctxt) => {\n return typeof ctxt === 'object' ? ctxt.context === prop : ctxt === prop;\n });\n };\n\n return {\n ...getContextObject(\n enforcedContexts(context, [], settings),\n checkJsDoc,\n ),\n ArrowFunctionExpression (node) {\n if (!hasOption('ArrowFunctionExpression')) {\n return;\n }\n\n if (\n [\n 'AssignmentExpression', 'ExportDefaultDeclaration', 'VariableDeclarator',\n ].includes(node.parent.type) ||\n [\n 'ClassProperty', 'ObjectProperty', 'Property', 'PropertyDefinition',\n ].includes(node.parent.type) &&\n node ===\n /**\n * @type {import('@typescript-eslint/types').TSESTree.Property|\n * import('@typescript-eslint/types').TSESTree.PropertyDefinition\n * }\n */\n (node.parent).value\n ) {\n checkJsDoc({\n isFunctionContext: true,\n }, null, node);\n }\n },\n\n ClassDeclaration (node) {\n if (!hasOption('ClassDeclaration')) {\n return;\n }\n\n checkJsDoc({\n isFunctionContext: false,\n }, null, node);\n },\n\n ClassExpression (node) {\n if (!hasOption('ClassExpression')) {\n return;\n }\n\n checkJsDoc({\n isFunctionContext: false,\n }, null, node);\n },\n\n FunctionDeclaration (node) {\n if (!hasOption('FunctionDeclaration')) {\n return;\n }\n\n checkJsDoc({\n isFunctionContext: true,\n }, null, node);\n },\n\n FunctionExpression (node) {\n if (!hasOption('FunctionExpression')) {\n return;\n }\n\n if (\n [\n 'AssignmentExpression', 'ExportDefaultDeclaration', 'VariableDeclarator',\n ].includes(node.parent.type) ||\n [\n 'ClassProperty', 'ObjectProperty', 'Property', 'PropertyDefinition',\n ].includes(node.parent.type) &&\n node ===\n /**\n * @type {import('@typescript-eslint/types').TSESTree.Property|\n * import('@typescript-eslint/types').TSESTree.PropertyDefinition\n * }\n */\n (node.parent).value\n ) {\n checkJsDoc({\n isFunctionContext: true,\n }, null, node);\n }\n },\n\n MethodDefinition (node) {\n if (!hasOption('MethodDefinition')) {\n return;\n }\n\n checkJsDoc({\n isFunctionContext: true,\n selector: 'MethodDefinition',\n }, null, /** @type {import('eslint').Rule.Node} */ (node.value));\n },\n };\n },\n meta: {\n docs: {\n category: 'Stylistic Issues',\n description: 'Require JSDoc comments',\n recommended: true,\n url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/require-jsdoc.md#repos-sticky-header',\n },\n\n fixable: 'code',\n\n messages: {\n missingJsDoc: 'Missing JSDoc comment.',\n },\n\n schema: [\n OPTIONS_SCHEMA,\n ],\n\n type: 'suggestion',\n },\n};\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"requireJsdoc.cjs","names":["_exportParser","_interopRequireDefault","require","_iterateJsdoc","_jsdocUtils","_jsdoccomment","e","__esModule","default","OPTIONS_SCHEMA","additionalProperties","properties","checkConstructors","type","checkGetters","anyOf","enum","checkSetters","contexts","items","context","inlineCommentBlock","minLineCount","enableFixer","exemptEmptyConstructors","exemptEmptyFunctions","fixerMessage","publicOnly","oneOf","ancestorsOnly","cjs","esm","window","ArrowFunctionExpression","ClassDeclaration","ClassExpression","FunctionDeclaration","FunctionExpression","MethodDefinition","getMethodOnInterface","interfaceName","methodName","scope","scp","identifiers","name","variables","identifier","interfaceDeclaration","parent","bodyItem","body","methodSig","key","upper","isExemptedImplementer","node","sourceCode","settings","implments","implements","impl","expression","interfaceMethodNode","getScope","comment","getJSDocComment","getOption","baseObject","option","options","getOptions","undefined","baseObj","prop","Object","keys","opt","_default","exports","create","getSourceCode","getSettings","opts","requireOption","checkJsDoc","info","_handler","some","ctxt","count","underMinLine","getText","match","length","contextMinLineCount","find","ctx","selector","jsDocNode","exemptSpeciaMethods","description","inlineTags","problems","source","tags","isFunctionContext","isConstructor","functionParameterNames","getFunctionParameterNames","hasReturnValue","fix","fixer","lines","minLines","maxLines","baseNode","getReducedASTNode","decorator","getDecorator","indent","getIndent","text","loc","start","column","contxt","insertion","repeat","slice","insertTextBefore","report","end","line","messageId","Boolean","initModuleExports","initWindow","exported","exportParser","isUncommentedExport","hasOption","getContextObject","enforcedContexts","includes","value","meta","docs","category","recommended","url","fixable","messages","missingJsDoc","schema","module"],"sources":["../../src/rules/requireJsdoc.js"],"sourcesContent":["import exportParser from '../exportParser.js';\nimport {\n getSettings,\n} from '../iterateJsdoc.js';\nimport {\n enforcedContexts,\n exemptSpeciaMethods,\n getContextObject,\n getFunctionParameterNames,\n getIndent,\n hasReturnValue,\n isConstructor,\n} from '../jsdocUtils.js';\nimport {\n getDecorator,\n getJSDocComment,\n getReducedASTNode,\n} from '@es-joy/jsdoccomment';\n\n/**\n * @typedef {{\n * ancestorsOnly: boolean,\n * esm: boolean,\n * initModuleExports: boolean,\n * initWindow: boolean\n * }} RequireJsdocOpts\n */\n\n/**\n * @typedef {import('eslint').Rule.Node|\n * import('@typescript-eslint/types').TSESTree.Node} ESLintOrTSNode\n */\n\n/** @type {import('json-schema').JSONSchema4} */\nconst OPTIONS_SCHEMA = {\n additionalProperties: false,\n properties: {\n checkConstructors: {\n default: true,\n type: 'boolean',\n },\n checkGetters: {\n anyOf: [\n {\n type: 'boolean',\n },\n {\n enum: [\n 'no-setter',\n ],\n type: 'string',\n },\n ],\n default: true,\n },\n checkSetters: {\n anyOf: [\n {\n type: 'boolean',\n },\n {\n enum: [\n 'no-getter',\n ],\n type: 'string',\n },\n ],\n default: true,\n },\n contexts: {\n items: {\n anyOf: [\n {\n type: 'string',\n },\n {\n additionalProperties: false,\n properties: {\n context: {\n type: 'string',\n },\n inlineCommentBlock: {\n type: 'boolean',\n },\n minLineCount: {\n type: 'integer',\n },\n },\n type: 'object',\n },\n ],\n },\n type: 'array',\n },\n enableFixer: {\n default: true,\n type: 'boolean',\n },\n exemptEmptyConstructors: {\n default: false,\n type: 'boolean',\n },\n exemptEmptyFunctions: {\n default: false,\n type: 'boolean',\n },\n fixerMessage: {\n default: '',\n type: 'string',\n },\n minLineCount: {\n type: 'integer',\n },\n publicOnly: {\n oneOf: [\n {\n default: false,\n type: 'boolean',\n },\n {\n additionalProperties: false,\n default: {},\n properties: {\n ancestorsOnly: {\n type: 'boolean',\n },\n cjs: {\n type: 'boolean',\n },\n esm: {\n type: 'boolean',\n },\n window: {\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n },\n require: {\n additionalProperties: false,\n default: {},\n properties: {\n ArrowFunctionExpression: {\n default: false,\n type: 'boolean',\n },\n ClassDeclaration: {\n default: false,\n type: 'boolean',\n },\n ClassExpression: {\n default: false,\n type: 'boolean',\n },\n FunctionDeclaration: {\n default: true,\n type: 'boolean',\n },\n FunctionExpression: {\n default: false,\n type: 'boolean',\n },\n MethodDefinition: {\n default: false,\n type: 'boolean',\n },\n },\n type: 'object',\n },\n },\n type: 'object',\n};\n\n/**\n * @param {string} interfaceName\n * @param {string} methodName\n * @param {import(\"eslint\").Scope.Scope | null} scope\n * @returns {import('@typescript-eslint/types').TSESTree.TSMethodSignature|null}\n */\nconst getMethodOnInterface = (interfaceName, methodName, scope) => {\n let scp = scope;\n while (scp) {\n for (const {\n identifiers,\n name,\n } of scp.variables) {\n if (interfaceName !== name) {\n continue;\n }\n\n for (const identifier of identifiers) {\n const interfaceDeclaration = /** @type {import('@typescript-eslint/types').TSESTree.Identifier & {parent: import('@typescript-eslint/types').TSESTree.TSInterfaceDeclaration}} */ (\n identifier\n ).parent;\n /* c8 ignore next 3 -- TS */\n if (interfaceDeclaration.type !== 'TSInterfaceDeclaration') {\n continue;\n }\n\n for (const bodyItem of interfaceDeclaration.body.body) {\n const methodSig = /** @type {import('@typescript-eslint/types').TSESTree.TSMethodSignature} */ (\n bodyItem\n );\n if (methodName === /** @type {import('@typescript-eslint/types').TSESTree.Identifier} */ (\n methodSig.key\n ).name) {\n return methodSig;\n }\n }\n }\n }\n\n scp = scp.upper;\n }\n\n return null;\n};\n\n/**\n * @param {import('eslint').Rule.Node} node\n * @param {import('eslint').SourceCode} sourceCode\n * @param {import('eslint').Rule.RuleContext} context\n * @param {import('../iterateJsdoc.js').Settings} settings\n */\nconst isExemptedImplementer = (node, sourceCode, context, settings) => {\n if (node.type === 'FunctionExpression' &&\n node.parent.type === 'MethodDefinition' &&\n node.parent.parent.type === 'ClassBody' &&\n node.parent.parent.parent.type === 'ClassDeclaration' &&\n 'implements' in node.parent.parent.parent\n ) {\n const implments = /** @type {import('@typescript-eslint/types').TSESTree.TSClassImplements[]} */ (\n node.parent.parent.parent.implements\n );\n\n const {\n name: methodName,\n } = /** @type {import('@typescript-eslint/types').TSESTree.Identifier} */ (\n node.parent.key\n );\n\n for (const impl of implments) {\n const {\n name: interfaceName,\n } = /** @type {import('@typescript-eslint/types').TSESTree.Identifier} */ (\n impl.expression\n );\n\n const interfaceMethodNode = getMethodOnInterface(interfaceName, methodName, node && (\n (sourceCode.getScope &&\n /* c8 ignore next 2 */\n sourceCode.getScope(node)) ||\n context.getScope()\n ));\n if (interfaceMethodNode) {\n // @ts-expect-error Ok\n const comment = getJSDocComment(sourceCode, interfaceMethodNode, settings);\n if (comment) {\n return true;\n }\n }\n }\n }\n\n return false;\n};\n\n/**\n * @param {import('eslint').Rule.RuleContext} context\n * @param {import('json-schema').JSONSchema4Object} baseObject\n * @param {string} option\n * @param {string} key\n * @returns {boolean|undefined}\n */\nconst getOption = (context, baseObject, option, key) => {\n if (context.options[0] && option in context.options[0] &&\n // Todo: boolean shouldn't be returning property, but\n // tests currently require\n (typeof context.options[0][option] === 'boolean' ||\n key in context.options[0][option])\n ) {\n return context.options[0][option][key];\n }\n\n return /** @type {{[key: string]: {default?: boolean|undefined}}} */ (\n baseObject.properties\n )[key].default;\n};\n\n/**\n * @param {import('eslint').Rule.RuleContext} context\n * @param {import('../iterateJsdoc.js').Settings} settings\n * @returns {{\n * contexts: (string|{\n * context: string,\n * inlineCommentBlock: boolean,\n * minLineCount: import('../iterateJsdoc.js').Integer\n * })[],\n * enableFixer: boolean,\n * exemptEmptyConstructors: boolean,\n * exemptEmptyFunctions: boolean,\n * fixerMessage: string,\n * minLineCount: undefined|import('../iterateJsdoc.js').Integer,\n * publicOnly: boolean|{[key: string]: boolean|undefined}\n * require: {[key: string]: boolean|undefined}\n * }}\n */\nconst getOptions = (context, settings) => {\n const {\n contexts = settings.contexts || [],\n enableFixer = true,\n exemptEmptyConstructors = true,\n exemptEmptyFunctions = false,\n fixerMessage = '',\n minLineCount = undefined,\n publicOnly,\n } = context.options[0] || {};\n\n return {\n contexts,\n enableFixer,\n exemptEmptyConstructors,\n exemptEmptyFunctions,\n fixerMessage,\n minLineCount,\n publicOnly: ((baseObj) => {\n if (!publicOnly) {\n return false;\n }\n\n /** @type {{[key: string]: boolean|undefined}} */\n const properties = {};\n for (const prop of Object.keys(\n /** @type {import('json-schema').JSONSchema4Object} */ (\n /** @type {import('json-schema').JSONSchema4Object} */ (\n baseObj\n ).properties),\n )) {\n const opt = getOption(\n context,\n /** @type {import('json-schema').JSONSchema4Object} */ (baseObj),\n 'publicOnly',\n prop,\n );\n\n properties[prop] = opt;\n }\n\n return properties;\n })(\n /** @type {import('json-schema').JSONSchema4Object} */\n (\n /** @type {import('json-schema').JSONSchema4Object} */\n (\n /** @type {import('json-schema').JSONSchema4Object} */\n (\n OPTIONS_SCHEMA.properties\n ).publicOnly\n ).oneOf\n )[1],\n ),\n require: ((baseObj) => {\n /** @type {{[key: string]: boolean|undefined}} */\n const properties = {};\n for (const prop of Object.keys(\n /** @type {import('json-schema').JSONSchema4Object} */ (\n /** @type {import('json-schema').JSONSchema4Object} */ (\n baseObj\n ).properties),\n )) {\n const opt = getOption(\n context,\n /** @type {import('json-schema').JSONSchema4Object} */\n (baseObj),\n 'require',\n prop,\n );\n properties[prop] = opt;\n }\n\n return properties;\n })(\n /** @type {import('json-schema').JSONSchema4Object} */\n (OPTIONS_SCHEMA.properties).require,\n ),\n };\n};\n\n/** @type {import('eslint').Rule.RuleModule} */\nexport default {\n create (context) {\n /* c8 ignore next -- Fallback to deprecated method */\n const {\n sourceCode = context.getSourceCode(),\n } = context;\n const settings = getSettings(context);\n if (!settings) {\n return {};\n }\n\n const opts = getOptions(context, settings);\n\n const {\n contexts,\n enableFixer,\n exemptEmptyConstructors,\n exemptEmptyFunctions,\n fixerMessage,\n minLineCount,\n require: requireOption,\n } = opts;\n\n const publicOnly =\n\n /**\n * @type {{\n * [key: string]: boolean | undefined;\n * }}\n */ (\n opts.publicOnly\n );\n\n /**\n * @type {import('../iterateJsdoc.js').CheckJsdoc}\n */\n const checkJsDoc = (info, _handler, node) => {\n if (\n // Optimize\n minLineCount !== undefined || contexts.some((ctxt) => {\n if (typeof ctxt === 'string') {\n return false;\n }\n\n const {\n minLineCount: count,\n } = ctxt;\n return count !== undefined;\n })\n ) {\n /**\n * @param {undefined|import('../iterateJsdoc.js').Integer} count\n */\n const underMinLine = (count) => {\n return count !== undefined && count >\n (sourceCode.getText(node).match(/\\n/gv)?.length ?? 0) + 1;\n };\n\n if (underMinLine(minLineCount)) {\n return;\n }\n\n const {\n minLineCount: contextMinLineCount,\n } =\n /**\n * @type {{\n * context: string;\n * inlineCommentBlock: boolean;\n * minLineCount: number;\n * }}\n */ (contexts.find((ctxt) => {\n if (typeof ctxt === 'string') {\n return false;\n }\n\n const {\n context: ctx,\n } = ctxt;\n return ctx === (info.selector || node.type);\n })) || {};\n if (underMinLine(contextMinLineCount)) {\n return;\n }\n }\n\n const jsDocNode = getJSDocComment(sourceCode, node, settings);\n\n if (jsDocNode) {\n return;\n }\n\n // For those who have options configured against ANY constructors (or\n // setters or getters) being reported\n if (exemptSpeciaMethods(\n {\n description: '',\n inlineTags: [],\n problems: [],\n source: [],\n tags: [],\n },\n node,\n context,\n [\n OPTIONS_SCHEMA,\n ],\n )) {\n return;\n }\n\n if (\n // Avoid reporting param-less, return-less functions (when\n // `exemptEmptyFunctions` option is set)\n exemptEmptyFunctions && info.isFunctionContext ||\n\n // Avoid reporting param-less, return-less constructor methods (when\n // `exemptEmptyConstructors` option is set)\n exemptEmptyConstructors && isConstructor(node)\n ) {\n const functionParameterNames = getFunctionParameterNames(node);\n if (!functionParameterNames.length && !hasReturnValue(node)) {\n return;\n }\n }\n\n if (isExemptedImplementer(node, sourceCode, context, settings)) {\n return;\n }\n\n const fix = /** @type {import('eslint').Rule.ReportFixer} */ (fixer) => {\n // Default to one line break if the `minLines`/`maxLines` settings allow\n const lines = settings.minLines === 0 && settings.maxLines >= 1 ? 1 : settings.minLines;\n /** @type {ESLintOrTSNode|import('@typescript-eslint/types').TSESTree.Decorator} */\n let baseNode = getReducedASTNode(node, sourceCode);\n\n const decorator = getDecorator(\n /** @type {import('eslint').Rule.Node} */\n (baseNode),\n );\n if (decorator) {\n baseNode = decorator;\n }\n\n const indent = getIndent({\n text: sourceCode.getText(\n /** @type {import('eslint').Rule.Node} */ (baseNode),\n /** @type {import('eslint').AST.SourceLocation} */\n (\n /** @type {import('eslint').Rule.Node} */ (baseNode).loc\n ).start.column,\n ),\n });\n\n const {\n inlineCommentBlock,\n } =\n /**\n * @type {{\n * context: string,\n * inlineCommentBlock: boolean,\n * minLineCount: import('../iterateJsdoc.js').Integer\n * }}\n */ (contexts.find((contxt) => {\n if (typeof contxt === 'string') {\n return false;\n }\n\n const {\n context: ctxt,\n } = contxt;\n return ctxt === node.type;\n })) || {};\n const insertion = (inlineCommentBlock ?\n `/** ${fixerMessage}` :\n `/**\\n${indent}*${fixerMessage}\\n${indent}`) +\n `*/${'\\n'.repeat(lines)}${indent.slice(0, -1)}`;\n\n return fixer.insertTextBefore(\n /** @type {import('eslint').Rule.Node} */\n (baseNode),\n insertion,\n );\n };\n\n const report = () => {\n const {\n start,\n } = /** @type {import('eslint').AST.SourceLocation} */ (node.loc);\n const loc = {\n end: {\n column: 0,\n line: start.line + 1,\n },\n start,\n };\n context.report({\n fix: enableFixer ? fix : null,\n loc,\n messageId: 'missingJsDoc',\n node,\n });\n };\n\n if (publicOnly) {\n /** @type {RequireJsdocOpts} */\n const opt = {\n ancestorsOnly: Boolean(publicOnly?.ancestorsOnly ?? false),\n esm: Boolean(publicOnly?.esm ?? true),\n initModuleExports: Boolean(publicOnly?.cjs ?? true),\n initWindow: Boolean(publicOnly?.window ?? false),\n };\n const exported = exportParser.isUncommentedExport(node, sourceCode, opt, settings);\n\n if (exported) {\n report();\n }\n } else {\n report();\n }\n };\n\n /**\n * @param {string} prop\n * @returns {boolean}\n */\n const hasOption = (prop) => {\n return requireOption[prop] || contexts.some((ctxt) => {\n return typeof ctxt === 'object' ? ctxt.context === prop : ctxt === prop;\n });\n };\n\n return {\n ...getContextObject(\n enforcedContexts(context, [], settings),\n checkJsDoc,\n ),\n ArrowFunctionExpression (node) {\n if (!hasOption('ArrowFunctionExpression')) {\n return;\n }\n\n if (\n [\n 'AssignmentExpression', 'ExportDefaultDeclaration', 'VariableDeclarator',\n ].includes(node.parent.type) ||\n [\n 'ClassProperty', 'ObjectProperty', 'Property', 'PropertyDefinition',\n ].includes(node.parent.type) &&\n node ===\n /**\n * @type {import('@typescript-eslint/types').TSESTree.Property|\n * import('@typescript-eslint/types').TSESTree.PropertyDefinition\n * }\n */\n (node.parent).value\n ) {\n checkJsDoc({\n isFunctionContext: true,\n }, null, node);\n }\n },\n\n ClassDeclaration (node) {\n if (!hasOption('ClassDeclaration')) {\n return;\n }\n\n checkJsDoc({\n isFunctionContext: false,\n }, null, node);\n },\n\n ClassExpression (node) {\n if (!hasOption('ClassExpression')) {\n return;\n }\n\n checkJsDoc({\n isFunctionContext: false,\n }, null, node);\n },\n\n FunctionDeclaration (node) {\n if (!hasOption('FunctionDeclaration')) {\n return;\n }\n\n checkJsDoc({\n isFunctionContext: true,\n }, null, node);\n },\n\n FunctionExpression (node) {\n if (!hasOption('FunctionExpression')) {\n return;\n }\n\n if (\n [\n 'AssignmentExpression', 'ExportDefaultDeclaration', 'VariableDeclarator',\n ].includes(node.parent.type) ||\n [\n 'ClassProperty', 'ObjectProperty', 'Property', 'PropertyDefinition',\n ].includes(node.parent.type) &&\n node ===\n /**\n * @type {import('@typescript-eslint/types').TSESTree.Property|\n * import('@typescript-eslint/types').TSESTree.PropertyDefinition\n * }\n */\n (node.parent).value\n ) {\n checkJsDoc({\n isFunctionContext: true,\n }, null, node);\n }\n },\n\n MethodDefinition (node) {\n if (!hasOption('MethodDefinition')) {\n return;\n }\n\n checkJsDoc({\n isFunctionContext: true,\n selector: 'MethodDefinition',\n }, null, /** @type {import('eslint').Rule.Node} */ (node.value));\n },\n };\n },\n meta: {\n docs: {\n category: 'Stylistic Issues',\n description: 'Require JSDoc comments',\n recommended: true,\n url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/require-jsdoc.md#repos-sticky-header',\n },\n\n fixable: 'code',\n\n messages: {\n missingJsDoc: 'Missing JSDoc comment.',\n },\n\n schema: [\n OPTIONS_SCHEMA,\n ],\n\n type: 'suggestion',\n },\n};\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -66,7 +66,7 @@ var _default = exports.default = (0, _iterateJsdoc.default)(({
|
|
|
66
66
|
const type = tag.type.trim();
|
|
67
67
|
|
|
68
68
|
// https://www.typescriptlang.org/docs/handbook/release-notes/typescript-3-7.html#assertion-functions
|
|
69
|
-
if (/asserts\s/
|
|
69
|
+
if (/asserts\s/v.test(type)) {
|
|
70
70
|
return;
|
|
71
71
|
}
|
|
72
72
|
const returnNever = type === 'never';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"requireReturnsCheck.cjs","names":["_iterateJsdoc","_interopRequireDefault","require","e","__esModule","default","canSkip","utils","settings","voidingTags","mode","push","hasATag","isConstructor","classHasTag","_default","exports","iterateJsdoc","context","node","report","exemptAsync","exemptGenerators","reportMissingReturnForUndefinedTypes","options","isAsync","tagName","getPreferredTagName","tags","getTags","length","tag","type","trim","test","returnNever","hasValueOrExecutorHasNonEmptyResolveValue","mayBeUndefinedTypeTag","Boolean","generator","meta","docs","description","url","schema","additionalProperties","properties","module"],"sources":["../../src/rules/requireReturnsCheck.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc.js';\n\n/**\n * @param {import('../iterateJsdoc.js').Utils} utils\n * @param {import('../iterateJsdoc.js').Settings} settings\n * @returns {boolean}\n */\nconst canSkip = (utils, settings) => {\n const voidingTags = [\n // An abstract function is by definition incomplete\n // so it is perfectly fine if a return is documented but\n // not present within the function.\n // A subclass may inherit the doc and implement the\n // missing return.\n 'abstract',\n 'virtual',\n\n // A constructor function returns `this` by default, so may be `@returns`\n // tag indicating this but no explicit return\n 'class',\n 'constructor',\n 'interface',\n ];\n\n if (settings.mode === 'closure') {\n // Structural Interface in GCC terms, equivalent to @interface tag as far as this rule is concerned\n voidingTags.push('record');\n }\n\n return utils.hasATag(voidingTags) ||\n utils.isConstructor() ||\n utils.classHasTag('interface') ||\n settings.mode === 'closure' && utils.classHasTag('record');\n};\n\n// eslint-disable-next-line complexity -- Temporary\nexport default iterateJsdoc(({\n context,\n node,\n report,\n settings,\n utils,\n}) => {\n const {\n exemptAsync = true,\n exemptGenerators = settings.mode === 'typescript',\n reportMissingReturnForUndefinedTypes = false,\n } = context.options[0] || {};\n\n if (canSkip(utils, settings)) {\n return;\n }\n\n if (exemptAsync && utils.isAsync()) {\n return;\n }\n\n const tagName = /** @type {string} */ (utils.getPreferredTagName({\n tagName: 'returns',\n }));\n if (!tagName) {\n return;\n }\n\n const tags = utils.getTags(tagName);\n\n if (tags.length === 0) {\n return;\n }\n\n if (tags.length > 1) {\n report(`Found more than one @${tagName} declaration.`);\n\n return;\n }\n\n const [\n tag,\n ] = tags;\n\n const type = tag.type.trim();\n\n // https://www.typescriptlang.org/docs/handbook/release-notes/typescript-3-7.html#assertion-functions\n if (/asserts\\s/
|
|
1
|
+
{"version":3,"file":"requireReturnsCheck.cjs","names":["_iterateJsdoc","_interopRequireDefault","require","e","__esModule","default","canSkip","utils","settings","voidingTags","mode","push","hasATag","isConstructor","classHasTag","_default","exports","iterateJsdoc","context","node","report","exemptAsync","exemptGenerators","reportMissingReturnForUndefinedTypes","options","isAsync","tagName","getPreferredTagName","tags","getTags","length","tag","type","trim","test","returnNever","hasValueOrExecutorHasNonEmptyResolveValue","mayBeUndefinedTypeTag","Boolean","generator","meta","docs","description","url","schema","additionalProperties","properties","module"],"sources":["../../src/rules/requireReturnsCheck.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc.js';\n\n/**\n * @param {import('../iterateJsdoc.js').Utils} utils\n * @param {import('../iterateJsdoc.js').Settings} settings\n * @returns {boolean}\n */\nconst canSkip = (utils, settings) => {\n const voidingTags = [\n // An abstract function is by definition incomplete\n // so it is perfectly fine if a return is documented but\n // not present within the function.\n // A subclass may inherit the doc and implement the\n // missing return.\n 'abstract',\n 'virtual',\n\n // A constructor function returns `this` by default, so may be `@returns`\n // tag indicating this but no explicit return\n 'class',\n 'constructor',\n 'interface',\n ];\n\n if (settings.mode === 'closure') {\n // Structural Interface in GCC terms, equivalent to @interface tag as far as this rule is concerned\n voidingTags.push('record');\n }\n\n return utils.hasATag(voidingTags) ||\n utils.isConstructor() ||\n utils.classHasTag('interface') ||\n settings.mode === 'closure' && utils.classHasTag('record');\n};\n\n// eslint-disable-next-line complexity -- Temporary\nexport default iterateJsdoc(({\n context,\n node,\n report,\n settings,\n utils,\n}) => {\n const {\n exemptAsync = true,\n exemptGenerators = settings.mode === 'typescript',\n reportMissingReturnForUndefinedTypes = false,\n } = context.options[0] || {};\n\n if (canSkip(utils, settings)) {\n return;\n }\n\n if (exemptAsync && utils.isAsync()) {\n return;\n }\n\n const tagName = /** @type {string} */ (utils.getPreferredTagName({\n tagName: 'returns',\n }));\n if (!tagName) {\n return;\n }\n\n const tags = utils.getTags(tagName);\n\n if (tags.length === 0) {\n return;\n }\n\n if (tags.length > 1) {\n report(`Found more than one @${tagName} declaration.`);\n\n return;\n }\n\n const [\n tag,\n ] = tags;\n\n const type = tag.type.trim();\n\n // https://www.typescriptlang.org/docs/handbook/release-notes/typescript-3-7.html#assertion-functions\n if (/asserts\\s/v.test(type)) {\n return;\n }\n\n const returnNever = type === 'never';\n\n if (returnNever && utils.hasValueOrExecutorHasNonEmptyResolveValue(false)) {\n report(`JSDoc @${tagName} declaration set with \"never\" but return expression is present in function.`);\n\n return;\n }\n\n // In case a return value is declared in JSDoc, we also expect one in the code.\n if (\n !returnNever &&\n (\n reportMissingReturnForUndefinedTypes ||\n !utils.mayBeUndefinedTypeTag(tag)\n ) &&\n (tag.type === '' && !utils.hasValueOrExecutorHasNonEmptyResolveValue(\n exemptAsync,\n ) ||\n tag.type !== '' && !utils.hasValueOrExecutorHasNonEmptyResolveValue(\n exemptAsync,\n true,\n )) &&\n Boolean(\n !exemptGenerators || !node ||\n !('generator' in /** @type {import('../iterateJsdoc.js').Node} */ (node)) ||\n !(/** @type {import('@typescript-eslint/types').TSESTree.FunctionDeclaration} */ (node)).generator,\n )\n ) {\n report(`JSDoc @${tagName} declaration present but return expression not available in function.`);\n }\n}, {\n meta: {\n docs: {\n description: 'Requires a return statement in function body if a `@returns` tag is specified in jsdoc comment.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/require-returns-check.md#repos-sticky-header',\n },\n schema: [\n {\n additionalProperties: false,\n properties: {\n exemptAsync: {\n default: true,\n type: 'boolean',\n },\n exemptGenerators: {\n type: 'boolean',\n },\n reportMissingReturnForUndefinedTypes: {\n default: false,\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -30,7 +30,7 @@ var _default = exports.default = (0, _iterateJsdoc.default)(({
|
|
|
30
30
|
const {
|
|
31
31
|
name
|
|
32
32
|
} = tag;
|
|
33
|
-
const names = name.split(/,\s*/
|
|
33
|
+
const names = name.split(/,\s*/v);
|
|
34
34
|
if (names.length > 1) {
|
|
35
35
|
report(`Missing separate @template for ${names[1]}`, null, tag);
|
|
36
36
|
}
|
|
@@ -115,7 +115,7 @@ var _default = exports.default = (0, _iterateJsdoc.default)(({
|
|
|
115
115
|
type,
|
|
116
116
|
value
|
|
117
117
|
} = /** @type {import('jsdoc-type-pratt-parser').NameResult} */nde;
|
|
118
|
-
if (type === 'JsdocTypeName' && /^[A-Z]$/
|
|
118
|
+
if (type === 'JsdocTypeName' && /^[A-Z]$/v.test(value)) {
|
|
119
119
|
usedNames.add(value);
|
|
120
120
|
if (!usedNameToTag.has(value)) {
|
|
121
121
|
usedNameToTag.set(value, potentialTag);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"requireTemplate.cjs","names":["_iterateJsdoc","_interopRequireDefault","require","_jsdoccomment","e","__esModule","default","_default","exports","iterateJsdoc","context","node","report","settings","utils","requireSeparateTemplates","options","mode","usedNames","Set","templateTags","getTags","templateNames","flatMap","tag","parseClosureTemplateTag","name","names","split","length","checkTypeParams","aliasDeclaration","params","typeParameters","add","usedName","includes","handleTypes","nde","type","declaration","usedNameToTag","Map","checkForUsedTypes","potentialTag","parsedType","tryParseType","parseType","traverse","value","test","has","set","checkTagsAndTemplates","tagNames","tagName","preferredTagName","getPreferredTagName","matchingTags","matchingTag","get","callbackTags","functionTags","typedefTags","potentialTypedef","iterateAllJsdocs","meta","docs","description","url","schema","additionalProperties","properties","module"],"sources":["../../src/rules/requireTemplate.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc.js';\nimport {\n parse as parseType,\n traverse,\n tryParse as tryParseType,\n} from '@es-joy/jsdoccomment';\n\nexport default iterateJsdoc(({\n context,\n node,\n report,\n settings,\n utils,\n}) => {\n const {\n requireSeparateTemplates = false,\n } = context.options[0] || {};\n\n const {\n mode,\n } = settings;\n\n const usedNames = new Set();\n const templateTags = utils.getTags('template');\n const templateNames = templateTags.flatMap((tag) => {\n return utils.parseClosureTemplateTag(tag);\n });\n\n if (requireSeparateTemplates) {\n for (const tag of templateTags) {\n const {\n name,\n } = tag;\n const names = name.split(/,\\s*/u);\n if (names.length > 1) {\n report(`Missing separate @template for ${names[1]}`, null, tag);\n }\n }\n }\n\n /**\n * @param {import('@typescript-eslint/types').TSESTree.FunctionDeclaration|\n * import('@typescript-eslint/types').TSESTree.ClassDeclaration|\n * import('@typescript-eslint/types').TSESTree.TSInterfaceDeclaration|\n * import('@typescript-eslint/types').TSESTree.TSTypeAliasDeclaration} aliasDeclaration\n */\n const checkTypeParams = (aliasDeclaration) => {\n const {\n params,\n /* c8 ignore next -- Guard */\n } = aliasDeclaration.typeParameters ?? {\n /* c8 ignore next -- Guard */\n params: [],\n };\n for (const {\n name: {\n name,\n },\n } of params) {\n usedNames.add(name);\n }\n\n for (const usedName of usedNames) {\n if (!templateNames.includes(usedName)) {\n report(`Missing @template ${usedName}`);\n }\n }\n };\n\n const handleTypes = () => {\n const nde = /** @type {import('@typescript-eslint/types').TSESTree.Node} */ (\n node\n );\n if (!nde) {\n return;\n }\n\n switch (nde.type) {\n case 'ClassDeclaration':\n case 'FunctionDeclaration':\n case 'TSInterfaceDeclaration':\n case 'TSTypeAliasDeclaration':\n checkTypeParams(nde);\n break;\n case 'ExportDefaultDeclaration':\n switch (nde.declaration?.type) {\n case 'ClassDeclaration':\n case 'FunctionDeclaration':\n case 'TSInterfaceDeclaration':\n checkTypeParams(nde.declaration);\n break;\n }\n\n break;\n case 'ExportNamedDeclaration':\n switch (nde.declaration?.type) {\n case 'ClassDeclaration':\n case 'FunctionDeclaration':\n case 'TSInterfaceDeclaration':\n case 'TSTypeAliasDeclaration':\n checkTypeParams(nde.declaration);\n break;\n }\n\n break;\n }\n };\n\n const usedNameToTag = new Map();\n\n /**\n * @param {import('comment-parser').Spec} potentialTag\n */\n const checkForUsedTypes = (potentialTag) => {\n let parsedType;\n try {\n parsedType = mode === 'permissive' ?\n tryParseType(/** @type {string} */ (potentialTag.type)) :\n parseType(/** @type {string} */ (potentialTag.type), mode);\n } catch {\n return;\n }\n\n traverse(parsedType, (nde) => {\n const {\n type,\n value,\n } = /** @type {import('jsdoc-type-pratt-parser').NameResult} */ (nde);\n if (type === 'JsdocTypeName' && (/^[A-Z]$/u).test(value)) {\n usedNames.add(value);\n if (!usedNameToTag.has(value)) {\n usedNameToTag.set(value, potentialTag);\n }\n }\n });\n };\n\n /**\n * @param {string[]} tagNames\n */\n const checkTagsAndTemplates = (tagNames) => {\n for (const tagName of tagNames) {\n const preferredTagName = /** @type {string} */ (utils.getPreferredTagName({\n tagName,\n }));\n const matchingTags = utils.getTags(preferredTagName);\n for (const matchingTag of matchingTags) {\n checkForUsedTypes(matchingTag);\n }\n }\n\n // Could check against whitelist/blacklist\n for (const usedName of usedNames) {\n if (!templateNames.includes(usedName)) {\n report(`Missing @template ${usedName}`, null, usedNameToTag.get(usedName));\n }\n }\n };\n\n const callbackTags = utils.getTags('callback');\n const functionTags = utils.getTags('function');\n if (callbackTags.length || functionTags.length) {\n checkTagsAndTemplates([\n 'param', 'returns',\n ]);\n return;\n }\n\n const typedefTags = utils.getTags('typedef');\n if (!typedefTags.length || typedefTags.length >= 2) {\n handleTypes();\n return;\n }\n\n const potentialTypedef = typedefTags[0];\n checkForUsedTypes(potentialTypedef);\n\n checkTagsAndTemplates([\n 'property',\n ]);\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Requires template tags for each generic type parameter',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/require-template.md#repos-sticky-header',\n },\n schema: [\n {\n additionalProperties: false,\n properties: {\n requireSeparateTemplates: {\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"requireTemplate.cjs","names":["_iterateJsdoc","_interopRequireDefault","require","_jsdoccomment","e","__esModule","default","_default","exports","iterateJsdoc","context","node","report","settings","utils","requireSeparateTemplates","options","mode","usedNames","Set","templateTags","getTags","templateNames","flatMap","tag","parseClosureTemplateTag","name","names","split","length","checkTypeParams","aliasDeclaration","params","typeParameters","add","usedName","includes","handleTypes","nde","type","declaration","usedNameToTag","Map","checkForUsedTypes","potentialTag","parsedType","tryParseType","parseType","traverse","value","test","has","set","checkTagsAndTemplates","tagNames","tagName","preferredTagName","getPreferredTagName","matchingTags","matchingTag","get","callbackTags","functionTags","typedefTags","potentialTypedef","iterateAllJsdocs","meta","docs","description","url","schema","additionalProperties","properties","module"],"sources":["../../src/rules/requireTemplate.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc.js';\nimport {\n parse as parseType,\n traverse,\n tryParse as tryParseType,\n} from '@es-joy/jsdoccomment';\n\nexport default iterateJsdoc(({\n context,\n node,\n report,\n settings,\n utils,\n}) => {\n const {\n requireSeparateTemplates = false,\n } = context.options[0] || {};\n\n const {\n mode,\n } = settings;\n\n const usedNames = new Set();\n const templateTags = utils.getTags('template');\n const templateNames = templateTags.flatMap((tag) => {\n return utils.parseClosureTemplateTag(tag);\n });\n\n if (requireSeparateTemplates) {\n for (const tag of templateTags) {\n const {\n name,\n } = tag;\n const names = name.split(/,\\s*/v);\n if (names.length > 1) {\n report(`Missing separate @template for ${names[1]}`, null, tag);\n }\n }\n }\n\n /**\n * @param {import('@typescript-eslint/types').TSESTree.FunctionDeclaration|\n * import('@typescript-eslint/types').TSESTree.ClassDeclaration|\n * import('@typescript-eslint/types').TSESTree.TSInterfaceDeclaration|\n * import('@typescript-eslint/types').TSESTree.TSTypeAliasDeclaration} aliasDeclaration\n */\n const checkTypeParams = (aliasDeclaration) => {\n const {\n params,\n /* c8 ignore next -- Guard */\n } = aliasDeclaration.typeParameters ?? {\n /* c8 ignore next -- Guard */\n params: [],\n };\n for (const {\n name: {\n name,\n },\n } of params) {\n usedNames.add(name);\n }\n\n for (const usedName of usedNames) {\n if (!templateNames.includes(usedName)) {\n report(`Missing @template ${usedName}`);\n }\n }\n };\n\n const handleTypes = () => {\n const nde = /** @type {import('@typescript-eslint/types').TSESTree.Node} */ (\n node\n );\n if (!nde) {\n return;\n }\n\n switch (nde.type) {\n case 'ClassDeclaration':\n case 'FunctionDeclaration':\n case 'TSInterfaceDeclaration':\n case 'TSTypeAliasDeclaration':\n checkTypeParams(nde);\n break;\n case 'ExportDefaultDeclaration':\n switch (nde.declaration?.type) {\n case 'ClassDeclaration':\n case 'FunctionDeclaration':\n case 'TSInterfaceDeclaration':\n checkTypeParams(nde.declaration);\n break;\n }\n\n break;\n case 'ExportNamedDeclaration':\n switch (nde.declaration?.type) {\n case 'ClassDeclaration':\n case 'FunctionDeclaration':\n case 'TSInterfaceDeclaration':\n case 'TSTypeAliasDeclaration':\n checkTypeParams(nde.declaration);\n break;\n }\n\n break;\n }\n };\n\n const usedNameToTag = new Map();\n\n /**\n * @param {import('comment-parser').Spec} potentialTag\n */\n const checkForUsedTypes = (potentialTag) => {\n let parsedType;\n try {\n parsedType = mode === 'permissive' ?\n tryParseType(/** @type {string} */ (potentialTag.type)) :\n parseType(/** @type {string} */ (potentialTag.type), mode);\n } catch {\n return;\n }\n\n traverse(parsedType, (nde) => {\n const {\n type,\n value,\n } = /** @type {import('jsdoc-type-pratt-parser').NameResult} */ (nde);\n if (type === 'JsdocTypeName' && (/^[A-Z]$/v).test(value)) {\n usedNames.add(value);\n if (!usedNameToTag.has(value)) {\n usedNameToTag.set(value, potentialTag);\n }\n }\n });\n };\n\n /**\n * @param {string[]} tagNames\n */\n const checkTagsAndTemplates = (tagNames) => {\n for (const tagName of tagNames) {\n const preferredTagName = /** @type {string} */ (utils.getPreferredTagName({\n tagName,\n }));\n const matchingTags = utils.getTags(preferredTagName);\n for (const matchingTag of matchingTags) {\n checkForUsedTypes(matchingTag);\n }\n }\n\n // Could check against whitelist/blacklist\n for (const usedName of usedNames) {\n if (!templateNames.includes(usedName)) {\n report(`Missing @template ${usedName}`, null, usedNameToTag.get(usedName));\n }\n }\n };\n\n const callbackTags = utils.getTags('callback');\n const functionTags = utils.getTags('function');\n if (callbackTags.length || functionTags.length) {\n checkTagsAndTemplates([\n 'param', 'returns',\n ]);\n return;\n }\n\n const typedefTags = utils.getTags('typedef');\n if (!typedefTags.length || typedefTags.length >= 2) {\n handleTypes();\n return;\n }\n\n const potentialTypedef = typedefTags[0];\n checkForUsedTypes(potentialTypedef);\n\n checkTagsAndTemplates([\n 'property',\n ]);\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Requires template tags for each generic type parameter',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/require-template.md#repos-sticky-header',\n },\n schema: [\n {\n additionalProperties: false,\n properties: {\n requireSeparateTemplates: {\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"mappings":"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","ignoreList":[]}
|
package/dist/rules/tagLines.cjs
CHANGED
|
@@ -162,10 +162,10 @@ var _default = exports.default = (0, _iterateJsdoc.default)(({
|
|
|
162
162
|
description,
|
|
163
163
|
lastDescriptionLine
|
|
164
164
|
} = utils.getDescription();
|
|
165
|
-
if (!/\S/
|
|
165
|
+
if (!/\S/v.test(description)) {
|
|
166
166
|
return;
|
|
167
167
|
}
|
|
168
|
-
const trailingLines = description.match(/\n+$/
|
|
168
|
+
const trailingLines = description.match(/\n+$/v)?.[0]?.length;
|
|
169
169
|
const trailingDiff = (trailingLines ?? 0) - startLines;
|
|
170
170
|
if (trailingDiff > 0) {
|
|
171
171
|
utils.reportJSDoc(`Expected only ${startLines} line after block description`, {
|
|
@@ -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 // eslint-disable-next-line complexity -- Temporary\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, lines.length);\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/u).test(description)) {\n return;\n }\n\n const trailingLines = description.match(/\\n+$/u)?.[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 // eslint-disable-next-line complexity -- Temporary\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, lines.length);\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":[]}
|
|
@@ -8,15 +8,15 @@ var _iterateJsdoc = _interopRequireDefault(require("../iterateJsdoc.cjs"));
|
|
|
8
8
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
9
9
|
// We could disallow raw gt, quot, and apos, but allow for parity; but we do
|
|
10
10
|
// not allow hex or decimal character references
|
|
11
|
-
const htmlRegex = /(<|&(?!(?:amp|lt|gt|quot|apos);))(?=\S)/
|
|
12
|
-
const markdownRegex = /(?<!\\)(`+)([^`]+)\1(?!`)/
|
|
11
|
+
const htmlRegex = /(<|&(?!(?:amp|lt|gt|quot|apos);))(?=\S)/v;
|
|
12
|
+
const markdownRegex = /(?<!\\)(`+)([^`]+)\1(?!`)/v;
|
|
13
13
|
|
|
14
14
|
/**
|
|
15
15
|
* @param {string} desc
|
|
16
16
|
* @returns {string}
|
|
17
17
|
*/
|
|
18
18
|
const htmlReplacer = desc => {
|
|
19
|
-
return desc.replaceAll(new RegExp(htmlRegex, '
|
|
19
|
+
return desc.replaceAll(new RegExp(htmlRegex, 'gv'), _ => {
|
|
20
20
|
if (_ === '<') {
|
|
21
21
|
return '<';
|
|
22
22
|
}
|
|
@@ -29,7 +29,7 @@ const htmlReplacer = desc => {
|
|
|
29
29
|
* @returns {string}
|
|
30
30
|
*/
|
|
31
31
|
const markdownReplacer = desc => {
|
|
32
|
-
return desc.replaceAll(new RegExp(markdownRegex, '
|
|
32
|
+
return desc.replaceAll(new RegExp(markdownRegex, 'gv'), (_, backticks, encapsed) => {
|
|
33
33
|
const bookend = '`'.repeat(backticks.length);
|
|
34
34
|
return `\\${bookend}${encapsed}${bookend}`;
|
|
35
35
|
});
|
|
@@ -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)/
|
|
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 // Option properties here (or remove the object)\n escapeHTML: {\n type: 'boolean',\n },\n escapeMarkdown: {\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"mappings":";;;;;;AAAA,IAAAA,aAAA,GAAAC,sBAAA,CAAAC,OAAA;AAA8C,SAAAD,uBAAAE,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAE9C;AACA;AACA,MAAMG,SAAS,GAAG,0CAA0C;AAC5D,MAAMC,aAAa,GAAG,4BAA4B;;AAElD;AACA;AACA;AACA;AACA,MAAMC,YAAY,GAAIC,IAAI,IAAK;EAC7B,OAAOA,IAAI,CAACC,UAAU,CAAC,IAAIC,MAAM,CAACL,SAAS,EAAE,IAAI,CAAC,EAAGM,CAAC,IAAK;IACzD,IAAIA,CAAC,KAAK,GAAG,EAAE;MACb,OAAO,MAAM;IACf;IAEA,OAAO,OAAO;EAChB,CAAC,CAAC;AACJ,CAAC;;AAED;AACA;AACA;AACA;AACA,MAAMC,gBAAgB,GAAIJ,IAAI,IAAK;EACjC,OAAOA,IAAI,CAACC,UAAU,CAAC,IAAIC,MAAM,CAACJ,aAAa,EAAE,IAAI,CAAC,EAAE,CAACK,CAAC,EAAEE,SAAS,EAAEC,QAAQ,KAAK;IAClF,MAAMC,OAAO,GAAG,GAAG,CAACC,MAAM,CAACH,SAAS,CAACI,MAAM,CAAC;IAC5C,OAAO,KAAKF,OAAO,GAAGD,QAAQ,GAAGC,OAAO,EAAE;EAC5C,CAAC,CAAC;AACJ,CAAC;AAAC,IAAAG,QAAA,GAAAC,OAAA,CAAAf,OAAA,GAEa,IAAAgB,qBAAY,EAAC,CAAC;EAC3BC,OAAO;EACPC,KAAK;EACLC;AACF,CAAC,KAAK;EACJ,MAAM;IACJC,UAAU;IACVC;EACF,CAAC,GAAGJ,OAAO,CAACK,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;EAE5B,IAAI,CAACF,UAAU,IAAI,CAACC,cAAc,EAAE;IAClCJ,OAAO,CAACM,MAAM,CAAC;MACbC,GAAG,EAAE;QACHC,GAAG,EAAE;UACHC,MAAM,EAAE,CAAC;UACTC,IAAI,EAAE;QACR,CAAC;QACDC,KAAK,EAAE;UACLF,MAAM,EAAE,CAAC;UACTC,IAAI,EAAE;QACR;MACF,CAAC;MACDE,OAAO,EAAE;IACX,CAAC,CAAC;IACF;EACF;EAEA,MAAM;IACJC;EACF,CAAC,GAAGX,KAAK,CAACY,cAAc,CAAC,CAAC;EAE1B,IAAIX,UAAU,EAAE;IACd,IAAIU,YAAY,CAACE,IAAI,CAAE5B,IAAI,IAAK;MAC9B,OAAOH,SAAS,CAACgC,IAAI,CAAC7B,IAAI,CAAC;IAC7B,CAAC,CAAC,EAAE;MACF,MAAMuB,IAAI,GAAGR,KAAK,CAACe,mBAAmB,CAACjC,SAAS,EAAEE,YAAY,CAAC;MAC/DgB,KAAK,CAACgB,WAAW,CAAC,2CAA2C,EAAE;QAC7DR;MACF,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC;MAClB;IACF;IAEA,KAAK,MAAMS,GAAG,IAAIlB,KAAK,CAACmB,IAAI,EAAE;MAC5B,IAAID,GAAG,CAACA,GAAG,KAAK,SAAS,EAAE;QACzB;MACF;MAEA,IAAI,uBACFjB,KAAK,CAACmB,iBAAiB,CAACF,GAAG,EAAE,IAAI,CAAC,CAClCJ,IAAI,CAAE5B,IAAI,IAAK;QACf,OAAOH,SAAS,CAACgC,IAAI,CAAC7B,IAAI,CAAC;MAC7B,CAAC,CAAC,EAAE;QACF,MAAMuB,IAAI,GAAGR,KAAK,CAACoB,iBAAiB,CAACH,GAAG,EAAEnC,SAAS,EAAEE,YAAY,CAAC,GAChEiC,GAAG,CAACI,MAAM,CAAC,CAAC,CAAC,CAACC,MAAM;QACtBtB,KAAK,CAACgB,WAAW,CAAC,oDAAoD,EAAE;UACtER;QACF,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC;MACpB;IACF;IAEA;EACF;EAEA,IAAIG,YAAY,CAACE,IAAI,CAAE5B,IAAI,IAAK;IAC9B,OAAOF,aAAa,CAAC+B,IAAI,CAAC7B,IAAI,CAAC;EACjC,CAAC,CAAC,EAAE;IACF,MAAMuB,IAAI,GAAGR,KAAK,CAACe,mBAAmB,CAAChC,aAAa,EAAEM,gBAAgB,CAAC;IACvEW,KAAK,CAACgB,WAAW,CAAC,gDAAgD,EAAE;MAClER;IACF,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC;IAClB;EACF;EAEA,KAAK,MAAMS,GAAG,IAAIlB,KAAK,CAACmB,IAAI,EAAE;IAC5B,IAAID,GAAG,CAACA,GAAG,KAAK,SAAS,EAAE;MACzB;IACF;IAEA,IAAI,uBACFjB,KAAK,CAACmB,iBAAiB,CAACF,GAAG,EAAE,IAAI,CAAC,CAClCJ,IAAI,CAAE5B,IAAI,IAAK;MACf,OAAOF,aAAa,CAAC+B,IAAI,CAAC7B,IAAI,CAAC;IACjC,CAAC,CAAC,EAAE;MACF,MAAMuB,IAAI,GAAGR,KAAK,CAACoB,iBAAiB,CAClCH,GAAG,EAAElC,aAAa,EAAEM,gBACtB,CAAC,GAAG4B,GAAG,CAACI,MAAM,CAAC,CAAC,CAAC,CAACC,MAAM;MACxBtB,KAAK,CAACgB,WAAW,CACf,yDAAyD,EACzD;QACER;MACF,CAAC,EACD,MAAM,CAAC,CAAC,EACR,IACF,CAAC;IACH;EACF;AACF,CAAC,EAAE;EACDe,gBAAgB,EAAE,IAAI;EACtBC,IAAI,EAAE;IACJC,IAAI,EAAE;MACJC,WAAW,EAAE,kFAAkF;MAC/FC,GAAG,EAAE;IACP,CAAC;IACDC,OAAO,EAAE,MAAM;IACfC,MAAM,EAAE,CACN;MACEC,oBAAoB,EAAE,KAAK;MAC3BC,UAAU,EAAE;QACV;QACA9B,UAAU,EAAE;UACV+B,IAAI,EAAE;QACR,CAAC;QACD9B,cAAc,EAAE;UACd8B,IAAI,EAAE;QACR;MACF,CAAC;MACDA,IAAI,EAAE;IACR,CAAC,CACF;IACDA,IAAI,EAAE;EACR;AACF,CAAC,CAAC;AAAAC,MAAA,CAAArC,OAAA,GAAAA,OAAA,CAAAf,OAAA","ignoreList":[]}
|
|
@@ -9,7 +9,7 @@ var _jsdoccomment = require("@es-joy/jsdoccomment");
|
|
|
9
9
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
10
10
|
const inlineTags = new Set(['link', 'linkcode', 'linkplain', 'tutorial']);
|
|
11
11
|
const jsdocTypePrattKeywords = new Set(['import', 'is', 'readonly', 'typeof']);
|
|
12
|
-
const asExpression = /as\s+/
|
|
12
|
+
const asExpression = /as\s+/v;
|
|
13
13
|
const suppressTypes = new Set([
|
|
14
14
|
// https://github.com/google/closure-compiler/wiki/@suppress-annotations
|
|
15
15
|
// https://github.com/google/closure-compiler/blob/master/src/com/google/javascript/jscomp/parsing/ParserConfig.properties#L154
|