eslint-plugin-jsdoc 37.3.0 → 37.5.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.
Files changed (55) hide show
  1. package/README.md +122 -8
  2. package/dist/alignTransform.js.map +1 -1
  3. package/dist/bin/generateRule.js.map +1 -1
  4. package/dist/exportParser.js.map +1 -1
  5. package/dist/generateRule.js.map +1 -1
  6. package/dist/getDefaultTagStructureForMode.js.map +1 -1
  7. package/dist/index.js.map +1 -1
  8. package/dist/iterateJsdoc.js.map +1 -1
  9. package/dist/jsdocUtils.js.map +1 -1
  10. package/dist/rules/checkAccess.js.map +1 -1
  11. package/dist/rules/checkExamples.js +2 -2
  12. package/dist/rules/checkExamples.js.map +1 -1
  13. package/dist/rules/checkIndentation.js.map +1 -1
  14. package/dist/rules/checkLineAlignment.js.map +1 -1
  15. package/dist/rules/checkParamNames.js.map +1 -1
  16. package/dist/rules/checkPropertyNames.js.map +1 -1
  17. package/dist/rules/checkSyntax.js.map +1 -1
  18. package/dist/rules/checkTagNames.js.map +1 -1
  19. package/dist/rules/checkTypes.js.map +1 -1
  20. package/dist/rules/emptyTags.js.map +1 -1
  21. package/dist/rules/matchDescription.js +1 -1
  22. package/dist/rules/matchDescription.js.map +1 -1
  23. package/dist/rules/matchName.js.map +1 -1
  24. package/dist/rules/multilineBlocks.js.map +1 -1
  25. package/dist/rules/newlineAfterDescription.js.map +1 -1
  26. package/dist/rules/noBadBlocks.js.map +1 -1
  27. package/dist/rules/noDefaults.js.map +1 -1
  28. package/dist/rules/noMissingSyntax.js.map +1 -1
  29. package/dist/rules/noMultiAsterisks.js +25 -5
  30. package/dist/rules/noMultiAsterisks.js.map +1 -1
  31. package/dist/rules/noRestrictedSyntax.js.map +1 -1
  32. package/dist/rules/noTypes.js.map +1 -1
  33. package/dist/rules/noUndefinedTypes.js.map +1 -1
  34. package/dist/rules/requireAsteriskPrefix.js.map +1 -1
  35. package/dist/rules/requireDescription.js.map +1 -1
  36. package/dist/rules/requireDescriptionCompleteSentence.js.map +1 -1
  37. package/dist/rules/requireExample.js.map +1 -1
  38. package/dist/rules/requireFileOverview.js.map +1 -1
  39. package/dist/rules/requireHyphenBeforeParamDescription.js.map +1 -1
  40. package/dist/rules/requireJsdoc.js.map +1 -1
  41. package/dist/rules/requireParam.js.map +1 -1
  42. package/dist/rules/requireProperty.js.map +1 -1
  43. package/dist/rules/requireReturns.js.map +1 -1
  44. package/dist/rules/requireReturnsCheck.js +9 -2
  45. package/dist/rules/requireReturnsCheck.js.map +1 -1
  46. package/dist/rules/requireReturnsDescription.js.map +1 -1
  47. package/dist/rules/requireThrows.js +4 -0
  48. package/dist/rules/requireThrows.js.map +1 -1
  49. package/dist/rules/requireYields.js.map +1 -1
  50. package/dist/rules/requireYieldsCheck.js +8 -0
  51. package/dist/rules/requireYieldsCheck.js.map +1 -1
  52. package/dist/rules/tagLines.js.map +1 -1
  53. package/dist/rules/validTypes.js.map +1 -1
  54. package/dist/tagNames.js.map +1 -1
  55. package/package.json +14 -13
package/README.md CHANGED
@@ -7315,6 +7315,14 @@ function quux (foo) {
7315
7315
  * @param enabled `true` to enable, `false` to disable. Default: `true`.
7316
7316
  */
7317
7317
  // "jsdoc/match-description": ["error"|"warn", {"contexts":["any"],"mainDescription":"/^[A-Z`-].*\\.$/us","matchDescription":"^([A-Z`-].*(\\.|:)|-\\s.*)$","tags":{"param":true,"returns":true}}]
7318
+
7319
+ /**
7320
+ * @constructor
7321
+ * @todo Ok.
7322
+ */
7323
+ function quux () {
7324
+ }
7325
+ // "jsdoc/match-description": ["error"|"warn", {"mainDescription":false,"tags":{"todo":true}}]
7318
7326
  ````
7319
7327
 
7320
7328
 
@@ -8162,7 +8170,8 @@ Defaults to `['ts-check', 'ts-expect-error', 'ts-ignore', 'ts-nocheck']`
8162
8170
  ##### <code>preventAllMultiAsteriskBlocks</code>
8163
8171
 
8164
8172
  A boolean (defaulting to `false`) which if `true` will prevent all
8165
- multi-asterisked blocks even those without apparent tag content.
8173
+ JSDoc-like blocks with more than two initial asterisks even those without
8174
+ apparent tag content.
8166
8175
 
8167
8176
  |||
8168
8177
  |---|---|
@@ -8703,6 +8712,17 @@ and that rule is for catching blocks which only seem like jsdoc).
8703
8712
  <a name="eslint-plugin-jsdoc-rules-no-multi-asterisks-options-18"></a>
8704
8713
  #### Options
8705
8714
 
8715
+ <a name="eslint-plugin-jsdoc-rules-no-multi-asterisks-options-18-allowwhitespace-defaults-to-false"></a>
8716
+ ##### <code>allowWhitespace</code> (defaults to <code>false</code>)
8717
+
8718
+ Set to `true` if you wish to allow asterisks after a space (as with Markdown):
8719
+
8720
+ ```js
8721
+ /**
8722
+ * *bold* text
8723
+ */
8724
+ ```
8725
+
8706
8726
  <a name="eslint-plugin-jsdoc-rules-no-multi-asterisks-options-18-preventatmiddlelines-defaults-to-true"></a>
8707
8727
  ##### <code>preventAtMiddleLines</code> (defaults to <code>true</code>)
8708
8728
 
@@ -8814,6 +8834,25 @@ The following patterns are considered problems:
8814
8834
  * */
8815
8835
  // "jsdoc/no-multi-asterisks": ["error"|"warn", {"preventAtEnd":true}]
8816
8836
  // Message: Should be no multiple asterisks on end lines.
8837
+
8838
+ /**
8839
+ * The method does 2 things:
8840
+ * * Thing 1
8841
+ * * Thing 2
8842
+ */
8843
+ // "jsdoc/no-multi-asterisks": ["error"|"warn", {"allowWhitespace":false}]
8844
+ // Message: Should be no multiple asterisks on middle lines.
8845
+
8846
+ /**
8847
+ * This muti-line comment contains some
8848
+ * *non-standard bold* syntax
8849
+ */
8850
+ // "jsdoc/no-multi-asterisks": ["error"|"warn", {"allowWhitespace":false}]
8851
+ // Message: Should be no multiple asterisks on middle lines.
8852
+
8853
+ /** Desc. **/
8854
+ // "jsdoc/no-multi-asterisks": ["error"|"warn", {"allowWhitespace":true}]
8855
+ // Message: Should be no multiple asterisks on end lines.
8817
8856
  ````
8818
8857
 
8819
8858
  The following patterns are not considered problems:
@@ -8891,6 +8930,25 @@ function foo() {
8891
8930
  *
8892
8931
  * **Bold example:** Hi there.
8893
8932
  */
8933
+
8934
+ /**
8935
+ * The method does 2 things:
8936
+ * * Thing 1
8937
+ * * Thing 2
8938
+ */
8939
+ // "jsdoc/no-multi-asterisks": ["error"|"warn", {"allowWhitespace":true}]
8940
+
8941
+ /**
8942
+ * This muti-line comment contains some
8943
+ * *non-standard bold* syntax
8944
+ */
8945
+ // "jsdoc/no-multi-asterisks": ["error"|"warn", {"allowWhitespace":true}]
8946
+
8947
+ /** abc */
8948
+ function foo() {
8949
+ //
8950
+ }
8951
+ // "jsdoc/no-multi-asterisks": ["error"|"warn", {"allowWhitespace":true}]
8894
8952
  ````
8895
8953
 
8896
8954
 
@@ -16507,6 +16565,22 @@ async function foo() {
16507
16565
  function quux () {}
16508
16566
  // "jsdoc/require-returns-check": ["error"|"warn", {"reportMissingReturnForUndefinedTypes":true}]
16509
16567
  // Message: JSDoc @returns declaration present but return expression not available in function.
16568
+
16569
+ /**
16570
+ * @returns {never} Foo.
16571
+ */
16572
+ function quux () {
16573
+ return undefined;
16574
+ }
16575
+ // Message: JSDoc @returns declaration set with "never" but return expression is present in function.
16576
+
16577
+ /**
16578
+ * @returns {never}
16579
+ */
16580
+ function quux (foo) {
16581
+ return foo;
16582
+ }
16583
+ // Message: JSDoc @returns declaration set with "never" but return expression is present in function.
16510
16584
  ````
16511
16585
 
16512
16586
  The following patterns are not considered problems:
@@ -16643,13 +16717,6 @@ function quux () {
16643
16717
  function quux () {
16644
16718
  }
16645
16719
 
16646
- /**
16647
- * @returns {never} Foo.
16648
- */
16649
- function quux () {
16650
- return undefined;
16651
- }
16652
-
16653
16720
  /**
16654
16721
  * @returns {void} Foo.
16655
16722
  */
@@ -18445,6 +18512,14 @@ const directThrowAfterArrow = (b) => {
18445
18512
  return a;
18446
18513
  };
18447
18514
  // Message: Missing JSDoc @throws declaration.
18515
+
18516
+ /**
18517
+ * @throws {never}
18518
+ */
18519
+ function quux (foo) {
18520
+ throw new Error('err')
18521
+ }
18522
+ // Message: JSDoc @throws declaration set to "never" but throw value found.
18448
18523
  ````
18449
18524
 
18450
18525
  The following patterns are not considered problems:
@@ -18466,6 +18541,13 @@ function quux (foo) {
18466
18541
  } catch(e) {}
18467
18542
  }
18468
18543
 
18544
+ /**
18545
+ * @throws {object}
18546
+ */
18547
+ function quux (foo) {
18548
+ throw new Error('err')
18549
+ }
18550
+
18469
18551
  /**
18470
18552
  * @inheritdoc
18471
18553
  */
@@ -18509,6 +18591,12 @@ const nested = () => () => {throw new Error('oops');};
18509
18591
  async function foo() {
18510
18592
  throw Error("bar");
18511
18593
  }
18594
+
18595
+ /**
18596
+ * @throws {never}
18597
+ */
18598
+ function quux (foo) {
18599
+ }
18512
18600
  ````
18513
18601
 
18514
18602
 
@@ -19493,6 +19581,23 @@ async function * quux() {}
19493
19581
  */
19494
19582
  const quux = async function * () {}
19495
19583
  // Message: JSDoc @yields declaration present but yield expression not available in function.
19584
+
19585
+ /**
19586
+ * @yields {never} Foo.
19587
+ */
19588
+ function * quux () {
19589
+ yield 5;
19590
+ }
19591
+ // Message: JSDoc @yields declaration set with "never" but yield expression is present in function.
19592
+
19593
+ /**
19594
+ * @next {never}
19595
+ */
19596
+ function * quux (foo) {
19597
+ const a = yield;
19598
+ }
19599
+ // "jsdoc/require-yields-check": ["error"|"warn", {"next":true}]
19600
+ // Message: JSDoc @next declaration set with "never" but yield expression with return value is present in function.
19496
19601
  ````
19497
19602
 
19498
19603
  The following patterns are not considered problems:
@@ -20904,6 +21009,15 @@ class quux {}
20904
21009
  function quux() {
20905
21010
  }
20906
21011
  // Settings: {"jsdoc":{"mode":"closure"}}
21012
+
21013
+ /**
21014
+ * @param {string} id
21015
+ * @param {Object} options
21016
+ * @param {boolean} options.isSet
21017
+ * @param {string} options.module
21018
+ */
21019
+ function quux ( id, options ) {
21020
+ }
20907
21021
  ````
20908
21022
 
20909
21023
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/alignTransform.js"],"names":["rewireSource","util","zeroWidth","name","start","tag","type","shouldAlign","tags","index","source","tokens","replace","includesTag","includes","iterator","previousTag","getWidth","width","Math","max","length","delimiter","Markers","space","len","padStart","alignTransform","customSpacings","indent","preserveMainDescriptionPostDelimiter","intoTags","alignTokens","nothingAfter","delim","description","postName","postType","postTag","spacings","postDelimiter","update","line","isEmpty","end","fields","reduce","map"],"mappings":"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","sourcesContent":["/**\n * Transform based on https://github.com/syavorsky/comment-parser/blob/master/src/transforms/align.ts\n *\n * It contains some customizations to align based on the tags, and some custom options.\n */\n\nimport {\n\n // `comment-parser/primitives` export\n Markers,\n util,\n} from 'comment-parser';\n\nconst {rewireSource} = util;\n\nconst zeroWidth = {\n name: 0,\n start: 0,\n tag: 0,\n type: 0,\n};\n\nconst shouldAlign = (tags, index, source) => {\n const tag = source[index].tokens.tag.replace('@', '');\n const includesTag = tags.includes(tag);\n\n if (includesTag) {\n return true;\n }\n\n if (tag !== '') {\n return false;\n }\n\n for (let iterator = index; iterator >= 0; iterator--) {\n const previousTag = source[iterator].tokens.tag.replace('@', '');\n\n if (previousTag !== '') {\n if (tags.includes(previousTag)) {\n return true;\n }\n\n return false;\n }\n }\n\n return true;\n};\n\nconst getWidth = (tags) => {\n return (width, {tokens}, index, source) => {\n if (!shouldAlign(tags, index, source)) {\n return width;\n }\n\n return {\n name: Math.max(width.name, tokens.name.length),\n start: tokens.delimiter === Markers.start ? tokens.start.length : width.start,\n tag: Math.max(width.tag, tokens.tag.length),\n type: Math.max(width.type, tokens.type.length),\n };\n };\n};\n\nconst space = (len) => {\n return ''.padStart(len, ' ');\n};\n\nconst alignTransform = ({\n customSpacings,\n tags,\n indent,\n preserveMainDescriptionPostDelimiter,\n}) => {\n let intoTags = false;\n let width;\n\n const alignTokens = (tokens) => {\n const nothingAfter = {\n delim: false,\n name: false,\n tag: false,\n type: false,\n };\n\n if (tokens.description === '') {\n nothingAfter.name = true;\n tokens.postName = '';\n\n if (tokens.name === '') {\n nothingAfter.type = true;\n tokens.postType = '';\n\n if (tokens.type === '') {\n nothingAfter.tag = true;\n tokens.postTag = '';\n\n /* istanbul ignore next: Never happens because the !intoTags return. But it's here for consistency with the original align transform */\n if (tokens.tag === '') {\n nothingAfter.delim = true;\n }\n }\n }\n }\n\n // Todo: Avoid fixing alignment of blocks with multiline wrapping of type\n if (tokens.tag === '' && tokens.type) {\n return tokens;\n }\n\n const spacings = {\n postDelimiter: customSpacings?.postDelimiter || 1,\n postName: customSpacings?.postName || 1,\n postTag: customSpacings?.postTag || 1,\n postType: customSpacings?.postType || 1,\n };\n\n tokens.postDelimiter = nothingAfter.delim ? '' : space(spacings.postDelimiter);\n\n if (!nothingAfter.tag) {\n tokens.postTag = space(width.tag - tokens.tag.length + spacings.postTag);\n }\n\n if (!nothingAfter.type) {\n tokens.postType = space(width.type - tokens.type.length + spacings.postType);\n }\n\n if (!nothingAfter.name) {\n // If post name is empty for all lines (name width 0), don't add post name spacing.\n tokens.postName = width.name === 0 ? '' : space(width.name - tokens.name.length + spacings.postName);\n }\n\n return tokens;\n };\n\n const update = (line, index, source) => {\n const tokens = {...line.tokens};\n if (tokens.tag !== '') {\n intoTags = true;\n }\n\n const isEmpty =\n tokens.tag === '' &&\n tokens.name === '' &&\n tokens.type === '' &&\n tokens.description === '';\n\n // dangling '*/'\n if (tokens.end === Markers.end && isEmpty) {\n tokens.start = indent + ' ';\n\n return {\n ...line,\n tokens,\n };\n }\n\n /* eslint-disable indent */\n switch (tokens.delimiter) {\n case Markers.start:\n tokens.start = indent;\n break;\n case Markers.delim:\n tokens.start = indent + ' ';\n break;\n default:\n tokens.delimiter = '';\n\n // compensate delimiter\n tokens.start = indent + ' ';\n }\n /* eslint-enable */\n\n if (!intoTags) {\n if (tokens.description === '') {\n tokens.postDelimiter = '';\n } else if (!preserveMainDescriptionPostDelimiter) {\n tokens.postDelimiter = ' ';\n }\n\n return {\n ...line,\n tokens,\n };\n }\n\n // Not align.\n if (!shouldAlign(tags, index, source)) {\n return {\n ...line,\n tokens,\n };\n }\n\n return {\n ...line,\n tokens: alignTokens(tokens),\n };\n };\n\n return ({source, ...fields}) => {\n width = source.reduce(getWidth(tags), {...zeroWidth});\n\n return rewireSource({\n ...fields,\n source: source.map((line, index) => {\n return update(line, index, source);\n }),\n });\n };\n};\n\nexport default alignTransform;\n"],"file":"alignTransform.js"}
1
+ {"version":3,"sources":["../src/alignTransform.js"],"names":["rewireSource","util","zeroWidth","name","start","tag","type","shouldAlign","tags","index","source","tokens","replace","includesTag","includes","iterator","previousTag","getWidth","width","Math","max","length","delimiter","Markers","space","len","padStart","alignTransform","customSpacings","indent","preserveMainDescriptionPostDelimiter","intoTags","alignTokens","nothingAfter","delim","description","postName","postType","postTag","spacings","postDelimiter","update","line","isEmpty","end","fields","reduce","map"],"mappings":"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","sourcesContent":["/**\n * Transform based on https://github.com/syavorsky/comment-parser/blob/master/src/transforms/align.ts\n *\n * It contains some customizations to align based on the tags, and some custom options.\n */\n\nimport {\n\n // `comment-parser/primitives` export\n Markers,\n util,\n} from 'comment-parser';\n\nconst {\n rewireSource,\n} = util;\n\nconst zeroWidth = {\n name: 0,\n start: 0,\n tag: 0,\n type: 0,\n};\n\nconst shouldAlign = (tags, index, source) => {\n const tag = source[index].tokens.tag.replace('@', '');\n const includesTag = tags.includes(tag);\n\n if (includesTag) {\n return true;\n }\n\n if (tag !== '') {\n return false;\n }\n\n for (let iterator = index; iterator >= 0; iterator--) {\n const previousTag = source[iterator].tokens.tag.replace('@', '');\n\n if (previousTag !== '') {\n if (tags.includes(previousTag)) {\n return true;\n }\n\n return false;\n }\n }\n\n return true;\n};\n\nconst getWidth = (tags) => {\n return (width, {\n tokens,\n }, index, source) => {\n if (!shouldAlign(tags, index, source)) {\n return width;\n }\n\n return {\n name: Math.max(width.name, tokens.name.length),\n start: tokens.delimiter === Markers.start ? tokens.start.length : width.start,\n tag: Math.max(width.tag, tokens.tag.length),\n type: Math.max(width.type, tokens.type.length),\n };\n };\n};\n\nconst space = (len) => {\n return ''.padStart(len, ' ');\n};\n\nconst alignTransform = ({\n customSpacings,\n tags,\n indent,\n preserveMainDescriptionPostDelimiter,\n}) => {\n let intoTags = false;\n let width;\n\n const alignTokens = (tokens) => {\n const nothingAfter = {\n delim: false,\n name: false,\n tag: false,\n type: false,\n };\n\n if (tokens.description === '') {\n nothingAfter.name = true;\n tokens.postName = '';\n\n if (tokens.name === '') {\n nothingAfter.type = true;\n tokens.postType = '';\n\n if (tokens.type === '') {\n nothingAfter.tag = true;\n tokens.postTag = '';\n\n /* istanbul ignore next: Never happens because the !intoTags return. But it's here for consistency with the original align transform */\n if (tokens.tag === '') {\n nothingAfter.delim = true;\n }\n }\n }\n }\n\n // Todo: Avoid fixing alignment of blocks with multiline wrapping of type\n if (tokens.tag === '' && tokens.type) {\n return tokens;\n }\n\n const spacings = {\n postDelimiter: customSpacings?.postDelimiter || 1,\n postName: customSpacings?.postName || 1,\n postTag: customSpacings?.postTag || 1,\n postType: customSpacings?.postType || 1,\n };\n\n tokens.postDelimiter = nothingAfter.delim ? '' : space(spacings.postDelimiter);\n\n if (!nothingAfter.tag) {\n tokens.postTag = space(width.tag - tokens.tag.length + spacings.postTag);\n }\n\n if (!nothingAfter.type) {\n tokens.postType = space(width.type - tokens.type.length + spacings.postType);\n }\n\n if (!nothingAfter.name) {\n // If post name is empty for all lines (name width 0), don't add post name spacing.\n tokens.postName = width.name === 0 ? '' : space(width.name - tokens.name.length + spacings.postName);\n }\n\n return tokens;\n };\n\n const update = (line, index, source) => {\n const tokens = {\n ...line.tokens,\n };\n if (tokens.tag !== '') {\n intoTags = true;\n }\n\n const isEmpty =\n tokens.tag === '' &&\n tokens.name === '' &&\n tokens.type === '' &&\n tokens.description === '';\n\n // dangling '*/'\n if (tokens.end === Markers.end && isEmpty) {\n tokens.start = indent + ' ';\n\n return {\n ...line,\n tokens,\n };\n }\n\n /* eslint-disable indent */\n switch (tokens.delimiter) {\n case Markers.start:\n tokens.start = indent;\n break;\n case Markers.delim:\n tokens.start = indent + ' ';\n break;\n default:\n tokens.delimiter = '';\n\n // compensate delimiter\n tokens.start = indent + ' ';\n }\n /* eslint-enable */\n\n if (!intoTags) {\n if (tokens.description === '') {\n tokens.postDelimiter = '';\n } else if (!preserveMainDescriptionPostDelimiter) {\n tokens.postDelimiter = ' ';\n }\n\n return {\n ...line,\n tokens,\n };\n }\n\n // Not align.\n if (!shouldAlign(tags, index, source)) {\n return {\n ...line,\n tokens,\n };\n }\n\n return {\n ...line,\n tokens: alignTokens(tokens),\n };\n };\n\n return ({\n source,\n ...fields\n }) => {\n width = source.reduce(getWidth(tags), {\n ...zeroWidth,\n });\n\n return rewireSource({\n ...fields,\n source: source.map((line, index) => {\n return update(line, index, source);\n }),\n });\n };\n};\n\nexport default alignTransform;\n"],"file":"alignTransform.js"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/bin/generateRule.js"],"names":["ruleName","options","process","argv","recommended","includes","console","error","test","ruleNamesPath","ruleNames","JSON","parse","fs","readFile","push","sort","writeFile","stringify","log","ruleTemplate","camelCasedRuleName","rulePath","ruleTestTemplate","ruleTestPath","ruleReadmeTemplate","ruleReadmePath","replaceInOrder","path","oldRegex","checkName","newLine","oldIsCamel","offsets","readme","replace","matchedLine","n1","offset","str","oldRule","oldRuleB","alreadyIncluded","itemIndex","findIndex","item","undefined","pop","length","slice","repeat","chdir","__dirname"],"mappings":"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","sourcesContent":["/* eslint-disable no-console -- CLI */\n\n/**\n * @example\n *\n * ```shell\n * npm run create-rule my-new-rule --recommended\n * ```\n */\n\nimport {\n existsSync,\n} from 'fs';\nimport fs from 'fs/promises';\nimport {\n resolve,\n} from 'path';\nimport camelCase from 'camelcase';\nimport open from 'open-editor';\n\n// Todo: Would ideally have prompts, e.g., to ask for whether type was problem/layout, etc.\n\nconst [, , ruleName, ...options] = 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]/u).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 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';\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#eslint-plugin-jsdoc-rules-${ruleName}',\n },\n schema: [\n {\n additionalProperies: 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 line: '',\n message: '',\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<!-- assertions ${camelCasedRuleName} -->\n`;\n\n const ruleReadmePath = `./.README/rules/${ruleName}.md`;\n if (!existsSync(ruleReadmePath)) {\n await fs.writeFile(ruleReadmePath, ruleReadmeTemplate);\n }\n\n const replaceInOrder = async ({path, oldRegex, checkName, newLine, oldIsCamel}) => {\n const offsets = [];\n\n let readme = await fs.readFile(path, 'utf8');\n readme.replace(\n oldRegex,\n (matchedLine, n1, offset, str, {oldRule}) => {\n offsets.push({\n matchedLine,\n offset,\n oldRule,\n });\n },\n );\n\n offsets.sort(({oldRule}, {oldRule: oldRuleB}) => {\n // eslint-disable-next-line no-extra-parens\n return oldRule < oldRuleB ? -1 : (oldRule > oldRuleB ? 1 : 0);\n });\n\n let alreadyIncluded = false;\n const itemIndex = offsets.findIndex(({oldRule}) => {\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 = 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\"\\}/gu,\n path: './.README/README.md',\n });\n\n await replaceInOrder({\n checkName: 'index import',\n newLine: `import ${camelCasedRuleName} from './rules/${camelCasedRuleName}';`,\n oldIsCamel: true,\n oldRegex: /\\nimport (?<oldRule>[^ ]*) from '.\\/rules\\/\\1';/gu,\n path: './src/index.js',\n });\n\n await replaceInOrder({\n checkName: 'index recommended',\n newLine: `${' '.repeat(8)}'jsdoc/${ruleName}': '${recommended ? 'warn' : 'off'}',`,\n oldRegex: /\\n\\s{8}'jsdoc\\/(?<oldRule>[^']*)': '[^']*',/gu,\n path: './src/index.js',\n });\n\n await replaceInOrder({\n checkName: 'index rules',\n newLine: `${' '.repeat(4)}'${ruleName}': ${camelCasedRuleName},`,\n oldRegex: /\\n\\s{4}'(?<oldRule>[^']*)': [^,]*,/gu,\n path: './src/index.js',\n });\n\n await import('./generateReadme.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(__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"],"file":"generateRule.js"}
1
+ {"version":3,"sources":["../../src/bin/generateRule.js"],"names":["ruleName","options","process","argv","recommended","includes","console","error","test","ruleNamesPath","ruleNames","JSON","parse","fs","readFile","push","sort","writeFile","stringify","log","ruleTemplate","camelCasedRuleName","rulePath","ruleTestTemplate","ruleTestPath","ruleReadmeTemplate","ruleReadmePath","replaceInOrder","path","oldRegex","checkName","newLine","oldIsCamel","offsets","readme","replace","matchedLine","n1","offset","str","oldRule","oldRuleB","alreadyIncluded","itemIndex","findIndex","item","undefined","pop","length","slice","repeat","chdir","__dirname"],"mappings":";;AAUA;;AAGA;;AACA;;AAGA;;AACA;;;;;;;;AAEA;AAEA,MAAM,IACAA,QADA,EAEJ,GAAGC,OAFC,IAGFC,OAAO,CAACC,IAHZ;AAKA,MAAMC,WAAW,GAAGH,OAAO,CAACI,QAAR,CAAiB,eAAjB,CAApB;;AAEA,CAAC,YAAY;AACX,MAAI,CAACL,QAAL,EAAe;AACbM,IAAAA,OAAO,CAACC,KAAR,CAAc,2BAAd;AAEA;AACD;;AAED,MAAK,QAAD,CAAWC,IAAX,CAAgBR,QAAhB,CAAJ,EAA+B;AAC7BM,IAAAA,OAAO,CAACC,KAAR,CAAc,+CAAd;AAEA;AACD;;AAED,QAAME,aAAa,GAAG,6BAAtB;AACA,QAAMC,SAAS,GAAGC,IAAI,CAACC,KAAL,CAAW,MAAMC,kBAAGC,QAAH,CACjCL,aADiC,EAClB,MADkB,CAAjB,CAAlB;;AAGA,MAAI,CAACC,SAAS,CAACL,QAAV,CAAmBL,QAAnB,CAAL,EAAmC;AACjCU,IAAAA,SAAS,CAACK,IAAV,CAAef,QAAf;AACAU,IAAAA,SAAS,CAACM,IAAV;AACD;;AAED,QAAMH,kBAAGI,SAAH,CAAaR,aAAb,EAA4BE,IAAI,CAACO,SAAL,CAAeR,SAAf,EAA0B,IAA1B,EAAgC,CAAhC,IAAqC,IAAjE,CAAN;AACAJ,EAAAA,OAAO,CAACa,GAAR,CAAY,WAAZ,EAAyBT,SAAzB;AAEA,QAAMU,YAAY,GAAI;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qFAAqFpB,QAAS;AAC9F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CA1BE;AA4BA,QAAMqB,kBAAkB,GAAG,wBAAUrB,QAAV,CAA3B;AAEA,QAAMsB,QAAQ,GAAI,eAAcD,kBAAmB,KAAnD;;AAEA,MAAI,CAAC,oBAAWC,QAAX,CAAL,EAA2B;AACzB,UAAMT,kBAAGI,SAAH,CAAaK,QAAb,EAAuBF,YAAvB,CAAN;AACD;;AAED,QAAMG,gBAAgB,GAAI;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAlBE;AAoBA,QAAMC,YAAY,GAAI,2BAA0BH,kBAAmB,KAAnE;;AACA,MAAI,CAAC,oBAAWG,YAAX,CAAL,EAA+B;AAC7B,UAAMX,kBAAGI,SAAH,CAAaO,YAAb,EAA2BD,gBAA3B,CAAN;AACD;;AAED,QAAME,kBAAkB,GAAI,SAAQzB,QAAS;AAC/C;AACA;AACA;AACA;AACA;AACA,eAAeI,WAAW,GAAG,MAAH,GAAY,OAAQ;AAC9C;AACA;AACA;AACA,kBAAkBiB,kBAAmB;AACrC,CAXE;AAaA,QAAMK,cAAc,GAAI,mBAAkB1B,QAAS,KAAnD;;AACA,MAAI,CAAC,oBAAW0B,cAAX,CAAL,EAAiC;AAC/B,UAAMb,kBAAGI,SAAH,CAAaS,cAAb,EAA6BD,kBAA7B,CAAN;AACD;;AAED,QAAME,cAAc,GAAG,OAAO;AAC5BC,IAAAA,IAD4B;AAE5BC,IAAAA,QAF4B;AAG5BC,IAAAA,SAH4B;AAI5BC,IAAAA,OAJ4B;AAK5BC,IAAAA;AAL4B,GAAP,KAMjB;AACJ,UAAMC,OAAO,GAAG,EAAhB;AAEA,QAAIC,MAAM,GAAG,MAAMrB,kBAAGC,QAAH,CAAYc,IAAZ,EAAkB,MAAlB,CAAnB;AACAM,IAAAA,MAAM,CAACC,OAAP,CACEN,QADF,EAEE,CAACO,WAAD,EAAcC,EAAd,EAAkBC,MAAlB,EAA0BC,GAA1B,EAA+B;AAC7BC,MAAAA;AAD6B,KAA/B,KAEM;AACJP,MAAAA,OAAO,CAAClB,IAAR,CAAa;AACXqB,QAAAA,WADW;AAEXE,QAAAA,MAFW;AAGXE,QAAAA;AAHW,OAAb;AAKD,KAVH;AAaAP,IAAAA,OAAO,CAACjB,IAAR,CAAa,CAAC;AACZwB,MAAAA;AADY,KAAD,EAEV;AACDA,MAAAA,OAAO,EAAEC;AADR,KAFU,KAIP;AACJ;AACA,aAAOD,OAAO,GAAGC,QAAV,GAAqB,CAAC,CAAtB,GAA2BD,OAAO,GAAGC,QAAV,GAAqB,CAArB,GAAyB,CAA3D;AACD,KAPD;AASA,QAAIC,eAAe,GAAG,KAAtB;AACA,UAAMC,SAAS,GAAGV,OAAO,CAACW,SAAR,CAAkB,CAAC;AACnCJ,MAAAA;AADmC,KAAD,KAE9B;AACJE,MAAAA,eAAe,KAAfA,eAAe,GAAKV,UAAU,GAAGX,kBAAkB,KAAKmB,OAA1B,GAAoCxC,QAAQ,KAAKwC,OAAhE,CAAf;AAEA,aAAOR,UAAU,GAAGX,kBAAkB,GAAGmB,OAAxB,GAAkCxC,QAAQ,GAAGwC,OAA9D;AACD,KANiB,CAAlB;AAOA,QAAIK,IAAI,GAAGF,SAAS,KAAKG,SAAd,IAA2Bb,OAAO,CAACU,SAAD,CAA7C;;AACA,QAAIE,IAAI,IAAIF,SAAS,KAAK,CAAtB,IAEF;AACAX,IAAAA,UAHF,EAIE;AACAa,MAAAA,IAAI,CAACP,MAAL,GAAc,CAAd;AACD;;AAED,QAAI,CAACO,IAAL,EAAW;AACTA,MAAAA,IAAI,GAAGZ,OAAO,CAACc,GAAR,EAAP;AACAF,MAAAA,IAAI,CAACP,MAAL,IAAeO,IAAI,CAACT,WAAL,CAAiBY,MAAhC;AACD;;AAED,QAAIN,eAAJ,EAAqB;AACnBpC,MAAAA,OAAO,CAACa,GAAR,CAAa,mCAAkCW,SAAU,GAAzD;AACD,KAFD,MAEO;AACLI,MAAAA,MAAM,GAAGA,MAAM,CAACe,KAAP,CAAa,CAAb,EAAgBJ,IAAI,CAACP,MAArB,KACEO,IAAI,CAACP,MAAL,GAAc,IAAd,GAAqB,EADvB,IAECP,OAFD,IAGEc,IAAI,CAACP,MAAL,GAAc,EAAd,GAAmB,IAHrB,IAICJ,MAAM,CAACe,KAAP,CAAaJ,IAAI,CAACP,MAAlB,CAJV;AAMA,YAAMzB,kBAAGI,SAAH,CAAaW,IAAb,EAAmBM,MAAnB,CAAN;AACD;AACF,GAjED;;AAmEA,QAAMP,cAAc,CAAC;AACnBG,IAAAA,SAAS,EAAE,QADQ;AAEnBC,IAAAA,OAAO,EAAG,2CAA0C/B,QAAS,OAF1C;AAGnB6B,IAAAA,QAAQ,EAAE,wEAHS;AAInBD,IAAAA,IAAI,EAAE;AAJa,GAAD,CAApB;AAOA,QAAMD,cAAc,CAAC;AACnBG,IAAAA,SAAS,EAAE,cADQ;AAEnBC,IAAAA,OAAO,EAAG,UAASV,kBAAmB,kBAAiBA,kBAAmB,IAFvD;AAGnBW,IAAAA,UAAU,EAAE,IAHO;AAInBH,IAAAA,QAAQ,EAAE,mDAJS;AAKnBD,IAAAA,IAAI,EAAE;AALa,GAAD,CAApB;AAQA,QAAMD,cAAc,CAAC;AACnBG,IAAAA,SAAS,EAAE,mBADQ;AAEnBC,IAAAA,OAAO,EAAG,GAAE,IAAImB,MAAJ,CAAW,CAAX,CAAc,UAASlD,QAAS,OAAMI,WAAW,GAAG,MAAH,GAAY,KAAM,IAF5D;AAGnByB,IAAAA,QAAQ,EAAE,+CAHS;AAInBD,IAAAA,IAAI,EAAE;AAJa,GAAD,CAApB;AAOA,QAAMD,cAAc,CAAC;AACnBG,IAAAA,SAAS,EAAE,aADQ;AAEnBC,IAAAA,OAAO,EAAG,GAAE,IAAImB,MAAJ,CAAW,CAAX,CAAc,IAAGlD,QAAS,MAAKqB,kBAAmB,GAF3C;AAGnBQ,IAAAA,QAAQ,EAAE,sCAHS;AAInBD,IAAAA,IAAI,EAAE;AAJa,GAAD,CAApB;AAOA,qEAAa,qBAAb;AAEA;AACF;AACA;AACA;AACA;AACA;AAEE;;AACA1B,EAAAA,OAAO,CAACiD,KAAR,CAAc,mBAAQC,SAAR,EAAmB,QAAnB,CAAd;AACA,QAAM,yBAAK,CACT;AACA1B,EAAAA,cAFS,EAGTF,YAHS,EAITF,QAJS,CAAL,CAAN;AAMD,CAzND","sourcesContent":["/* eslint-disable no-console -- CLI */\n\n/**\n * @example\n *\n * ```shell\n * npm run create-rule my-new-rule --recommended\n * ```\n */\n\nimport {\n existsSync,\n} from 'fs';\nimport fs from 'fs/promises';\nimport {\n resolve,\n} from 'path';\nimport camelCase from 'camelcase';\nimport open from 'open-editor';\n\n// Todo: Would ideally have prompts, e.g., to ask for whether 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]/u).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 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';\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#eslint-plugin-jsdoc-rules-${ruleName}',\n },\n schema: [\n {\n additionalProperies: 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 line: '',\n message: '',\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<!-- assertions ${camelCasedRuleName} -->\n`;\n\n const ruleReadmePath = `./.README/rules/${ruleName}.md`;\n if (!existsSync(ruleReadmePath)) {\n await fs.writeFile(ruleReadmePath, ruleReadmeTemplate);\n }\n\n const replaceInOrder = async ({\n path,\n oldRegex,\n checkName,\n newLine,\n oldIsCamel,\n }) => {\n const offsets = [];\n\n let readme = await fs.readFile(path, 'utf8');\n readme.replace(\n oldRegex,\n (matchedLine, n1, offset, str, {\n oldRule,\n }) => {\n offsets.push({\n matchedLine,\n offset,\n oldRule,\n });\n },\n );\n\n offsets.sort(({\n oldRule,\n }, {\n oldRule: oldRuleB,\n }) => {\n // eslint-disable-next-line no-extra-parens\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 = 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\"\\}/gu,\n path: './.README/README.md',\n });\n\n await replaceInOrder({\n checkName: 'index import',\n newLine: `import ${camelCasedRuleName} from './rules/${camelCasedRuleName}';`,\n oldIsCamel: true,\n oldRegex: /\\nimport (?<oldRule>[^ ]*) from '.\\/rules\\/\\1';/gu,\n path: './src/index.js',\n });\n\n await replaceInOrder({\n checkName: 'index recommended',\n newLine: `${' '.repeat(8)}'jsdoc/${ruleName}': '${recommended ? 'warn' : 'off'}',`,\n oldRegex: /\\n\\s{8}'jsdoc\\/(?<oldRule>[^']*)': '[^']*',/gu,\n path: './src/index.js',\n });\n\n await replaceInOrder({\n checkName: 'index rules',\n newLine: `${' '.repeat(4)}'${ruleName}': ${camelCasedRuleName},`,\n oldRegex: /\\n\\s{4}'(?<oldRule>[^']*)': [^,]*,/gu,\n path: './src/index.js',\n });\n\n await import('./generateReadme.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(__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"],"file":"generateRule.js"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/exportParser.js"],"names":["debug","createNode","props","getSymbolValue","symbol","type","value","getIdentifier","node","globals","scope","opts","simpleIdentifier","identifierLiteral","name","block","createSymbol","getSymbol","opt","obj","object","propertySymbol","property","computed","propertyValue","val","prototype","left","right","method","body","key","prop","properties","includes","propVal","createBlockSymbol","isGlobal","window","special","id","valueSymbol","initVariables","childNode","expression","declaration","declarations","initWindow","kind","mapVariables","isExport","ancestorsOnly","init","exported","ANONYMOUS_DEFAULT","specifier","specifiers","local","findNode","cache","blockCache","slice","push","propval","Object","values","Array","isArray","some","exportTypes","Set","ignorableNestedTypes","getExportAncestor","nde","idx","ignorableIfDeep","has","parent","canExportedByAncestorType","canExportChildrenType","isExportByAncestor","findExportedNode","isNodeExported","initModuleExports","module","exports","esm","parseRecursive","globalVars","parse","ast","isUncommentedExport","sourceCode","settings","exportNode","parseResult"],"mappings":"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","sourcesContent":["import {\n findJSDocComment,\n} from '@es-joy/jsdoccomment';\nimport debugModule from 'debug';\n\nconst debug = debugModule('requireExportJsdoc');\n\nconst createNode = function () {\n return {\n props: {},\n };\n};\n\nconst getSymbolValue = function (symbol) {\n /* istanbul ignore next */\n if (!symbol) {\n /* istanbul ignore next */\n return null;\n }\n\n /* istanbul ignore next */\n if (symbol.type === 'literal') {\n return symbol.value.value;\n }\n\n /* istanbul ignore next */\n return null;\n};\n\nconst getIdentifier = function (node, globals, scope, opts) {\n if (opts.simpleIdentifier) {\n // Type is Identier for noncomputed properties\n const identifierLiteral = createNode();\n identifierLiteral.type = 'literal';\n identifierLiteral.value = {value: node.name};\n\n return identifierLiteral;\n }\n\n /* istanbul ignore next */\n const block = scope || globals;\n\n // As scopes are not currently supported, they are not traversed upwards recursively\n if (block.props[node.name]) {\n return block.props[node.name];\n }\n\n // Seems this will only be entered once scopes added and entered\n /* istanbul ignore next */\n if (globals.props[node.name]) {\n return globals.props[node.name];\n }\n\n return null;\n};\n\nlet createSymbol = null;\n\n// eslint-disable-next-line complexity\nconst getSymbol = function (node, globals, scope, opt) {\n const opts = opt || {};\n /* istanbul ignore next */\n // eslint-disable-next-line default-case\n switch (node.type) {\n case 'Identifier': {\n return getIdentifier(node, globals, scope, opts);\n }\n\n case 'MemberExpression': {\n const obj = getSymbol(node.object, globals, scope, opts);\n const propertySymbol = getSymbol(node.property, globals, scope, {simpleIdentifier: !node.computed});\n const propertyValue = getSymbolValue(propertySymbol);\n\n /* istanbul ignore next */\n if (obj && propertyValue && obj.props[propertyValue]) {\n const block = obj.props[propertyValue];\n\n return block;\n }\n\n /*\n if (opts.createMissingProps && propertyValue) {\n obj.props[propertyValue] = createNode();\n\n return obj.props[propertyValue];\n }\n */\n /* istanbul ignore next */\n debug(`MemberExpression: Missing property ${node.property.name}`);\n\n /* istanbul ignore next */\n return null;\n }\n\n case 'TSTypeAliasDeclaration':\n case 'TSEnumDeclaration': case 'TSInterfaceDeclaration':\n case 'ClassDeclaration': case 'ClassExpression':\n case 'FunctionExpression': case 'FunctionDeclaration':\n case 'ArrowFunctionExpression': {\n const val = createNode();\n val.props.prototype = createNode();\n val.props.prototype.type = 'object';\n val.type = 'object';\n val.value = node;\n\n return val;\n }\n\n case 'AssignmentExpression': {\n return createSymbol(node.left, globals, node.right, scope, opts);\n }\n\n case 'ClassBody': {\n const val = createNode();\n for (const method of node.body) {\n val.props[method.key.name] = createNode();\n val.props[method.key.name].type = 'object';\n val.props[method.key.name].value = method.value;\n }\n\n val.type = 'object';\n val.value = node;\n\n return val;\n }\n\n case 'ObjectExpression': {\n const val = createNode();\n val.type = 'object';\n for (const prop of node.properties) {\n if ([\n // @typescript-eslint/parser, espree, acorn, etc.\n 'SpreadElement',\n\n // @babel/eslint-parser\n 'ExperimentalSpreadProperty',\n ].includes(prop.type)) {\n continue;\n }\n\n const propVal = getSymbol(prop.value, globals, scope, opts);\n /* istanbul ignore next */\n if (propVal) {\n val.props[prop.key.name] = propVal;\n }\n }\n\n return val;\n }\n\n case 'Literal': {\n const val = createNode();\n val.type = 'literal';\n val.value = node;\n\n return val;\n }\n }\n\n /* istanbul ignore next */\n return null;\n};\n\nconst createBlockSymbol = function (block, name, value, globals, isGlobal) {\n block.props[name] = value;\n if (isGlobal && globals.props.window && globals.props.window.special) {\n globals.props.window.props[name] = value;\n }\n};\n\ncreateSymbol = function (node, globals, value, scope, isGlobal) {\n const block = scope || globals;\n let symbol;\n // eslint-disable-next-line default-case\n switch (node.type) {\n case 'FunctionDeclaration':\n /* istanbul ignore next */\n // Fall through\n case 'TSEnumDeclaration': case 'TSInterfaceDeclaration':\n /* istanbul ignore next */\n // Fall through\n case 'TSTypeAliasDeclaration': case 'ClassDeclaration': {\n /* istanbul ignore next */\n if (node.id && node.id.type === 'Identifier') {\n return createSymbol(node.id, globals, node, globals);\n }\n\n /* istanbul ignore next */\n break;\n }\n\n case 'Identifier': {\n if (value) {\n const valueSymbol = getSymbol(value, globals, block);\n /* istanbul ignore next */\n if (valueSymbol) {\n createBlockSymbol(block, node.name, valueSymbol, globals, isGlobal);\n\n return block.props[node.name];\n }\n\n /* istanbul ignore next */\n debug('Identifier: Missing value symbol for %s', node.name);\n } else {\n createBlockSymbol(block, node.name, createNode(), globals, isGlobal);\n\n return block.props[node.name];\n }\n\n /* istanbul ignore next */\n break;\n }\n\n case 'MemberExpression': {\n symbol = getSymbol(node.object, globals, block);\n\n const propertySymbol = getSymbol(node.property, globals, block, {simpleIdentifier: !node.computed});\n const propertyValue = getSymbolValue(propertySymbol);\n if (symbol && propertyValue) {\n createBlockSymbol(symbol, propertyValue, getSymbol(value, globals, block), globals, isGlobal);\n\n return symbol.props[propertyValue];\n }\n\n /* istanbul ignore next */\n debug('MemberExpression: Missing symbol: %s', node.property.name);\n break;\n }\n }\n\n return null;\n};\n\n// Creates variables from variable definitions\nconst initVariables = function (node, globals, opts) {\n // eslint-disable-next-line default-case\n switch (node.type) {\n case 'Program': {\n for (const childNode of node.body) {\n initVariables(childNode, globals, opts);\n }\n\n break;\n }\n\n case 'ExpressionStatement': {\n initVariables(node.expression, globals, opts);\n break;\n }\n\n case 'VariableDeclaration': {\n for (const declaration of node.declarations) {\n // let and const\n const symbol = createSymbol(declaration.id, globals, null, globals);\n if (opts.initWindow && node.kind === 'var' && globals.props.window) {\n // If var, also add to window\n globals.props.window.props[declaration.id.name] = symbol;\n }\n }\n\n break;\n }\n\n case 'ExportNamedDeclaration': {\n if (node.declaration) {\n initVariables(node.declaration, globals, opts);\n }\n\n break;\n }\n }\n};\n\n// Populates variable maps using AST\n// eslint-disable-next-line complexity\nconst mapVariables = function (node, globals, opt, isExport) {\n /* istanbul ignore next */\n const opts = opt || {};\n /* istanbul ignore next */\n switch (node.type) {\n case 'Program': {\n if (opts.ancestorsOnly) {\n return false;\n }\n\n for (const childNode of node.body) {\n mapVariables(childNode, globals, opts);\n }\n\n break;\n }\n\n case 'ExpressionStatement': {\n mapVariables(node.expression, globals, opts);\n break;\n }\n\n case 'AssignmentExpression': {\n createSymbol(node.left, globals, node.right);\n break;\n }\n\n case 'VariableDeclaration': {\n for (const declaration of node.declarations) {\n const isGlobal = opts.initWindow && node.kind === 'var' && globals.props.window;\n const symbol = createSymbol(declaration.id, globals, declaration.init, globals, isGlobal);\n if (symbol && isExport) {\n symbol.exported = true;\n }\n }\n\n break;\n }\n\n case 'FunctionDeclaration': {\n /* istanbul ignore next */\n if (node.id.type === 'Identifier') {\n createSymbol(node.id, globals, node, globals, true);\n }\n\n break;\n }\n\n case 'ExportDefaultDeclaration': {\n const symbol = createSymbol(node.declaration, globals, node.declaration);\n if (symbol) {\n symbol.exported = true;\n } else if (!node.id) {\n globals.ANONYMOUS_DEFAULT = node.declaration;\n }\n\n break;\n }\n\n case 'ExportNamedDeclaration': {\n if (node.declaration) {\n if (node.declaration.type === 'VariableDeclaration') {\n mapVariables(node.declaration, globals, opts, true);\n } else {\n const symbol = createSymbol(node.declaration, globals, node.declaration);\n /* istanbul ignore next */\n if (symbol) {\n symbol.exported = true;\n }\n }\n }\n\n for (const specifier of node.specifiers) {\n mapVariables(specifier, globals, opts);\n }\n\n break;\n }\n\n case 'ExportSpecifier': {\n const symbol = getSymbol(node.local, globals, globals);\n /* istanbul ignore next */\n if (symbol) {\n symbol.exported = true;\n }\n\n break;\n }\n\n case 'ClassDeclaration': {\n createSymbol(node.id, globals, node.body, globals);\n break;\n }\n\n default: {\n /* istanbul ignore next */\n return false;\n }\n }\n\n return true;\n};\n\nconst findNode = function (node, block, cache) {\n let blockCache = cache || [];\n /* istanbul ignore next */\n if (!block || blockCache.includes(block)) {\n return false;\n }\n\n blockCache = blockCache.slice();\n blockCache.push(block);\n\n if (\n (block.type === 'object' || block.type === 'MethodDefinition') &&\n block.value === node\n ) {\n return true;\n }\n\n const {props = block.body} = block;\n for (const propval of Object.values(props || {})) {\n if (Array.isArray(propval)) {\n /* istanbul ignore if */\n if (propval.some((val) => {\n return findNode(node, val, blockCache);\n })) {\n return true;\n }\n } else if (findNode(node, propval, blockCache)) {\n return true;\n }\n }\n\n return false;\n};\n\nconst exportTypes = new Set(['ExportNamedDeclaration', 'ExportDefaultDeclaration']);\nconst ignorableNestedTypes = new Set([\n 'FunctionDeclaration', 'ArrowFunctionExpression', 'FunctionExpression',\n]);\nconst getExportAncestor = function (nde) {\n let node = nde;\n let idx = 0;\n const ignorableIfDeep = ignorableNestedTypes.has(nde?.type);\n while (node) {\n // Ignore functions nested more deeply than say `export default function () {}`\n if (idx >= 2 && ignorableIfDeep) {\n break;\n }\n\n if (exportTypes.has(node.type)) {\n return node;\n }\n\n node = node.parent;\n idx++;\n }\n\n return false;\n};\n\nconst canExportedByAncestorType = new Set([\n 'TSPropertySignature',\n 'TSMethodSignature',\n 'ClassProperty',\n 'Method',\n]);\n\nconst canExportChildrenType = new Set([\n 'TSInterfaceBody',\n 'TSInterfaceDeclaration',\n 'ClassDefinition',\n 'ClassExpression',\n 'Program',\n]);\n\nconst isExportByAncestor = function (nde) {\n if (!canExportedByAncestorType.has(nde.type)) {\n return false;\n }\n\n let node = nde.parent;\n while (node) {\n if (exportTypes.has(node.type)) {\n return node;\n }\n\n if (!canExportChildrenType.has(node.type)) {\n return false;\n }\n\n node = node.parent;\n }\n\n return false;\n};\n\nconst findExportedNode = function (block, node, cache) {\n /* istanbul ignore next */\n if (block === null) {\n return false;\n }\n\n const blockCache = cache || [];\n const {props} = block;\n for (const propval of Object.values(props)) {\n blockCache.push(propval);\n if (propval.exported && (node === propval.value || findNode(node, propval.value))) {\n return true;\n }\n\n // No need to check `propval` for exported nodes as ESM\n // exports are only global\n }\n\n return false;\n};\n\nconst isNodeExported = function (node, globals, opt) {\n if (\n opt.initModuleExports && globals.props.module && globals.props.module.props.exports &&\n findNode(node, globals.props.module.props.exports)\n ) {\n return true;\n }\n\n if (opt.initWindow && globals.props.window && findNode(node, globals.props.window)) {\n return true;\n }\n\n if (opt.esm && findExportedNode(globals, node)) {\n return true;\n }\n\n return false;\n};\n\nconst parseRecursive = function (node, globalVars, opts) {\n // Iterate from top using recursion - stop at first processed node from top\n if (node.parent && parseRecursive(node.parent, globalVars, opts)) {\n return true;\n }\n\n return mapVariables(node, globalVars, opts);\n};\n\nconst parse = function (ast, node, opt) {\n /* istanbul ignore next */\n const opts = opt || {\n ancestorsOnly: false,\n esm: true,\n initModuleExports: true,\n initWindow: true,\n };\n\n const globalVars = createNode();\n if (opts.initModuleExports) {\n globalVars.props.module = createNode();\n globalVars.props.module.props.exports = createNode();\n globalVars.props.exports = globalVars.props.module.props.exports;\n }\n\n if (opts.initWindow) {\n globalVars.props.window = createNode();\n globalVars.props.window.special = true;\n }\n\n if (opts.ancestorsOnly) {\n parseRecursive(node, globalVars, opts);\n } else {\n initVariables(ast, globalVars, opts);\n mapVariables(ast, globalVars, opts);\n }\n\n return {\n globalVars,\n };\n};\n\nconst isUncommentedExport = function (node, sourceCode, opt, settings) {\n // console.log({node});\n // Optimize with ancestor check for esm\n if (opt.esm) {\n const exportNode = getExportAncestor(node);\n\n // Is export node comment\n if (exportNode && !findJSDocComment(exportNode, sourceCode, settings)) {\n return true;\n }\n\n /**\n * Some typescript types are not in variable map, but inherit exported (interface property and method)\n */\n if (\n isExportByAncestor(node) &&\n !findJSDocComment(node, sourceCode, settings)\n ) {\n return true;\n }\n }\n\n const parseResult = parse(sourceCode.ast, node, opt);\n\n return isNodeExported(node, parseResult.globalVars, opt);\n};\n\nexport default {\n isUncommentedExport,\n parse,\n};\n"],"file":"exportParser.js"}
1
+ {"version":3,"sources":["../src/exportParser.js"],"names":["debug","createNode","props","getSymbolValue","symbol","type","value","getIdentifier","node","globals","scope","opts","simpleIdentifier","identifierLiteral","name","block","createSymbol","getSymbol","opt","obj","object","propertySymbol","property","computed","propertyValue","val","prototype","left","right","method","body","key","prop","properties","includes","propVal","createBlockSymbol","isGlobal","window","special","id","valueSymbol","initVariables","childNode","expression","declaration","declarations","initWindow","kind","mapVariables","isExport","ancestorsOnly","init","exported","ANONYMOUS_DEFAULT","specifier","specifiers","local","findNode","cache","blockCache","slice","push","propval","Object","values","Array","isArray","some","exportTypes","Set","ignorableNestedTypes","getExportAncestor","nde","idx","ignorableIfDeep","has","parent","canExportedByAncestorType","canExportChildrenType","isExportByAncestor","findExportedNode","isNodeExported","initModuleExports","module","exports","esm","parseRecursive","globalVars","parse","ast","isUncommentedExport","sourceCode","settings","exportNode","parseResult"],"mappings":"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","sourcesContent":["import {\n findJSDocComment,\n} from '@es-joy/jsdoccomment';\nimport debugModule from 'debug';\n\nconst debug = debugModule('requireExportJsdoc');\n\nconst createNode = function () {\n return {\n props: {},\n };\n};\n\nconst getSymbolValue = function (symbol) {\n /* istanbul ignore next */\n if (!symbol) {\n /* istanbul ignore next */\n return null;\n }\n\n /* istanbul ignore next */\n if (symbol.type === 'literal') {\n return symbol.value.value;\n }\n\n /* istanbul ignore next */\n return null;\n};\n\nconst getIdentifier = function (node, globals, scope, opts) {\n if (opts.simpleIdentifier) {\n // Type is Identier for noncomputed properties\n const identifierLiteral = createNode();\n identifierLiteral.type = 'literal';\n identifierLiteral.value = {\n value: node.name,\n };\n\n return identifierLiteral;\n }\n\n /* istanbul ignore next */\n const block = scope || globals;\n\n // As scopes are not currently supported, they are not traversed upwards recursively\n if (block.props[node.name]) {\n return block.props[node.name];\n }\n\n // Seems this will only be entered once scopes added and entered\n /* istanbul ignore next */\n if (globals.props[node.name]) {\n return globals.props[node.name];\n }\n\n return null;\n};\n\nlet createSymbol = null;\n\n// eslint-disable-next-line complexity\nconst getSymbol = function (node, globals, scope, opt) {\n const opts = opt || {};\n /* istanbul ignore next */\n // eslint-disable-next-line default-case\n switch (node.type) {\n case 'Identifier': {\n return getIdentifier(node, globals, scope, opts);\n }\n\n case 'MemberExpression': {\n const obj = getSymbol(node.object, globals, scope, opts);\n const propertySymbol = getSymbol(node.property, globals, scope, {\n simpleIdentifier: !node.computed,\n });\n const propertyValue = getSymbolValue(propertySymbol);\n\n /* istanbul ignore next */\n if (obj && propertyValue && obj.props[propertyValue]) {\n const block = obj.props[propertyValue];\n\n return block;\n }\n\n /*\n if (opts.createMissingProps && propertyValue) {\n obj.props[propertyValue] = createNode();\n\n return obj.props[propertyValue];\n }\n */\n /* istanbul ignore next */\n debug(`MemberExpression: Missing property ${node.property.name}`);\n\n /* istanbul ignore next */\n return null;\n }\n\n case 'TSTypeAliasDeclaration':\n case 'TSEnumDeclaration': case 'TSInterfaceDeclaration':\n case 'ClassDeclaration': case 'ClassExpression':\n case 'FunctionExpression': case 'FunctionDeclaration':\n case 'ArrowFunctionExpression': {\n const val = createNode();\n val.props.prototype = createNode();\n val.props.prototype.type = 'object';\n val.type = 'object';\n val.value = node;\n\n return val;\n }\n\n case 'AssignmentExpression': {\n return createSymbol(node.left, globals, node.right, scope, opts);\n }\n\n case 'ClassBody': {\n const val = createNode();\n for (const method of node.body) {\n val.props[method.key.name] = createNode();\n val.props[method.key.name].type = 'object';\n val.props[method.key.name].value = method.value;\n }\n\n val.type = 'object';\n val.value = node;\n\n return val;\n }\n\n case 'ObjectExpression': {\n const val = createNode();\n val.type = 'object';\n for (const prop of node.properties) {\n if ([\n // @typescript-eslint/parser, espree, acorn, etc.\n 'SpreadElement',\n\n // @babel/eslint-parser\n 'ExperimentalSpreadProperty',\n ].includes(prop.type)) {\n continue;\n }\n\n const propVal = getSymbol(prop.value, globals, scope, opts);\n /* istanbul ignore next */\n if (propVal) {\n val.props[prop.key.name] = propVal;\n }\n }\n\n return val;\n }\n\n case 'Literal': {\n const val = createNode();\n val.type = 'literal';\n val.value = node;\n\n return val;\n }\n }\n\n /* istanbul ignore next */\n return null;\n};\n\nconst createBlockSymbol = function (block, name, value, globals, isGlobal) {\n block.props[name] = value;\n if (isGlobal && globals.props.window && globals.props.window.special) {\n globals.props.window.props[name] = value;\n }\n};\n\ncreateSymbol = function (node, globals, value, scope, isGlobal) {\n const block = scope || globals;\n let symbol;\n // eslint-disable-next-line default-case\n switch (node.type) {\n case 'FunctionDeclaration':\n /* istanbul ignore next */\n // Fall through\n case 'TSEnumDeclaration': case 'TSInterfaceDeclaration':\n /* istanbul ignore next */\n // Fall through\n case 'TSTypeAliasDeclaration': case 'ClassDeclaration': {\n /* istanbul ignore next */\n if (node.id && node.id.type === 'Identifier') {\n return createSymbol(node.id, globals, node, globals);\n }\n\n /* istanbul ignore next */\n break;\n }\n\n case 'Identifier': {\n if (value) {\n const valueSymbol = getSymbol(value, globals, block);\n /* istanbul ignore next */\n if (valueSymbol) {\n createBlockSymbol(block, node.name, valueSymbol, globals, isGlobal);\n\n return block.props[node.name];\n }\n\n /* istanbul ignore next */\n debug('Identifier: Missing value symbol for %s', node.name);\n } else {\n createBlockSymbol(block, node.name, createNode(), globals, isGlobal);\n\n return block.props[node.name];\n }\n\n /* istanbul ignore next */\n break;\n }\n\n case 'MemberExpression': {\n symbol = getSymbol(node.object, globals, block);\n\n const propertySymbol = getSymbol(node.property, globals, block, {\n simpleIdentifier: !node.computed,\n });\n const propertyValue = getSymbolValue(propertySymbol);\n if (symbol && propertyValue) {\n createBlockSymbol(symbol, propertyValue, getSymbol(value, globals, block), globals, isGlobal);\n\n return symbol.props[propertyValue];\n }\n\n /* istanbul ignore next */\n debug('MemberExpression: Missing symbol: %s', node.property.name);\n break;\n }\n }\n\n return null;\n};\n\n// Creates variables from variable definitions\nconst initVariables = function (node, globals, opts) {\n // eslint-disable-next-line default-case\n switch (node.type) {\n case 'Program': {\n for (const childNode of node.body) {\n initVariables(childNode, globals, opts);\n }\n\n break;\n }\n\n case 'ExpressionStatement': {\n initVariables(node.expression, globals, opts);\n break;\n }\n\n case 'VariableDeclaration': {\n for (const declaration of node.declarations) {\n // let and const\n const symbol = createSymbol(declaration.id, globals, null, globals);\n if (opts.initWindow && node.kind === 'var' && globals.props.window) {\n // If var, also add to window\n globals.props.window.props[declaration.id.name] = symbol;\n }\n }\n\n break;\n }\n\n case 'ExportNamedDeclaration': {\n if (node.declaration) {\n initVariables(node.declaration, globals, opts);\n }\n\n break;\n }\n }\n};\n\n// Populates variable maps using AST\n// eslint-disable-next-line complexity\nconst mapVariables = function (node, globals, opt, isExport) {\n /* istanbul ignore next */\n const opts = opt || {};\n /* istanbul ignore next */\n switch (node.type) {\n case 'Program': {\n if (opts.ancestorsOnly) {\n return false;\n }\n\n for (const childNode of node.body) {\n mapVariables(childNode, globals, opts);\n }\n\n break;\n }\n\n case 'ExpressionStatement': {\n mapVariables(node.expression, globals, opts);\n break;\n }\n\n case 'AssignmentExpression': {\n createSymbol(node.left, globals, node.right);\n break;\n }\n\n case 'VariableDeclaration': {\n for (const declaration of node.declarations) {\n const isGlobal = opts.initWindow && node.kind === 'var' && globals.props.window;\n const symbol = createSymbol(declaration.id, globals, declaration.init, globals, isGlobal);\n if (symbol && isExport) {\n symbol.exported = true;\n }\n }\n\n break;\n }\n\n case 'FunctionDeclaration': {\n /* istanbul ignore next */\n if (node.id.type === 'Identifier') {\n createSymbol(node.id, globals, node, globals, true);\n }\n\n break;\n }\n\n case 'ExportDefaultDeclaration': {\n const symbol = createSymbol(node.declaration, globals, node.declaration);\n if (symbol) {\n symbol.exported = true;\n } else if (!node.id) {\n globals.ANONYMOUS_DEFAULT = node.declaration;\n }\n\n break;\n }\n\n case 'ExportNamedDeclaration': {\n if (node.declaration) {\n if (node.declaration.type === 'VariableDeclaration') {\n mapVariables(node.declaration, globals, opts, true);\n } else {\n const symbol = createSymbol(node.declaration, globals, node.declaration);\n /* istanbul ignore next */\n if (symbol) {\n symbol.exported = true;\n }\n }\n }\n\n for (const specifier of node.specifiers) {\n mapVariables(specifier, globals, opts);\n }\n\n break;\n }\n\n case 'ExportSpecifier': {\n const symbol = getSymbol(node.local, globals, globals);\n /* istanbul ignore next */\n if (symbol) {\n symbol.exported = true;\n }\n\n break;\n }\n\n case 'ClassDeclaration': {\n createSymbol(node.id, globals, node.body, globals);\n break;\n }\n\n default: {\n /* istanbul ignore next */\n return false;\n }\n }\n\n return true;\n};\n\nconst findNode = function (node, block, cache) {\n let blockCache = cache || [];\n /* istanbul ignore next */\n if (!block || blockCache.includes(block)) {\n return false;\n }\n\n blockCache = blockCache.slice();\n blockCache.push(block);\n\n if (\n (block.type === 'object' || block.type === 'MethodDefinition') &&\n block.value === node\n ) {\n return true;\n }\n\n const {\n props = block.body,\n } = block;\n for (const propval of Object.values(props || {})) {\n if (Array.isArray(propval)) {\n /* istanbul ignore if */\n if (propval.some((val) => {\n return findNode(node, val, blockCache);\n })) {\n return true;\n }\n } else if (findNode(node, propval, blockCache)) {\n return true;\n }\n }\n\n return false;\n};\n\nconst exportTypes = new Set([\n 'ExportNamedDeclaration', 'ExportDefaultDeclaration',\n]);\nconst ignorableNestedTypes = new Set([\n 'FunctionDeclaration', 'ArrowFunctionExpression', 'FunctionExpression',\n]);\nconst getExportAncestor = function (nde) {\n let node = nde;\n let idx = 0;\n const ignorableIfDeep = ignorableNestedTypes.has(nde?.type);\n while (node) {\n // Ignore functions nested more deeply than say `export default function () {}`\n if (idx >= 2 && ignorableIfDeep) {\n break;\n }\n\n if (exportTypes.has(node.type)) {\n return node;\n }\n\n node = node.parent;\n idx++;\n }\n\n return false;\n};\n\nconst canExportedByAncestorType = new Set([\n 'TSPropertySignature',\n 'TSMethodSignature',\n 'ClassProperty',\n 'Method',\n]);\n\nconst canExportChildrenType = new Set([\n 'TSInterfaceBody',\n 'TSInterfaceDeclaration',\n 'ClassDefinition',\n 'ClassExpression',\n 'Program',\n]);\n\nconst isExportByAncestor = function (nde) {\n if (!canExportedByAncestorType.has(nde.type)) {\n return false;\n }\n\n let node = nde.parent;\n while (node) {\n if (exportTypes.has(node.type)) {\n return node;\n }\n\n if (!canExportChildrenType.has(node.type)) {\n return false;\n }\n\n node = node.parent;\n }\n\n return false;\n};\n\nconst findExportedNode = function (block, node, cache) {\n /* istanbul ignore next */\n if (block === null) {\n return false;\n }\n\n const blockCache = cache || [];\n const {\n props,\n } = block;\n for (const propval of Object.values(props)) {\n blockCache.push(propval);\n if (propval.exported && (node === propval.value || findNode(node, propval.value))) {\n return true;\n }\n\n // No need to check `propval` for exported nodes as ESM\n // exports are only global\n }\n\n return false;\n};\n\nconst isNodeExported = function (node, globals, opt) {\n if (\n opt.initModuleExports && globals.props.module && globals.props.module.props.exports &&\n findNode(node, globals.props.module.props.exports)\n ) {\n return true;\n }\n\n if (opt.initWindow && globals.props.window && findNode(node, globals.props.window)) {\n return true;\n }\n\n if (opt.esm && findExportedNode(globals, node)) {\n return true;\n }\n\n return false;\n};\n\nconst parseRecursive = function (node, globalVars, opts) {\n // Iterate from top using recursion - stop at first processed node from top\n if (node.parent && parseRecursive(node.parent, globalVars, opts)) {\n return true;\n }\n\n return mapVariables(node, globalVars, opts);\n};\n\nconst parse = function (ast, node, opt) {\n /* istanbul ignore next */\n const opts = opt || {\n ancestorsOnly: false,\n esm: true,\n initModuleExports: true,\n initWindow: true,\n };\n\n const globalVars = createNode();\n if (opts.initModuleExports) {\n globalVars.props.module = createNode();\n globalVars.props.module.props.exports = createNode();\n globalVars.props.exports = globalVars.props.module.props.exports;\n }\n\n if (opts.initWindow) {\n globalVars.props.window = createNode();\n globalVars.props.window.special = true;\n }\n\n if (opts.ancestorsOnly) {\n parseRecursive(node, globalVars, opts);\n } else {\n initVariables(ast, globalVars, opts);\n mapVariables(ast, globalVars, opts);\n }\n\n return {\n globalVars,\n };\n};\n\nconst isUncommentedExport = function (node, sourceCode, opt, settings) {\n // console.log({node});\n // Optimize with ancestor check for esm\n if (opt.esm) {\n const exportNode = getExportAncestor(node);\n\n // Is export node comment\n if (exportNode && !findJSDocComment(exportNode, sourceCode, settings)) {\n return true;\n }\n\n /**\n * Some typescript types are not in variable map, but inherit exported (interface property and method)\n */\n if (\n isExportByAncestor(node) &&\n !findJSDocComment(node, sourceCode, settings)\n ) {\n return true;\n }\n }\n\n const parseResult = parse(sourceCode.ast, node, opt);\n\n return isNodeExported(node, parseResult.globalVars, opt);\n};\n\nexport default {\n isUncommentedExport,\n parse,\n};\n"],"file":"exportParser.js"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/bin/generateRule.js"],"names":["ruleName","options","process","argv","recommended","includes","console","error","test","ruleNamesPath","ruleNames","JSON","parse","fs","readFile","push","sort","writeFile","stringify","log","ruleTemplate","camelCasedRuleName","rulePath","ruleTestTemplate","ruleTestPath","ruleReadmeTemplate","ruleReadmePath","replaceInOrder","path","oldRegex","checkName","newLine","oldIsCamel","offsets","readme","replace","matchedLine","n1","offset","str","oldRule","oldRuleB","alreadyIncluded","itemIndex","findIndex","item","undefined","pop","length","slice","repeat","chdir","__dirname"],"mappings":"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","sourcesContent":["/* eslint-disable no-console -- CLI */\n\n/**\n * @example\n *\n * ```shell\n * npm run create-rule my-new-rule --recommended\n * ```\n */\n\nimport {\n existsSync,\n} from 'fs';\nimport fs from 'fs/promises';\nimport {\n resolve,\n} from 'path';\nimport camelCase from 'camelcase';\nimport open from 'open-editor';\n\n// Todo: Would ideally have prompts, e.g., to ask for whether type was problem/layout, etc.\n\nconst [, , ruleName, ...options] = 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]/u).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 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';\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#eslint-plugin-jsdoc-rules-${ruleName}',\n },\n schema: [\n {\n additionalProperies: 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 line: '',\n message: '',\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<!-- assertions ${camelCasedRuleName} -->\n`;\n\n const ruleReadmePath = `./.README/rules/${ruleName}.md`;\n if (!existsSync(ruleReadmePath)) {\n await fs.writeFile(ruleReadmePath, ruleReadmeTemplate);\n }\n\n const replaceInOrder = async ({path, oldRegex, checkName, newLine, oldIsCamel}) => {\n const offsets = [];\n\n let readme = await fs.readFile(path, 'utf8');\n readme.replace(\n oldRegex,\n (matchedLine, n1, offset, str, {oldRule}) => {\n offsets.push({\n matchedLine,\n offset,\n oldRule,\n });\n },\n );\n\n offsets.sort(({oldRule}, {oldRule: oldRuleB}) => {\n // eslint-disable-next-line no-extra-parens\n return oldRule < oldRuleB ? -1 : (oldRule > oldRuleB ? 1 : 0);\n });\n\n let alreadyIncluded = false;\n const itemIndex = offsets.findIndex(({oldRule}) => {\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 = 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\"\\}/gu,\n path: './.README/README.md',\n });\n\n await replaceInOrder({\n checkName: 'index import',\n newLine: `import ${camelCasedRuleName} from './rules/${camelCasedRuleName}';`,\n oldIsCamel: true,\n oldRegex: /\\nimport (?<oldRule>[^ ]*) from '.\\/rules\\/\\1';/gu,\n path: './src/index.js',\n });\n\n await replaceInOrder({\n checkName: 'index recommended',\n newLine: `${' '.repeat(8)}'jsdoc/${ruleName}': '${recommended ? 'warn' : 'off'}',`,\n oldRegex: /\\n\\s{8}'jsdoc\\/(?<oldRule>[^']*)': '[^']*',/gu,\n path: './src/index.js',\n });\n\n await replaceInOrder({\n checkName: 'index rules',\n newLine: `${' '.repeat(4)}'${ruleName}': ${camelCasedRuleName},`,\n oldRegex: /\\n\\s{4}'(?<oldRule>[^']*)': [^,]*,/gu,\n path: './src/index.js',\n });\n\n await import('./generateReadme.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(__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"],"file":"generateRule.js"}
1
+ {"version":3,"sources":["../src/bin/generateRule.js"],"names":["ruleName","options","process","argv","recommended","includes","console","error","test","ruleNamesPath","ruleNames","JSON","parse","fs","readFile","push","sort","writeFile","stringify","log","ruleTemplate","camelCasedRuleName","rulePath","ruleTestTemplate","ruleTestPath","ruleReadmeTemplate","ruleReadmePath","replaceInOrder","path","oldRegex","checkName","newLine","oldIsCamel","offsets","readme","replace","matchedLine","n1","offset","str","oldRule","oldRuleB","alreadyIncluded","itemIndex","findIndex","item","undefined","pop","length","slice","repeat","chdir","__dirname"],"mappings":";;AAUA;;AAGA;;AACA;;AAGA;;AACA;;;;;;;;AAEA;AAEA,MAAM,IACAA,QADA,EAEJ,GAAGC,OAFC,IAGFC,OAAO,CAACC,IAHZ;AAKA,MAAMC,WAAW,GAAGH,OAAO,CAACI,QAAR,CAAiB,eAAjB,CAApB;;AAEA,CAAC,YAAY;AACX,MAAI,CAACL,QAAL,EAAe;AACbM,IAAAA,OAAO,CAACC,KAAR,CAAc,2BAAd;AAEA;AACD;;AAED,MAAK,QAAD,CAAWC,IAAX,CAAgBR,QAAhB,CAAJ,EAA+B;AAC7BM,IAAAA,OAAO,CAACC,KAAR,CAAc,+CAAd;AAEA;AACD;;AAED,QAAME,aAAa,GAAG,6BAAtB;AACA,QAAMC,SAAS,GAAGC,IAAI,CAACC,KAAL,CAAW,MAAMC,kBAAGC,QAAH,CACjCL,aADiC,EAClB,MADkB,CAAjB,CAAlB;;AAGA,MAAI,CAACC,SAAS,CAACL,QAAV,CAAmBL,QAAnB,CAAL,EAAmC;AACjCU,IAAAA,SAAS,CAACK,IAAV,CAAef,QAAf;AACAU,IAAAA,SAAS,CAACM,IAAV;AACD;;AAED,QAAMH,kBAAGI,SAAH,CAAaR,aAAb,EAA4BE,IAAI,CAACO,SAAL,CAAeR,SAAf,EAA0B,IAA1B,EAAgC,CAAhC,IAAqC,IAAjE,CAAN;AACAJ,EAAAA,OAAO,CAACa,GAAR,CAAY,WAAZ,EAAyBT,SAAzB;AAEA,QAAMU,YAAY,GAAI;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qFAAqFpB,QAAS;AAC9F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CA1BE;AA4BA,QAAMqB,kBAAkB,GAAG,wBAAUrB,QAAV,CAA3B;AAEA,QAAMsB,QAAQ,GAAI,eAAcD,kBAAmB,KAAnD;;AAEA,MAAI,CAAC,oBAAWC,QAAX,CAAL,EAA2B;AACzB,UAAMT,kBAAGI,SAAH,CAAaK,QAAb,EAAuBF,YAAvB,CAAN;AACD;;AAED,QAAMG,gBAAgB,GAAI;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAlBE;AAoBA,QAAMC,YAAY,GAAI,2BAA0BH,kBAAmB,KAAnE;;AACA,MAAI,CAAC,oBAAWG,YAAX,CAAL,EAA+B;AAC7B,UAAMX,kBAAGI,SAAH,CAAaO,YAAb,EAA2BD,gBAA3B,CAAN;AACD;;AAED,QAAME,kBAAkB,GAAI,SAAQzB,QAAS;AAC/C;AACA;AACA;AACA;AACA;AACA,eAAeI,WAAW,GAAG,MAAH,GAAY,OAAQ;AAC9C;AACA;AACA;AACA,kBAAkBiB,kBAAmB;AACrC,CAXE;AAaA,QAAMK,cAAc,GAAI,mBAAkB1B,QAAS,KAAnD;;AACA,MAAI,CAAC,oBAAW0B,cAAX,CAAL,EAAiC;AAC/B,UAAMb,kBAAGI,SAAH,CAAaS,cAAb,EAA6BD,kBAA7B,CAAN;AACD;;AAED,QAAME,cAAc,GAAG,OAAO;AAC5BC,IAAAA,IAD4B;AAE5BC,IAAAA,QAF4B;AAG5BC,IAAAA,SAH4B;AAI5BC,IAAAA,OAJ4B;AAK5BC,IAAAA;AAL4B,GAAP,KAMjB;AACJ,UAAMC,OAAO,GAAG,EAAhB;AAEA,QAAIC,MAAM,GAAG,MAAMrB,kBAAGC,QAAH,CAAYc,IAAZ,EAAkB,MAAlB,CAAnB;AACAM,IAAAA,MAAM,CAACC,OAAP,CACEN,QADF,EAEE,CAACO,WAAD,EAAcC,EAAd,EAAkBC,MAAlB,EAA0BC,GAA1B,EAA+B;AAC7BC,MAAAA;AAD6B,KAA/B,KAEM;AACJP,MAAAA,OAAO,CAAClB,IAAR,CAAa;AACXqB,QAAAA,WADW;AAEXE,QAAAA,MAFW;AAGXE,QAAAA;AAHW,OAAb;AAKD,KAVH;AAaAP,IAAAA,OAAO,CAACjB,IAAR,CAAa,CAAC;AACZwB,MAAAA;AADY,KAAD,EAEV;AACDA,MAAAA,OAAO,EAAEC;AADR,KAFU,KAIP;AACJ;AACA,aAAOD,OAAO,GAAGC,QAAV,GAAqB,CAAC,CAAtB,GAA2BD,OAAO,GAAGC,QAAV,GAAqB,CAArB,GAAyB,CAA3D;AACD,KAPD;AASA,QAAIC,eAAe,GAAG,KAAtB;AACA,UAAMC,SAAS,GAAGV,OAAO,CAACW,SAAR,CAAkB,CAAC;AACnCJ,MAAAA;AADmC,KAAD,KAE9B;AACJE,MAAAA,eAAe,KAAfA,eAAe,GAAKV,UAAU,GAAGX,kBAAkB,KAAKmB,OAA1B,GAAoCxC,QAAQ,KAAKwC,OAAhE,CAAf;AAEA,aAAOR,UAAU,GAAGX,kBAAkB,GAAGmB,OAAxB,GAAkCxC,QAAQ,GAAGwC,OAA9D;AACD,KANiB,CAAlB;AAOA,QAAIK,IAAI,GAAGF,SAAS,KAAKG,SAAd,IAA2Bb,OAAO,CAACU,SAAD,CAA7C;;AACA,QAAIE,IAAI,IAAIF,SAAS,KAAK,CAAtB,IAEF;AACAX,IAAAA,UAHF,EAIE;AACAa,MAAAA,IAAI,CAACP,MAAL,GAAc,CAAd;AACD;;AAED,QAAI,CAACO,IAAL,EAAW;AACTA,MAAAA,IAAI,GAAGZ,OAAO,CAACc,GAAR,EAAP;AACAF,MAAAA,IAAI,CAACP,MAAL,IAAeO,IAAI,CAACT,WAAL,CAAiBY,MAAhC;AACD;;AAED,QAAIN,eAAJ,EAAqB;AACnBpC,MAAAA,OAAO,CAACa,GAAR,CAAa,mCAAkCW,SAAU,GAAzD;AACD,KAFD,MAEO;AACLI,MAAAA,MAAM,GAAGA,MAAM,CAACe,KAAP,CAAa,CAAb,EAAgBJ,IAAI,CAACP,MAArB,KACEO,IAAI,CAACP,MAAL,GAAc,IAAd,GAAqB,EADvB,IAECP,OAFD,IAGEc,IAAI,CAACP,MAAL,GAAc,EAAd,GAAmB,IAHrB,IAICJ,MAAM,CAACe,KAAP,CAAaJ,IAAI,CAACP,MAAlB,CAJV;AAMA,YAAMzB,kBAAGI,SAAH,CAAaW,IAAb,EAAmBM,MAAnB,CAAN;AACD;AACF,GAjED;;AAmEA,QAAMP,cAAc,CAAC;AACnBG,IAAAA,SAAS,EAAE,QADQ;AAEnBC,IAAAA,OAAO,EAAG,2CAA0C/B,QAAS,OAF1C;AAGnB6B,IAAAA,QAAQ,EAAE,wEAHS;AAInBD,IAAAA,IAAI,EAAE;AAJa,GAAD,CAApB;AAOA,QAAMD,cAAc,CAAC;AACnBG,IAAAA,SAAS,EAAE,cADQ;AAEnBC,IAAAA,OAAO,EAAG,UAASV,kBAAmB,kBAAiBA,kBAAmB,IAFvD;AAGnBW,IAAAA,UAAU,EAAE,IAHO;AAInBH,IAAAA,QAAQ,EAAE,mDAJS;AAKnBD,IAAAA,IAAI,EAAE;AALa,GAAD,CAApB;AAQA,QAAMD,cAAc,CAAC;AACnBG,IAAAA,SAAS,EAAE,mBADQ;AAEnBC,IAAAA,OAAO,EAAG,GAAE,IAAImB,MAAJ,CAAW,CAAX,CAAc,UAASlD,QAAS,OAAMI,WAAW,GAAG,MAAH,GAAY,KAAM,IAF5D;AAGnByB,IAAAA,QAAQ,EAAE,+CAHS;AAInBD,IAAAA,IAAI,EAAE;AAJa,GAAD,CAApB;AAOA,QAAMD,cAAc,CAAC;AACnBG,IAAAA,SAAS,EAAE,aADQ;AAEnBC,IAAAA,OAAO,EAAG,GAAE,IAAImB,MAAJ,CAAW,CAAX,CAAc,IAAGlD,QAAS,MAAKqB,kBAAmB,GAF3C;AAGnBQ,IAAAA,QAAQ,EAAE,sCAHS;AAInBD,IAAAA,IAAI,EAAE;AAJa,GAAD,CAApB;AAOA,qEAAa,qBAAb;AAEA;AACF;AACA;AACA;AACA;AACA;AAEE;;AACA1B,EAAAA,OAAO,CAACiD,KAAR,CAAc,mBAAQC,SAAR,EAAmB,QAAnB,CAAd;AACA,QAAM,yBAAK,CACT;AACA1B,EAAAA,cAFS,EAGTF,YAHS,EAITF,QAJS,CAAL,CAAN;AAMD,CAzND","sourcesContent":["/* eslint-disable no-console -- CLI */\n\n/**\n * @example\n *\n * ```shell\n * npm run create-rule my-new-rule --recommended\n * ```\n */\n\nimport {\n existsSync,\n} from 'fs';\nimport fs from 'fs/promises';\nimport {\n resolve,\n} from 'path';\nimport camelCase from 'camelcase';\nimport open from 'open-editor';\n\n// Todo: Would ideally have prompts, e.g., to ask for whether 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]/u).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 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';\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#eslint-plugin-jsdoc-rules-${ruleName}',\n },\n schema: [\n {\n additionalProperies: 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 line: '',\n message: '',\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<!-- assertions ${camelCasedRuleName} -->\n`;\n\n const ruleReadmePath = `./.README/rules/${ruleName}.md`;\n if (!existsSync(ruleReadmePath)) {\n await fs.writeFile(ruleReadmePath, ruleReadmeTemplate);\n }\n\n const replaceInOrder = async ({\n path,\n oldRegex,\n checkName,\n newLine,\n oldIsCamel,\n }) => {\n const offsets = [];\n\n let readme = await fs.readFile(path, 'utf8');\n readme.replace(\n oldRegex,\n (matchedLine, n1, offset, str, {\n oldRule,\n }) => {\n offsets.push({\n matchedLine,\n offset,\n oldRule,\n });\n },\n );\n\n offsets.sort(({\n oldRule,\n }, {\n oldRule: oldRuleB,\n }) => {\n // eslint-disable-next-line no-extra-parens\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 = 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\"\\}/gu,\n path: './.README/README.md',\n });\n\n await replaceInOrder({\n checkName: 'index import',\n newLine: `import ${camelCasedRuleName} from './rules/${camelCasedRuleName}';`,\n oldIsCamel: true,\n oldRegex: /\\nimport (?<oldRule>[^ ]*) from '.\\/rules\\/\\1';/gu,\n path: './src/index.js',\n });\n\n await replaceInOrder({\n checkName: 'index recommended',\n newLine: `${' '.repeat(8)}'jsdoc/${ruleName}': '${recommended ? 'warn' : 'off'}',`,\n oldRegex: /\\n\\s{8}'jsdoc\\/(?<oldRule>[^']*)': '[^']*',/gu,\n path: './src/index.js',\n });\n\n await replaceInOrder({\n checkName: 'index rules',\n newLine: `${' '.repeat(4)}'${ruleName}': ${camelCasedRuleName},`,\n oldRegex: /\\n\\s{4}'(?<oldRule>[^']*)': [^,]*,/gu,\n path: './src/index.js',\n });\n\n await import('./generateReadme.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(__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"],"file":"generateRule.js"}