eslint-plugin-jsdoc 50.6.17 → 50.7.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/dist/alignTransform.cjs +10 -10
- package/dist/alignTransform.cjs.map +1 -1
- package/dist/exportParser.cjs +141 -135
- package/dist/exportParser.cjs.map +1 -1
- package/dist/generateRule.cjs +10 -12
- package/dist/generateRule.cjs.map +1 -1
- package/dist/getDefaultTagStructureForMode.cjs +73 -73
- package/dist/getDefaultTagStructureForMode.cjs.map +1 -1
- package/dist/getJsdocProcessorPlugin.cjs +121 -110
- package/dist/getJsdocProcessorPlugin.cjs.map +1 -1
- package/dist/index.cjs +17 -12
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +4 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/iterateJsdoc.cjs +87 -66
- package/dist/iterateJsdoc.cjs.map +1 -1
- package/dist/jsdocUtils.cjs +144 -142
- package/dist/jsdocUtils.cjs.map +1 -1
- package/dist/rules/checkAlignment.cjs +2 -2
- package/dist/rules/checkAlignment.cjs.map +1 -1
- package/dist/rules/checkExamples.cjs +22 -28
- package/dist/rules/checkExamples.cjs.map +1 -1
- package/dist/rules/checkIndentation.cjs +2 -2
- package/dist/rules/checkIndentation.cjs.map +1 -1
- package/dist/rules/checkLineAlignment.cjs +14 -14
- package/dist/rules/checkLineAlignment.cjs.map +1 -1
- package/dist/rules/checkParamNames.cjs +21 -15
- package/dist/rules/checkParamNames.cjs.map +1 -1
- package/dist/rules/checkPropertyNames.cjs +2 -2
- package/dist/rules/checkPropertyNames.cjs.map +1 -1
- package/dist/rules/checkTagNames.cjs +11 -11
- package/dist/rules/checkTagNames.cjs.map +1 -1
- package/dist/rules/checkTemplateNames.cjs +21 -22
- package/dist/rules/checkTemplateNames.cjs.map +1 -1
- package/dist/rules/checkTypes.cjs +10 -10
- package/dist/rules/checkTypes.cjs.map +1 -1
- package/dist/rules/checkValues.cjs +11 -14
- package/dist/rules/checkValues.cjs.map +1 -1
- package/dist/rules/convertToJsdocComments.cjs +26 -27
- package/dist/rules/convertToJsdocComments.cjs.map +1 -1
- package/dist/rules/emptyTags.cjs +6 -6
- package/dist/rules/emptyTags.cjs.map +1 -1
- package/dist/rules/importsAsDependencies.cjs.map +1 -1
- package/dist/rules/informativeDocs.cjs +12 -12
- package/dist/rules/informativeDocs.cjs.map +1 -1
- package/dist/rules/linesBeforeBlock.cjs +12 -12
- package/dist/rules/linesBeforeBlock.cjs.map +1 -1
- package/dist/rules/matchDescription.cjs +1 -1
- package/dist/rules/matchDescription.cjs.map +1 -1
- package/dist/rules/matchName.cjs +4 -4
- package/dist/rules/matchName.cjs.map +1 -1
- package/dist/rules/multilineBlocks.cjs +10 -10
- package/dist/rules/multilineBlocks.cjs.map +1 -1
- package/dist/rules/noBadBlocks.cjs +3 -3
- package/dist/rules/noBadBlocks.cjs.map +1 -1
- package/dist/rules/noMultiAsterisks.cjs +6 -6
- package/dist/rules/noMultiAsterisks.cjs.map +1 -1
- package/dist/rules/noRestrictedSyntax.cjs +2 -2
- package/dist/rules/noRestrictedSyntax.cjs.map +1 -1
- package/dist/rules/noTypes.cjs.map +1 -1
- package/dist/rules/noUndefinedTypes.cjs +17 -20
- package/dist/rules/noUndefinedTypes.cjs.map +1 -1
- package/dist/rules/requireAsteriskPrefix.cjs +4 -4
- package/dist/rules/requireAsteriskPrefix.cjs.map +1 -1
- package/dist/rules/requireDescription.cjs +2 -2
- package/dist/rules/requireDescription.cjs.map +1 -1
- package/dist/rules/requireDescriptionCompleteSentence.cjs +8 -8
- package/dist/rules/requireDescriptionCompleteSentence.cjs.map +1 -1
- package/dist/rules/requireFileOverview.cjs +6 -6
- package/dist/rules/requireFileOverview.cjs.map +1 -1
- package/dist/rules/requireHyphenBeforeParamDescription.cjs +1 -4
- package/dist/rules/requireHyphenBeforeParamDescription.cjs.map +1 -1
- package/dist/rules/requireJsdoc.cjs +19 -19
- package/dist/rules/requireJsdoc.cjs.map +1 -1
- package/dist/rules/requireParam.cjs +12 -12
- package/dist/rules/requireParam.cjs.map +1 -1
- package/dist/rules/requireProperty.cjs +1 -1
- package/dist/rules/requireProperty.cjs.map +1 -1
- package/dist/rules/requireReturns.cjs +3 -3
- package/dist/rules/requireReturns.cjs.map +1 -1
- package/dist/rules/requireReturnsCheck.cjs +1 -1
- package/dist/rules/requireReturnsCheck.cjs.map +1 -1
- package/dist/rules/requireReturnsDescription.cjs +1 -1
- package/dist/rules/requireReturnsDescription.cjs.map +1 -1
- package/dist/rules/requireTemplate.cjs +16 -15
- package/dist/rules/requireTemplate.cjs.map +1 -1
- package/dist/rules/requireYields.cjs +4 -4
- package/dist/rules/requireYields.cjs.map +1 -1
- package/dist/rules/requireYieldsCheck.cjs +6 -6
- package/dist/rules/requireYieldsCheck.cjs.map +1 -1
- package/dist/rules/sortTags.cjs +13 -13
- package/dist/rules/sortTags.cjs.map +1 -1
- package/dist/rules/tagLines.cjs +11 -11
- package/dist/rules/tagLines.cjs.map +1 -1
- package/dist/rules/textEscaping.cjs +2 -2
- package/dist/rules/textEscaping.cjs.map +1 -1
- package/dist/rules/validTypes.cjs +15 -15
- package/dist/rules/validTypes.cjs.map +1 -1
- package/dist/tagNames.cjs +1 -1
- package/dist/tagNames.cjs.map +1 -1
- package/dist/utils/hasReturnValue.cjs +176 -176
- package/dist/utils/hasReturnValue.cjs.map +1 -1
- package/eslint.config.js +36 -32
- package/package.json +29 -29
- package/pnpm-workspace.yaml +1 -0
- package/src/alignTransform.js +15 -15
- package/src/exportParser.js +386 -373
- package/src/getDefaultTagStructureForMode.js +45 -45
- package/src/getJsdocProcessorPlugin.js +175 -128
- package/src/index.js +66 -37
- package/src/iterateJsdoc.js +61 -28
- package/src/jsdocUtils.js +354 -338
- package/src/rules/checkAlignment.js +2 -2
- package/src/rules/checkExamples.js +16 -20
- package/src/rules/checkIndentation.js +2 -2
- package/src/rules/checkLineAlignment.js +10 -10
- package/src/rules/checkParamNames.js +22 -14
- package/src/rules/checkPropertyNames.js +1 -1
- package/src/rules/checkTagNames.js +7 -7
- package/src/rules/checkTemplateNames.js +52 -38
- package/src/rules/checkTypes.js +7 -7
- package/src/rules/checkValues.js +16 -17
- package/src/rules/convertToJsdocComments.js +47 -37
- package/src/rules/emptyTags.js +14 -7
- package/src/rules/importsAsDependencies.js +3 -1
- package/src/rules/informativeDocs.js +58 -58
- package/src/rules/linesBeforeBlock.js +25 -17
- package/src/rules/matchDescription.js +1 -1
- package/src/rules/matchName.js +2 -2
- package/src/rules/multilineBlocks.js +10 -10
- package/src/rules/noBadBlocks.js +3 -3
- package/src/rules/noMultiAsterisks.js +4 -4
- package/src/rules/noRestrictedSyntax.js +1 -1
- package/src/rules/noTypes.js +1 -1
- package/src/rules/noUndefinedTypes.js +29 -23
- package/src/rules/requireAsteriskPrefix.js +3 -3
- package/src/rules/requireDescription.js +1 -1
- package/src/rules/requireDescriptionCompleteSentence.js +6 -6
- package/src/rules/requireFileOverview.js +3 -3
- package/src/rules/requireHyphenBeforeParamDescription.js +2 -5
- package/src/rules/requireJsdoc.js +14 -14
- package/src/rules/requireParam.js +9 -9
- package/src/rules/requireProperty.js +1 -1
- package/src/rules/requireReturns.js +1 -1
- package/src/rules/requireReturnsCheck.js +1 -1
- package/src/rules/requireReturnsDescription.js +1 -1
- package/src/rules/requireTemplate.js +59 -38
- package/src/rules/requireYields.js +3 -3
- package/src/rules/requireYieldsCheck.js +1 -1
- package/src/rules/sortTags.js +7 -7
- package/src/rules/tagLines.js +8 -8
- package/src/rules/textEscaping.js +2 -0
- package/src/rules/validTypes.js +29 -29
- package/src/tagNames.js +2 -2
- package/src/utils/hasReturnValue.js +298 -283
|
@@ -9,10 +9,10 @@ const trimStart = (string) => {
|
|
|
9
9
|
};
|
|
10
10
|
|
|
11
11
|
export default iterateJsdoc(({
|
|
12
|
-
|
|
12
|
+
indent,
|
|
13
13
|
jsdocNode,
|
|
14
14
|
report,
|
|
15
|
-
|
|
15
|
+
sourceCode,
|
|
16
16
|
}) => {
|
|
17
17
|
// `indent` is whitespace from line 1 (`/**`), so slice and account for "/".
|
|
18
18
|
const indentLevel = indent.length + 1;
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
// Todo: When replace `CLIEngine` with `ESLint` when feature set complete per https://github.com/eslint/eslint/issues/14745
|
|
2
|
-
// https://github.com/eslint/eslint/blob/master/docs/user-guide/migrating-to-7.0.0.md#-the-cliengine-class-has-been-deprecated
|
|
3
1
|
import iterateJsdoc from '../iterateJsdoc.js';
|
|
4
2
|
import eslint, {
|
|
5
3
|
ESLint,
|
|
@@ -110,10 +108,10 @@ const getLinesCols = (text) => {
|
|
|
110
108
|
};
|
|
111
109
|
|
|
112
110
|
export default iterateJsdoc(({
|
|
113
|
-
report,
|
|
114
|
-
utils,
|
|
115
111
|
context,
|
|
116
112
|
globalState,
|
|
113
|
+
report,
|
|
114
|
+
utils,
|
|
117
115
|
}) => {
|
|
118
116
|
if (semver.gte(ESLint.version, '8.0.0')) {
|
|
119
117
|
report(
|
|
@@ -143,21 +141,21 @@ export default iterateJsdoc(({
|
|
|
143
141
|
rejectExampleCodeRegex = null,
|
|
144
142
|
} = options;
|
|
145
143
|
const {
|
|
144
|
+
allowInlineConfig = true,
|
|
145
|
+
baseConfig = {},
|
|
146
|
+
captionRequired = false,
|
|
146
147
|
checkDefaults = false,
|
|
148
|
+
checkEslintrc = true,
|
|
147
149
|
checkParams = false,
|
|
148
150
|
checkProperties = false,
|
|
149
|
-
|
|
150
|
-
checkEslintrc = true,
|
|
151
|
+
configFile,
|
|
151
152
|
matchingFileName = null,
|
|
152
153
|
matchingFileNameDefaults = null,
|
|
153
154
|
matchingFileNameParams = null,
|
|
154
155
|
matchingFileNameProperties = null,
|
|
156
|
+
noDefaultExampleRules = false,
|
|
155
157
|
paddedIndent = 0,
|
|
156
|
-
baseConfig = {},
|
|
157
|
-
configFile,
|
|
158
|
-
allowInlineConfig = true,
|
|
159
158
|
reportUnusedDisableDirectives = true,
|
|
160
|
-
captionRequired = false,
|
|
161
159
|
} = options;
|
|
162
160
|
|
|
163
161
|
// Make this configurable?
|
|
@@ -201,18 +199,18 @@ export default iterateJsdoc(({
|
|
|
201
199
|
* }} cfg
|
|
202
200
|
*/
|
|
203
201
|
const checkSource = ({
|
|
204
|
-
|
|
202
|
+
cols = 0,
|
|
205
203
|
defaultFileName,
|
|
206
|
-
|
|
204
|
+
filename,
|
|
207
205
|
lines = 0,
|
|
208
|
-
|
|
206
|
+
rules = expressionRules,
|
|
209
207
|
skipInit,
|
|
210
208
|
source,
|
|
211
|
-
targetTagName,
|
|
212
209
|
sources = [],
|
|
213
210
|
tag = {
|
|
214
211
|
line: 0,
|
|
215
212
|
},
|
|
213
|
+
targetTagName,
|
|
216
214
|
}) => {
|
|
217
215
|
if (!skipInit) {
|
|
218
216
|
sources.push({
|
|
@@ -222,8 +220,6 @@ export default iterateJsdoc(({
|
|
|
222
220
|
});
|
|
223
221
|
}
|
|
224
222
|
|
|
225
|
-
// Todo: Make fixable
|
|
226
|
-
|
|
227
223
|
/**
|
|
228
224
|
* @param {{
|
|
229
225
|
* nonJSPrefacingCols: import('../iterateJsdoc.js').Integer,
|
|
@@ -305,11 +301,11 @@ export default iterateJsdoc(({
|
|
|
305
301
|
const codeStartCol = likelyNestedJSDocIndentSpace;
|
|
306
302
|
|
|
307
303
|
for (const {
|
|
308
|
-
message,
|
|
309
|
-
line,
|
|
310
304
|
column,
|
|
311
|
-
|
|
305
|
+
line,
|
|
306
|
+
message,
|
|
312
307
|
ruleId,
|
|
308
|
+
severity,
|
|
313
309
|
} of messages) {
|
|
314
310
|
const startLine = codeStartLine + line + zeroBasedLineIndexAdjust;
|
|
315
311
|
const startCol = codeStartCol + (
|
|
@@ -450,9 +446,9 @@ export default iterateJsdoc(({
|
|
|
450
446
|
exampleCodeRegex.lastIndex = 0;
|
|
451
447
|
while ((exampleCode = exampleCodeRegex.exec(source)) !== null) {
|
|
452
448
|
const {
|
|
453
|
-
index,
|
|
454
449
|
'0': n0,
|
|
455
450
|
'1': n1,
|
|
451
|
+
index,
|
|
456
452
|
} = exampleCode;
|
|
457
453
|
|
|
458
454
|
// Count anything preceding user regex match (can affect line numbering)
|
|
@@ -26,10 +26,10 @@ const maskCodeBlocks = (str) => {
|
|
|
26
26
|
};
|
|
27
27
|
|
|
28
28
|
export default iterateJsdoc(({
|
|
29
|
-
|
|
29
|
+
context,
|
|
30
30
|
jsdocNode,
|
|
31
31
|
report,
|
|
32
|
-
|
|
32
|
+
sourceCode,
|
|
33
33
|
}) => {
|
|
34
34
|
const options = context.options[0] || {};
|
|
35
35
|
const /** @type {{excludeTags: string[]}} */ {
|
|
@@ -174,6 +174,7 @@ const checkNotAlignedPerTag = (utils, tag, customSpacings) => {
|
|
|
174
174
|
*/
|
|
175
175
|
const checkAlignment = ({
|
|
176
176
|
customSpacings,
|
|
177
|
+
disableWrapIndent,
|
|
177
178
|
indent,
|
|
178
179
|
jsdoc,
|
|
179
180
|
jsdocNode,
|
|
@@ -182,16 +183,15 @@ const checkAlignment = ({
|
|
|
182
183
|
tags,
|
|
183
184
|
utils,
|
|
184
185
|
wrapIndent,
|
|
185
|
-
disableWrapIndent,
|
|
186
186
|
}) => {
|
|
187
187
|
const transform = commentFlow(
|
|
188
188
|
alignTransform({
|
|
189
189
|
customSpacings,
|
|
190
|
+
disableWrapIndent,
|
|
190
191
|
indent,
|
|
191
192
|
preserveMainDescriptionPostDelimiter,
|
|
192
193
|
tags,
|
|
193
194
|
wrapIndent,
|
|
194
|
-
disableWrapIndent,
|
|
195
195
|
}),
|
|
196
196
|
);
|
|
197
197
|
const transformedJsdoc = transform(jsdoc);
|
|
@@ -217,21 +217,21 @@ const checkAlignment = ({
|
|
|
217
217
|
};
|
|
218
218
|
|
|
219
219
|
export default iterateJsdoc(({
|
|
220
|
+
context,
|
|
220
221
|
indent,
|
|
221
222
|
jsdoc,
|
|
222
223
|
jsdocNode,
|
|
223
224
|
report,
|
|
224
|
-
context,
|
|
225
225
|
utils,
|
|
226
226
|
}) => {
|
|
227
227
|
const {
|
|
228
|
+
customSpacings,
|
|
229
|
+
disableWrapIndent = false,
|
|
230
|
+
preserveMainDescriptionPostDelimiter,
|
|
228
231
|
tags: applicableTags = [
|
|
229
232
|
'param', 'arg', 'argument', 'property', 'prop', 'returns', 'return',
|
|
230
233
|
],
|
|
231
|
-
preserveMainDescriptionPostDelimiter,
|
|
232
|
-
customSpacings,
|
|
233
234
|
wrapIndent = '',
|
|
234
|
-
disableWrapIndent = false,
|
|
235
235
|
} = context.options[1] || {};
|
|
236
236
|
|
|
237
237
|
if (context.options[0] === 'always') {
|
|
@@ -249,6 +249,7 @@ export default iterateJsdoc(({
|
|
|
249
249
|
|
|
250
250
|
checkAlignment({
|
|
251
251
|
customSpacings,
|
|
252
|
+
disableWrapIndent,
|
|
252
253
|
indent,
|
|
253
254
|
jsdoc,
|
|
254
255
|
jsdocNode,
|
|
@@ -257,7 +258,6 @@ export default iterateJsdoc(({
|
|
|
257
258
|
tags: applicableTags,
|
|
258
259
|
utils,
|
|
259
260
|
wrapIndent,
|
|
260
|
-
disableWrapIndent,
|
|
261
261
|
});
|
|
262
262
|
|
|
263
263
|
return;
|
|
@@ -347,6 +347,9 @@ export default iterateJsdoc(({
|
|
|
347
347
|
},
|
|
348
348
|
},
|
|
349
349
|
},
|
|
350
|
+
disableWrapIndent: {
|
|
351
|
+
type: 'boolean',
|
|
352
|
+
},
|
|
350
353
|
preserveMainDescriptionPostDelimiter: {
|
|
351
354
|
default: false,
|
|
352
355
|
type: 'boolean',
|
|
@@ -360,9 +363,6 @@ export default iterateJsdoc(({
|
|
|
360
363
|
wrapIndent: {
|
|
361
364
|
type: 'string',
|
|
362
365
|
},
|
|
363
|
-
disableWrapIndent: {
|
|
364
|
-
type: 'boolean',
|
|
365
|
-
},
|
|
366
366
|
},
|
|
367
367
|
type: 'object',
|
|
368
368
|
},
|
|
@@ -87,6 +87,7 @@ const validateParameterNames = (
|
|
|
87
87
|
|
|
88
88
|
return true;
|
|
89
89
|
}
|
|
90
|
+
|
|
90
91
|
if (
|
|
91
92
|
typeof functionParameterName === 'object' &&
|
|
92
93
|
'name' in functionParameterName &&
|
|
@@ -98,6 +99,7 @@ const validateParameterNames = (
|
|
|
98
99
|
thisOffset--;
|
|
99
100
|
return false;
|
|
100
101
|
}
|
|
102
|
+
|
|
101
103
|
report(
|
|
102
104
|
`Expected @${targetTagName} name to be "${expectedName}". Got "${actualName}".`,
|
|
103
105
|
null,
|
|
@@ -118,10 +120,10 @@ const validateParameterNames = (
|
|
|
118
120
|
const [
|
|
119
121
|
parameterName,
|
|
120
122
|
{
|
|
121
|
-
|
|
123
|
+
annotationParamName,
|
|
122
124
|
hasPropertyRest,
|
|
125
|
+
names: properties,
|
|
123
126
|
rests,
|
|
124
|
-
annotationParamName,
|
|
125
127
|
},
|
|
126
128
|
] =
|
|
127
129
|
/**
|
|
@@ -191,8 +193,8 @@ const validateParameterNames = (
|
|
|
191
193
|
const hasMissing = missingProperties.length;
|
|
192
194
|
if (hasMissing) {
|
|
193
195
|
for (const {
|
|
194
|
-
tagPlacement,
|
|
195
196
|
name: missingProperty,
|
|
197
|
+
tagPlacement,
|
|
196
198
|
} of missingProperties) {
|
|
197
199
|
report(`Missing @${targetTagName} "${missingProperty}"`, null, tagPlacement);
|
|
198
200
|
}
|
|
@@ -271,8 +273,14 @@ const validateParameterNames = (
|
|
|
271
273
|
// When disableMissingParamChecks is true tag names can be omitted.
|
|
272
274
|
// Report when the tag names do not match the expected names or they are used out of order.
|
|
273
275
|
if (disableMissingParamChecks) {
|
|
274
|
-
const usedExpectedNames = expectedNames.map(a
|
|
275
|
-
|
|
276
|
+
const usedExpectedNames = expectedNames.map((a) => {
|
|
277
|
+
return a?.toString();
|
|
278
|
+
}).filter((expectedName) => {
|
|
279
|
+
return expectedName && actualNames.includes(expectedName);
|
|
280
|
+
});
|
|
281
|
+
const usedInOrder = actualNames.every((actualName, idx) => {
|
|
282
|
+
return actualName === usedExpectedNames[idx];
|
|
283
|
+
});
|
|
276
284
|
if (usedInOrder) {
|
|
277
285
|
return false;
|
|
278
286
|
}
|
|
@@ -283,9 +291,9 @@ const validateParameterNames = (
|
|
|
283
291
|
expectedNames.map((expectedName) => {
|
|
284
292
|
return typeof expectedName === 'object' &&
|
|
285
293
|
'name' in expectedName &&
|
|
286
|
-
expectedName.restElement
|
|
287
|
-
|
|
288
|
-
|
|
294
|
+
expectedName.restElement ?
|
|
295
|
+
'...' + expectedName.name :
|
|
296
|
+
expectedName;
|
|
289
297
|
}).join(', ')
|
|
290
298
|
}". Got "${actualNames.join(', ')}".`,
|
|
291
299
|
null,
|
|
@@ -318,8 +326,8 @@ const validateParameterNamesDeep = (
|
|
|
318
326
|
let lastRealParameter;
|
|
319
327
|
|
|
320
328
|
return jsdocParameterNames.some(({
|
|
321
|
-
name: jsdocParameterName,
|
|
322
329
|
idx,
|
|
330
|
+
name: jsdocParameterName,
|
|
323
331
|
}) => {
|
|
324
332
|
const isPropertyPath = jsdocParameterName.includes('.');
|
|
325
333
|
|
|
@@ -356,26 +364,26 @@ const validateParameterNamesDeep = (
|
|
|
356
364
|
|
|
357
365
|
const allowedNodes = [
|
|
358
366
|
'ArrowFunctionExpression', 'FunctionDeclaration', 'FunctionExpression', 'TSDeclareFunction',
|
|
359
|
-
|
|
360
|
-
|
|
367
|
+
// Add this to above defaults
|
|
368
|
+
'TSMethodSignature',
|
|
361
369
|
];
|
|
362
370
|
|
|
363
371
|
export default iterateJsdoc(({
|
|
364
372
|
context,
|
|
365
373
|
jsdoc,
|
|
374
|
+
node,
|
|
366
375
|
report,
|
|
367
376
|
utils,
|
|
368
|
-
node,
|
|
369
377
|
}) => {
|
|
370
378
|
const {
|
|
371
379
|
allowExtraTrailingParamDocs,
|
|
372
380
|
checkDestructured = true,
|
|
373
381
|
checkRestProperty = false,
|
|
374
382
|
checkTypesPattern = '/^(?:[oO]bject|[aA]rray|PlainObject|Generic(?:Object|Array))$/',
|
|
375
|
-
enableFixer = false,
|
|
376
|
-
useDefaultObjectProperties = false,
|
|
377
383
|
disableExtraPropertyReporting = false,
|
|
378
384
|
disableMissingParamChecks = false,
|
|
385
|
+
enableFixer = false,
|
|
386
|
+
useDefaultObjectProperties = false,
|
|
379
387
|
} = context.options[0] || {};
|
|
380
388
|
|
|
381
389
|
// Although we might just remove global settings contexts from applying to
|
|
@@ -61,14 +61,14 @@ const typedTagsUnnecessaryOutsideDeclare = new Set([
|
|
|
61
61
|
]);
|
|
62
62
|
|
|
63
63
|
export default iterateJsdoc(({
|
|
64
|
-
sourceCode,
|
|
65
|
-
jsdoc,
|
|
66
|
-
report,
|
|
67
|
-
utils,
|
|
68
64
|
context,
|
|
65
|
+
jsdoc,
|
|
66
|
+
jsdocNode,
|
|
69
67
|
node,
|
|
68
|
+
report,
|
|
70
69
|
settings,
|
|
71
|
-
|
|
70
|
+
sourceCode,
|
|
71
|
+
utils,
|
|
72
72
|
}) => {
|
|
73
73
|
const
|
|
74
74
|
/**
|
|
@@ -87,8 +87,8 @@ export default iterateJsdoc(({
|
|
|
87
87
|
/** @type {(string|undefined)[]} */
|
|
88
88
|
let definedPreferredTags = [];
|
|
89
89
|
const {
|
|
90
|
-
tagNamePreference,
|
|
91
90
|
structuredTags,
|
|
91
|
+
tagNamePreference,
|
|
92
92
|
} = settings;
|
|
93
93
|
const definedStructuredTags = Object.keys(structuredTags);
|
|
94
94
|
const definedNonPreferredTags = Object.keys(tagNamePreference);
|
|
@@ -146,7 +146,7 @@ export default iterateJsdoc(({
|
|
|
146
146
|
}
|
|
147
147
|
|
|
148
148
|
if (context.getFilename().endsWith('.d.ts') && [
|
|
149
|
-
'Program',
|
|
149
|
+
null, 'Program', undefined,
|
|
150
150
|
].includes(node?.parent?.type)) {
|
|
151
151
|
return false;
|
|
152
152
|
}
|
|
@@ -1,19 +1,18 @@
|
|
|
1
|
+
import iterateJsdoc from '../iterateJsdoc.js';
|
|
1
2
|
import {
|
|
2
3
|
parse as parseType,
|
|
3
4
|
traverse,
|
|
4
5
|
tryParse as tryParseType,
|
|
5
6
|
} from '@es-joy/jsdoccomment';
|
|
6
|
-
import iterateJsdoc from '../iterateJsdoc.js';
|
|
7
7
|
|
|
8
8
|
export default iterateJsdoc(({
|
|
9
|
-
context,
|
|
10
|
-
utils,
|
|
11
9
|
node,
|
|
12
|
-
settings,
|
|
13
10
|
report,
|
|
11
|
+
settings,
|
|
12
|
+
utils,
|
|
14
13
|
}) => {
|
|
15
14
|
const {
|
|
16
|
-
mode
|
|
15
|
+
mode,
|
|
17
16
|
} = settings;
|
|
18
17
|
|
|
19
18
|
const templateTags = utils.getTags('template');
|
|
@@ -63,11 +62,13 @@ export default iterateJsdoc(({
|
|
|
63
62
|
|
|
64
63
|
const checkTemplateTags = () => {
|
|
65
64
|
for (const tag of templateTags) {
|
|
66
|
-
const {
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
65
|
+
const {
|
|
66
|
+
name,
|
|
67
|
+
} = tag;
|
|
68
|
+
const names = name.split(/,\s*/u);
|
|
69
|
+
for (const nme of names) {
|
|
70
|
+
if (!usedNames.has(nme)) {
|
|
71
|
+
report(`@template ${nme} not in use`, null, tag);
|
|
71
72
|
}
|
|
72
73
|
}
|
|
73
74
|
}
|
|
@@ -82,10 +83,19 @@ export default iterateJsdoc(({
|
|
|
82
83
|
*/
|
|
83
84
|
const checkParameters = (aliasDeclaration, checkParamsAndReturns) => {
|
|
84
85
|
/* c8 ignore next -- Guard */
|
|
85
|
-
const {
|
|
86
|
-
|
|
86
|
+
const {
|
|
87
|
+
params,
|
|
88
|
+
} = aliasDeclaration.typeParameters ?? {
|
|
89
|
+
params: [],
|
|
90
|
+
};
|
|
91
|
+
for (const {
|
|
92
|
+
name: {
|
|
93
|
+
name,
|
|
94
|
+
},
|
|
95
|
+
} of params) {
|
|
87
96
|
usedNames.add(name);
|
|
88
97
|
}
|
|
98
|
+
|
|
89
99
|
if (checkParamsAndReturns) {
|
|
90
100
|
checkParamsAndReturnsTags();
|
|
91
101
|
}
|
|
@@ -100,28 +110,30 @@ export default iterateJsdoc(({
|
|
|
100
110
|
if (!nde) {
|
|
101
111
|
return;
|
|
102
112
|
}
|
|
113
|
+
|
|
103
114
|
switch (nde.type) {
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
115
|
+
case 'ClassDeclaration':
|
|
116
|
+
case 'TSInterfaceDeclaration':
|
|
117
|
+
case 'TSTypeAliasDeclaration':
|
|
118
|
+
checkParameters(nde);
|
|
119
|
+
break;
|
|
120
|
+
case 'ExportDefaultDeclaration':
|
|
121
|
+
case 'ExportNamedDeclaration':
|
|
122
|
+
switch (nde.declaration?.type) {
|
|
123
|
+
case 'ClassDeclaration':
|
|
124
|
+
case 'TSInterfaceDeclaration':
|
|
125
|
+
case 'TSTypeAliasDeclaration':
|
|
126
|
+
checkParameters(nde.declaration);
|
|
127
|
+
break;
|
|
128
|
+
case 'FunctionDeclaration':
|
|
129
|
+
checkParameters(nde.declaration, true);
|
|
130
|
+
break;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
break;
|
|
134
|
+
case 'FunctionDeclaration':
|
|
135
|
+
checkParameters(nde, true);
|
|
136
|
+
break;
|
|
125
137
|
}
|
|
126
138
|
};
|
|
127
139
|
|
|
@@ -151,11 +163,13 @@ export default iterateJsdoc(({
|
|
|
151
163
|
}
|
|
152
164
|
|
|
153
165
|
for (const tag of templateTags) {
|
|
154
|
-
const {
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
166
|
+
const {
|
|
167
|
+
name,
|
|
168
|
+
} = tag;
|
|
169
|
+
const names = name.split(/,\s*/u);
|
|
170
|
+
for (const nme of names) {
|
|
171
|
+
if (!usedNames.has(nme)) {
|
|
172
|
+
report(`@template ${nme} not in use`, null, tag);
|
|
159
173
|
}
|
|
160
174
|
}
|
|
161
175
|
}
|
package/src/rules/checkTypes.js
CHANGED
|
@@ -89,12 +89,12 @@ const getMessage = (upperCase) => {
|
|
|
89
89
|
};
|
|
90
90
|
|
|
91
91
|
export default iterateJsdoc(({
|
|
92
|
+
context,
|
|
92
93
|
jsdocNode,
|
|
93
|
-
sourceCode,
|
|
94
94
|
report,
|
|
95
|
-
utils,
|
|
96
95
|
settings,
|
|
97
|
-
|
|
96
|
+
sourceCode,
|
|
97
|
+
utils,
|
|
98
98
|
}) => {
|
|
99
99
|
const jsdocTagsWithPossibleType = utils.filterTags((tag) => {
|
|
100
100
|
return Boolean(utils.tagMightHaveTypePosition(tag.tag));
|
|
@@ -109,9 +109,9 @@ export default iterateJsdoc(({
|
|
|
109
109
|
* }}
|
|
110
110
|
*/
|
|
111
111
|
{
|
|
112
|
+
mode,
|
|
112
113
|
preferredTypes: preferredTypesOriginal,
|
|
113
114
|
structuredTags,
|
|
114
|
-
mode,
|
|
115
115
|
} = settings;
|
|
116
116
|
|
|
117
117
|
const injectObjectPreferredTypes = !('Object' in preferredTypesOriginal ||
|
|
@@ -177,9 +177,9 @@ export default iterateJsdoc(({
|
|
|
177
177
|
* })[]
|
|
178
178
|
* }}
|
|
179
179
|
*/ {
|
|
180
|
+
exemptTagContexts = [],
|
|
180
181
|
noDefaults,
|
|
181
182
|
unifyParentAndChildTypeChecks,
|
|
182
|
-
exemptTagContexts = [],
|
|
183
183
|
} = context.options[0] || {};
|
|
184
184
|
|
|
185
185
|
/**
|
|
@@ -415,8 +415,8 @@ export default iterateJsdoc(({
|
|
|
415
415
|
}
|
|
416
416
|
|
|
417
417
|
const {
|
|
418
|
-
tag: tagName,
|
|
419
418
|
name: nameInTag,
|
|
419
|
+
tag: tagName,
|
|
420
420
|
} = jsdocTag;
|
|
421
421
|
|
|
422
422
|
traverse(typeAst, (node, parentNode, property) => {
|
|
@@ -428,7 +428,7 @@ export default iterateJsdoc(({
|
|
|
428
428
|
* @type {import('jsdoc-type-pratt-parser').NameResult}
|
|
429
429
|
*/ (node);
|
|
430
430
|
if (![
|
|
431
|
-
'
|
|
431
|
+
'JsdocTypeAny', 'JsdocTypeName',
|
|
432
432
|
].includes(type)) {
|
|
433
433
|
return;
|
|
434
434
|
}
|
package/src/rules/checkValues.js
CHANGED
|
@@ -1,12 +1,9 @@
|
|
|
1
|
-
import
|
|
2
|
-
import {
|
|
3
|
-
|
|
1
|
+
import iterateJsdoc from '../iterateJsdoc.js';
|
|
2
|
+
import {
|
|
3
|
+
parseImportsExports,
|
|
4
|
+
} from 'parse-imports-exports';
|
|
4
5
|
import semver from 'semver';
|
|
5
6
|
import spdxExpressionParse from 'spdx-expression-parse';
|
|
6
|
-
import {parseImportsExports} from 'parse-imports-exports';
|
|
7
|
-
import iterateJsdoc from '../iterateJsdoc.js';
|
|
8
|
-
|
|
9
|
-
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
10
7
|
|
|
11
8
|
const allowedKinds = new Set([
|
|
12
9
|
'class',
|
|
@@ -23,17 +20,17 @@ const allowedKinds = new Set([
|
|
|
23
20
|
]);
|
|
24
21
|
|
|
25
22
|
export default iterateJsdoc(({
|
|
26
|
-
utils,
|
|
27
|
-
report,
|
|
28
23
|
context,
|
|
24
|
+
report,
|
|
29
25
|
settings,
|
|
26
|
+
utils,
|
|
30
27
|
}) => {
|
|
31
28
|
const options = context.options[0] || {};
|
|
32
29
|
const {
|
|
33
|
-
allowedLicenses = null,
|
|
34
30
|
allowedAuthors = null,
|
|
35
|
-
|
|
31
|
+
allowedLicenses = null,
|
|
36
32
|
licensePattern = '/([^\n\r]*)/gu',
|
|
33
|
+
numericOnlyVariation = false,
|
|
37
34
|
} = options;
|
|
38
35
|
|
|
39
36
|
utils.forEachPreferredTag('version', (jsdocParameter, targetTagName) => {
|
|
@@ -167,18 +164,20 @@ export default iterateJsdoc(({
|
|
|
167
164
|
if (settings.mode === 'typescript') {
|
|
168
165
|
utils.forEachPreferredTag('import', (tag) => {
|
|
169
166
|
const {
|
|
170
|
-
|
|
167
|
+
description,
|
|
168
|
+
name,
|
|
169
|
+
type,
|
|
171
170
|
} = tag;
|
|
172
|
-
const typePart = type ? `{${type}}
|
|
173
|
-
const imprt = 'import ' + (description
|
|
174
|
-
|
|
175
|
-
|
|
171
|
+
const typePart = type ? `{${type}} ` : '';
|
|
172
|
+
const imprt = 'import ' + (description ?
|
|
173
|
+
`${typePart}${name} ${description}` :
|
|
174
|
+
`${typePart}${name}`);
|
|
176
175
|
|
|
177
176
|
const importsExports = parseImportsExports(imprt.trim());
|
|
178
177
|
|
|
179
178
|
if (importsExports.errors) {
|
|
180
179
|
report(
|
|
181
|
-
|
|
180
|
+
'Bad @import tag',
|
|
182
181
|
null,
|
|
183
182
|
tag,
|
|
184
183
|
);
|