{"version":3,"file":"checkExamples.cjs","names":["_iterateJsdoc","_interopRequireDefault","require","_eslint","_interopRequireWildcard","_semver","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","CLIEngine","eslint","zeroBasedLineIndexAdjust","likelyNestedJSDocIndentSpace","preTagSpaceLength","firstLinePrefixLength","hasCaptionRegex","escapeStringRegexp","str","replaceAll","countChars","ch","match","RegExp","length","defaultMdRules","defaultExpressionRules","quotes","semi","strict","getLinesCols","text","matchLines","colDelta","slice","lastIndexOf","_default","exports","iterateJsdoc","report","utils","context","globalState","semver","gte","ESLint","version","column","line","Map","matchingFileNameMap","options","exampleCodeRegex","rejectExampleCodeRegex","checkDefaults","checkParams","checkProperties","noDefaultExampleRules","checkEslintrc","matchingFileName","matchingFileNameDefaults","matchingFileNameParams","matchingFileNameProperties","paddedIndent","baseConfig","configFile","allowInlineConfig","reportUnusedDisableDirectives","captionRequired","rulePaths","mdRules","undefined","expressionRules","getRegexFromString","checkSource","filename","defaultFileName","rules","lines","cols","skipInit","source","targetTagName","sources","tag","push","nonJSPrefacingCols","nonJSPrefacingLines","string","checkRules","cliConfig","useEslintrc","cliConfigStr","JSON","stringify","src","fileNameMapKey","file","cliFile","cli","config","getConfigForFile","results","messages","executeOnText","number","codeStartLine","codeStartCol","message","severity","ruleId","startLine","startCol","targetSource","getFilenameInfo","ext","jsFileName","getFilename","includes","replace","filenameInfo","forEachPreferredTag","description","trim","getTagDescription","tagName","getPreferredTagName","hasTag","matchingFilenameInfo","test","startingIndex","lastStringCount","exampleCode","lastIndex","exec","index","n0","n1","preMatch","preMatchLines","nonJSPreface","nonJSPrefaceLineCount","idx","indexOf","charsInLastLine","global","iterateAllJsdocs","meta","docs","url","schema","additionalProperties","properties","type","module"],"sources":["../../src/rules/checkExamples.js"],"sourcesContent":["// Todo: When replace `CLIEngine` with `ESLint` when feature set complete per https://github.com/eslint/eslint/issues/14745\n// https://github.com/eslint/eslint/blob/master/docs/user-guide/migrating-to-7.0.0.md#-the-cliengine-class-has-been-deprecated\nimport iterateJsdoc from '../iterateJsdoc.js';\nimport eslint, {\n  ESLint,\n} from 'eslint';\nimport semver from 'semver';\n\nconst {\n  // @ts-expect-error Older ESLint\n  CLIEngine,\n} = eslint;\n\nconst zeroBasedLineIndexAdjust = -1;\nconst likelyNestedJSDocIndentSpace = 1;\nconst preTagSpaceLength = 1;\n\n// If a space is present, we should ignore it\nconst firstLinePrefixLength = preTagSpaceLength;\n\nconst hasCaptionRegex = /^\\s*<caption>([\\s\\S]*?)<\\/caption>/u;\n\n/**\n * @param {string} str\n * @returns {string}\n */\nconst escapeStringRegexp = (str) => {\n  return str.replaceAll(/[.*+?^${}()|[\\]\\\\]/gu, '\\\\$&');\n};\n\n/**\n * @param {string} str\n * @param {string} ch\n * @returns {import('../iterateJsdoc.js').Integer}\n */\nconst countChars = (str, ch) => {\n  return (str.match(new RegExp(escapeStringRegexp(ch), 'gu')) || []).length;\n};\n\n/** @type {import('eslint').Linter.RulesRecord} */\nconst defaultMdRules = {\n  // \"always\" newline rule at end unlikely in sample code\n  'eol-last': 0,\n\n  // Wouldn't generally expect example paths to resolve relative to JS file\n  'import/no-unresolved': 0,\n\n  // Snippets likely too short to always include import/export info\n  'import/unambiguous': 0,\n\n  'jsdoc/require-file-overview': 0,\n\n  // The end of a multiline comment would end the comment the example is in.\n  'jsdoc/require-jsdoc': 0,\n\n  // Unlikely to have inadvertent debugging within examples\n  'no-console': 0,\n\n  // Often wish to start `@example` code after newline; also may use\n  //   empty lines for spacing\n  'no-multiple-empty-lines': 0,\n\n  // Many variables in examples will be `undefined`\n  'no-undef': 0,\n\n  // Common to define variables for clarity without always using them\n  'no-unused-vars': 0,\n\n  // See import/no-unresolved\n  'node/no-missing-import': 0,\n  'node/no-missing-require': 0,\n\n  // Can generally look nicer to pad a little even if code imposes more stringency\n  'padded-blocks': 0,\n};\n\n/** @type {import('eslint').Linter.RulesRecord} */\nconst defaultExpressionRules = {\n  ...defaultMdRules,\n  'chai-friendly/no-unused-expressions': 'off',\n  'no-empty-function': 'off',\n  'no-new': 'off',\n  'no-unused-expressions': 'off',\n  quotes: [\n    'error', 'double',\n  ],\n  semi: [\n    'error', 'never',\n  ],\n  strict: 'off',\n};\n\n/**\n * @param {string} text\n * @returns {[\n *   import('../iterateJsdoc.js').Integer,\n *   import('../iterateJsdoc.js').Integer\n * ]}\n */\nconst getLinesCols = (text) => {\n  const matchLines = countChars(text, '\\n');\n\n  const colDelta = matchLines ?\n    text.slice(text.lastIndexOf('\\n') + 1).length :\n    text.length;\n\n  return [\n    matchLines, colDelta,\n  ];\n};\n\nexport default iterateJsdoc(({\n  report,\n  utils,\n  context,\n  globalState,\n}) => {\n  if (semver.gte(ESLint.version, '8.0.0')) {\n    report(\n      'This rule does not work for ESLint 8+; you should disable this rule and use' +\n        'the processor mentioned in the docs.',\n      null,\n      {\n        column: 1,\n        line: 1,\n      },\n    );\n\n    return;\n  }\n\n  if (!globalState.has('checkExamples-matchingFileName')) {\n    globalState.set('checkExamples-matchingFileName', new Map());\n  }\n\n  const matchingFileNameMap = /** @type {Map<string, string>} */ (\n    globalState.get('checkExamples-matchingFileName')\n  );\n\n  const options = context.options[0] || {};\n  let {\n    exampleCodeRegex = null,\n    rejectExampleCodeRegex = null,\n  } = options;\n  const {\n    checkDefaults = false,\n    checkParams = false,\n    checkProperties = false,\n    noDefaultExampleRules = false,\n    checkEslintrc = true,\n    matchingFileName = null,\n    matchingFileNameDefaults = null,\n    matchingFileNameParams = null,\n    matchingFileNameProperties = null,\n    paddedIndent = 0,\n    baseConfig = {},\n    configFile,\n    allowInlineConfig = true,\n    reportUnusedDisableDirectives = true,\n    captionRequired = false,\n  } = options;\n\n  // Make this configurable?\n  /**\n   * @type {never[]}\n   */\n  const rulePaths = [];\n\n  const mdRules = noDefaultExampleRules ? undefined : defaultMdRules;\n\n  const expressionRules = noDefaultExampleRules ? undefined : defaultExpressionRules;\n\n  if (exampleCodeRegex) {\n    exampleCodeRegex = utils.getRegexFromString(exampleCodeRegex);\n  }\n\n  if (rejectExampleCodeRegex) {\n    rejectExampleCodeRegex = utils.getRegexFromString(rejectExampleCodeRegex);\n  }\n\n  /**\n   * @param {{\n   *   filename: string,\n   *   defaultFileName: string|undefined,\n   *   source: string,\n   *   targetTagName: string,\n   *   rules?: import('eslint').Linter.RulesRecord|undefined,\n   *   lines?: import('../iterateJsdoc.js').Integer,\n   *   cols?: import('../iterateJsdoc.js').Integer,\n   *   skipInit?: boolean,\n   *   sources?: {\n   *     nonJSPrefacingCols: import('../iterateJsdoc.js').Integer,\n   *     nonJSPrefacingLines: import('../iterateJsdoc.js').Integer,\n   *     string: string,\n   *   }[],\n   *   tag?: import('comment-parser').Spec & {\n   *     line?: import('../iterateJsdoc.js').Integer,\n   *   }|{\n   *     line: import('../iterateJsdoc.js').Integer,\n   *   }\n   * }} cfg\n   */\n  const checkSource = ({\n    filename,\n    defaultFileName,\n    rules = expressionRules,\n    lines = 0,\n    cols = 0,\n    skipInit,\n    source,\n    targetTagName,\n    sources = [],\n    tag = {\n      line: 0,\n    },\n  }) => {\n    if (!skipInit) {\n      sources.push({\n        nonJSPrefacingCols: cols,\n        nonJSPrefacingLines: lines,\n        string: source,\n      });\n    }\n\n    // Todo: Make fixable\n\n    /**\n     * @param {{\n     *   nonJSPrefacingCols: import('../iterateJsdoc.js').Integer,\n     *   nonJSPrefacingLines: import('../iterateJsdoc.js').Integer,\n     *   string: string\n     * }} cfg\n     */\n    const checkRules = function ({\n      nonJSPrefacingCols,\n      nonJSPrefacingLines,\n      string,\n    }) {\n      const cliConfig = {\n        allowInlineConfig,\n        baseConfig,\n        configFile,\n        reportUnusedDisableDirectives,\n        rulePaths,\n        rules,\n        useEslintrc: checkEslintrc,\n      };\n      const cliConfigStr = JSON.stringify(cliConfig);\n\n      const src = paddedIndent ?\n        string.replaceAll(new RegExp(`(^|\\n) {${paddedIndent}}(?!$)`, 'gu'), '\\n') :\n        string;\n\n      // Programmatic ESLint API: https://eslint.org/docs/developer-guide/nodejs-api\n      const fileNameMapKey = filename ?\n        'a' + cliConfigStr + filename :\n        'b' + cliConfigStr + defaultFileName;\n      const file = filename || defaultFileName;\n      let cliFile;\n      if (matchingFileNameMap.has(fileNameMapKey)) {\n        cliFile = matchingFileNameMap.get(fileNameMapKey);\n      } else {\n        const cli = new CLIEngine(cliConfig);\n        let config;\n        if (filename || checkEslintrc) {\n          config = cli.getConfigForFile(file);\n        }\n\n        // We need a new instance to ensure that the rules that may only\n        //  be available to `file` (if it has its own `.eslintrc`),\n        //  will be defined.\n        cliFile = new CLIEngine({\n          allowInlineConfig,\n          baseConfig: {\n            ...baseConfig,\n            ...config,\n          },\n          configFile,\n          reportUnusedDisableDirectives,\n          rulePaths,\n          rules,\n          useEslintrc: false,\n        });\n        matchingFileNameMap.set(fileNameMapKey, cliFile);\n      }\n\n      const {\n        results: [\n          {\n            messages,\n          },\n        ],\n      } = cliFile.executeOnText(src);\n\n      if (!('line' in tag)) {\n        tag.line = tag.source[0].number;\n      }\n\n      // NOTE: `tag.line` can be 0 if of form `/** @tag ... */`\n      const codeStartLine = /**\n                             * @type {import('comment-parser').Spec & {\n                             *     line: import('../iterateJsdoc.js').Integer,\n                             * }}\n                             */ (tag).line + nonJSPrefacingLines;\n      const codeStartCol = likelyNestedJSDocIndentSpace;\n\n      for (const {\n        message,\n        line,\n        column,\n        severity,\n        ruleId,\n      } of messages) {\n        const startLine = codeStartLine + line + zeroBasedLineIndexAdjust;\n        const startCol = codeStartCol + (\n\n          // This might not work for line 0, but line 0 is unlikely for examples\n          line <= 1 ? nonJSPrefacingCols + firstLinePrefixLength : preTagSpaceLength\n        ) + column;\n\n        report(\n          '@' + targetTagName + ' ' + (severity === 2 ? 'error' : 'warning') +\n            (ruleId ? ' (' + ruleId + ')' : '') + ': ' +\n            message,\n          null,\n          {\n            column: startCol,\n            line: startLine,\n          },\n        );\n      }\n    };\n\n    for (const targetSource of sources) {\n      checkRules(targetSource);\n    }\n  };\n\n  /**\n   *\n   * @param {string} filename\n   * @param {string} [ext] Since `eslint-plugin-markdown` v2, and\n   *   ESLint 7, this is the default which other JS-fenced rules will used.\n   *   Formerly \"md\" was the default.\n   * @returns {{defaultFileName: string|undefined, filename: string}}\n   */\n  const getFilenameInfo = (filename, ext = 'md/*.js') => {\n    let defaultFileName;\n    if (!filename) {\n      const jsFileName = context.getFilename();\n      if (typeof jsFileName === 'string' && jsFileName.includes('.')) {\n        defaultFileName = jsFileName.replace(/\\.[^.]*$/u, `.${ext}`);\n      } else {\n        defaultFileName = `dummy.${ext}`;\n      }\n    }\n\n    return {\n      defaultFileName,\n      filename,\n    };\n  };\n\n  if (checkDefaults) {\n    const filenameInfo = getFilenameInfo(matchingFileNameDefaults, 'jsdoc-defaults');\n    utils.forEachPreferredTag('default', (tag, targetTagName) => {\n      if (!tag.description.trim()) {\n        return;\n      }\n\n      checkSource({\n        source: `(${utils.getTagDescription(tag)})`,\n        targetTagName,\n        ...filenameInfo,\n      });\n    });\n  }\n\n  if (checkParams) {\n    const filenameInfo = getFilenameInfo(matchingFileNameParams, 'jsdoc-params');\n    utils.forEachPreferredTag('param', (tag, targetTagName) => {\n      if (!tag.default || !tag.default.trim()) {\n        return;\n      }\n\n      checkSource({\n        source: `(${tag.default})`,\n        targetTagName,\n        ...filenameInfo,\n      });\n    });\n  }\n\n  if (checkProperties) {\n    const filenameInfo = getFilenameInfo(matchingFileNameProperties, 'jsdoc-properties');\n    utils.forEachPreferredTag('property', (tag, targetTagName) => {\n      if (!tag.default || !tag.default.trim()) {\n        return;\n      }\n\n      checkSource({\n        source: `(${tag.default})`,\n        targetTagName,\n        ...filenameInfo,\n      });\n    });\n  }\n\n  const tagName = /** @type {string} */ (utils.getPreferredTagName({\n    tagName: 'example',\n  }));\n  if (!utils.hasTag(tagName)) {\n    return;\n  }\n\n  const matchingFilenameInfo = getFilenameInfo(matchingFileName);\n\n  utils.forEachPreferredTag('example', (tag, targetTagName) => {\n    let source = /** @type {string} */ (utils.getTagDescription(tag));\n    const match = source.match(hasCaptionRegex);\n\n    if (captionRequired && (!match || !match[1].trim())) {\n      report('Caption is expected for examples.', null, tag);\n    }\n\n    source = source.replace(hasCaptionRegex, '');\n    const [\n      lines,\n      cols,\n    ] = match ? getLinesCols(match[0]) : [\n      0, 0,\n    ];\n\n    if (exampleCodeRegex && !exampleCodeRegex.test(source) ||\n      rejectExampleCodeRegex && rejectExampleCodeRegex.test(source)\n    ) {\n      return;\n    }\n\n    const sources = [];\n    let skipInit = false;\n    if (exampleCodeRegex) {\n      let nonJSPrefacingCols = 0;\n      let nonJSPrefacingLines = 0;\n\n      let startingIndex = 0;\n      let lastStringCount = 0;\n\n      let exampleCode;\n      exampleCodeRegex.lastIndex = 0;\n      while ((exampleCode = exampleCodeRegex.exec(source)) !== null) {\n        const {\n          index,\n          '0': n0,\n          '1': n1,\n        } = exampleCode;\n\n        // Count anything preceding user regex match (can affect line numbering)\n        const preMatch = source.slice(startingIndex, index);\n\n        const [\n          preMatchLines,\n          colDelta,\n        ] = getLinesCols(preMatch);\n\n        let nonJSPreface;\n        let nonJSPrefaceLineCount;\n        if (n1) {\n          const idx = n0.indexOf(n1);\n          nonJSPreface = n0.slice(0, idx);\n          nonJSPrefaceLineCount = countChars(nonJSPreface, '\\n');\n        } else {\n          nonJSPreface = '';\n          nonJSPrefaceLineCount = 0;\n        }\n\n        nonJSPrefacingLines += lastStringCount + preMatchLines + nonJSPrefaceLineCount;\n\n        // Ignore `preMatch` delta if newlines here\n        if (nonJSPrefaceLineCount) {\n          const charsInLastLine = nonJSPreface.slice(nonJSPreface.lastIndexOf('\\n') + 1).length;\n\n          nonJSPrefacingCols += charsInLastLine;\n        } else {\n          nonJSPrefacingCols += colDelta + nonJSPreface.length;\n        }\n\n        const string = n1 || n0;\n        sources.push({\n          nonJSPrefacingCols,\n          nonJSPrefacingLines,\n          string,\n        });\n        startingIndex = exampleCodeRegex.lastIndex;\n        lastStringCount = countChars(string, '\\n');\n        if (!exampleCodeRegex.global) {\n          break;\n        }\n      }\n\n      skipInit = true;\n    }\n\n    checkSource({\n      cols,\n      lines,\n      rules: mdRules,\n      skipInit,\n      source,\n      sources,\n      tag,\n      targetTagName,\n      ...matchingFilenameInfo,\n    });\n  });\n}, {\n  iterateAllJsdocs: true,\n  meta: {\n    docs: {\n      description: 'Ensures that (JavaScript) examples within JSDoc adhere to ESLint rules.',\n      url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/check-examples.md#repos-sticky-header',\n    },\n    schema: [\n      {\n        additionalProperties: false,\n        properties: {\n          allowInlineConfig: {\n            default: true,\n            type: 'boolean',\n          },\n          baseConfig: {\n            type: 'object',\n          },\n          captionRequired: {\n            default: false,\n            type: 'boolean',\n          },\n          checkDefaults: {\n            default: false,\n            type: 'boolean',\n          },\n          checkEslintrc: {\n            default: true,\n            type: 'boolean',\n          },\n          checkParams: {\n            default: false,\n            type: 'boolean',\n          },\n          checkProperties: {\n            default: false,\n            type: 'boolean',\n          },\n          configFile: {\n            type: 'string',\n          },\n          exampleCodeRegex: {\n            type: 'string',\n          },\n          matchingFileName: {\n            type: 'string',\n          },\n          matchingFileNameDefaults: {\n            type: 'string',\n          },\n          matchingFileNameParams: {\n            type: 'string',\n          },\n          matchingFileNameProperties: {\n            type: 'string',\n          },\n          noDefaultExampleRules: {\n            default: false,\n            type: 'boolean',\n          },\n          paddedIndent: {\n            default: 0,\n            type: 'integer',\n          },\n          rejectExampleCodeRegex: {\n            type: 'string',\n          },\n          reportUnusedDisableDirectives: {\n            default: true,\n            type: 'boolean',\n          },\n        },\n        type: 'object',\n      },\n    ],\n    type: 'suggestion',\n  },\n});\n"],"mappings":"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","ignoreList":[]}