eslint-plugin-jsdoc 63.0.10 → 63.0.11
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/WarnSettings.cjs +1 -8
- package/dist/WarnSettings.cjs.map +1 -1
- package/dist/alignTransform.cjs +6 -10
- package/dist/alignTransform.cjs.map +1 -1
- package/dist/buildForbidRuleDefinition.cjs +3 -10
- package/dist/buildForbidRuleDefinition.cjs.map +1 -1
- package/dist/buildRejectOrPreferRuleDefinition.cjs +7 -14
- package/dist/buildRejectOrPreferRuleDefinition.cjs.map +1 -1
- package/dist/defaultTagOrder.cjs +1 -8
- package/dist/defaultTagOrder.cjs.map +1 -1
- package/dist/exportParser.cjs +6 -14
- package/dist/exportParser.cjs.map +1 -1
- package/dist/generateDocs.cjs +36 -44
- package/dist/generateDocs.cjs.map +1 -1
- package/dist/generateOptions.cjs +15 -18
- package/dist/generateOptions.cjs.map +1 -1
- package/dist/generateRule.cjs +24 -24
- package/dist/generateRule.cjs.map +1 -1
- package/dist/generateRuleTypes.cjs +6 -9
- package/dist/generateRuleTypes.cjs.map +1 -1
- package/dist/getDefaultTagStructureForMode.cjs +1 -8
- package/dist/getDefaultTagStructureForMode.cjs.map +1 -1
- package/dist/getJsdocProcessorPlugin.cjs +20 -28
- package/dist/getJsdocProcessorPlugin.cjs.map +1 -1
- package/dist/index-cjs.cjs +152 -159
- package/dist/index-cjs.cjs.map +1 -1
- package/dist/index-esm.cjs +16 -27
- package/dist/index-esm.cjs.map +1 -1
- package/dist/index.cjs +159 -172
- package/dist/index.cjs.map +1 -1
- package/dist/iterateJsdoc.cjs +22 -32
- package/dist/iterateJsdoc.cjs.map +1 -1
- package/dist/jsdocUtils.cjs +18 -86
- package/dist/jsdocUtils.cjs.map +1 -1
- package/dist/rules/checkAccess.cjs +2 -10
- package/dist/rules/checkAccess.cjs.map +1 -1
- package/dist/rules/checkAlignment.cjs +2 -10
- package/dist/rules/checkAlignment.cjs.map +1 -1
- package/dist/rules/checkExamples.cjs +6 -15
- package/dist/rules/checkExamples.cjs.map +1 -1
- package/dist/rules/checkIndentation.cjs +2 -9
- package/dist/rules/checkIndentation.cjs.map +1 -1
- package/dist/rules/checkLineAlignment.cjs +6 -14
- package/dist/rules/checkLineAlignment.cjs.map +1 -1
- package/dist/rules/checkParamNames.cjs +2 -9
- package/dist/rules/checkParamNames.cjs.map +1 -1
- package/dist/rules/checkPropertyNames.cjs +2 -9
- package/dist/rules/checkPropertyNames.cjs.map +1 -1
- package/dist/rules/checkSyntax.cjs +2 -10
- package/dist/rules/checkSyntax.cjs.map +1 -1
- package/dist/rules/checkTagNames.cjs +4 -11
- package/dist/rules/checkTagNames.cjs.map +1 -1
- package/dist/rules/checkTemplateNames.cjs +12 -21
- package/dist/rules/checkTemplateNames.cjs.map +1 -1
- package/dist/rules/checkTypes.cjs +4 -10
- package/dist/rules/checkTypes.cjs.map +1 -1
- package/dist/rules/checkValues.cjs +9 -17
- package/dist/rules/checkValues.cjs.map +1 -1
- package/dist/rules/convertToJsdocComments.cjs +13 -19
- package/dist/rules/convertToJsdocComments.cjs.map +1 -1
- package/dist/rules/emptyTags.cjs +2 -10
- package/dist/rules/emptyTags.cjs.map +1 -1
- package/dist/rules/escapeInlineTags.cjs +2 -10
- package/dist/rules/escapeInlineTags.cjs.map +1 -1
- package/dist/rules/implementsOnClasses.cjs +2 -10
- package/dist/rules/implementsOnClasses.cjs.map +1 -1
- package/dist/rules/importsAsDependencies.cjs +12 -20
- package/dist/rules/importsAsDependencies.cjs.map +1 -1
- package/dist/rules/informativeDocs.cjs +4 -12
- package/dist/rules/informativeDocs.cjs.map +1 -1
- package/dist/rules/linesBeforeBlock.cjs +2 -9
- package/dist/rules/linesBeforeBlock.cjs.map +1 -1
- package/dist/rules/matchDescription.cjs +2 -9
- package/dist/rules/matchDescription.cjs.map +1 -1
- package/dist/rules/matchName.cjs +2 -10
- package/dist/rules/matchName.cjs.map +1 -1
- package/dist/rules/multilineBlocks.cjs +2 -9
- package/dist/rules/multilineBlocks.cjs.map +1 -1
- package/dist/rules/noBadBlocks.cjs +4 -11
- package/dist/rules/noBadBlocks.cjs.map +1 -1
- package/dist/rules/noBlankBlockDescriptions.cjs +2 -10
- package/dist/rules/noBlankBlockDescriptions.cjs.map +1 -1
- package/dist/rules/noBlankBlocks.cjs +2 -10
- package/dist/rules/noBlankBlocks.cjs.map +1 -1
- package/dist/rules/noDefaults.cjs +2 -10
- package/dist/rules/noDefaults.cjs.map +1 -1
- package/dist/rules/noMissingSyntax.cjs +2 -9
- package/dist/rules/noMissingSyntax.cjs.map +1 -1
- package/dist/rules/noMultiAsterisks.cjs +2 -10
- package/dist/rules/noMultiAsterisks.cjs.map +1 -1
- package/dist/rules/noRestrictedSyntax.cjs +2 -9
- package/dist/rules/noRestrictedSyntax.cjs.map +1 -1
- package/dist/rules/noTypes.cjs +2 -9
- package/dist/rules/noTypes.cjs.map +1 -1
- package/dist/rules/noUndefinedTypes.cjs +13 -21
- package/dist/rules/noUndefinedTypes.cjs.map +1 -1
- package/dist/rules/preferImportTag.cjs +21 -28
- package/dist/rules/preferImportTag.cjs.map +1 -1
- package/dist/rules/requireAsteriskPrefix.cjs +2 -10
- package/dist/rules/requireAsteriskPrefix.cjs.map +1 -1
- package/dist/rules/requireDescription.cjs +2 -9
- package/dist/rules/requireDescription.cjs.map +1 -1
- package/dist/rules/requireDescriptionCompleteSentence.cjs +7 -15
- package/dist/rules/requireDescriptionCompleteSentence.cjs.map +1 -1
- package/dist/rules/requireExample.cjs +2 -10
- package/dist/rules/requireExample.cjs.map +1 -1
- package/dist/rules/requireFileOverview.cjs +2 -10
- package/dist/rules/requireFileOverview.cjs.map +1 -1
- package/dist/rules/requireHyphenBeforeParamDescription.cjs +2 -10
- package/dist/rules/requireHyphenBeforeParamDescription.cjs.map +1 -1
- package/dist/rules/requireJsdoc.cjs +17 -25
- package/dist/rules/requireJsdoc.cjs.map +1 -1
- package/dist/rules/requireParam.cjs +2 -9
- package/dist/rules/requireParam.cjs.map +1 -1
- package/dist/rules/requireParamDescription.cjs +2 -10
- package/dist/rules/requireParamDescription.cjs.map +1 -1
- package/dist/rules/requireParamName.cjs +2 -10
- package/dist/rules/requireParamName.cjs.map +1 -1
- package/dist/rules/requireParamType.cjs +2 -10
- package/dist/rules/requireParamType.cjs.map +1 -1
- package/dist/rules/requireProperty.cjs +2 -10
- package/dist/rules/requireProperty.cjs.map +1 -1
- package/dist/rules/requirePropertyDescription.cjs +2 -10
- package/dist/rules/requirePropertyDescription.cjs.map +1 -1
- package/dist/rules/requirePropertyName.cjs +2 -10
- package/dist/rules/requirePropertyName.cjs.map +1 -1
- package/dist/rules/requirePropertyType.cjs +2 -10
- package/dist/rules/requirePropertyType.cjs.map +1 -1
- package/dist/rules/requireRejects.cjs +2 -9
- package/dist/rules/requireRejects.cjs.map +1 -1
- package/dist/rules/requireReturns.cjs +4 -11
- package/dist/rules/requireReturns.cjs.map +1 -1
- package/dist/rules/requireReturnsCheck.cjs +8 -15
- package/dist/rules/requireReturnsCheck.cjs.map +1 -1
- package/dist/rules/requireReturnsDescription.cjs +2 -10
- package/dist/rules/requireReturnsDescription.cjs.map +1 -1
- package/dist/rules/requireReturnsType.cjs +2 -10
- package/dist/rules/requireReturnsType.cjs.map +1 -1
- package/dist/rules/requireTags.cjs +2 -9
- package/dist/rules/requireTags.cjs.map +1 -1
- package/dist/rules/requireTemplate.cjs +5 -13
- package/dist/rules/requireTemplate.cjs.map +1 -1
- package/dist/rules/requireThrows.cjs +2 -9
- package/dist/rules/requireThrows.cjs.map +1 -1
- package/dist/rules/requireYields.cjs +2 -9
- package/dist/rules/requireYields.cjs.map +1 -1
- package/dist/rules/requireYieldsCheck.cjs +2 -9
- package/dist/rules/requireYieldsCheck.cjs.map +1 -1
- package/dist/rules/sortTags.cjs +4 -12
- package/dist/rules/sortTags.cjs.map +1 -1
- package/dist/rules/tagLines.cjs +2 -9
- package/dist/rules/tagLines.cjs.map +1 -1
- package/dist/rules/textEscaping.cjs +2 -9
- package/dist/rules/textEscaping.cjs.map +1 -1
- package/dist/rules/tsMethodSignatureStyle.cjs +10 -18
- package/dist/rules/tsMethodSignatureStyle.cjs.map +1 -1
- package/dist/rules/tsNoEmptyObjectType.cjs +5 -13
- package/dist/rules/tsNoEmptyObjectType.cjs.map +1 -1
- package/dist/rules/tsNoUnnecessaryTemplateExpression.cjs +8 -16
- package/dist/rules/tsNoUnnecessaryTemplateExpression.cjs.map +1 -1
- package/dist/rules/tsPreferFunctionType.cjs +8 -16
- package/dist/rules/tsPreferFunctionType.cjs.map +1 -1
- package/dist/rules/typeFormatting.cjs +9 -17
- package/dist/rules/typeFormatting.cjs.map +1 -1
- package/dist/rules/validTypes.cjs +10 -18
- package/dist/rules/validTypes.cjs.map +1 -1
- package/dist/tagNames.cjs +4 -9
- package/dist/tagNames.cjs.map +1 -1
- package/dist/utils/hasReturnValue.cjs +1 -8
- package/dist/utils/hasReturnValue.cjs.map +1 -1
- package/package.json +21 -21
- package/src/rules/checkTemplateNames.js +0 -1
- package/src/rules/requireJsdoc.js +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checkTypes.cjs","names":[
|
|
1
|
+
{"version":3,"file":"checkTypes.cjs","names":[],"sources":["../../src/rules/checkTypes.js"],"sourcesContent":["import {\n buildRejectOrPreferRuleDefinition,\n} from '../buildRejectOrPreferRuleDefinition.js';\nimport {\n strictNativeTypes,\n} from '../jsdocUtils.js';\n\n/**\n * @callback CheckNativeTypes\n * Iterates strict types to see if any should be added to `invalidTypes` (and\n * the the relevant strict type returned as the new preferred type).\n * @param {import('../iterateJsdoc.js').PreferredTypes} preferredTypes\n * @param {string} typeNodeName\n * @param {string|undefined} preferred\n * @param {import('jsdoc-type-pratt-parser').NonRootResult|undefined} parentNode\n * @param {(string|false|undefined)[][]} invalidTypes\n * @returns {string|undefined} The `preferred` type string, optionally changed\n */\n\n/** @type {CheckNativeTypes} */\nconst checkNativeTypes = (preferredTypes, typeNodeName, preferred, parentNode, invalidTypes) => {\n let changedPreferred = preferred;\n for (const strictNativeType of strictNativeTypes) {\n if (\n strictNativeType === 'object' &&\n (\n // This is not set to remap with exact type match (e.g.,\n // `object: 'Object'`), so can ignore (including if circular)\n !preferredTypes?.[typeNodeName] ||\n // Although present on `preferredTypes` for remapping, this is a\n // parent object without a parent match (and not\n // `unifyParentAndChildTypeChecks`) and we don't want\n // `object<>` given TypeScript issue https://github.com/microsoft/TypeScript/issues/20555\n /**\n * @type {import('jsdoc-type-pratt-parser').GenericResult}\n */\n (\n parentNode\n )?.elements?.length && (\n /**\n * @type {import('jsdoc-type-pratt-parser').GenericResult}\n */\n (\n parentNode\n )?.left?.type === 'JsdocTypeName' &&\n /**\n * @type {import('jsdoc-type-pratt-parser').GenericResult}\n */\n (parentNode)?.left?.value === 'Object'\n )\n )\n ) {\n continue;\n }\n\n if (strictNativeType !== typeNodeName &&\n strictNativeType.toLowerCase() === typeNodeName.toLowerCase() &&\n\n // Don't report if user has own map for a strict native type\n (!preferredTypes || preferredTypes?.[strictNativeType] === undefined)\n ) {\n changedPreferred = strictNativeType;\n invalidTypes.push([\n typeNodeName, changedPreferred,\n ]);\n break;\n }\n }\n\n return changedPreferred;\n};\n\nexport default buildRejectOrPreferRuleDefinition({\n checkNativeTypes,\n schema: [\n {\n additionalProperties: false,\n properties: {\n exemptTagContexts: {\n description: 'Avoids reporting when a bad type is found on a specified tag.',\n items: {\n additionalProperties: false,\n properties: {\n tag: {\n description: 'Set a key `tag` to the tag to exempt',\n type: 'string',\n },\n types: {\n description: `Set to \\`true\\` to indicate that any types on that tag will be allowed,\nor to an array of strings which will only allow specific bad types.\nIf an array of strings is given, these must match the type exactly,\ne.g., if you only allow \\`\"object\"\\`, it will not allow\n\\`\"object<string, string>\"\\`. Note that this is different from the\nbehavior of \\`settings.jsdoc.preferredTypes\\`. This option is useful\nfor normally restricting generic types like \\`object\\` with\n\\`preferredTypes\\`, but allowing \\`typedef\\` to indicate that its base\ntype is \\`object\\`.`,\n oneOf: [\n {\n type: 'boolean',\n },\n {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n ],\n },\n },\n type: 'object',\n },\n type: 'array',\n },\n noDefaults: {\n description: `Insists that only the supplied option type\nmap is to be used, and that the default preferences (such as \"string\"\nover \"String\") will not be enforced. The option's default is \\`false\\`.`,\n type: 'boolean',\n },\n unifyParentAndChildTypeChecks: {\n description: `@deprecated Use the \\`preferredTypes[preferredType]\\` setting of the same name instead.\nIf this option is \\`true\\`, will currently override \\`unifyParentAndChildTypeChecks\\` on the \\`preferredTypes\\` setting.`,\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n});\n"],"mappings":"AAAA,SACE,iCAAiC,QAC5B,yCAAyC;AAChD,SACE,iBAAiB,QACZ,kBAAkB;;AAEzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,MAAM,gBAAgB,GAAG,CAAC,cAAc,EAAE,YAAY,EAAE,SAAS,EAAE,UAAU,EAAE,YAAY,KAAK;EAC9F,IAAI,gBAAgB,GAAG,SAAS;EAChC,KAAK,MAAM,gBAAgB,IAAI,iBAAiB,EAAE;IAChD,IACE,gBAAgB,KAAK,QAAQ;IAE3B;IACA;IACA,CAAC,cAAc,GAAG,YAAY,CAAC;IAC/B;IACA;IACA;IACA;IACA;AACR;AACA;IAEU,UAAU,EACT,QAAQ,EAAE,MAAM;IACnB;AACR;AACA;IAEY,UAAU,EACT,IAAI,EAAE,IAAI,KAAK,eAAe;IACjC;AACV;AACA;IACW,UAAU,EAAG,IAAI,EAAE,KAAK,KAAK,QAAQ,CACvC,CACF,EACD;MACA;IACF;IAEA,IAAI,gBAAgB,KAAK,YAAY,IACnC,gBAAgB,CAAC,WAAW,CAAC,CAAC,KAAK,YAAY,CAAC,WAAW,CAAC,CAAC;IAE7D;IACC,CAAC,cAAc,IAAI,cAAc,GAAG,gBAAgB,CAAC,KAAK,SAAS,CAAC,EACrE;MACA,gBAAgB,GAAG,gBAAgB;MACnC,YAAY,CAAC,IAAI,CAAC,CAChB,YAAY,EAAE,gBAAgB,CAC/B,CAAC;MACF;IACF;EACF;EAEA,OAAO,gBAAgB;AACzB,CAAC;AAED,eAAe,iCAAiC,CAAC;EAC/C,gBAAgB;EAChB,MAAM,EAAE,CACN;IACE,oBAAoB,EAAE,KAAK;IAC3B,UAAU,EAAE;MACV,iBAAiB,EAAE;QACjB,WAAW,EAAE,+DAA+D;QAC5E,KAAK,EAAE;UACL,oBAAoB,EAAE,KAAK;UAC3B,UAAU,EAAE;YACV,GAAG,EAAE;cACH,WAAW,EAAE,sCAAsC;cACnD,IAAI,EAAE;YACR,CAAC;YACD,KAAK,EAAE;cACL,WAAW,EAAE;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;cACJ,KAAK,EAAE,CACL;gBACE,IAAI,EAAE;cACR,CAAC,EACD;gBACE,KAAK,EAAE;kBACL,IAAI,EAAE;gBACR,CAAC;gBACD,IAAI,EAAE;cACR,CAAC;YAEL;UACF,CAAC;UACD,IAAI,EAAE;QACR,CAAC;QACD,IAAI,EAAE;MACR,CAAC;MACD,UAAU,EAAE;QACV,WAAW,EAAE;AACvB;AACA,wEAAwE;QAC9D,IAAI,EAAE;MACR,CAAC;MACD,6BAA6B,EAAE;QAC7B,WAAW,EAAE;AACvB,yHAAyH;QAC/G,IAAI,EAAE;MACR;IACF,CAAC;IACD,IAAI,EAAE;EACR,CAAC;AAEL,CAAC,CAAC","ignoreList":[]}
|
|
@@ -1,16 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
});
|
|
6
|
-
exports.default = void 0;
|
|
7
|
-
var _iterateJsdoc = _interopRequireDefault(require("../iterateJsdoc.cjs"));
|
|
8
|
-
var _parseImportsExports = require("parse-imports-exports");
|
|
9
|
-
var _semver = _interopRequireDefault(require("semver"));
|
|
10
|
-
var _spdxExpressionParse = _interopRequireDefault(require("spdx-expression-parse"));
|
|
11
|
-
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
1
|
+
import iterateJsdoc from '../iterateJsdoc.js';
|
|
2
|
+
import { parseImportsExports } from 'parse-imports-exports';
|
|
3
|
+
import semver from 'semver';
|
|
4
|
+
import spdxExpressionParse from 'spdx-expression-parse';
|
|
12
5
|
const allowedKinds = new Set(['class', 'constant', 'event', 'external', 'file', 'function', 'member', 'mixin', 'module', 'namespace', 'typedef']);
|
|
13
|
-
|
|
6
|
+
export default iterateJsdoc(({
|
|
14
7
|
context,
|
|
15
8
|
report,
|
|
16
9
|
settings,
|
|
@@ -27,7 +20,7 @@ var _default = exports.default = (0, _iterateJsdoc.default)(({
|
|
|
27
20
|
const version = /** @type {string} */utils.getTagDescription(jsdocParameter).trim();
|
|
28
21
|
if (!version) {
|
|
29
22
|
report(`Missing JSDoc @${targetTagName} value.`, null, jsdocParameter);
|
|
30
|
-
} else if (!
|
|
23
|
+
} else if (!semver.valid(version)) {
|
|
31
24
|
report(`Invalid JSDoc @${targetTagName}: "${utils.getTagDescription(jsdocParameter)}".`, null, jsdocParameter);
|
|
32
25
|
}
|
|
33
26
|
});
|
|
@@ -53,7 +46,7 @@ var _default = exports.default = (0, _iterateJsdoc.default)(({
|
|
|
53
46
|
const version = /** @type {string} */utils.getTagDescription(jsdocParameter).trim();
|
|
54
47
|
if (!version) {
|
|
55
48
|
report(`Missing JSDoc @${targetTagName} value.`, null, jsdocParameter);
|
|
56
|
-
} else if (!
|
|
49
|
+
} else if (!semver.valid(version)) {
|
|
57
50
|
report(`Invalid JSDoc @${targetTagName}: "${utils.getTagDescription(jsdocParameter)}".`, null, jsdocParameter);
|
|
58
51
|
}
|
|
59
52
|
});
|
|
@@ -78,7 +71,7 @@ var _default = exports.default = (0, _iterateJsdoc.default)(({
|
|
|
78
71
|
}
|
|
79
72
|
} else {
|
|
80
73
|
try {
|
|
81
|
-
(
|
|
74
|
+
spdxExpressionParse(license);
|
|
82
75
|
} catch {
|
|
83
76
|
report(`Invalid JSDoc @${targetTagName}: "${license}"; expected SPDX expression: https://spdx.org/licenses/.`, null, jsdocParameter);
|
|
84
77
|
}
|
|
@@ -94,7 +87,7 @@ var _default = exports.default = (0, _iterateJsdoc.default)(({
|
|
|
94
87
|
} = tag;
|
|
95
88
|
const typePart = type ? `{${type}} ` : '';
|
|
96
89
|
const imprt = 'import ' + (description ? `${typePart}${name} ${description}` : `${typePart}${name}`);
|
|
97
|
-
const importsExports =
|
|
90
|
+
const importsExports = parseImportsExports(imprt.trim());
|
|
98
91
|
if (importsExports.errors) {
|
|
99
92
|
report('Bad @import tag', null, tag);
|
|
100
93
|
}
|
|
@@ -162,5 +155,4 @@ your expression as a string, but like a literal, e.g., \`/^mit$/vi\`.`,
|
|
|
162
155
|
type: 'suggestion'
|
|
163
156
|
}
|
|
164
157
|
});
|
|
165
|
-
module.exports = exports.default;
|
|
166
158
|
//# sourceMappingURL=checkValues.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checkValues.cjs","names":["_iterateJsdoc","_interopRequireDefault","require","_parseImportsExports","_semver","_spdxExpressionParse","e","__esModule","default","allowedKinds","Set","_default","exports","iterateJsdoc","context","report","settings","utils","options","allowedAuthors","allowedLicenses","licensePattern","numericOnlyVariation","forEachPreferredTag","jsdocParameter","targetTagName","version","getTagDescription","trim","semver","valid","kind","has","join","variation","Number","isInteger","licenseRegex","getRegexFromString","matches","matchAll","positiveMatch","match","license","includes","spdxExpressionParse","mode","tag","description","name","type","typePart","imprt","importsExports","parseImportsExports","errors","author","iterateAllJsdocs","meta","docs","url","schema","additionalProperties","properties","items","anyOf","module"],"sources":["../../src/rules/checkValues.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc.js';\nimport {\n parseImportsExports,\n} from 'parse-imports-exports';\nimport semver from 'semver';\nimport spdxExpressionParse from 'spdx-expression-parse';\n\nconst allowedKinds = new Set([\n 'class',\n 'constant',\n 'event',\n 'external',\n 'file',\n 'function',\n 'member',\n 'mixin',\n 'module',\n 'namespace',\n 'typedef',\n]);\n\nexport default iterateJsdoc(({\n context,\n report,\n settings,\n utils,\n}) => {\n const options = context.options[0] || {};\n const {\n allowedAuthors = null,\n allowedLicenses = null,\n licensePattern = '/([^\\n\\r]*)/gv',\n numericOnlyVariation = false,\n } = options;\n\n utils.forEachPreferredTag('version', (jsdocParameter, targetTagName) => {\n const version = /** @type {string} */ (\n utils.getTagDescription(jsdocParameter)\n ).trim();\n if (!version) {\n report(\n `Missing JSDoc @${targetTagName} value.`,\n null,\n jsdocParameter,\n );\n } else if (!semver.valid(version)) {\n report(\n `Invalid JSDoc @${targetTagName}: \"${utils.getTagDescription(jsdocParameter)}\".`,\n null,\n jsdocParameter,\n );\n }\n });\n\n utils.forEachPreferredTag('kind', (jsdocParameter, targetTagName) => {\n const kind = /** @type {string} */ (\n utils.getTagDescription(jsdocParameter)\n ).trim();\n if (!kind) {\n report(\n `Missing JSDoc @${targetTagName} value.`,\n null,\n jsdocParameter,\n );\n } else if (!allowedKinds.has(kind)) {\n report(\n `Invalid JSDoc @${targetTagName}: \"${utils.getTagDescription(jsdocParameter)}\"; ` +\n `must be one of: ${[\n ...allowedKinds,\n ].join(', ')}.`,\n null,\n jsdocParameter,\n );\n }\n });\n\n if (numericOnlyVariation) {\n utils.forEachPreferredTag('variation', (jsdocParameter, targetTagName) => {\n const variation = /** @type {string} */ (\n utils.getTagDescription(jsdocParameter)\n ).trim();\n if (!variation) {\n report(\n `Missing JSDoc @${targetTagName} value.`,\n null,\n jsdocParameter,\n );\n } else if (\n !Number.isInteger(Number(variation)) ||\n Number(variation) <= 0\n ) {\n report(\n `Invalid JSDoc @${targetTagName}: \"${utils.getTagDescription(jsdocParameter)}\".`,\n null,\n jsdocParameter,\n );\n }\n });\n }\n\n utils.forEachPreferredTag('since', (jsdocParameter, targetTagName) => {\n const version = /** @type {string} */ (\n utils.getTagDescription(jsdocParameter)\n ).trim();\n if (!version) {\n report(\n `Missing JSDoc @${targetTagName} value.`,\n null,\n jsdocParameter,\n );\n } else if (!semver.valid(version)) {\n report(\n `Invalid JSDoc @${targetTagName}: \"${utils.getTagDescription(jsdocParameter)}\".`,\n null,\n jsdocParameter,\n );\n }\n });\n utils.forEachPreferredTag('license', (jsdocParameter, targetTagName) => {\n const licenseRegex = utils.getRegexFromString(licensePattern, 'g');\n const matches = /** @type {string} */ (\n utils.getTagDescription(jsdocParameter)\n ).matchAll(licenseRegex);\n let positiveMatch = false;\n for (const match of matches) {\n const license = match[1] || match[0];\n if (license) {\n positiveMatch = true;\n }\n\n if (!license.trim()) {\n // Avoid reporting again as empty match\n if (positiveMatch) {\n return;\n }\n\n report(\n `Missing JSDoc @${targetTagName} value.`,\n null,\n jsdocParameter,\n );\n } else if (allowedLicenses) {\n if (allowedLicenses !== true && !allowedLicenses.includes(license)) {\n report(\n `Invalid JSDoc @${targetTagName}: \"${license}\"; expected one of ${allowedLicenses.join(', ')}.`,\n null,\n jsdocParameter,\n );\n }\n } else {\n try {\n spdxExpressionParse(license);\n } catch {\n report(\n `Invalid JSDoc @${targetTagName}: \"${license}\"; expected SPDX expression: https://spdx.org/licenses/.`,\n null,\n jsdocParameter,\n );\n }\n }\n }\n });\n\n if (settings.mode === 'typescript') {\n utils.forEachPreferredTag('import', (tag) => {\n const {\n description,\n name,\n type,\n } = tag;\n const typePart = type ? `{${type}} ` : '';\n const imprt = 'import ' + (description ?\n `${typePart}${name} ${description}` :\n `${typePart}${name}`);\n\n const importsExports = parseImportsExports(imprt.trim());\n\n if (importsExports.errors) {\n report(\n 'Bad @import tag',\n null,\n tag,\n );\n }\n });\n }\n\n utils.forEachPreferredTag('author', (jsdocParameter, targetTagName) => {\n const author = /** @type {string} */ (\n utils.getTagDescription(jsdocParameter)\n ).trim();\n if (!author) {\n report(\n `Missing JSDoc @${targetTagName} value.`,\n null,\n jsdocParameter,\n );\n } else if (allowedAuthors && !allowedAuthors.includes(author)) {\n report(\n `Invalid JSDoc @${targetTagName}: \"${utils.getTagDescription(jsdocParameter)}\"; expected one of ${allowedAuthors.join(', ')}.`,\n null,\n jsdocParameter,\n );\n }\n });\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'This rule checks the values for a handful of tags: `@version`, `@since`, `@license` and `@author`.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/check-values.md#repos-sticky-header',\n },\n schema: [\n {\n additionalProperties: false,\n properties: {\n allowedAuthors: {\n description: `An array of allowable author values. If absent, only non-whitespace will\nbe checked for.`,\n items: {\n type: 'string',\n },\n type: 'array',\n },\n allowedLicenses: {\n anyOf: [\n {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n {\n type: 'boolean',\n },\n ],\n description: `An array of allowable license values or \\`true\\` to allow any license text.\nIf present as an array, will be used in place of [SPDX identifiers](https://spdx.org/licenses/).`,\n },\n licensePattern: {\n description: `A string to be converted into a \\`RegExp\\` (with \\`v\\` flag) and whose first\nparenthetical grouping, if present, will match the portion of the license\ndescription to check (if no grouping is present, then the whole portion\nmatched will be used). Defaults to \\`/([^\\\\n\\\\r]*)/gv\\`, i.e., the SPDX expression\nis expected before any line breaks.\n\nNote that the \\`/\\` delimiters are optional, but necessary to add flags.\n\nDefaults to using the \\`v\\` flag, so to add your own flags, encapsulate\nyour expression as a string, but like a literal, e.g., \\`/^mit$/vi\\`.`,\n type: 'string',\n },\n numericOnlyVariation: {\n description: `Whether to enable validation that \\`@variation\\` must be a number. Defaults to\n\\`false\\`.`,\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"mappings":";;;;;;AAAA,IAAAA,aAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,oBAAA,GAAAD,OAAA;AAGA,IAAAE,OAAA,GAAAH,sBAAA,CAAAC,OAAA;AACA,IAAAG,oBAAA,GAAAJ,sBAAA,CAAAC,OAAA;AAAwD,SAAAD,uBAAAK,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAExD,MAAMG,YAAY,GAAG,IAAIC,GAAG,CAAC,CAC3B,OAAO,EACP,UAAU,EACV,OAAO,EACP,UAAU,EACV,MAAM,EACN,UAAU,EACV,QAAQ,EACR,OAAO,EACP,QAAQ,EACR,WAAW,EACX,SAAS,CACV,CAAC;AAAC,IAAAC,QAAA,GAAAC,OAAA,CAAAJ,OAAA,GAEY,IAAAK,qBAAY,EAAC,CAAC;EAC3BC,OAAO;EACPC,MAAM;EACNC,QAAQ;EACRC;AACF,CAAC,KAAK;EACJ,MAAMC,OAAO,GAAGJ,OAAO,CAACI,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;EACxC,MAAM;IACJC,cAAc,GAAG,IAAI;IACrBC,eAAe,GAAG,IAAI;IACtBC,cAAc,GAAG,gBAAgB;IACjCC,oBAAoB,GAAG;EACzB,CAAC,GAAGJ,OAAO;EAEXD,KAAK,CAACM,mBAAmB,CAAC,SAAS,EAAE,CAACC,cAAc,EAAEC,aAAa,KAAK;IACtE,MAAMC,OAAO,GAAG,qBACdT,KAAK,CAACU,iBAAiB,CAACH,cAAc,CAAC,CACvCI,IAAI,CAAC,CAAC;IACR,IAAI,CAACF,OAAO,EAAE;MACZX,MAAM,CACJ,kBAAkBU,aAAa,SAAS,EACxC,IAAI,EACJD,cACF,CAAC;IACH,CAAC,MAAM,IAAI,CAACK,eAAM,CAACC,KAAK,CAACJ,OAAO,CAAC,EAAE;MACjCX,MAAM,CACJ,kBAAkBU,aAAa,MAAMR,KAAK,CAACU,iBAAiB,CAACH,cAAc,CAAC,IAAI,EAChF,IAAI,EACJA,cACF,CAAC;IACH;EACF,CAAC,CAAC;EAEFP,KAAK,CAACM,mBAAmB,CAAC,MAAM,EAAE,CAACC,cAAc,EAAEC,aAAa,KAAK;IACnE,MAAMM,IAAI,GAAG,qBACXd,KAAK,CAACU,iBAAiB,CAACH,cAAc,CAAC,CACvCI,IAAI,CAAC,CAAC;IACR,IAAI,CAACG,IAAI,EAAE;MACThB,MAAM,CACJ,kBAAkBU,aAAa,SAAS,EACxC,IAAI,EACJD,cACF,CAAC;IACH,CAAC,MAAM,IAAI,CAACf,YAAY,CAACuB,GAAG,CAACD,IAAI,CAAC,EAAE;MAClChB,MAAM,CACJ,kBAAkBU,aAAa,MAAMR,KAAK,CAACU,iBAAiB,CAACH,cAAc,CAAC,KAAK,GACjF,mBAAmB,CACjB,GAAGf,YAAY,CAChB,CAACwB,IAAI,CAAC,IAAI,CAAC,GAAG,EACf,IAAI,EACJT,cACF,CAAC;IACH;EACF,CAAC,CAAC;EAEF,IAAIF,oBAAoB,EAAE;IACxBL,KAAK,CAACM,mBAAmB,CAAC,WAAW,EAAE,CAACC,cAAc,EAAEC,aAAa,KAAK;MACxE,MAAMS,SAAS,GAAG,qBAChBjB,KAAK,CAACU,iBAAiB,CAACH,cAAc,CAAC,CACvCI,IAAI,CAAC,CAAC;MACR,IAAI,CAACM,SAAS,EAAE;QACdnB,MAAM,CACJ,kBAAkBU,aAAa,SAAS,EACxC,IAAI,EACJD,cACF,CAAC;MACH,CAAC,MAAM,IACL,CAACW,MAAM,CAACC,SAAS,CAACD,MAAM,CAACD,SAAS,CAAC,CAAC,IACpCC,MAAM,CAACD,SAAS,CAAC,IAAI,CAAC,EACtB;QACAnB,MAAM,CACJ,kBAAkBU,aAAa,MAAMR,KAAK,CAACU,iBAAiB,CAACH,cAAc,CAAC,IAAI,EAChF,IAAI,EACJA,cACF,CAAC;MACH;IACF,CAAC,CAAC;EACJ;EAEAP,KAAK,CAACM,mBAAmB,CAAC,OAAO,EAAE,CAACC,cAAc,EAAEC,aAAa,KAAK;IACpE,MAAMC,OAAO,GAAG,qBACdT,KAAK,CAACU,iBAAiB,CAACH,cAAc,CAAC,CACvCI,IAAI,CAAC,CAAC;IACR,IAAI,CAACF,OAAO,EAAE;MACZX,MAAM,CACJ,kBAAkBU,aAAa,SAAS,EACxC,IAAI,EACJD,cACF,CAAC;IACH,CAAC,MAAM,IAAI,CAACK,eAAM,CAACC,KAAK,CAACJ,OAAO,CAAC,EAAE;MACjCX,MAAM,CACJ,kBAAkBU,aAAa,MAAMR,KAAK,CAACU,iBAAiB,CAACH,cAAc,CAAC,IAAI,EAChF,IAAI,EACJA,cACF,CAAC;IACH;EACF,CAAC,CAAC;EACFP,KAAK,CAACM,mBAAmB,CAAC,SAAS,EAAE,CAACC,cAAc,EAAEC,aAAa,KAAK;IACtE,MAAMY,YAAY,GAAGpB,KAAK,CAACqB,kBAAkB,CAACjB,cAAc,EAAE,GAAG,CAAC;IAClE,MAAMkB,OAAO,GAAG,qBACdtB,KAAK,CAACU,iBAAiB,CAACH,cAAc,CAAC,CACvCgB,QAAQ,CAACH,YAAY,CAAC;IACxB,IAAII,aAAa,GAAG,KAAK;IACzB,KAAK,MAAMC,KAAK,IAAIH,OAAO,EAAE;MAC3B,MAAMI,OAAO,GAAGD,KAAK,CAAC,CAAC,CAAC,IAAIA,KAAK,CAAC,CAAC,CAAC;MACpC,IAAIC,OAAO,EAAE;QACXF,aAAa,GAAG,IAAI;MACtB;MAEA,IAAI,CAACE,OAAO,CAACf,IAAI,CAAC,CAAC,EAAE;QACnB;QACA,IAAIa,aAAa,EAAE;UACjB;QACF;QAEA1B,MAAM,CACJ,kBAAkBU,aAAa,SAAS,EACxC,IAAI,EACJD,cACF,CAAC;MACH,CAAC,MAAM,IAAIJ,eAAe,EAAE;QAC1B,IAAIA,eAAe,KAAK,IAAI,IAAI,CAACA,eAAe,CAACwB,QAAQ,CAACD,OAAO,CAAC,EAAE;UAClE5B,MAAM,CACJ,kBAAkBU,aAAa,MAAMkB,OAAO,sBAAsBvB,eAAe,CAACa,IAAI,CAAC,IAAI,CAAC,GAAG,EAC/F,IAAI,EACJT,cACF,CAAC;QACH;MACF,CAAC,MAAM;QACL,IAAI;UACF,IAAAqB,4BAAmB,EAACF,OAAO,CAAC;QAC9B,CAAC,CAAC,MAAM;UACN5B,MAAM,CACJ,kBAAkBU,aAAa,MAAMkB,OAAO,0DAA0D,EACtG,IAAI,EACJnB,cACF,CAAC;QACH;MACF;IACF;EACF,CAAC,CAAC;EAEF,IAAIR,QAAQ,CAAC8B,IAAI,KAAK,YAAY,EAAE;IAClC7B,KAAK,CAACM,mBAAmB,CAAC,QAAQ,EAAGwB,GAAG,IAAK;MAC3C,MAAM;QACJC,WAAW;QACXC,IAAI;QACJC;MACF,CAAC,GAAGH,GAAG;MACP,MAAMI,QAAQ,GAAGD,IAAI,GAAG,IAAIA,IAAI,IAAI,GAAG,EAAE;MACzC,MAAME,KAAK,GAAG,SAAS,IAAIJ,WAAW,GACpC,GAAGG,QAAQ,GAAGF,IAAI,IAAID,WAAW,EAAE,GACnC,GAAGG,QAAQ,GAAGF,IAAI,EAAE,CAAC;MAEvB,MAAMI,cAAc,GAAG,IAAAC,wCAAmB,EAACF,KAAK,CAACxB,IAAI,CAAC,CAAC,CAAC;MAExD,IAAIyB,cAAc,CAACE,MAAM,EAAE;QACzBxC,MAAM,CACJ,iBAAiB,EACjB,IAAI,EACJgC,GACF,CAAC;MACH;IACF,CAAC,CAAC;EACJ;EAEA9B,KAAK,CAACM,mBAAmB,CAAC,QAAQ,EAAE,CAACC,cAAc,EAAEC,aAAa,KAAK;IACrE,MAAM+B,MAAM,GAAG,qBACbvC,KAAK,CAACU,iBAAiB,CAACH,cAAc,CAAC,CACvCI,IAAI,CAAC,CAAC;IACR,IAAI,CAAC4B,MAAM,EAAE;MACXzC,MAAM,CACJ,kBAAkBU,aAAa,SAAS,EACxC,IAAI,EACJD,cACF,CAAC;IACH,CAAC,MAAM,IAAIL,cAAc,IAAI,CAACA,cAAc,CAACyB,QAAQ,CAACY,MAAM,CAAC,EAAE;MAC7DzC,MAAM,CACJ,kBAAkBU,aAAa,MAAMR,KAAK,CAACU,iBAAiB,CAACH,cAAc,CAAC,sBAAsBL,cAAc,CAACc,IAAI,CAAC,IAAI,CAAC,GAAG,EAC9H,IAAI,EACJT,cACF,CAAC;IACH;EACF,CAAC,CAAC;AACJ,CAAC,EAAE;EACDiC,gBAAgB,EAAE,IAAI;EACtBC,IAAI,EAAE;IACJC,IAAI,EAAE;MACJX,WAAW,EAAE,oGAAoG;MACjHY,GAAG,EAAE;IACP,CAAC;IACDC,MAAM,EAAE,CACN;MACEC,oBAAoB,EAAE,KAAK;MAC3BC,UAAU,EAAE;QACV5C,cAAc,EAAE;UACd6B,WAAW,EAAE;AACzB,gBAAgB;UACJgB,KAAK,EAAE;YACLd,IAAI,EAAE;UACR,CAAC;UACDA,IAAI,EAAE;QACR,CAAC;QACD9B,eAAe,EAAE;UACf6C,KAAK,EAAE,CACL;YACED,KAAK,EAAE;cACLd,IAAI,EAAE;YACR,CAAC;YACDA,IAAI,EAAE;UACR,CAAC,EACD;YACEA,IAAI,EAAE;UACR,CAAC,CACF;UACDF,WAAW,EAAE;AACzB;QACU,CAAC;QACD3B,cAAc,EAAE;UACd2B,WAAW,EAAE;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sEAAsE;UAC1DE,IAAI,EAAE;QACR,CAAC;QACD5B,oBAAoB,EAAE;UACpB0B,WAAW,EAAE;AACzB,WAAW;UACCE,IAAI,EAAE;QACR;MACF,CAAC;MACDA,IAAI,EAAE;IACR,CAAC,CACF;IACDA,IAAI,EAAE;EACR;AACF,CAAC,CAAC;AAAAgB,MAAA,CAAAtD,OAAA,GAAAA,OAAA,CAAAJ,OAAA","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"checkValues.cjs","names":[],"sources":["../../src/rules/checkValues.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc.js';\nimport {\n parseImportsExports,\n} from 'parse-imports-exports';\nimport semver from 'semver';\nimport spdxExpressionParse from 'spdx-expression-parse';\n\nconst allowedKinds = new Set([\n 'class',\n 'constant',\n 'event',\n 'external',\n 'file',\n 'function',\n 'member',\n 'mixin',\n 'module',\n 'namespace',\n 'typedef',\n]);\n\nexport default iterateJsdoc(({\n context,\n report,\n settings,\n utils,\n}) => {\n const options = context.options[0] || {};\n const {\n allowedAuthors = null,\n allowedLicenses = null,\n licensePattern = '/([^\\n\\r]*)/gv',\n numericOnlyVariation = false,\n } = options;\n\n utils.forEachPreferredTag('version', (jsdocParameter, targetTagName) => {\n const version = /** @type {string} */ (\n utils.getTagDescription(jsdocParameter)\n ).trim();\n if (!version) {\n report(\n `Missing JSDoc @${targetTagName} value.`,\n null,\n jsdocParameter,\n );\n } else if (!semver.valid(version)) {\n report(\n `Invalid JSDoc @${targetTagName}: \"${utils.getTagDescription(jsdocParameter)}\".`,\n null,\n jsdocParameter,\n );\n }\n });\n\n utils.forEachPreferredTag('kind', (jsdocParameter, targetTagName) => {\n const kind = /** @type {string} */ (\n utils.getTagDescription(jsdocParameter)\n ).trim();\n if (!kind) {\n report(\n `Missing JSDoc @${targetTagName} value.`,\n null,\n jsdocParameter,\n );\n } else if (!allowedKinds.has(kind)) {\n report(\n `Invalid JSDoc @${targetTagName}: \"${utils.getTagDescription(jsdocParameter)}\"; ` +\n `must be one of: ${[\n ...allowedKinds,\n ].join(', ')}.`,\n null,\n jsdocParameter,\n );\n }\n });\n\n if (numericOnlyVariation) {\n utils.forEachPreferredTag('variation', (jsdocParameter, targetTagName) => {\n const variation = /** @type {string} */ (\n utils.getTagDescription(jsdocParameter)\n ).trim();\n if (!variation) {\n report(\n `Missing JSDoc @${targetTagName} value.`,\n null,\n jsdocParameter,\n );\n } else if (\n !Number.isInteger(Number(variation)) ||\n Number(variation) <= 0\n ) {\n report(\n `Invalid JSDoc @${targetTagName}: \"${utils.getTagDescription(jsdocParameter)}\".`,\n null,\n jsdocParameter,\n );\n }\n });\n }\n\n utils.forEachPreferredTag('since', (jsdocParameter, targetTagName) => {\n const version = /** @type {string} */ (\n utils.getTagDescription(jsdocParameter)\n ).trim();\n if (!version) {\n report(\n `Missing JSDoc @${targetTagName} value.`,\n null,\n jsdocParameter,\n );\n } else if (!semver.valid(version)) {\n report(\n `Invalid JSDoc @${targetTagName}: \"${utils.getTagDescription(jsdocParameter)}\".`,\n null,\n jsdocParameter,\n );\n }\n });\n utils.forEachPreferredTag('license', (jsdocParameter, targetTagName) => {\n const licenseRegex = utils.getRegexFromString(licensePattern, 'g');\n const matches = /** @type {string} */ (\n utils.getTagDescription(jsdocParameter)\n ).matchAll(licenseRegex);\n let positiveMatch = false;\n for (const match of matches) {\n const license = match[1] || match[0];\n if (license) {\n positiveMatch = true;\n }\n\n if (!license.trim()) {\n // Avoid reporting again as empty match\n if (positiveMatch) {\n return;\n }\n\n report(\n `Missing JSDoc @${targetTagName} value.`,\n null,\n jsdocParameter,\n );\n } else if (allowedLicenses) {\n if (allowedLicenses !== true && !allowedLicenses.includes(license)) {\n report(\n `Invalid JSDoc @${targetTagName}: \"${license}\"; expected one of ${allowedLicenses.join(', ')}.`,\n null,\n jsdocParameter,\n );\n }\n } else {\n try {\n spdxExpressionParse(license);\n } catch {\n report(\n `Invalid JSDoc @${targetTagName}: \"${license}\"; expected SPDX expression: https://spdx.org/licenses/.`,\n null,\n jsdocParameter,\n );\n }\n }\n }\n });\n\n if (settings.mode === 'typescript') {\n utils.forEachPreferredTag('import', (tag) => {\n const {\n description,\n name,\n type,\n } = tag;\n const typePart = type ? `{${type}} ` : '';\n const imprt = 'import ' + (description ?\n `${typePart}${name} ${description}` :\n `${typePart}${name}`);\n\n const importsExports = parseImportsExports(imprt.trim());\n\n if (importsExports.errors) {\n report(\n 'Bad @import tag',\n null,\n tag,\n );\n }\n });\n }\n\n utils.forEachPreferredTag('author', (jsdocParameter, targetTagName) => {\n const author = /** @type {string} */ (\n utils.getTagDescription(jsdocParameter)\n ).trim();\n if (!author) {\n report(\n `Missing JSDoc @${targetTagName} value.`,\n null,\n jsdocParameter,\n );\n } else if (allowedAuthors && !allowedAuthors.includes(author)) {\n report(\n `Invalid JSDoc @${targetTagName}: \"${utils.getTagDescription(jsdocParameter)}\"; expected one of ${allowedAuthors.join(', ')}.`,\n null,\n jsdocParameter,\n );\n }\n });\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'This rule checks the values for a handful of tags: `@version`, `@since`, `@license` and `@author`.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/check-values.md#repos-sticky-header',\n },\n schema: [\n {\n additionalProperties: false,\n properties: {\n allowedAuthors: {\n description: `An array of allowable author values. If absent, only non-whitespace will\nbe checked for.`,\n items: {\n type: 'string',\n },\n type: 'array',\n },\n allowedLicenses: {\n anyOf: [\n {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n {\n type: 'boolean',\n },\n ],\n description: `An array of allowable license values or \\`true\\` to allow any license text.\nIf present as an array, will be used in place of [SPDX identifiers](https://spdx.org/licenses/).`,\n },\n licensePattern: {\n description: `A string to be converted into a \\`RegExp\\` (with \\`v\\` flag) and whose first\nparenthetical grouping, if present, will match the portion of the license\ndescription to check (if no grouping is present, then the whole portion\nmatched will be used). Defaults to \\`/([^\\\\n\\\\r]*)/gv\\`, i.e., the SPDX expression\nis expected before any line breaks.\n\nNote that the \\`/\\` delimiters are optional, but necessary to add flags.\n\nDefaults to using the \\`v\\` flag, so to add your own flags, encapsulate\nyour expression as a string, but like a literal, e.g., \\`/^mit$/vi\\`.`,\n type: 'string',\n },\n numericOnlyVariation: {\n description: `Whether to enable validation that \\`@variation\\` must be a number. Defaults to\n\\`false\\`.`,\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,14 +1,9 @@
|
|
|
1
|
-
|
|
1
|
+
import { getSettings } from '../iterateJsdoc.js';
|
|
2
|
+
import { enforcedContexts, getContextObject, getIndent } from '../jsdocUtils.js';
|
|
3
|
+
import { getDecorator, getFollowingComment, getNonJsdocComment, getReducedASTNode } from '@es-joy/jsdoccomment';
|
|
2
4
|
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.default = void 0;
|
|
7
|
-
var _iterateJsdoc = require("../iterateJsdoc.cjs");
|
|
8
|
-
var _jsdocUtils = require("../jsdocUtils.cjs");
|
|
9
|
-
var _jsdoccomment = require("@es-joy/jsdoccomment");
|
|
10
5
|
/** @type {import('eslint').Rule.RuleModule} */
|
|
11
|
-
|
|
6
|
+
export default {
|
|
12
7
|
create(context) {
|
|
13
8
|
/**
|
|
14
9
|
* @typedef {import('eslint').AST.Token | import('estree').Comment | {
|
|
@@ -32,7 +27,7 @@ var _default = exports.default = {
|
|
|
32
27
|
// @ts-expect-error ESLint < 10
|
|
33
28
|
sourceCode = context.getSourceCode()
|
|
34
29
|
} = context;
|
|
35
|
-
const settings =
|
|
30
|
+
const settings = getSettings(context);
|
|
36
31
|
if (!settings) {
|
|
37
32
|
return {};
|
|
38
33
|
}
|
|
@@ -94,14 +89,14 @@ var _default = exports.default = {
|
|
|
94
89
|
/**
|
|
95
90
|
* @type {import('@typescript-eslint/types').TSESTree.Node|import('eslint').Rule.Node}
|
|
96
91
|
*/
|
|
97
|
-
|
|
98
|
-
const decorator =
|
|
92
|
+
getReducedASTNode(node, sourceCode);
|
|
93
|
+
const decorator = getDecorator(/** @type {import('eslint').Rule.Node} */
|
|
99
94
|
baseNode);
|
|
100
95
|
if (decorator) {
|
|
101
96
|
baseNode = /** @type {import('@typescript-eslint/types').TSESTree.Decorator} */
|
|
102
97
|
decorator;
|
|
103
98
|
}
|
|
104
|
-
const indent =
|
|
99
|
+
const indent = getIndent({
|
|
105
100
|
text: sourceCode.getText(/** @type {import('eslint').Rule.Node} */baseNode, /** @type {import('eslint').AST.SourceLocation} */
|
|
106
101
|
(/** @type {import('eslint').Rule.Node} */baseNode.loc).start.column)
|
|
107
102
|
});
|
|
@@ -159,7 +154,7 @@ var _default = exports.default = {
|
|
|
159
154
|
* @type {import('../iterateJsdoc.js').CheckJsdoc}
|
|
160
155
|
*/
|
|
161
156
|
const checkNonJsdoc = (_info, _handler, node) => {
|
|
162
|
-
const comment =
|
|
157
|
+
const comment = getNonJsdocComment(sourceCode, node, settings);
|
|
163
158
|
if (!comment || /** @type {string[]} */
|
|
164
159
|
allowedPrefixes.some(prefix => {
|
|
165
160
|
return comment.value.trimStart().startsWith(prefix);
|
|
@@ -182,7 +177,7 @@ var _default = exports.default = {
|
|
|
182
177
|
* @param {import('../iterateJsdoc.js').Context[]} ctxts
|
|
183
178
|
*/
|
|
184
179
|
const checkNonJsdocAfter = (node, ctxts) => {
|
|
185
|
-
const comment =
|
|
180
|
+
const comment = getFollowingComment(sourceCode, node);
|
|
186
181
|
if (!comment || comment.value.startsWith('*') || /** @type {string[]} */
|
|
187
182
|
allowedPrefixes.some(prefix => {
|
|
188
183
|
return comment.value.trimStart().startsWith(prefix);
|
|
@@ -201,11 +196,11 @@ var _default = exports.default = {
|
|
|
201
196
|
|
|
202
197
|
// Todo: add contexts to check after (and handle if want both before and after)
|
|
203
198
|
return {
|
|
204
|
-
...
|
|
205
|
-
...
|
|
199
|
+
...getContextObject(enforcedContexts(context, true, settings), checkNonJsdoc),
|
|
200
|
+
...getContextObject(contextsAfter, (_info, _handler, node) => {
|
|
206
201
|
checkNonJsdocAfter(node, contextsAfter);
|
|
207
202
|
}),
|
|
208
|
-
...
|
|
203
|
+
...getContextObject(contextsBeforeAndAfter, (_info, _handler, node) => {
|
|
209
204
|
checkNonJsdoc({}, null, node);
|
|
210
205
|
if (!reportingNonJsdoc) {
|
|
211
206
|
checkNonJsdocAfter(node, contextsBeforeAndAfter);
|
|
@@ -352,5 +347,4 @@ Defaults to \`both\`.`,
|
|
|
352
347
|
type: 'suggestion'
|
|
353
348
|
}
|
|
354
349
|
};
|
|
355
|
-
module.exports = exports.default;
|
|
356
350
|
//# sourceMappingURL=convertToJsdocComments.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"convertToJsdocComments.cjs","names":["_iterateJsdoc","require","_jsdocUtils","_jsdoccomment","_default","exports","default","create","context","sourceCode","getSourceCode","settings","getSettings","allowedPrefixes","contexts","contextsAfter","contextsBeforeAndAfter","enableFixer","enforceJsdocLineStyle","lineOrBlockStyle","options","reportingNonJsdoc","report","messageId","comment","node","fixer","loc","end","column","line","start","fix","getFixer","addComment","ctxts","lines","minLines","maxLines","baseNode","getReducedASTNode","decorator","getDecorator","indent","getIndent","text","getText","inlineCommentBlock","find","contxt","ctxt","type","reportings","checkNonJsdoc","_info","_handler","getNonJsdocComment","some","prefix","value","trimStart","startsWith","commentToAdd","insertion","trim","trimEnd","repeat","replaceText","checkNonJsdocAfter","getFollowingComment","slice","remove","insertTextBefore","parent","getContextObject","enforcedContexts","meta","docs","description","url","fixable","messages","blockCommentsJsdocStyle","lineCommentsJsdocStyle","schema","additionalProperties","properties","items","anyOf","enum","module"],"sources":["../../src/rules/convertToJsdocComments.js"],"sourcesContent":["import {\n getSettings,\n} from '../iterateJsdoc.js';\nimport {\n enforcedContexts,\n getContextObject,\n getIndent,\n} from '../jsdocUtils.js';\nimport {\n getDecorator,\n getFollowingComment,\n getNonJsdocComment,\n getReducedASTNode,\n} from '@es-joy/jsdoccomment';\n\n/** @type {import('eslint').Rule.RuleModule} */\nexport default {\n create (context) {\n /**\n * @typedef {import('eslint').AST.Token | import('estree').Comment | {\n * type: import('eslint').AST.TokenType|\"Line\"|\"Block\"|\"Shebang\",\n * range: [number, number],\n * value: string\n * }} Token\n */\n\n /**\n * @callback AddComment\n * @param {boolean|undefined} inlineCommentBlock\n * @param {Token} comment\n * @param {string} indent\n * @param {number} lines\n * @param {import('eslint').Rule.RuleFixer} fixer\n */\n\n /* c8 ignore next -- Fallback to deprecated method */\n const {\n // @ts-expect-error ESLint < 10\n sourceCode = context.getSourceCode(),\n } = context;\n const settings = getSettings(context);\n if (!settings) {\n return {};\n }\n\n const {\n allowedPrefixes = [\n '@ts-', 'istanbul ', 'c8 ', 'v8 ', 'eslint', 'prettier-',\n ],\n contexts = settings.contexts || [],\n contextsAfter = /** @type {string[]} */ ([]),\n contextsBeforeAndAfter = [\n 'VariableDeclarator', 'TSPropertySignature', 'PropertyDefinition',\n ],\n enableFixer = true,\n enforceJsdocLineStyle = 'multi',\n lineOrBlockStyle = 'both',\n } = context.options[0] ?? {};\n\n let reportingNonJsdoc = false;\n\n /**\n * @param {string} messageId\n * @param {import('estree').Comment|Token} comment\n * @param {import('eslint').Rule.Node} node\n * @param {import('eslint').Rule.ReportFixer} fixer\n */\n const report = (messageId, comment, node, fixer) => {\n const loc = {\n end: {\n column: 0,\n /* c8 ignore next 2 -- Guard */\n // @ts-expect-error Ok\n line: (comment.loc?.start?.line ?? 1),\n },\n start: {\n column: 0,\n /* c8 ignore next 2 -- Guard */\n // @ts-expect-error Ok\n line: (comment.loc?.start?.line ?? 1),\n },\n };\n\n context.report({\n fix: enableFixer ? fixer : null,\n loc,\n messageId,\n node,\n });\n };\n\n /**\n * @param {import('eslint').Rule.Node} node\n * @param {import('eslint').AST.Token | import('estree').Comment | {\n * type: import('eslint').AST.TokenType|\"Line\"|\"Block\"|\"Shebang\",\n * range: [number, number],\n * value: string\n * }} comment\n * @param {AddComment} addComment\n * @param {import('../iterateJsdoc.js').Context[]} ctxts\n */\n const getFixer = (node, comment, addComment, ctxts) => {\n return /** @type {import('eslint').Rule.ReportFixer} */ (fixer) => {\n // Default to one line break if the `minLines`/`maxLines` settings allow\n const lines = settings.minLines === 0 && settings.maxLines >= 1 ? 1 : settings.minLines;\n let baseNode =\n /**\n * @type {import('@typescript-eslint/types').TSESTree.Node|import('eslint').Rule.Node}\n */ (\n getReducedASTNode(node, sourceCode)\n );\n\n const decorator = getDecorator(\n /** @type {import('eslint').Rule.Node} */\n (baseNode),\n );\n if (decorator) {\n baseNode = /** @type {import('@typescript-eslint/types').TSESTree.Decorator} */ (\n decorator\n );\n }\n\n const indent = getIndent({\n text: sourceCode.getText(\n /** @type {import('eslint').Rule.Node} */ (baseNode),\n /** @type {import('eslint').AST.SourceLocation} */\n (\n /** @type {import('eslint').Rule.Node} */ (baseNode).loc\n ).start.column,\n ),\n });\n\n const {\n inlineCommentBlock,\n } =\n /**\n * @type {{\n * context: string,\n * inlineCommentBlock: boolean,\n * minLineCount: import('../iterateJsdoc.js').Integer\n * }[]}\n */ (ctxts).find((contxt) => {\n if (typeof contxt === 'string') {\n return false;\n }\n\n const {\n context: ctxt,\n } = contxt;\n return ctxt === node.type;\n }) || {};\n\n return addComment(inlineCommentBlock, comment, indent, lines, fixer);\n };\n };\n\n /**\n * @param {import('eslint').AST.Token | import('estree').Comment | {\n * type: import('eslint').AST.TokenType|\"Line\"|\"Block\"|\"Shebang\",\n * range: [number, number],\n * value: string\n * }} comment\n * @param {import('eslint').Rule.Node} node\n * @param {AddComment} addComment\n * @param {import('../iterateJsdoc.js').Context[]} ctxts\n */\n const reportings = (comment, node, addComment, ctxts) => {\n const fixer = getFixer(node, comment, addComment, ctxts);\n\n if (comment.type === 'Block') {\n if (lineOrBlockStyle === 'line') {\n return;\n }\n\n report('blockCommentsJsdocStyle', comment, node, fixer);\n return;\n }\n\n if (comment.type === 'Line') {\n if (lineOrBlockStyle === 'block') {\n return;\n }\n\n report('lineCommentsJsdocStyle', comment, node, fixer);\n }\n };\n\n /**\n * @type {import('../iterateJsdoc.js').CheckJsdoc}\n */\n const checkNonJsdoc = (_info, _handler, node) => {\n const comment = getNonJsdocComment(sourceCode, node, settings);\n\n if (\n !comment ||\n /** @type {string[]} */\n (allowedPrefixes).some((prefix) => {\n return comment.value.trimStart().startsWith(prefix);\n })\n ) {\n return;\n }\n\n reportingNonJsdoc = true;\n\n /** @type {AddComment} */\n const addComment = (inlineCommentBlock, commentToAdd, indent, lines, fixer) => {\n const insertion = (\n inlineCommentBlock || enforceJsdocLineStyle === 'single' ?\n `/** ${commentToAdd.value.trim()} ` :\n `/**\\n${indent}*${commentToAdd.value.trimEnd()}\\n${indent}`\n ) +\n `*/${'\\n'.repeat((lines || 1) - 1)}`;\n\n return fixer.replaceText(\n /** @type {import('eslint').AST.Token} */\n (commentToAdd),\n insertion,\n );\n };\n\n reportings(comment, node, addComment, contexts);\n };\n\n /**\n * @param {import('eslint').Rule.Node} node\n * @param {import('../iterateJsdoc.js').Context[]} ctxts\n */\n const checkNonJsdocAfter = (node, ctxts) => {\n const comment = getFollowingComment(sourceCode, node);\n\n if (\n !comment ||\n comment.value.startsWith('*') ||\n /** @type {string[]} */\n (allowedPrefixes).some((prefix) => {\n return comment.value.trimStart().startsWith(prefix);\n })\n ) {\n return;\n }\n\n /** @type {AddComment} */\n const addComment = (inlineCommentBlock, commentToAdd, indent, lines, fixer) => {\n const insertion = (\n inlineCommentBlock || enforceJsdocLineStyle === 'single' ?\n `/** ${commentToAdd.value.trim()} ` :\n `/**\\n${indent}*${commentToAdd.value.trimEnd()}\\n${indent}`\n ) +\n `*/${'\\n'.repeat((lines || 1) - 1)}${lines ? `\\n${indent.slice(1)}` : ' '}`;\n\n return [\n fixer.remove(\n /** @type {import('eslint').AST.Token} */\n (commentToAdd),\n ), fixer.insertTextBefore(\n node.type === 'VariableDeclarator' ? node.parent : node,\n insertion,\n ),\n ];\n };\n\n reportings(comment, node, addComment, ctxts);\n };\n\n // Todo: add contexts to check after (and handle if want both before and after)\n return {\n ...getContextObject(\n enforcedContexts(context, true, settings),\n checkNonJsdoc,\n ),\n ...getContextObject(\n contextsAfter,\n (_info, _handler, node) => {\n checkNonJsdocAfter(node, contextsAfter);\n },\n ),\n ...getContextObject(\n contextsBeforeAndAfter,\n (_info, _handler, node) => {\n checkNonJsdoc({}, null, node);\n if (!reportingNonJsdoc) {\n checkNonJsdocAfter(node, contextsBeforeAndAfter);\n }\n },\n ),\n };\n },\n meta: {\n docs: {\n description: 'Converts non-JSDoc comments preceding or following nodes into JSDoc ones',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/convert-to-jsdoc-comments.md#repos-sticky-header',\n },\n\n fixable: 'code',\n\n messages: {\n blockCommentsJsdocStyle: 'Block comments should be JSDoc-style.',\n lineCommentsJsdocStyle: 'Line comments should be JSDoc-style.',\n },\n schema: [\n {\n additionalProperties: false,\n properties: {\n allowedPrefixes: {\n description: `An array of prefixes to allow at the beginning of a comment.\n\nDefaults to \\`['@ts-', 'istanbul ', 'c8 ', 'v8 ', 'eslint', 'prettier-']\\`.\n\nSupplying your own value overrides the defaults.`,\n items: {\n type: 'string',\n },\n type: 'array',\n },\n contexts: {\n description: `The contexts array which will be checked for preceding content.\n\nCan either be strings or an object with a \\`context\\` string and an optional, default \\`false\\` \\`inlineCommentBlock\\` boolean.\n\nDefaults to \\`ArrowFunctionExpression\\`, \\`FunctionDeclaration\\`,\n\\`FunctionExpression\\`, \\`TSDeclareFunction\\`.`,\n items: {\n anyOf: [\n {\n type: 'string',\n },\n {\n additionalProperties: false,\n properties: {\n context: {\n type: 'string',\n },\n inlineCommentBlock: {\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n },\n type: 'array',\n },\n contextsAfter: {\n description: `The contexts array which will be checked for content on the same line after.\n\nCan either be strings or an object with a \\`context\\` string and an optional, default \\`false\\` \\`inlineCommentBlock\\` boolean.\n\nDefaults to an empty array.`,\n items: {\n anyOf: [\n {\n type: 'string',\n },\n {\n additionalProperties: false,\n properties: {\n context: {\n type: 'string',\n },\n inlineCommentBlock: {\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n },\n type: 'array',\n },\n contextsBeforeAndAfter: {\n description: `The contexts array which will be checked for content before and on the same\nline after.\n\nCan either be strings or an object with a \\`context\\` string and an optional, default \\`false\\` \\`inlineCommentBlock\\` boolean.\n\nDefaults to \\`VariableDeclarator\\`, \\`TSPropertySignature\\`, \\`PropertyDefinition\\`.`,\n items: {\n anyOf: [\n {\n type: 'string',\n },\n {\n additionalProperties: false,\n properties: {\n context: {\n type: 'string',\n },\n inlineCommentBlock: {\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n },\n type: 'array',\n },\n enableFixer: {\n description: 'Set to `false` to disable fixing.',\n type: 'boolean',\n },\n enforceJsdocLineStyle: {\n description: `What policy to enforce on the conversion of non-JSDoc comments without\nline breaks. (Non-JSDoc (mulitline) comments with line breaks will always\nbe converted to \\`multi\\` style JSDoc comments.)\n\n- \\`multi\\` - Convert to multi-line style\n\\`\\`\\`js\n/**\n * Some text\n */\n\\`\\`\\`\n- \\`single\\` - Convert to single-line style\n\\`\\`\\`js\n/** Some text */\n\\`\\`\\`\n\nDefaults to \\`multi\\`.`,\n enum: [\n 'multi', 'single',\n ],\n type: 'string',\n },\n lineOrBlockStyle: {\n description: `What style of comments to which to apply JSDoc conversion.\n\n- \\`block\\` - Applies to block-style comments (\\`/* ... */\\`)\n- \\`line\\` - Applies to line-style comments (\\`// ...\\`)\n- \\`both\\` - Applies to both block and line-style comments\n\nDefaults to \\`both\\`.`,\n enum: [\n 'block', 'line', 'both',\n ],\n type: 'string',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n};\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"convertToJsdocComments.cjs","names":[],"sources":["../../src/rules/convertToJsdocComments.js"],"sourcesContent":["import {\n getSettings,\n} from '../iterateJsdoc.js';\nimport {\n enforcedContexts,\n getContextObject,\n getIndent,\n} from '../jsdocUtils.js';\nimport {\n getDecorator,\n getFollowingComment,\n getNonJsdocComment,\n getReducedASTNode,\n} from '@es-joy/jsdoccomment';\n\n/** @type {import('eslint').Rule.RuleModule} */\nexport default {\n create (context) {\n /**\n * @typedef {import('eslint').AST.Token | import('estree').Comment | {\n * type: import('eslint').AST.TokenType|\"Line\"|\"Block\"|\"Shebang\",\n * range: [number, number],\n * value: string\n * }} Token\n */\n\n /**\n * @callback AddComment\n * @param {boolean|undefined} inlineCommentBlock\n * @param {Token} comment\n * @param {string} indent\n * @param {number} lines\n * @param {import('eslint').Rule.RuleFixer} fixer\n */\n\n /* c8 ignore next -- Fallback to deprecated method */\n const {\n // @ts-expect-error ESLint < 10\n sourceCode = context.getSourceCode(),\n } = context;\n const settings = getSettings(context);\n if (!settings) {\n return {};\n }\n\n const {\n allowedPrefixes = [\n '@ts-', 'istanbul ', 'c8 ', 'v8 ', 'eslint', 'prettier-',\n ],\n contexts = settings.contexts || [],\n contextsAfter = /** @type {string[]} */ ([]),\n contextsBeforeAndAfter = [\n 'VariableDeclarator', 'TSPropertySignature', 'PropertyDefinition',\n ],\n enableFixer = true,\n enforceJsdocLineStyle = 'multi',\n lineOrBlockStyle = 'both',\n } = context.options[0] ?? {};\n\n let reportingNonJsdoc = false;\n\n /**\n * @param {string} messageId\n * @param {import('estree').Comment|Token} comment\n * @param {import('eslint').Rule.Node} node\n * @param {import('eslint').Rule.ReportFixer} fixer\n */\n const report = (messageId, comment, node, fixer) => {\n const loc = {\n end: {\n column: 0,\n /* c8 ignore next 2 -- Guard */\n // @ts-expect-error Ok\n line: (comment.loc?.start?.line ?? 1),\n },\n start: {\n column: 0,\n /* c8 ignore next 2 -- Guard */\n // @ts-expect-error Ok\n line: (comment.loc?.start?.line ?? 1),\n },\n };\n\n context.report({\n fix: enableFixer ? fixer : null,\n loc,\n messageId,\n node,\n });\n };\n\n /**\n * @param {import('eslint').Rule.Node} node\n * @param {import('eslint').AST.Token | import('estree').Comment | {\n * type: import('eslint').AST.TokenType|\"Line\"|\"Block\"|\"Shebang\",\n * range: [number, number],\n * value: string\n * }} comment\n * @param {AddComment} addComment\n * @param {import('../iterateJsdoc.js').Context[]} ctxts\n */\n const getFixer = (node, comment, addComment, ctxts) => {\n return /** @type {import('eslint').Rule.ReportFixer} */ (fixer) => {\n // Default to one line break if the `minLines`/`maxLines` settings allow\n const lines = settings.minLines === 0 && settings.maxLines >= 1 ? 1 : settings.minLines;\n let baseNode =\n /**\n * @type {import('@typescript-eslint/types').TSESTree.Node|import('eslint').Rule.Node}\n */ (\n getReducedASTNode(node, sourceCode)\n );\n\n const decorator = getDecorator(\n /** @type {import('eslint').Rule.Node} */\n (baseNode),\n );\n if (decorator) {\n baseNode = /** @type {import('@typescript-eslint/types').TSESTree.Decorator} */ (\n decorator\n );\n }\n\n const indent = getIndent({\n text: sourceCode.getText(\n /** @type {import('eslint').Rule.Node} */ (baseNode),\n /** @type {import('eslint').AST.SourceLocation} */\n (\n /** @type {import('eslint').Rule.Node} */ (baseNode).loc\n ).start.column,\n ),\n });\n\n const {\n inlineCommentBlock,\n } =\n /**\n * @type {{\n * context: string,\n * inlineCommentBlock: boolean,\n * minLineCount: import('../iterateJsdoc.js').Integer\n * }[]}\n */ (ctxts).find((contxt) => {\n if (typeof contxt === 'string') {\n return false;\n }\n\n const {\n context: ctxt,\n } = contxt;\n return ctxt === node.type;\n }) || {};\n\n return addComment(inlineCommentBlock, comment, indent, lines, fixer);\n };\n };\n\n /**\n * @param {import('eslint').AST.Token | import('estree').Comment | {\n * type: import('eslint').AST.TokenType|\"Line\"|\"Block\"|\"Shebang\",\n * range: [number, number],\n * value: string\n * }} comment\n * @param {import('eslint').Rule.Node} node\n * @param {AddComment} addComment\n * @param {import('../iterateJsdoc.js').Context[]} ctxts\n */\n const reportings = (comment, node, addComment, ctxts) => {\n const fixer = getFixer(node, comment, addComment, ctxts);\n\n if (comment.type === 'Block') {\n if (lineOrBlockStyle === 'line') {\n return;\n }\n\n report('blockCommentsJsdocStyle', comment, node, fixer);\n return;\n }\n\n if (comment.type === 'Line') {\n if (lineOrBlockStyle === 'block') {\n return;\n }\n\n report('lineCommentsJsdocStyle', comment, node, fixer);\n }\n };\n\n /**\n * @type {import('../iterateJsdoc.js').CheckJsdoc}\n */\n const checkNonJsdoc = (_info, _handler, node) => {\n const comment = getNonJsdocComment(sourceCode, node, settings);\n\n if (\n !comment ||\n /** @type {string[]} */\n (allowedPrefixes).some((prefix) => {\n return comment.value.trimStart().startsWith(prefix);\n })\n ) {\n return;\n }\n\n reportingNonJsdoc = true;\n\n /** @type {AddComment} */\n const addComment = (inlineCommentBlock, commentToAdd, indent, lines, fixer) => {\n const insertion = (\n inlineCommentBlock || enforceJsdocLineStyle === 'single' ?\n `/** ${commentToAdd.value.trim()} ` :\n `/**\\n${indent}*${commentToAdd.value.trimEnd()}\\n${indent}`\n ) +\n `*/${'\\n'.repeat((lines || 1) - 1)}`;\n\n return fixer.replaceText(\n /** @type {import('eslint').AST.Token} */\n (commentToAdd),\n insertion,\n );\n };\n\n reportings(comment, node, addComment, contexts);\n };\n\n /**\n * @param {import('eslint').Rule.Node} node\n * @param {import('../iterateJsdoc.js').Context[]} ctxts\n */\n const checkNonJsdocAfter = (node, ctxts) => {\n const comment = getFollowingComment(sourceCode, node);\n\n if (\n !comment ||\n comment.value.startsWith('*') ||\n /** @type {string[]} */\n (allowedPrefixes).some((prefix) => {\n return comment.value.trimStart().startsWith(prefix);\n })\n ) {\n return;\n }\n\n /** @type {AddComment} */\n const addComment = (inlineCommentBlock, commentToAdd, indent, lines, fixer) => {\n const insertion = (\n inlineCommentBlock || enforceJsdocLineStyle === 'single' ?\n `/** ${commentToAdd.value.trim()} ` :\n `/**\\n${indent}*${commentToAdd.value.trimEnd()}\\n${indent}`\n ) +\n `*/${'\\n'.repeat((lines || 1) - 1)}${lines ? `\\n${indent.slice(1)}` : ' '}`;\n\n return [\n fixer.remove(\n /** @type {import('eslint').AST.Token} */\n (commentToAdd),\n ), fixer.insertTextBefore(\n node.type === 'VariableDeclarator' ? node.parent : node,\n insertion,\n ),\n ];\n };\n\n reportings(comment, node, addComment, ctxts);\n };\n\n // Todo: add contexts to check after (and handle if want both before and after)\n return {\n ...getContextObject(\n enforcedContexts(context, true, settings),\n checkNonJsdoc,\n ),\n ...getContextObject(\n contextsAfter,\n (_info, _handler, node) => {\n checkNonJsdocAfter(node, contextsAfter);\n },\n ),\n ...getContextObject(\n contextsBeforeAndAfter,\n (_info, _handler, node) => {\n checkNonJsdoc({}, null, node);\n if (!reportingNonJsdoc) {\n checkNonJsdocAfter(node, contextsBeforeAndAfter);\n }\n },\n ),\n };\n },\n meta: {\n docs: {\n description: 'Converts non-JSDoc comments preceding or following nodes into JSDoc ones',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/convert-to-jsdoc-comments.md#repos-sticky-header',\n },\n\n fixable: 'code',\n\n messages: {\n blockCommentsJsdocStyle: 'Block comments should be JSDoc-style.',\n lineCommentsJsdocStyle: 'Line comments should be JSDoc-style.',\n },\n schema: [\n {\n additionalProperties: false,\n properties: {\n allowedPrefixes: {\n description: `An array of prefixes to allow at the beginning of a comment.\n\nDefaults to \\`['@ts-', 'istanbul ', 'c8 ', 'v8 ', 'eslint', 'prettier-']\\`.\n\nSupplying your own value overrides the defaults.`,\n items: {\n type: 'string',\n },\n type: 'array',\n },\n contexts: {\n description: `The contexts array which will be checked for preceding content.\n\nCan either be strings or an object with a \\`context\\` string and an optional, default \\`false\\` \\`inlineCommentBlock\\` boolean.\n\nDefaults to \\`ArrowFunctionExpression\\`, \\`FunctionDeclaration\\`,\n\\`FunctionExpression\\`, \\`TSDeclareFunction\\`.`,\n items: {\n anyOf: [\n {\n type: 'string',\n },\n {\n additionalProperties: false,\n properties: {\n context: {\n type: 'string',\n },\n inlineCommentBlock: {\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n },\n type: 'array',\n },\n contextsAfter: {\n description: `The contexts array which will be checked for content on the same line after.\n\nCan either be strings or an object with a \\`context\\` string and an optional, default \\`false\\` \\`inlineCommentBlock\\` boolean.\n\nDefaults to an empty array.`,\n items: {\n anyOf: [\n {\n type: 'string',\n },\n {\n additionalProperties: false,\n properties: {\n context: {\n type: 'string',\n },\n inlineCommentBlock: {\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n },\n type: 'array',\n },\n contextsBeforeAndAfter: {\n description: `The contexts array which will be checked for content before and on the same\nline after.\n\nCan either be strings or an object with a \\`context\\` string and an optional, default \\`false\\` \\`inlineCommentBlock\\` boolean.\n\nDefaults to \\`VariableDeclarator\\`, \\`TSPropertySignature\\`, \\`PropertyDefinition\\`.`,\n items: {\n anyOf: [\n {\n type: 'string',\n },\n {\n additionalProperties: false,\n properties: {\n context: {\n type: 'string',\n },\n inlineCommentBlock: {\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n },\n type: 'array',\n },\n enableFixer: {\n description: 'Set to `false` to disable fixing.',\n type: 'boolean',\n },\n enforceJsdocLineStyle: {\n description: `What policy to enforce on the conversion of non-JSDoc comments without\nline breaks. (Non-JSDoc (mulitline) comments with line breaks will always\nbe converted to \\`multi\\` style JSDoc comments.)\n\n- \\`multi\\` - Convert to multi-line style\n\\`\\`\\`js\n/**\n * Some text\n */\n\\`\\`\\`\n- \\`single\\` - Convert to single-line style\n\\`\\`\\`js\n/** Some text */\n\\`\\`\\`\n\nDefaults to \\`multi\\`.`,\n enum: [\n 'multi', 'single',\n ],\n type: 'string',\n },\n lineOrBlockStyle: {\n description: `What style of comments to which to apply JSDoc conversion.\n\n- \\`block\\` - Applies to block-style comments (\\`/* ... */\\`)\n- \\`line\\` - Applies to line-style comments (\\`// ...\\`)\n- \\`both\\` - Applies to both block and line-style comments\n\nDefaults to \\`both\\`.`,\n enum: [\n 'block', 'line', 'both',\n ],\n type: 'string',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n};\n"],"mappings":"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","ignoreList":[]}
|
package/dist/rules/emptyTags.cjs
CHANGED
|
@@ -1,11 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.default = void 0;
|
|
7
|
-
var _iterateJsdoc = _interopRequireDefault(require("../iterateJsdoc.cjs"));
|
|
8
|
-
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
1
|
+
import iterateJsdoc from '../iterateJsdoc.js';
|
|
9
2
|
const defaultEmptyTags = new Set(['abstract', 'async', 'generator', 'global', 'hideconstructor',
|
|
10
3
|
// jsdoc doesn't use this form in its docs, but allow for compatibility with
|
|
11
4
|
// TypeScript which allows and Closure which requires
|
|
@@ -16,7 +9,7 @@ const emptyIfNotClosure = new Set([
|
|
|
16
9
|
// Closure doesn't allow with this casing
|
|
17
10
|
'inheritdoc', 'package', 'private', 'protected', 'public', 'static']);
|
|
18
11
|
const emptyIfClosure = new Set(['interface']);
|
|
19
|
-
|
|
12
|
+
export default iterateJsdoc(({
|
|
20
13
|
jsdoc,
|
|
21
14
|
settings,
|
|
22
15
|
utils
|
|
@@ -94,5 +87,4 @@ add them within this option.
|
|
|
94
87
|
type: 'suggestion'
|
|
95
88
|
}
|
|
96
89
|
});
|
|
97
|
-
module.exports = exports.default;
|
|
98
90
|
//# sourceMappingURL=emptyTags.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"emptyTags.cjs","names":[
|
|
1
|
+
{"version":3,"file":"emptyTags.cjs","names":[],"sources":["../../src/rules/emptyTags.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc.js';\n\nconst defaultEmptyTags = new Set([\n 'abstract', 'async', 'generator', 'global', 'hideconstructor',\n\n // jsdoc doesn't use this form in its docs, but allow for compatibility with\n // TypeScript which allows and Closure which requires\n 'ignore',\n\n // jsdoc doesn't use but allow for TypeScript\n 'inheritDoc', 'inner', 'instance',\n 'internal',\n\n 'overload',\n\n 'override',\n 'readonly',\n]);\n\nconst emptyIfNotClosure = new Set([\n // Closure doesn't allow with this casing\n 'inheritdoc', 'package', 'private', 'protected', 'public',\n\n 'static',\n]);\n\nconst emptyIfClosure = new Set([\n 'interface',\n]);\n\nexport default iterateJsdoc(({\n jsdoc,\n settings,\n utils,\n}) => {\n const emptyTags = utils.filterTags(({\n tag: tagName,\n }) => {\n return defaultEmptyTags.has(tagName) ||\n utils.hasOptionTag(tagName) && jsdoc.tags.some(({\n tag,\n }) => {\n return tag === tagName;\n }) ||\n settings.mode === 'closure' && emptyIfClosure.has(tagName) ||\n settings.mode !== 'closure' && emptyIfNotClosure.has(tagName);\n });\n\n for (const [\n key,\n tag,\n ] of emptyTags.entries()) {\n const content = tag.name || tag.description || tag.type;\n if (content.trim() && (\n // Allow for JSDoc-block final asterisks\n key !== emptyTags.length - 1 || !(/^\\s*\\*+$/v).test(content)\n )) {\n const {\n tokens: {\n delimiter,\n end,\n postName,\n start,\n },\n } = tag.source[0];\n const fix = () => {\n // By time of call in fixer, `tag` will have `line` added\n utils.setTag(\n /**\n * @type {import('comment-parser').Spec & {\n * line: import('../iterateJsdoc.js').Integer\n * }}\n */ (tag),\n {\n delimiter,\n end,\n postName: end ? postName : '',\n start,\n },\n );\n };\n\n utils.reportJSDoc(`@${tag.tag} should be empty.`, tag, fix, true);\n }\n }\n}, {\n checkInternal: true,\n checkPrivate: true,\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Checks tags that are expected to be empty (e.g., `@abstract` or `@async`), reporting if they have content',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/empty-tags.md#repos-sticky-header',\n },\n fixable: 'code',\n schema: [\n {\n additionalProperties: false,\n properties: {\n tags: {\n description: `If you want additional tags to be checked for their descriptions, you may\nadd them within this option.\n\n\\`\\`\\`js\n{\n 'jsdoc/empty-tags': ['error', {tags: ['event']}]\n}\n\\`\\`\\``,\n items: {\n type: 'string',\n },\n type: 'array',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"mappings":"AAAA,OAAO,YAAY,MAAM,oBAAoB;AAE7C,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC,CAC/B,UAAU,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,iBAAiB;AAE7D;AACA;AACA,QAAQ;AAER;AACA,YAAY,EAAE,OAAO,EAAE,UAAU,EACjC,UAAU,EAEV,UAAU,EAEV,UAAU,EACV,UAAU,CACX,CAAC;AAEF,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC;AAChC;AACA,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,QAAQ,EAEzD,QAAQ,CACT,CAAC;AAEF,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,CAC7B,WAAW,CACZ,CAAC;AAEF,eAAe,YAAY,CAAC,CAAC;EAC3B,KAAK;EACL,QAAQ;EACR;AACF,CAAC,KAAK;EACJ,MAAM,SAAS,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC;IAClC,GAAG,EAAE;EACP,CAAC,KAAK;IACJ,OAAO,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC,IAClC,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;MAC9C;IACF,CAAC,KAAK;MACJ,OAAO,GAAG,KAAK,OAAO;IACxB,CAAC,CAAC,IACF,QAAQ,CAAC,IAAI,KAAK,SAAS,IAAI,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,IAC1D,QAAQ,CAAC,IAAI,KAAK,SAAS,IAAI,iBAAiB,CAAC,GAAG,CAAC,OAAO,CAAC;EACjE,CAAC,CAAC;EAEF,KAAK,MAAM,CACT,GAAG,EACH,GAAG,CACJ,IAAI,SAAS,CAAC,OAAO,CAAC,CAAC,EAAE;IACxB,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,WAAW,IAAI,GAAG,CAAC,IAAI;IACvD,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAChB;IACA,GAAG,KAAK,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,CAAE,WAAW,CAAE,IAAI,CAAC,OAAO,CAAC,CAC7D,EAAE;MACD,MAAM;QACJ,MAAM,EAAE;UACN,SAAS;UACT,GAAG;UACH,QAAQ;UACR;QACF;MACF,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;MACjB,MAAM,GAAG,GAAG,MAAM;QAChB;QACA,KAAK,CAAC,MAAM;QACV;AACV;AACA;AACA;AACA;QAAe,GAAG,EACR;UACE,SAAS;UACT,GAAG;UACH,QAAQ,EAAE,GAAG,GAAG,QAAQ,GAAG,EAAE;UAC7B;QACF,CACF,CAAC;MACH,CAAC;MAED,KAAK,CAAC,WAAW,CAAC,IAAI,GAAG,CAAC,GAAG,mBAAmB,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC;IACnE;EACF;AACF,CAAC,EAAE;EACD,aAAa,EAAE,IAAI;EACnB,YAAY,EAAE,IAAI;EAClB,gBAAgB,EAAE,IAAI;EACtB,IAAI,EAAE;IACJ,IAAI,EAAE;MACJ,WAAW,EAAE,2GAA2G;MACxH,GAAG,EAAE;IACP,CAAC;IACD,OAAO,EAAE,MAAM;IACf,MAAM,EAAE,CACN;MACE,oBAAoB,EAAE,KAAK;MAC3B,UAAU,EAAE;QACV,IAAI,EAAE;UACJ,WAAW,EAAE;AACzB;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;UACK,KAAK,EAAE;YACL,IAAI,EAAE;UACR,CAAC;UACD,IAAI,EAAE;QACR;MACF,CAAC;MACD,IAAI,EAAE;IACR,CAAC,CACF;IACD,IAAI,EAAE;EACR;AACF,CAAC,CAAC","ignoreList":[]}
|
|
@@ -1,12 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.default = void 0;
|
|
7
|
-
var _iterateJsdoc = _interopRequireDefault(require("../iterateJsdoc.cjs"));
|
|
8
|
-
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
9
|
-
var _default = exports.default = (0, _iterateJsdoc.default)(({
|
|
1
|
+
import iterateJsdoc from '../iterateJsdoc.js';
|
|
2
|
+
export default iterateJsdoc(({
|
|
10
3
|
context,
|
|
11
4
|
jsdoc,
|
|
12
5
|
settings,
|
|
@@ -207,5 +200,4 @@ Defaults to "backslash".`,
|
|
|
207
200
|
type: 'suggestion'
|
|
208
201
|
}
|
|
209
202
|
});
|
|
210
|
-
module.exports = exports.default;
|
|
211
203
|
//# sourceMappingURL=escapeInlineTags.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"escapeInlineTags.cjs","names":["_iterateJsdoc","_interopRequireDefault","require","e","__esModule","default","_default","exports","iterateJsdoc","context","jsdoc","settings","utils","mode","allowedInlineTags","enableFixer","fixType","options","description","getDescription","tagNames","indexes","unescapedInlineTagRegex","scopedPackageNameRegex","declarationReferenceInlineTags","Set","getInlineTagName","desc","atSignIndex","inlineTagStart","lastIndexOf","inlineTagEnd","indexOf","slice","match","shouldIgnoreMatch","offset","inlineTagName","has","test","escapeInlineTags","tagName","regex","RegExp","replaceAll","prefix","getUnescapedInlineTagName","lastIndex","exec","fullMatch","includes","index","normalizedDescription","startsWith","nextLineStartOffset","idx","descLine","split","entries","lineStartOffset","length","push","reportJSDoc","line","escapeInlineTag","setBlockDescription","info","seedTokens","descLines","map","newDesc","number","source","tokens","postDelimiter","trim","tag","tags","getTagDescription","some","setTagDescription","iterateAllJsdocs","meta","docs","url","fixable","schema","additionalProperties","properties","items","type","enum","module"],"sources":["../../src/rules/escapeInlineTags.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc.js';\n\nexport default iterateJsdoc(({\n context,\n jsdoc,\n settings,\n utils,\n}) => {\n const {\n mode,\n } = settings;\n\n if (mode !== 'typescript') {\n return;\n }\n\n const {\n allowedInlineTags = [],\n enableFixer = false,\n fixType = 'backslash',\n } = context.options[0] || {};\n\n const {\n description,\n } = utils.getDescription();\n\n /** @type {string[]} */\n const tagNames = [];\n\n /** @type {number[]} */\n const indexes = [];\n\n const unescapedInlineTagRegex = /(?:^|\\s)@(\\w+)/gv;\n\n const scopedPackageNameRegex = /^@[\\w.\\-]+\\/[\\w.\\-]+/v;\n\n const declarationReferenceInlineTags = new Set([\n 'inheritDoc',\n 'link',\n 'linkcode',\n 'linkplain',\n ]);\n\n /**\n * @param {string} desc\n * @param {number} atSignIndex\n * @returns {string}\n */\n const getInlineTagName = (desc, atSignIndex) => {\n const inlineTagStart = desc.lastIndexOf('{@', atSignIndex);\n\n if (inlineTagStart === -1) {\n return '';\n }\n\n const inlineTagEnd = desc.indexOf('}', inlineTagStart);\n\n if (inlineTagEnd === -1 || inlineTagEnd <= atSignIndex) {\n return '';\n }\n\n return desc.slice(inlineTagStart + 2).match(/^\\w+/v)?.[0] || '';\n };\n\n /**\n * @param {string} desc\n * @param {string} match\n * @param {number} offset\n * @returns {boolean}\n */\n const shouldIgnoreMatch = (desc, match, offset) => {\n const atSignIndex = offset + match.lastIndexOf('@');\n const inlineTagName = getInlineTagName(desc, atSignIndex);\n\n return declarationReferenceInlineTags.has(inlineTagName) &&\n scopedPackageNameRegex.test(desc.slice(atSignIndex));\n };\n\n /**\n * @param {string} tagName\n * @returns {[\n * RegExp,\n * (description: string) => string\n * ]}\n */\n const escapeInlineTags = (tagName) => {\n const regex = new RegExp(`(^|\\\\s)@${\n // No need to escape, as contains only safe characters\n tagName\n }`, 'gv');\n\n return [\n regex,\n /**\n * @param {string} desc\n */\n (desc) => {\n return desc.replaceAll(\n regex,\n (match, prefix, offset) => {\n if (shouldIgnoreMatch(desc, match, offset)) {\n return match;\n }\n\n return fixType === 'backticks' ?\n prefix + '`@' + tagName + '`' :\n prefix + '\\\\@' + tagName;\n },\n );\n },\n ];\n };\n\n /**\n * @param {string} desc\n * @returns {string}\n */\n const getUnescapedInlineTagName = (desc) => {\n unescapedInlineTagRegex.lastIndex = 0;\n\n let match;\n while ((match = unescapedInlineTagRegex.exec(desc)) !== null) {\n const [\n fullMatch,\n tagName,\n ] = match;\n\n if (\n allowedInlineTags.includes(tagName) ||\n shouldIgnoreMatch(desc, fullMatch, match.index)\n ) {\n continue;\n }\n\n return tagName;\n }\n\n return '';\n };\n\n const normalizedDescription = description.startsWith('\\n') ?\n description.slice(1) :\n description;\n\n let nextLineStartOffset = 0;\n for (const [\n idx,\n descLine,\n ] of normalizedDescription.split('\\n').entries()\n ) {\n const lineStartOffset = nextLineStartOffset;\n\n // +1 for the `\\n` removed by split.\n nextLineStartOffset += descLine.length + 1;\n\n descLine.replaceAll(unescapedInlineTagRegex, (match, tagName, offset) => {\n if (\n allowedInlineTags.includes(tagName) ||\n // Run ignore-detection against the full description text so that\n // multi-line inline tags (e.g. `{@link` on one line and\n // `@scope/pkg#Member}` on the next) are recognized as being inside an\n // inline tag rather than scanned per-line.\n shouldIgnoreMatch(\n normalizedDescription,\n match,\n lineStartOffset + offset,\n )\n ) {\n return match;\n }\n\n tagNames.push(tagName);\n indexes.push(idx);\n\n return match;\n });\n }\n\n for (const [\n idx,\n tagName,\n ] of tagNames.entries()) {\n utils.reportJSDoc(\n `Unexpected inline JSDoc tag. Did you mean to use {@${tagName}}, \\\\@${tagName}, or \\`@${tagName}\\`?`,\n {\n line: indexes[idx] + 1,\n },\n enableFixer ?\n () => {\n // `tagName` and `fixType` are constant here, so compute the escaper\n // once rather than rebuilding the RegExp + closure for every line.\n const [\n ,\n escapeInlineTag,\n ] = escapeInlineTags(tagName);\n\n utils.setBlockDescription((info, seedTokens, descLines) => {\n return descLines.map((desc) => {\n const newDesc = escapeInlineTag(desc);\n\n return {\n number: 0,\n source: '',\n tokens: seedTokens({\n ...info,\n description: newDesc,\n postDelimiter: newDesc.trim() ? ' ' : '',\n }),\n };\n });\n });\n } :\n null,\n );\n }\n\n for (const tag of jsdoc.tags) {\n if (tag.tag === 'example') {\n continue;\n }\n\n /** @type {string} */\n let tagName = '';\n while (/** @type {string[]} */ (\n utils.getTagDescription(tag, true)\n // eslint-disable-next-line no-loop-func -- Safe\n ).some((desc) => {\n tagName = getUnescapedInlineTagName(desc);\n\n return tagName;\n })) {\n const line = utils.setTagDescription(tag, ...escapeInlineTags(tagName)) +\n tag.source[0].number;\n utils.reportJSDoc(\n `Unexpected inline JSDoc tag. Did you mean to use {@${tagName}}, \\\\@${tagName}, or \\`@${tagName}\\`?`,\n {\n line,\n },\n enableFixer ? () => {} : null,\n true,\n );\n }\n }\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Reports use of JSDoc tags in non-tag positions (in the default \"typescript\" mode).',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/escape-inline-tags.md#repos-sticky-header',\n },\n fixable: 'code',\n schema: [\n {\n additionalProperties: false,\n properties: {\n allowedInlineTags: {\n description: 'A listing of tags you wish to allow unescaped. Defaults to an empty array.',\n items: {\n type: 'string',\n },\n type: 'array',\n },\n enableFixer: {\n description: 'Whether to enable the fixer. Defaults to `false`.',\n type: 'boolean',\n },\n fixType: {\n description: `How to escape the inline tag.\n\nMay be \"backticks\" to enclose tags in backticks (treating as code segments), or\n\"backslash\" to escape tags with a backslash, i.e., \\`\\\\@\\`\n\nDefaults to \"backslash\".`,\n enum: [\n 'backticks',\n 'backslash',\n ],\n type: 'string',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"mappings":";;;;;;AAAA,IAAAA,aAAA,GAAAC,sBAAA,CAAAC,OAAA;AAA8C,SAAAD,uBAAAE,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAAA,IAAAG,QAAA,GAAAC,OAAA,CAAAF,OAAA,GAE/B,IAAAG,qBAAY,EAAC,CAAC;EAC3BC,OAAO;EACPC,KAAK;EACLC,QAAQ;EACRC;AACF,CAAC,KAAK;EACJ,MAAM;IACJC;EACF,CAAC,GAAGF,QAAQ;EAEZ,IAAIE,IAAI,KAAK,YAAY,EAAE;IACzB;EACF;EAEA,MAAM;IACJC,iBAAiB,GAAG,EAAE;IACtBC,WAAW,GAAG,KAAK;IACnBC,OAAO,GAAG;EACZ,CAAC,GAAGP,OAAO,CAACQ,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;EAE5B,MAAM;IACJC;EACF,CAAC,GAAGN,KAAK,CAACO,cAAc,CAAC,CAAC;;EAE1B;EACA,MAAMC,QAAQ,GAAG,EAAE;;EAEnB;EACA,MAAMC,OAAO,GAAG,EAAE;EAElB,MAAMC,uBAAuB,GAAG,kBAAkB;EAElD,MAAMC,sBAAsB,GAAG,uBAAuB;EAEtD,MAAMC,8BAA8B,GAAG,IAAIC,GAAG,CAAC,CAC7C,YAAY,EACZ,MAAM,EACN,UAAU,EACV,WAAW,CACZ,CAAC;;EAEF;AACF;AACA;AACA;AACA;EACE,MAAMC,gBAAgB,GAAGA,CAACC,IAAI,EAAEC,WAAW,KAAK;IAC9C,MAAMC,cAAc,GAAGF,IAAI,CAACG,WAAW,CAAC,IAAI,EAAEF,WAAW,CAAC;IAE1D,IAAIC,cAAc,KAAK,CAAC,CAAC,EAAE;MACzB,OAAO,EAAE;IACX;IAEA,MAAME,YAAY,GAAGJ,IAAI,CAACK,OAAO,CAAC,GAAG,EAAEH,cAAc,CAAC;IAEtD,IAAIE,YAAY,KAAK,CAAC,CAAC,IAAIA,YAAY,IAAIH,WAAW,EAAE;MACtD,OAAO,EAAE;IACX;IAEA,OAAOD,IAAI,CAACM,KAAK,CAACJ,cAAc,GAAG,CAAC,CAAC,CAACK,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE;EACjE,CAAC;;EAED;AACF;AACA;AACA;AACA;AACA;EACE,MAAMC,iBAAiB,GAAGA,CAACR,IAAI,EAAEO,KAAK,EAAEE,MAAM,KAAK;IACjD,MAAMR,WAAW,GAAGQ,MAAM,GAAGF,KAAK,CAACJ,WAAW,CAAC,GAAG,CAAC;IACnD,MAAMO,aAAa,GAAGX,gBAAgB,CAACC,IAAI,EAAEC,WAAW,CAAC;IAEzD,OAAOJ,8BAA8B,CAACc,GAAG,CAACD,aAAa,CAAC,IACtDd,sBAAsB,CAACgB,IAAI,CAACZ,IAAI,CAACM,KAAK,CAACL,WAAW,CAAC,CAAC;EACxD,CAAC;;EAED;AACF;AACA;AACA;AACA;AACA;AACA;EACE,MAAMY,gBAAgB,GAAIC,OAAO,IAAK;IACpC,MAAMC,KAAK,GAAG,IAAIC,MAAM,CAAC;IACvB;IACAF,OAAO,EACP,EAAE,IAAI,CAAC;IAET,OAAO,CACLC,KAAK;IACL;AACN;AACA;IACOf,IAAI,IAAK;MACR,OAAOA,IAAI,CAACiB,UAAU,CACpBF,KAAK,EACL,CAACR,KAAK,EAAEW,MAAM,EAAET,MAAM,KAAK;QACzB,IAAID,iBAAiB,CAACR,IAAI,EAAEO,KAAK,EAAEE,MAAM,CAAC,EAAE;UAC1C,OAAOF,KAAK;QACd;QAEA,OAAOlB,OAAO,KAAK,WAAW,GAC5B6B,MAAM,GAAG,IAAI,GAAGJ,OAAO,GAAG,GAAG,GAC7BI,MAAM,GAAG,KAAK,GAAGJ,OAAO;MAC5B,CACF,CAAC;IACH,CAAC,CACF;EACH,CAAC;;EAED;AACF;AACA;AACA;EACE,MAAMK,yBAAyB,GAAInB,IAAI,IAAK;IAC1CL,uBAAuB,CAACyB,SAAS,GAAG,CAAC;IAErC,IAAIb,KAAK;IACT,OAAO,CAACA,KAAK,GAAGZ,uBAAuB,CAAC0B,IAAI,CAACrB,IAAI,CAAC,MAAM,IAAI,EAAE;MAC5D,MAAM,CACJsB,SAAS,EACTR,OAAO,CACR,GAAGP,KAAK;MAET,IACEpB,iBAAiB,CAACoC,QAAQ,CAACT,OAAO,CAAC,IACnCN,iBAAiB,CAACR,IAAI,EAAEsB,SAAS,EAAEf,KAAK,CAACiB,KAAK,CAAC,EAC/C;QACA;MACF;MAEA,OAAOV,OAAO;IAChB;IAEA,OAAO,EAAE;EACX,CAAC;EAED,MAAMW,qBAAqB,GAAGlC,WAAW,CAACmC,UAAU,CAAC,IAAI,CAAC,GACxDnC,WAAW,CAACe,KAAK,CAAC,CAAC,CAAC,GACpBf,WAAW;EAEb,IAAIoC,mBAAmB,GAAG,CAAC;EAC3B,KAAK,MAAM,CACTC,GAAG,EACHC,QAAQ,CACT,IAAIJ,qBAAqB,CAACK,KAAK,CAAC,IAAI,CAAC,CAACC,OAAO,CAAC,CAAC,EAC9C;IACA,MAAMC,eAAe,GAAGL,mBAAmB;;IAE3C;IACAA,mBAAmB,IAAIE,QAAQ,CAACI,MAAM,GAAG,CAAC;IAE1CJ,QAAQ,CAACZ,UAAU,CAACtB,uBAAuB,EAAE,CAACY,KAAK,EAAEO,OAAO,EAAEL,MAAM,KAAK;MACvE,IACEtB,iBAAiB,CAACoC,QAAQ,CAACT,OAAO,CAAC;MACnC;MACA;MACA;MACA;MACAN,iBAAiB,CACfiB,qBAAqB,EACrBlB,KAAK,EACLyB,eAAe,GAAGvB,MACpB,CAAC,EACD;QACA,OAAOF,KAAK;MACd;MAEAd,QAAQ,CAACyC,IAAI,CAACpB,OAAO,CAAC;MACtBpB,OAAO,CAACwC,IAAI,CAACN,GAAG,CAAC;MAEjB,OAAOrB,KAAK;IACd,CAAC,CAAC;EACJ;EAEA,KAAK,MAAM,CACTqB,GAAG,EACHd,OAAO,CACR,IAAIrB,QAAQ,CAACsC,OAAO,CAAC,CAAC,EAAE;IACvB9C,KAAK,CAACkD,WAAW,CACf,sDAAsDrB,OAAO,SAASA,OAAO,WAAWA,OAAO,KAAK,EACpG;MACEsB,IAAI,EAAE1C,OAAO,CAACkC,GAAG,CAAC,GAAG;IACvB,CAAC,EACDxC,WAAW,GACT,MAAM;MACJ;MACA;MACA,MAAM,GAEJiD,eAAe,CAChB,GAAGxB,gBAAgB,CAACC,OAAO,CAAC;MAE7B7B,KAAK,CAACqD,mBAAmB,CAAC,CAACC,IAAI,EAAEC,UAAU,EAAEC,SAAS,KAAK;QACzD,OAAOA,SAAS,CAACC,GAAG,CAAE1C,IAAI,IAAK;UAC7B,MAAM2C,OAAO,GAAGN,eAAe,CAACrC,IAAI,CAAC;UAErC,OAAO;YACL4C,MAAM,EAAE,CAAC;YACTC,MAAM,EAAE,EAAE;YACVC,MAAM,EAAEN,UAAU,CAAC;cACjB,GAAGD,IAAI;cACPhD,WAAW,EAAEoD,OAAO;cACpBI,aAAa,EAAEJ,OAAO,CAACK,IAAI,CAAC,CAAC,GAAG,GAAG,GAAG;YACxC,CAAC;UACH,CAAC;QACH,CAAC,CAAC;MACJ,CAAC,CAAC;IACJ,CAAC,GACD,IACJ,CAAC;EACH;EAEA,KAAK,MAAMC,GAAG,IAAIlE,KAAK,CAACmE,IAAI,EAAE;IAC5B,IAAID,GAAG,CAACA,GAAG,KAAK,SAAS,EAAE;MACzB;IACF;;IAEA;IACA,IAAInC,OAAO,GAAG,EAAE;IAChB,OAAO,uBACL7B,KAAK,CAACkE,iBAAiB,CAACF,GAAG,EAAE,IAAI;IACnC;IAAA,CACEG,IAAI,CAAEpD,IAAI,IAAK;MACfc,OAAO,GAAGK,yBAAyB,CAACnB,IAAI,CAAC;MAEzC,OAAOc,OAAO;IAChB,CAAC,CAAC,EAAE;MACF,MAAMsB,IAAI,GAAGnD,KAAK,CAACoE,iBAAiB,CAACJ,GAAG,EAAE,GAAGpC,gBAAgB,CAACC,OAAO,CAAC,CAAC,GACnEmC,GAAG,CAACJ,MAAM,CAAC,CAAC,CAAC,CAACD,MAAM;MACxB3D,KAAK,CAACkD,WAAW,CACf,sDAAsDrB,OAAO,SAASA,OAAO,WAAWA,OAAO,KAAK,EACpG;QACEsB;MACF,CAAC,EACDhD,WAAW,GAAG,MAAM,CAAC,CAAC,GAAG,IAAI,EAC7B,IACF,CAAC;IACH;EACF;AACF,CAAC,EAAE;EACDkE,gBAAgB,EAAE,IAAI;EACtBC,IAAI,EAAE;IACJC,IAAI,EAAE;MACJjE,WAAW,EAAE,oFAAoF;MACjGkE,GAAG,EAAE;IACP,CAAC;IACDC,OAAO,EAAE,MAAM;IACfC,MAAM,EAAE,CACN;MACEC,oBAAoB,EAAE,KAAK;MAC3BC,UAAU,EAAE;QACV1E,iBAAiB,EAAE;UACjBI,WAAW,EAAE,4EAA4E;UACzFuE,KAAK,EAAE;YACLC,IAAI,EAAE;UACR,CAAC;UACDA,IAAI,EAAE;QACR,CAAC;QACD3E,WAAW,EAAE;UACXG,WAAW,EAAE,mDAAmD;UAChEwE,IAAI,EAAE;QACR,CAAC;QACD1E,OAAO,EAAE;UACPE,WAAW,EAAE;AACzB;AACA;AACA;AACA;AACA,yBAAyB;UACbyE,IAAI,EAAE,CACJ,WAAW,EACX,WAAW,CACZ;UACDD,IAAI,EAAE;QACR;MACF,CAAC;MACDA,IAAI,EAAE;IACR,CAAC,CACF;IACDA,IAAI,EAAE;EACR;AACF,CAAC,CAAC;AAAAE,MAAA,CAAArF,OAAA,GAAAA,OAAA,CAAAF,OAAA","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"escapeInlineTags.cjs","names":[],"sources":["../../src/rules/escapeInlineTags.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc.js';\n\nexport default iterateJsdoc(({\n context,\n jsdoc,\n settings,\n utils,\n}) => {\n const {\n mode,\n } = settings;\n\n if (mode !== 'typescript') {\n return;\n }\n\n const {\n allowedInlineTags = [],\n enableFixer = false,\n fixType = 'backslash',\n } = context.options[0] || {};\n\n const {\n description,\n } = utils.getDescription();\n\n /** @type {string[]} */\n const tagNames = [];\n\n /** @type {number[]} */\n const indexes = [];\n\n const unescapedInlineTagRegex = /(?:^|\\s)@(\\w+)/gv;\n\n const scopedPackageNameRegex = /^@[\\w.\\-]+\\/[\\w.\\-]+/v;\n\n const declarationReferenceInlineTags = new Set([\n 'inheritDoc',\n 'link',\n 'linkcode',\n 'linkplain',\n ]);\n\n /**\n * @param {string} desc\n * @param {number} atSignIndex\n * @returns {string}\n */\n const getInlineTagName = (desc, atSignIndex) => {\n const inlineTagStart = desc.lastIndexOf('{@', atSignIndex);\n\n if (inlineTagStart === -1) {\n return '';\n }\n\n const inlineTagEnd = desc.indexOf('}', inlineTagStart);\n\n if (inlineTagEnd === -1 || inlineTagEnd <= atSignIndex) {\n return '';\n }\n\n return desc.slice(inlineTagStart + 2).match(/^\\w+/v)?.[0] || '';\n };\n\n /**\n * @param {string} desc\n * @param {string} match\n * @param {number} offset\n * @returns {boolean}\n */\n const shouldIgnoreMatch = (desc, match, offset) => {\n const atSignIndex = offset + match.lastIndexOf('@');\n const inlineTagName = getInlineTagName(desc, atSignIndex);\n\n return declarationReferenceInlineTags.has(inlineTagName) &&\n scopedPackageNameRegex.test(desc.slice(atSignIndex));\n };\n\n /**\n * @param {string} tagName\n * @returns {[\n * RegExp,\n * (description: string) => string\n * ]}\n */\n const escapeInlineTags = (tagName) => {\n const regex = new RegExp(`(^|\\\\s)@${\n // No need to escape, as contains only safe characters\n tagName\n }`, 'gv');\n\n return [\n regex,\n /**\n * @param {string} desc\n */\n (desc) => {\n return desc.replaceAll(\n regex,\n (match, prefix, offset) => {\n if (shouldIgnoreMatch(desc, match, offset)) {\n return match;\n }\n\n return fixType === 'backticks' ?\n prefix + '`@' + tagName + '`' :\n prefix + '\\\\@' + tagName;\n },\n );\n },\n ];\n };\n\n /**\n * @param {string} desc\n * @returns {string}\n */\n const getUnescapedInlineTagName = (desc) => {\n unescapedInlineTagRegex.lastIndex = 0;\n\n let match;\n while ((match = unescapedInlineTagRegex.exec(desc)) !== null) {\n const [\n fullMatch,\n tagName,\n ] = match;\n\n if (\n allowedInlineTags.includes(tagName) ||\n shouldIgnoreMatch(desc, fullMatch, match.index)\n ) {\n continue;\n }\n\n return tagName;\n }\n\n return '';\n };\n\n const normalizedDescription = description.startsWith('\\n') ?\n description.slice(1) :\n description;\n\n let nextLineStartOffset = 0;\n for (const [\n idx,\n descLine,\n ] of normalizedDescription.split('\\n').entries()\n ) {\n const lineStartOffset = nextLineStartOffset;\n\n // +1 for the `\\n` removed by split.\n nextLineStartOffset += descLine.length + 1;\n\n descLine.replaceAll(unescapedInlineTagRegex, (match, tagName, offset) => {\n if (\n allowedInlineTags.includes(tagName) ||\n // Run ignore-detection against the full description text so that\n // multi-line inline tags (e.g. `{@link` on one line and\n // `@scope/pkg#Member}` on the next) are recognized as being inside an\n // inline tag rather than scanned per-line.\n shouldIgnoreMatch(\n normalizedDescription,\n match,\n lineStartOffset + offset,\n )\n ) {\n return match;\n }\n\n tagNames.push(tagName);\n indexes.push(idx);\n\n return match;\n });\n }\n\n for (const [\n idx,\n tagName,\n ] of tagNames.entries()) {\n utils.reportJSDoc(\n `Unexpected inline JSDoc tag. Did you mean to use {@${tagName}}, \\\\@${tagName}, or \\`@${tagName}\\`?`,\n {\n line: indexes[idx] + 1,\n },\n enableFixer ?\n () => {\n // `tagName` and `fixType` are constant here, so compute the escaper\n // once rather than rebuilding the RegExp + closure for every line.\n const [\n ,\n escapeInlineTag,\n ] = escapeInlineTags(tagName);\n\n utils.setBlockDescription((info, seedTokens, descLines) => {\n return descLines.map((desc) => {\n const newDesc = escapeInlineTag(desc);\n\n return {\n number: 0,\n source: '',\n tokens: seedTokens({\n ...info,\n description: newDesc,\n postDelimiter: newDesc.trim() ? ' ' : '',\n }),\n };\n });\n });\n } :\n null,\n );\n }\n\n for (const tag of jsdoc.tags) {\n if (tag.tag === 'example') {\n continue;\n }\n\n /** @type {string} */\n let tagName = '';\n while (/** @type {string[]} */ (\n utils.getTagDescription(tag, true)\n // eslint-disable-next-line no-loop-func -- Safe\n ).some((desc) => {\n tagName = getUnescapedInlineTagName(desc);\n\n return tagName;\n })) {\n const line = utils.setTagDescription(tag, ...escapeInlineTags(tagName)) +\n tag.source[0].number;\n utils.reportJSDoc(\n `Unexpected inline JSDoc tag. Did you mean to use {@${tagName}}, \\\\@${tagName}, or \\`@${tagName}\\`?`,\n {\n line,\n },\n enableFixer ? () => {} : null,\n true,\n );\n }\n }\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Reports use of JSDoc tags in non-tag positions (in the default \"typescript\" mode).',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/escape-inline-tags.md#repos-sticky-header',\n },\n fixable: 'code',\n schema: [\n {\n additionalProperties: false,\n properties: {\n allowedInlineTags: {\n description: 'A listing of tags you wish to allow unescaped. Defaults to an empty array.',\n items: {\n type: 'string',\n },\n type: 'array',\n },\n enableFixer: {\n description: 'Whether to enable the fixer. Defaults to `false`.',\n type: 'boolean',\n },\n fixType: {\n description: `How to escape the inline tag.\n\nMay be \"backticks\" to enclose tags in backticks (treating as code segments), or\n\"backslash\" to escape tags with a backslash, i.e., \\`\\\\@\\`\n\nDefaults to \"backslash\".`,\n enum: [\n 'backticks',\n 'backslash',\n ],\n type: 'string',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,12 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.default = void 0;
|
|
7
|
-
var _iterateJsdoc = _interopRequireDefault(require("../iterateJsdoc.cjs"));
|
|
8
|
-
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
9
|
-
var _default = exports.default = (0, _iterateJsdoc.default)(({
|
|
1
|
+
import iterateJsdoc from '../iterateJsdoc.js';
|
|
2
|
+
export default iterateJsdoc(({
|
|
10
3
|
report,
|
|
11
4
|
utils
|
|
12
5
|
}) => {
|
|
@@ -70,5 +63,4 @@ section of our Advanced docs for more on the expected format.`,
|
|
|
70
63
|
type: 'suggestion'
|
|
71
64
|
}
|
|
72
65
|
});
|
|
73
|
-
module.exports = exports.default;
|
|
74
66
|
//# sourceMappingURL=implementsOnClasses.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"implementsOnClasses.cjs","names":[
|
|
1
|
+
{"version":3,"file":"implementsOnClasses.cjs","names":[],"sources":["../../src/rules/implementsOnClasses.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc.js';\n\nexport default iterateJsdoc(({\n report,\n utils,\n}) => {\n const iteratingFunction = utils.isIteratingFunctionOrVariable();\n\n if (iteratingFunction) {\n if (utils.hasATag([\n 'class',\n 'constructor',\n ]) ||\n utils.isConstructor()\n ) {\n return;\n }\n } else if (!utils.isVirtualFunction()) {\n return;\n }\n\n utils.forEachPreferredTag('implements', (tag) => {\n report('@implements used on a non-constructor function', null, tag);\n });\n}, {\n contextDefaults: true,\n meta: {\n docs: {\n description: 'Prohibits use of `@implements` on non-constructor functions (to enforce the tag only being used on classes/constructors).',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/implements-on-classes.md#repos-sticky-header',\n },\n schema: [\n {\n additionalProperties: false,\n properties: {\n contexts: {\n description: `Set this to an array of strings representing the AST context (or an object with\n\\`context\\` and \\`comment\\` properties) where you wish the rule to be applied.\n\n\\`context\\` defaults to \\`any\\` and \\`comment\\` defaults to no specific comment context.\n\nOverrides the default contexts (\\`ArrowFunctionExpression\\`, \\`FunctionDeclaration\\`,\n\\`FunctionExpression\\`). Set to \\`\"any\"\\` if you want\nthe rule to apply to any JSDoc block throughout your files (as is necessary\nfor finding function blocks not attached to a function declaration or\nexpression, i.e., \\`@callback\\` or \\`@function\\` (or its aliases \\`@func\\` or\n\\`@method\\`) (including those associated with an \\`@interface\\`).\n\nSee the [\"AST and Selectors\"](../advanced.md#ast-and-selectors)\nsection of our Advanced docs for more on the expected format.`,\n items: {\n anyOf: [\n {\n type: 'string',\n },\n {\n additionalProperties: false,\n properties: {\n comment: {\n type: 'string',\n },\n context: {\n type: 'string',\n },\n },\n type: 'object',\n },\n ],\n },\n type: 'array',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"mappings":"AAAA,OAAO,YAAY,MAAM,oBAAoB;AAE7C,eAAe,YAAY,CAAC,CAAC;EAC3B,MAAM;EACN;AACF,CAAC,KAAK;EACJ,MAAM,iBAAiB,GAAG,KAAK,CAAC,6BAA6B,CAAC,CAAC;EAE/D,IAAI,iBAAiB,EAAE;IACrB,IAAI,KAAK,CAAC,OAAO,CAAC,CAChB,OAAO,EACP,aAAa,CACd,CAAC,IACA,KAAK,CAAC,aAAa,CAAC,CAAC,EACrB;MACA;IACF;EACF,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,EAAE;IACrC;EACF;EAEA,KAAK,CAAC,mBAAmB,CAAC,YAAY,EAAG,GAAG,IAAK;IAC/C,MAAM,CAAC,gDAAgD,EAAE,IAAI,EAAE,GAAG,CAAC;EACrE,CAAC,CAAC;AACJ,CAAC,EAAE;EACD,eAAe,EAAE,IAAI;EACrB,IAAI,EAAE;IACJ,IAAI,EAAE;MACJ,WAAW,EAAE,2HAA2H;MACxI,GAAG,EAAE;IACP,CAAC;IACD,MAAM,EAAE,CACN;MACE,oBAAoB,EAAE,KAAK;MAC3B,UAAU,EAAE;QACV,QAAQ,EAAE;UACR,WAAW,EAAE;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8DAA8D;UAClD,KAAK,EAAE;YACL,KAAK,EAAE,CACL;cACE,IAAI,EAAE;YACR,CAAC,EACD;cACE,oBAAoB,EAAE,KAAK;cAC3B,UAAU,EAAE;gBACV,OAAO,EAAE;kBACP,IAAI,EAAE;gBACR,CAAC;gBACD,OAAO,EAAE;kBACP,IAAI,EAAE;gBACR;cACF,CAAC;cACD,IAAI,EAAE;YACR,CAAC;UAEL,CAAC;UACD,IAAI,EAAE;QACR;MACF,CAAC;MACD,IAAI,EAAE;IACR,CAAC,CACF;IACD,IAAI,EAAE;EACR;AACF,CAAC,CAAC","ignoreList":[]}
|