eslint-plugin-jsdoc 46.9.0 → 46.9.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/exportParser.js +5 -7
- package/dist/exportParser.js.map +1 -1
- package/dist/generateRule.js +1 -0
- package/dist/generateRule.js.map +1 -1
- package/dist/iterateJsdoc.js +35 -32
- package/dist/iterateJsdoc.js.map +1 -1
- package/dist/jsdocUtils.js +17 -26
- package/dist/jsdocUtils.js.map +1 -1
- package/dist/rules/checkExamples.js +1 -1
- package/dist/rules/checkExamples.js.map +1 -1
- package/dist/rules/checkLineAlignment.js +2 -2
- package/dist/rules/checkLineAlignment.js.map +1 -1
- package/dist/rules/checkTagNames.js +1 -1
- package/dist/rules/checkTagNames.js.map +1 -1
- package/dist/rules/checkTypes.js +2 -2
- package/dist/rules/checkTypes.js.map +1 -1
- package/dist/rules/importsAsDependencies.js +0 -1
- package/dist/rules/importsAsDependencies.js.map +1 -1
- package/dist/rules/matchName.js +2 -2
- package/dist/rules/matchName.js.map +1 -1
- package/dist/rules/multilineBlocks.js +2 -2
- package/dist/rules/multilineBlocks.js.map +1 -1
- package/dist/rules/noMissingSyntax.js +1 -0
- package/dist/rules/noMissingSyntax.js.map +1 -1
- package/dist/rules/noUndefinedTypes.js +1 -1
- package/dist/rules/noUndefinedTypes.js.map +1 -1
- package/dist/rules/requireJsdoc.js +6 -6
- package/dist/rules/requireJsdoc.js.map +1 -1
- package/dist/rules/requireParam.js +1 -0
- package/dist/rules/requireParam.js.map +1 -1
- package/dist/rules/requireReturnsCheck.js +1 -1
- package/dist/rules/requireReturnsCheck.js.map +1 -1
- package/dist/rules/sortTags.js +7 -7
- package/dist/rules/sortTags.js.map +1 -1
- package/dist/rules/tagLines.js +2 -2
- package/dist/rules/tagLines.js.map +1 -1
- package/dist/utils/hasReturnValue.js +15 -18
- package/dist/utils/hasReturnValue.js.map +1 -1
- package/package.json +19 -19
package/dist/exportParser.js
CHANGED
|
@@ -50,8 +50,7 @@ const getSymbolValue = function (symbol) {
|
|
|
50
50
|
|
|
51
51
|
/* istanbul ignore else */
|
|
52
52
|
if (symbol.type === 'literal') {
|
|
53
|
-
return
|
|
54
|
-
);
|
|
53
|
+
return /** @type {ValueObject} */symbol.value.value;
|
|
55
54
|
}
|
|
56
55
|
|
|
57
56
|
/* istanbul ignore next */
|
|
@@ -194,11 +193,11 @@ const getSymbol = function (node, globals, scope, opt) {
|
|
|
194
193
|
{
|
|
195
194
|
const val = createNode();
|
|
196
195
|
for (const method of node.body) {
|
|
197
|
-
val.props[/** @type {import('estree').Identifier} */ /** @type {import('estree').MethodDefinition} */method.key.name] = createNode();
|
|
196
|
+
val.props[/** @type {import('estree').Identifier} */( /** @type {import('estree').MethodDefinition} */method.key).name] = createNode();
|
|
198
197
|
/** @type {{[key: string]: CreatedNode}} */
|
|
199
|
-
val.props[/** @type {import('estree').Identifier} */ /** @type {import('estree').MethodDefinition} */method.key.name].type = 'object';
|
|
198
|
+
val.props[/** @type {import('estree').Identifier} */( /** @type {import('estree').MethodDefinition} */method.key).name].type = 'object';
|
|
200
199
|
/** @type {{[key: string]: CreatedNode}} */
|
|
201
|
-
val.props[/** @type {import('estree').Identifier} */ /** @type {import('estree').MethodDefinition} */method.key.name].value = /** @type {import('eslint').Rule.Node} */
|
|
200
|
+
val.props[/** @type {import('estree').Identifier} */( /** @type {import('estree').MethodDefinition} */method.key).name].value = /** @type {import('eslint').Rule.Node} */
|
|
202
201
|
/** @type {import('estree').MethodDefinition} */method.value;
|
|
203
202
|
}
|
|
204
203
|
val.type = 'object';
|
|
@@ -223,7 +222,7 @@ const getSymbol = function (node, globals, scope, opt) {
|
|
|
223
222
|
/* istanbul ignore if */
|
|
224
223
|
if (propVal) {
|
|
225
224
|
val.props[/** @type {import('estree').PrivateIdentifier} */
|
|
226
|
-
/** @type {import('estree').Property} */prop.key.name] = propVal;
|
|
225
|
+
( /** @type {import('estree').Property} */prop.key).name] = propVal;
|
|
227
226
|
}
|
|
228
227
|
}
|
|
229
228
|
return val;
|
|
@@ -607,7 +606,6 @@ const findExportedNode = function (block, node, cache) {
|
|
|
607
606
|
// No need to check `propval` for exported nodes as ESM
|
|
608
607
|
// exports are only global
|
|
609
608
|
}
|
|
610
|
-
|
|
611
609
|
return false;
|
|
612
610
|
};
|
|
613
611
|
|
package/dist/exportParser.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"exportParser.js","names":["_jsdoccomment","require","_debug","_interopRequireDefault","obj","__esModule","default","debug","debugModule","createNode","props","getSymbolValue","symbol","type","value","getIdentifier","node","globals","scope","opts","simpleIdentifier","identifierLiteral","name","block","createSymbol","getSymbol","opt","object","propertySymbol","property","computed","propertyValue","body","val","prototype","left","right","method","key","parent","prop","properties","includes","propVal","createBlockSymbol","isGlobal","window","special","nde","id","valueSymbol","initVariables","childNode","expression","declaration","declarations","initWindow","kind","mapVariables","isExport","ancestorsOnly","Boolean","init","exported","ANONYMOUS_DEFAULT","specifier","specifiers","local","findNode","cache","blockCache","slice","push","propval","Object","values","Array","isArray","some","exportTypes","Set","ignorableNestedTypes","getExportAncestor","idx","ignorableIfDeep","has","canBeExportedByAncestorType","canExportChildrenType","isExportByAncestor","findExportedNode","pval","isNodeExported","_globals$props$module","moduleExports","module","exports","initModuleExports","esm","parseRecursive","globalVars","parse","ast","accessibilityNodes","hasAccessibility","accessibility","undefined","isUncommentedExport","sourceCode","settings","exportNode","findJSDocComment","parseResult","_default"],"sources":["../src/exportParser.js"],"sourcesContent":["import {\n findJSDocComment,\n} from '@es-joy/jsdoccomment';\nimport debugModule from 'debug';\n\nconst debug = debugModule('requireExportJsdoc');\n\n/**\n * @typedef {{\n * value: string\n * }} ValueObject\n */\n\n/**\n * @typedef {{\n * type?: string,\n * value?: ValueObject|import('eslint').Rule.Node,\n * props: {\n * [key: string]: CreatedNode|null,\n * },\n * special?: true,\n * globalVars?: CreatedNode,\n * exported?: boolean,\n * ANONYMOUS_DEFAULT?: import('eslint').Rule.Node\n * }} CreatedNode\n */\n\n/**\n * @returns {CreatedNode}\n */\nconst createNode = function () {\n return {\n props: {},\n };\n};\n\n/**\n * @param {CreatedNode|null} symbol\n * @returns {string|null}\n */\nconst getSymbolValue = function (symbol) {\n /* istanbul ignore if */\n if (!symbol) {\n return null;\n }\n\n /* istanbul ignore else */\n if (symbol.type === 'literal') {\n return /** @type {ValueObject} */ (symbol.value).value;\n }\n\n /* istanbul ignore next */\n return null;\n};\n\n/**\n *\n * @param {import('estree').Identifier} node\n * @param {CreatedNode} globals\n * @param {CreatedNode} scope\n * @param {SymbolOptions} opts\n * @returns {CreatedNode|null}\n */\nconst getIdentifier = function (node, globals, scope, opts) {\n if (opts.simpleIdentifier) {\n // Type is Identier for noncomputed properties\n const identifierLiteral = createNode();\n identifierLiteral.type = 'literal';\n identifierLiteral.value = {\n value: node.name,\n };\n\n return identifierLiteral;\n }\n\n /* istanbul ignore next */\n const block = scope || globals;\n\n // As scopes are not currently supported, they are not traversed upwards recursively\n if (block.props[node.name]) {\n return block.props[node.name];\n }\n\n // Seems this will only be entered once scopes added and entered\n /* istanbul ignore next */\n if (globals.props[node.name]) {\n return globals.props[node.name];\n }\n\n return null;\n};\n\n/**\n * @callback CreateSymbol\n * @param {import('eslint').Rule.Node|null} node\n * @param {CreatedNode} globals\n * @param {import('eslint').Rule.Node|null} value\n * @param {CreatedNode} [scope]\n * @param {boolean|SymbolOptions} [isGlobal]\n * @returns {CreatedNode|null}\n */\n\n/** @type {CreateSymbol} */\nlet createSymbol; // eslint-disable-line prefer-const\n\n/* eslint-disable complexity -- Temporary */\n\n/**\n * @typedef {{\n * simpleIdentifier?: boolean\n * }} SymbolOptions\n */\n\n/**\n *\n * @param {import('eslint').Rule.Node} node\n * @param {CreatedNode} globals\n * @param {CreatedNode} scope\n * @param {SymbolOptions} [opt]\n * @returns {CreatedNode|null}\n */\nconst getSymbol = function (node, globals, scope, opt) {\n /* eslint-enable complexity -- Temporary */\n const opts = opt || {};\n /* istanbul ignore next */\n switch (node.type) {\n case 'Identifier': {\n return getIdentifier(node, globals, scope, opts);\n }\n\n case 'MemberExpression': {\n const obj = getSymbol(\n /** @type {import('eslint').Rule.Node} */\n (node.object),\n globals,\n scope,\n opts,\n );\n const propertySymbol = getSymbol(\n /** @type {import('eslint').Rule.Node} */\n (node.property),\n globals,\n scope,\n {\n simpleIdentifier: !node.computed,\n },\n );\n const propertyValue = getSymbolValue(propertySymbol);\n\n /* istanbul ignore else */\n if (obj && propertyValue && obj.props[propertyValue]) {\n const block = obj.props[propertyValue];\n\n return block;\n }\n\n /*\n if (opts.createMissingProps && propertyValue) {\n obj.props[propertyValue] = createNode();\n\n return obj.props[propertyValue];\n }\n */\n /* istanbul ignore next */\n debug(`MemberExpression: Missing property ${\n /** @type {import('estree').PrivateIdentifier} */ (node.property).name\n }`);\n\n /* istanbul ignore next */\n return null;\n }\n\n case 'ClassExpression': {\n return getSymbol(\n /** @type {import('eslint').Rule.Node} */\n (node.body),\n globals,\n scope,\n opts,\n );\n }\n\n // @ts-expect-error TS OK\n case 'TSTypeAliasDeclaration':\n // @ts-expect-error TS OK\n // Fallthrough\n case 'TSEnumDeclaration': case 'TSInterfaceDeclaration':\n case 'ClassDeclaration':\n case 'FunctionExpression': case 'FunctionDeclaration':\n case 'ArrowFunctionExpression': {\n const val = createNode();\n val.props.prototype = createNode();\n val.props.prototype.type = 'object';\n val.type = 'object';\n val.value = node;\n\n return val;\n }\n\n case 'AssignmentExpression': {\n return createSymbol(\n /** @type {import('eslint').Rule.Node} */\n (node.left),\n globals,\n /** @type {import('eslint').Rule.Node} */\n (node.right),\n scope,\n opts,\n );\n }\n\n case 'ClassBody': {\n const val = createNode();\n for (const method of node.body) {\n val.props[\n /** @type {import('estree').Identifier} */ (\n /** @type {import('estree').MethodDefinition} */ (\n method\n ).key\n ).name\n ] = createNode();\n /** @type {{[key: string]: CreatedNode}} */ (val.props)[\n /** @type {import('estree').Identifier} */ (\n /** @type {import('estree').MethodDefinition} */ (\n method\n ).key\n ).name\n ].type = 'object';\n /** @type {{[key: string]: CreatedNode}} */ (val.props)[\n /** @type {import('estree').Identifier} */ (\n /** @type {import('estree').MethodDefinition} */ (\n method\n ).key\n ).name\n ].value = /** @type {import('eslint').Rule.Node} */ (\n /** @type {import('estree').MethodDefinition} */ (method).value\n );\n }\n\n val.type = 'object';\n val.value = node.parent;\n\n return val;\n }\n\n case 'ObjectExpression': {\n const val = createNode();\n val.type = 'object';\n for (const prop of node.properties) {\n if ([\n // @typescript-eslint/parser, espree, acorn, etc.\n 'SpreadElement',\n\n // @babel/eslint-parser\n 'ExperimentalSpreadProperty',\n ].includes(prop.type)) {\n continue;\n }\n\n const propVal = getSymbol(\n /** @type {import('eslint').Rule.Node} */ (\n /** @type {import('estree').Property} */\n (prop).value\n ),\n globals,\n scope,\n opts,\n );\n /* istanbul ignore if */\n if (propVal) {\n val.props[\n /** @type {import('estree').PrivateIdentifier} */\n (\n /** @type {import('estree').Property} */ (prop).key\n ).name\n ] = propVal;\n }\n }\n\n return val;\n }\n\n case 'Literal': {\n const val = createNode();\n val.type = 'literal';\n val.value = node;\n\n return val;\n }\n }\n\n /* istanbul ignore next */\n return null;\n};\n\n/**\n *\n * @param {CreatedNode} block\n * @param {string} name\n * @param {CreatedNode|null} value\n * @param {CreatedNode} globals\n * @param {boolean|SymbolOptions|undefined} isGlobal\n * @returns {void}\n */\nconst createBlockSymbol = function (block, name, value, globals, isGlobal) {\n block.props[name] = value;\n if (isGlobal && globals.props.window && globals.props.window.special) {\n globals.props.window.props[name] = value;\n }\n};\n\ncreateSymbol = function (node, globals, value, scope, isGlobal) {\n const block = scope || globals;\n /* istanbul ignore if */\n if (!node) {\n return null;\n }\n\n let symbol;\n switch (node.type) {\n case 'FunctionDeclaration':\n /* istanbul ignore next */\n // @ts-expect-error TS OK\n // Fall through\n case 'TSEnumDeclaration': case 'TSInterfaceDeclaration':\n /* istanbul ignore next */\n // @ts-expect-error TS OK\n // Fall through\n case 'TSTypeAliasDeclaration': case 'ClassDeclaration': {\n const nde = /** @type {import('estree').ClassDeclaration} */ (node);\n /* istanbul ignore else */\n if (nde.id && nde.id.type === 'Identifier') {\n return createSymbol(\n /** @type {import('eslint').Rule.Node} */ (nde.id),\n globals,\n node,\n globals,\n );\n }\n\n /* istanbul ignore next */\n break;\n }\n\n case 'Identifier': {\n const nde = /** @type {import('estree').Identifier} */ (node);\n if (value) {\n const valueSymbol = getSymbol(value, globals, block);\n /* istanbul ignore else */\n if (valueSymbol) {\n createBlockSymbol(block, nde.name, valueSymbol, globals, isGlobal);\n\n return block.props[nde.name];\n }\n\n /* istanbul ignore next */\n debug('Identifier: Missing value symbol for %s', nde.name);\n } else {\n createBlockSymbol(block, nde.name, createNode(), globals, isGlobal);\n\n return block.props[nde.name];\n }\n\n /* istanbul ignore next */\n break;\n }\n\n case 'MemberExpression': {\n const nde = /** @type {import('estree').MemberExpression} */ (node);\n symbol = getSymbol(\n /** @type {import('eslint').Rule.Node} */ (nde.object), globals, block,\n );\n\n const propertySymbol = getSymbol(\n /** @type {import('eslint').Rule.Node} */ (nde.property),\n globals,\n block,\n {\n simpleIdentifier: !nde.computed,\n },\n );\n const propertyValue = getSymbolValue(propertySymbol);\n if (symbol && propertyValue) {\n createBlockSymbol(symbol, propertyValue, getSymbol(\n /** @type {import('eslint').Rule.Node} */\n (value), globals, block,\n ), globals, isGlobal);\n return symbol.props[propertyValue];\n }\n\n debug(\n 'MemberExpression: Missing symbol: %s',\n /** @type {import('estree').Identifier} */ (\n nde.property\n ).name,\n );\n break;\n }\n }\n\n return null;\n};\n\n/**\n * Creates variables from variable definitions\n * @param {import('eslint').Rule.Node} node\n * @param {CreatedNode} globals\n * @param {import('./rules/requireJsdoc.js').RequireJsdocOpts} opts\n * @returns {void}\n */\nconst initVariables = function (node, globals, opts) {\n switch (node.type) {\n case 'Program': {\n for (const childNode of node.body) {\n initVariables(\n /** @type {import('eslint').Rule.Node} */\n (childNode),\n globals,\n opts,\n );\n }\n\n break;\n }\n\n case 'ExpressionStatement': {\n initVariables(\n /** @type {import('eslint').Rule.Node} */\n (node.expression),\n globals,\n opts,\n );\n break;\n }\n\n case 'VariableDeclaration': {\n for (const declaration of node.declarations) {\n // let and const\n const symbol = createSymbol(\n /** @type {import('eslint').Rule.Node} */\n (declaration.id),\n globals,\n null,\n globals,\n );\n if (opts.initWindow && node.kind === 'var' && globals.props.window) {\n // If var, also add to window\n globals.props.window.props[\n /** @type {import('estree').Identifier} */\n (declaration.id).name\n ] = symbol;\n }\n }\n\n break;\n }\n\n case 'ExportNamedDeclaration': {\n if (node.declaration) {\n initVariables(\n /** @type {import('eslint').Rule.Node} */\n (node.declaration),\n globals,\n opts,\n );\n }\n\n break;\n }\n }\n};\n\n/* eslint-disable complexity -- Temporary */\n\n/**\n * Populates variable maps using AST\n * @param {import('eslint').Rule.Node} node\n * @param {CreatedNode} globals\n * @param {import('./rules/requireJsdoc.js').RequireJsdocOpts} opt\n * @param {true} [isExport]\n * @returns {boolean}\n */\nconst mapVariables = function (node, globals, opt, isExport) {\n /* eslint-enable complexity -- Temporary */\n /* istanbul ignore next */\n const opts = opt || {};\n /* istanbul ignore next */\n switch (node.type) {\n case 'Program': {\n if (opts.ancestorsOnly) {\n return false;\n }\n\n for (const childNode of node.body) {\n mapVariables(\n /** @type {import('eslint').Rule.Node} */\n (childNode),\n globals,\n opts,\n );\n }\n\n break;\n }\n\n case 'ExpressionStatement': {\n mapVariables(\n /** @type {import('eslint').Rule.Node} */\n (node.expression),\n globals,\n opts,\n );\n break;\n }\n\n case 'AssignmentExpression': {\n createSymbol(\n /** @type {import('eslint').Rule.Node} */\n (node.left),\n globals,\n /** @type {import('eslint').Rule.Node} */\n (node.right),\n );\n break;\n }\n\n case 'VariableDeclaration': {\n for (const declaration of node.declarations) {\n const isGlobal = Boolean(opts.initWindow && node.kind === 'var' && globals.props.window);\n const symbol = createSymbol(\n /** @type {import('eslint').Rule.Node} */\n (declaration.id),\n globals,\n /** @type {import('eslint').Rule.Node} */\n (declaration.init),\n globals,\n isGlobal,\n );\n if (symbol && isExport) {\n symbol.exported = true;\n }\n }\n\n break;\n }\n\n case 'FunctionDeclaration': {\n /* istanbul ignore if */\n if (/** @type {import('estree').Identifier} */ (node.id).type === 'Identifier') {\n createSymbol(\n /** @type {import('eslint').Rule.Node} */\n (node.id),\n globals,\n node,\n globals,\n true,\n );\n }\n\n break;\n }\n\n case 'ExportDefaultDeclaration': {\n const symbol = createSymbol(\n /** @type {import('eslint').Rule.Node} */\n (node.declaration),\n globals,\n /** @type {import('eslint').Rule.Node} */\n (node.declaration),\n );\n if (symbol) {\n symbol.exported = true;\n } else {\n // if (!node.id) {\n globals.ANONYMOUS_DEFAULT = /** @type {import('eslint').Rule.Node} */ (\n node.declaration\n );\n }\n\n break;\n }\n\n case 'ExportNamedDeclaration': {\n if (node.declaration) {\n if (node.declaration.type === 'VariableDeclaration') {\n mapVariables(\n /** @type {import('eslint').Rule.Node} */\n (node.declaration),\n globals,\n opts,\n true,\n );\n } else {\n const symbol = createSymbol(\n /** @type {import('eslint').Rule.Node} */\n (node.declaration),\n globals,\n /** @type {import('eslint').Rule.Node} */\n (node.declaration),\n );\n /* istanbul ignore if */\n if (symbol) {\n symbol.exported = true;\n }\n }\n }\n\n for (const specifier of node.specifiers) {\n mapVariables(\n /** @type {import('eslint').Rule.Node} */\n (specifier),\n globals,\n opts,\n );\n }\n\n break;\n }\n\n case 'ExportSpecifier': {\n const symbol = getSymbol(\n /** @type {import('eslint').Rule.Node} */\n (node.local),\n globals,\n globals,\n );\n /* istanbul ignore if */\n if (symbol) {\n symbol.exported = true;\n }\n\n break;\n }\n\n case 'ClassDeclaration': {\n createSymbol(\n /** @type {import('eslint').Rule.Node|null} */ (node.id),\n globals,\n /** @type {import('eslint').Rule.Node} */ (node.body),\n globals,\n );\n break;\n }\n\n default: {\n /* istanbul ignore next */\n return false;\n }\n }\n\n return true;\n};\n\n/**\n *\n * @param {import('eslint').Rule.Node} node\n * @param {CreatedNode|ValueObject|string|undefined|\n * import('eslint').Rule.Node} block\n * @param {(CreatedNode|ValueObject|string|\n * import('eslint').Rule.Node)[]} [cache]\n * @returns {boolean}\n */\nconst findNode = function (node, block, cache) {\n let blockCache = cache || [];\n if (!block || blockCache.includes(block)) {\n return false;\n }\n\n blockCache = blockCache.slice();\n blockCache.push(block);\n\n if (\n typeof block === 'object' &&\n 'type' in block &&\n (block.type === 'object' || block.type === 'MethodDefinition') &&\n block.value === node\n ) {\n return true;\n }\n\n if (typeof block !== 'object') {\n return false;\n }\n\n const props = ('props' in block && block.props) || ('body' in block && block.body);\n for (const propval of Object.values(props || {})) {\n if (Array.isArray(propval)) {\n /* istanbul ignore if */\n if (propval.some((val) => {\n return findNode(node, val, blockCache);\n })) {\n return true;\n }\n } else if (findNode(node, propval, blockCache)) {\n return true;\n }\n }\n\n return false;\n};\n\nconst exportTypes = new Set([\n 'ExportNamedDeclaration', 'ExportDefaultDeclaration',\n]);\nconst ignorableNestedTypes = new Set([\n 'FunctionDeclaration', 'ArrowFunctionExpression', 'FunctionExpression',\n]);\n\n/**\n * @param {import('eslint').Rule.Node} nde\n * @returns {import('eslint').Rule.Node|false}\n */\nconst getExportAncestor = function (nde) {\n let node = nde;\n let idx = 0;\n const ignorableIfDeep = ignorableNestedTypes.has(nde?.type);\n while (node) {\n // Ignore functions nested more deeply than say `export default function () {}`\n if (idx >= 2 && ignorableIfDeep) {\n break;\n }\n\n if (exportTypes.has(node.type)) {\n return node;\n }\n\n node = node.parent;\n idx++;\n }\n\n return false;\n};\n\nconst canBeExportedByAncestorType = new Set([\n 'TSPropertySignature',\n 'TSMethodSignature',\n 'ClassProperty',\n 'PropertyDefinition',\n 'Method',\n]);\n\nconst canExportChildrenType = new Set([\n 'TSInterfaceBody',\n 'TSInterfaceDeclaration',\n 'TSTypeLiteral',\n 'TSTypeAliasDeclaration',\n 'ClassDeclaration',\n 'ClassBody',\n 'ClassDefinition',\n 'ClassExpression',\n 'Program',\n]);\n\n/**\n * @param {import('eslint').Rule.Node} nde\n * @returns {false|import('eslint').Rule.Node}\n */\nconst isExportByAncestor = function (nde) {\n if (!canBeExportedByAncestorType.has(nde.type)) {\n return false;\n }\n\n let node = nde.parent;\n while (node) {\n if (exportTypes.has(node.type)) {\n return node;\n }\n\n if (!canExportChildrenType.has(node.type)) {\n return false;\n }\n\n node = node.parent;\n }\n\n return false;\n};\n\n/**\n *\n * @param {CreatedNode} block\n * @param {import('eslint').Rule.Node} node\n * @param {CreatedNode[]} [cache] Currently unused\n * @returns {boolean}\n */\nconst findExportedNode = function (block, node, cache) {\n /* istanbul ignore if */\n if (block === null) {\n return false;\n }\n\n const blockCache = cache || [];\n const {\n props,\n } = block;\n for (const propval of Object.values(props)) {\n const pval = /** @type {CreatedNode} */ (propval);\n blockCache.push(pval);\n if (pval.exported && (node === pval.value || findNode(node, pval.value))) {\n return true;\n }\n\n // No need to check `propval` for exported nodes as ESM\n // exports are only global\n }\n\n return false;\n};\n\n/**\n *\n * @param {import('eslint').Rule.Node} node\n * @param {CreatedNode} globals\n * @param {import('./rules/requireJsdoc.js').RequireJsdocOpts} opt\n * @returns {boolean}\n */\nconst isNodeExported = function (node, globals, opt) {\n const moduleExports = globals.props.module?.props?.exports;\n if (\n opt.initModuleExports && moduleExports && findNode(node, moduleExports)\n ) {\n return true;\n }\n\n if (opt.initWindow && globals.props.window && findNode(node, globals.props.window)) {\n return true;\n }\n\n if (opt.esm && findExportedNode(globals, node)) {\n return true;\n }\n\n return false;\n};\n\n/**\n *\n * @param {import('eslint').Rule.Node} node\n * @param {CreatedNode} globalVars\n * @param {import('./rules/requireJsdoc.js').RequireJsdocOpts} opts\n * @returns {boolean}\n */\nconst parseRecursive = function (node, globalVars, opts) {\n // Iterate from top using recursion - stop at first processed node from top\n if (node.parent && parseRecursive(node.parent, globalVars, opts)) {\n return true;\n }\n\n return mapVariables(node, globalVars, opts);\n};\n\n/**\n *\n * @param {import('eslint').Rule.Node} ast\n * @param {import('eslint').Rule.Node} node\n * @param {import('./rules/requireJsdoc.js').RequireJsdocOpts} opt\n * @returns {CreatedNode}\n */\nconst parse = function (ast, node, opt) {\n /* istanbul ignore next */\n const opts = opt || {\n ancestorsOnly: false,\n esm: true,\n initModuleExports: true,\n initWindow: true,\n };\n\n const globalVars = createNode();\n if (opts.initModuleExports) {\n globalVars.props.module = createNode();\n globalVars.props.module.props.exports = createNode();\n globalVars.props.exports = globalVars.props.module.props.exports;\n }\n\n if (opts.initWindow) {\n globalVars.props.window = createNode();\n globalVars.props.window.special = true;\n }\n\n if (opts.ancestorsOnly) {\n parseRecursive(node, globalVars, opts);\n } else {\n initVariables(ast, globalVars, opts);\n mapVariables(ast, globalVars, opts);\n }\n\n return {\n globalVars,\n props: {},\n };\n};\n\nconst accessibilityNodes = new Set([\n 'PropertyDefinition',\n 'MethodDefinition',\n]);\n\n/**\n *\n * @param {import('eslint').Rule.Node} node\n * @returns {boolean}\n */\nconst hasAccessibility = (node) => {\n return accessibilityNodes.has(node.type) && 'accessibility' in node &&\n node.accessibility !== 'public' && node.accessibility !== undefined;\n};\n\n/**\n *\n * @param {import('eslint').Rule.Node} node\n * @param {import('eslint').SourceCode} sourceCode\n * @param {import('./rules/requireJsdoc.js').RequireJsdocOpts} opt\n * @param {import('./iterateJsdoc.js').Settings} settings\n * @returns {boolean}\n */\nconst isUncommentedExport = function (node, sourceCode, opt, settings) {\n // console.log({node});\n // Optimize with ancestor check for esm\n if (opt.esm) {\n if (hasAccessibility(node) ||\n node.parent && hasAccessibility(node.parent)) {\n return false;\n }\n\n const exportNode = getExportAncestor(node);\n\n // Is export node comment\n if (exportNode && !findJSDocComment(exportNode, sourceCode, settings)) {\n return true;\n }\n\n /**\n * Some typescript types are not in variable map, but inherit exported (interface property and method)\n */\n if (\n isExportByAncestor(node) &&\n !findJSDocComment(node, sourceCode, settings)\n ) {\n return true;\n }\n }\n\n const ast = /** @type {unknown} */ (sourceCode.ast);\n\n const parseResult = parse(\n /** @type {import('eslint').Rule.Node} */\n (ast),\n node,\n opt,\n );\n\n return isNodeExported(\n node, /** @type {CreatedNode} */ (parseResult.globalVars), opt,\n );\n};\n\nexport default {\n isUncommentedExport,\n parse,\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"exportParser.js","names":["_jsdoccomment","require","_debug","_interopRequireDefault","obj","__esModule","default","debug","debugModule","createNode","props","getSymbolValue","symbol","type","value","getIdentifier","node","globals","scope","opts","simpleIdentifier","identifierLiteral","name","block","createSymbol","getSymbol","opt","object","propertySymbol","property","computed","propertyValue","body","val","prototype","left","right","method","key","parent","prop","properties","includes","propVal","createBlockSymbol","isGlobal","window","special","nde","id","valueSymbol","initVariables","childNode","expression","declaration","declarations","initWindow","kind","mapVariables","isExport","ancestorsOnly","Boolean","init","exported","ANONYMOUS_DEFAULT","specifier","specifiers","local","findNode","cache","blockCache","slice","push","propval","Object","values","Array","isArray","some","exportTypes","Set","ignorableNestedTypes","getExportAncestor","idx","ignorableIfDeep","has","canBeExportedByAncestorType","canExportChildrenType","isExportByAncestor","findExportedNode","pval","isNodeExported","_globals$props$module","moduleExports","module","exports","initModuleExports","esm","parseRecursive","globalVars","parse","ast","accessibilityNodes","hasAccessibility","accessibility","undefined","isUncommentedExport","sourceCode","settings","exportNode","findJSDocComment","parseResult","_default"],"sources":["../src/exportParser.js"],"sourcesContent":["import {\n findJSDocComment,\n} from '@es-joy/jsdoccomment';\nimport debugModule from 'debug';\n\nconst debug = debugModule('requireExportJsdoc');\n\n/**\n * @typedef {{\n * value: string\n * }} ValueObject\n */\n\n/**\n * @typedef {{\n * type?: string,\n * value?: ValueObject|import('eslint').Rule.Node,\n * props: {\n * [key: string]: CreatedNode|null,\n * },\n * special?: true,\n * globalVars?: CreatedNode,\n * exported?: boolean,\n * ANONYMOUS_DEFAULT?: import('eslint').Rule.Node\n * }} CreatedNode\n */\n\n/**\n * @returns {CreatedNode}\n */\nconst createNode = function () {\n return {\n props: {},\n };\n};\n\n/**\n * @param {CreatedNode|null} symbol\n * @returns {string|null}\n */\nconst getSymbolValue = function (symbol) {\n /* istanbul ignore if */\n if (!symbol) {\n return null;\n }\n\n /* istanbul ignore else */\n if (symbol.type === 'literal') {\n return /** @type {ValueObject} */ (symbol.value).value;\n }\n\n /* istanbul ignore next */\n return null;\n};\n\n/**\n *\n * @param {import('estree').Identifier} node\n * @param {CreatedNode} globals\n * @param {CreatedNode} scope\n * @param {SymbolOptions} opts\n * @returns {CreatedNode|null}\n */\nconst getIdentifier = function (node, globals, scope, opts) {\n if (opts.simpleIdentifier) {\n // Type is Identier for noncomputed properties\n const identifierLiteral = createNode();\n identifierLiteral.type = 'literal';\n identifierLiteral.value = {\n value: node.name,\n };\n\n return identifierLiteral;\n }\n\n /* istanbul ignore next */\n const block = scope || globals;\n\n // As scopes are not currently supported, they are not traversed upwards recursively\n if (block.props[node.name]) {\n return block.props[node.name];\n }\n\n // Seems this will only be entered once scopes added and entered\n /* istanbul ignore next */\n if (globals.props[node.name]) {\n return globals.props[node.name];\n }\n\n return null;\n};\n\n/**\n * @callback CreateSymbol\n * @param {import('eslint').Rule.Node|null} node\n * @param {CreatedNode} globals\n * @param {import('eslint').Rule.Node|null} value\n * @param {CreatedNode} [scope]\n * @param {boolean|SymbolOptions} [isGlobal]\n * @returns {CreatedNode|null}\n */\n\n/** @type {CreateSymbol} */\nlet createSymbol; // eslint-disable-line prefer-const\n\n/* eslint-disable complexity -- Temporary */\n\n/**\n * @typedef {{\n * simpleIdentifier?: boolean\n * }} SymbolOptions\n */\n\n/**\n *\n * @param {import('eslint').Rule.Node} node\n * @param {CreatedNode} globals\n * @param {CreatedNode} scope\n * @param {SymbolOptions} [opt]\n * @returns {CreatedNode|null}\n */\nconst getSymbol = function (node, globals, scope, opt) {\n /* eslint-enable complexity -- Temporary */\n const opts = opt || {};\n /* istanbul ignore next */\n switch (node.type) {\n case 'Identifier': {\n return getIdentifier(node, globals, scope, opts);\n }\n\n case 'MemberExpression': {\n const obj = getSymbol(\n /** @type {import('eslint').Rule.Node} */\n (node.object),\n globals,\n scope,\n opts,\n );\n const propertySymbol = getSymbol(\n /** @type {import('eslint').Rule.Node} */\n (node.property),\n globals,\n scope,\n {\n simpleIdentifier: !node.computed,\n },\n );\n const propertyValue = getSymbolValue(propertySymbol);\n\n /* istanbul ignore else */\n if (obj && propertyValue && obj.props[propertyValue]) {\n const block = obj.props[propertyValue];\n\n return block;\n }\n\n /*\n if (opts.createMissingProps && propertyValue) {\n obj.props[propertyValue] = createNode();\n\n return obj.props[propertyValue];\n }\n */\n /* istanbul ignore next */\n debug(`MemberExpression: Missing property ${\n /** @type {import('estree').PrivateIdentifier} */ (node.property).name\n }`);\n\n /* istanbul ignore next */\n return null;\n }\n\n case 'ClassExpression': {\n return getSymbol(\n /** @type {import('eslint').Rule.Node} */\n (node.body),\n globals,\n scope,\n opts,\n );\n }\n\n // @ts-expect-error TS OK\n case 'TSTypeAliasDeclaration':\n // @ts-expect-error TS OK\n // Fallthrough\n case 'TSEnumDeclaration': case 'TSInterfaceDeclaration':\n case 'ClassDeclaration':\n case 'FunctionExpression': case 'FunctionDeclaration':\n case 'ArrowFunctionExpression': {\n const val = createNode();\n val.props.prototype = createNode();\n val.props.prototype.type = 'object';\n val.type = 'object';\n val.value = node;\n\n return val;\n }\n\n case 'AssignmentExpression': {\n return createSymbol(\n /** @type {import('eslint').Rule.Node} */\n (node.left),\n globals,\n /** @type {import('eslint').Rule.Node} */\n (node.right),\n scope,\n opts,\n );\n }\n\n case 'ClassBody': {\n const val = createNode();\n for (const method of node.body) {\n val.props[\n /** @type {import('estree').Identifier} */ (\n /** @type {import('estree').MethodDefinition} */ (\n method\n ).key\n ).name\n ] = createNode();\n /** @type {{[key: string]: CreatedNode}} */ (val.props)[\n /** @type {import('estree').Identifier} */ (\n /** @type {import('estree').MethodDefinition} */ (\n method\n ).key\n ).name\n ].type = 'object';\n /** @type {{[key: string]: CreatedNode}} */ (val.props)[\n /** @type {import('estree').Identifier} */ (\n /** @type {import('estree').MethodDefinition} */ (\n method\n ).key\n ).name\n ].value = /** @type {import('eslint').Rule.Node} */ (\n /** @type {import('estree').MethodDefinition} */ (method).value\n );\n }\n\n val.type = 'object';\n val.value = node.parent;\n\n return val;\n }\n\n case 'ObjectExpression': {\n const val = createNode();\n val.type = 'object';\n for (const prop of node.properties) {\n if ([\n // @typescript-eslint/parser, espree, acorn, etc.\n 'SpreadElement',\n\n // @babel/eslint-parser\n 'ExperimentalSpreadProperty',\n ].includes(prop.type)) {\n continue;\n }\n\n const propVal = getSymbol(\n /** @type {import('eslint').Rule.Node} */ (\n /** @type {import('estree').Property} */\n (prop).value\n ),\n globals,\n scope,\n opts,\n );\n /* istanbul ignore if */\n if (propVal) {\n val.props[\n /** @type {import('estree').PrivateIdentifier} */\n (\n /** @type {import('estree').Property} */ (prop).key\n ).name\n ] = propVal;\n }\n }\n\n return val;\n }\n\n case 'Literal': {\n const val = createNode();\n val.type = 'literal';\n val.value = node;\n\n return val;\n }\n }\n\n /* istanbul ignore next */\n return null;\n};\n\n/**\n *\n * @param {CreatedNode} block\n * @param {string} name\n * @param {CreatedNode|null} value\n * @param {CreatedNode} globals\n * @param {boolean|SymbolOptions|undefined} isGlobal\n * @returns {void}\n */\nconst createBlockSymbol = function (block, name, value, globals, isGlobal) {\n block.props[name] = value;\n if (isGlobal && globals.props.window && globals.props.window.special) {\n globals.props.window.props[name] = value;\n }\n};\n\ncreateSymbol = function (node, globals, value, scope, isGlobal) {\n const block = scope || globals;\n /* istanbul ignore if */\n if (!node) {\n return null;\n }\n\n let symbol;\n switch (node.type) {\n case 'FunctionDeclaration':\n /* istanbul ignore next */\n // @ts-expect-error TS OK\n // Fall through\n case 'TSEnumDeclaration': case 'TSInterfaceDeclaration':\n /* istanbul ignore next */\n // @ts-expect-error TS OK\n // Fall through\n case 'TSTypeAliasDeclaration': case 'ClassDeclaration': {\n const nde = /** @type {import('estree').ClassDeclaration} */ (node);\n /* istanbul ignore else */\n if (nde.id && nde.id.type === 'Identifier') {\n return createSymbol(\n /** @type {import('eslint').Rule.Node} */ (nde.id),\n globals,\n node,\n globals,\n );\n }\n\n /* istanbul ignore next */\n break;\n }\n\n case 'Identifier': {\n const nde = /** @type {import('estree').Identifier} */ (node);\n if (value) {\n const valueSymbol = getSymbol(value, globals, block);\n /* istanbul ignore else */\n if (valueSymbol) {\n createBlockSymbol(block, nde.name, valueSymbol, globals, isGlobal);\n\n return block.props[nde.name];\n }\n\n /* istanbul ignore next */\n debug('Identifier: Missing value symbol for %s', nde.name);\n } else {\n createBlockSymbol(block, nde.name, createNode(), globals, isGlobal);\n\n return block.props[nde.name];\n }\n\n /* istanbul ignore next */\n break;\n }\n\n case 'MemberExpression': {\n const nde = /** @type {import('estree').MemberExpression} */ (node);\n symbol = getSymbol(\n /** @type {import('eslint').Rule.Node} */ (nde.object), globals, block,\n );\n\n const propertySymbol = getSymbol(\n /** @type {import('eslint').Rule.Node} */ (nde.property),\n globals,\n block,\n {\n simpleIdentifier: !nde.computed,\n },\n );\n const propertyValue = getSymbolValue(propertySymbol);\n if (symbol && propertyValue) {\n createBlockSymbol(symbol, propertyValue, getSymbol(\n /** @type {import('eslint').Rule.Node} */\n (value), globals, block,\n ), globals, isGlobal);\n return symbol.props[propertyValue];\n }\n\n debug(\n 'MemberExpression: Missing symbol: %s',\n /** @type {import('estree').Identifier} */ (\n nde.property\n ).name,\n );\n break;\n }\n }\n\n return null;\n};\n\n/**\n * Creates variables from variable definitions\n * @param {import('eslint').Rule.Node} node\n * @param {CreatedNode} globals\n * @param {import('./rules/requireJsdoc.js').RequireJsdocOpts} opts\n * @returns {void}\n */\nconst initVariables = function (node, globals, opts) {\n switch (node.type) {\n case 'Program': {\n for (const childNode of node.body) {\n initVariables(\n /** @type {import('eslint').Rule.Node} */\n (childNode),\n globals,\n opts,\n );\n }\n\n break;\n }\n\n case 'ExpressionStatement': {\n initVariables(\n /** @type {import('eslint').Rule.Node} */\n (node.expression),\n globals,\n opts,\n );\n break;\n }\n\n case 'VariableDeclaration': {\n for (const declaration of node.declarations) {\n // let and const\n const symbol = createSymbol(\n /** @type {import('eslint').Rule.Node} */\n (declaration.id),\n globals,\n null,\n globals,\n );\n if (opts.initWindow && node.kind === 'var' && globals.props.window) {\n // If var, also add to window\n globals.props.window.props[\n /** @type {import('estree').Identifier} */\n (declaration.id).name\n ] = symbol;\n }\n }\n\n break;\n }\n\n case 'ExportNamedDeclaration': {\n if (node.declaration) {\n initVariables(\n /** @type {import('eslint').Rule.Node} */\n (node.declaration),\n globals,\n opts,\n );\n }\n\n break;\n }\n }\n};\n\n/* eslint-disable complexity -- Temporary */\n\n/**\n * Populates variable maps using AST\n * @param {import('eslint').Rule.Node} node\n * @param {CreatedNode} globals\n * @param {import('./rules/requireJsdoc.js').RequireJsdocOpts} opt\n * @param {true} [isExport]\n * @returns {boolean}\n */\nconst mapVariables = function (node, globals, opt, isExport) {\n /* eslint-enable complexity -- Temporary */\n /* istanbul ignore next */\n const opts = opt || {};\n /* istanbul ignore next */\n switch (node.type) {\n case 'Program': {\n if (opts.ancestorsOnly) {\n return false;\n }\n\n for (const childNode of node.body) {\n mapVariables(\n /** @type {import('eslint').Rule.Node} */\n (childNode),\n globals,\n opts,\n );\n }\n\n break;\n }\n\n case 'ExpressionStatement': {\n mapVariables(\n /** @type {import('eslint').Rule.Node} */\n (node.expression),\n globals,\n opts,\n );\n break;\n }\n\n case 'AssignmentExpression': {\n createSymbol(\n /** @type {import('eslint').Rule.Node} */\n (node.left),\n globals,\n /** @type {import('eslint').Rule.Node} */\n (node.right),\n );\n break;\n }\n\n case 'VariableDeclaration': {\n for (const declaration of node.declarations) {\n const isGlobal = Boolean(opts.initWindow && node.kind === 'var' && globals.props.window);\n const symbol = createSymbol(\n /** @type {import('eslint').Rule.Node} */\n (declaration.id),\n globals,\n /** @type {import('eslint').Rule.Node} */\n (declaration.init),\n globals,\n isGlobal,\n );\n if (symbol && isExport) {\n symbol.exported = true;\n }\n }\n\n break;\n }\n\n case 'FunctionDeclaration': {\n /* istanbul ignore if */\n if (/** @type {import('estree').Identifier} */ (node.id).type === 'Identifier') {\n createSymbol(\n /** @type {import('eslint').Rule.Node} */\n (node.id),\n globals,\n node,\n globals,\n true,\n );\n }\n\n break;\n }\n\n case 'ExportDefaultDeclaration': {\n const symbol = createSymbol(\n /** @type {import('eslint').Rule.Node} */\n (node.declaration),\n globals,\n /** @type {import('eslint').Rule.Node} */\n (node.declaration),\n );\n if (symbol) {\n symbol.exported = true;\n } else {\n // if (!node.id) {\n globals.ANONYMOUS_DEFAULT = /** @type {import('eslint').Rule.Node} */ (\n node.declaration\n );\n }\n\n break;\n }\n\n case 'ExportNamedDeclaration': {\n if (node.declaration) {\n if (node.declaration.type === 'VariableDeclaration') {\n mapVariables(\n /** @type {import('eslint').Rule.Node} */\n (node.declaration),\n globals,\n opts,\n true,\n );\n } else {\n const symbol = createSymbol(\n /** @type {import('eslint').Rule.Node} */\n (node.declaration),\n globals,\n /** @type {import('eslint').Rule.Node} */\n (node.declaration),\n );\n /* istanbul ignore if */\n if (symbol) {\n symbol.exported = true;\n }\n }\n }\n\n for (const specifier of node.specifiers) {\n mapVariables(\n /** @type {import('eslint').Rule.Node} */\n (specifier),\n globals,\n opts,\n );\n }\n\n break;\n }\n\n case 'ExportSpecifier': {\n const symbol = getSymbol(\n /** @type {import('eslint').Rule.Node} */\n (node.local),\n globals,\n globals,\n );\n /* istanbul ignore if */\n if (symbol) {\n symbol.exported = true;\n }\n\n break;\n }\n\n case 'ClassDeclaration': {\n createSymbol(\n /** @type {import('eslint').Rule.Node|null} */ (node.id),\n globals,\n /** @type {import('eslint').Rule.Node} */ (node.body),\n globals,\n );\n break;\n }\n\n default: {\n /* istanbul ignore next */\n return false;\n }\n }\n\n return true;\n};\n\n/**\n *\n * @param {import('eslint').Rule.Node} node\n * @param {CreatedNode|ValueObject|string|undefined|\n * import('eslint').Rule.Node} block\n * @param {(CreatedNode|ValueObject|string|\n * import('eslint').Rule.Node)[]} [cache]\n * @returns {boolean}\n */\nconst findNode = function (node, block, cache) {\n let blockCache = cache || [];\n if (!block || blockCache.includes(block)) {\n return false;\n }\n\n blockCache = blockCache.slice();\n blockCache.push(block);\n\n if (\n typeof block === 'object' &&\n 'type' in block &&\n (block.type === 'object' || block.type === 'MethodDefinition') &&\n block.value === node\n ) {\n return true;\n }\n\n if (typeof block !== 'object') {\n return false;\n }\n\n const props = ('props' in block && block.props) || ('body' in block && block.body);\n for (const propval of Object.values(props || {})) {\n if (Array.isArray(propval)) {\n /* istanbul ignore if */\n if (propval.some((val) => {\n return findNode(node, val, blockCache);\n })) {\n return true;\n }\n } else if (findNode(node, propval, blockCache)) {\n return true;\n }\n }\n\n return false;\n};\n\nconst exportTypes = new Set([\n 'ExportNamedDeclaration', 'ExportDefaultDeclaration',\n]);\nconst ignorableNestedTypes = new Set([\n 'FunctionDeclaration', 'ArrowFunctionExpression', 'FunctionExpression',\n]);\n\n/**\n * @param {import('eslint').Rule.Node} nde\n * @returns {import('eslint').Rule.Node|false}\n */\nconst getExportAncestor = function (nde) {\n let node = nde;\n let idx = 0;\n const ignorableIfDeep = ignorableNestedTypes.has(nde?.type);\n while (node) {\n // Ignore functions nested more deeply than say `export default function () {}`\n if (idx >= 2 && ignorableIfDeep) {\n break;\n }\n\n if (exportTypes.has(node.type)) {\n return node;\n }\n\n node = node.parent;\n idx++;\n }\n\n return false;\n};\n\nconst canBeExportedByAncestorType = new Set([\n 'TSPropertySignature',\n 'TSMethodSignature',\n 'ClassProperty',\n 'PropertyDefinition',\n 'Method',\n]);\n\nconst canExportChildrenType = new Set([\n 'TSInterfaceBody',\n 'TSInterfaceDeclaration',\n 'TSTypeLiteral',\n 'TSTypeAliasDeclaration',\n 'ClassDeclaration',\n 'ClassBody',\n 'ClassDefinition',\n 'ClassExpression',\n 'Program',\n]);\n\n/**\n * @param {import('eslint').Rule.Node} nde\n * @returns {false|import('eslint').Rule.Node}\n */\nconst isExportByAncestor = function (nde) {\n if (!canBeExportedByAncestorType.has(nde.type)) {\n return false;\n }\n\n let node = nde.parent;\n while (node) {\n if (exportTypes.has(node.type)) {\n return node;\n }\n\n if (!canExportChildrenType.has(node.type)) {\n return false;\n }\n\n node = node.parent;\n }\n\n return false;\n};\n\n/**\n *\n * @param {CreatedNode} block\n * @param {import('eslint').Rule.Node} node\n * @param {CreatedNode[]} [cache] Currently unused\n * @returns {boolean}\n */\nconst findExportedNode = function (block, node, cache) {\n /* istanbul ignore if */\n if (block === null) {\n return false;\n }\n\n const blockCache = cache || [];\n const {\n props,\n } = block;\n for (const propval of Object.values(props)) {\n const pval = /** @type {CreatedNode} */ (propval);\n blockCache.push(pval);\n if (pval.exported && (node === pval.value || findNode(node, pval.value))) {\n return true;\n }\n\n // No need to check `propval` for exported nodes as ESM\n // exports are only global\n }\n\n return false;\n};\n\n/**\n *\n * @param {import('eslint').Rule.Node} node\n * @param {CreatedNode} globals\n * @param {import('./rules/requireJsdoc.js').RequireJsdocOpts} opt\n * @returns {boolean}\n */\nconst isNodeExported = function (node, globals, opt) {\n const moduleExports = globals.props.module?.props?.exports;\n if (\n opt.initModuleExports && moduleExports && findNode(node, moduleExports)\n ) {\n return true;\n }\n\n if (opt.initWindow && globals.props.window && findNode(node, globals.props.window)) {\n return true;\n }\n\n if (opt.esm && findExportedNode(globals, node)) {\n return true;\n }\n\n return false;\n};\n\n/**\n *\n * @param {import('eslint').Rule.Node} node\n * @param {CreatedNode} globalVars\n * @param {import('./rules/requireJsdoc.js').RequireJsdocOpts} opts\n * @returns {boolean}\n */\nconst parseRecursive = function (node, globalVars, opts) {\n // Iterate from top using recursion - stop at first processed node from top\n if (node.parent && parseRecursive(node.parent, globalVars, opts)) {\n return true;\n }\n\n return mapVariables(node, globalVars, opts);\n};\n\n/**\n *\n * @param {import('eslint').Rule.Node} ast\n * @param {import('eslint').Rule.Node} node\n * @param {import('./rules/requireJsdoc.js').RequireJsdocOpts} opt\n * @returns {CreatedNode}\n */\nconst parse = function (ast, node, opt) {\n /* istanbul ignore next */\n const opts = opt || {\n ancestorsOnly: false,\n esm: true,\n initModuleExports: true,\n initWindow: true,\n };\n\n const globalVars = createNode();\n if (opts.initModuleExports) {\n globalVars.props.module = createNode();\n globalVars.props.module.props.exports = createNode();\n globalVars.props.exports = globalVars.props.module.props.exports;\n }\n\n if (opts.initWindow) {\n globalVars.props.window = createNode();\n globalVars.props.window.special = true;\n }\n\n if (opts.ancestorsOnly) {\n parseRecursive(node, globalVars, opts);\n } else {\n initVariables(ast, globalVars, opts);\n mapVariables(ast, globalVars, opts);\n }\n\n return {\n globalVars,\n props: {},\n };\n};\n\nconst accessibilityNodes = new Set([\n 'PropertyDefinition',\n 'MethodDefinition',\n]);\n\n/**\n *\n * @param {import('eslint').Rule.Node} node\n * @returns {boolean}\n */\nconst hasAccessibility = (node) => {\n return accessibilityNodes.has(node.type) && 'accessibility' in node &&\n node.accessibility !== 'public' && node.accessibility !== undefined;\n};\n\n/**\n *\n * @param {import('eslint').Rule.Node} node\n * @param {import('eslint').SourceCode} sourceCode\n * @param {import('./rules/requireJsdoc.js').RequireJsdocOpts} opt\n * @param {import('./iterateJsdoc.js').Settings} settings\n * @returns {boolean}\n */\nconst isUncommentedExport = function (node, sourceCode, opt, settings) {\n // console.log({node});\n // Optimize with ancestor check for esm\n if (opt.esm) {\n if (hasAccessibility(node) ||\n node.parent && hasAccessibility(node.parent)) {\n return false;\n }\n\n const exportNode = getExportAncestor(node);\n\n // Is export node comment\n if (exportNode && !findJSDocComment(exportNode, sourceCode, settings)) {\n return true;\n }\n\n /**\n * Some typescript types are not in variable map, but inherit exported (interface property and method)\n */\n if (\n isExportByAncestor(node) &&\n !findJSDocComment(node, sourceCode, settings)\n ) {\n return true;\n }\n }\n\n const ast = /** @type {unknown} */ (sourceCode.ast);\n\n const parseResult = parse(\n /** @type {import('eslint').Rule.Node} */\n (ast),\n node,\n opt,\n );\n\n return isNodeExported(\n node, /** @type {CreatedNode} */ (parseResult.globalVars), opt,\n );\n};\n\nexport default {\n isUncommentedExport,\n parse,\n};\n"],"mappings":";;;;;;AAAA,IAAAA,aAAA,GAAAC,OAAA;AAGA,IAAAC,MAAA,GAAAC,sBAAA,CAAAF,OAAA;AAAgC,SAAAE,uBAAAC,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAEhC,MAAMG,KAAK,GAAG,IAAAC,cAAW,EAAC,oBAAoB,CAAC;;AAE/C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAMC,UAAU,GAAG,SAAAA,CAAA,EAAY;EAC7B,OAAO;IACLC,KAAK,EAAE,CAAC;EACV,CAAC;AACH,CAAC;;AAED;AACA;AACA;AACA;AACA,MAAMC,cAAc,GAAG,SAAAA,CAAUC,MAAM,EAAE;EACvC;EACA,IAAI,CAACA,MAAM,EAAE;IACX,OAAO,IAAI;EACb;;EAEA;EACA,IAAIA,MAAM,CAACC,IAAI,KAAK,SAAS,EAAE;IAC7B,OAAO,0BAA4BD,MAAM,CAACE,KAAK,CAAEA,KAAK;EACxD;;EAEA;EACA,OAAO,IAAI;AACb,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMC,aAAa,GAAG,SAAAA,CAAUC,IAAI,EAAEC,OAAO,EAAEC,KAAK,EAAEC,IAAI,EAAE;EAC1D,IAAIA,IAAI,CAACC,gBAAgB,EAAE;IACzB;IACA,MAAMC,iBAAiB,GAAGZ,UAAU,CAAC,CAAC;IACtCY,iBAAiB,CAACR,IAAI,GAAG,SAAS;IAClCQ,iBAAiB,CAACP,KAAK,GAAG;MACxBA,KAAK,EAAEE,IAAI,CAACM;IACd,CAAC;IAED,OAAOD,iBAAiB;EAC1B;;EAEA;EACA,MAAME,KAAK,GAAGL,KAAK,IAAID,OAAO;;EAE9B;EACA,IAAIM,KAAK,CAACb,KAAK,CAACM,IAAI,CAACM,IAAI,CAAC,EAAE;IAC1B,OAAOC,KAAK,CAACb,KAAK,CAACM,IAAI,CAACM,IAAI,CAAC;EAC/B;;EAEA;EACA;EACA,IAAIL,OAAO,CAACP,KAAK,CAACM,IAAI,CAACM,IAAI,CAAC,EAAE;IAC5B,OAAOL,OAAO,CAACP,KAAK,CAACM,IAAI,CAACM,IAAI,CAAC;EACjC;EAEA,OAAO,IAAI;AACb,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,IAAIE,YAAY,CAAC,CAAC;;AAElB;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMC,SAAS,GAAG,SAAAA,CAAUT,IAAI,EAAEC,OAAO,EAAEC,KAAK,EAAEQ,GAAG,EAAE;EACrD;EACA,MAAMP,IAAI,GAAGO,GAAG,IAAI,CAAC,CAAC;EACtB;EACA,QAAQV,IAAI,CAACH,IAAI;IACjB,KAAK,YAAY;MAAE;QACjB,OAAOE,aAAa,CAACC,IAAI,EAAEC,OAAO,EAAEC,KAAK,EAAEC,IAAI,CAAC;MAClD;IAEA,KAAK,kBAAkB;MAAE;QACvB,MAAMf,GAAG,GAAGqB,SAAS,EACnB;QACCT,IAAI,CAACW,MAAM,EACZV,OAAO,EACPC,KAAK,EACLC,IACF,CAAC;QACD,MAAMS,cAAc,GAAGH,SAAS,EAC9B;QACCT,IAAI,CAACa,QAAQ,EACdZ,OAAO,EACPC,KAAK,EACL;UACEE,gBAAgB,EAAE,CAACJ,IAAI,CAACc;QAC1B,CACF,CAAC;QACD,MAAMC,aAAa,GAAGpB,cAAc,CAACiB,cAAc,CAAC;;QAEpD;QACA,IAAIxB,GAAG,IAAI2B,aAAa,IAAI3B,GAAG,CAACM,KAAK,CAACqB,aAAa,CAAC,EAAE;UACpD,MAAMR,KAAK,GAAGnB,GAAG,CAACM,KAAK,CAACqB,aAAa,CAAC;UAEtC,OAAOR,KAAK;QACd;;QAEA;AACJ;AACA;AACA;AACA;AACA;QAEI;QACAhB,KAAK,CAAE;QACL,iDAAmDS,IAAI,CAACa,QAAQ,CAAEP,IACnE,EAAC,CAAC;;QAEH;QACA,OAAO,IAAI;MACb;IAEA,KAAK,iBAAiB;MAAE;QACtB,OAAOG,SAAS,EACd;QACCT,IAAI,CAACgB,IAAI,EACVf,OAAO,EACPC,KAAK,EACLC,IACF,CAAC;MACH;;IAEA;IACA,KAAK,wBAAwB;IAC7B;IACA;IACA,KAAK,mBAAmB;IAAE,KAAK,wBAAwB;IACvD,KAAK,kBAAkB;IACvB,KAAK,oBAAoB;IAAE,KAAK,qBAAqB;IACrD,KAAK,yBAAyB;MAAE;QAC9B,MAAMc,GAAG,GAAGxB,UAAU,CAAC,CAAC;QACxBwB,GAAG,CAACvB,KAAK,CAACwB,SAAS,GAAGzB,UAAU,CAAC,CAAC;QAClCwB,GAAG,CAACvB,KAAK,CAACwB,SAAS,CAACrB,IAAI,GAAG,QAAQ;QACnCoB,GAAG,CAACpB,IAAI,GAAG,QAAQ;QACnBoB,GAAG,CAACnB,KAAK,GAAGE,IAAI;QAEhB,OAAOiB,GAAG;MACZ;IAEA,KAAK,sBAAsB;MAAE;QAC3B,OAAOT,YAAY,EACjB;QACCR,IAAI,CAACmB,IAAI,EACVlB,OAAO,EACP;QACCD,IAAI,CAACoB,KAAK,EACXlB,KAAK,EACLC,IACF,CAAC;MACH;IAEA,KAAK,WAAW;MAAE;QAChB,MAAMc,GAAG,GAAGxB,UAAU,CAAC,CAAC;QACxB,KAAK,MAAM4B,MAAM,IAAIrB,IAAI,CAACgB,IAAI,EAAE;UAC9BC,GAAG,CAACvB,KAAK,CACP,0CAA2C,EACzC,gDACE2B,MAAM,CACNC,GAAG,EACLhB,IAAI,CACP,GAAGb,UAAU,CAAC,CAAC;UAChB;UAA6CwB,GAAG,CAACvB,KAAK,CACpD,0CAA2C,EACzC,gDACE2B,MAAM,CACNC,GAAG,EACLhB,IAAI,CACP,CAACT,IAAI,GAAG,QAAQ;UACjB;UAA6CoB,GAAG,CAACvB,KAAK,CACpD,0CAA2C,EACzC,gDACE2B,MAAM,CACNC,GAAG,EACLhB,IAAI,CACP,CAACR,KAAK,GAAG;UACR,gDAAkDuB,MAAM,CAAEvB,KAC3D;QACH;QAEAmB,GAAG,CAACpB,IAAI,GAAG,QAAQ;QACnBoB,GAAG,CAACnB,KAAK,GAAGE,IAAI,CAACuB,MAAM;QAEvB,OAAON,GAAG;MACZ;IAEA,KAAK,kBAAkB;MAAE;QACvB,MAAMA,GAAG,GAAGxB,UAAU,CAAC,CAAC;QACxBwB,GAAG,CAACpB,IAAI,GAAG,QAAQ;QACnB,KAAK,MAAM2B,IAAI,IAAIxB,IAAI,CAACyB,UAAU,EAAE;UAClC,IAAI;UACF;UACA,eAAe;UAEf;UACA,4BAA4B,CAC7B,CAACC,QAAQ,CAACF,IAAI,CAAC3B,IAAI,CAAC,EAAE;YACrB;UACF;UAEA,MAAM8B,OAAO,GAAGlB,SAAS,EACvB;UACE;UACCe,IAAI,CAAE1B,KAAK,EAEdG,OAAO,EACPC,KAAK,EACLC,IACF,CAAC;UACD;UACA,IAAIwB,OAAO,EAAE;YACXV,GAAG,CAACvB,KAAK,CACP;YACA,EACE,wCAA0C8B,IAAI,CAAEF,GAAG,EACnDhB,IAAI,CACP,GAAGqB,OAAO;UACb;QACF;QAEA,OAAOV,GAAG;MACZ;IAEA,KAAK,SAAS;MAAE;QACd,MAAMA,GAAG,GAAGxB,UAAU,CAAC,CAAC;QACxBwB,GAAG,CAACpB,IAAI,GAAG,SAAS;QACpBoB,GAAG,CAACnB,KAAK,GAAGE,IAAI;QAEhB,OAAOiB,GAAG;MACZ;EACA;;EAEA;EACA,OAAO,IAAI;AACb,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMW,iBAAiB,GAAG,SAAAA,CAAUrB,KAAK,EAAED,IAAI,EAAER,KAAK,EAAEG,OAAO,EAAE4B,QAAQ,EAAE;EACzEtB,KAAK,CAACb,KAAK,CAACY,IAAI,CAAC,GAAGR,KAAK;EACzB,IAAI+B,QAAQ,IAAI5B,OAAO,CAACP,KAAK,CAACoC,MAAM,IAAI7B,OAAO,CAACP,KAAK,CAACoC,MAAM,CAACC,OAAO,EAAE;IACpE9B,OAAO,CAACP,KAAK,CAACoC,MAAM,CAACpC,KAAK,CAACY,IAAI,CAAC,GAAGR,KAAK;EAC1C;AACF,CAAC;AAEDU,YAAY,GAAG,SAAAA,CAAUR,IAAI,EAAEC,OAAO,EAAEH,KAAK,EAAEI,KAAK,EAAE2B,QAAQ,EAAE;EAC9D,MAAMtB,KAAK,GAAGL,KAAK,IAAID,OAAO;EAC9B;EACA,IAAI,CAACD,IAAI,EAAE;IACT,OAAO,IAAI;EACb;EAEA,IAAIJ,MAAM;EACV,QAAQI,IAAI,CAACH,IAAI;IACjB,KAAK,qBAAqB;IAC1B;IACA;IACA;IACA,KAAK,mBAAmB;IAAE,KAAK,wBAAwB;IACvD;IACA;IACA;IACA,KAAK,wBAAwB;IAAE,KAAK,kBAAkB;MAAE;QACtD,MAAMmC,GAAG,GAAG,gDAAkDhC,IAAK;QACnE;QACA,IAAIgC,GAAG,CAACC,EAAE,IAAID,GAAG,CAACC,EAAE,CAACpC,IAAI,KAAK,YAAY,EAAE;UAC1C,OAAOW,YAAY,EACjB,yCAA2CwB,GAAG,CAACC,EAAE,EACjDhC,OAAO,EACPD,IAAI,EACJC,OACF,CAAC;QACH;;QAEA;QACA;MACF;IAEA,KAAK,YAAY;MAAE;QACjB,MAAM+B,GAAG,GAAG,0CAA4ChC,IAAK;QAC7D,IAAIF,KAAK,EAAE;UACT,MAAMoC,WAAW,GAAGzB,SAAS,CAACX,KAAK,EAAEG,OAAO,EAAEM,KAAK,CAAC;UACpD;UACA,IAAI2B,WAAW,EAAE;YACfN,iBAAiB,CAACrB,KAAK,EAAEyB,GAAG,CAAC1B,IAAI,EAAE4B,WAAW,EAAEjC,OAAO,EAAE4B,QAAQ,CAAC;YAElE,OAAOtB,KAAK,CAACb,KAAK,CAACsC,GAAG,CAAC1B,IAAI,CAAC;UAC9B;;UAEA;UACAf,KAAK,CAAC,yCAAyC,EAAEyC,GAAG,CAAC1B,IAAI,CAAC;QAC5D,CAAC,MAAM;UACLsB,iBAAiB,CAACrB,KAAK,EAAEyB,GAAG,CAAC1B,IAAI,EAAEb,UAAU,CAAC,CAAC,EAAEQ,OAAO,EAAE4B,QAAQ,CAAC;UAEnE,OAAOtB,KAAK,CAACb,KAAK,CAACsC,GAAG,CAAC1B,IAAI,CAAC;QAC9B;;QAEA;QACA;MACF;IAEA,KAAK,kBAAkB;MAAE;QACvB,MAAM0B,GAAG,GAAG,gDAAkDhC,IAAK;QACnEJ,MAAM,GAAGa,SAAS,EAChB,yCAA2CuB,GAAG,CAACrB,MAAM,EAAGV,OAAO,EAAEM,KACnE,CAAC;QAED,MAAMK,cAAc,GAAGH,SAAS,EAC9B,yCAA2CuB,GAAG,CAACnB,QAAQ,EACvDZ,OAAO,EACPM,KAAK,EACL;UACEH,gBAAgB,EAAE,CAAC4B,GAAG,CAAClB;QACzB,CACF,CAAC;QACD,MAAMC,aAAa,GAAGpB,cAAc,CAACiB,cAAc,CAAC;QACpD,IAAIhB,MAAM,IAAImB,aAAa,EAAE;UAC3Ba,iBAAiB,CAAChC,MAAM,EAAEmB,aAAa,EAAEN,SAAS,EAChD;UACCX,KAAK,EAAGG,OAAO,EAAEM,KACpB,CAAC,EAAEN,OAAO,EAAE4B,QAAQ,CAAC;UACrB,OAAOjC,MAAM,CAACF,KAAK,CAACqB,aAAa,CAAC;QACpC;QAEAxB,KAAK,CACH,sCAAsC,EACtC,0CACEyC,GAAG,CAACnB,QAAQ,CACZP,IACJ,CAAC;QACD;MACF;EACA;EAEA,OAAO,IAAI;AACb,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM6B,aAAa,GAAG,SAAAA,CAAUnC,IAAI,EAAEC,OAAO,EAAEE,IAAI,EAAE;EACnD,QAAQH,IAAI,CAACH,IAAI;IACjB,KAAK,SAAS;MAAE;QACd,KAAK,MAAMuC,SAAS,IAAIpC,IAAI,CAACgB,IAAI,EAAE;UACjCmB,aAAa,EACX;UACCC,SAAS,EACVnC,OAAO,EACPE,IACF,CAAC;QACH;QAEA;MACF;IAEA,KAAK,qBAAqB;MAAE;QAC1BgC,aAAa,EACX;QACCnC,IAAI,CAACqC,UAAU,EAChBpC,OAAO,EACPE,IACF,CAAC;QACD;MACF;IAEA,KAAK,qBAAqB;MAAE;QAC1B,KAAK,MAAMmC,WAAW,IAAItC,IAAI,CAACuC,YAAY,EAAE;UAC3C;UACA,MAAM3C,MAAM,GAAGY,YAAY,EACzB;UACC8B,WAAW,CAACL,EAAE,EACfhC,OAAO,EACP,IAAI,EACJA,OACF,CAAC;UACD,IAAIE,IAAI,CAACqC,UAAU,IAAIxC,IAAI,CAACyC,IAAI,KAAK,KAAK,IAAIxC,OAAO,CAACP,KAAK,CAACoC,MAAM,EAAE;YAClE;YACA7B,OAAO,CAACP,KAAK,CAACoC,MAAM,CAACpC,KAAK,CACxB;YACC4C,WAAW,CAACL,EAAE,CAAE3B,IAAI,CACtB,GAAGV,MAAM;UACZ;QACF;QAEA;MACF;IAEA,KAAK,wBAAwB;MAAE;QAC7B,IAAII,IAAI,CAACsC,WAAW,EAAE;UACpBH,aAAa,EACX;UACCnC,IAAI,CAACsC,WAAW,EACjBrC,OAAO,EACPE,IACF,CAAC;QACH;QAEA;MACF;EACA;AACF,CAAC;;AAED;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMuC,YAAY,GAAG,SAAAA,CAAU1C,IAAI,EAAEC,OAAO,EAAES,GAAG,EAAEiC,QAAQ,EAAE;EAC3D;EACA;EACA,MAAMxC,IAAI,GAAGO,GAAG,IAAI,CAAC,CAAC;EACtB;EACA,QAAQV,IAAI,CAACH,IAAI;IACjB,KAAK,SAAS;MAAE;QACd,IAAIM,IAAI,CAACyC,aAAa,EAAE;UACtB,OAAO,KAAK;QACd;QAEA,KAAK,MAAMR,SAAS,IAAIpC,IAAI,CAACgB,IAAI,EAAE;UACjC0B,YAAY,EACV;UACCN,SAAS,EACVnC,OAAO,EACPE,IACF,CAAC;QACH;QAEA;MACF;IAEA,KAAK,qBAAqB;MAAE;QAC1BuC,YAAY,EACV;QACC1C,IAAI,CAACqC,UAAU,EAChBpC,OAAO,EACPE,IACF,CAAC;QACD;MACF;IAEA,KAAK,sBAAsB;MAAE;QAC3BK,YAAY,EACV;QACCR,IAAI,CAACmB,IAAI,EACVlB,OAAO,EACP;QACCD,IAAI,CAACoB,KACR,CAAC;QACD;MACF;IAEA,KAAK,qBAAqB;MAAE;QAC1B,KAAK,MAAMkB,WAAW,IAAItC,IAAI,CAACuC,YAAY,EAAE;UAC3C,MAAMV,QAAQ,GAAGgB,OAAO,CAAC1C,IAAI,CAACqC,UAAU,IAAIxC,IAAI,CAACyC,IAAI,KAAK,KAAK,IAAIxC,OAAO,CAACP,KAAK,CAACoC,MAAM,CAAC;UACxF,MAAMlC,MAAM,GAAGY,YAAY,EACzB;UACC8B,WAAW,CAACL,EAAE,EACfhC,OAAO,EACP;UACCqC,WAAW,CAACQ,IAAI,EACjB7C,OAAO,EACP4B,QACF,CAAC;UACD,IAAIjC,MAAM,IAAI+C,QAAQ,EAAE;YACtB/C,MAAM,CAACmD,QAAQ,GAAG,IAAI;UACxB;QACF;QAEA;MACF;IAEA,KAAK,qBAAqB;MAAE;QAC1B;QACA,KAAI,0CAA4C/C,IAAI,CAACiC,EAAE,CAAEpC,IAAI,KAAK,YAAY,EAAE;UAC9EW,YAAY,EACV;UACCR,IAAI,CAACiC,EAAE,EACRhC,OAAO,EACPD,IAAI,EACJC,OAAO,EACP,IACF,CAAC;QACH;QAEA;MACF;IAEA,KAAK,0BAA0B;MAAE;QAC/B,MAAML,MAAM,GAAGY,YAAY,EACzB;QACCR,IAAI,CAACsC,WAAW,EACjBrC,OAAO,EACP;QACCD,IAAI,CAACsC,WACR,CAAC;QACD,IAAI1C,MAAM,EAAE;UACVA,MAAM,CAACmD,QAAQ,GAAG,IAAI;QACxB,CAAC,MAAM;UACL;UACA9C,OAAO,CAAC+C,iBAAiB,GAAG;UAC1BhD,IAAI,CAACsC,WACN;QACH;QAEA;MACF;IAEA,KAAK,wBAAwB;MAAE;QAC7B,IAAItC,IAAI,CAACsC,WAAW,EAAE;UACpB,IAAItC,IAAI,CAACsC,WAAW,CAACzC,IAAI,KAAK,qBAAqB,EAAE;YACnD6C,YAAY,EACV;YACC1C,IAAI,CAACsC,WAAW,EACjBrC,OAAO,EACPE,IAAI,EACJ,IACF,CAAC;UACH,CAAC,MAAM;YACL,MAAMP,MAAM,GAAGY,YAAY,EACzB;YACCR,IAAI,CAACsC,WAAW,EACjBrC,OAAO,EACP;YACCD,IAAI,CAACsC,WACR,CAAC;YACD;YACA,IAAI1C,MAAM,EAAE;cACVA,MAAM,CAACmD,QAAQ,GAAG,IAAI;YACxB;UACF;QACF;QAEA,KAAK,MAAME,SAAS,IAAIjD,IAAI,CAACkD,UAAU,EAAE;UACvCR,YAAY,EACV;UACCO,SAAS,EACVhD,OAAO,EACPE,IACF,CAAC;QACH;QAEA;MACF;IAEA,KAAK,iBAAiB;MAAE;QACtB,MAAMP,MAAM,GAAGa,SAAS,EACtB;QACCT,IAAI,CAACmD,KAAK,EACXlD,OAAO,EACPA,OACF,CAAC;QACD;QACA,IAAIL,MAAM,EAAE;UACVA,MAAM,CAACmD,QAAQ,GAAG,IAAI;QACxB;QAEA;MACF;IAEA,KAAK,kBAAkB;MAAE;QACvBvC,YAAY,EACV,8CAAgDR,IAAI,CAACiC,EAAE,EACvDhC,OAAO,EACP,yCAA2CD,IAAI,CAACgB,IAAI,EACpDf,OACF,CAAC;QACD;MACF;IAEA;MAAS;QACP;QACA,OAAO,KAAK;MACd;EACA;EAEA,OAAO,IAAI;AACb,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMmD,QAAQ,GAAG,SAAAA,CAAUpD,IAAI,EAAEO,KAAK,EAAE8C,KAAK,EAAE;EAC7C,IAAIC,UAAU,GAAGD,KAAK,IAAI,EAAE;EAC5B,IAAI,CAAC9C,KAAK,IAAI+C,UAAU,CAAC5B,QAAQ,CAACnB,KAAK,CAAC,EAAE;IACxC,OAAO,KAAK;EACd;EAEA+C,UAAU,GAAGA,UAAU,CAACC,KAAK,CAAC,CAAC;EAC/BD,UAAU,CAACE,IAAI,CAACjD,KAAK,CAAC;EAEtB,IACE,OAAOA,KAAK,KAAK,QAAQ,IACzB,MAAM,IAAIA,KAAK,KACdA,KAAK,CAACV,IAAI,KAAK,QAAQ,IAAIU,KAAK,CAACV,IAAI,KAAK,kBAAkB,CAAC,IAC9DU,KAAK,CAACT,KAAK,KAAKE,IAAI,EACpB;IACA,OAAO,IAAI;EACb;EAEA,IAAI,OAAOO,KAAK,KAAK,QAAQ,EAAE;IAC7B,OAAO,KAAK;EACd;EAEA,MAAMb,KAAK,GAAI,OAAO,IAAIa,KAAK,IAAIA,KAAK,CAACb,KAAK,IAAM,MAAM,IAAIa,KAAK,IAAIA,KAAK,CAACS,IAAK;EAClF,KAAK,MAAMyC,OAAO,IAAIC,MAAM,CAACC,MAAM,CAACjE,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE;IAChD,IAAIkE,KAAK,CAACC,OAAO,CAACJ,OAAO,CAAC,EAAE;MAC1B;MACA,IAAIA,OAAO,CAACK,IAAI,CAAE7C,GAAG,IAAK;QACxB,OAAOmC,QAAQ,CAACpD,IAAI,EAAEiB,GAAG,EAAEqC,UAAU,CAAC;MACxC,CAAC,CAAC,EAAE;QACF,OAAO,IAAI;MACb;IACF,CAAC,MAAM,IAAIF,QAAQ,CAACpD,IAAI,EAAEyD,OAAO,EAAEH,UAAU,CAAC,EAAE;MAC9C,OAAO,IAAI;IACb;EACF;EAEA,OAAO,KAAK;AACd,CAAC;AAED,MAAMS,WAAW,GAAG,IAAIC,GAAG,CAAC,CAC1B,wBAAwB,EAAE,0BAA0B,CACrD,CAAC;AACF,MAAMC,oBAAoB,GAAG,IAAID,GAAG,CAAC,CACnC,qBAAqB,EAAE,yBAAyB,EAAE,oBAAoB,CACvE,CAAC;;AAEF;AACA;AACA;AACA;AACA,MAAME,iBAAiB,GAAG,SAAAA,CAAUlC,GAAG,EAAE;EACvC,IAAIhC,IAAI,GAAGgC,GAAG;EACd,IAAImC,GAAG,GAAG,CAAC;EACX,MAAMC,eAAe,GAAGH,oBAAoB,CAACI,GAAG,CAACrC,GAAG,aAAHA,GAAG,uBAAHA,GAAG,CAAEnC,IAAI,CAAC;EAC3D,OAAOG,IAAI,EAAE;IACX;IACA,IAAImE,GAAG,IAAI,CAAC,IAAIC,eAAe,EAAE;MAC/B;IACF;IAEA,IAAIL,WAAW,CAACM,GAAG,CAACrE,IAAI,CAACH,IAAI,CAAC,EAAE;MAC9B,OAAOG,IAAI;IACb;IAEAA,IAAI,GAAGA,IAAI,CAACuB,MAAM;IAClB4C,GAAG,EAAE;EACP;EAEA,OAAO,KAAK;AACd,CAAC;AAED,MAAMG,2BAA2B,GAAG,IAAIN,GAAG,CAAC,CAC1C,qBAAqB,EACrB,mBAAmB,EACnB,eAAe,EACf,oBAAoB,EACpB,QAAQ,CACT,CAAC;AAEF,MAAMO,qBAAqB,GAAG,IAAIP,GAAG,CAAC,CACpC,iBAAiB,EACjB,wBAAwB,EACxB,eAAe,EACf,wBAAwB,EACxB,kBAAkB,EAClB,WAAW,EACX,iBAAiB,EACjB,iBAAiB,EACjB,SAAS,CACV,CAAC;;AAEF;AACA;AACA;AACA;AACA,MAAMQ,kBAAkB,GAAG,SAAAA,CAAUxC,GAAG,EAAE;EACxC,IAAI,CAACsC,2BAA2B,CAACD,GAAG,CAACrC,GAAG,CAACnC,IAAI,CAAC,EAAE;IAC9C,OAAO,KAAK;EACd;EAEA,IAAIG,IAAI,GAAGgC,GAAG,CAACT,MAAM;EACrB,OAAOvB,IAAI,EAAE;IACX,IAAI+D,WAAW,CAACM,GAAG,CAACrE,IAAI,CAACH,IAAI,CAAC,EAAE;MAC9B,OAAOG,IAAI;IACb;IAEA,IAAI,CAACuE,qBAAqB,CAACF,GAAG,CAACrE,IAAI,CAACH,IAAI,CAAC,EAAE;MACzC,OAAO,KAAK;IACd;IAEAG,IAAI,GAAGA,IAAI,CAACuB,MAAM;EACpB;EAEA,OAAO,KAAK;AACd,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMkD,gBAAgB,GAAG,SAAAA,CAAUlE,KAAK,EAAEP,IAAI,EAAEqD,KAAK,EAAE;EACrD;EACA,IAAI9C,KAAK,KAAK,IAAI,EAAE;IAClB,OAAO,KAAK;EACd;EAEA,MAAM+C,UAAU,GAAGD,KAAK,IAAI,EAAE;EAC9B,MAAM;IACJ3D;EACF,CAAC,GAAGa,KAAK;EACT,KAAK,MAAMkD,OAAO,IAAIC,MAAM,CAACC,MAAM,CAACjE,KAAK,CAAC,EAAE;IAC1C,MAAMgF,IAAI,GAAG,0BAA4BjB,OAAQ;IACjDH,UAAU,CAACE,IAAI,CAACkB,IAAI,CAAC;IACrB,IAAIA,IAAI,CAAC3B,QAAQ,KAAK/C,IAAI,KAAK0E,IAAI,CAAC5E,KAAK,IAAIsD,QAAQ,CAACpD,IAAI,EAAE0E,IAAI,CAAC5E,KAAK,CAAC,CAAC,EAAE;MACxE,OAAO,IAAI;IACb;;IAEA;IACA;EACF;EAEA,OAAO,KAAK;AACd,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM6E,cAAc,GAAG,SAAAA,CAAU3E,IAAI,EAAEC,OAAO,EAAES,GAAG,EAAE;EAAA,IAAAkE,qBAAA;EACnD,MAAMC,aAAa,IAAAD,qBAAA,GAAG3E,OAAO,CAACP,KAAK,CAACoF,MAAM,cAAAF,qBAAA,gBAAAA,qBAAA,GAApBA,qBAAA,CAAsBlF,KAAK,cAAAkF,qBAAA,uBAA3BA,qBAAA,CAA6BG,OAAO;EAC1D,IACErE,GAAG,CAACsE,iBAAiB,IAAIH,aAAa,IAAIzB,QAAQ,CAACpD,IAAI,EAAE6E,aAAa,CAAC,EACvE;IACA,OAAO,IAAI;EACb;EAEA,IAAInE,GAAG,CAAC8B,UAAU,IAAIvC,OAAO,CAACP,KAAK,CAACoC,MAAM,IAAIsB,QAAQ,CAACpD,IAAI,EAAEC,OAAO,CAACP,KAAK,CAACoC,MAAM,CAAC,EAAE;IAClF,OAAO,IAAI;EACb;EAEA,IAAIpB,GAAG,CAACuE,GAAG,IAAIR,gBAAgB,CAACxE,OAAO,EAAED,IAAI,CAAC,EAAE;IAC9C,OAAO,IAAI;EACb;EAEA,OAAO,KAAK;AACd,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMkF,cAAc,GAAG,SAAAA,CAAUlF,IAAI,EAAEmF,UAAU,EAAEhF,IAAI,EAAE;EACvD;EACA,IAAIH,IAAI,CAACuB,MAAM,IAAI2D,cAAc,CAAClF,IAAI,CAACuB,MAAM,EAAE4D,UAAU,EAAEhF,IAAI,CAAC,EAAE;IAChE,OAAO,IAAI;EACb;EAEA,OAAOuC,YAAY,CAAC1C,IAAI,EAAEmF,UAAU,EAAEhF,IAAI,CAAC;AAC7C,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMiF,KAAK,GAAG,SAAAA,CAAUC,GAAG,EAAErF,IAAI,EAAEU,GAAG,EAAE;EACtC;EACA,MAAMP,IAAI,GAAGO,GAAG,IAAI;IAClBkC,aAAa,EAAE,KAAK;IACpBqC,GAAG,EAAE,IAAI;IACTD,iBAAiB,EAAE,IAAI;IACvBxC,UAAU,EAAE;EACd,CAAC;EAED,MAAM2C,UAAU,GAAG1F,UAAU,CAAC,CAAC;EAC/B,IAAIU,IAAI,CAAC6E,iBAAiB,EAAE;IAC1BG,UAAU,CAACzF,KAAK,CAACoF,MAAM,GAAGrF,UAAU,CAAC,CAAC;IACtC0F,UAAU,CAACzF,KAAK,CAACoF,MAAM,CAACpF,KAAK,CAACqF,OAAO,GAAGtF,UAAU,CAAC,CAAC;IACpD0F,UAAU,CAACzF,KAAK,CAACqF,OAAO,GAAGI,UAAU,CAACzF,KAAK,CAACoF,MAAM,CAACpF,KAAK,CAACqF,OAAO;EAClE;EAEA,IAAI5E,IAAI,CAACqC,UAAU,EAAE;IACnB2C,UAAU,CAACzF,KAAK,CAACoC,MAAM,GAAGrC,UAAU,CAAC,CAAC;IACtC0F,UAAU,CAACzF,KAAK,CAACoC,MAAM,CAACC,OAAO,GAAG,IAAI;EACxC;EAEA,IAAI5B,IAAI,CAACyC,aAAa,EAAE;IACtBsC,cAAc,CAAClF,IAAI,EAAEmF,UAAU,EAAEhF,IAAI,CAAC;EACxC,CAAC,MAAM;IACLgC,aAAa,CAACkD,GAAG,EAAEF,UAAU,EAAEhF,IAAI,CAAC;IACpCuC,YAAY,CAAC2C,GAAG,EAAEF,UAAU,EAAEhF,IAAI,CAAC;EACrC;EAEA,OAAO;IACLgF,UAAU;IACVzF,KAAK,EAAE,CAAC;EACV,CAAC;AACH,CAAC;AAED,MAAM4F,kBAAkB,GAAG,IAAItB,GAAG,CAAC,CACjC,oBAAoB,EACpB,kBAAkB,CACnB,CAAC;;AAEF;AACA;AACA;AACA;AACA;AACA,MAAMuB,gBAAgB,GAAIvF,IAAI,IAAK;EACjC,OAAOsF,kBAAkB,CAACjB,GAAG,CAACrE,IAAI,CAACH,IAAI,CAAC,IAAI,eAAe,IAAIG,IAAI,IACjEA,IAAI,CAACwF,aAAa,KAAK,QAAQ,IAAIxF,IAAI,CAACwF,aAAa,KAAKC,SAAS;AACvE,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMC,mBAAmB,GAAG,SAAAA,CAAU1F,IAAI,EAAE2F,UAAU,EAAEjF,GAAG,EAAEkF,QAAQ,EAAE;EACrE;EACA;EACA,IAAIlF,GAAG,CAACuE,GAAG,EAAE;IACX,IAAIM,gBAAgB,CAACvF,IAAI,CAAC,IACxBA,IAAI,CAACuB,MAAM,IAAIgE,gBAAgB,CAACvF,IAAI,CAACuB,MAAM,CAAC,EAAE;MAC9C,OAAO,KAAK;IACd;IAEA,MAAMsE,UAAU,GAAG3B,iBAAiB,CAAClE,IAAI,CAAC;;IAE1C;IACA,IAAI6F,UAAU,IAAI,CAAC,IAAAC,8BAAgB,EAACD,UAAU,EAAEF,UAAU,EAAEC,QAAQ,CAAC,EAAE;MACrE,OAAO,IAAI;IACb;;IAEA;AACJ;AACA;IACI,IACEpB,kBAAkB,CAACxE,IAAI,CAAC,IACxB,CAAC,IAAA8F,8BAAgB,EAAC9F,IAAI,EAAE2F,UAAU,EAAEC,QAAQ,CAAC,EAC7C;MACA,OAAO,IAAI;IACb;EACF;EAEA,MAAMP,GAAG,GAAG,sBAAwBM,UAAU,CAACN,GAAI;EAEnD,MAAMU,WAAW,GAAGX,KAAK,EACvB;EACCC,GAAG,EACJrF,IAAI,EACJU,GACF,CAAC;EAED,OAAOiE,cAAc,CACnB3E,IAAI,EAAE,0BAA4B+F,WAAW,CAACZ,UAAU,EAAGzE,GAC7D,CAAC;AACH,CAAC;AAAC,IAAAsF,QAAA,GAAAjB,OAAA,CAAAzF,OAAA,GAEa;EACboG,mBAAmB;EACnBN;AACF,CAAC;AAAAN,MAAA,CAAAC,OAAA,GAAAA,OAAA,CAAAzF,OAAA"}
|
package/dist/generateRule.js
CHANGED
|
@@ -16,6 +16,7 @@ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e;
|
|
|
16
16
|
*/
|
|
17
17
|
// Todo: Would ideally have prompts, e.g., to ask for whether
|
|
18
18
|
// type was problem/layout, etc.
|
|
19
|
+
|
|
19
20
|
const [,, ruleName, ...options] = process.argv;
|
|
20
21
|
const recommended = options.includes('--recommended');
|
|
21
22
|
(async () => {
|
package/dist/generateRule.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generateRule.js","names":["_camelcase","_interopRequireDefault","require","_fs","_promises","_openEditor","_path","obj","__esModule","default","_getRequireWildcardCache","e","WeakMap","r","t","_interopRequireWildcard","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","prototype","hasOwnProperty","call","i","set","ruleName","options","process","argv","recommended","includes","console","error","test","ruleNamesPath","ruleNames","JSON","parse","fs","readFile","push","sort","writeFile","stringify","log","ruleTemplate","camelCasedRuleName","camelCase","rulePath","existsSync","ruleTestTemplate","ruleTestPath","ruleReadmeTemplate","ruleReadmePath","replaceInOrder","path","oldRegex","checkName","newLine","oldIsCamel","offsets","readme","replace","matchedLine","n1","offset","str","oldRule","oldRuleB","alreadyIncluded","itemIndex","findIndex","item","undefined","pop","length","slice","repeat","Promise","resolve","then","chdir","__dirname","open"],"sources":["../src/bin/generateRule.js"],"sourcesContent":["/* eslint-disable no-console -- CLI */\n\n/**\n * @example\n *\n * ```shell\n * npm run create-rule my-new-rule -- --recommended\n * ```\n */\n\nimport camelCase from 'camelcase';\nimport {\n existsSync,\n} from 'fs';\nimport fs from 'fs/promises';\nimport open from 'open-editor';\nimport {\n resolve,\n} from 'path';\n\n// Todo: Would ideally have prompts, e.g., to ask for whether\n// type was problem/layout, etc.\n\nconst [\n , , ruleName,\n ...options\n] = process.argv;\n\nconst recommended = options.includes('--recommended');\n\n(async () => {\n if (!ruleName) {\n console.error('Please supply a rule name');\n\n return;\n }\n\n if ((/[A-Z]/u).test(ruleName)) {\n console.error('Please ensure the rule has no capital letters');\n\n return;\n }\n\n const ruleNamesPath = './test/rules/ruleNames.json';\n // @ts-expect-error Older types?\n const ruleNames = JSON.parse(await fs.readFile(\n ruleNamesPath,\n ));\n if (!ruleNames.includes(ruleName)) {\n ruleNames.push(ruleName);\n ruleNames.sort();\n }\n\n await fs.writeFile(ruleNamesPath, JSON.stringify(ruleNames, null, 2) + '\\n');\n console.log('ruleNames', ruleNames);\n\n const ruleTemplate = `import iterateJsdoc from '../iterateJsdoc.js';\n\nexport default iterateJsdoc(({\n context,\n utils,\n}) => {\n // Rule here\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: '',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/${ruleName}.md#repos-sticky-header',\n },\n schema: [\n {\n additionalProperties: false,\n properties: {\n // Option properties here (or remove the object)\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n`;\n\n const camelCasedRuleName = camelCase(ruleName);\n\n const rulePath = `./src/rules/${camelCasedRuleName}.js`;\n\n if (!existsSync(rulePath)) {\n await fs.writeFile(rulePath, ruleTemplate);\n }\n\n const ruleTestTemplate = `export default {\n invalid: [\n {\n code: \\`\n \\`,\n errors: [\n {\n line: 2,\n message: '',\n },\n ],\n },\n ],\n valid: [\n {\n code: \\`\n \\`,\n },\n ],\n};\n`;\n\n const ruleTestPath = `./test/rules/assertions/${camelCasedRuleName}.js`;\n if (!existsSync(ruleTestPath)) {\n await fs.writeFile(ruleTestPath, ruleTestTemplate);\n }\n\n const ruleReadmeTemplate = `### \\`${ruleName}\\`\n\n|||\n|---|---|\n|Context|everywhere|\n|Tags|\\`\\`|\n|Recommended|${recommended ? 'true' : 'false'}|\n|Settings||\n|Options||\n\n## Failing examples\n\n<!-- assertions-failing ${camelCasedRuleName} -->\n\n## Passing examples\n\n<!-- assertions-passing ${camelCasedRuleName} -->\n`;\n\n const ruleReadmePath = `./.README/rules/${ruleName}.md`;\n if (!existsSync(ruleReadmePath)) {\n await fs.writeFile(ruleReadmePath, ruleReadmeTemplate);\n }\n\n /**\n * @param {object} cfg\n * @param {string} cfg.path\n * @param {RegExp} cfg.oldRegex\n * @param {string} cfg.checkName\n * @param {string} cfg.newLine\n * @param {boolean} [cfg.oldIsCamel]\n * @returns {Promise<void>}\n */\n const replaceInOrder = async ({\n path,\n oldRegex,\n checkName,\n newLine,\n oldIsCamel,\n }) => {\n /**\n * @typedef {number} Integer\n */\n /**\n * @typedef {{\n * matchedLine: string,\n * offset: Integer,\n * oldRule: string,\n * }} OffsetInfo\n */\n /**\n * @type {OffsetInfo[]}\n */\n const offsets = [];\n\n let readme = await fs.readFile(path, 'utf8');\n readme.replace(\n oldRegex,\n /**\n * @param {string} matchedLine\n * @param {string} n1\n * @param {Integer} offset\n * @param {string} str\n * @param {object} groups\n * @param {string} groups.oldRule\n * @returns {string}\n */\n (matchedLine, n1, offset, str, {\n oldRule,\n }) => {\n offsets.push({\n matchedLine,\n offset,\n oldRule,\n });\n\n return matchedLine;\n },\n );\n\n offsets.sort(({\n oldRule,\n }, {\n oldRule: oldRuleB,\n }) => {\n return oldRule < oldRuleB ? -1 : (oldRule > oldRuleB ? 1 : 0);\n });\n\n let alreadyIncluded = false;\n const itemIndex = offsets.findIndex(({\n oldRule,\n }) => {\n alreadyIncluded ||= oldIsCamel ? camelCasedRuleName === oldRule : ruleName === oldRule;\n\n return oldIsCamel ? camelCasedRuleName < oldRule : ruleName < oldRule;\n });\n let item = itemIndex !== undefined && offsets[itemIndex];\n if (item && itemIndex === 0 &&\n\n // This property would not always be sufficient but in this case it is.\n oldIsCamel\n ) {\n item.offset = 0;\n }\n\n if (!item) {\n item = /** @type {OffsetInfo} */ (offsets.pop());\n item.offset += item.matchedLine.length;\n }\n\n if (alreadyIncluded) {\n console.log(`Rule name is already present in ${checkName}.`);\n } else {\n readme = readme.slice(0, item.offset) +\n (item.offset ? '\\n' : '') +\n newLine +\n (item.offset ? '' : '\\n') +\n readme.slice(item.offset);\n\n await fs.writeFile(path, readme);\n }\n };\n\n // await replaceInOrder({\n // checkName: 'README',\n // newLine: `{\"gitdown\": \"include\", \"file\": \"./rules/${ruleName}.md\"}`,\n // oldRegex: /\\n\\{\"gitdown\": \"include\", \"file\": \".\\/rules\\/(?<oldRule>[^.]*).md\"\\}/gu,\n // path: './.README/README.md',\n // });\n\n await replaceInOrder({\n checkName: 'index import',\n newLine: `import ${camelCasedRuleName} from './rules/${camelCasedRuleName}.js';`,\n oldIsCamel: true,\n oldRegex: /\\nimport (?<oldRule>[^ ]*) from '.\\/rules\\/\\1\\.js';/gu,\n path: './src/index.js',\n });\n\n await replaceInOrder({\n checkName: 'index recommended',\n newLine: `${' '.repeat(6)}'jsdoc/${ruleName}': ${recommended ? 'warnOrError' : '\\'off\\''},`,\n oldRegex: /\\n\\s{6}'jsdoc\\/(?<oldRule>[^']*)': .*?,/gu,\n path: './src/index.js',\n });\n\n await replaceInOrder({\n checkName: 'index rules',\n newLine: `${' '.repeat(4)}'${ruleName}': ${camelCasedRuleName},`,\n oldRegex: /\\n\\s{4}'(?<oldRule>[^']*)': [^,]*,/gu,\n path: './src/index.js',\n });\n\n await import('./generateDocs.js');\n\n /*\n console.log('Paths to open for further editing\\n');\n console.log(`open ${ruleReadmePath}`);\n console.log(`open ${rulePath}`);\n console.log(`open ${ruleTestPath}\\n`);\n */\n\n // Set chdir as somehow still in operation from other test\n process.chdir(resolve(__dirname, '../../'));\n await open([\n // Could even add editor line column numbers like `${rulePath}:1:1`\n ruleReadmePath,\n ruleTestPath,\n rulePath,\n ]);\n})();\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"generateRule.js","names":["_camelcase","_interopRequireDefault","require","_fs","_promises","_openEditor","_path","obj","__esModule","default","_getRequireWildcardCache","e","WeakMap","r","t","_interopRequireWildcard","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","prototype","hasOwnProperty","call","i","set","ruleName","options","process","argv","recommended","includes","console","error","test","ruleNamesPath","ruleNames","JSON","parse","fs","readFile","push","sort","writeFile","stringify","log","ruleTemplate","camelCasedRuleName","camelCase","rulePath","existsSync","ruleTestTemplate","ruleTestPath","ruleReadmeTemplate","ruleReadmePath","replaceInOrder","path","oldRegex","checkName","newLine","oldIsCamel","offsets","readme","replace","matchedLine","n1","offset","str","oldRule","oldRuleB","alreadyIncluded","itemIndex","findIndex","item","undefined","pop","length","slice","repeat","Promise","resolve","then","chdir","__dirname","open"],"sources":["../src/bin/generateRule.js"],"sourcesContent":["/* eslint-disable no-console -- CLI */\n\n/**\n * @example\n *\n * ```shell\n * npm run create-rule my-new-rule -- --recommended\n * ```\n */\n\nimport camelCase from 'camelcase';\nimport {\n existsSync,\n} from 'fs';\nimport fs from 'fs/promises';\nimport open from 'open-editor';\nimport {\n resolve,\n} from 'path';\n\n// Todo: Would ideally have prompts, e.g., to ask for whether\n// type was problem/layout, etc.\n\nconst [\n , , ruleName,\n ...options\n] = process.argv;\n\nconst recommended = options.includes('--recommended');\n\n(async () => {\n if (!ruleName) {\n console.error('Please supply a rule name');\n\n return;\n }\n\n if ((/[A-Z]/u).test(ruleName)) {\n console.error('Please ensure the rule has no capital letters');\n\n return;\n }\n\n const ruleNamesPath = './test/rules/ruleNames.json';\n // @ts-expect-error Older types?\n const ruleNames = JSON.parse(await fs.readFile(\n ruleNamesPath,\n ));\n if (!ruleNames.includes(ruleName)) {\n ruleNames.push(ruleName);\n ruleNames.sort();\n }\n\n await fs.writeFile(ruleNamesPath, JSON.stringify(ruleNames, null, 2) + '\\n');\n console.log('ruleNames', ruleNames);\n\n const ruleTemplate = `import iterateJsdoc from '../iterateJsdoc.js';\n\nexport default iterateJsdoc(({\n context,\n utils,\n}) => {\n // Rule here\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: '',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/${ruleName}.md#repos-sticky-header',\n },\n schema: [\n {\n additionalProperties: false,\n properties: {\n // Option properties here (or remove the object)\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n`;\n\n const camelCasedRuleName = camelCase(ruleName);\n\n const rulePath = `./src/rules/${camelCasedRuleName}.js`;\n\n if (!existsSync(rulePath)) {\n await fs.writeFile(rulePath, ruleTemplate);\n }\n\n const ruleTestTemplate = `export default {\n invalid: [\n {\n code: \\`\n \\`,\n errors: [\n {\n line: 2,\n message: '',\n },\n ],\n },\n ],\n valid: [\n {\n code: \\`\n \\`,\n },\n ],\n};\n`;\n\n const ruleTestPath = `./test/rules/assertions/${camelCasedRuleName}.js`;\n if (!existsSync(ruleTestPath)) {\n await fs.writeFile(ruleTestPath, ruleTestTemplate);\n }\n\n const ruleReadmeTemplate = `### \\`${ruleName}\\`\n\n|||\n|---|---|\n|Context|everywhere|\n|Tags|\\`\\`|\n|Recommended|${recommended ? 'true' : 'false'}|\n|Settings||\n|Options||\n\n## Failing examples\n\n<!-- assertions-failing ${camelCasedRuleName} -->\n\n## Passing examples\n\n<!-- assertions-passing ${camelCasedRuleName} -->\n`;\n\n const ruleReadmePath = `./.README/rules/${ruleName}.md`;\n if (!existsSync(ruleReadmePath)) {\n await fs.writeFile(ruleReadmePath, ruleReadmeTemplate);\n }\n\n /**\n * @param {object} cfg\n * @param {string} cfg.path\n * @param {RegExp} cfg.oldRegex\n * @param {string} cfg.checkName\n * @param {string} cfg.newLine\n * @param {boolean} [cfg.oldIsCamel]\n * @returns {Promise<void>}\n */\n const replaceInOrder = async ({\n path,\n oldRegex,\n checkName,\n newLine,\n oldIsCamel,\n }) => {\n /**\n * @typedef {number} Integer\n */\n /**\n * @typedef {{\n * matchedLine: string,\n * offset: Integer,\n * oldRule: string,\n * }} OffsetInfo\n */\n /**\n * @type {OffsetInfo[]}\n */\n const offsets = [];\n\n let readme = await fs.readFile(path, 'utf8');\n readme.replace(\n oldRegex,\n /**\n * @param {string} matchedLine\n * @param {string} n1\n * @param {Integer} offset\n * @param {string} str\n * @param {object} groups\n * @param {string} groups.oldRule\n * @returns {string}\n */\n (matchedLine, n1, offset, str, {\n oldRule,\n }) => {\n offsets.push({\n matchedLine,\n offset,\n oldRule,\n });\n\n return matchedLine;\n },\n );\n\n offsets.sort(({\n oldRule,\n }, {\n oldRule: oldRuleB,\n }) => {\n return oldRule < oldRuleB ? -1 : (oldRule > oldRuleB ? 1 : 0);\n });\n\n let alreadyIncluded = false;\n const itemIndex = offsets.findIndex(({\n oldRule,\n }) => {\n alreadyIncluded ||= oldIsCamel ? camelCasedRuleName === oldRule : ruleName === oldRule;\n\n return oldIsCamel ? camelCasedRuleName < oldRule : ruleName < oldRule;\n });\n let item = itemIndex !== undefined && offsets[itemIndex];\n if (item && itemIndex === 0 &&\n\n // This property would not always be sufficient but in this case it is.\n oldIsCamel\n ) {\n item.offset = 0;\n }\n\n if (!item) {\n item = /** @type {OffsetInfo} */ (offsets.pop());\n item.offset += item.matchedLine.length;\n }\n\n if (alreadyIncluded) {\n console.log(`Rule name is already present in ${checkName}.`);\n } else {\n readme = readme.slice(0, item.offset) +\n (item.offset ? '\\n' : '') +\n newLine +\n (item.offset ? '' : '\\n') +\n readme.slice(item.offset);\n\n await fs.writeFile(path, readme);\n }\n };\n\n // await replaceInOrder({\n // checkName: 'README',\n // newLine: `{\"gitdown\": \"include\", \"file\": \"./rules/${ruleName}.md\"}`,\n // oldRegex: /\\n\\{\"gitdown\": \"include\", \"file\": \".\\/rules\\/(?<oldRule>[^.]*).md\"\\}/gu,\n // path: './.README/README.md',\n // });\n\n await replaceInOrder({\n checkName: 'index import',\n newLine: `import ${camelCasedRuleName} from './rules/${camelCasedRuleName}.js';`,\n oldIsCamel: true,\n oldRegex: /\\nimport (?<oldRule>[^ ]*) from '.\\/rules\\/\\1\\.js';/gu,\n path: './src/index.js',\n });\n\n await replaceInOrder({\n checkName: 'index recommended',\n newLine: `${' '.repeat(6)}'jsdoc/${ruleName}': ${recommended ? 'warnOrError' : '\\'off\\''},`,\n oldRegex: /\\n\\s{6}'jsdoc\\/(?<oldRule>[^']*)': .*?,/gu,\n path: './src/index.js',\n });\n\n await replaceInOrder({\n checkName: 'index rules',\n newLine: `${' '.repeat(4)}'${ruleName}': ${camelCasedRuleName},`,\n oldRegex: /\\n\\s{4}'(?<oldRule>[^']*)': [^,]*,/gu,\n path: './src/index.js',\n });\n\n await import('./generateDocs.js');\n\n /*\n console.log('Paths to open for further editing\\n');\n console.log(`open ${ruleReadmePath}`);\n console.log(`open ${rulePath}`);\n console.log(`open ${ruleTestPath}\\n`);\n */\n\n // Set chdir as somehow still in operation from other test\n process.chdir(resolve(__dirname, '../../'));\n await open([\n // Could even add editor line column numbers like `${rulePath}:1:1`\n ruleReadmePath,\n ruleTestPath,\n rulePath,\n ]);\n})();\n"],"mappings":"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"}
|
package/dist/iterateJsdoc.js
CHANGED
|
@@ -478,6 +478,7 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
|
|
|
478
478
|
* contextStr: string
|
|
479
479
|
* }}
|
|
480
480
|
*/
|
|
481
|
+
|
|
481
482
|
/**
|
|
482
483
|
* @typedef {BasicUtils & {
|
|
483
484
|
* isIteratingFunction: IsIteratingFunction,
|
|
@@ -541,6 +542,7 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
|
|
|
541
542
|
* findContext: FindContext
|
|
542
543
|
* }} Utils
|
|
543
544
|
*/
|
|
545
|
+
|
|
544
546
|
const {
|
|
545
547
|
rewireSpecs,
|
|
546
548
|
seedTokens
|
|
@@ -872,7 +874,7 @@ const getUtils = (node, jsdoc, jsdocNode, settings, report, context, sc, iterati
|
|
|
872
874
|
|
|
873
875
|
/* istanbul ignore else -- Won't be called if missing */
|
|
874
876
|
if (descLines.length) {
|
|
875
|
-
jsdoc.source.splice( /** @type {Integer} */startIdx, /** @type {Integer} */endIdx - /** @type {Integer} */startIdx, ...setter(
|
|
877
|
+
jsdoc.source.splice( /** @type {Integer} */startIdx, /** @type {Integer} */endIdx - ( /** @type {Integer} */startIdx), ...setter(
|
|
876
878
|
/**
|
|
877
879
|
* @type {{
|
|
878
880
|
* delimiter: string,
|
|
@@ -980,12 +982,12 @@ const getUtils = (node, jsdoc, jsdocNode, settings, report, context, sc, iterati
|
|
|
980
982
|
tokens
|
|
981
983
|
} = jsdoc.source[spliceIdx];
|
|
982
984
|
for (const item of ['postDelimiter', 'tag', 'postTag', 'type', 'postType', 'name', 'postName', 'description']) {
|
|
983
|
-
tokens[
|
|
985
|
+
tokens[(
|
|
984
986
|
/**
|
|
985
987
|
* @type {"postDelimiter"|"tag"|"type"|"postType"|
|
|
986
988
|
* "postTag"|"name"|"postName"|"description"}
|
|
987
989
|
*/
|
|
988
|
-
item] = '';
|
|
990
|
+
item)] = '';
|
|
989
991
|
}
|
|
990
992
|
} else {
|
|
991
993
|
jsdoc.source.splice(spliceIdx, spliceCount - tagSourceOffset + (spliceIdx ? 0 : jsdoc.source.length));
|
|
@@ -999,7 +1001,7 @@ const getUtils = (node, jsdoc, jsdocNode, settings, report, context, sc, iterati
|
|
|
999
1001
|
return false;
|
|
1000
1002
|
});
|
|
1001
1003
|
for (const [idx, src] of jsdoc.source.slice(lastIndex).entries()) {
|
|
1002
|
-
src.number = firstNumber + /** @type {Integer} */lastIndex + idx;
|
|
1004
|
+
src.number = firstNumber + ( /** @type {Integer} */lastIndex) + idx;
|
|
1003
1005
|
}
|
|
1004
1006
|
|
|
1005
1007
|
// Todo: Once rewiring of tags may be fixed in comment-parser to reflect
|
|
@@ -1055,12 +1057,12 @@ const getUtils = (node, jsdoc, jsdocNode, settings, report, context, sc, iterati
|
|
|
1055
1057
|
/** @type {EmptyTokens} */
|
|
1056
1058
|
utils.emptyTokens = tokens => {
|
|
1057
1059
|
for (const prop of ['start', 'postDelimiter', 'tag', 'type', 'postType', 'postTag', 'name', 'postName', 'description', 'end', 'lineEnd']) {
|
|
1058
|
-
tokens[
|
|
1060
|
+
tokens[(
|
|
1059
1061
|
/**
|
|
1060
1062
|
* @type {"start"|"postDelimiter"|"tag"|"type"|"postType"|
|
|
1061
1063
|
* "postTag"|"name"|"postName"|"description"|"end"|"lineEnd"}
|
|
1062
1064
|
*/
|
|
1063
|
-
prop] = '';
|
|
1065
|
+
prop)] = '';
|
|
1064
1066
|
}
|
|
1065
1067
|
};
|
|
1066
1068
|
|
|
@@ -1128,7 +1130,7 @@ const getUtils = (node, jsdoc, jsdocNode, settings, report, context, sc, iterati
|
|
|
1128
1130
|
return false;
|
|
1129
1131
|
});
|
|
1130
1132
|
for (const [idx, src] of jsdoc.source.slice(lastIndex).entries()) {
|
|
1131
|
-
src.number = firstNumber + /** @type {Integer} */lastIndex + idx;
|
|
1133
|
+
src.number = firstNumber + ( /** @type {Integer} */lastIndex) + idx;
|
|
1132
1134
|
}
|
|
1133
1135
|
};
|
|
1134
1136
|
|
|
@@ -1210,11 +1212,12 @@ const getUtils = (node, jsdoc, jsdocNode, settings, report, context, sc, iterati
|
|
|
1210
1212
|
* import('estree').FunctionExpression}
|
|
1211
1213
|
*/
|
|
1212
1214
|
node.generator || node.type === 'MethodDefinition' && node.value.generator || ['ExportNamedDeclaration', 'ExportDefaultDeclaration'].includes(node.type) && /** @type {import('estree').FunctionDeclaration} */
|
|
1215
|
+
(
|
|
1213
1216
|
/**
|
|
1214
1217
|
* @type {import('estree').ExportNamedDeclaration|
|
|
1215
1218
|
* import('estree').ExportDefaultDeclaration}
|
|
1216
1219
|
*/
|
|
1217
|
-
node.declaration.generator);
|
|
1220
|
+
node.declaration).generator);
|
|
1218
1221
|
};
|
|
1219
1222
|
|
|
1220
1223
|
/** @type {IsConstructor} */
|
|
@@ -1299,10 +1302,10 @@ const getUtils = (node, jsdoc, jsdocNode, settings, report, context, sc, iterati
|
|
|
1299
1302
|
};
|
|
1300
1303
|
for (const method of ['tagMightHaveNamePosition', 'tagMightHaveTypePosition']) {
|
|
1301
1304
|
/** @type {TagMightHaveNamePositionTypePosition} */
|
|
1302
|
-
utils[/** @type {"tagMightHaveNamePosition"|"tagMightHaveTypePosition"} */
|
|
1303
|
-
method] = (tagName, otherModeMaps) => {
|
|
1304
|
-
const result = _jsdocUtils.default[/** @type {"tagMightHaveNamePosition"|"tagMightHaveTypePosition"} */
|
|
1305
|
-
method](tagName);
|
|
1305
|
+
utils[( /** @type {"tagMightHaveNamePosition"|"tagMightHaveTypePosition"} */
|
|
1306
|
+
method)] = (tagName, otherModeMaps) => {
|
|
1307
|
+
const result = _jsdocUtils.default[( /** @type {"tagMightHaveNamePosition"|"tagMightHaveTypePosition"} */
|
|
1308
|
+
method)](tagName);
|
|
1306
1309
|
if (result) {
|
|
1307
1310
|
return true;
|
|
1308
1311
|
}
|
|
@@ -1310,8 +1313,8 @@ const getUtils = (node, jsdoc, jsdocNode, settings, report, context, sc, iterati
|
|
|
1310
1313
|
return false;
|
|
1311
1314
|
}
|
|
1312
1315
|
const otherResult = otherModeMaps.some(otherModeMap => {
|
|
1313
|
-
return _jsdocUtils.default[/** @type {"tagMightHaveNamePosition"|"tagMightHaveTypePosition"} */
|
|
1314
|
-
method](tagName, otherModeMap);
|
|
1316
|
+
return _jsdocUtils.default[( /** @type {"tagMightHaveNamePosition"|"tagMightHaveTypePosition"} */
|
|
1317
|
+
method)](tagName, otherModeMap);
|
|
1315
1318
|
});
|
|
1316
1319
|
return otherResult ? {
|
|
1317
1320
|
otherMode: true
|
|
@@ -1334,10 +1337,10 @@ const getUtils = (node, jsdoc, jsdocNode, settings, report, context, sc, iterati
|
|
|
1334
1337
|
};
|
|
1335
1338
|
for (const method of ['tagMustHaveNamePosition', 'tagMustHaveTypePosition']) {
|
|
1336
1339
|
/** @type {TagMustHave} */
|
|
1337
|
-
utils[/** @type {"tagMustHaveNamePosition"|"tagMustHaveTypePosition"} */
|
|
1338
|
-
method] = (tagName, otherModeMaps) => {
|
|
1339
|
-
const result = _jsdocUtils.default[/** @type {"tagMustHaveNamePosition"|"tagMustHaveTypePosition"} */
|
|
1340
|
-
method](tagName);
|
|
1340
|
+
utils[( /** @type {"tagMustHaveNamePosition"|"tagMustHaveTypePosition"} */
|
|
1341
|
+
method)] = (tagName, otherModeMaps) => {
|
|
1342
|
+
const result = _jsdocUtils.default[( /** @type {"tagMustHaveNamePosition"|"tagMustHaveTypePosition"} */
|
|
1343
|
+
method)](tagName);
|
|
1341
1344
|
if (!result) {
|
|
1342
1345
|
return false;
|
|
1343
1346
|
}
|
|
@@ -1345,8 +1348,8 @@ const getUtils = (node, jsdoc, jsdocNode, settings, report, context, sc, iterati
|
|
|
1345
1348
|
// if (!otherModeMaps) { return true; }
|
|
1346
1349
|
|
|
1347
1350
|
const otherResult = otherModeMaps.every(otherModeMap => {
|
|
1348
|
-
return _jsdocUtils.default[/** @type {"tagMustHaveNamePosition"|"tagMustHaveTypePosition"} */
|
|
1349
|
-
method](tagName, otherModeMap);
|
|
1351
|
+
return _jsdocUtils.default[( /** @type {"tagMustHaveNamePosition"|"tagMustHaveTypePosition"} */
|
|
1352
|
+
method)](tagName, otherModeMap);
|
|
1350
1353
|
});
|
|
1351
1354
|
return otherResult ? true : {
|
|
1352
1355
|
otherMode: false
|
|
@@ -1355,10 +1358,10 @@ const getUtils = (node, jsdoc, jsdocNode, settings, report, context, sc, iterati
|
|
|
1355
1358
|
}
|
|
1356
1359
|
for (const method of ['isNamepathDefiningTag', 'isNamepathReferencingTag', 'isNamepathOrUrlReferencingTag', 'tagMightHaveNamepath']) {
|
|
1357
1360
|
/** @type {IsNamepathX} */
|
|
1358
|
-
utils[/** @type {"isNamepathDefiningTag"|"isNamepathReferencingTag"|"isNamepathOrUrlReferencingTag"|"tagMightHaveNamepath"} */
|
|
1359
|
-
method] = tagName => {
|
|
1360
|
-
return _jsdocUtils.default[/** @type {"isNamepathDefiningTag"|"isNamepathReferencingTag"|"isNamepathOrUrlReferencingTag"|"tagMightHaveNamepath"} */
|
|
1361
|
-
method](tagName);
|
|
1361
|
+
utils[( /** @type {"isNamepathDefiningTag"|"isNamepathReferencingTag"|"isNamepathOrUrlReferencingTag"|"tagMightHaveNamepath"} */
|
|
1362
|
+
method)] = tagName => {
|
|
1363
|
+
return _jsdocUtils.default[( /** @type {"isNamepathDefiningTag"|"isNamepathReferencingTag"|"isNamepathOrUrlReferencingTag"|"tagMightHaveNamepath"} */
|
|
1364
|
+
method)](tagName);
|
|
1362
1365
|
};
|
|
1363
1366
|
}
|
|
1364
1367
|
|
|
@@ -1399,7 +1402,7 @@ const getUtils = (node, jsdoc, jsdocNode, settings, report, context, sc, iterati
|
|
|
1399
1402
|
|
|
1400
1403
|
/** @type {IsAsync} */
|
|
1401
1404
|
utils.isAsync = () => {
|
|
1402
|
-
return 'async' in /** @type {Node} */node && node.async;
|
|
1405
|
+
return 'async' in ( /** @type {Node} */node) && node.async;
|
|
1403
1406
|
};
|
|
1404
1407
|
|
|
1405
1408
|
/** @type {GetTags} */
|
|
@@ -1621,7 +1624,7 @@ const makeReport = (context, commentNode) => {
|
|
|
1621
1624
|
if (!('line' in jsdocLoc)) {
|
|
1622
1625
|
jsdocLoc.line = /** @type {import('comment-parser').Spec & {line?: Integer}} */jsdocLoc.source[0].number;
|
|
1623
1626
|
}
|
|
1624
|
-
const lineNumber = /** @type {import('eslint').AST.SourceLocation} */commentNode.loc.start.line + /** @type {Integer} */jsdocLoc.line;
|
|
1627
|
+
const lineNumber = /** @type {import('eslint').AST.SourceLocation} */commentNode.loc.start.line + ( /** @type {Integer} */jsdocLoc.line);
|
|
1625
1628
|
loc = {
|
|
1626
1629
|
end: {
|
|
1627
1630
|
column: 0,
|
|
@@ -1749,12 +1752,12 @@ const iterate = (info, indent, jsdoc, ruleConfig, context, jsdocNode, node, sett
|
|
|
1749
1752
|
indent,
|
|
1750
1753
|
info,
|
|
1751
1754
|
jsdoc,
|
|
1752
|
-
jsdocNode:
|
|
1755
|
+
jsdocNode: (
|
|
1753
1756
|
/**
|
|
1754
1757
|
* @type {import('eslint').Rule.Node & {
|
|
1755
1758
|
* range: [number, number];}}
|
|
1756
1759
|
*/
|
|
1757
|
-
jsdocNde,
|
|
1760
|
+
jsdocNde),
|
|
1758
1761
|
node,
|
|
1759
1762
|
report,
|
|
1760
1763
|
settings,
|
|
@@ -1940,8 +1943,8 @@ const iterateAllJsdocs = (iterator, ruleConfig, contexts, additiveCommentContext
|
|
|
1940
1943
|
return;
|
|
1941
1944
|
}
|
|
1942
1945
|
trackedJsdocs.add(commentNode);
|
|
1943
|
-
callIterator(context, node, [/** @type {import('estree').Comment} */
|
|
1944
|
-
commentNode], /** @type {StateObject} */state);
|
|
1946
|
+
callIterator(context, node, [( /** @type {import('estree').Comment} */
|
|
1947
|
+
commentNode)], /** @type {StateObject} */state);
|
|
1945
1948
|
},
|
|
1946
1949
|
'Program:exit'() {
|
|
1947
1950
|
const allComments = sourceCode.getAllComments();
|
|
@@ -1980,7 +1983,7 @@ const checkFile = (iterator, ruleConfig) => {
|
|
|
1980
1983
|
const allComms = /** @type {unknown} */sourceCode.getAllComments();
|
|
1981
1984
|
const utils = getBasicUtils(context, settings);
|
|
1982
1985
|
iterator({
|
|
1983
|
-
allComments: /** @type {import('estree').Node[]} */allComms,
|
|
1986
|
+
allComments: ( /** @type {import('estree').Node[]} */allComms),
|
|
1984
1987
|
context,
|
|
1985
1988
|
makeReport,
|
|
1986
1989
|
settings,
|
|
@@ -2056,7 +2059,7 @@ function iterateJsdoc(iterator, ruleConfig) {
|
|
|
2056
2059
|
return (ctxt === null || ctxt === void 0 ? void 0 : ctxt.context) === 'any';
|
|
2057
2060
|
}));
|
|
2058
2061
|
if (hasPlainAny || hasObjectAny) {
|
|
2059
|
-
return iterateAllJsdocs(iterator, ruleConfig, hasObjectAny ? /** @type {ContextObject[]} */contexts : null, ruleConfig.matchContext).create(context);
|
|
2062
|
+
return iterateAllJsdocs(iterator, ruleConfig, hasObjectAny ? ( /** @type {ContextObject[]} */contexts) : null, ruleConfig.matchContext).create(context);
|
|
2060
2063
|
}
|
|
2061
2064
|
}
|
|
2062
2065
|
|