eslint-plugin-jsdoc
Version:
JSDoc linting rules for ESLint.
1 lines • 4.43 kB
Source Map (JSON)
{"version":3,"file":"generateOptions.cjs","names":["readdir","readFile","join","parse","esquery","generate","decamelize","writeFile"],"sources":["../src/bin/generateOptions.js"],"sourcesContent":["import {\n generate,\n} from '@es-joy/escodegen';\nimport decamelize from 'decamelize';\nimport {\n parse,\n} from 'espree';\nimport esquery from 'esquery';\nimport {\n readdir,\n readFile,\n writeFile,\n} from 'node:fs/promises';\nimport {\n join,\n} from 'node:path';\n\nconst rulesDir = './src/rules';\n\nconst dirContents = await readdir(rulesDir);\n\nfor (const file of dirContents) {\n if (!file.endsWith('.js')) {\n continue;\n }\n\n const fileContents = await readFile(join(rulesDir, file), 'utf8');\n // console.log('file', file);\n const ast = parse(fileContents, {\n ecmaVersion: 2_024,\n sourceType: 'module',\n });\n const results = esquery.query(\n ast,\n 'ExportDefaultDeclaration[declaration.callee.name=\"iterateJsdoc\"]' +\n ' Property[key.name=\"meta\"] Property[key.name=\"schema\"]',\n );\n if (results[0]?.value) {\n const schema = generate(results[0]?.value, {\n format: {\n json: true,\n quotes: 'double',\n },\n });\n const parsed = JSON.parse(schema);\n\n let initial = '';\n if (Array.isArray(parsed)) {\n if (!parsed.length) {\n // eslint-disable-next-line no-console -- CLI\n console.log('skipping no options', file);\n continue;\n }\n\n if (parsed.length >= 2) {\n if (parsed.length >= 3 || parsed[0].type !== 'string') {\n // eslint-disable-next-line no-console -- CLI\n console.log('unexpectedly large schema', file);\n continue;\n // throw new Error('Unexpected long schema array');\n }\n\n initial = `string (${parsed[0].enum.map((item) => {\n return `\"${item}\"`;\n }).join(', ')}) followed by object with `;\n parsed.shift();\n }\n }\n\n const obj = Array.isArray(parsed) ? parsed[0] : parsed;\n\n const hyphenatedRule = decamelize(file, {\n separator: '-',\n }).replace(/\\.js$/v, '.md');\n const docPath = join('.README/rules', hyphenatedRule);\n\n const ruleDocs = (await readFile(docPath, 'utf8'))\n .replace(/(\\|\\s*Options\\s*\\|)([^\\|]*)(\\|)?/v, `$1${\n initial +\n Object.keys(obj.properties).map((key) => {\n return `\\`${key}\\``;\n }).join(', ')\n }$3`);\n\n await writeFile(docPath, ruleDocs);\n }\n}\n"],"mappings":";;AAAA;AAGA;AACA;AAGA;AACA;AAKA;AAEmB;AAEnB,MAAM,QAAQ,GAAG,aAAa;AAE9B,MAAM,WAAW,GAAG,MAAM,IAAAA,UAAA,OAAO,EAAC,QAAQ,CAAC;AAE3C,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE;EAC9B,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;IACzB;EACF;EAEA,MAAM,YAAY,GAAG,MAAM,IAAAC,UAAA,QAAQ,EAAC,IAAAC,UAAA,IAAI,EAAC,QAAQ,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC;EACjE;EACA,MAAM,GAAG,GAAG,IAAAC,QAAA,KAAK,EAAC,YAAY,EAAE;IAC9B,WAAW,EAAE,KAAK;IAClB,UAAU,EAAE;EACd,CAAC,CAAC;EACF,MAAM,OAAO,GAAGC,gBAAO,CAAC,KAAK,CAC3B,GAAG,EACH,kEAAkE,GACjE,wDACH,CAAC;EACD,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE;IACrB,MAAM,MAAM,GAAG,IAAAC,WAAA,QAAQ,EAAC,OAAO,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE;MACzC,MAAM,EAAE;QACN,IAAI,EAAE,IAAI;QACV,MAAM,EAAE;MACV;IACF,CAAC,CAAC;IACF,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;IAEjC,IAAI,OAAO,GAAG,EAAE;IAChB,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;MACzB,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;QAClB;QACA,OAAO,CAAC,GAAG,CAAC,qBAAqB,EAAE,IAAI,CAAC;QACxC;MACF;MAEA,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC,EAAE;QACtB,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,EAAE;UACrD;UACA,OAAO,CAAC,GAAG,CAAC,2BAA2B,EAAE,IAAI,CAAC;UAC9C;UACA;QACF;QAEA,OAAO,GAAG,WAAW,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAE,IAAI,IAAK;UAChD,OAAO,IAAI,IAAI,GAAG;QACpB,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,4BAA4B;QACzC,MAAM,CAAC,KAAK,CAAC,CAAC;MAChB;IACF;IAEA,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM;IAEtD,MAAM,cAAc,GAAG,IAAAC,mBAAU,EAAC,IAAI,EAAE;MACtC,SAAS,EAAE;IACb,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,KAAK,CAAC;IAC3B,MAAM,OAAO,GAAG,IAAAJ,UAAA,IAAI,EAAC,eAAe,EAAE,cAAc,CAAC;IAErD,MAAM,QAAQ,GAAG,CAAC,MAAM,IAAAD,UAAA,QAAQ,EAAC,OAAO,EAAE,MAAM,CAAC,EAC9C,OAAO,CAAC,mCAAmC,EAAE,KAC5C,OAAO,GACP,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,GAAG,CAAE,GAAG,IAAK;MACvC,OAAO,KAAK,GAAG,IAAI;IACrB,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IACX,CAAC;IAEP,MAAM,IAAAM,UAAA,SAAS,EAAC,OAAO,EAAE,QAAQ,CAAC;EACpC;AACF","ignoreList":[]}