eslint-plugin-jsdoc 39.3.6 → 39.3.12

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.
Files changed (124) hide show
  1. package/README.md +267 -52
  2. package/dist/WarnSettings.js +0 -5
  3. package/dist/WarnSettings.js.map +1 -1
  4. package/dist/alignTransform.js +69 -61
  5. package/dist/alignTransform.js.map +1 -1
  6. package/dist/bin/generateRule.js +7 -26
  7. package/dist/bin/generateRule.js.map +1 -1
  8. package/dist/defaultTagOrder.js +30 -14
  9. package/dist/defaultTagOrder.js.map +1 -1
  10. package/dist/exportParser.js +34 -143
  11. package/dist/exportParser.js.map +1 -1
  12. package/dist/generateRule.js +7 -26
  13. package/dist/generateRule.js.map +1 -1
  14. package/dist/getDefaultTagStructureForMode.js +189 -93
  15. package/dist/getDefaultTagStructureForMode.js.map +1 -1
  16. package/dist/index.js +0 -51
  17. package/dist/index.js.map +1 -1
  18. package/dist/iterateJsdoc.js +43 -206
  19. package/dist/iterateJsdoc.js.map +1 -1
  20. package/dist/jsdocUtils.js +71 -220
  21. package/dist/jsdocUtils.js.map +1 -1
  22. package/dist/rules/checkAccess.js +0 -8
  23. package/dist/rules/checkAccess.js.map +1 -1
  24. package/dist/rules/checkAlignment.js +0 -8
  25. package/dist/rules/checkAlignment.js.map +1 -1
  26. package/dist/rules/checkExamples.js +25 -63
  27. package/dist/rules/checkExamples.js.map +1 -1
  28. package/dist/rules/checkIndentation.js +0 -7
  29. package/dist/rules/checkIndentation.js.map +1 -1
  30. package/dist/rules/checkLineAlignment.js +9 -30
  31. package/dist/rules/checkLineAlignment.js.map +1 -1
  32. package/dist/rules/checkParamNames.js +9 -47
  33. package/dist/rules/checkParamNames.js.map +1 -1
  34. package/dist/rules/checkPropertyNames.js +1 -18
  35. package/dist/rules/checkPropertyNames.js.map +1 -1
  36. package/dist/rules/checkSyntax.js +2 -5
  37. package/dist/rules/checkSyntax.js.map +1 -1
  38. package/dist/rules/checkTagNames.js +0 -18
  39. package/dist/rules/checkTagNames.js.map +1 -1
  40. package/dist/rules/checkTypes.js +17 -46
  41. package/dist/rules/checkTypes.js.map +1 -1
  42. package/dist/rules/checkValues.js +0 -18
  43. package/dist/rules/checkValues.js.map +1 -1
  44. package/dist/rules/emptyTags.js +6 -11
  45. package/dist/rules/emptyTags.js.map +1 -1
  46. package/dist/rules/implementsOnClasses.js +0 -6
  47. package/dist/rules/implementsOnClasses.js.map +1 -1
  48. package/dist/rules/matchDescription.js +0 -20
  49. package/dist/rules/matchDescription.js.map +1 -1
  50. package/dist/rules/matchName.js +2 -17
  51. package/dist/rules/matchName.js.map +1 -1
  52. package/dist/rules/multilineBlocks.js +10 -34
  53. package/dist/rules/multilineBlocks.js.map +1 -1
  54. package/dist/rules/newlineAfterDescription.js +0 -8
  55. package/dist/rules/newlineAfterDescription.js.map +1 -1
  56. package/dist/rules/noBadBlocks.js +2 -16
  57. package/dist/rules/noBadBlocks.js.map +1 -1
  58. package/dist/rules/noDefaults.js +0 -7
  59. package/dist/rules/noDefaults.js.map +1 -1
  60. package/dist/rules/noMissingSyntax.js +2 -16
  61. package/dist/rules/noMissingSyntax.js.map +1 -1
  62. package/dist/rules/noMultiAsterisks.js +2 -16
  63. package/dist/rules/noMultiAsterisks.js.map +1 -1
  64. package/dist/rules/noRestrictedSyntax.js +3 -9
  65. package/dist/rules/noRestrictedSyntax.js.map +1 -1
  66. package/dist/rules/noTypes.js +0 -7
  67. package/dist/rules/noTypes.js.map +1 -1
  68. package/dist/rules/noUndefinedTypes.js +13 -34
  69. package/dist/rules/noUndefinedTypes.js.map +1 -1
  70. package/dist/rules/requireAsteriskPrefix.js +2 -26
  71. package/dist/rules/requireAsteriskPrefix.js.map +1 -1
  72. package/dist/rules/requireDescription.js +0 -17
  73. package/dist/rules/requireDescription.js.map +1 -1
  74. package/dist/rules/requireDescriptionCompleteSentence.js +13 -34
  75. package/dist/rules/requireDescriptionCompleteSentence.js.map +1 -1
  76. package/dist/rules/requireExample.js +0 -9
  77. package/dist/rules/requireExample.js.map +1 -1
  78. package/dist/rules/requireFileOverview.js +0 -16
  79. package/dist/rules/requireFileOverview.js.map +1 -1
  80. package/dist/rules/requireHyphenBeforeParamDescription.js +2 -16
  81. package/dist/rules/requireHyphenBeforeParamDescription.js.map +1 -1
  82. package/dist/rules/requireJsdoc.js +13 -58
  83. package/dist/rules/requireJsdoc.js.map +1 -1
  84. package/dist/rules/requireParam.js +6 -53
  85. package/dist/rules/requireParam.js.map +1 -1
  86. package/dist/rules/requireParamDescription.js +0 -4
  87. package/dist/rules/requireParamDescription.js.map +1 -1
  88. package/dist/rules/requireParamName.js +0 -4
  89. package/dist/rules/requireParamName.js.map +1 -1
  90. package/dist/rules/requireParamType.js +0 -4
  91. package/dist/rules/requireParamType.js.map +1 -1
  92. package/dist/rules/requireProperty.js +0 -9
  93. package/dist/rules/requireProperty.js.map +1 -1
  94. package/dist/rules/requirePropertyDescription.js +0 -4
  95. package/dist/rules/requirePropertyDescription.js.map +1 -1
  96. package/dist/rules/requirePropertyName.js +0 -4
  97. package/dist/rules/requirePropertyName.js.map +1 -1
  98. package/dist/rules/requirePropertyType.js +0 -4
  99. package/dist/rules/requirePropertyType.js.map +1 -1
  100. package/dist/rules/requireReturns.js +13 -23
  101. package/dist/rules/requireReturns.js.map +1 -1
  102. package/dist/rules/requireReturnsCheck.js +12 -20
  103. package/dist/rules/requireReturnsCheck.js.map +1 -1
  104. package/dist/rules/requireReturnsDescription.js +0 -6
  105. package/dist/rules/requireReturnsDescription.js.map +1 -1
  106. package/dist/rules/requireReturnsType.js +0 -4
  107. package/dist/rules/requireReturnsType.js.map +1 -1
  108. package/dist/rules/requireThrows.js +6 -15
  109. package/dist/rules/requireThrows.js.map +1 -1
  110. package/dist/rules/requireYields.js +13 -29
  111. package/dist/rules/requireYields.js.map +1 -1
  112. package/dist/rules/requireYieldsCheck.js +8 -29
  113. package/dist/rules/requireYieldsCheck.js.map +1 -1
  114. package/dist/rules/sortTags.js +17 -30
  115. package/dist/rules/sortTags.js.map +1 -1
  116. package/dist/rules/tagLines.js +0 -26
  117. package/dist/rules/tagLines.js.map +1 -1
  118. package/dist/rules/validTypes.js +22 -53
  119. package/dist/rules/validTypes.js.map +1 -1
  120. package/dist/tagNames.js +7 -4
  121. package/dist/tagNames.js.map +1 -1
  122. package/dist/utils/hasReturnValue.js +22 -66
  123. package/dist/utils/hasReturnValue.js.map +1 -1
  124. package/package.json +16 -16
@@ -1 +1 @@
1
- {"version":3,"file":"exportParser.js","names":["debug","debugModule","createNode","props","getSymbolValue","symbol","type","value","getIdentifier","node","globals","scope","opts","simpleIdentifier","identifierLiteral","name","block","createSymbol","getSymbol","opt","obj","object","propertySymbol","property","computed","propertyValue","body","val","prototype","left","right","method","key","parent","prop","properties","includes","propVal","createBlockSymbol","isGlobal","window","special","id","valueSymbol","initVariables","childNode","expression","declaration","declarations","initWindow","kind","mapVariables","isExport","ancestorsOnly","init","exported","ANONYMOUS_DEFAULT","specifier","specifiers","local","findNode","cache","blockCache","slice","push","propval","Object","values","Array","isArray","some","exportTypes","Set","ignorableNestedTypes","getExportAncestor","nde","idx","ignorableIfDeep","has","canBeExportedByAncestorType","canExportChildrenType","isExportByAncestor","findExportedNode","isNodeExported","moduleExports","module","exports","initModuleExports","esm","parseRecursive","globalVars","parse","ast","isUncommentedExport","sourceCode","settings","exportNode","findJSDocComment","parseResult"],"sources":["../src/exportParser.js"],"sourcesContent":["import {\n findJSDocComment,\n} from '@es-joy/jsdoccomment';\nimport debugModule from 'debug';\n\nconst debug = debugModule('requireExportJsdoc');\n\nconst createNode = function () {\n return {\n props: {},\n };\n};\n\nconst getSymbolValue = function (symbol) {\n /* istanbul ignore next */\n if (!symbol) {\n /* istanbul ignore next */\n return null;\n }\n\n /* istanbul ignore next */\n if (symbol.type === 'literal') {\n return symbol.value.value;\n }\n\n /* istanbul ignore next */\n return null;\n};\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\nlet createSymbol = null;\n\n// eslint-disable-next-line complexity\nconst getSymbol = function (node, globals, scope, opt) {\n const opts = opt || {};\n /* istanbul ignore next */\n // eslint-disable-next-line default-case\n switch (node.type) {\n case 'Identifier': {\n return getIdentifier(node, globals, scope, opts);\n }\n\n case 'MemberExpression': {\n const obj = getSymbol(node.object, globals, scope, opts);\n const propertySymbol = getSymbol(node.property, globals, scope, {\n simpleIdentifier: !node.computed,\n });\n const propertyValue = getSymbolValue(propertySymbol);\n\n /* istanbul ignore next */\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 ${node.property.name}`);\n\n /* istanbul ignore next */\n return null;\n }\n\n case 'ClassExpression': {\n return getSymbol(node.body, globals, scope, opts);\n }\n\n case 'TSTypeAliasDeclaration':\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(node.left, globals, node.right, scope, opts);\n }\n\n case 'ClassBody': {\n const val = createNode();\n for (const method of node.body) {\n val.props[method.key.name] = createNode();\n val.props[method.key.name].type = 'object';\n val.props[method.key.name].value = method.value;\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(prop.value, globals, scope, opts);\n /* istanbul ignore next */\n if (propVal) {\n val.props[prop.key.name] = 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\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 let symbol;\n // eslint-disable-next-line default-case\n switch (node.type) {\n case 'FunctionDeclaration':\n /* istanbul ignore next */\n // Fall through\n case 'TSEnumDeclaration': case 'TSInterfaceDeclaration':\n /* istanbul ignore next */\n // Fall through\n case 'TSTypeAliasDeclaration': case 'ClassDeclaration': {\n /* istanbul ignore next */\n if (node.id && node.id.type === 'Identifier') {\n return createSymbol(node.id, globals, node, globals);\n }\n\n /* istanbul ignore next */\n break;\n }\n\n case 'Identifier': {\n if (value) {\n const valueSymbol = getSymbol(value, globals, block);\n /* istanbul ignore next */\n if (valueSymbol) {\n createBlockSymbol(block, node.name, valueSymbol, globals, isGlobal);\n\n return block.props[node.name];\n }\n\n /* istanbul ignore next */\n debug('Identifier: Missing value symbol for %s', node.name);\n } else {\n createBlockSymbol(block, node.name, createNode(), globals, isGlobal);\n\n return block.props[node.name];\n }\n\n /* istanbul ignore next */\n break;\n }\n\n case 'MemberExpression': {\n symbol = getSymbol(node.object, globals, block);\n\n const propertySymbol = getSymbol(node.property, globals, block, {\n simpleIdentifier: !node.computed,\n });\n const propertyValue = getSymbolValue(propertySymbol);\n if (symbol && propertyValue) {\n createBlockSymbol(symbol, propertyValue, getSymbol(value, globals, block), globals, isGlobal);\n\n return symbol.props[propertyValue];\n }\n\n /* istanbul ignore next */\n debug('MemberExpression: Missing symbol: %s', node.property.name);\n break;\n }\n }\n\n return null;\n};\n\n// Creates variables from variable definitions\nconst initVariables = function (node, globals, opts) {\n // eslint-disable-next-line default-case\n switch (node.type) {\n case 'Program': {\n for (const childNode of node.body) {\n initVariables(childNode, globals, opts);\n }\n\n break;\n }\n\n case 'ExpressionStatement': {\n initVariables(node.expression, globals, opts);\n break;\n }\n\n case 'VariableDeclaration': {\n for (const declaration of node.declarations) {\n // let and const\n const symbol = createSymbol(declaration.id, globals, null, globals);\n if (opts.initWindow && node.kind === 'var' && globals.props.window) {\n // If var, also add to window\n globals.props.window.props[declaration.id.name] = symbol;\n }\n }\n\n break;\n }\n\n case 'ExportNamedDeclaration': {\n if (node.declaration) {\n initVariables(node.declaration, globals, opts);\n }\n\n break;\n }\n }\n};\n\n// Populates variable maps using AST\n// eslint-disable-next-line complexity\nconst mapVariables = function (node, globals, opt, isExport) {\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(childNode, globals, opts);\n }\n\n break;\n }\n\n case 'ExpressionStatement': {\n mapVariables(node.expression, globals, opts);\n break;\n }\n\n case 'AssignmentExpression': {\n createSymbol(node.left, globals, node.right);\n break;\n }\n\n case 'VariableDeclaration': {\n for (const declaration of node.declarations) {\n const isGlobal = opts.initWindow && node.kind === 'var' && globals.props.window;\n const symbol = createSymbol(declaration.id, globals, declaration.init, globals, isGlobal);\n if (symbol && isExport) {\n symbol.exported = true;\n }\n }\n\n break;\n }\n\n case 'FunctionDeclaration': {\n /* istanbul ignore next */\n if (node.id.type === 'Identifier') {\n createSymbol(node.id, globals, node, globals, true);\n }\n\n break;\n }\n\n case 'ExportDefaultDeclaration': {\n const symbol = createSymbol(node.declaration, globals, node.declaration);\n if (symbol) {\n symbol.exported = true;\n } else if (!node.id) {\n globals.ANONYMOUS_DEFAULT = node.declaration;\n }\n\n break;\n }\n\n case 'ExportNamedDeclaration': {\n if (node.declaration) {\n if (node.declaration.type === 'VariableDeclaration') {\n mapVariables(node.declaration, globals, opts, true);\n } else {\n const symbol = createSymbol(node.declaration, globals, node.declaration);\n /* istanbul ignore next */\n if (symbol) {\n symbol.exported = true;\n }\n }\n }\n\n for (const specifier of node.specifiers) {\n mapVariables(specifier, globals, opts);\n }\n\n break;\n }\n\n case 'ExportSpecifier': {\n const symbol = getSymbol(node.local, globals, globals);\n /* istanbul ignore next */\n if (symbol) {\n symbol.exported = true;\n }\n\n break;\n }\n\n case 'ClassDeclaration': {\n createSymbol(node.id, globals, node.body, globals);\n break;\n }\n\n default: {\n /* istanbul ignore next */\n return false;\n }\n }\n\n return true;\n};\n\nconst findNode = function (node, block, cache) {\n let blockCache = cache || [];\n /* istanbul ignore next */\n if (!block || blockCache.includes(block)) {\n return false;\n }\n\n blockCache = blockCache.slice();\n blockCache.push(block);\n\n if (\n (block.type === 'object' || block.type === 'MethodDefinition') &&\n block.value === node\n ) {\n return true;\n }\n\n const {\n props = block.body,\n } = block;\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]);\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\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\nconst findExportedNode = function (block, node, cache) {\n /* istanbul ignore next */\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 blockCache.push(propval);\n if (propval.exported && (node === propval.value || findNode(node, propval.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\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\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\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 };\n};\n\nconst isUncommentedExport = function (node, sourceCode, opt, settings) {\n // console.log({node});\n // Optimize with ancestor check for esm\n if (opt.esm) {\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 parseResult = parse(sourceCode.ast, node, opt);\n\n return isNodeExported(node, parseResult.globalVars, opt);\n};\n\nexport default {\n isUncommentedExport,\n parse,\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"exportParser.js","names":["debug","debugModule","createNode","props","getSymbolValue","symbol","type","value","getIdentifier","node","globals","scope","opts","simpleIdentifier","identifierLiteral","name","block","createSymbol","getSymbol","opt","obj","object","propertySymbol","property","computed","propertyValue","body","val","prototype","left","right","method","key","parent","prop","properties","includes","propVal","createBlockSymbol","isGlobal","window","special","id","valueSymbol","initVariables","childNode","expression","declaration","declarations","initWindow","kind","mapVariables","isExport","ancestorsOnly","init","exported","ANONYMOUS_DEFAULT","specifier","specifiers","local","findNode","cache","blockCache","slice","push","propval","Object","values","Array","isArray","some","exportTypes","Set","ignorableNestedTypes","getExportAncestor","nde","idx","ignorableIfDeep","has","canBeExportedByAncestorType","canExportChildrenType","isExportByAncestor","findExportedNode","isNodeExported","moduleExports","module","exports","initModuleExports","esm","parseRecursive","globalVars","parse","ast","isUncommentedExport","sourceCode","settings","exportNode","findJSDocComment","parseResult"],"sources":["../src/exportParser.js"],"sourcesContent":["import {\n findJSDocComment,\n} from '@es-joy/jsdoccomment';\nimport debugModule from 'debug';\n\nconst debug = debugModule('requireExportJsdoc');\n\nconst createNode = function () {\n return {\n props: {},\n };\n};\n\nconst getSymbolValue = function (symbol) {\n /* istanbul ignore next */\n if (!symbol) {\n /* istanbul ignore next */\n return null;\n }\n\n /* istanbul ignore next */\n if (symbol.type === 'literal') {\n return symbol.value.value;\n }\n\n /* istanbul ignore next */\n return null;\n};\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\nlet createSymbol = null;\n\n// eslint-disable-next-line complexity\nconst getSymbol = function (node, globals, scope, opt) {\n const opts = opt || {};\n /* istanbul ignore next */\n // eslint-disable-next-line default-case\n switch (node.type) {\n case 'Identifier': {\n return getIdentifier(node, globals, scope, opts);\n }\n\n case 'MemberExpression': {\n const obj = getSymbol(node.object, globals, scope, opts);\n const propertySymbol = getSymbol(node.property, globals, scope, {\n simpleIdentifier: !node.computed,\n });\n const propertyValue = getSymbolValue(propertySymbol);\n\n /* istanbul ignore next */\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 ${node.property.name}`);\n\n /* istanbul ignore next */\n return null;\n }\n\n case 'ClassExpression': {\n return getSymbol(node.body, globals, scope, opts);\n }\n\n case 'TSTypeAliasDeclaration':\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(node.left, globals, node.right, scope, opts);\n }\n\n case 'ClassBody': {\n const val = createNode();\n for (const method of node.body) {\n val.props[method.key.name] = createNode();\n val.props[method.key.name].type = 'object';\n val.props[method.key.name].value = method.value;\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(prop.value, globals, scope, opts);\n /* istanbul ignore next */\n if (propVal) {\n val.props[prop.key.name] = 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\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 let symbol;\n // eslint-disable-next-line default-case\n switch (node.type) {\n case 'FunctionDeclaration':\n /* istanbul ignore next */\n // Fall through\n case 'TSEnumDeclaration': case 'TSInterfaceDeclaration':\n /* istanbul ignore next */\n // Fall through\n case 'TSTypeAliasDeclaration': case 'ClassDeclaration': {\n /* istanbul ignore next */\n if (node.id && node.id.type === 'Identifier') {\n return createSymbol(node.id, globals, node, globals);\n }\n\n /* istanbul ignore next */\n break;\n }\n\n case 'Identifier': {\n if (value) {\n const valueSymbol = getSymbol(value, globals, block);\n /* istanbul ignore next */\n if (valueSymbol) {\n createBlockSymbol(block, node.name, valueSymbol, globals, isGlobal);\n\n return block.props[node.name];\n }\n\n /* istanbul ignore next */\n debug('Identifier: Missing value symbol for %s', node.name);\n } else {\n createBlockSymbol(block, node.name, createNode(), globals, isGlobal);\n\n return block.props[node.name];\n }\n\n /* istanbul ignore next */\n break;\n }\n\n case 'MemberExpression': {\n symbol = getSymbol(node.object, globals, block);\n\n const propertySymbol = getSymbol(node.property, globals, block, {\n simpleIdentifier: !node.computed,\n });\n const propertyValue = getSymbolValue(propertySymbol);\n if (symbol && propertyValue) {\n createBlockSymbol(symbol, propertyValue, getSymbol(value, globals, block), globals, isGlobal);\n\n return symbol.props[propertyValue];\n }\n\n /* istanbul ignore next */\n debug('MemberExpression: Missing symbol: %s', node.property.name);\n break;\n }\n }\n\n return null;\n};\n\n// Creates variables from variable definitions\nconst initVariables = function (node, globals, opts) {\n // eslint-disable-next-line default-case\n switch (node.type) {\n case 'Program': {\n for (const childNode of node.body) {\n initVariables(childNode, globals, opts);\n }\n\n break;\n }\n\n case 'ExpressionStatement': {\n initVariables(node.expression, globals, opts);\n break;\n }\n\n case 'VariableDeclaration': {\n for (const declaration of node.declarations) {\n // let and const\n const symbol = createSymbol(declaration.id, globals, null, globals);\n if (opts.initWindow && node.kind === 'var' && globals.props.window) {\n // If var, also add to window\n globals.props.window.props[declaration.id.name] = symbol;\n }\n }\n\n break;\n }\n\n case 'ExportNamedDeclaration': {\n if (node.declaration) {\n initVariables(node.declaration, globals, opts);\n }\n\n break;\n }\n }\n};\n\n// Populates variable maps using AST\n// eslint-disable-next-line complexity\nconst mapVariables = function (node, globals, opt, isExport) {\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(childNode, globals, opts);\n }\n\n break;\n }\n\n case 'ExpressionStatement': {\n mapVariables(node.expression, globals, opts);\n break;\n }\n\n case 'AssignmentExpression': {\n createSymbol(node.left, globals, node.right);\n break;\n }\n\n case 'VariableDeclaration': {\n for (const declaration of node.declarations) {\n const isGlobal = opts.initWindow && node.kind === 'var' && globals.props.window;\n const symbol = createSymbol(declaration.id, globals, declaration.init, globals, isGlobal);\n if (symbol && isExport) {\n symbol.exported = true;\n }\n }\n\n break;\n }\n\n case 'FunctionDeclaration': {\n /* istanbul ignore next */\n if (node.id.type === 'Identifier') {\n createSymbol(node.id, globals, node, globals, true);\n }\n\n break;\n }\n\n case 'ExportDefaultDeclaration': {\n const symbol = createSymbol(node.declaration, globals, node.declaration);\n if (symbol) {\n symbol.exported = true;\n } else if (!node.id) {\n globals.ANONYMOUS_DEFAULT = node.declaration;\n }\n\n break;\n }\n\n case 'ExportNamedDeclaration': {\n if (node.declaration) {\n if (node.declaration.type === 'VariableDeclaration') {\n mapVariables(node.declaration, globals, opts, true);\n } else {\n const symbol = createSymbol(node.declaration, globals, node.declaration);\n /* istanbul ignore next */\n if (symbol) {\n symbol.exported = true;\n }\n }\n }\n\n for (const specifier of node.specifiers) {\n mapVariables(specifier, globals, opts);\n }\n\n break;\n }\n\n case 'ExportSpecifier': {\n const symbol = getSymbol(node.local, globals, globals);\n /* istanbul ignore next */\n if (symbol) {\n symbol.exported = true;\n }\n\n break;\n }\n\n case 'ClassDeclaration': {\n createSymbol(node.id, globals, node.body, globals);\n break;\n }\n\n default: {\n /* istanbul ignore next */\n return false;\n }\n }\n\n return true;\n};\n\nconst findNode = function (node, block, cache) {\n let blockCache = cache || [];\n /* istanbul ignore next */\n if (!block || blockCache.includes(block)) {\n return false;\n }\n\n blockCache = blockCache.slice();\n blockCache.push(block);\n\n if (\n (block.type === 'object' || block.type === 'MethodDefinition') &&\n block.value === node\n ) {\n return true;\n }\n\n const {\n props = block.body,\n } = block;\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]);\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\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\nconst findExportedNode = function (block, node, cache) {\n /* istanbul ignore next */\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 blockCache.push(propval);\n if (propval.exported && (node === propval.value || findNode(node, propval.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\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\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\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 };\n};\n\nconst isUncommentedExport = function (node, sourceCode, opt, settings) {\n // console.log({node});\n // Optimize with ancestor check for esm\n if (opt.esm) {\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 parseResult = parse(sourceCode.ast, node, opt);\n\n return isNodeExported(node, parseResult.globalVars, opt);\n};\n\nexport default {\n isUncommentedExport,\n parse,\n};\n"],"mappings":"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"}
@@ -1,44 +1,32 @@
1
1
  "use strict";
2
2
 
3
3
  var _fs = require("fs");
4
-
5
4
  var _promises = _interopRequireDefault(require("fs/promises"));
6
-
7
5
  var _path = require("path");
8
-
9
6
  var _camelcase = _interopRequireDefault(require("camelcase"));
10
-
11
7
  var _openEditor = _interopRequireDefault(require("open-editor"));
12
-
13
8
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
14
-
15
9
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
16
-
17
10
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
18
-
19
11
  // Todo: Would ideally have prompts, e.g., to ask for whether type was problem/layout, etc.
12
+
20
13
  const [,, ruleName, ...options] = process.argv;
21
14
  const recommended = options.includes('--recommended');
22
-
23
15
  (async () => {
24
16
  if (!ruleName) {
25
17
  console.error('Please supply a rule name');
26
18
  return;
27
19
  }
28
-
29
20
  if (/[A-Z]/u.test(ruleName)) {
30
21
  console.error('Please ensure the rule has no capital letters');
31
22
  return;
32
23
  }
33
-
34
24
  const ruleNamesPath = './test/rules/ruleNames.json';
35
25
  const ruleNames = JSON.parse(await _promises.default.readFile(ruleNamesPath, 'utf8'));
36
-
37
26
  if (!ruleNames.includes(ruleName)) {
38
27
  ruleNames.push(ruleName);
39
28
  ruleNames.sort();
40
29
  }
41
-
42
30
  await _promises.default.writeFile(ruleNamesPath, JSON.stringify(ruleNames, null, 2) + '\n');
43
31
  console.log('ruleNames', ruleNames);
44
32
  const ruleTemplate = `import iterateJsdoc from '../iterateJsdoc';
@@ -70,11 +58,9 @@ export default iterateJsdoc(({
70
58
  `;
71
59
  const camelCasedRuleName = (0, _camelcase.default)(ruleName);
72
60
  const rulePath = `./src/rules/${camelCasedRuleName}.js`;
73
-
74
61
  if (!(0, _fs.existsSync)(rulePath)) {
75
62
  await _promises.default.writeFile(rulePath, ruleTemplate);
76
63
  }
77
-
78
64
  const ruleTestTemplate = `export default {
79
65
  invalid: [
80
66
  {
@@ -95,11 +81,9 @@ export default iterateJsdoc(({
95
81
  };
96
82
  `;
97
83
  const ruleTestPath = `./test/rules/assertions/${camelCasedRuleName}.js`;
98
-
99
84
  if (!(0, _fs.existsSync)(ruleTestPath)) {
100
85
  await _promises.default.writeFile(ruleTestPath, ruleTestTemplate);
101
86
  }
102
-
103
87
  const ruleReadmeTemplate = `### \`${ruleName}\`
104
88
 
105
89
  |||
@@ -113,11 +97,9 @@ export default iterateJsdoc(({
113
97
  <!-- assertions ${camelCasedRuleName} -->
114
98
  `;
115
99
  const ruleReadmePath = `./.README/rules/${ruleName}.md`;
116
-
117
100
  if (!(0, _fs.existsSync)(ruleReadmePath)) {
118
101
  await _promises.default.writeFile(ruleReadmePath, ruleReadmeTemplate);
119
102
  }
120
-
121
103
  const replaceInOrder = async ({
122
104
  path,
123
105
  oldRegex,
@@ -152,17 +134,15 @@ export default iterateJsdoc(({
152
134
  return oldIsCamel ? camelCasedRuleName < oldRule : ruleName < oldRule;
153
135
  });
154
136
  let item = itemIndex !== undefined && offsets[itemIndex];
155
-
156
- if (item && itemIndex === 0 && // This property would not always be sufficient but in this case it is.
137
+ if (item && itemIndex === 0 &&
138
+ // This property would not always be sufficient but in this case it is.
157
139
  oldIsCamel) {
158
140
  item.offset = 0;
159
141
  }
160
-
161
142
  if (!item) {
162
143
  item = offsets.pop();
163
144
  item.offset += item.matchedLine.length;
164
145
  }
165
-
166
146
  if (alreadyIncluded) {
167
147
  console.log(`Rule name is already present in ${checkName}.`);
168
148
  } else {
@@ -170,7 +150,6 @@ export default iterateJsdoc(({
170
150
  await _promises.default.writeFile(path, readme);
171
151
  }
172
152
  };
173
-
174
153
  await replaceInOrder({
175
154
  checkName: 'README',
176
155
  newLine: `{"gitdown": "include", "file": "./rules/${ruleName}.md"}`,
@@ -197,16 +176,18 @@ export default iterateJsdoc(({
197
176
  path: './src/index.js'
198
177
  });
199
178
  await Promise.resolve().then(() => _interopRequireWildcard(require('./generateReadme.js')));
179
+
200
180
  /*
201
181
  console.log('Paths to open for further editing\n');
202
182
  console.log(`open ${ruleReadmePath}`);
203
183
  console.log(`open ${rulePath}`);
204
184
  console.log(`open ${ruleTestPath}\n`);
205
185
  */
206
- // Set chdir as somehow still in operation from other test
207
186
 
187
+ // Set chdir as somehow still in operation from other test
208
188
  process.chdir((0, _path.resolve)(__dirname, '../../'));
209
- await (0, _openEditor.default)([// Could even add editor line column numbers like `${rulePath}:1:1`
189
+ await (0, _openEditor.default)([
190
+ // Could even add editor line column numbers like `${rulePath}:1:1`
210
191
  ruleReadmePath, ruleTestPath, rulePath]);
211
192
  })();
212
193
  //# sourceMappingURL=generateRule.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"generateRule.js","names":["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","chdir","resolve","__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 {\n existsSync,\n} from 'fs';\nimport fs from 'fs/promises';\nimport {\n resolve,\n} from 'path';\nimport camelCase from 'camelcase';\nimport open from 'open-editor';\n\n// Todo: Would ideally have prompts, e.g., to ask for whether 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 const ruleNames = JSON.parse(await fs.readFile(\n ruleNamesPath, 'utf8',\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';\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#eslint-plugin-jsdoc-rules-${ruleName}',\n },\n schema: [\n {\n additionalProperies: 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 line: '',\n message: '',\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<!-- assertions ${camelCasedRuleName} -->\n`;\n\n const ruleReadmePath = `./.README/rules/${ruleName}.md`;\n if (!existsSync(ruleReadmePath)) {\n await fs.writeFile(ruleReadmePath, ruleReadmeTemplate);\n }\n\n const replaceInOrder = async ({\n path,\n oldRegex,\n checkName,\n newLine,\n oldIsCamel,\n }) => {\n const offsets = [];\n\n let readme = await fs.readFile(path, 'utf8');\n readme.replace(\n oldRegex,\n (matchedLine, n1, offset, str, {\n oldRule,\n }) => {\n offsets.push({\n matchedLine,\n offset,\n oldRule,\n });\n },\n );\n\n offsets.sort(({\n oldRule,\n }, {\n oldRule: oldRuleB,\n }) => {\n // eslint-disable-next-line no-extra-parens\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 = 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}';`,\n oldIsCamel: true,\n oldRegex: /\\nimport (?<oldRule>[^ ]*) from '.\\/rules\\/\\1';/gu,\n path: './src/index.js',\n });\n\n await replaceInOrder({\n checkName: 'index recommended',\n newLine: `${' '.repeat(8)}'jsdoc/${ruleName}': '${recommended ? 'warn' : 'off'}',`,\n oldRegex: /\\n\\s{8}'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('./generateReadme.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":["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","chdir","resolve","__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 {\n existsSync,\n} from 'fs';\nimport fs from 'fs/promises';\nimport {\n resolve,\n} from 'path';\nimport camelCase from 'camelcase';\nimport open from 'open-editor';\n\n// Todo: Would ideally have prompts, e.g., to ask for whether 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 const ruleNames = JSON.parse(await fs.readFile(\n ruleNamesPath, 'utf8',\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';\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#eslint-plugin-jsdoc-rules-${ruleName}',\n },\n schema: [\n {\n additionalProperies: 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 line: '',\n message: '',\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<!-- assertions ${camelCasedRuleName} -->\n`;\n\n const ruleReadmePath = `./.README/rules/${ruleName}.md`;\n if (!existsSync(ruleReadmePath)) {\n await fs.writeFile(ruleReadmePath, ruleReadmeTemplate);\n }\n\n const replaceInOrder = async ({\n path,\n oldRegex,\n checkName,\n newLine,\n oldIsCamel,\n }) => {\n const offsets = [];\n\n let readme = await fs.readFile(path, 'utf8');\n readme.replace(\n oldRegex,\n (matchedLine, n1, offset, str, {\n oldRule,\n }) => {\n offsets.push({\n matchedLine,\n offset,\n oldRule,\n });\n },\n );\n\n offsets.sort(({\n oldRule,\n }, {\n oldRule: oldRuleB,\n }) => {\n // eslint-disable-next-line no-extra-parens\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 = 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}';`,\n oldIsCamel: true,\n oldRegex: /\\nimport (?<oldRule>[^ ]*) from '.\\/rules\\/\\1';/gu,\n path: './src/index.js',\n });\n\n await replaceInOrder({\n checkName: 'index recommended',\n newLine: `${' '.repeat(8)}'jsdoc/${ruleName}': '${recommended ? 'warn' : 'off'}',`,\n oldRegex: /\\n\\s{8}'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('./generateReadme.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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"}