eslint-plugin-jsdoc 37.4.0 → 37.5.1
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 +120 -1
- package/dist/alignTransform.js.map +1 -1
- package/dist/bin/generateRule.js.map +1 -1
- package/dist/exportParser.js.map +1 -1
- package/dist/generateRule.js.map +1 -1
- package/dist/getDefaultTagStructureForMode.js.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/iterateJsdoc.js.map +1 -1
- package/dist/jsdocUtils.js.map +1 -1
- package/dist/rules/checkAccess.js.map +1 -1
- package/dist/rules/checkExamples.js +2 -2
- package/dist/rules/checkExamples.js.map +1 -1
- package/dist/rules/checkIndentation.js.map +1 -1
- package/dist/rules/checkLineAlignment.js.map +1 -1
- package/dist/rules/checkParamNames.js.map +1 -1
- package/dist/rules/checkPropertyNames.js.map +1 -1
- package/dist/rules/checkSyntax.js.map +1 -1
- package/dist/rules/checkTagNames.js.map +1 -1
- package/dist/rules/checkTypes.js.map +1 -1
- package/dist/rules/emptyTags.js.map +1 -1
- package/dist/rules/matchDescription.js +1 -1
- package/dist/rules/matchDescription.js.map +1 -1
- package/dist/rules/matchName.js.map +1 -1
- package/dist/rules/multilineBlocks.js.map +1 -1
- package/dist/rules/newlineAfterDescription.js.map +1 -1
- package/dist/rules/noBadBlocks.js.map +1 -1
- package/dist/rules/noDefaults.js.map +1 -1
- package/dist/rules/noMissingSyntax.js.map +1 -1
- package/dist/rules/noMultiAsterisks.js +25 -5
- package/dist/rules/noMultiAsterisks.js.map +1 -1
- package/dist/rules/noRestrictedSyntax.js.map +1 -1
- package/dist/rules/noTypes.js.map +1 -1
- package/dist/rules/noUndefinedTypes.js +12 -16
- package/dist/rules/noUndefinedTypes.js.map +1 -1
- package/dist/rules/requireAsteriskPrefix.js.map +1 -1
- package/dist/rules/requireDescription.js.map +1 -1
- package/dist/rules/requireDescriptionCompleteSentence.js.map +1 -1
- package/dist/rules/requireExample.js.map +1 -1
- package/dist/rules/requireFileOverview.js.map +1 -1
- package/dist/rules/requireHyphenBeforeParamDescription.js.map +1 -1
- package/dist/rules/requireJsdoc.js.map +1 -1
- package/dist/rules/requireParam.js.map +1 -1
- package/dist/rules/requireProperty.js.map +1 -1
- package/dist/rules/requireReturns.js.map +1 -1
- package/dist/rules/requireReturnsCheck.js.map +1 -1
- package/dist/rules/requireReturnsDescription.js.map +1 -1
- package/dist/rules/requireThrows.js.map +1 -1
- package/dist/rules/requireYields.js.map +1 -1
- package/dist/rules/requireYieldsCheck.js.map +1 -1
- package/dist/rules/tagLines.js.map +1 -1
- package/dist/rules/validTypes.js.map +1 -1
- package/dist/tagNames.js.map +1 -1
- package/package.json +22 -21
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
|
-
|
|
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
|
|
|
@@ -9838,12 +9896,64 @@ function quux(foo) {
|
|
|
9838
9896
|
|
|
9839
9897
|
}
|
|
9840
9898
|
|
|
9899
|
+
/**
|
|
9900
|
+
* @template T
|
|
9901
|
+
* @param {T} arg
|
|
9902
|
+
* @returns {[T]}
|
|
9903
|
+
*/
|
|
9904
|
+
function genericFunctionExample(arg) {
|
|
9905
|
+
const result = /** @type {[T]} */ (new Array());
|
|
9906
|
+
result[0] = arg;
|
|
9907
|
+
return result;
|
|
9908
|
+
}
|
|
9909
|
+
// Settings: {"jsdoc":{"mode":"closure"}}
|
|
9910
|
+
|
|
9911
|
+
/** @typedef QDigestNode */
|
|
9912
|
+
class A {
|
|
9913
|
+
/**
|
|
9914
|
+
* @template {object} T
|
|
9915
|
+
* @param {(node: QDigestNode) => T} callback
|
|
9916
|
+
* @returns {T[]}
|
|
9917
|
+
*/
|
|
9918
|
+
map(callback) {
|
|
9919
|
+
/** @type {T[]} */
|
|
9920
|
+
let vals;
|
|
9921
|
+
return vals;
|
|
9922
|
+
}
|
|
9923
|
+
}
|
|
9924
|
+
// Settings: {"jsdoc":{"mode":"typescript"}}
|
|
9925
|
+
|
|
9926
|
+
/**
|
|
9927
|
+
* @template T
|
|
9928
|
+
* @param {T} arg
|
|
9929
|
+
*/
|
|
9930
|
+
function example(arg) {
|
|
9931
|
+
|
|
9932
|
+
/** @param {T} */
|
|
9933
|
+
function inner(x) {
|
|
9934
|
+
}
|
|
9935
|
+
}
|
|
9936
|
+
// Settings: {"jsdoc":{"mode":"typescript"}}
|
|
9937
|
+
|
|
9841
9938
|
/**
|
|
9842
9939
|
* @suppress {visibility}
|
|
9843
9940
|
*/
|
|
9844
9941
|
function foo () {
|
|
9845
9942
|
}
|
|
9846
9943
|
// Settings: {"jsdoc":{"mode":"closure"}}
|
|
9944
|
+
|
|
9945
|
+
/**
|
|
9946
|
+
* @template T
|
|
9947
|
+
*/
|
|
9948
|
+
export class Foo {
|
|
9949
|
+
// cast to T
|
|
9950
|
+
getType() {
|
|
9951
|
+
const x = "hello";
|
|
9952
|
+
const y = /** @type {T} */ (x);
|
|
9953
|
+
return y;
|
|
9954
|
+
}
|
|
9955
|
+
}
|
|
9956
|
+
// Settings: {"jsdoc":{"mode":"typescript"}}
|
|
9847
9957
|
````
|
|
9848
9958
|
|
|
9849
9959
|
|
|
@@ -20951,6 +21061,15 @@ class quux {}
|
|
|
20951
21061
|
function quux() {
|
|
20952
21062
|
}
|
|
20953
21063
|
// Settings: {"jsdoc":{"mode":"closure"}}
|
|
21064
|
+
|
|
21065
|
+
/**
|
|
21066
|
+
* @param {string} id
|
|
21067
|
+
* @param {Object} options
|
|
21068
|
+
* @param {boolean} options.isSet
|
|
21069
|
+
* @param {string} options.module
|
|
21070
|
+
*/
|
|
21071
|
+
function quux ( id, options ) {
|
|
21072
|
+
}
|
|
20954
21073
|
````
|
|
20955
21074
|
|
|
20956
21075
|
|
|
@@ -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":"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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 [\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"}
|
package/dist/exportParser.js.map
CHANGED
|
@@ -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"}
|
package/dist/generateRule.js.map
CHANGED
|
@@ -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":"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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 [\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"}
|