eslint-plugin-jsdoc 59.0.2 → 60.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -479,6 +479,7 @@ non-default-recommended fixer).
479
479
  |:heavy_check_mark:|| [require-returns-check](./docs/rules/require-returns-check.md#readme) | Requires a return statement in function body if a `@returns` tag is specified in JSDoc comment(and reports if multiple `@returns` tags are present). |
480
480
  |:heavy_check_mark:|| [require-returns-description](./docs/rules/require-returns-description.md#readme) | Requires that the `@returns` tag has a `description` value (not including `void`/`undefined` type returns). |
481
481
  |:heavy_check_mark: (Off in TS; On in TS flavor)|| [require-returns-type](./docs/rules/require-returns-type.md#readme) | Requires that `@returns` tag has type value (in curly brackets). |
482
+ ||| [require-tags](./docs/rules/require-tags.md#readme) | Requires tags be present, optionally for specific contexts |
482
483
  ||| [require-template](./docs/rules/require-template.md#readme) | Requires `@template` tags be present when type parameters are used. |
483
484
  ||| [require-throws](./docs/rules/require-throws.md#readme) | Requires that throw statements are documented with `@throws` tags. |
484
485
  ||| [require-throws-description](./docs/rules/require-throws-description.md#readme) | Requires a description for `@throws` tags |
@@ -6,15 +6,25 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.buildForbidRuleDefinition = void 0;
7
7
  var _iterateJsdoc = _interopRequireDefault(require("./iterateJsdoc.cjs"));
8
8
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
9
+ /**
10
+ * @typedef {(string|{
11
+ * comment: string,
12
+ * context: string,
13
+ * message?: string
14
+ * })[]} Contexts
15
+ */
16
+
9
17
  /**
10
18
  * @param {{
11
- * contexts: (string|{
12
- * comment: string,
13
- * context: string,
14
- * message: string
15
- * })[],
19
+ * contexts?: Contexts,
16
20
  * description?: string,
17
- * contextName?: string
21
+ * getContexts?: (
22
+ * ctxt: import('eslint').Rule.RuleContext,
23
+ * report: import('./iterateJsdoc.js').Report
24
+ * ) => Contexts|false,
25
+ * contextName?: string,
26
+ * modifyContext?: (context: import('eslint').Rule.RuleContext) => import('eslint').Rule.RuleContext,
27
+ * schema?: import('eslint').Rule.RuleMetaData['schema']
18
28
  * url?: string,
19
29
  * }} cfg
20
30
  * @returns {import('@eslint/core').RuleDefinition<
@@ -23,22 +33,33 @@ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e
23
33
  */
24
34
  const buildForbidRuleDefinition = ({
25
35
  contextName,
26
- contexts,
36
+ contexts: cntxts,
27
37
  description,
38
+ getContexts,
39
+ modifyContext,
40
+ schema,
28
41
  url
29
42
  }) => {
30
43
  return (0, _iterateJsdoc.default)(({
31
- // context,
44
+ context,
32
45
  info: {
33
46
  comment
34
47
  },
35
48
  report,
36
49
  utils
37
50
  }) => {
51
+ /** @type {Contexts|boolean|undefined} */
52
+ let contexts = cntxts;
53
+ if (getContexts) {
54
+ contexts = getContexts(context, report);
55
+ if (!contexts) {
56
+ return;
57
+ }
58
+ }
38
59
  const {
39
60
  contextStr,
40
61
  foundContext
41
- } = utils.findContext(contexts, comment);
62
+ } = utils.findContext(/** @type {Contexts} */contexts, comment);
42
63
 
43
64
  // We are not on the *particular* matching context/comment, so don't assume
44
65
  // we need reporting
@@ -59,10 +80,10 @@ const buildForbidRuleDefinition = ({
59
80
  description: description ?? contextName ?? 'Reports when certain comment structures are present.',
60
81
  url: url ?? 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/advanced.md#user-content-advanced-creating-your-own-rules'
61
82
  },
62
- schema: [],
83
+ schema: schema ?? [],
63
84
  type: 'suggestion'
64
85
  },
65
- modifyContext: context => {
86
+ modifyContext: modifyContext ?? (getContexts ? undefined : context => {
66
87
  // Reproduce context object with our own `contexts`
67
88
  const propertyDescriptors = Object.getOwnPropertyDescriptors(context);
68
89
  return Object.create(Object.getPrototypeOf(context), {
@@ -70,11 +91,11 @@ const buildForbidRuleDefinition = ({
70
91
  options: {
71
92
  ...propertyDescriptors.options,
72
93
  value: [{
73
- contexts
94
+ contexts: cntxts
74
95
  }]
75
96
  }
76
97
  });
77
- },
98
+ }),
78
99
  nonGlobalSettings: true
79
100
  });
80
101
  };
@@ -1 +1 @@
1
- {"version":3,"file":"buildForbidRuleDefinition.cjs","names":["_iterateJsdoc","_interopRequireDefault","require","e","__esModule","default","buildForbidRuleDefinition","contextName","contexts","description","url","iterateJsdoc","info","comment","report","utils","contextStr","foundContext","findContext","message","context","contextSelected","meta","docs","schema","type","modifyContext","propertyDescriptors","Object","getOwnPropertyDescriptors","create","getPrototypeOf","options","value","nonGlobalSettings","exports"],"sources":["../src/buildForbidRuleDefinition.js"],"sourcesContent":["import iterateJsdoc from './iterateJsdoc.js';\n\n/**\n * @param {{\n * contexts: (string|{\n * comment: string,\n * context: string,\n * message: string\n * })[],\n * description?: string,\n * contextName?: string\n * url?: string,\n * }} cfg\n * @returns {import('@eslint/core').RuleDefinition<\n * import('@eslint/core').RuleDefinitionTypeOptions\n * >}\n */\nexport const buildForbidRuleDefinition = ({\n contextName,\n contexts,\n description,\n url,\n}) => {\n return iterateJsdoc(({\n // context,\n info: {\n comment,\n },\n report,\n utils,\n }) => {\n const {\n contextStr,\n foundContext,\n } = utils.findContext(contexts, comment);\n\n // We are not on the *particular* matching context/comment, so don't assume\n // we need reporting\n if (!foundContext) {\n return;\n }\n\n const message = /** @type {import('./iterateJsdoc.js').ContextObject} */ (\n foundContext\n )?.message ??\n 'Syntax is restricted: {{context}}' +\n (comment ? ' with {{comment}}' : '');\n\n report(message, null, null, comment ? {\n comment,\n context: contextStr,\n } : {\n context: contextStr,\n });\n }, {\n contextSelected: true,\n meta: {\n docs: {\n description: description ?? contextName ?? 'Reports when certain comment structures are present.',\n url: url ?? 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/advanced.md#user-content-advanced-creating-your-own-rules',\n },\n schema: [],\n type: 'suggestion',\n },\n modifyContext: (context) => {\n // Reproduce context object with our own `contexts`\n const propertyDescriptors = Object.getOwnPropertyDescriptors(context);\n return Object.create(\n Object.getPrototypeOf(context),\n {\n ...propertyDescriptors,\n options: {\n ...propertyDescriptors.options,\n value: [\n {\n contexts,\n },\n ],\n },\n },\n );\n },\n nonGlobalSettings: true,\n });\n};\n"],"mappings":";;;;;;AAAA,IAAAA,aAAA,GAAAC,sBAAA,CAAAC,OAAA;AAA6C,SAAAD,uBAAAE,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAE7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAMG,yBAAyB,GAAGA,CAAC;EACxCC,WAAW;EACXC,QAAQ;EACRC,WAAW;EACXC;AACF,CAAC,KAAK;EACJ,OAAO,IAAAC,qBAAY,EAAC,CAAC;IACnB;IACAC,IAAI,EAAE;MACJC;IACF,CAAC;IACDC,MAAM;IACNC;EACF,CAAC,KAAK;IACJ,MAAM;MACJC,UAAU;MACVC;IACF,CAAC,GAAGF,KAAK,CAACG,WAAW,CAACV,QAAQ,EAAEK,OAAO,CAAC;;IAExC;IACA;IACA,IAAI,CAACI,YAAY,EAAE;MACjB;IACF;IAEA,MAAME,OAAO,GAAG,wDACdF,YAAY,EACXE,OAAO,IACR,mCAAmC,IAChCN,OAAO,GAAG,mBAAmB,GAAG,EAAE,CAAC;IAExCC,MAAM,CAACK,OAAO,EAAE,IAAI,EAAE,IAAI,EAAEN,OAAO,GAAG;MACpCA,OAAO;MACPO,OAAO,EAAEJ;IACX,CAAC,GAAG;MACFI,OAAO,EAAEJ;IACX,CAAC,CAAC;EACJ,CAAC,EAAE;IACDK,eAAe,EAAE,IAAI;IACrBC,IAAI,EAAE;MACJC,IAAI,EAAE;QACJd,WAAW,EAAEA,WAAW,IAAIF,WAAW,IAAI,sDAAsD;QACjGG,GAAG,EAAEA,GAAG,IAAI;MACd,CAAC;MACDc,MAAM,EAAE,EAAE;MACVC,IAAI,EAAE;IACR,CAAC;IACDC,aAAa,EAAGN,OAAO,IAAK;MAC1B;MACA,MAAMO,mBAAmB,GAAGC,MAAM,CAACC,yBAAyB,CAACT,OAAO,CAAC;MACrE,OAAOQ,MAAM,CAACE,MAAM,CAClBF,MAAM,CAACG,cAAc,CAACX,OAAO,CAAC,EAC9B;QACE,GAAGO,mBAAmB;QACtBK,OAAO,EAAE;UACP,GAAGL,mBAAmB,CAACK,OAAO;UAC9BC,KAAK,EAAE,CACL;YACEzB;UACF,CAAC;QAEL;MACF,CACF,CAAC;IACH,CAAC;IACD0B,iBAAiB,EAAE;EACrB,CAAC,CAAC;AACJ,CAAC;AAACC,OAAA,CAAA7B,yBAAA,GAAAA,yBAAA","ignoreList":[]}
1
+ {"version":3,"file":"buildForbidRuleDefinition.cjs","names":["_iterateJsdoc","_interopRequireDefault","require","e","__esModule","default","buildForbidRuleDefinition","contextName","contexts","cntxts","description","getContexts","modifyContext","schema","url","iterateJsdoc","context","info","comment","report","utils","contextStr","foundContext","findContext","message","contextSelected","meta","docs","type","undefined","propertyDescriptors","Object","getOwnPropertyDescriptors","create","getPrototypeOf","options","value","nonGlobalSettings","exports"],"sources":["../src/buildForbidRuleDefinition.js"],"sourcesContent":["import iterateJsdoc from './iterateJsdoc.js';\n\n/**\n * @typedef {(string|{\n * comment: string,\n * context: string,\n * message?: string\n * })[]} Contexts\n */\n\n/**\n * @param {{\n * contexts?: Contexts,\n * description?: string,\n * getContexts?: (\n * ctxt: import('eslint').Rule.RuleContext,\n * report: import('./iterateJsdoc.js').Report\n * ) => Contexts|false,\n * contextName?: string,\n * modifyContext?: (context: import('eslint').Rule.RuleContext) => import('eslint').Rule.RuleContext,\n * schema?: import('eslint').Rule.RuleMetaData['schema']\n * url?: string,\n * }} cfg\n * @returns {import('@eslint/core').RuleDefinition<\n * import('@eslint/core').RuleDefinitionTypeOptions\n * >}\n */\nexport const buildForbidRuleDefinition = ({\n contextName,\n contexts: cntxts,\n description,\n getContexts,\n modifyContext,\n schema,\n url,\n}) => {\n return iterateJsdoc(({\n context,\n info: {\n comment,\n },\n report,\n utils,\n }) => {\n /** @type {Contexts|boolean|undefined} */\n let contexts = cntxts;\n\n if (getContexts) {\n contexts = getContexts(context, report);\n if (!contexts) {\n return;\n }\n }\n\n const {\n contextStr,\n foundContext,\n } = utils.findContext(/** @type {Contexts} */ (contexts), comment);\n\n // We are not on the *particular* matching context/comment, so don't assume\n // we need reporting\n if (!foundContext) {\n return;\n }\n\n const message = /** @type {import('./iterateJsdoc.js').ContextObject} */ (\n foundContext\n )?.message ??\n 'Syntax is restricted: {{context}}' +\n (comment ? ' with {{comment}}' : '');\n\n report(message, null, null, comment ? {\n comment,\n context: contextStr,\n } : {\n context: contextStr,\n });\n }, {\n contextSelected: true,\n meta: {\n docs: {\n description: description ?? contextName ?? 'Reports when certain comment structures are present.',\n url: url ?? 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/advanced.md#user-content-advanced-creating-your-own-rules',\n },\n schema: schema ?? [],\n type: 'suggestion',\n },\n modifyContext: modifyContext ?? (getContexts ? undefined : (context) => {\n // Reproduce context object with our own `contexts`\n const propertyDescriptors = Object.getOwnPropertyDescriptors(context);\n return Object.create(\n Object.getPrototypeOf(context),\n {\n ...propertyDescriptors,\n options: {\n ...propertyDescriptors.options,\n value: [\n {\n contexts: cntxts,\n },\n ],\n },\n },\n );\n }),\n nonGlobalSettings: true,\n });\n};\n"],"mappings":";;;;;;AAAA,IAAAA,aAAA,GAAAC,sBAAA,CAAAC,OAAA;AAA6C,SAAAD,uBAAAE,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAE7C;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAMG,yBAAyB,GAAGA,CAAC;EACxCC,WAAW;EACXC,QAAQ,EAAEC,MAAM;EAChBC,WAAW;EACXC,WAAW;EACXC,aAAa;EACbC,MAAM;EACNC;AACF,CAAC,KAAK;EACJ,OAAO,IAAAC,qBAAY,EAAC,CAAC;IACnBC,OAAO;IACPC,IAAI,EAAE;MACJC;IACF,CAAC;IACDC,MAAM;IACNC;EACF,CAAC,KAAK;IACJ;IACA,IAAIZ,QAAQ,GAAGC,MAAM;IAErB,IAAIE,WAAW,EAAE;MACfH,QAAQ,GAAGG,WAAW,CAACK,OAAO,EAAEG,MAAM,CAAC;MACvC,IAAI,CAACX,QAAQ,EAAE;QACb;MACF;IACF;IAEA,MAAM;MACJa,UAAU;MACVC;IACF,CAAC,GAAGF,KAAK,CAACG,WAAW,CAAC,uBAAyBf,QAAQ,EAAGU,OAAO,CAAC;;IAElE;IACA;IACA,IAAI,CAACI,YAAY,EAAE;MACjB;IACF;IAEA,MAAME,OAAO,GAAG,wDACdF,YAAY,EACXE,OAAO,IACR,mCAAmC,IAChCN,OAAO,GAAG,mBAAmB,GAAG,EAAE,CAAC;IAExCC,MAAM,CAACK,OAAO,EAAE,IAAI,EAAE,IAAI,EAAEN,OAAO,GAAG;MACpCA,OAAO;MACPF,OAAO,EAAEK;IACX,CAAC,GAAG;MACFL,OAAO,EAAEK;IACX,CAAC,CAAC;EACJ,CAAC,EAAE;IACDI,eAAe,EAAE,IAAI;IACrBC,IAAI,EAAE;MACJC,IAAI,EAAE;QACJjB,WAAW,EAAEA,WAAW,IAAIH,WAAW,IAAI,sDAAsD;QACjGO,GAAG,EAAEA,GAAG,IAAI;MACd,CAAC;MACDD,MAAM,EAAEA,MAAM,IAAI,EAAE;MACpBe,IAAI,EAAE;IACR,CAAC;IACDhB,aAAa,EAAEA,aAAa,KAAKD,WAAW,GAAGkB,SAAS,GAAIb,OAAO,IAAK;MACtE;MACA,MAAMc,mBAAmB,GAAGC,MAAM,CAACC,yBAAyB,CAAChB,OAAO,CAAC;MACrE,OAAOe,MAAM,CAACE,MAAM,CAClBF,MAAM,CAACG,cAAc,CAAClB,OAAO,CAAC,EAC9B;QACE,GAAGc,mBAAmB;QACtBK,OAAO,EAAE;UACP,GAAGL,mBAAmB,CAACK,OAAO;UAC9BC,KAAK,EAAE,CACL;YACE5B,QAAQ,EAAEC;UACZ,CAAC;QAEL;MACF,CACF,CAAC;IACH,CAAC,CAAC;IACF4B,iBAAiB,EAAE;EACrB,CAAC,CAAC;AACJ,CAAC;AAACC,OAAA,CAAAhC,yBAAA,GAAAA,yBAAA","ignoreList":[]}
@@ -1,11 +1,15 @@
1
- export function buildForbidRuleDefinition({ contextName, contexts, description, url, }: {
2
- contexts: (string | {
3
- comment: string;
4
- context: string;
5
- message: string;
6
- })[];
1
+ export function buildForbidRuleDefinition({ contextName, contexts: cntxts, description, getContexts, modifyContext, schema, url, }: {
2
+ contexts?: Contexts;
7
3
  description?: string;
4
+ getContexts?: (ctxt: import("eslint").Rule.RuleContext, report: import("./iterateJsdoc.js").Report) => Contexts | false;
8
5
  contextName?: string;
6
+ modifyContext?: (context: import("eslint").Rule.RuleContext) => import("eslint").Rule.RuleContext;
7
+ schema?: import("eslint").Rule.RuleMetaData["schema"];
9
8
  url?: string;
10
9
  }): import("@eslint/core").RuleDefinition<import("@eslint/core").RuleDefinitionTypeOptions>;
10
+ export type Contexts = (string | {
11
+ comment: string;
12
+ context: string;
13
+ message?: string;
14
+ })[];
11
15
  //# sourceMappingURL=buildForbidRuleDefinition.d.ts.map
@@ -1,10 +1,14 @@
1
- export function buildForbidRuleDefinition({ contextName, contexts, description, url, }: {
2
- contexts: (string | {
3
- comment: string;
4
- context: string;
5
- message: string;
6
- })[];
1
+ export function buildForbidRuleDefinition({ contextName, contexts: cntxts, description, getContexts, modifyContext, schema, url, }: {
2
+ contexts?: Contexts;
7
3
  description?: string;
4
+ getContexts?: (ctxt: import("eslint").Rule.RuleContext, report: import("./iterateJsdoc.js").Report) => Contexts | false;
8
5
  contextName?: string;
6
+ modifyContext?: (context: import("eslint").Rule.RuleContext) => import("eslint").Rule.RuleContext;
7
+ schema?: import("eslint").Rule.RuleMetaData["schema"];
9
8
  url?: string;
10
9
  }): import("@eslint/core").RuleDefinition<import("@eslint/core").RuleDefinitionTypeOptions>;
10
+ export type Contexts = (string | {
11
+ comment: string;
12
+ context: string;
13
+ message?: string;
14
+ })[];
@@ -1,2 +1,2 @@
1
- declare const _default: import("eslint").Rule.RuleModule;
1
+ declare const _default: import("@eslint/core").RuleDefinition<import("@eslint/core").RuleDefinitionTypeOptions>;
2
2
  export default _default;
@@ -0,0 +1,2 @@
1
+ declare const _default: import("@eslint/core").RuleDefinition<import("@eslint/core").RuleDefinitionTypeOptions>;
2
+ export default _default;
@@ -135,7 +135,7 @@ const generateDocs = async () => {
135
135
  schemas.push(/** @type {import('json-schema').JSONSchema4[]} */
136
136
  _index.default.rules?.[decamelized].meta?.schema);
137
137
  const ruleDescription = _index.default.rules?.[decamelized]?.meta?.docs?.description;
138
- if (!ruleDescription) {
138
+ if (ruleDescription === undefined) {
139
139
  throw new Error(`Rule ${assertionName} missing description`);
140
140
  }
141
141
  const fixable = _index.default.rules?.[decamelized]?.meta?.fixable ?? null;
@@ -1 +1 @@
1
- {"version":3,"file":"generateDocs.cjs","names":["_index","_interopRequireDefault","require","_decamelize","_fs","_gitdown","_glob","_path","e","__esModule","default","_interopRequireWildcard","t","WeakMap","r","n","o","i","f","__proto__","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","dirname","__dirname","escapeDescription","str","replaceAll","trimCode","code","lines","replace","trimEnd","split","firsLineIndentation","match","lastLineIndentation","length","firstIndentSize","lastIndentSize","map","line","index","lineIndentSize","Math","min","slice","join","formatCodeSnippet","setup","ruleName","paragraphs","push","settings","JSON","stringify","options","errors","message","getAssertions","assertionFiles","glob","path","resolve","filter","file","includes","toReversed","assertionNames","filePath","basename","assertionCodes","Promise","all","idx","codes","specifier","then","s","decamelize","separator","invalid","ignoreReadme","valid","assertions","fromEntries","assertionName","getSomeBranch","gitConfig","fs","readFileSync","toString","branch","exec","extraFiles","otherPaths","extraFile","generateDocs","schemas","tableRows","docContents","decamelized","plugin","rules","meta","schema","ruleDescription","docs","description","Error","fixable","recommended","configs","tsRecommended","tsRecommendedFlavor","row","docPath","gitdown","Gitdown","readFile","setConfig","gitinfo","defaultBranchName","gitPath","registerHelper","compile","toSorted","dc","convertFromSchema","jIdx","arr","nesting","ret","type","items","properties","property","innerSchema","entries","repeat","enum","val","anyOf","docContent","_assertionsBlock","passingFailing","ruleAssertions","getDocPaths","basePath","writeBasePath","docPaths","readdirSync","flatMap","docFile","innerBasePath","writeInnerBasePath","stat","statSync","isFile","isDirectory","innerDocFile","sort","a","b","newA","newB","Boolean","generateDocsAndWriteToDisk","destPath","writeFileSync","assertDocsAreUpToDate","isUpToDate","main","hasCheckFlag","process","argv","error","console","exit","_default","exports","module"],"sources":["../src/bin/generateDocs.js"],"sourcesContent":["import plugin from '../index.js';\nimport decamelize from 'decamelize';\nimport fs from 'fs';\nimport Gitdown from 'gitdown';\nimport {\n glob,\n} from 'glob';\n/**\n * This script is used to inline assertions into the README.md documents.\n */\nimport path from '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) {\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 += (arr.length <= 1 ? 'A single' : 'An') +\n ' options object has the following properties.\\n\\n';\n } else {\n ret += '\\n\\nThe next option is an object with the following properties.\\n\\n';\n }\n\n if (schema.description) {\n ret += `${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 += '#'.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 }).sort((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":[]}
1
+ {"version":3,"file":"generateDocs.cjs","names":["_index","_interopRequireDefault","require","_decamelize","_fs","_gitdown","_glob","_path","e","__esModule","default","_interopRequireWildcard","t","WeakMap","r","n","o","i","f","__proto__","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","dirname","__dirname","escapeDescription","str","replaceAll","trimCode","code","lines","replace","trimEnd","split","firsLineIndentation","match","lastLineIndentation","length","firstIndentSize","lastIndentSize","map","line","index","lineIndentSize","Math","min","slice","join","formatCodeSnippet","setup","ruleName","paragraphs","push","settings","JSON","stringify","options","errors","message","getAssertions","assertionFiles","glob","path","resolve","filter","file","includes","toReversed","assertionNames","filePath","basename","assertionCodes","Promise","all","idx","codes","specifier","then","s","decamelize","separator","invalid","ignoreReadme","valid","assertions","fromEntries","assertionName","getSomeBranch","gitConfig","fs","readFileSync","toString","branch","exec","extraFiles","otherPaths","extraFile","generateDocs","schemas","tableRows","docContents","decamelized","plugin","rules","meta","schema","ruleDescription","docs","description","undefined","Error","fixable","recommended","configs","tsRecommended","tsRecommendedFlavor","row","docPath","gitdown","Gitdown","readFile","setConfig","gitinfo","defaultBranchName","gitPath","registerHelper","compile","toSorted","dc","convertFromSchema","jIdx","arr","nesting","ret","type","items","properties","property","innerSchema","entries","repeat","enum","val","anyOf","docContent","_assertionsBlock","passingFailing","ruleAssertions","getDocPaths","basePath","writeBasePath","docPaths","readdirSync","flatMap","docFile","innerBasePath","writeInnerBasePath","stat","statSync","isFile","isDirectory","innerDocFile","sort","a","b","newA","newB","Boolean","generateDocsAndWriteToDisk","destPath","writeFileSync","assertDocsAreUpToDate","isUpToDate","main","hasCheckFlag","process","argv","error","console","exit","_default","exports","module"],"sources":["../src/bin/generateDocs.js"],"sourcesContent":["import plugin from '../index.js';\nimport decamelize from 'decamelize';\nimport fs from 'fs';\nimport Gitdown from 'gitdown';\nimport {\n glob,\n} from 'glob';\n/**\n * This script is used to inline assertions into the README.md documents.\n */\nimport path from '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 += (arr.length <= 1 ? 'A single' : 'An') +\n ' options object has the following properties.\\n\\n';\n } else {\n ret += '\\n\\nThe next option is an object with the following properties.\\n\\n';\n }\n\n if (schema.description) {\n ret += `${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 += '#'.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 }).sort((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":[]}
@@ -95,6 +95,10 @@ export default iterateJsdoc(({
95
95
  }
96
96
  const ruleReadmeTemplate = `# \`${ruleName}\`
97
97
 
98
+ ## Options
99
+
100
+ {"gitdown": "options"}
101
+
98
102
  |||
99
103
  |---|---|
100
104
  |Context|everywhere|
@@ -225,6 +229,7 @@ export default iterateJsdoc(({
225
229
  oldRegex: /\n\s{2}'(?<oldRule>[^']*)': [^,]*,/gv,
226
230
  path: './src/index-cjs.js'
227
231
  });
232
+ await Promise.resolve().then(() => _interopRequireWildcard(require('./buildEntryFileForTS.js')));
228
233
  await Promise.resolve().then(() => _interopRequireWildcard(require('./generateDocs.js')));
229
234
 
230
235
  /*
@@ -1 +1 @@
1
- {"version":3,"file":"generateRule.cjs","names":["_camelcase","_interopRequireDefault","require","_fs","_promises","_openEditor","_path","e","__esModule","default","_interopRequireWildcard","t","WeakMap","r","n","o","i","f","__proto__","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","ruleName","options","process","argv","recommended","includes","console","error","test","ruleNamesPath","ruleNames","JSON","parse","fs","readFile","push","sort","writeFile","stringify","log","ruleTemplate","camelCasedRuleName","camelCase","rulePath","existsSync","ruleTestTemplate","ruleTestPath","ruleReadmeTemplate","ruleReadmePath","replaceInOrder","checkName","newLine","oldIsCamel","oldRegex","path","offsets","readme","replace","matchedLine","n1","offset","str","oldRule","oldRuleB","alreadyIncluded","itemIndex","findIndex","item","undefined","pop","length","slice","repeat","Promise","resolve","then","chdir","__dirname","open"],"sources":["../src/bin/generateRule.js"],"sourcesContent":["/* eslint-disable no-console -- CLI */\n\nimport camelCase from 'camelcase';\nimport {\n existsSync,\n} from 'fs';\nimport fs from 'fs/promises';\n/**\n * @example\n * ```shell\n * pnpm run create-rule my-new-rule -- --recommended\n * ```\n */\nimport open from 'open-editor';\nimport {\n resolve,\n} from 'path';\n\n// Todo: Would ideally have prompts, e.g., to ask for whether\n// type was problem/layout, etc.\n\nconst [\n , , ruleName,\n ...options\n] = process.argv;\n\nconst recommended = options.includes('--recommended');\n\n(async () => {\n if (!ruleName) {\n console.error('Please supply a rule name');\n\n return;\n }\n\n if ((/[A-Z]/v).test(ruleName)) {\n console.error('Please ensure the rule has no capital letters');\n\n return;\n }\n\n const ruleNamesPath = './test/rules/ruleNames.json';\n const ruleNames = JSON.parse(await fs.readFile(\n // eslint-disable-next-line unicorn/prefer-json-parse-buffer -- TypeScript\n ruleNamesPath, 'utf8',\n ));\n if (!ruleNames.includes(ruleName)) {\n ruleNames.push(ruleName);\n ruleNames.sort();\n }\n\n await fs.writeFile(ruleNamesPath, JSON.stringify(ruleNames, null, 2) + '\\n');\n console.log('ruleNames', ruleNames);\n\n const ruleTemplate = `import iterateJsdoc from '../iterateJsdoc.js';\n\nexport default iterateJsdoc(({\n context,\n utils,\n}) => {\n // Rule here\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: '',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/${ruleName}.md#repos-sticky-header',\n },\n schema: [\n {\n additionalProperties: false,\n properties: {\n // Option properties here (or remove the object)\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n`;\n\n const camelCasedRuleName = camelCase(ruleName);\n\n const rulePath = `./src/rules/${camelCasedRuleName}.js`;\n\n if (!existsSync(rulePath)) {\n await fs.writeFile(rulePath, ruleTemplate);\n }\n\n const ruleTestTemplate = `export default {\n invalid: [\n {\n code: \\`\n \\`,\n errors: [\n {\n line: 2,\n message: '',\n },\n ],\n },\n ],\n valid: [\n {\n code: \\`\n \\`,\n },\n ],\n};\n`;\n\n const ruleTestPath = `./test/rules/assertions/${camelCasedRuleName}.js`;\n if (!existsSync(ruleTestPath)) {\n await fs.writeFile(ruleTestPath, ruleTestTemplate);\n }\n\n const ruleReadmeTemplate = `# \\`${ruleName}\\`\n\n|||\n|---|---|\n|Context|everywhere|\n|Tags|\\`\\`|\n|Recommended|${recommended ? 'true' : 'false'}|\n|Settings||\n|Options||\n\n## Failing examples\n\n<!-- assertions-failing ${camelCasedRuleName} -->\n\n## Passing examples\n\n<!-- assertions-passing ${camelCasedRuleName} -->\n`;\n\n const ruleReadmePath = `./.README/rules/${ruleName}.md`;\n if (!existsSync(ruleReadmePath)) {\n await fs.writeFile(ruleReadmePath, ruleReadmeTemplate);\n }\n\n /**\n * @param {object} cfg\n * @param {string} cfg.path\n * @param {RegExp} cfg.oldRegex\n * @param {string} cfg.checkName\n * @param {string} cfg.newLine\n * @param {boolean} [cfg.oldIsCamel]\n * @returns {Promise<void>}\n */\n const replaceInOrder = async ({\n checkName,\n newLine,\n oldIsCamel,\n oldRegex,\n path,\n }) => {\n /**\n * @typedef {number} Integer\n */\n /**\n * @typedef {{\n * matchedLine: string,\n * offset: Integer,\n * oldRule: string,\n * }} OffsetInfo\n */\n /**\n * @type {OffsetInfo[]}\n */\n const offsets = [];\n\n let readme = await fs.readFile(path, 'utf8');\n readme.replace(\n oldRegex,\n /**\n * @param {string} matchedLine\n * @param {string} n1\n * @param {Integer} offset\n * @param {string} str\n * @param {object} groups\n * @param {string} groups.oldRule\n * @returns {string}\n */\n (matchedLine, n1, offset, str, {\n oldRule,\n }) => {\n offsets.push({\n matchedLine,\n offset,\n oldRule,\n });\n\n return matchedLine;\n },\n );\n\n offsets.sort(({\n oldRule,\n }, {\n oldRule: oldRuleB,\n }) => {\n return oldRule < oldRuleB ? -1 : (oldRule > oldRuleB ? 1 : 0);\n });\n\n let alreadyIncluded = false;\n const itemIndex = offsets.findIndex(({\n oldRule,\n }) => {\n alreadyIncluded ||= oldIsCamel ? camelCasedRuleName === oldRule : ruleName === oldRule;\n\n return oldIsCamel ? camelCasedRuleName < oldRule : ruleName < oldRule;\n });\n let item = itemIndex !== undefined && offsets[itemIndex];\n if (item && itemIndex === 0 &&\n\n // This property would not always be sufficient but in this case it is.\n oldIsCamel\n ) {\n item.offset = 0;\n }\n\n if (!item) {\n item = /** @type {OffsetInfo} */ (offsets.pop());\n item.offset += item.matchedLine.length;\n }\n\n if (alreadyIncluded) {\n console.log(`Rule name is already present in ${checkName}.`);\n } else {\n readme = readme.slice(0, item.offset) +\n (item.offset ? '\\n' : '') +\n newLine +\n (item.offset ? '' : '\\n') +\n readme.slice(item.offset);\n\n await fs.writeFile(path, readme);\n }\n };\n\n // await replaceInOrder({\n // checkName: 'README',\n // newLine: `{\"gitdown\": \"include\", \"file\": \"./rules/${ruleName}.md\"}`,\n // oldRegex: /\\n\\{\"gitdown\": \"include\", \"file\": \".\\/rules\\/(?<oldRule>[^.]*).md\"\\}/gv,\n // path: './.README/README.md',\n // });\n\n await replaceInOrder({\n checkName: 'index import',\n newLine: `import ${camelCasedRuleName} from './rules/${camelCasedRuleName}.js';`,\n oldIsCamel: true,\n oldRegex: /\\nimport (?<oldRule>[^ ]*) from '.\\/rules\\/\\1\\.js';/gv,\n path: './src/index-cjs.js',\n });\n\n await replaceInOrder({\n checkName: 'index recommended',\n newLine: `${' '.repeat(6)}'jsdoc/${ruleName}': ${recommended ? 'warnOrError' : '\\'off\\''},`,\n oldRegex: /\\n\\s{6}'jsdoc\\/(?<oldRule>[^']*)': .*?,/gv,\n path: './src/index-cjs.js',\n });\n\n await replaceInOrder({\n checkName: 'index rules',\n newLine: `${' '.repeat(2)}'${ruleName}': ${camelCasedRuleName},`,\n oldRegex: /\\n\\s{2}'(?<oldRule>[^']*)': [^,]*,/gv,\n path: './src/index-cjs.js',\n });\n\n await import('./generateDocs.js');\n\n /*\n console.log('Paths to open for further editing\\n');\n console.log(`open ${ruleReadmePath}`);\n console.log(`open ${rulePath}`);\n console.log(`open ${ruleTestPath}\\n`);\n */\n\n // Set chdir as somehow still in operation from other test\n process.chdir(resolve(import.meta.dirname, '../../'));\n await open([\n // Could even add editor line column numbers like `${rulePath}:1:1`\n ruleReadmePath,\n ruleTestPath,\n rulePath,\n ]);\n})();\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"generateRule.cjs","names":["_camelcase","_interopRequireDefault","require","_fs","_promises","_openEditor","_path","e","__esModule","default","_interopRequireWildcard","t","WeakMap","r","n","o","i","f","__proto__","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","ruleName","options","process","argv","recommended","includes","console","error","test","ruleNamesPath","ruleNames","JSON","parse","fs","readFile","push","sort","writeFile","stringify","log","ruleTemplate","camelCasedRuleName","camelCase","rulePath","existsSync","ruleTestTemplate","ruleTestPath","ruleReadmeTemplate","ruleReadmePath","replaceInOrder","checkName","newLine","oldIsCamel","oldRegex","path","offsets","readme","replace","matchedLine","n1","offset","str","oldRule","oldRuleB","alreadyIncluded","itemIndex","findIndex","item","undefined","pop","length","slice","repeat","Promise","resolve","then","chdir","__dirname","open"],"sources":["../src/bin/generateRule.js"],"sourcesContent":["/* eslint-disable no-console -- CLI */\n\nimport camelCase from 'camelcase';\nimport {\n existsSync,\n} from 'fs';\nimport fs from 'fs/promises';\n/**\n * @example\n * ```shell\n * pnpm run create-rule my-new-rule -- --recommended\n * ```\n */\nimport open from 'open-editor';\nimport {\n resolve,\n} from 'path';\n\n// Todo: Would ideally have prompts, e.g., to ask for whether\n// type was problem/layout, etc.\n\nconst [\n , , ruleName,\n ...options\n] = process.argv;\n\nconst recommended = options.includes('--recommended');\n\n(async () => {\n if (!ruleName) {\n console.error('Please supply a rule name');\n\n return;\n }\n\n if ((/[A-Z]/v).test(ruleName)) {\n console.error('Please ensure the rule has no capital letters');\n\n return;\n }\n\n const ruleNamesPath = './test/rules/ruleNames.json';\n const ruleNames = JSON.parse(await fs.readFile(\n // eslint-disable-next-line unicorn/prefer-json-parse-buffer -- TypeScript\n ruleNamesPath, 'utf8',\n ));\n if (!ruleNames.includes(ruleName)) {\n ruleNames.push(ruleName);\n ruleNames.sort();\n }\n\n await fs.writeFile(ruleNamesPath, JSON.stringify(ruleNames, null, 2) + '\\n');\n console.log('ruleNames', ruleNames);\n\n const ruleTemplate = `import iterateJsdoc from '../iterateJsdoc.js';\n\nexport default iterateJsdoc(({\n context,\n utils,\n}) => {\n // Rule here\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: '',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/${ruleName}.md#repos-sticky-header',\n },\n schema: [\n {\n additionalProperties: false,\n properties: {\n // Option properties here (or remove the object)\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n`;\n\n const camelCasedRuleName = camelCase(ruleName);\n\n const rulePath = `./src/rules/${camelCasedRuleName}.js`;\n\n if (!existsSync(rulePath)) {\n await fs.writeFile(rulePath, ruleTemplate);\n }\n\n const ruleTestTemplate = `export default {\n invalid: [\n {\n code: \\`\n \\`,\n errors: [\n {\n line: 2,\n message: '',\n },\n ],\n },\n ],\n valid: [\n {\n code: \\`\n \\`,\n },\n ],\n};\n`;\n\n const ruleTestPath = `./test/rules/assertions/${camelCasedRuleName}.js`;\n if (!existsSync(ruleTestPath)) {\n await fs.writeFile(ruleTestPath, ruleTestTemplate);\n }\n\n const ruleReadmeTemplate = `# \\`${ruleName}\\`\n\n## Options\n\n{\"gitdown\": \"options\"}\n\n|||\n|---|---|\n|Context|everywhere|\n|Tags|\\`\\`|\n|Recommended|${recommended ? 'true' : 'false'}|\n|Settings||\n|Options||\n\n## Failing examples\n\n<!-- assertions-failing ${camelCasedRuleName} -->\n\n## Passing examples\n\n<!-- assertions-passing ${camelCasedRuleName} -->\n`;\n\n const ruleReadmePath = `./.README/rules/${ruleName}.md`;\n if (!existsSync(ruleReadmePath)) {\n await fs.writeFile(ruleReadmePath, ruleReadmeTemplate);\n }\n\n /**\n * @param {object} cfg\n * @param {string} cfg.path\n * @param {RegExp} cfg.oldRegex\n * @param {string} cfg.checkName\n * @param {string} cfg.newLine\n * @param {boolean} [cfg.oldIsCamel]\n * @returns {Promise<void>}\n */\n const replaceInOrder = async ({\n checkName,\n newLine,\n oldIsCamel,\n oldRegex,\n path,\n }) => {\n /**\n * @typedef {number} Integer\n */\n /**\n * @typedef {{\n * matchedLine: string,\n * offset: Integer,\n * oldRule: string,\n * }} OffsetInfo\n */\n /**\n * @type {OffsetInfo[]}\n */\n const offsets = [];\n\n let readme = await fs.readFile(path, 'utf8');\n readme.replace(\n oldRegex,\n /**\n * @param {string} matchedLine\n * @param {string} n1\n * @param {Integer} offset\n * @param {string} str\n * @param {object} groups\n * @param {string} groups.oldRule\n * @returns {string}\n */\n (matchedLine, n1, offset, str, {\n oldRule,\n }) => {\n offsets.push({\n matchedLine,\n offset,\n oldRule,\n });\n\n return matchedLine;\n },\n );\n\n offsets.sort(({\n oldRule,\n }, {\n oldRule: oldRuleB,\n }) => {\n return oldRule < oldRuleB ? -1 : (oldRule > oldRuleB ? 1 : 0);\n });\n\n let alreadyIncluded = false;\n const itemIndex = offsets.findIndex(({\n oldRule,\n }) => {\n alreadyIncluded ||= oldIsCamel ? camelCasedRuleName === oldRule : ruleName === oldRule;\n\n return oldIsCamel ? camelCasedRuleName < oldRule : ruleName < oldRule;\n });\n let item = itemIndex !== undefined && offsets[itemIndex];\n if (item && itemIndex === 0 &&\n\n // This property would not always be sufficient but in this case it is.\n oldIsCamel\n ) {\n item.offset = 0;\n }\n\n if (!item) {\n item = /** @type {OffsetInfo} */ (offsets.pop());\n item.offset += item.matchedLine.length;\n }\n\n if (alreadyIncluded) {\n console.log(`Rule name is already present in ${checkName}.`);\n } else {\n readme = readme.slice(0, item.offset) +\n (item.offset ? '\\n' : '') +\n newLine +\n (item.offset ? '' : '\\n') +\n readme.slice(item.offset);\n\n await fs.writeFile(path, readme);\n }\n };\n\n // await replaceInOrder({\n // checkName: 'README',\n // newLine: `{\"gitdown\": \"include\", \"file\": \"./rules/${ruleName}.md\"}`,\n // oldRegex: /\\n\\{\"gitdown\": \"include\", \"file\": \".\\/rules\\/(?<oldRule>[^.]*).md\"\\}/gv,\n // path: './.README/README.md',\n // });\n\n await replaceInOrder({\n checkName: 'index import',\n newLine: `import ${camelCasedRuleName} from './rules/${camelCasedRuleName}.js';`,\n oldIsCamel: true,\n oldRegex: /\\nimport (?<oldRule>[^ ]*) from '.\\/rules\\/\\1\\.js';/gv,\n path: './src/index-cjs.js',\n });\n\n await replaceInOrder({\n checkName: 'index recommended',\n newLine: `${' '.repeat(6)}'jsdoc/${ruleName}': ${recommended ? 'warnOrError' : '\\'off\\''},`,\n oldRegex: /\\n\\s{6}'jsdoc\\/(?<oldRule>[^']*)': .*?,/gv,\n path: './src/index-cjs.js',\n });\n\n await replaceInOrder({\n checkName: 'index rules',\n newLine: `${' '.repeat(2)}'${ruleName}': ${camelCasedRuleName},`,\n oldRegex: /\\n\\s{2}'(?<oldRule>[^']*)': [^,]*,/gv,\n path: './src/index-cjs.js',\n });\n\n await import('./buildEntryFileForTS.js');\n\n await import('./generateDocs.js');\n\n /*\n console.log('Paths to open for further editing\\n');\n console.log(`open ${ruleReadmePath}`);\n console.log(`open ${rulePath}`);\n console.log(`open ${ruleTestPath}\\n`);\n */\n\n // Set chdir as somehow still in operation from other test\n process.chdir(resolve(import.meta.dirname, '../../'));\n await open([\n // Could even add editor line column numbers like `${rulePath}:1:1`\n ruleReadmePath,\n ruleTestPath,\n rulePath,\n ]);\n})();\n"],"mappings":"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","ignoreList":[]}
@@ -56,6 +56,7 @@ var _requireReturns = _interopRequireDefault(require("./rules/requireReturns.cjs
56
56
  var _requireReturnsCheck = _interopRequireDefault(require("./rules/requireReturnsCheck.cjs"));
57
57
  var _requireReturnsDescription = _interopRequireDefault(require("./rules/requireReturnsDescription.cjs"));
58
58
  var _requireReturnsType = _interopRequireDefault(require("./rules/requireReturnsType.cjs"));
59
+ var _requireTags = _interopRequireDefault(require("./rules/requireTags.cjs"));
59
60
  var _requireTemplate = _interopRequireDefault(require("./rules/requireTemplate.cjs"));
60
61
  var _requireThrows = _interopRequireDefault(require("./rules/requireThrows.cjs"));
61
62
  var _requireYields = _interopRequireDefault(require("./rules/requireYields.cjs"));
@@ -174,6 +175,7 @@ index.rules = {
174
175
  'require-returns-check': _requireReturnsCheck.default,
175
176
  'require-returns-description': _requireReturnsDescription.default,
176
177
  'require-returns-type': _requireReturnsType.default,
178
+ 'require-tags': _requireTags.default,
177
179
  'require-template': _requireTemplate.default,
178
180
  'require-throws': _requireThrows.default,
179
181
  'require-throws-description': (0, _buildForbidRuleDefinition.buildForbidRuleDefinition)({
@@ -289,6 +291,7 @@ const createRecommendedRuleset = (warnOrError, flatName) => {
289
291
  'jsdoc/require-returns-check': warnOrError,
290
292
  'jsdoc/require-returns-description': warnOrError,
291
293
  'jsdoc/require-returns-type': warnOrError,
294
+ 'jsdoc/require-tags': 'off',
292
295
  'jsdoc/require-template': 'off',
293
296
  'jsdoc/require-throws': 'off',
294
297
  'jsdoc/require-throws-description': 'off',