eslint-plugin-jsdoc 39.3.6 → 39.3.13
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 +281 -52
- package/dist/WarnSettings.js +0 -5
- package/dist/WarnSettings.js.map +1 -1
- package/dist/alignTransform.js +69 -61
- package/dist/alignTransform.js.map +1 -1
- package/dist/bin/generateRule.js +7 -26
- package/dist/bin/generateRule.js.map +1 -1
- package/dist/defaultTagOrder.js +30 -14
- package/dist/defaultTagOrder.js.map +1 -1
- package/dist/exportParser.js +34 -143
- package/dist/exportParser.js.map +1 -1
- package/dist/generateRule.js +7 -26
- package/dist/generateRule.js.map +1 -1
- package/dist/getDefaultTagStructureForMode.js +189 -93
- package/dist/getDefaultTagStructureForMode.js.map +1 -1
- package/dist/index.js +0 -51
- package/dist/index.js.map +1 -1
- package/dist/iterateJsdoc.js +43 -206
- package/dist/iterateJsdoc.js.map +1 -1
- package/dist/jsdocUtils.js +71 -220
- package/dist/jsdocUtils.js.map +1 -1
- package/dist/rules/checkAccess.js +0 -8
- package/dist/rules/checkAccess.js.map +1 -1
- package/dist/rules/checkAlignment.js +0 -8
- package/dist/rules/checkAlignment.js.map +1 -1
- package/dist/rules/checkExamples.js +25 -63
- package/dist/rules/checkExamples.js.map +1 -1
- package/dist/rules/checkIndentation.js +0 -7
- package/dist/rules/checkIndentation.js.map +1 -1
- package/dist/rules/checkLineAlignment.js +9 -30
- package/dist/rules/checkLineAlignment.js.map +1 -1
- package/dist/rules/checkParamNames.js +11 -47
- package/dist/rules/checkParamNames.js.map +1 -1
- package/dist/rules/checkPropertyNames.js +1 -18
- package/dist/rules/checkPropertyNames.js.map +1 -1
- package/dist/rules/checkSyntax.js +2 -5
- package/dist/rules/checkSyntax.js.map +1 -1
- package/dist/rules/checkTagNames.js +0 -18
- package/dist/rules/checkTagNames.js.map +1 -1
- package/dist/rules/checkTypes.js +17 -46
- package/dist/rules/checkTypes.js.map +1 -1
- package/dist/rules/checkValues.js +0 -18
- package/dist/rules/checkValues.js.map +1 -1
- package/dist/rules/emptyTags.js +6 -11
- package/dist/rules/emptyTags.js.map +1 -1
- package/dist/rules/implementsOnClasses.js +0 -6
- package/dist/rules/implementsOnClasses.js.map +1 -1
- package/dist/rules/matchDescription.js +0 -20
- package/dist/rules/matchDescription.js.map +1 -1
- package/dist/rules/matchName.js +2 -17
- package/dist/rules/matchName.js.map +1 -1
- package/dist/rules/multilineBlocks.js +10 -34
- package/dist/rules/multilineBlocks.js.map +1 -1
- package/dist/rules/newlineAfterDescription.js +0 -8
- package/dist/rules/newlineAfterDescription.js.map +1 -1
- package/dist/rules/noBadBlocks.js +2 -16
- package/dist/rules/noBadBlocks.js.map +1 -1
- package/dist/rules/noDefaults.js +0 -7
- package/dist/rules/noDefaults.js.map +1 -1
- package/dist/rules/noMissingSyntax.js +2 -16
- package/dist/rules/noMissingSyntax.js.map +1 -1
- package/dist/rules/noMultiAsterisks.js +2 -16
- package/dist/rules/noMultiAsterisks.js.map +1 -1
- package/dist/rules/noRestrictedSyntax.js +3 -9
- package/dist/rules/noRestrictedSyntax.js.map +1 -1
- package/dist/rules/noTypes.js +0 -7
- package/dist/rules/noTypes.js.map +1 -1
- package/dist/rules/noUndefinedTypes.js +13 -34
- package/dist/rules/noUndefinedTypes.js.map +1 -1
- package/dist/rules/requireAsteriskPrefix.js +2 -26
- package/dist/rules/requireAsteriskPrefix.js.map +1 -1
- package/dist/rules/requireDescription.js +0 -17
- package/dist/rules/requireDescription.js.map +1 -1
- package/dist/rules/requireDescriptionCompleteSentence.js +13 -34
- package/dist/rules/requireDescriptionCompleteSentence.js.map +1 -1
- package/dist/rules/requireExample.js +0 -9
- package/dist/rules/requireExample.js.map +1 -1
- package/dist/rules/requireFileOverview.js +0 -16
- package/dist/rules/requireFileOverview.js.map +1 -1
- package/dist/rules/requireHyphenBeforeParamDescription.js +2 -16
- package/dist/rules/requireHyphenBeforeParamDescription.js.map +1 -1
- package/dist/rules/requireJsdoc.js +13 -58
- package/dist/rules/requireJsdoc.js.map +1 -1
- package/dist/rules/requireParam.js +6 -53
- package/dist/rules/requireParam.js.map +1 -1
- package/dist/rules/requireParamDescription.js +0 -4
- package/dist/rules/requireParamDescription.js.map +1 -1
- package/dist/rules/requireParamName.js +0 -4
- package/dist/rules/requireParamName.js.map +1 -1
- package/dist/rules/requireParamType.js +0 -4
- package/dist/rules/requireParamType.js.map +1 -1
- package/dist/rules/requireProperty.js +0 -9
- package/dist/rules/requireProperty.js.map +1 -1
- package/dist/rules/requirePropertyDescription.js +0 -4
- package/dist/rules/requirePropertyDescription.js.map +1 -1
- package/dist/rules/requirePropertyName.js +0 -4
- package/dist/rules/requirePropertyName.js.map +1 -1
- package/dist/rules/requirePropertyType.js +0 -4
- package/dist/rules/requirePropertyType.js.map +1 -1
- package/dist/rules/requireReturns.js +13 -23
- package/dist/rules/requireReturns.js.map +1 -1
- package/dist/rules/requireReturnsCheck.js +12 -20
- package/dist/rules/requireReturnsCheck.js.map +1 -1
- package/dist/rules/requireReturnsDescription.js +0 -6
- package/dist/rules/requireReturnsDescription.js.map +1 -1
- package/dist/rules/requireReturnsType.js +0 -4
- package/dist/rules/requireReturnsType.js.map +1 -1
- package/dist/rules/requireThrows.js +6 -15
- package/dist/rules/requireThrows.js.map +1 -1
- package/dist/rules/requireYields.js +13 -29
- package/dist/rules/requireYields.js.map +1 -1
- package/dist/rules/requireYieldsCheck.js +8 -29
- package/dist/rules/requireYieldsCheck.js.map +1 -1
- package/dist/rules/sortTags.js +17 -30
- package/dist/rules/sortTags.js.map +1 -1
- package/dist/rules/tagLines.js +0 -26
- package/dist/rules/tagLines.js.map +1 -1
- package/dist/rules/validTypes.js +22 -53
- package/dist/rules/validTypes.js.map +1 -1
- package/dist/tagNames.js +7 -4
- package/dist/tagNames.js.map +1 -1
- package/dist/utils/hasReturnValue.js +22 -66
- package/dist/utils/hasReturnValue.js.map +1 -1
- package/package.json +16 -16
package/dist/alignTransform.js
CHANGED
|
@@ -4,14 +4,13 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.default = void 0;
|
|
7
|
-
|
|
8
7
|
var _commentParser = require("comment-parser");
|
|
9
|
-
|
|
10
8
|
/**
|
|
11
9
|
* Transform based on https://github.com/syavorsky/comment-parser/blob/master/src/transforms/align.ts
|
|
12
10
|
*
|
|
13
11
|
* It contains some customizations to align based on the tags, and some custom options.
|
|
14
12
|
*/
|
|
13
|
+
|
|
15
14
|
const {
|
|
16
15
|
rewireSource
|
|
17
16
|
} = _commentParser.util;
|
|
@@ -21,34 +20,26 @@ const zeroWidth = {
|
|
|
21
20
|
tag: 0,
|
|
22
21
|
type: 0
|
|
23
22
|
};
|
|
24
|
-
|
|
25
23
|
const shouldAlign = (tags, index, source) => {
|
|
26
24
|
const tag = source[index].tokens.tag.replace('@', '');
|
|
27
25
|
const includesTag = tags.includes(tag);
|
|
28
|
-
|
|
29
26
|
if (includesTag) {
|
|
30
27
|
return true;
|
|
31
28
|
}
|
|
32
|
-
|
|
33
29
|
if (tag !== '') {
|
|
34
30
|
return false;
|
|
35
31
|
}
|
|
36
|
-
|
|
37
32
|
for (let iterator = index; iterator >= 0; iterator--) {
|
|
38
33
|
const previousTag = source[iterator].tokens.tag.replace('@', '');
|
|
39
|
-
|
|
40
34
|
if (previousTag !== '') {
|
|
41
35
|
if (tags.includes(previousTag)) {
|
|
42
36
|
return true;
|
|
43
37
|
}
|
|
44
|
-
|
|
45
38
|
return false;
|
|
46
39
|
}
|
|
47
40
|
}
|
|
48
|
-
|
|
49
41
|
return true;
|
|
50
42
|
};
|
|
51
|
-
|
|
52
43
|
const getWidth = tags => {
|
|
53
44
|
return (width, {
|
|
54
45
|
tokens
|
|
@@ -56,7 +47,6 @@ const getWidth = tags => {
|
|
|
56
47
|
if (!shouldAlign(tags, index, source)) {
|
|
57
48
|
return width;
|
|
58
49
|
}
|
|
59
|
-
|
|
60
50
|
return {
|
|
61
51
|
name: Math.max(width.name, tokens.name.length),
|
|
62
52
|
start: tokens.delimiter === _commentParser.Markers.start ? tokens.start.length : width.start,
|
|
@@ -65,11 +55,37 @@ const getWidth = tags => {
|
|
|
65
55
|
};
|
|
66
56
|
};
|
|
67
57
|
};
|
|
68
|
-
|
|
58
|
+
const getTypelessInfo = fields => {
|
|
59
|
+
const hasNoTypes = fields.tags.every(({
|
|
60
|
+
type
|
|
61
|
+
}) => {
|
|
62
|
+
return !type;
|
|
63
|
+
});
|
|
64
|
+
const maxNamedTagLength = Math.max(...fields.tags.map(({
|
|
65
|
+
tag,
|
|
66
|
+
name
|
|
67
|
+
}) => {
|
|
68
|
+
return name.length === 0 ? -1 : tag.length;
|
|
69
|
+
}).filter(length => {
|
|
70
|
+
return length !== -1;
|
|
71
|
+
})) + 1;
|
|
72
|
+
const maxUnnamedTagLength = Math.max(...fields.tags.map(({
|
|
73
|
+
tag,
|
|
74
|
+
name
|
|
75
|
+
}) => {
|
|
76
|
+
return name.length === 0 ? tag.length : -1;
|
|
77
|
+
}).filter(length => {
|
|
78
|
+
return length !== -1;
|
|
79
|
+
})) + 1;
|
|
80
|
+
return {
|
|
81
|
+
hasNoTypes,
|
|
82
|
+
maxNamedTagLength,
|
|
83
|
+
maxUnnamedTagLength
|
|
84
|
+
};
|
|
85
|
+
};
|
|
69
86
|
const space = len => {
|
|
70
87
|
return ''.padStart(len, ' ');
|
|
71
88
|
};
|
|
72
|
-
|
|
73
89
|
const alignTransform = ({
|
|
74
90
|
customSpacings,
|
|
75
91
|
tags,
|
|
@@ -78,45 +94,47 @@ const alignTransform = ({
|
|
|
78
94
|
}) => {
|
|
79
95
|
let intoTags = false;
|
|
80
96
|
let width;
|
|
81
|
-
|
|
82
|
-
const alignTokens = (tokens, hasNoTypes) => {
|
|
97
|
+
const alignTokens = (tokens, typelessInfo) => {
|
|
83
98
|
const nothingAfter = {
|
|
84
99
|
delim: false,
|
|
85
100
|
name: false,
|
|
86
101
|
tag: false,
|
|
87
102
|
type: false
|
|
88
103
|
};
|
|
89
|
-
|
|
90
104
|
if (tokens.description === '') {
|
|
91
105
|
nothingAfter.name = true;
|
|
92
106
|
tokens.postName = '';
|
|
93
|
-
|
|
94
107
|
if (tokens.name === '') {
|
|
95
108
|
nothingAfter.type = true;
|
|
96
109
|
tokens.postType = '';
|
|
97
|
-
|
|
98
110
|
if (tokens.type === '') {
|
|
99
111
|
nothingAfter.tag = true;
|
|
100
112
|
tokens.postTag = '';
|
|
101
|
-
/* istanbul ignore next: Never happens because the !intoTags return. But it's here for consistency with the original align transform */
|
|
102
113
|
|
|
114
|
+
/* istanbul ignore next: Never happens because the !intoTags return. But it's here for consistency with the original align transform */
|
|
103
115
|
if (tokens.tag === '') {
|
|
104
116
|
nothingAfter.delim = true;
|
|
105
117
|
}
|
|
106
118
|
}
|
|
107
119
|
}
|
|
108
120
|
}
|
|
109
|
-
|
|
110
|
-
|
|
121
|
+
let untypedNameAdjustment = 0;
|
|
122
|
+
let untypedTypeAdjustment = 0;
|
|
123
|
+
if (typelessInfo.hasNoTypes) {
|
|
111
124
|
nothingAfter.tag = true;
|
|
112
125
|
tokens.postTag = '';
|
|
113
|
-
|
|
114
|
-
|
|
126
|
+
if (tokens.name === '') {
|
|
127
|
+
untypedNameAdjustment = typelessInfo.maxNamedTagLength - tokens.tag.length;
|
|
128
|
+
} else {
|
|
129
|
+
untypedNameAdjustment = typelessInfo.maxNamedTagLength > typelessInfo.maxUnnamedTagLength ? 0 : Math.max(0, typelessInfo.maxUnnamedTagLength - (tokens.tag.length + tokens.name.length + 1));
|
|
130
|
+
untypedTypeAdjustment = typelessInfo.maxNamedTagLength - tokens.tag.length;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
115
133
|
|
|
134
|
+
// Todo: Avoid fixing alignment of blocks with multiline wrapping of type
|
|
116
135
|
if (tokens.tag === '' && tokens.type) {
|
|
117
136
|
return tokens;
|
|
118
137
|
}
|
|
119
|
-
|
|
120
138
|
const spacings = {
|
|
121
139
|
postDelimiter: (customSpacings === null || customSpacings === void 0 ? void 0 : customSpacings.postDelimiter) || 1,
|
|
122
140
|
postName: (customSpacings === null || customSpacings === void 0 ? void 0 : customSpacings.postName) || 1,
|
|
@@ -124,102 +142,92 @@ const alignTransform = ({
|
|
|
124
142
|
postType: (customSpacings === null || customSpacings === void 0 ? void 0 : customSpacings.postType) || 1
|
|
125
143
|
};
|
|
126
144
|
tokens.postDelimiter = nothingAfter.delim ? '' : space(spacings.postDelimiter);
|
|
127
|
-
|
|
128
145
|
if (!nothingAfter.tag) {
|
|
129
146
|
tokens.postTag = space(width.tag - tokens.tag.length + spacings.postTag);
|
|
130
147
|
}
|
|
131
|
-
|
|
132
148
|
if (!nothingAfter.type) {
|
|
133
|
-
tokens.postType = space(width.type - tokens.type.length + spacings.postType);
|
|
149
|
+
tokens.postType = space(width.type - tokens.type.length + spacings.postType + untypedTypeAdjustment);
|
|
134
150
|
}
|
|
135
|
-
|
|
136
151
|
if (!nothingAfter.name) {
|
|
137
152
|
// If post name is empty for all lines (name width 0), don't add post name spacing.
|
|
138
|
-
tokens.postName = width.name === 0 ? '' : space(width.name - tokens.name.length + spacings.postName);
|
|
153
|
+
tokens.postName = width.name === 0 ? '' : space(width.name - tokens.name.length + spacings.postName + untypedNameAdjustment);
|
|
139
154
|
}
|
|
140
|
-
|
|
141
155
|
return tokens;
|
|
142
156
|
};
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
157
|
+
const update = (line, index, source, typelessInfo) => {
|
|
158
|
+
const tokens = {
|
|
159
|
+
...line.tokens
|
|
146
160
|
};
|
|
147
|
-
|
|
148
161
|
if (tokens.tag !== '') {
|
|
149
162
|
intoTags = true;
|
|
150
163
|
}
|
|
164
|
+
const isEmpty = tokens.tag === '' && tokens.name === '' && tokens.type === '' && tokens.description === '';
|
|
151
165
|
|
|
152
|
-
|
|
153
|
-
|
|
166
|
+
// dangling '*/'
|
|
154
167
|
if (tokens.end === _commentParser.Markers.end && isEmpty) {
|
|
155
168
|
tokens.start = indent + ' ';
|
|
156
|
-
return {
|
|
169
|
+
return {
|
|
170
|
+
...line,
|
|
157
171
|
tokens
|
|
158
172
|
};
|
|
159
173
|
}
|
|
160
|
-
/* eslint-disable indent */
|
|
161
|
-
|
|
162
174
|
|
|
175
|
+
/* eslint-disable indent */
|
|
163
176
|
switch (tokens.delimiter) {
|
|
164
177
|
case _commentParser.Markers.start:
|
|
165
178
|
tokens.start = indent;
|
|
166
179
|
break;
|
|
167
|
-
|
|
168
180
|
case _commentParser.Markers.delim:
|
|
169
181
|
tokens.start = indent + ' ';
|
|
170
182
|
break;
|
|
171
|
-
|
|
172
183
|
default:
|
|
173
|
-
tokens.delimiter = '';
|
|
184
|
+
tokens.delimiter = '';
|
|
174
185
|
|
|
186
|
+
// compensate delimiter
|
|
175
187
|
tokens.start = indent + ' ';
|
|
176
188
|
}
|
|
177
189
|
/* eslint-enable */
|
|
178
190
|
|
|
179
|
-
|
|
180
191
|
if (!intoTags) {
|
|
181
192
|
if (tokens.description === '') {
|
|
182
193
|
tokens.postDelimiter = '';
|
|
183
194
|
} else if (!preserveMainDescriptionPostDelimiter) {
|
|
184
195
|
tokens.postDelimiter = ' ';
|
|
185
196
|
}
|
|
186
|
-
|
|
187
|
-
|
|
197
|
+
return {
|
|
198
|
+
...line,
|
|
188
199
|
tokens
|
|
189
200
|
};
|
|
190
|
-
}
|
|
191
|
-
|
|
201
|
+
}
|
|
192
202
|
|
|
203
|
+
// Not align.
|
|
193
204
|
if (!shouldAlign(tags, index, source)) {
|
|
194
|
-
return {
|
|
205
|
+
return {
|
|
206
|
+
...line,
|
|
195
207
|
tokens
|
|
196
208
|
};
|
|
197
209
|
}
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
tokens: alignTokens(tokens,
|
|
210
|
+
return {
|
|
211
|
+
...line,
|
|
212
|
+
tokens: alignTokens(tokens, typelessInfo)
|
|
201
213
|
};
|
|
202
214
|
};
|
|
203
|
-
|
|
204
215
|
return ({
|
|
205
216
|
source,
|
|
206
217
|
...fields
|
|
207
218
|
}) => {
|
|
208
|
-
width = source.reduce(getWidth(tags), {
|
|
209
|
-
|
|
210
|
-
const hasNoTypes = fields.tags.every(({
|
|
211
|
-
type
|
|
212
|
-
}) => {
|
|
213
|
-
return !type;
|
|
219
|
+
width = source.reduce(getWidth(tags), {
|
|
220
|
+
...zeroWidth
|
|
214
221
|
});
|
|
215
|
-
|
|
222
|
+
const typelessInfo = getTypelessInfo(fields);
|
|
223
|
+
return rewireSource({
|
|
224
|
+
...fields,
|
|
216
225
|
source: source.map((line, index) => {
|
|
217
|
-
return update(line, index, source,
|
|
226
|
+
return update(line, index, source, typelessInfo);
|
|
218
227
|
})
|
|
219
228
|
});
|
|
220
229
|
};
|
|
221
230
|
};
|
|
222
|
-
|
|
223
231
|
var _default = alignTransform;
|
|
224
232
|
exports.default = _default;
|
|
225
233
|
module.exports = exports.default;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"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","hasNoTypes","nothingAfter","delim","description","postName","postType","postTag","spacings","postDelimiter","update","line","isEmpty","end","fields","reduce","every","map"],"sources":["../src/alignTransform.js"],"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, hasNoTypes) => {\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 if (hasNoTypes) {\n nothingAfter.tag = true;\n tokens.postTag = '';\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, hasNoTypes) => {\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, hasNoTypes),\n };\n };\n\n return ({\n source,\n ...fields\n }) => {\n width = source.reduce(getWidth(tags), {\n ...zeroWidth,\n });\n const hasNoTypes = fields.tags.every(({\n type,\n }) => {\n return !type;\n });\n\n return rewireSource({\n ...fields,\n source: source.map((line, index) => {\n return update(line, index, source, hasNoTypes);\n }),\n });\n };\n};\n\nexport default alignTransform;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"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","getTypelessInfo","fields","hasNoTypes","every","maxNamedTagLength","map","filter","maxUnnamedTagLength","space","len","padStart","alignTransform","customSpacings","indent","preserveMainDescriptionPostDelimiter","intoTags","alignTokens","typelessInfo","nothingAfter","delim","description","postName","postType","postTag","untypedNameAdjustment","untypedTypeAdjustment","spacings","postDelimiter","update","line","isEmpty","end","reduce"],"sources":["../src/alignTransform.js"],"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 getTypelessInfo = (fields) => {\n const hasNoTypes = fields.tags.every(({\n type,\n }) => {\n return !type;\n });\n const maxNamedTagLength = Math.max(...fields.tags.map(({\n tag,\n name,\n }) => {\n return name.length === 0 ? -1 : tag.length;\n }).filter((length) => {\n return length !== -1;\n })) + 1;\n const maxUnnamedTagLength = Math.max(...fields.tags.map(({\n tag,\n name,\n }) => {\n return name.length === 0 ? tag.length : -1;\n }).filter((length) => {\n return length !== -1;\n })) + 1;\n return {\n hasNoTypes,\n maxNamedTagLength,\n maxUnnamedTagLength,\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, typelessInfo) => {\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 let untypedNameAdjustment = 0;\n let untypedTypeAdjustment = 0;\n if (typelessInfo.hasNoTypes) {\n nothingAfter.tag = true;\n tokens.postTag = '';\n if (tokens.name === '') {\n untypedNameAdjustment = typelessInfo.maxNamedTagLength - tokens.tag.length;\n } else {\n untypedNameAdjustment = typelessInfo.maxNamedTagLength > typelessInfo.maxUnnamedTagLength ? 0 :\n Math.max(0, typelessInfo.maxUnnamedTagLength - (tokens.tag.length + tokens.name.length + 1));\n untypedTypeAdjustment = typelessInfo.maxNamedTagLength - tokens.tag.length;\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 + untypedTypeAdjustment);\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 + untypedNameAdjustment);\n }\n\n return tokens;\n };\n\n const update = (line, index, source, typelessInfo) => {\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, typelessInfo),\n };\n };\n\n return ({\n source,\n ...fields\n }) => {\n width = source.reduce(getWidth(tags), {\n ...zeroWidth,\n });\n\n const typelessInfo = getTypelessInfo(fields);\n\n return rewireSource({\n ...fields,\n source: source.map((line, index) => {\n return update(line, index, source, typelessInfo);\n }),\n });\n };\n};\n\nexport default alignTransform;\n"],"mappings":"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"}
|
package/dist/bin/generateRule.js
CHANGED
|
@@ -1,44 +1,32 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _fs = require("fs");
|
|
4
|
-
|
|
5
4
|
var _promises = _interopRequireDefault(require("fs/promises"));
|
|
6
|
-
|
|
7
5
|
var _path = require("path");
|
|
8
|
-
|
|
9
6
|
var _camelcase = _interopRequireDefault(require("camelcase"));
|
|
10
|
-
|
|
11
7
|
var _openEditor = _interopRequireDefault(require("open-editor"));
|
|
12
|
-
|
|
13
8
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
14
|
-
|
|
15
9
|
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
16
|
-
|
|
17
10
|
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
18
|
-
|
|
19
11
|
// Todo: Would ideally have prompts, e.g., to ask for whether type was problem/layout, etc.
|
|
12
|
+
|
|
20
13
|
const [,, ruleName, ...options] = process.argv;
|
|
21
14
|
const recommended = options.includes('--recommended');
|
|
22
|
-
|
|
23
15
|
(async () => {
|
|
24
16
|
if (!ruleName) {
|
|
25
17
|
console.error('Please supply a rule name');
|
|
26
18
|
return;
|
|
27
19
|
}
|
|
28
|
-
|
|
29
20
|
if (/[A-Z]/u.test(ruleName)) {
|
|
30
21
|
console.error('Please ensure the rule has no capital letters');
|
|
31
22
|
return;
|
|
32
23
|
}
|
|
33
|
-
|
|
34
24
|
const ruleNamesPath = './test/rules/ruleNames.json';
|
|
35
25
|
const ruleNames = JSON.parse(await _promises.default.readFile(ruleNamesPath, 'utf8'));
|
|
36
|
-
|
|
37
26
|
if (!ruleNames.includes(ruleName)) {
|
|
38
27
|
ruleNames.push(ruleName);
|
|
39
28
|
ruleNames.sort();
|
|
40
29
|
}
|
|
41
|
-
|
|
42
30
|
await _promises.default.writeFile(ruleNamesPath, JSON.stringify(ruleNames, null, 2) + '\n');
|
|
43
31
|
console.log('ruleNames', ruleNames);
|
|
44
32
|
const ruleTemplate = `import iterateJsdoc from '../iterateJsdoc';
|
|
@@ -70,11 +58,9 @@ export default iterateJsdoc(({
|
|
|
70
58
|
`;
|
|
71
59
|
const camelCasedRuleName = (0, _camelcase.default)(ruleName);
|
|
72
60
|
const rulePath = `./src/rules/${camelCasedRuleName}.js`;
|
|
73
|
-
|
|
74
61
|
if (!(0, _fs.existsSync)(rulePath)) {
|
|
75
62
|
await _promises.default.writeFile(rulePath, ruleTemplate);
|
|
76
63
|
}
|
|
77
|
-
|
|
78
64
|
const ruleTestTemplate = `export default {
|
|
79
65
|
invalid: [
|
|
80
66
|
{
|
|
@@ -95,11 +81,9 @@ export default iterateJsdoc(({
|
|
|
95
81
|
};
|
|
96
82
|
`;
|
|
97
83
|
const ruleTestPath = `./test/rules/assertions/${camelCasedRuleName}.js`;
|
|
98
|
-
|
|
99
84
|
if (!(0, _fs.existsSync)(ruleTestPath)) {
|
|
100
85
|
await _promises.default.writeFile(ruleTestPath, ruleTestTemplate);
|
|
101
86
|
}
|
|
102
|
-
|
|
103
87
|
const ruleReadmeTemplate = `### \`${ruleName}\`
|
|
104
88
|
|
|
105
89
|
|||
|
|
@@ -113,11 +97,9 @@ export default iterateJsdoc(({
|
|
|
113
97
|
<!-- assertions ${camelCasedRuleName} -->
|
|
114
98
|
`;
|
|
115
99
|
const ruleReadmePath = `./.README/rules/${ruleName}.md`;
|
|
116
|
-
|
|
117
100
|
if (!(0, _fs.existsSync)(ruleReadmePath)) {
|
|
118
101
|
await _promises.default.writeFile(ruleReadmePath, ruleReadmeTemplate);
|
|
119
102
|
}
|
|
120
|
-
|
|
121
103
|
const replaceInOrder = async ({
|
|
122
104
|
path,
|
|
123
105
|
oldRegex,
|
|
@@ -152,17 +134,15 @@ export default iterateJsdoc(({
|
|
|
152
134
|
return oldIsCamel ? camelCasedRuleName < oldRule : ruleName < oldRule;
|
|
153
135
|
});
|
|
154
136
|
let item = itemIndex !== undefined && offsets[itemIndex];
|
|
155
|
-
|
|
156
|
-
|
|
137
|
+
if (item && itemIndex === 0 &&
|
|
138
|
+
// This property would not always be sufficient but in this case it is.
|
|
157
139
|
oldIsCamel) {
|
|
158
140
|
item.offset = 0;
|
|
159
141
|
}
|
|
160
|
-
|
|
161
142
|
if (!item) {
|
|
162
143
|
item = offsets.pop();
|
|
163
144
|
item.offset += item.matchedLine.length;
|
|
164
145
|
}
|
|
165
|
-
|
|
166
146
|
if (alreadyIncluded) {
|
|
167
147
|
console.log(`Rule name is already present in ${checkName}.`);
|
|
168
148
|
} else {
|
|
@@ -170,7 +150,6 @@ export default iterateJsdoc(({
|
|
|
170
150
|
await _promises.default.writeFile(path, readme);
|
|
171
151
|
}
|
|
172
152
|
};
|
|
173
|
-
|
|
174
153
|
await replaceInOrder({
|
|
175
154
|
checkName: 'README',
|
|
176
155
|
newLine: `{"gitdown": "include", "file": "./rules/${ruleName}.md"}`,
|
|
@@ -197,16 +176,18 @@ export default iterateJsdoc(({
|
|
|
197
176
|
path: './src/index.js'
|
|
198
177
|
});
|
|
199
178
|
await Promise.resolve().then(() => _interopRequireWildcard(require('./generateReadme.js')));
|
|
179
|
+
|
|
200
180
|
/*
|
|
201
181
|
console.log('Paths to open for further editing\n');
|
|
202
182
|
console.log(`open ${ruleReadmePath}`);
|
|
203
183
|
console.log(`open ${rulePath}`);
|
|
204
184
|
console.log(`open ${ruleTestPath}\n`);
|
|
205
185
|
*/
|
|
206
|
-
// Set chdir as somehow still in operation from other test
|
|
207
186
|
|
|
187
|
+
// Set chdir as somehow still in operation from other test
|
|
208
188
|
process.chdir((0, _path.resolve)(__dirname, '../../'));
|
|
209
|
-
await (0, _openEditor.default)([
|
|
189
|
+
await (0, _openEditor.default)([
|
|
190
|
+
// Could even add editor line column numbers like `${rulePath}:1:1`
|
|
210
191
|
ruleReadmePath, ruleTestPath, rulePath]);
|
|
211
192
|
})();
|
|
212
193
|
//# sourceMappingURL=generateRule.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"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","camelCase","rulePath","existsSync","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","resolve","__dirname","open"],"sources":["../../src/bin/generateRule.js"],"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"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"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","camelCase","rulePath","existsSync","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","resolve","__dirname","open"],"sources":["../../src/bin/generateRule.js"],"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"],"mappings":"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"}
|
package/dist/defaultTagOrder.js
CHANGED
|
@@ -4,22 +4,38 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.default = void 0;
|
|
7
|
-
const defaultTagOrder = [
|
|
8
|
-
|
|
9
|
-
'
|
|
10
|
-
|
|
11
|
-
'
|
|
12
|
-
|
|
7
|
+
const defaultTagOrder = [
|
|
8
|
+
// Brief descriptions
|
|
9
|
+
'summary', 'typeSummary',
|
|
10
|
+
// Module/file-level
|
|
11
|
+
'module', 'exports', 'file', 'fileoverview', 'overview',
|
|
12
|
+
// Identifying (name, type)
|
|
13
|
+
'typedef', 'interface', 'record', 'template', 'name', 'kind', 'type', 'alias', 'external', 'host', 'callback', 'func', 'function', 'method', 'class', 'constructor',
|
|
14
|
+
// Relationships
|
|
15
|
+
'modifies', 'mixes', 'mixin', 'mixinClass', 'mixinFunction', 'namespace', 'borrows', 'constructs', 'lends', 'implements', 'requires',
|
|
16
|
+
// Long descriptions
|
|
17
|
+
'desc', 'description', 'classdesc', 'tutorial', 'copyright', 'license',
|
|
18
|
+
// Simple annotations
|
|
19
|
+
|
|
13
20
|
// TypeScript
|
|
14
|
-
'internal', 'const', 'constant', 'final', 'global', 'readonly', 'abstract', 'virtual', 'var', 'member', 'memberof', 'memberof!', 'inner', 'instance', 'inheritdoc', 'inheritDoc', 'override', 'hideconstructor',
|
|
15
|
-
|
|
16
|
-
'
|
|
17
|
-
|
|
18
|
-
'
|
|
21
|
+
'internal', 'const', 'constant', 'final', 'global', 'readonly', 'abstract', 'virtual', 'var', 'member', 'memberof', 'memberof!', 'inner', 'instance', 'inheritdoc', 'inheritDoc', 'override', 'hideconstructor',
|
|
22
|
+
// Core function/object info
|
|
23
|
+
'param', 'arg', 'argument', 'prop', 'property', 'return', 'returns',
|
|
24
|
+
// Important behavior details
|
|
25
|
+
'async', 'generator', 'default', 'defaultvalue', 'enum', 'augments', 'extends', 'throws', 'exception', 'yield', 'yields', 'event', 'fires', 'emits', 'listens', 'this',
|
|
26
|
+
// Access
|
|
27
|
+
'static', 'private', 'protected', 'public', 'access', 'package', '-other',
|
|
28
|
+
// Supplementary descriptions
|
|
29
|
+
'see', 'example',
|
|
30
|
+
// METADATA
|
|
31
|
+
|
|
19
32
|
// Other Closure (undocumented) metadata
|
|
20
|
-
'closurePrimitive', 'customElement', 'expose', 'hidden', 'idGenerator', 'meaning', 'ngInject', 'owner', 'wizaction',
|
|
21
|
-
|
|
22
|
-
'
|
|
33
|
+
'closurePrimitive', 'customElement', 'expose', 'hidden', 'idGenerator', 'meaning', 'ngInject', 'owner', 'wizaction',
|
|
34
|
+
// Other Closure (documented) metadata
|
|
35
|
+
'define', 'dict', 'export', 'externs', 'implicitCast', 'noalias', 'nocollapse', 'nocompile', 'noinline', 'nosideeffects', 'polymer', 'polymerBehavior', 'preserve', 'struct', 'suppress', 'unrestricted',
|
|
36
|
+
// @homer0/prettier-plugin-jsdoc metadata
|
|
37
|
+
'category',
|
|
38
|
+
// Non-Closure metadata
|
|
23
39
|
'ignore', 'author', 'version', 'variation', 'since', 'deprecated', 'todo'];
|
|
24
40
|
var _default = defaultTagOrder;
|
|
25
41
|
exports.default = _default;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"defaultTagOrder.js","names":["defaultTagOrder"],"sources":["../src/defaultTagOrder.js"],"sourcesContent":["const defaultTagOrder = [\n // Brief descriptions\n 'summary',\n 'typeSummary',\n\n // Module/file-level\n 'module',\n 'exports',\n 'file',\n 'fileoverview',\n 'overview',\n\n // Identifying (name, type)\n 'typedef',\n 'interface',\n 'record',\n 'template',\n 'name',\n 'kind',\n 'type',\n 'alias',\n 'external',\n 'host',\n 'callback',\n 'func',\n 'function',\n 'method',\n 'class',\n 'constructor',\n\n // Relationships\n 'modifies',\n 'mixes',\n 'mixin',\n 'mixinClass',\n 'mixinFunction',\n 'namespace',\n 'borrows',\n 'constructs',\n 'lends',\n 'implements',\n 'requires',\n\n // Long descriptions\n 'desc',\n 'description',\n 'classdesc',\n 'tutorial',\n 'copyright',\n 'license',\n\n // Simple annotations\n\n // TypeScript\n 'internal',\n\n 'const',\n 'constant',\n 'final',\n 'global',\n 'readonly',\n 'abstract',\n 'virtual',\n 'var',\n 'member',\n 'memberof',\n 'memberof!',\n 'inner',\n 'instance',\n 'inheritdoc',\n 'inheritDoc',\n 'override',\n 'hideconstructor',\n\n // Core function/object info\n 'param',\n 'arg',\n 'argument',\n 'prop',\n 'property',\n 'return',\n 'returns',\n\n // Important behavior details\n 'async',\n 'generator',\n 'default',\n 'defaultvalue',\n 'enum',\n 'augments',\n 'extends',\n 'throws',\n 'exception',\n 'yield',\n 'yields',\n 'event',\n 'fires',\n 'emits',\n 'listens',\n 'this',\n\n // Access\n 'static',\n 'private',\n 'protected',\n 'public',\n 'access',\n 'package',\n\n '-other',\n\n // Supplementary descriptions\n 'see',\n 'example',\n\n // METADATA\n\n // Other Closure (undocumented) metadata\n 'closurePrimitive',\n 'customElement',\n 'expose',\n 'hidden',\n 'idGenerator',\n 'meaning',\n 'ngInject',\n 'owner',\n 'wizaction',\n\n // Other Closure (documented) metadata\n 'define',\n 'dict',\n 'export',\n 'externs',\n 'implicitCast',\n 'noalias',\n 'nocollapse',\n 'nocompile',\n 'noinline',\n 'nosideeffects',\n 'polymer',\n 'polymerBehavior',\n 'preserve',\n 'struct',\n 'suppress',\n 'unrestricted',\n\n // @homer0/prettier-plugin-jsdoc metadata\n 'category',\n\n // Non-Closure metadata\n 'ignore',\n 'author',\n 'version',\n 'variation',\n 'since',\n 'deprecated',\n 'todo',\n];\n\nexport default defaultTagOrder;\n"],"mappings":";;;;;;AAAA,MAAMA,eAAe,GAAG
|
|
1
|
+
{"version":3,"file":"defaultTagOrder.js","names":["defaultTagOrder"],"sources":["../src/defaultTagOrder.js"],"sourcesContent":["const defaultTagOrder = [\n // Brief descriptions\n 'summary',\n 'typeSummary',\n\n // Module/file-level\n 'module',\n 'exports',\n 'file',\n 'fileoverview',\n 'overview',\n\n // Identifying (name, type)\n 'typedef',\n 'interface',\n 'record',\n 'template',\n 'name',\n 'kind',\n 'type',\n 'alias',\n 'external',\n 'host',\n 'callback',\n 'func',\n 'function',\n 'method',\n 'class',\n 'constructor',\n\n // Relationships\n 'modifies',\n 'mixes',\n 'mixin',\n 'mixinClass',\n 'mixinFunction',\n 'namespace',\n 'borrows',\n 'constructs',\n 'lends',\n 'implements',\n 'requires',\n\n // Long descriptions\n 'desc',\n 'description',\n 'classdesc',\n 'tutorial',\n 'copyright',\n 'license',\n\n // Simple annotations\n\n // TypeScript\n 'internal',\n\n 'const',\n 'constant',\n 'final',\n 'global',\n 'readonly',\n 'abstract',\n 'virtual',\n 'var',\n 'member',\n 'memberof',\n 'memberof!',\n 'inner',\n 'instance',\n 'inheritdoc',\n 'inheritDoc',\n 'override',\n 'hideconstructor',\n\n // Core function/object info\n 'param',\n 'arg',\n 'argument',\n 'prop',\n 'property',\n 'return',\n 'returns',\n\n // Important behavior details\n 'async',\n 'generator',\n 'default',\n 'defaultvalue',\n 'enum',\n 'augments',\n 'extends',\n 'throws',\n 'exception',\n 'yield',\n 'yields',\n 'event',\n 'fires',\n 'emits',\n 'listens',\n 'this',\n\n // Access\n 'static',\n 'private',\n 'protected',\n 'public',\n 'access',\n 'package',\n\n '-other',\n\n // Supplementary descriptions\n 'see',\n 'example',\n\n // METADATA\n\n // Other Closure (undocumented) metadata\n 'closurePrimitive',\n 'customElement',\n 'expose',\n 'hidden',\n 'idGenerator',\n 'meaning',\n 'ngInject',\n 'owner',\n 'wizaction',\n\n // Other Closure (documented) metadata\n 'define',\n 'dict',\n 'export',\n 'externs',\n 'implicitCast',\n 'noalias',\n 'nocollapse',\n 'nocompile',\n 'noinline',\n 'nosideeffects',\n 'polymer',\n 'polymerBehavior',\n 'preserve',\n 'struct',\n 'suppress',\n 'unrestricted',\n\n // @homer0/prettier-plugin-jsdoc metadata\n 'category',\n\n // Non-Closure metadata\n 'ignore',\n 'author',\n 'version',\n 'variation',\n 'since',\n 'deprecated',\n 'todo',\n];\n\nexport default defaultTagOrder;\n"],"mappings":";;;;;;AAAA,MAAMA,eAAe,GAAG;AACtB;AACA,SAAS,EACT,aAAa;AAEb;AACA,QAAQ,EACR,SAAS,EACT,MAAM,EACN,cAAc,EACd,UAAU;AAEV;AACA,SAAS,EACT,WAAW,EACX,QAAQ,EACR,UAAU,EACV,MAAM,EACN,MAAM,EACN,MAAM,EACN,OAAO,EACP,UAAU,EACV,MAAM,EACN,UAAU,EACV,MAAM,EACN,UAAU,EACV,QAAQ,EACR,OAAO,EACP,aAAa;AAEb;AACA,UAAU,EACV,OAAO,EACP,OAAO,EACP,YAAY,EACZ,eAAe,EACf,WAAW,EACX,SAAS,EACT,YAAY,EACZ,OAAO,EACP,YAAY,EACZ,UAAU;AAEV;AACA,MAAM,EACN,aAAa,EACb,WAAW,EACX,UAAU,EACV,WAAW,EACX,SAAS;AAET;;AAEA;AACA,UAAU,EAEV,OAAO,EACP,UAAU,EACV,OAAO,EACP,QAAQ,EACR,UAAU,EACV,UAAU,EACV,SAAS,EACT,KAAK,EACL,QAAQ,EACR,UAAU,EACV,WAAW,EACX,OAAO,EACP,UAAU,EACV,YAAY,EACZ,YAAY,EACZ,UAAU,EACV,iBAAiB;AAEjB;AACA,OAAO,EACP,KAAK,EACL,UAAU,EACV,MAAM,EACN,UAAU,EACV,QAAQ,EACR,SAAS;AAET;AACA,OAAO,EACP,WAAW,EACX,SAAS,EACT,cAAc,EACd,MAAM,EACN,UAAU,EACV,SAAS,EACT,QAAQ,EACR,WAAW,EACX,OAAO,EACP,QAAQ,EACR,OAAO,EACP,OAAO,EACP,OAAO,EACP,SAAS,EACT,MAAM;AAEN;AACA,QAAQ,EACR,SAAS,EACT,WAAW,EACX,QAAQ,EACR,QAAQ,EACR,SAAS,EAET,QAAQ;AAER;AACA,KAAK,EACL,SAAS;AAET;;AAEA;AACA,kBAAkB,EAClB,eAAe,EACf,QAAQ,EACR,QAAQ,EACR,aAAa,EACb,SAAS,EACT,UAAU,EACV,OAAO,EACP,WAAW;AAEX;AACA,QAAQ,EACR,MAAM,EACN,QAAQ,EACR,SAAS,EACT,cAAc,EACd,SAAS,EACT,YAAY,EACZ,WAAW,EACX,UAAU,EACV,eAAe,EACf,SAAS,EACT,iBAAiB,EACjB,UAAU,EACV,QAAQ,EACR,UAAU,EACV,cAAc;AAEd;AACA,UAAU;AAEV;AACA,QAAQ,EACR,QAAQ,EACR,SAAS,EACT,WAAW,EACX,OAAO,EACP,YAAY,EACZ,MAAM,CACP;AAAC,eAEaA,eAAe;AAAA;AAAA"}
|