eslint-plugin-jsdoc 63.3.3 → 64.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +23 -48
- package/src/index.js +3 -6
- package/dist/WarnSettings.cjs +0 -38
- package/dist/WarnSettings.cjs.map +0 -1
- package/dist/alignTransform.cjs +0 -402
- package/dist/alignTransform.cjs.map +0 -1
- package/dist/buildForbidRuleDefinition.cjs +0 -101
- package/dist/buildForbidRuleDefinition.cjs.map +0 -1
- package/dist/buildRejectOrPreferRuleDefinition.cjs +0 -352
- package/dist/buildRejectOrPreferRuleDefinition.cjs.map +0 -1
- package/dist/cjs/WarnSettings.d.ts +0 -16
- package/dist/cjs/alignTransform.d.ts +0 -33
- package/dist/cjs/buildForbidRuleDefinition.d.ts +0 -14
- package/dist/cjs/buildRejectOrPreferRuleDefinition.d.ts +0 -8
- package/dist/cjs/defaultTagOrder.d.ts +0 -4
- package/dist/cjs/exportParser.d.ts +0 -40
- package/dist/cjs/getDefaultTagStructureForMode.d.ts +0 -10
- package/dist/cjs/getJsdocProcessorPlugin.d.cts +0 -5
- package/dist/cjs/getJsdocProcessorPlugin.d.ts +0 -66
- package/dist/cjs/index-cjs.d.ts +0 -26
- package/dist/cjs/index.cjs.d.cts +0 -2
- package/dist/cjs/iterateJsdoc.d.cts +0 -7
- package/dist/cjs/iterateJsdoc.d.ts +0 -495
- package/dist/cjs/jsdocUtils.d.ts +0 -500
- package/dist/cjs/rules/checkAccess.d.ts +0 -2
- package/dist/cjs/rules/checkAlignment.d.ts +0 -2
- package/dist/cjs/rules/checkExamples.d.ts +0 -3
- package/dist/cjs/rules/checkIndentation.d.ts +0 -2
- package/dist/cjs/rules/checkLineAlignment.d.ts +0 -9
- package/dist/cjs/rules/checkParamNames.d.ts +0 -2
- package/dist/cjs/rules/checkPropertyNames.d.ts +0 -2
- package/dist/cjs/rules/checkSyntax.d.ts +0 -2
- package/dist/cjs/rules/checkTagNames.d.ts +0 -2
- package/dist/cjs/rules/checkTemplateNames.d.ts +0 -2
- package/dist/cjs/rules/checkTypes.d.ts +0 -7
- package/dist/cjs/rules/checkValues.d.ts +0 -2
- package/dist/cjs/rules/convertToJsdocComments.d.ts +0 -266
- package/dist/cjs/rules/emptyTags.d.ts +0 -2
- package/dist/cjs/rules/escapeInlineTags.d.ts +0 -2
- package/dist/cjs/rules/implementsOnClasses.d.ts +0 -2
- package/dist/cjs/rules/importsAsDependencies.d.ts +0 -2
- package/dist/cjs/rules/informativeDocs.d.ts +0 -2
- package/dist/cjs/rules/linesBeforeBlock.d.ts +0 -2
- package/dist/cjs/rules/matchDescription.d.ts +0 -2
- package/dist/cjs/rules/matchName.d.ts +0 -2
- package/dist/cjs/rules/multilineBlocks.d.ts +0 -2
- package/dist/cjs/rules/noBadBlocks.d.ts +0 -2
- package/dist/cjs/rules/noBlankBlockDescriptions.d.ts +0 -2
- package/dist/cjs/rules/noBlankBlocks.d.ts +0 -2
- package/dist/cjs/rules/noDefaults.d.ts +0 -2
- package/dist/cjs/rules/noMissingSyntax.d.ts +0 -9
- package/dist/cjs/rules/noMultiAsterisks.d.ts +0 -2
- package/dist/cjs/rules/noRestrictedSyntax.d.ts +0 -2
- package/dist/cjs/rules/noTypes.d.ts +0 -2
- package/dist/cjs/rules/noUndefinedTypes.d.ts +0 -2
- package/dist/cjs/rules/normalizeSeeLinks.d.ts +0 -2
- package/dist/cjs/rules/preferImportTag.d.ts +0 -2
- package/dist/cjs/rules/requireAsteriskPrefix.d.ts +0 -2
- package/dist/cjs/rules/requireDescription.d.ts +0 -2
- package/dist/cjs/rules/requireDescriptionCompleteSentence.d.ts +0 -2
- package/dist/cjs/rules/requireExample.d.ts +0 -2
- package/dist/cjs/rules/requireFileOverview.d.ts +0 -2
- package/dist/cjs/rules/requireHyphenBeforeParamDescription.d.ts +0 -2
- package/dist/cjs/rules/requireJsdoc.d.ts +0 -24
- package/dist/cjs/rules/requireParam.d.ts +0 -3
- package/dist/cjs/rules/requireParamDescription.d.ts +0 -2
- package/dist/cjs/rules/requireParamName.d.ts +0 -2
- package/dist/cjs/rules/requireParamType.d.ts +0 -2
- package/dist/cjs/rules/requireProperty.d.ts +0 -2
- package/dist/cjs/rules/requirePropertyDescription.d.ts +0 -2
- package/dist/cjs/rules/requirePropertyName.d.ts +0 -2
- package/dist/cjs/rules/requirePropertyType.d.ts +0 -2
- package/dist/cjs/rules/requireRejects.d.ts +0 -2
- package/dist/cjs/rules/requireReturns.d.ts +0 -2
- package/dist/cjs/rules/requireReturnsCheck.d.ts +0 -2
- package/dist/cjs/rules/requireReturnsDescription.d.ts +0 -2
- package/dist/cjs/rules/requireReturnsType.d.ts +0 -2
- package/dist/cjs/rules/requireTags.d.ts +0 -2
- package/dist/cjs/rules/requireTemplate.d.ts +0 -2
- package/dist/cjs/rules/requireThrows.d.ts +0 -2
- package/dist/cjs/rules/requireYields.d.ts +0 -2
- package/dist/cjs/rules/requireYieldsCheck.d.ts +0 -2
- package/dist/cjs/rules/sortTags.d.ts +0 -2
- package/dist/cjs/rules/tagLines.d.ts +0 -2
- package/dist/cjs/rules/textEscaping.d.ts +0 -2
- package/dist/cjs/rules/tsMethodSignatureStyle.d.ts +0 -2
- package/dist/cjs/rules/tsNoEmptyObjectType.d.ts +0 -2
- package/dist/cjs/rules/tsNoUnnecessaryTemplateExpression.d.ts +0 -2
- package/dist/cjs/rules/tsPreferFunctionType.d.ts +0 -2
- package/dist/cjs/rules/typeFormatting.d.ts +0 -2
- package/dist/cjs/rules/validTypes.d.ts +0 -2
- package/dist/cjs/tagNames.d.ts +0 -15
- package/dist/cjs/utils/hasReturnValue.d.ts +0 -19
- package/dist/defaultTagOrder.cjs +0 -46
- package/dist/defaultTagOrder.cjs.map +0 -1
- package/dist/exportParser.cjs +0 -732
- package/dist/exportParser.cjs.map +0 -1
- package/dist/generateDocs.cjs +0 -342
- package/dist/generateDocs.cjs.map +0 -1
- package/dist/generateOptions.cjs +0 -62
- package/dist/generateOptions.cjs.map +0 -1
- package/dist/generateRule.cjs +0 -248
- package/dist/generateRule.cjs.map +0 -1
- package/dist/generateRuleTypes.cjs +0 -24
- package/dist/generateRuleTypes.cjs.map +0 -1
- package/dist/getDefaultTagStructureForMode.cjs +0 -289
- package/dist/getDefaultTagStructureForMode.cjs.map +0 -1
- package/dist/getJsdocProcessorPlugin.cjs +0 -587
- package/dist/getJsdocProcessorPlugin.cjs.map +0 -1
- package/dist/getJsdocProcessorPlugin.cts +0 -5
- package/dist/index-cjs.cjs +0 -600
- package/dist/index-cjs.cjs.map +0 -1
- package/dist/index-cjs.d.ts +0 -27
- package/dist/index-esm.cjs +0 -162
- package/dist/index-esm.cjs.map +0 -1
- package/dist/index-esm.d.ts +0 -72
- package/dist/index.cjs +0 -748
- package/dist/index.cjs.cts +0 -3
- package/dist/index.cjs.map +0 -1
- package/dist/iterateJsdoc.cjs +0 -2150
- package/dist/iterateJsdoc.cjs.map +0 -1
- package/dist/iterateJsdoc.cts +0 -7
- package/dist/jsdocUtils.cjs +0 -1786
- package/dist/jsdocUtils.cjs.map +0 -1
- package/dist/rules/checkAccess.cjs +0 -40
- package/dist/rules/checkAccess.cjs.map +0 -1
- package/dist/rules/checkAlignment.cjs +0 -78
- package/dist/rules/checkAlignment.cjs.map +0 -1
- package/dist/rules/checkExamples.cjs +0 -521
- package/dist/rules/checkExamples.cjs.map +0 -1
- package/dist/rules/checkIndentation.cjs +0 -170
- package/dist/rules/checkIndentation.cjs.map +0 -1
- package/dist/rules/checkLineAlignment.cjs +0 -398
- package/dist/rules/checkLineAlignment.cjs.map +0 -1
- package/dist/rules/checkParamNames.cjs +0 -407
- package/dist/rules/checkParamNames.cjs.map +0 -1
- package/dist/rules/checkPropertyNames.cjs +0 -135
- package/dist/rules/checkPropertyNames.cjs.map +0 -1
- package/dist/rules/checkSyntax.cjs +0 -38
- package/dist/rules/checkSyntax.cjs.map +0 -1
- package/dist/rules/checkTagNames.cjs +0 -312
- package/dist/rules/checkTagNames.cjs.map +0 -1
- package/dist/rules/checkTemplateNames.cjs +0 -192
- package/dist/rules/checkTemplateNames.cjs.map +0 -1
- package/dist/rules/checkTypes.cjs +0 -111
- package/dist/rules/checkTypes.cjs.map +0 -1
- package/dist/rules/checkValues.cjs +0 -166
- package/dist/rules/checkValues.cjs.map +0 -1
- package/dist/rules/convertToJsdocComments.cjs +0 -356
- package/dist/rules/convertToJsdocComments.cjs.map +0 -1
- package/dist/rules/emptyTags.cjs +0 -98
- package/dist/rules/emptyTags.cjs.map +0 -1
- package/dist/rules/escapeInlineTags.cjs +0 -234
- package/dist/rules/escapeInlineTags.cjs.map +0 -1
- package/dist/rules/implementsOnClasses.cjs +0 -74
- package/dist/rules/implementsOnClasses.cjs.map +0 -1
- package/dist/rules/importsAsDependencies.cjs +0 -104
- package/dist/rules/importsAsDependencies.cjs.map +0 -1
- package/dist/rules/informativeDocs.cjs +0 -187
- package/dist/rules/informativeDocs.cjs.map +0 -1
- package/dist/rules/linesBeforeBlock.cjs +0 -120
- package/dist/rules/linesBeforeBlock.cjs.map +0 -1
- package/dist/rules/matchDescription.cjs +0 -356
- package/dist/rules/matchDescription.cjs.map +0 -1
- package/dist/rules/matchName.cjs +0 -160
- package/dist/rules/matchName.cjs.map +0 -1
- package/dist/rules/multilineBlocks.cjs +0 -431
- package/dist/rules/multilineBlocks.cjs.map +0 -1
- package/dist/rules/noBadBlocks.cjs +0 -100
- package/dist/rules/noBadBlocks.cjs.map +0 -1
- package/dist/rules/noBlankBlockDescriptions.cjs +0 -63
- package/dist/rules/noBlankBlockDescriptions.cjs.map +0 -1
- package/dist/rules/noBlankBlocks.cjs +0 -54
- package/dist/rules/noBlankBlocks.cjs.map +0 -1
- package/dist/rules/noDefaults.cjs +0 -102
- package/dist/rules/noDefaults.cjs.map +0 -1
- package/dist/rules/noMissingSyntax.cjs +0 -196
- package/dist/rules/noMissingSyntax.cjs.map +0 -1
- package/dist/rules/noMultiAsterisks.cjs +0 -126
- package/dist/rules/noMultiAsterisks.cjs.map +0 -1
- package/dist/rules/noRestrictedSyntax.cjs +0 -68
- package/dist/rules/noRestrictedSyntax.cjs.map +0 -1
- package/dist/rules/noTypes.cjs +0 -101
- package/dist/rules/noTypes.cjs.map +0 -1
- package/dist/rules/noUndefinedTypes.cjs +0 -616
- package/dist/rules/noUndefinedTypes.cjs.map +0 -1
- package/dist/rules/normalizeSeeLinks.cjs +0 -271
- package/dist/rules/normalizeSeeLinks.cjs.map +0 -1
- package/dist/rules/preferImportTag.cjs +0 -362
- package/dist/rules/preferImportTag.cjs.map +0 -1
- package/dist/rules/requireAsteriskPrefix.cjs +0 -190
- package/dist/rules/requireAsteriskPrefix.cjs.map +0 -1
- package/dist/rules/requireDescription.cjs +0 -164
- package/dist/rules/requireDescription.cjs.map +0 -1
- package/dist/rules/requireDescriptionCompleteSentence.cjs +0 -321
- package/dist/rules/requireDescriptionCompleteSentence.cjs.map +0 -1
- package/dist/rules/requireExample.cjs +0 -136
- package/dist/rules/requireExample.cjs.map +0 -1
- package/dist/rules/requireFileOverview.cjs +0 -194
- package/dist/rules/requireFileOverview.cjs.map +0 -1
- package/dist/rules/requireHyphenBeforeParamDescription.cjs +0 -166
- package/dist/rules/requireHyphenBeforeParamDescription.cjs.map +0 -1
- package/dist/rules/requireJsdoc.cjs +0 -721
- package/dist/rules/requireJsdoc.cjs.map +0 -1
- package/dist/rules/requireParam.cjs +0 -772
- package/dist/rules/requireParam.cjs.map +0 -1
- package/dist/rules/requireParamDescription.cjs +0 -105
- package/dist/rules/requireParamDescription.cjs.map +0 -1
- package/dist/rules/requireParamName.cjs +0 -68
- package/dist/rules/requireParamName.cjs.map +0 -1
- package/dist/rules/requireParamType.cjs +0 -104
- package/dist/rules/requireParamType.cjs.map +0 -1
- package/dist/rules/requireProperty.cjs +0 -63
- package/dist/rules/requireProperty.cjs.map +0 -1
- package/dist/rules/requirePropertyDescription.cjs +0 -29
- package/dist/rules/requirePropertyDescription.cjs.map +0 -1
- package/dist/rules/requirePropertyName.cjs +0 -29
- package/dist/rules/requirePropertyName.cjs.map +0 -1
- package/dist/rules/requirePropertyType.cjs +0 -29
- package/dist/rules/requirePropertyType.cjs.map +0 -1
- package/dist/rules/requireRejects.cjs +0 -226
- package/dist/rules/requireRejects.cjs.map +0 -1
- package/dist/rules/requireReturns.cjs +0 -262
- package/dist/rules/requireReturns.cjs.map +0 -1
- package/dist/rules/requireReturnsCheck.cjs +0 -225
- package/dist/rules/requireReturnsCheck.cjs.map +0 -1
- package/dist/rules/requireReturnsDescription.cjs +0 -72
- package/dist/rules/requireReturnsDescription.cjs.map +0 -1
- package/dist/rules/requireReturnsType.cjs +0 -68
- package/dist/rules/requireReturnsType.cjs.map +0 -1
- package/dist/rules/requireTags.cjs +0 -74
- package/dist/rules/requireTags.cjs.map +0 -1
- package/dist/rules/requireTemplate.cjs +0 -220
- package/dist/rules/requireTemplate.cjs.map +0 -1
- package/dist/rules/requireThrows.cjs +0 -118
- package/dist/rules/requireThrows.cjs.map +0 -1
- package/dist/rules/requireYields.cjs +0 -224
- package/dist/rules/requireYields.cjs.map +0 -1
- package/dist/rules/requireYieldsCheck.cjs +0 -179
- package/dist/rules/requireYieldsCheck.cjs.map +0 -1
- package/dist/rules/sortTags.cjs +0 -656
- package/dist/rules/sortTags.cjs.map +0 -1
- package/dist/rules/tagLines.cjs +0 -374
- package/dist/rules/tagLines.cjs.map +0 -1
- package/dist/rules/textEscaping.cjs +0 -141
- package/dist/rules/textEscaping.cjs.map +0 -1
- package/dist/rules/tsMethodSignatureStyle.cjs +0 -240
- package/dist/rules/tsMethodSignatureStyle.cjs.map +0 -1
- package/dist/rules/tsNoEmptyObjectType.cjs +0 -62
- package/dist/rules/tsNoEmptyObjectType.cjs.map +0 -1
- package/dist/rules/tsNoUnnecessaryTemplateExpression.cjs +0 -104
- package/dist/rules/tsNoUnnecessaryTemplateExpression.cjs.map +0 -1
- package/dist/rules/tsPreferFunctionType.cjs +0 -110
- package/dist/rules/tsPreferFunctionType.cjs.map +0 -1
- package/dist/rules/typeFormatting.cjs +0 -607
- package/dist/rules/typeFormatting.cjs.map +0 -1
- package/dist/rules/validTypes.cjs +0 -324
- package/dist/rules/validTypes.cjs.map +0 -1
- package/dist/tagNames.cjs +0 -244
- package/dist/tagNames.cjs.map +0 -1
- package/dist/to-valid-identifier.cjs +0 -263
- package/dist/utils/hasReturnValue.cjs +0 -495
- package/dist/utils/hasReturnValue.cjs.map +0 -1
- package/rollup.config.js +0 -16
- package/src/getJsdocProcessorPlugin.cts +0 -5
- package/src/index-cjs.js +0 -760
- package/src/index-esm.js +0 -196
- package/src/index.cjs.cts +0 -3
- package/src/iterateJsdoc.cts +0 -7
|
@@ -1,521 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.default = void 0;
|
|
7
|
-
var _iterateJsdoc = _interopRequireDefault(require("../iterateJsdoc.cjs"));
|
|
8
|
-
var _eslint = _interopRequireWildcard(require("eslint"));
|
|
9
|
-
var _semver = _interopRequireDefault(require("semver"));
|
|
10
|
-
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
|
|
11
|
-
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
12
|
-
const {
|
|
13
|
-
// @ts-expect-error Older ESLint
|
|
14
|
-
CLIEngine
|
|
15
|
-
} = _eslint.default;
|
|
16
|
-
const zeroBasedLineIndexAdjust = -1;
|
|
17
|
-
const likelyNestedJSDocIndentSpace = 1;
|
|
18
|
-
const preTagSpaceLength = 1;
|
|
19
|
-
|
|
20
|
-
// If a space is present, we should ignore it
|
|
21
|
-
const firstLinePrefixLength = preTagSpaceLength;
|
|
22
|
-
const hasCaptionRegex = /^\s*<caption>([\s\S]*?)<\/caption>/v;
|
|
23
|
-
|
|
24
|
-
/**
|
|
25
|
-
* @param {string} str
|
|
26
|
-
* @returns {string}
|
|
27
|
-
*/
|
|
28
|
-
const escapeStringRegexp = str => {
|
|
29
|
-
return str.replaceAll(/[.*+?^$\{\}\(\)\|\[\]\\]/gv, '\\$&');
|
|
30
|
-
};
|
|
31
|
-
|
|
32
|
-
/**
|
|
33
|
-
* @param {string} str
|
|
34
|
-
* @param {string} ch
|
|
35
|
-
* @returns {import('../iterateJsdoc.js').Integer}
|
|
36
|
-
*/
|
|
37
|
-
const countChars = (str, ch) => {
|
|
38
|
-
return (str.match(new RegExp(escapeStringRegexp(ch), 'gv')) || []).length;
|
|
39
|
-
};
|
|
40
|
-
|
|
41
|
-
/** @type {import('eslint').Linter.RulesRecord} */
|
|
42
|
-
const defaultMdRules = {
|
|
43
|
-
// "always" newline rule at end unlikely in sample code
|
|
44
|
-
'@stylistic/eol-last': 0,
|
|
45
|
-
// Often wish to start `@example` code after newline; also may use
|
|
46
|
-
// empty lines for spacing
|
|
47
|
-
'@stylistic/no-multiple-empty-lines': 0,
|
|
48
|
-
// Can generally look nicer to pad a little even if code imposes more stringency
|
|
49
|
-
'@stylistic/padded-blocks': 0,
|
|
50
|
-
'@typescript-eslint/no-unused-vars': 0,
|
|
51
|
-
// "always" newline rule at end unlikely in sample code
|
|
52
|
-
'eol-last': 0,
|
|
53
|
-
// Wouldn't generally expect example paths to resolve relative to JS file
|
|
54
|
-
'import/no-unresolved': 0,
|
|
55
|
-
// Snippets likely too short to always include import/export info
|
|
56
|
-
'import/unambiguous': 0,
|
|
57
|
-
'jsdoc/require-file-overview': 0,
|
|
58
|
-
// The end of a multiline comment would end the comment the example is in.
|
|
59
|
-
'jsdoc/require-jsdoc': 0,
|
|
60
|
-
// See import/no-unresolved
|
|
61
|
-
'n/no-missing-import': 0,
|
|
62
|
-
'n/no-missing-require': 0,
|
|
63
|
-
// Unlikely to have inadvertent debugging within examples
|
|
64
|
-
'no-console': 0,
|
|
65
|
-
// Often wish to start `@example` code after newline; also may use
|
|
66
|
-
// empty lines for spacing
|
|
67
|
-
'no-multiple-empty-lines': 0,
|
|
68
|
-
// Many variables in examples will be `undefined`
|
|
69
|
-
'no-undef': 0,
|
|
70
|
-
// Common to define variables for clarity without always using them
|
|
71
|
-
'no-unused-vars': 0,
|
|
72
|
-
// See import/no-unresolved
|
|
73
|
-
'node/no-missing-import': 0,
|
|
74
|
-
'node/no-missing-require': 0,
|
|
75
|
-
// Can generally look nicer to pad a little even if code imposes more stringency
|
|
76
|
-
'padded-blocks': 0
|
|
77
|
-
};
|
|
78
|
-
|
|
79
|
-
/** @type {import('eslint').Linter.RulesRecord} */
|
|
80
|
-
const defaultExpressionRules = {
|
|
81
|
-
...defaultMdRules,
|
|
82
|
-
'@stylistic/quotes': ['error', 'double'],
|
|
83
|
-
'@stylistic/semi': ['error', 'never'],
|
|
84
|
-
'@typescript-eslint/no-unused-expressions': 'off',
|
|
85
|
-
'chai-friendly/no-unused-expressions': 'off',
|
|
86
|
-
'no-empty-function': 'off',
|
|
87
|
-
'no-new': 'off',
|
|
88
|
-
'no-unused-expressions': 'off',
|
|
89
|
-
quotes: ['error', 'double'],
|
|
90
|
-
semi: ['error', 'never'],
|
|
91
|
-
strict: 'off'
|
|
92
|
-
};
|
|
93
|
-
|
|
94
|
-
/**
|
|
95
|
-
* @param {string} text
|
|
96
|
-
* @returns {[
|
|
97
|
-
* import('../iterateJsdoc.js').Integer,
|
|
98
|
-
* import('../iterateJsdoc.js').Integer
|
|
99
|
-
* ]}
|
|
100
|
-
*/
|
|
101
|
-
const getLinesCols = text => {
|
|
102
|
-
const matchLines = countChars(text, '\n');
|
|
103
|
-
const colDelta = matchLines ? text.slice(text.lastIndexOf('\n') + 1).length : text.length;
|
|
104
|
-
return [matchLines, colDelta];
|
|
105
|
-
};
|
|
106
|
-
var _default = exports.default = (0, _iterateJsdoc.default)(({
|
|
107
|
-
context,
|
|
108
|
-
globalState,
|
|
109
|
-
report,
|
|
110
|
-
utils
|
|
111
|
-
}) => {
|
|
112
|
-
if (_semver.default.gte(_eslint.ESLint.version, '8.0.0')) {
|
|
113
|
-
report('This rule does not work for ESLint 8+; you should disable this rule and use' + 'the processor mentioned in the docs.', null, {
|
|
114
|
-
column: 1,
|
|
115
|
-
line: 1
|
|
116
|
-
});
|
|
117
|
-
return;
|
|
118
|
-
}
|
|
119
|
-
if (!globalState.has('checkExamples-matchingFileName')) {
|
|
120
|
-
globalState.set('checkExamples-matchingFileName', new Map());
|
|
121
|
-
}
|
|
122
|
-
const matchingFileNameMap = /** @type {Map<string, string>} */
|
|
123
|
-
globalState.get('checkExamples-matchingFileName');
|
|
124
|
-
const options = context.options[0] || {};
|
|
125
|
-
let {
|
|
126
|
-
exampleCodeRegex = null,
|
|
127
|
-
rejectExampleCodeRegex = null
|
|
128
|
-
} = options;
|
|
129
|
-
const {
|
|
130
|
-
allowInlineConfig = true,
|
|
131
|
-
baseConfig = {},
|
|
132
|
-
captionRequired = false,
|
|
133
|
-
checkDefaults = false,
|
|
134
|
-
checkEslintrc = true,
|
|
135
|
-
checkParams = false,
|
|
136
|
-
checkProperties = false,
|
|
137
|
-
configFile,
|
|
138
|
-
matchingFileName = null,
|
|
139
|
-
matchingFileNameDefaults = null,
|
|
140
|
-
matchingFileNameParams = null,
|
|
141
|
-
matchingFileNameProperties = null,
|
|
142
|
-
noDefaultExampleRules = false,
|
|
143
|
-
paddedIndent = 0,
|
|
144
|
-
reportUnusedDisableDirectives = true
|
|
145
|
-
} = options;
|
|
146
|
-
|
|
147
|
-
// Make this configurable?
|
|
148
|
-
/**
|
|
149
|
-
* @type {never[]}
|
|
150
|
-
*/
|
|
151
|
-
const rulePaths = [];
|
|
152
|
-
const mdRules = noDefaultExampleRules ? undefined : defaultMdRules;
|
|
153
|
-
const expressionRules = noDefaultExampleRules ? undefined : defaultExpressionRules;
|
|
154
|
-
if (exampleCodeRegex) {
|
|
155
|
-
exampleCodeRegex = utils.getRegexFromString(exampleCodeRegex);
|
|
156
|
-
}
|
|
157
|
-
if (rejectExampleCodeRegex) {
|
|
158
|
-
rejectExampleCodeRegex = utils.getRegexFromString(rejectExampleCodeRegex);
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
/**
|
|
162
|
-
* @param {{
|
|
163
|
-
* filename: string,
|
|
164
|
-
* defaultFileName: string|undefined,
|
|
165
|
-
* source: string,
|
|
166
|
-
* targetTagName: string,
|
|
167
|
-
* rules?: import('eslint').Linter.RulesRecord|undefined,
|
|
168
|
-
* lines?: import('../iterateJsdoc.js').Integer,
|
|
169
|
-
* cols?: import('../iterateJsdoc.js').Integer,
|
|
170
|
-
* skipInit?: boolean,
|
|
171
|
-
* sources?: {
|
|
172
|
-
* nonJSPrefacingCols: import('../iterateJsdoc.js').Integer,
|
|
173
|
-
* nonJSPrefacingLines: import('../iterateJsdoc.js').Integer,
|
|
174
|
-
* string: string,
|
|
175
|
-
* }[],
|
|
176
|
-
* tag?: import('comment-parser').Spec & {
|
|
177
|
-
* line?: import('../iterateJsdoc.js').Integer,
|
|
178
|
-
* }|{
|
|
179
|
-
* line: import('../iterateJsdoc.js').Integer,
|
|
180
|
-
* }
|
|
181
|
-
* }} cfg
|
|
182
|
-
*/
|
|
183
|
-
const checkSource = ({
|
|
184
|
-
cols = 0,
|
|
185
|
-
defaultFileName,
|
|
186
|
-
filename,
|
|
187
|
-
lines = 0,
|
|
188
|
-
rules = expressionRules,
|
|
189
|
-
skipInit,
|
|
190
|
-
source,
|
|
191
|
-
sources = [],
|
|
192
|
-
tag = {
|
|
193
|
-
line: 0
|
|
194
|
-
},
|
|
195
|
-
targetTagName
|
|
196
|
-
}) => {
|
|
197
|
-
if (!skipInit) {
|
|
198
|
-
sources.push({
|
|
199
|
-
nonJSPrefacingCols: cols,
|
|
200
|
-
nonJSPrefacingLines: lines,
|
|
201
|
-
string: source
|
|
202
|
-
});
|
|
203
|
-
}
|
|
204
|
-
|
|
205
|
-
/**
|
|
206
|
-
* @param {{
|
|
207
|
-
* nonJSPrefacingCols: import('../iterateJsdoc.js').Integer,
|
|
208
|
-
* nonJSPrefacingLines: import('../iterateJsdoc.js').Integer,
|
|
209
|
-
* string: string
|
|
210
|
-
* }} cfg
|
|
211
|
-
*/
|
|
212
|
-
const checkRules = function ({
|
|
213
|
-
nonJSPrefacingCols,
|
|
214
|
-
nonJSPrefacingLines,
|
|
215
|
-
string
|
|
216
|
-
}) {
|
|
217
|
-
const cliConfig = {
|
|
218
|
-
allowInlineConfig,
|
|
219
|
-
baseConfig,
|
|
220
|
-
configFile,
|
|
221
|
-
reportUnusedDisableDirectives,
|
|
222
|
-
rulePaths,
|
|
223
|
-
rules,
|
|
224
|
-
useEslintrc: checkEslintrc
|
|
225
|
-
};
|
|
226
|
-
const cliConfigStr = JSON.stringify(cliConfig);
|
|
227
|
-
const src = paddedIndent ? string.replaceAll(new RegExp(`(^|\n) {${paddedIndent}}(?!$)`, 'gv'), '\n') : string;
|
|
228
|
-
|
|
229
|
-
// Programmatic ESLint API: https://eslint.org/docs/developer-guide/nodejs-api
|
|
230
|
-
const fileNameMapKey = filename ? 'a' + cliConfigStr + filename : 'b' + cliConfigStr + defaultFileName;
|
|
231
|
-
const file = filename || defaultFileName;
|
|
232
|
-
let cliFile;
|
|
233
|
-
if (matchingFileNameMap.has(fileNameMapKey)) {
|
|
234
|
-
cliFile = matchingFileNameMap.get(fileNameMapKey);
|
|
235
|
-
} else {
|
|
236
|
-
const cli = new CLIEngine(cliConfig);
|
|
237
|
-
let config;
|
|
238
|
-
if (filename || checkEslintrc) {
|
|
239
|
-
config = cli.getConfigForFile(file);
|
|
240
|
-
}
|
|
241
|
-
|
|
242
|
-
// We need a new instance to ensure that the rules that may only
|
|
243
|
-
// be available to `file` (if it has its own `.eslintrc`),
|
|
244
|
-
// will be defined.
|
|
245
|
-
cliFile = new CLIEngine({
|
|
246
|
-
allowInlineConfig,
|
|
247
|
-
baseConfig: {
|
|
248
|
-
...baseConfig,
|
|
249
|
-
...config
|
|
250
|
-
},
|
|
251
|
-
configFile,
|
|
252
|
-
reportUnusedDisableDirectives,
|
|
253
|
-
rulePaths,
|
|
254
|
-
rules,
|
|
255
|
-
useEslintrc: false
|
|
256
|
-
});
|
|
257
|
-
matchingFileNameMap.set(fileNameMapKey, cliFile);
|
|
258
|
-
}
|
|
259
|
-
const {
|
|
260
|
-
results: [{
|
|
261
|
-
messages
|
|
262
|
-
}]
|
|
263
|
-
} = cliFile.executeOnText(src);
|
|
264
|
-
if (!('line' in tag)) {
|
|
265
|
-
tag.line = tag.source[0].number;
|
|
266
|
-
}
|
|
267
|
-
|
|
268
|
-
// NOTE: `tag.line` can be 0 if of form `/** @tag ... */`
|
|
269
|
-
const codeStartLine =
|
|
270
|
-
/**
|
|
271
|
-
* @type {import('comment-parser').Spec & {
|
|
272
|
-
* line: import('../iterateJsdoc.js').Integer,
|
|
273
|
-
* }}
|
|
274
|
-
*/
|
|
275
|
-
tag.line + nonJSPrefacingLines;
|
|
276
|
-
const codeStartCol = likelyNestedJSDocIndentSpace;
|
|
277
|
-
for (const {
|
|
278
|
-
column,
|
|
279
|
-
line,
|
|
280
|
-
message,
|
|
281
|
-
ruleId,
|
|
282
|
-
severity
|
|
283
|
-
} of messages) {
|
|
284
|
-
const startLine = codeStartLine + line + zeroBasedLineIndexAdjust;
|
|
285
|
-
const startCol = codeStartCol + (
|
|
286
|
-
// This might not work for line 0, but line 0 is unlikely for examples
|
|
287
|
-
line <= 1 ? nonJSPrefacingCols + firstLinePrefixLength : preTagSpaceLength) + column;
|
|
288
|
-
report('@' + targetTagName + ' ' + (severity === 2 ? 'error' : 'warning') + (ruleId ? ' (' + ruleId + ')' : '') + ': ' + message, null, {
|
|
289
|
-
column: startCol,
|
|
290
|
-
line: startLine
|
|
291
|
-
});
|
|
292
|
-
}
|
|
293
|
-
};
|
|
294
|
-
for (const targetSource of sources) {
|
|
295
|
-
checkRules(targetSource);
|
|
296
|
-
}
|
|
297
|
-
};
|
|
298
|
-
|
|
299
|
-
/**
|
|
300
|
-
*
|
|
301
|
-
* @param {string} filename
|
|
302
|
-
* @param {string} [ext] Since `eslint-plugin-markdown` v2, and
|
|
303
|
-
* ESLint 7, this is the default which other JS-fenced rules will used.
|
|
304
|
-
* Formerly "md" was the default.
|
|
305
|
-
* @returns {{defaultFileName: string|undefined, filename: string}}
|
|
306
|
-
*/
|
|
307
|
-
const getFilenameInfo = (filename, ext = 'md/*.js') => {
|
|
308
|
-
let defaultFileName;
|
|
309
|
-
if (!filename) {
|
|
310
|
-
// @ts-expect-error ESLint < 10
|
|
311
|
-
const jsFileName = context.getFilename();
|
|
312
|
-
if (typeof jsFileName === 'string' && jsFileName.includes('.')) {
|
|
313
|
-
defaultFileName = jsFileName.replace(/\.[^.]*$/v, `.${ext}`);
|
|
314
|
-
} else {
|
|
315
|
-
defaultFileName = `dummy.${ext}`;
|
|
316
|
-
}
|
|
317
|
-
}
|
|
318
|
-
return {
|
|
319
|
-
defaultFileName,
|
|
320
|
-
filename
|
|
321
|
-
};
|
|
322
|
-
};
|
|
323
|
-
if (checkDefaults) {
|
|
324
|
-
const filenameInfo = getFilenameInfo(matchingFileNameDefaults, 'jsdoc-defaults');
|
|
325
|
-
utils.forEachPreferredTag('default', (tag, targetTagName) => {
|
|
326
|
-
if (!tag.description.trim()) {
|
|
327
|
-
return;
|
|
328
|
-
}
|
|
329
|
-
checkSource({
|
|
330
|
-
source: `(${utils.getTagDescription(tag)})`,
|
|
331
|
-
targetTagName,
|
|
332
|
-
...filenameInfo
|
|
333
|
-
});
|
|
334
|
-
});
|
|
335
|
-
}
|
|
336
|
-
if (checkParams) {
|
|
337
|
-
const filenameInfo = getFilenameInfo(matchingFileNameParams, 'jsdoc-params');
|
|
338
|
-
utils.forEachPreferredTag('param', (tag, targetTagName) => {
|
|
339
|
-
if (!tag.default || !tag.default.trim()) {
|
|
340
|
-
return;
|
|
341
|
-
}
|
|
342
|
-
checkSource({
|
|
343
|
-
source: `(${tag.default})`,
|
|
344
|
-
targetTagName,
|
|
345
|
-
...filenameInfo
|
|
346
|
-
});
|
|
347
|
-
});
|
|
348
|
-
}
|
|
349
|
-
if (checkProperties) {
|
|
350
|
-
const filenameInfo = getFilenameInfo(matchingFileNameProperties, 'jsdoc-properties');
|
|
351
|
-
utils.forEachPreferredTag('property', (tag, targetTagName) => {
|
|
352
|
-
if (!tag.default || !tag.default.trim()) {
|
|
353
|
-
return;
|
|
354
|
-
}
|
|
355
|
-
checkSource({
|
|
356
|
-
source: `(${tag.default})`,
|
|
357
|
-
targetTagName,
|
|
358
|
-
...filenameInfo
|
|
359
|
-
});
|
|
360
|
-
});
|
|
361
|
-
}
|
|
362
|
-
const tagName = /** @type {string} */utils.getPreferredTagName({
|
|
363
|
-
tagName: 'example'
|
|
364
|
-
});
|
|
365
|
-
if (!utils.hasTag(tagName)) {
|
|
366
|
-
return;
|
|
367
|
-
}
|
|
368
|
-
const matchingFilenameInfo = getFilenameInfo(matchingFileName);
|
|
369
|
-
utils.forEachPreferredTag('example', (tag, targetTagName) => {
|
|
370
|
-
let source = /** @type {string} */utils.getTagDescription(tag);
|
|
371
|
-
const match = source.match(hasCaptionRegex);
|
|
372
|
-
if (captionRequired && (!match || !match[1].trim())) {
|
|
373
|
-
report('Caption is expected for examples.', null, tag);
|
|
374
|
-
}
|
|
375
|
-
source = source.replace(hasCaptionRegex, '');
|
|
376
|
-
const [lines, cols] = match ? getLinesCols(match[0]) : [0, 0];
|
|
377
|
-
if (exampleCodeRegex && !exampleCodeRegex.test(source) || rejectExampleCodeRegex && rejectExampleCodeRegex.test(source)) {
|
|
378
|
-
return;
|
|
379
|
-
}
|
|
380
|
-
const sources = [];
|
|
381
|
-
let skipInit = false;
|
|
382
|
-
if (exampleCodeRegex) {
|
|
383
|
-
let nonJSPrefacingCols = 0;
|
|
384
|
-
let nonJSPrefacingLines = 0;
|
|
385
|
-
let startingIndex = 0;
|
|
386
|
-
let lastStringCount = 0;
|
|
387
|
-
let exampleCode;
|
|
388
|
-
exampleCodeRegex.lastIndex = 0;
|
|
389
|
-
while ((exampleCode = exampleCodeRegex.exec(source)) !== null) {
|
|
390
|
-
const {
|
|
391
|
-
'0': n0,
|
|
392
|
-
'1': n1,
|
|
393
|
-
index
|
|
394
|
-
} = exampleCode;
|
|
395
|
-
|
|
396
|
-
// Count anything preceding user regex match (can affect line numbering)
|
|
397
|
-
const preMatch = source.slice(startingIndex, index);
|
|
398
|
-
const [preMatchLines, colDelta] = getLinesCols(preMatch);
|
|
399
|
-
let nonJSPreface;
|
|
400
|
-
let nonJSPrefaceLineCount;
|
|
401
|
-
if (n1) {
|
|
402
|
-
const idx = n0.indexOf(n1);
|
|
403
|
-
nonJSPreface = n0.slice(0, idx);
|
|
404
|
-
nonJSPrefaceLineCount = countChars(nonJSPreface, '\n');
|
|
405
|
-
} else {
|
|
406
|
-
nonJSPreface = '';
|
|
407
|
-
nonJSPrefaceLineCount = 0;
|
|
408
|
-
}
|
|
409
|
-
nonJSPrefacingLines += lastStringCount + preMatchLines + nonJSPrefaceLineCount;
|
|
410
|
-
|
|
411
|
-
// Ignore `preMatch` delta if newlines here
|
|
412
|
-
if (nonJSPrefaceLineCount) {
|
|
413
|
-
const charsInLastLine = nonJSPreface.slice(nonJSPreface.lastIndexOf('\n') + 1).length;
|
|
414
|
-
nonJSPrefacingCols += charsInLastLine;
|
|
415
|
-
} else {
|
|
416
|
-
nonJSPrefacingCols += colDelta + nonJSPreface.length;
|
|
417
|
-
}
|
|
418
|
-
const string = n1 || n0;
|
|
419
|
-
sources.push({
|
|
420
|
-
nonJSPrefacingCols,
|
|
421
|
-
nonJSPrefacingLines,
|
|
422
|
-
string
|
|
423
|
-
});
|
|
424
|
-
startingIndex = exampleCodeRegex.lastIndex;
|
|
425
|
-
lastStringCount = countChars(string, '\n');
|
|
426
|
-
if (!exampleCodeRegex.global) {
|
|
427
|
-
break;
|
|
428
|
-
}
|
|
429
|
-
}
|
|
430
|
-
skipInit = true;
|
|
431
|
-
}
|
|
432
|
-
checkSource({
|
|
433
|
-
cols,
|
|
434
|
-
lines,
|
|
435
|
-
rules: mdRules,
|
|
436
|
-
skipInit,
|
|
437
|
-
source,
|
|
438
|
-
sources,
|
|
439
|
-
tag,
|
|
440
|
-
targetTagName,
|
|
441
|
-
...matchingFilenameInfo
|
|
442
|
-
});
|
|
443
|
-
});
|
|
444
|
-
}, {
|
|
445
|
-
iterateAllJsdocs: true,
|
|
446
|
-
meta: {
|
|
447
|
-
docs: {
|
|
448
|
-
description: '@deprecated - Use `getJsdocProcessorPlugin` processor; ensures that (JavaScript) samples within `@example` tags adhere to ESLint rules.',
|
|
449
|
-
url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/check-examples.md#repos-sticky-header'
|
|
450
|
-
},
|
|
451
|
-
schema: [{
|
|
452
|
-
additionalProperties: false,
|
|
453
|
-
properties: {
|
|
454
|
-
allowInlineConfig: {
|
|
455
|
-
default: true,
|
|
456
|
-
type: 'boolean'
|
|
457
|
-
},
|
|
458
|
-
baseConfig: {
|
|
459
|
-
type: 'object'
|
|
460
|
-
},
|
|
461
|
-
captionRequired: {
|
|
462
|
-
default: false,
|
|
463
|
-
type: 'boolean'
|
|
464
|
-
},
|
|
465
|
-
checkDefaults: {
|
|
466
|
-
default: false,
|
|
467
|
-
type: 'boolean'
|
|
468
|
-
},
|
|
469
|
-
checkEslintrc: {
|
|
470
|
-
default: true,
|
|
471
|
-
type: 'boolean'
|
|
472
|
-
},
|
|
473
|
-
checkParams: {
|
|
474
|
-
default: false,
|
|
475
|
-
type: 'boolean'
|
|
476
|
-
},
|
|
477
|
-
checkProperties: {
|
|
478
|
-
default: false,
|
|
479
|
-
type: 'boolean'
|
|
480
|
-
},
|
|
481
|
-
configFile: {
|
|
482
|
-
type: 'string'
|
|
483
|
-
},
|
|
484
|
-
exampleCodeRegex: {
|
|
485
|
-
type: 'string'
|
|
486
|
-
},
|
|
487
|
-
matchingFileName: {
|
|
488
|
-
type: 'string'
|
|
489
|
-
},
|
|
490
|
-
matchingFileNameDefaults: {
|
|
491
|
-
type: 'string'
|
|
492
|
-
},
|
|
493
|
-
matchingFileNameParams: {
|
|
494
|
-
type: 'string'
|
|
495
|
-
},
|
|
496
|
-
matchingFileNameProperties: {
|
|
497
|
-
type: 'string'
|
|
498
|
-
},
|
|
499
|
-
noDefaultExampleRules: {
|
|
500
|
-
default: false,
|
|
501
|
-
type: 'boolean'
|
|
502
|
-
},
|
|
503
|
-
paddedIndent: {
|
|
504
|
-
default: 0,
|
|
505
|
-
type: 'integer'
|
|
506
|
-
},
|
|
507
|
-
rejectExampleCodeRegex: {
|
|
508
|
-
type: 'string'
|
|
509
|
-
},
|
|
510
|
-
reportUnusedDisableDirectives: {
|
|
511
|
-
default: true,
|
|
512
|
-
type: 'boolean'
|
|
513
|
-
}
|
|
514
|
-
},
|
|
515
|
-
type: 'object'
|
|
516
|
-
}],
|
|
517
|
-
type: 'suggestion'
|
|
518
|
-
}
|
|
519
|
-
});
|
|
520
|
-
module.exports = exports.default;
|
|
521
|
-
//# sourceMappingURL=checkExamples.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"checkExamples.cjs","names":["eslint","iterateJsdoc","semver","ESLint"],"sources":["../../src/rules/checkExamples.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc.js';\nimport eslint, {\n ESLint,\n} from 'eslint';\nimport semver from 'semver';\n\nconst {\n // @ts-expect-error Older ESLint\n CLIEngine,\n} = eslint;\n\nconst zeroBasedLineIndexAdjust = -1;\nconst likelyNestedJSDocIndentSpace = 1;\nconst preTagSpaceLength = 1;\n\n// If a space is present, we should ignore it\nconst firstLinePrefixLength = preTagSpaceLength;\n\nconst hasCaptionRegex = /^\\s*<caption>([\\s\\S]*?)<\\/caption>/v;\n\n/**\n * @param {string} str\n * @returns {string}\n */\nconst escapeStringRegexp = (str) => {\n return str.replaceAll(/[.*+?^$\\{\\}\\(\\)\\|\\[\\]\\\\]/gv, '\\\\$&');\n};\n\n/**\n * @param {string} str\n * @param {string} ch\n * @returns {import('../iterateJsdoc.js').Integer}\n */\nconst countChars = (str, ch) => {\n return (str.match(new RegExp(escapeStringRegexp(ch), 'gv')) || []).length;\n};\n\n/** @type {import('eslint').Linter.RulesRecord} */\nconst defaultMdRules = {\n // \"always\" newline rule at end unlikely in sample code\n '@stylistic/eol-last': 0,\n\n // Often wish to start `@example` code after newline; also may use\n // empty lines for spacing\n '@stylistic/no-multiple-empty-lines': 0,\n\n // Can generally look nicer to pad a little even if code imposes more stringency\n '@stylistic/padded-blocks': 0,\n\n '@typescript-eslint/no-unused-vars': 0,\n\n // \"always\" newline rule at end unlikely in sample code\n 'eol-last': 0,\n\n // Wouldn't generally expect example paths to resolve relative to JS file\n 'import/no-unresolved': 0,\n\n // Snippets likely too short to always include import/export info\n 'import/unambiguous': 0,\n\n 'jsdoc/require-file-overview': 0,\n\n // The end of a multiline comment would end the comment the example is in.\n 'jsdoc/require-jsdoc': 0,\n\n // See import/no-unresolved\n 'n/no-missing-import': 0,\n 'n/no-missing-require': 0,\n\n // Unlikely to have inadvertent debugging within examples\n 'no-console': 0,\n\n // Often wish to start `@example` code after newline; also may use\n // empty lines for spacing\n 'no-multiple-empty-lines': 0,\n // Many variables in examples will be `undefined`\n 'no-undef': 0,\n\n // Common to define variables for clarity without always using them\n 'no-unused-vars': 0,\n\n // See import/no-unresolved\n 'node/no-missing-import': 0,\n\n 'node/no-missing-require': 0,\n\n // Can generally look nicer to pad a little even if code imposes more stringency\n 'padded-blocks': 0,\n};\n\n/** @type {import('eslint').Linter.RulesRecord} */\nconst defaultExpressionRules = {\n ...defaultMdRules,\n '@stylistic/quotes': [\n 'error', 'double',\n ],\n '@stylistic/semi': [\n 'error', 'never',\n ],\n '@typescript-eslint/no-unused-expressions': 'off',\n 'chai-friendly/no-unused-expressions': 'off',\n 'no-empty-function': 'off',\n 'no-new': 'off',\n 'no-unused-expressions': 'off',\n quotes: [\n 'error', 'double',\n ],\n semi: [\n 'error', 'never',\n ],\n strict: 'off',\n};\n\n/**\n * @param {string} text\n * @returns {[\n * import('../iterateJsdoc.js').Integer,\n * import('../iterateJsdoc.js').Integer\n * ]}\n */\nconst getLinesCols = (text) => {\n const matchLines = countChars(text, '\\n');\n\n const colDelta = matchLines ?\n text.slice(text.lastIndexOf('\\n') + 1).length :\n text.length;\n\n return [\n matchLines, colDelta,\n ];\n};\n\nexport default iterateJsdoc(({\n context,\n globalState,\n report,\n utils,\n}) => {\n if (semver.gte(ESLint.version, '8.0.0')) {\n report(\n 'This rule does not work for ESLint 8+; you should disable this rule and use' +\n 'the processor mentioned in the docs.',\n null,\n {\n column: 1,\n line: 1,\n },\n );\n\n return;\n }\n\n if (!globalState.has('checkExamples-matchingFileName')) {\n globalState.set('checkExamples-matchingFileName', new Map());\n }\n\n const matchingFileNameMap = /** @type {Map<string, string>} */ (\n globalState.get('checkExamples-matchingFileName')\n );\n\n const options = context.options[0] || {};\n let {\n exampleCodeRegex = null,\n rejectExampleCodeRegex = null,\n } = options;\n const {\n allowInlineConfig = true,\n baseConfig = {},\n captionRequired = false,\n checkDefaults = false,\n checkEslintrc = true,\n checkParams = false,\n checkProperties = false,\n configFile,\n matchingFileName = null,\n matchingFileNameDefaults = null,\n matchingFileNameParams = null,\n matchingFileNameProperties = null,\n noDefaultExampleRules = false,\n paddedIndent = 0,\n reportUnusedDisableDirectives = true,\n } = options;\n\n // Make this configurable?\n /**\n * @type {never[]}\n */\n const rulePaths = [];\n\n const mdRules = noDefaultExampleRules ? undefined : defaultMdRules;\n\n const expressionRules = noDefaultExampleRules ? undefined : defaultExpressionRules;\n\n if (exampleCodeRegex) {\n exampleCodeRegex = utils.getRegexFromString(exampleCodeRegex);\n }\n\n if (rejectExampleCodeRegex) {\n rejectExampleCodeRegex = utils.getRegexFromString(rejectExampleCodeRegex);\n }\n\n /**\n * @param {{\n * filename: string,\n * defaultFileName: string|undefined,\n * source: string,\n * targetTagName: string,\n * rules?: import('eslint').Linter.RulesRecord|undefined,\n * lines?: import('../iterateJsdoc.js').Integer,\n * cols?: import('../iterateJsdoc.js').Integer,\n * skipInit?: boolean,\n * sources?: {\n * nonJSPrefacingCols: import('../iterateJsdoc.js').Integer,\n * nonJSPrefacingLines: import('../iterateJsdoc.js').Integer,\n * string: string,\n * }[],\n * tag?: import('comment-parser').Spec & {\n * line?: import('../iterateJsdoc.js').Integer,\n * }|{\n * line: import('../iterateJsdoc.js').Integer,\n * }\n * }} cfg\n */\n const checkSource = ({\n cols = 0,\n defaultFileName,\n filename,\n lines = 0,\n rules = expressionRules,\n skipInit,\n source,\n sources = [],\n tag = {\n line: 0,\n },\n targetTagName,\n }) => {\n if (!skipInit) {\n sources.push({\n nonJSPrefacingCols: cols,\n nonJSPrefacingLines: lines,\n string: source,\n });\n }\n\n /**\n * @param {{\n * nonJSPrefacingCols: import('../iterateJsdoc.js').Integer,\n * nonJSPrefacingLines: import('../iterateJsdoc.js').Integer,\n * string: string\n * }} cfg\n */\n const checkRules = function ({\n nonJSPrefacingCols,\n nonJSPrefacingLines,\n string,\n }) {\n const cliConfig = {\n allowInlineConfig,\n baseConfig,\n configFile,\n reportUnusedDisableDirectives,\n rulePaths,\n rules,\n useEslintrc: checkEslintrc,\n };\n const cliConfigStr = JSON.stringify(cliConfig);\n\n const src = paddedIndent ?\n string.replaceAll(new RegExp(`(^|\\n) {${paddedIndent}}(?!$)`, 'gv'), '\\n') :\n string;\n\n // Programmatic ESLint API: https://eslint.org/docs/developer-guide/nodejs-api\n const fileNameMapKey = filename ?\n 'a' + cliConfigStr + filename :\n 'b' + cliConfigStr + defaultFileName;\n const file = filename || defaultFileName;\n let cliFile;\n if (matchingFileNameMap.has(fileNameMapKey)) {\n cliFile = matchingFileNameMap.get(fileNameMapKey);\n } else {\n const cli = new CLIEngine(cliConfig);\n let config;\n if (filename || checkEslintrc) {\n config = cli.getConfigForFile(file);\n }\n\n // We need a new instance to ensure that the rules that may only\n // be available to `file` (if it has its own `.eslintrc`),\n // will be defined.\n cliFile = new CLIEngine({\n allowInlineConfig,\n baseConfig: {\n ...baseConfig,\n ...config,\n },\n configFile,\n reportUnusedDisableDirectives,\n rulePaths,\n rules,\n useEslintrc: false,\n });\n matchingFileNameMap.set(fileNameMapKey, cliFile);\n }\n\n const {\n results: [\n {\n messages,\n },\n ],\n } = cliFile.executeOnText(src);\n\n if (!('line' in tag)) {\n tag.line = tag.source[0].number;\n }\n\n // NOTE: `tag.line` can be 0 if of form `/** @tag ... */`\n const codeStartLine = /**\n * @type {import('comment-parser').Spec & {\n * line: import('../iterateJsdoc.js').Integer,\n * }}\n */ (tag).line + nonJSPrefacingLines;\n const codeStartCol = likelyNestedJSDocIndentSpace;\n\n for (const {\n column,\n line,\n message,\n ruleId,\n severity,\n } of messages) {\n const startLine = codeStartLine + line + zeroBasedLineIndexAdjust;\n const startCol = codeStartCol + (\n\n // This might not work for line 0, but line 0 is unlikely for examples\n line <= 1 ? nonJSPrefacingCols + firstLinePrefixLength : preTagSpaceLength\n ) + column;\n\n report(\n '@' + targetTagName + ' ' + (severity === 2 ? 'error' : 'warning') +\n (ruleId ? ' (' + ruleId + ')' : '') + ': ' +\n message,\n null,\n {\n column: startCol,\n line: startLine,\n },\n );\n }\n };\n\n for (const targetSource of sources) {\n checkRules(targetSource);\n }\n };\n\n /**\n *\n * @param {string} filename\n * @param {string} [ext] Since `eslint-plugin-markdown` v2, and\n * ESLint 7, this is the default which other JS-fenced rules will used.\n * Formerly \"md\" was the default.\n * @returns {{defaultFileName: string|undefined, filename: string}}\n */\n const getFilenameInfo = (filename, ext = 'md/*.js') => {\n let defaultFileName;\n if (!filename) {\n // @ts-expect-error ESLint < 10\n const jsFileName = context.getFilename();\n if (typeof jsFileName === 'string' && jsFileName.includes('.')) {\n defaultFileName = jsFileName.replace(/\\.[^.]*$/v, `.${ext}`);\n } else {\n defaultFileName = `dummy.${ext}`;\n }\n }\n\n return {\n defaultFileName,\n filename,\n };\n };\n\n if (checkDefaults) {\n const filenameInfo = getFilenameInfo(matchingFileNameDefaults, 'jsdoc-defaults');\n utils.forEachPreferredTag('default', (tag, targetTagName) => {\n if (!tag.description.trim()) {\n return;\n }\n\n checkSource({\n source: `(${utils.getTagDescription(tag)})`,\n targetTagName,\n ...filenameInfo,\n });\n });\n }\n\n if (checkParams) {\n const filenameInfo = getFilenameInfo(matchingFileNameParams, 'jsdoc-params');\n utils.forEachPreferredTag('param', (tag, targetTagName) => {\n if (!tag.default || !tag.default.trim()) {\n return;\n }\n\n checkSource({\n source: `(${tag.default})`,\n targetTagName,\n ...filenameInfo,\n });\n });\n }\n\n if (checkProperties) {\n const filenameInfo = getFilenameInfo(matchingFileNameProperties, 'jsdoc-properties');\n utils.forEachPreferredTag('property', (tag, targetTagName) => {\n if (!tag.default || !tag.default.trim()) {\n return;\n }\n\n checkSource({\n source: `(${tag.default})`,\n targetTagName,\n ...filenameInfo,\n });\n });\n }\n\n const tagName = /** @type {string} */ (utils.getPreferredTagName({\n tagName: 'example',\n }));\n if (!utils.hasTag(tagName)) {\n return;\n }\n\n const matchingFilenameInfo = getFilenameInfo(matchingFileName);\n\n utils.forEachPreferredTag('example', (tag, targetTagName) => {\n let source = /** @type {string} */ (utils.getTagDescription(tag));\n const match = source.match(hasCaptionRegex);\n\n if (captionRequired && (!match || !match[1].trim())) {\n report('Caption is expected for examples.', null, tag);\n }\n\n source = source.replace(hasCaptionRegex, '');\n const [\n lines,\n cols,\n ] = match ? getLinesCols(match[0]) : [\n 0, 0,\n ];\n\n if (exampleCodeRegex && !exampleCodeRegex.test(source) ||\n rejectExampleCodeRegex && rejectExampleCodeRegex.test(source)\n ) {\n return;\n }\n\n const sources = [];\n let skipInit = false;\n if (exampleCodeRegex) {\n let nonJSPrefacingCols = 0;\n let nonJSPrefacingLines = 0;\n\n let startingIndex = 0;\n let lastStringCount = 0;\n\n let exampleCode;\n exampleCodeRegex.lastIndex = 0;\n while ((exampleCode = exampleCodeRegex.exec(source)) !== null) {\n const {\n '0': n0,\n '1': n1,\n index,\n } = exampleCode;\n\n // Count anything preceding user regex match (can affect line numbering)\n const preMatch = source.slice(startingIndex, index);\n\n const [\n preMatchLines,\n colDelta,\n ] = getLinesCols(preMatch);\n\n let nonJSPreface;\n let nonJSPrefaceLineCount;\n if (n1) {\n const idx = n0.indexOf(n1);\n nonJSPreface = n0.slice(0, idx);\n nonJSPrefaceLineCount = countChars(nonJSPreface, '\\n');\n } else {\n nonJSPreface = '';\n nonJSPrefaceLineCount = 0;\n }\n\n nonJSPrefacingLines += lastStringCount + preMatchLines + nonJSPrefaceLineCount;\n\n // Ignore `preMatch` delta if newlines here\n if (nonJSPrefaceLineCount) {\n const charsInLastLine = nonJSPreface.slice(nonJSPreface.lastIndexOf('\\n') + 1).length;\n\n nonJSPrefacingCols += charsInLastLine;\n } else {\n nonJSPrefacingCols += colDelta + nonJSPreface.length;\n }\n\n const string = n1 || n0;\n sources.push({\n nonJSPrefacingCols,\n nonJSPrefacingLines,\n string,\n });\n startingIndex = exampleCodeRegex.lastIndex;\n lastStringCount = countChars(string, '\\n');\n if (!exampleCodeRegex.global) {\n break;\n }\n }\n\n skipInit = true;\n }\n\n checkSource({\n cols,\n lines,\n rules: mdRules,\n skipInit,\n source,\n sources,\n tag,\n targetTagName,\n ...matchingFilenameInfo,\n });\n });\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: '@deprecated - Use `getJsdocProcessorPlugin` processor; ensures that (JavaScript) samples within `@example` tags adhere to ESLint rules.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/check-examples.md#repos-sticky-header',\n },\n schema: [\n {\n additionalProperties: false,\n properties: {\n allowInlineConfig: {\n default: true,\n type: 'boolean',\n },\n baseConfig: {\n type: 'object',\n },\n captionRequired: {\n default: false,\n type: 'boolean',\n },\n checkDefaults: {\n default: false,\n type: 'boolean',\n },\n checkEslintrc: {\n default: true,\n type: 'boolean',\n },\n checkParams: {\n default: false,\n type: 'boolean',\n },\n checkProperties: {\n default: false,\n type: 'boolean',\n },\n configFile: {\n type: 'string',\n },\n exampleCodeRegex: {\n type: 'string',\n },\n matchingFileName: {\n type: 'string',\n },\n matchingFileNameDefaults: {\n type: 'string',\n },\n matchingFileNameParams: {\n type: 'string',\n },\n matchingFileNameProperties: {\n type: 'string',\n },\n noDefaultExampleRules: {\n default: false,\n type: 'boolean',\n },\n paddedIndent: {\n default: 0,\n type: 'integer',\n },\n rejectExampleCodeRegex: {\n type: 'string',\n },\n reportUnusedDisableDirectives: {\n default: true,\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"mappings":"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","ignoreList":[]}
|