{"version":3,"file":"convertToJsdocComments.cjs","names":["_iterateJsdoc","require","_jsdocUtils","_jsdoccomment","_default","exports","default","create","context","sourceCode","getSourceCode","settings","getSettings","allowedPrefixes","contexts","contextsAfter","contextsBeforeAndAfter","enableFixer","enforceJsdocLineStyle","lineOrBlockStyle","options","reportingNonJsdoc","report","messageId","comment","node","fixer","loc","end","column","line","start","fix","getFixer","addComment","ctxts","lines","minLines","maxLines","baseNode","getReducedASTNode","decorator","getDecorator","indent","getIndent","text","getText","inlineCommentBlock","find","contxt","ctxt","type","reportings","checkNonJsdoc","_info","_handler","getNonJsdocComment","some","prefix","value","trimStart","startsWith","commentToAdd","insertion","trim","trimEnd","repeat","replaceText","checkNonJsdocAfter","getFollowingComment","slice","remove","insertTextBefore","parent","getContextObject","enforcedContexts","meta","docs","description","url","fixable","messages","blockCommentsJsdocStyle","lineCommentsJsdocStyle","schema","additionalProperties","properties","items","anyOf","enum","module"],"sources":["../../src/rules/convertToJsdocComments.js"],"sourcesContent":["import {\n  getSettings,\n} from '../iterateJsdoc.js';\nimport {\n  enforcedContexts,\n  getContextObject,\n  getIndent,\n} from '../jsdocUtils.js';\nimport {\n  getDecorator,\n  getFollowingComment,\n  getNonJsdocComment,\n  getReducedASTNode,\n} from '@es-joy/jsdoccomment';\n\n/** @type {import('eslint').Rule.RuleModule} */\nexport default {\n  create (context) {\n    /**\n     * @typedef {import('eslint').AST.Token | import('estree').Comment | {\n     *   type: import('eslint').AST.TokenType|\"Line\"|\"Block\"|\"Shebang\",\n     *   range: [number, number],\n     *   value: string\n     * }} Token\n     */\n\n    /**\n     * @callback AddComment\n     * @param {boolean|undefined} inlineCommentBlock\n     * @param {Token} comment\n     * @param {string} indent\n     * @param {number} lines\n     * @param {import('eslint').Rule.RuleFixer} fixer\n     */\n\n    /* c8 ignore next -- Fallback to deprecated method */\n    const {\n      // @ts-expect-error ESLint < 10\n      sourceCode = context.getSourceCode(),\n    } = context;\n    const settings = getSettings(context);\n    if (!settings) {\n      return {};\n    }\n\n    const {\n      allowedPrefixes = [\n        '@ts-', 'istanbul ', 'c8 ', 'v8 ', 'eslint', 'prettier-',\n      ],\n      contexts = settings.contexts || [],\n      contextsAfter = /** @type {string[]} */ ([]),\n      contextsBeforeAndAfter = [\n        'VariableDeclarator', 'TSPropertySignature', 'PropertyDefinition',\n      ],\n      enableFixer = true,\n      enforceJsdocLineStyle = 'multi',\n      lineOrBlockStyle = 'both',\n    } = context.options[0] ?? {};\n\n    let reportingNonJsdoc = false;\n\n    /**\n     * @param {string} messageId\n     * @param {import('estree').Comment|Token} comment\n     * @param {import('eslint').Rule.Node} node\n     * @param {import('eslint').Rule.ReportFixer} fixer\n     */\n    const report = (messageId, comment, node, fixer) => {\n      const loc = {\n        end: {\n          column: 0,\n          /* c8 ignore next 2 -- Guard */\n          // @ts-expect-error Ok\n          line: (comment.loc?.start?.line ?? 1),\n        },\n        start: {\n          column: 0,\n          /* c8 ignore next 2 -- Guard */\n          // @ts-expect-error Ok\n          line: (comment.loc?.start?.line ?? 1),\n        },\n      };\n\n      context.report({\n        fix: enableFixer ? fixer : null,\n        loc,\n        messageId,\n        node,\n      });\n    };\n\n    /**\n     * @param {import('eslint').Rule.Node} node\n     * @param {import('eslint').AST.Token | import('estree').Comment | {\n     *   type: import('eslint').AST.TokenType|\"Line\"|\"Block\"|\"Shebang\",\n     *   range: [number, number],\n     *   value: string\n     * }} comment\n     * @param {AddComment} addComment\n     * @param {import('../iterateJsdoc.js').Context[]} ctxts\n     */\n    const getFixer = (node, comment, addComment, ctxts) => {\n      return /** @type {import('eslint').Rule.ReportFixer} */ (fixer) => {\n        // Default to one line break if the `minLines`/`maxLines` settings allow\n        const lines = settings.minLines === 0 && settings.maxLines >= 1 ? 1 : settings.minLines;\n        let baseNode =\n          /**\n           * @type {import('@typescript-eslint/types').TSESTree.Node|import('eslint').Rule.Node}\n           */ (\n            getReducedASTNode(node, sourceCode)\n          );\n\n        const decorator = getDecorator(\n          /** @type {import('eslint').Rule.Node} */\n          (baseNode),\n        );\n        if (decorator) {\n          baseNode = /** @type {import('@typescript-eslint/types').TSESTree.Decorator} */ (\n            decorator\n          );\n        }\n\n        const indent = getIndent({\n          text: sourceCode.getText(\n            /** @type {import('eslint').Rule.Node} */ (baseNode),\n            /** @type {import('eslint').AST.SourceLocation} */\n            (\n              /** @type {import('eslint').Rule.Node} */ (baseNode).loc\n            ).start.column,\n          ),\n        });\n\n        const {\n          inlineCommentBlock,\n        } =\n          /**\n           * @type {{\n           *     context: string,\n           *     inlineCommentBlock: boolean,\n           *     minLineCount: import('../iterateJsdoc.js').Integer\n           *   }[]}\n           */ (ctxts).find((contxt) => {\n            if (typeof contxt === 'string') {\n              return false;\n            }\n\n            const {\n              context: ctxt,\n            } = contxt;\n            return ctxt === node.type;\n          }) || {};\n\n        return addComment(inlineCommentBlock, comment, indent, lines, fixer);\n      };\n    };\n\n    /**\n     * @param {import('eslint').AST.Token | import('estree').Comment | {\n     *   type: import('eslint').AST.TokenType|\"Line\"|\"Block\"|\"Shebang\",\n     *   range: [number, number],\n     *   value: string\n     * }} comment\n     * @param {import('eslint').Rule.Node} node\n     * @param {AddComment} addComment\n     * @param {import('../iterateJsdoc.js').Context[]} ctxts\n     */\n    const reportings = (comment, node, addComment, ctxts) => {\n      const fixer = getFixer(node, comment, addComment, ctxts);\n\n      if (comment.type === 'Block') {\n        if (lineOrBlockStyle === 'line') {\n          return;\n        }\n\n        report('blockCommentsJsdocStyle', comment, node, fixer);\n        return;\n      }\n\n      if (comment.type === 'Line') {\n        if (lineOrBlockStyle === 'block') {\n          return;\n        }\n\n        report('lineCommentsJsdocStyle', comment, node, fixer);\n      }\n    };\n\n    /**\n     * @type {import('../iterateJsdoc.js').CheckJsdoc}\n     */\n    const checkNonJsdoc = (_info, _handler, node) => {\n      const comment = getNonJsdocComment(sourceCode, node, settings);\n\n      if (\n        !comment ||\n        /** @type {string[]} */\n        (allowedPrefixes).some((prefix) => {\n          return comment.value.trimStart().startsWith(prefix);\n        })\n      ) {\n        return;\n      }\n\n      reportingNonJsdoc = true;\n\n      /** @type {AddComment} */\n      const addComment = (inlineCommentBlock, commentToAdd, indent, lines, fixer) => {\n        const insertion = (\n          inlineCommentBlock || enforceJsdocLineStyle === 'single' ?\n            `/** ${commentToAdd.value.trim()} ` :\n            `/**\\n${indent}*${commentToAdd.value.trimEnd()}\\n${indent}`\n        ) +\n            `*/${'\\n'.repeat((lines || 1) - 1)}`;\n\n        return fixer.replaceText(\n          /** @type {import('eslint').AST.Token} */\n          (commentToAdd),\n          insertion,\n        );\n      };\n\n      reportings(comment, node, addComment, contexts);\n    };\n\n    /**\n     * @param {import('eslint').Rule.Node} node\n     * @param {import('../iterateJsdoc.js').Context[]} ctxts\n     */\n    const checkNonJsdocAfter = (node, ctxts) => {\n      const comment = getFollowingComment(sourceCode, node);\n\n      if (\n        !comment ||\n        comment.value.startsWith('*') ||\n        /** @type {string[]} */\n        (allowedPrefixes).some((prefix) => {\n          return comment.value.trimStart().startsWith(prefix);\n        })\n      ) {\n        return;\n      }\n\n      /** @type {AddComment} */\n      const addComment = (inlineCommentBlock, commentToAdd, indent, lines, fixer) => {\n        const insertion = (\n          inlineCommentBlock || enforceJsdocLineStyle === 'single' ?\n            `/** ${commentToAdd.value.trim()} ` :\n            `/**\\n${indent}*${commentToAdd.value.trimEnd()}\\n${indent}`\n        ) +\n            `*/${'\\n'.repeat((lines || 1) - 1)}${lines ? `\\n${indent.slice(1)}` : ' '}`;\n\n        return [\n          fixer.remove(\n          /** @type {import('eslint').AST.Token} */\n            (commentToAdd),\n          ), fixer.insertTextBefore(\n            node.type === 'VariableDeclarator' ? node.parent : node,\n            insertion,\n          ),\n        ];\n      };\n\n      reportings(comment, node, addComment, ctxts);\n    };\n\n    // Todo: add contexts to check after (and handle if want both before and after)\n    return {\n      ...getContextObject(\n        enforcedContexts(context, true, settings),\n        checkNonJsdoc,\n      ),\n      ...getContextObject(\n        contextsAfter,\n        (_info, _handler, node) => {\n          checkNonJsdocAfter(node, contextsAfter);\n        },\n      ),\n      ...getContextObject(\n        contextsBeforeAndAfter,\n        (_info, _handler, node) => {\n          checkNonJsdoc({}, null, node);\n          if (!reportingNonJsdoc) {\n            checkNonJsdocAfter(node, contextsBeforeAndAfter);\n          }\n        },\n      ),\n    };\n  },\n  meta: {\n    docs: {\n      description: 'Converts non-JSDoc comments preceding or following nodes into JSDoc ones',\n      url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/convert-to-jsdoc-comments.md#repos-sticky-header',\n    },\n\n    fixable: 'code',\n\n    messages: {\n      blockCommentsJsdocStyle: 'Block comments should be JSDoc-style.',\n      lineCommentsJsdocStyle: 'Line comments should be JSDoc-style.',\n    },\n    schema: [\n      {\n        additionalProperties: false,\n        properties: {\n          allowedPrefixes: {\n            description: `An array of prefixes to allow at the beginning of a comment.\n\nDefaults to \\`['@ts-', 'istanbul ', 'c8 ', 'v8 ', 'eslint', 'prettier-']\\`.\n\nSupplying your own value overrides the defaults.`,\n            items: {\n              type: 'string',\n            },\n            type: 'array',\n          },\n          contexts: {\n            description: `The contexts array which will be checked for preceding content.\n\nCan either be strings or an object with a \\`context\\` string and an optional, default \\`false\\` \\`inlineCommentBlock\\` boolean.\n\nDefaults to \\`ArrowFunctionExpression\\`, \\`FunctionDeclaration\\`,\n\\`FunctionExpression\\`, \\`TSDeclareFunction\\`.`,\n            items: {\n              anyOf: [\n                {\n                  type: 'string',\n                },\n                {\n                  additionalProperties: false,\n                  properties: {\n                    context: {\n                      type: 'string',\n                    },\n                    inlineCommentBlock: {\n                      type: 'boolean',\n                    },\n                  },\n                  type: 'object',\n                },\n              ],\n            },\n            type: 'array',\n          },\n          contextsAfter: {\n            description: `The contexts array which will be checked for content on the same line after.\n\nCan either be strings or an object with a \\`context\\` string and an optional, default \\`false\\` \\`inlineCommentBlock\\` boolean.\n\nDefaults to an empty array.`,\n            items: {\n              anyOf: [\n                {\n                  type: 'string',\n                },\n                {\n                  additionalProperties: false,\n                  properties: {\n                    context: {\n                      type: 'string',\n                    },\n                    inlineCommentBlock: {\n                      type: 'boolean',\n                    },\n                  },\n                  type: 'object',\n                },\n              ],\n            },\n            type: 'array',\n          },\n          contextsBeforeAndAfter: {\n            description: `The contexts array which will be checked for content before and on the same\nline after.\n\nCan either be strings or an object with a \\`context\\` string and an optional, default \\`false\\` \\`inlineCommentBlock\\` boolean.\n\nDefaults to \\`VariableDeclarator\\`, \\`TSPropertySignature\\`, \\`PropertyDefinition\\`.`,\n            items: {\n              anyOf: [\n                {\n                  type: 'string',\n                },\n                {\n                  additionalProperties: false,\n                  properties: {\n                    context: {\n                      type: 'string',\n                    },\n                    inlineCommentBlock: {\n                      type: 'boolean',\n                    },\n                  },\n                  type: 'object',\n                },\n              ],\n            },\n            type: 'array',\n          },\n          enableFixer: {\n            description: 'Set to `false` to disable fixing.',\n            type: 'boolean',\n          },\n          enforceJsdocLineStyle: {\n            description: `What policy to enforce on the conversion of non-JSDoc comments without\nline breaks. (Non-JSDoc (mulitline) comments with line breaks will always\nbe converted to \\`multi\\` style JSDoc comments.)\n\n- \\`multi\\` - Convert to multi-line style\n\\`\\`\\`js\n/**\n * Some text\n */\n\\`\\`\\`\n- \\`single\\` - Convert to single-line style\n\\`\\`\\`js\n/** Some text */\n\\`\\`\\`\n\nDefaults to \\`multi\\`.`,\n            enum: [\n              'multi', 'single',\n            ],\n            type: 'string',\n          },\n          lineOrBlockStyle: {\n            description: `What style of comments to which to apply JSDoc conversion.\n\n- \\`block\\` - Applies to block-style comments (\\`/* ... */\\`)\n- \\`line\\` - Applies to line-style comments (\\`// ...\\`)\n- \\`both\\` - Applies to both block and line-style comments\n\nDefaults to \\`both\\`.`,\n            enum: [\n              'block', 'line', 'both',\n            ],\n            type: 'string',\n          },\n        },\n        type: 'object',\n      },\n    ],\n    type: 'suggestion',\n  },\n};\n"],"mappings":"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","ignoreList":[]}