{"version":3,"file":"tsNoUnnecessaryTemplateExpression.cjs","names":["iterateJsdoc","parseType","traverse","rewireByParsedType"],"sources":["../../src/rules/tsNoUnnecessaryTemplateExpression.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc.js';\nimport {\n  rewireByParsedType,\n} from '../jsdocUtils.js';\nimport {\n  parse as parseType,\n  traverse,\n} from '@es-joy/jsdoccomment';\n\nexport default iterateJsdoc(({\n  context,\n  indent,\n  jsdoc,\n  settings,\n  utils,\n}) => {\n  if (settings.mode !== 'typescript') {\n    return;\n  }\n\n  const {\n    enableFixer = true,\n  } = context.options[0] ?? {};\n\n  /**\n   * @param {import('@es-joy/jsdoccomment').JsdocTagWithInline} tag\n   */\n  const checkType = (tag) => {\n    const potentialType = tag.type;\n    /** @type {import('jsdoc-type-pratt-parser').RootResult} */\n    let parsedType;\n    try {\n      parsedType = parseType(\n        /** @type {string} */ (potentialType), 'typescript',\n      );\n    } catch {\n      return;\n    }\n\n    traverse(parsedType, (nde, parentNode, property, index) => {\n      switch (nde.type) {\n        case 'JsdocTypeTemplateLiteral': {\n          const stringInterpolationIndex = nde.interpolations.findIndex((interpolation) => {\n            return interpolation.type === 'JsdocTypeStringValue';\n          });\n          if (stringInterpolationIndex > -1) {\n            utils.reportJSDoc(\n              'Found an unnecessary string literal within a template.',\n              tag,\n              enableFixer ? () => {\n                nde.literals.splice(\n                  stringInterpolationIndex,\n                  2,\n                  nde.literals[stringInterpolationIndex] +\n                    /** @type {import('jsdoc-type-pratt-parser').StringValueResult} */\n                    (nde.interpolations[stringInterpolationIndex]).value +\n                    nde.literals[stringInterpolationIndex + 1],\n                );\n\n                nde.interpolations.splice(\n                  stringInterpolationIndex, 1,\n                );\n\n                rewireByParsedType(jsdoc, tag, parsedType, indent);\n              } : null,\n            );\n          } else if (nde.literals.length === 2 && nde.literals[0] === '' &&\n            nde.literals[1] === ''\n          ) {\n            utils.reportJSDoc(\n              'Found a lone template expression within a template.',\n              tag,\n              enableFixer ? () => {\n                const interpolation = nde.interpolations[0];\n\n                if (parentNode && property) {\n                  if (typeof index === 'number') {\n                    // @ts-expect-error Safe\n                    parentNode[property][index] = interpolation;\n                  } else {\n                    // @ts-expect-error Safe\n                    parentNode[property] = interpolation;\n                  }\n                } else {\n                  parsedType = interpolation;\n                }\n\n                rewireByParsedType(jsdoc, tag, parsedType, indent);\n              } : null,\n            );\n          }\n        }\n      }\n    });\n  };\n\n  const tags = utils.filterTags(({\n    tag,\n  }) => {\n    return Boolean(tag !== 'import' && utils.tagMightHaveTypePosition(tag));\n  });\n\n  for (const tag of tags) {\n    if (tag.type) {\n      checkType(tag);\n    }\n  }\n}, {\n  iterateAllJsdocs: true,\n  meta: {\n    docs: {\n      description: 'Catches unnecessary template expressions such as string expressions within a template literal.',\n      url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/ts-no-unnecessary-template-expression.md#repos-sticky-header',\n    },\n    fixable: 'code',\n    schema: [\n      {\n        additionalProperties: false,\n        properties: {\n          enableFixer: {\n            description: 'Whether to enable the fixer. Defaults to `true`.',\n            type: 'boolean',\n          },\n        },\n        type: 'object',\n      },\n    ],\n    type: 'suggestion',\n  },\n});\n"],"mappings":"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","ignoreList":[]}