1 line
30 KiB
Plaintext

{"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":[]}