UNPKG

eslint-plugin-jsdoc

Version:
1 lines 24.7 kB
{"version":3,"file":"generateDocs.cjs","names":["glob","path","decamelize","fs","plugin","Gitdown"],"sources":["../src/bin/generateDocs.js"],"sourcesContent":["/**\n * This script is used to inline assertions into the README.md documents.\n */\nimport plugin from '../index.js';\nimport decamelize from 'decamelize';\nimport Gitdown from 'gitdown';\nimport {\n glob,\n} from 'glob';\nimport fs from 'node:fs';\nimport path from 'node:path';\n\nconst dirname = import.meta.dirname;\n\n/**\n * @param {string} str\n */\nconst escapeDescription = (str) => {\n return str.replaceAll(/(?<!`|\\* +|'|\\/\\/ )@\\w+/gv, '<code>$&</code>');\n};\n\n/**\n * @param {string} code\n * @returns {string}\n */\nconst trimCode = (code) => {\n let lines = code.replace(/^\\n/v, '').trimEnd().split('\\n');\n\n const firsLineIndentation = lines[0].match(/^\\s+/v);\n const lastLineIndentation = lines[lines.length - 1].match(/^\\s+/v);\n\n const firstIndentSize = firsLineIndentation ? firsLineIndentation[0].length : 0;\n const lastIndentSize = lastLineIndentation ? lastLineIndentation[0].length : 0;\n\n lines = lines.map((line, index) => {\n const lineIndentSize = firstIndentSize !== 0 || index === 0 ?\n Math.min(firstIndentSize, lastIndentSize) :\n lastIndentSize;\n\n return line.slice(lineIndentSize);\n });\n\n return lines.join('\\n').replaceAll('\\r', '\\\\r');\n};\n\n/**\n * @param {import('eslint').RuleTester.InvalidTestCase|import('eslint').RuleTester.ValidTestCase} setup\n * @param {string} ruleName\n * @returns {string}\n */\nconst formatCodeSnippet = (setup, ruleName) => {\n const paragraphs = [];\n\n paragraphs.push(trimCode(setup.code));\n\n if (setup.settings) {\n paragraphs.push(`// Settings: ${JSON.stringify(setup.settings)}`);\n }\n\n if (setup.options) {\n paragraphs.push(`// \"jsdoc/${ruleName}\": [\"error\"|\"warn\", ${JSON.stringify(setup.options).slice(1)}`);\n }\n\n if ('errors' in setup) {\n paragraphs.push(`// Message: ${\n /** @type {Array<import('eslint').RuleTester.TestCaseError>} */ (\n setup.errors\n )[0].message}`);\n }\n\n return paragraphs.join('\\n');\n};\n\nconst getAssertions = async () => {\n const assertionFiles = (await glob(path.resolve(dirname, '../../test/rules/assertions/*.js'))).filter((file) => {\n return !file.includes('flatConfig');\n }).toReversed();\n\n const assertionNames = assertionFiles.map((filePath) => {\n return path.basename(filePath, '.js');\n });\n\n const assertionCodes = await Promise.all(assertionFiles.map(async (filePath, idx) => {\n /**\n * @type {{\n * invalid: (import('eslint').RuleTester.InvalidTestCase & {ignoreReadme?: true})[],\n * valid: (import('eslint').RuleTester.ValidTestCase & {ignoreReadme?: true})[]\n * }}\n */\n const codes = (await import(filePath)).default;\n\n const ruleName = decamelize(assertionNames[idx], {\n separator: '-',\n });\n\n return {\n invalid: codes.invalid.filter(({\n ignoreReadme,\n }) => {\n return !ignoreReadme;\n }).map((setup) => {\n return formatCodeSnippet(setup, ruleName);\n }),\n valid: codes.valid.filter(({\n ignoreReadme,\n }) => {\n return !ignoreReadme;\n }).map((setup) => {\n return formatCodeSnippet(setup, ruleName);\n }),\n };\n }));\n\n return {\n assertionNames,\n assertions: Object.fromEntries(assertionNames.map((assertionName, index) => {\n return [\n assertionName, assertionCodes[index],\n ];\n })),\n };\n};\n\nconst getSomeBranch = () => {\n const gitConfig = fs.readFileSync(path.join(dirname, '../../.git/config')).toString();\n const [\n , branch,\n ] = /\\[branch \"([^\"]+)\"\\]/v.exec(gitConfig) || [];\n\n return branch;\n};\n\n// Scan the directory for these instead?\nconst extraFiles = [\n 'settings.md',\n 'advanced.md',\n 'processors.md',\n 'README.md',\n];\n\nconst otherPaths = extraFiles.map((extraFile) => {\n return path.join(dirname, '..', '..', '.README', extraFile);\n});\n\nconst generateDocs = async () => {\n const {\n assertionNames,\n assertions,\n } = await getAssertions();\n\n /** @type {import('json-schema').JSONSchema4[][]} */\n const schemas = [];\n\n /**\n * @type {{\n * decamelized: string,\n * row: string\n * }[]}\n */\n const tableRows = [];\n\n const docContents = await Promise.all([\n ...assertionNames.map((assertionName) => {\n const decamelized = decamelize(assertionName, {\n separator: '-',\n });\n schemas.push(\n /** @type {import('json-schema').JSONSchema4[]} */\n (plugin.rules?.[decamelized].meta?.schema),\n );\n const ruleDescription = plugin.rules?.[decamelized]?.meta?.docs?.description;\n if (ruleDescription === undefined) {\n throw new Error(`Rule ${assertionName} missing description`);\n }\n\n const fixable = plugin.rules?.[decamelized]?.meta?.fixable ?? null;\n\n const recommended = plugin.configs['flat/recommended'].rules?.['jsdoc/' + decamelized] !== 'off';\n const tsRecommended = plugin.configs['flat/recommended-typescript'].rules?.['jsdoc/' + decamelized] !== 'off';\n const tsRecommendedFlavor = plugin.configs['flat/recommended-typescript-flavor'].rules?.['jsdoc/' + decamelized] !== 'off';\n\n tableRows.push({\n decamelized,\n row: `|${\n recommended ?\n (tsRecommended && tsRecommendedFlavor ?\n ':heavy_check_mark:' :\n ':heavy_check_mark: (' + (tsRecommended ? 'On in TS' : 'Off in TS') +\n '; ' +\n (tsRecommendedFlavor ? 'On in TS flavor' : 'Off in TS flavor') +\n ')'\n ) :\n (tsRecommended || tsRecommendedFlavor ?\n (tsRecommended ? 'On in TS' : 'Off in TS') +\n '; ' +\n (tsRecommendedFlavor ? 'On in TS flavor' : 'Off in TS flavor') :\n '')\n }|${fixable ? ':wrench:' : ''}| [${decamelized}](./docs/rules/${decamelized}.md#readme) | ${ruleDescription} |`,\n });\n\n return path.join(\n dirname, '..', '..', '.README', 'rules', decamelized + '.md',\n );\n }),\n ...otherPaths,\n ].map(async (docPath, idx) => {\n const gitdown = await Gitdown.readFile(docPath);\n\n gitdown.setConfig({\n gitinfo: {\n defaultBranchName: getSomeBranch() || 'master',\n gitPath: path.join(dirname, '../../.git'),\n },\n });\n\n gitdown.registerHelper('rules-table', {\n compile () {\n return tableRows.toSorted(({\n decamelized,\n }, {\n decamelized: dc,\n }) => {\n return decamelized < dc ? -1 : (decamelized > dc ? 1 : 0);\n }).map(({\n row,\n }) => {\n return row;\n }).join('\\n');\n },\n });\n\n gitdown.registerHelper('options', {\n compile () {\n if (!schemas[idx]) {\n return '';\n }\n\n /**\n * @param {import('json-schema').JSONSchema4} schema\n * @param {number} jIdx\n * @param {import('json-schema').JSONSchema4[]} arr\n * @param {number} [nesting]\n */\n const convertFromSchema = (schema, jIdx, arr, nesting = 3) => {\n let ret = '';\n switch (schema.type) {\n case 'array':\n ret += convertFromSchema(\n /** @type {import('json-schema').JSONSchema4} */ (schema.items),\n 0,\n [],\n nesting + 1,\n );\n break;\n case 'object':\n if (!schema.properties) {\n break;\n }\n\n if (jIdx === 0) {\n ret += (nesting > 3 ? '\\n' : '') + (arr.length <= 1 ? 'A single' : 'An') +\n ' options object has the following properties.\\n';\n } else {\n ret += '\\n\\nThe next option is an object with the following properties.\\n';\n }\n\n if (schema.description) {\n ret += `\\n${escapeDescription(schema.description)}\\n`;\n }\n\n for (const [\n property,\n innerSchema,\n ] of Object.entries(schema.properties)) {\n const {\n description,\n type,\n } = innerSchema;\n if (!description) {\n throw new Error(\n 'Missing description for property ' + property + ' for rule ' + assertionNames[idx] + ' with schema ' + JSON.stringify(innerSchema),\n );\n }\n\n ret += '\\n' + '#'.repeat(nesting) + ` \\`${property}\\`\n\n${type === 'object' && innerSchema.properties ? '' : escapeDescription(description) + '\\n'}`;\n if (type === 'object' || type === 'array') {\n ret += convertFromSchema(innerSchema, 0, [], nesting + 1);\n }\n }\n\n break;\n case 'string':\n if (jIdx !== 0) {\n throw new Error('Unexpected string schema');\n }\n\n // If a simple string, should be documented by parent\n if (schema.enum) {\n ret += 'The first option is a string with the following possible values: ';\n ret += schema.enum?.map((val) => {\n return `\"${val}\"`;\n }).join(', ') + '.\\n';\n }\n\n if (schema.description) {\n ret += escapeDescription(schema.description);\n }\n\n break;\n default:\n // Describe on parent object\n if (schema.anyOf) {\n break;\n }\n\n throw new Error('Unrecognized type ' + schema.type + ' for schema: ' +\n JSON.stringify(schema));\n }\n\n return ret;\n };\n\n return schemas[idx].map((schema, jIdx, arr) => {\n return convertFromSchema(schema, jIdx, arr);\n }).join('');\n },\n });\n\n return gitdown.get();\n }));\n\n return docContents.map((docContent) => {\n return docContent.replaceAll(\n /<!-- assertions-(passing|failing) ([a-z]+?) -->/gvi,\n /**\n * @param {string} _assertionsBlock\n * @param {string} passingFailing\n * @param {string} ruleName\n * @returns {string}\n */\n (_assertionsBlock, passingFailing, ruleName) => {\n const ruleAssertions = assertions[ruleName];\n\n if (!ruleAssertions) {\n throw new Error(`No assertions available for rule \"${ruleName}\".`);\n }\n\n return passingFailing === 'failing' ?\n 'The following patterns are considered problems:\\n\\n````ts\\n' +\n ruleAssertions.invalid.join('\\n\\n') + '\\n````\\n\\n' :\n 'The following patterns are not considered problems:\\n\\n````ts\\n' +\n ruleAssertions.valid.join('\\n\\n') + '\\n````\\n';\n },\n // Allow relative paths in source for #902 but generate compiled file in\n // manner compatible with GitHub and npmjs.com\n ).replaceAll('(../#', '(#user-content-eslint-plugin-jsdoc-');\n });\n};\n\n/**\n * @returns {string[]}\n */\nconst getDocPaths = () => {\n const basePath = path.join(dirname, '..', '..', '.README');\n const writeBasePath = path.join(dirname, '..', '..', 'docs');\n const docPaths = /** @type {string[]} */ (fs.readdirSync(basePath).flatMap((docFile) => {\n if (extraFiles.includes(docFile)) {\n // Will get path separately below\n return null;\n }\n\n if (docFile === '.DS_Store') {\n return null;\n }\n\n const innerBasePath = path.join(basePath, docFile);\n const writeInnerBasePath = path.join(writeBasePath, docFile);\n const stat = fs.statSync(innerBasePath);\n if (stat.isFile()) {\n // Currently settings and advanced\n return writeInnerBasePath;\n }\n\n if (stat.isDirectory()) {\n return fs.readdirSync(innerBasePath).map((innerDocFile) => {\n return path.join(writeInnerBasePath, innerDocFile);\n }).toSorted((a, b) => {\n const newA = a.replace(/\\.md/v, '');\n const newB = b.replace(/\\.md/v, '');\n return newA < newB ? -1 : (newB > newA ? 1 : 0);\n });\n }\n\n return null;\n }).filter(Boolean));\n\n return [\n ...docPaths,\n ...extraFiles.slice(0, -1).map((extraFile) => {\n return path.join(dirname, '..', '..', 'docs', extraFile);\n }),\n path.join(dirname, '..', '..', 'README.md'),\n ];\n};\n\nconst generateDocsAndWriteToDisk = async () => {\n const [\n docContents,\n docPaths,\n ] = await Promise.all([\n generateDocs(), getDocPaths(),\n ]);\n for (const [\n idx,\n docContent,\n ] of docContents.entries()) {\n const destPath = docPaths[idx];\n fs.writeFileSync(destPath, docContent);\n }\n};\n\nconst assertDocsAreUpToDate = async () => {\n const [\n docContents,\n docPaths,\n ] = await Promise.all([\n generateDocs(), getDocPaths(),\n ]);\n for (const [\n idx,\n docContent,\n ] of docContents.entries()) {\n const docPath = docPaths[idx];\n const isUpToDate = fs.readFileSync(docPath, 'utf8') === docContent;\n\n if (!isUpToDate) {\n throw new Error('Docs are not up to date, please run `pnpm run create-docs` to update it.');\n }\n }\n};\n\nconst main = async () => {\n try {\n const hasCheckFlag = process.argv.includes('--check');\n\n if (hasCheckFlag) {\n await assertDocsAreUpToDate();\n } else {\n await generateDocsAndWriteToDisk();\n }\n } catch (error) {\n /* eslint-disable-next-line no-console */\n console.error(error);\n\n process.exit(1);\n }\n};\n\nmain();\n\nexport default generateDocs;\n"],"mappings":"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","ignoreList":[]}