{"version":3,"file":"matchName.cjs","names":["_iterateJsdoc","_interopRequireDefault","require","e","__esModule","default","_default","exports","iterateJsdoc","context","info","lastIndex","jsdoc","report","utils","match","options","allowName","disallowName","replacement","tags","allowNameRegex","getRegexFromString","disallowNameRegex","applicableTags","includes","getPresentTags","reported","tag","tagName","name","replace","allowed","test","disallowed","hasRegex","fixer","src","source","tokens","message","reportJSDoc","undefined","matchContext","meta","docs","description","url","fixable","schema","additionalProperties","properties","items","type","comment","required","module"],"sources":["../../src/rules/matchName.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc.js';\n\nexport default iterateJsdoc(({\n  context,\n  info: {\n    lastIndex,\n  },\n  jsdoc,\n  report,\n  utils,\n}) => {\n  const {\n    match,\n  } = context.options[0] || {};\n  if (!match) {\n    report('Rule `no-restricted-syntax` is missing a `match` option.');\n\n    return;\n  }\n\n  const {\n    allowName,\n    disallowName,\n    replacement,\n    tags = [\n      '*',\n    ],\n  } = match[/** @type {import('../iterateJsdoc.js').Integer} */ (lastIndex)];\n\n  const allowNameRegex = allowName && utils.getRegexFromString(allowName);\n  const disallowNameRegex = disallowName && utils.getRegexFromString(disallowName);\n\n  let applicableTags = jsdoc.tags;\n  if (!tags.includes('*')) {\n    applicableTags = utils.getPresentTags(tags);\n  }\n\n  let reported = false;\n  for (const tag of applicableTags) {\n    const tagName = tag.name.replace(/^\\[/v, '').replace(/(=.*)?\\]$/v, '');\n    const allowed = !allowNameRegex || allowNameRegex.test(tagName);\n    const disallowed = disallowNameRegex && disallowNameRegex.test(tagName);\n    const hasRegex = allowNameRegex || disallowNameRegex;\n    if (hasRegex && allowed && !disallowed) {\n      continue;\n    }\n\n    if (!hasRegex && reported) {\n      continue;\n    }\n\n    const fixer = () => {\n      for (const src of tag.source) {\n        if (src.tokens.name) {\n          src.tokens.name = src.tokens.name.replace(\n            disallowNameRegex, replacement,\n          );\n          break;\n        }\n      }\n    };\n\n    let {\n      message,\n    } = match[/** @type {import('../iterateJsdoc.js').Integer} */ (lastIndex)];\n    if (!message) {\n      if (hasRegex) {\n        message = disallowed ?\n          `Only allowing names not matching \\`${disallowNameRegex}\\` but found \"${tagName}\".` :\n          `Only allowing names matching \\`${allowNameRegex}\\` but found \"${tagName}\".`;\n      } else {\n        message = `Prohibited context for \"${tagName}\".`;\n      }\n    }\n\n    utils.reportJSDoc(\n      message,\n      hasRegex ? tag : null,\n\n      // We could match up\n      disallowNameRegex && replacement !== undefined ?\n        fixer :\n        null,\n      false,\n      {\n        // Could also supply `context`, `comment`, `tags`\n        allowName,\n        disallowName,\n        name: tagName,\n      },\n    );\n    if (!hasRegex) {\n      reported = true;\n    }\n  }\n}, {\n  matchContext: true,\n  meta: {\n    docs: {\n      description: 'Reports the name portion of a JSDoc tag if matching or not matching a given regular expression.',\n      url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/match-name.md#repos-sticky-header',\n    },\n    fixable: 'code',\n    schema: [\n      {\n        additionalProperties: false,\n        properties: {\n          match: {\n            description: `\\`match\\` is a required option containing an array of objects which determine\nthe conditions whereby a name is reported as being problematic.\n\nThese objects can have any combination of the following groups of optional\nproperties, all of which act to confine one another.\n\nNote that \\`comment\\`, even if targeting a specific tag, is used to match the\nwhole block. So if a \\`comment\\` finds its specific tag, it may still apply\nfixes found by the likes of \\`disallowName\\` even when a different tag has the\ndisallowed name. An alternative is to ensure that \\`comment\\` finds the specific\ntag of the desired tag and/or name and no \\`disallowName\\` (or \\`allowName\\`) is\nsupplied. In such a case, only one error will be reported, but no fixer will\nbe applied, however.`,\n            items: {\n              additionalProperties: false,\n              properties: {\n                allowName: {\n                  description: `Indicates which names are allowed for the given tag (or \\`*\\`).\nAccepts a string regular expression (optionally wrapped between two\n\\`/\\` delimiters followed by optional flags) used to match the name.`,\n                  type: 'string',\n                },\n                comment: {\n                  description: 'As with `context` but AST for the JSDoc block comment and types.',\n                  type: 'string',\n                },\n                context: {\n                  description: `AST to confine the allowing or disallowing to JSDoc blocks\nassociated with a particular context. See the\n[\"AST and Selectors\"](../#advanced-ast-and-selectors)\nsection of our Advanced docs for more on the expected format.`,\n                  type: 'string',\n                },\n                disallowName: {\n                  description: 'As with `allowName` but indicates names that are not allowed.',\n                  type: 'string',\n                },\n                message: {\n                  description: 'An optional custom message to use when there is a match.',\n                  type: 'string',\n                },\n                replacement: {\n                  description: `If \\`disallowName\\` is supplied and this value is present, it\nwill replace the matched \\`disallowName\\` text.`,\n                  type: 'string',\n                },\n                tags: {\n                  description: `This array should include tag names or \\`*\\` to indicate the\n  match will apply for all tags (except as confined by any context\n  properties). If \\`*\\` is not used, then these rules will only apply to\n  the specified tags. If \\`tags\\` is omitted, then \\`*\\` is assumed.`,\n                  items: {\n                    type: 'string',\n                  },\n                  type: 'array',\n                },\n              },\n              type: 'object',\n            },\n            type: 'array',\n          },\n        },\n        required: [\n          'match',\n        ],\n        type: 'object',\n      },\n    ],\n    type: 'suggestion',\n  },\n});\n"],"mappings":"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","ignoreList":[]}