eslint-plugin-jsdoc 36.1.0 → 37.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +37 -16
- package/dist/alignTransform.js +3 -1
- package/dist/alignTransform.js.map +1 -1
- package/dist/bin/generateRule.js.map +1 -1
- package/dist/exportParser.js +29 -17
- package/dist/exportParser.js.map +1 -1
- package/dist/generateRule.js.map +1 -1
- package/dist/iterateJsdoc.js +43 -35
- package/dist/iterateJsdoc.js.map +1 -1
- package/dist/jsdocUtils.js +26 -13
- package/dist/jsdocUtils.js.map +1 -1
- package/dist/rules/checkAccess.js.map +1 -1
- package/dist/rules/checkExamples.js +19 -7
- package/dist/rules/checkExamples.js.map +1 -1
- package/dist/rules/checkIndentation.js +2 -2
- package/dist/rules/checkIndentation.js.map +1 -1
- package/dist/rules/checkLineAlignment.js +6 -4
- package/dist/rules/checkLineAlignment.js.map +1 -1
- package/dist/rules/checkParamNames.js +17 -12
- package/dist/rules/checkParamNames.js.map +1 -1
- package/dist/rules/checkPropertyNames.js.map +1 -1
- package/dist/rules/checkTagNames.js +4 -4
- package/dist/rules/checkTagNames.js.map +1 -1
- package/dist/rules/checkTypes.js +9 -7
- package/dist/rules/checkTypes.js.map +1 -1
- package/dist/rules/checkValues.js.map +1 -1
- package/dist/rules/emptyTags.js +3 -2
- package/dist/rules/emptyTags.js.map +1 -1
- package/dist/rules/matchDescription.js +1 -1
- package/dist/rules/matchDescription.js.map +1 -1
- package/dist/rules/matchName.js +6 -4
- package/dist/rules/matchName.js.map +1 -1
- package/dist/rules/multilineBlocks.js +4 -2
- package/dist/rules/multilineBlocks.js.map +1 -1
- package/dist/rules/newlineAfterDescription.js +1 -1
- package/dist/rules/newlineAfterDescription.js.map +1 -1
- package/dist/rules/noBadBlocks.js +3 -3
- package/dist/rules/noBadBlocks.js.map +1 -1
- package/dist/rules/noDefaults.js +9 -6
- package/dist/rules/noDefaults.js.map +1 -1
- package/dist/rules/noMissingSyntax.js.map +1 -1
- package/dist/rules/noMultiAsterisks.js +1 -1
- package/dist/rules/noMultiAsterisks.js.map +1 -1
- package/dist/rules/noRestrictedSyntax.js.map +1 -1
- package/dist/rules/noTypes.js +6 -3
- package/dist/rules/noTypes.js.map +1 -1
- package/dist/rules/noUndefinedTypes.js +5 -4
- package/dist/rules/noUndefinedTypes.js.map +1 -1
- package/dist/rules/requireAsteriskPrefix.js.map +1 -1
- package/dist/rules/requireDescription.js +2 -2
- package/dist/rules/requireDescription.js.map +1 -1
- package/dist/rules/requireDescriptionCompleteSentence.js +4 -3
- package/dist/rules/requireDescriptionCompleteSentence.js.map +1 -1
- package/dist/rules/requireExample.js +2 -2
- package/dist/rules/requireExample.js.map +1 -1
- package/dist/rules/requireFileOverview.js.map +1 -1
- package/dist/rules/requireHyphenBeforeParamDescription.js +10 -7
- package/dist/rules/requireHyphenBeforeParamDescription.js.map +1 -1
- package/dist/rules/requireJsdoc.js +10 -6
- package/dist/rules/requireJsdoc.js.map +1 -1
- package/dist/rules/requireParam.js +34 -28
- package/dist/rules/requireParam.js.map +1 -1
- package/dist/rules/requireProperty.js +3 -3
- package/dist/rules/requireProperty.js.map +1 -1
- package/dist/rules/requireReturns.js.map +1 -1
- package/dist/rules/requireReturnsCheck.js.map +1 -1
- package/dist/rules/tagLines.js +11 -8
- package/dist/rules/tagLines.js.map +1 -1
- package/dist/rules/validTypes.js +15 -13
- package/dist/rules/validTypes.js.map +1 -1
- package/dist/tagNames.js +1 -1
- package/package.json +52 -49
package/dist/rules/checkTypes.js
CHANGED
|
@@ -122,14 +122,14 @@ var _default = (0, _iterateJsdoc.default)(({
|
|
|
122
122
|
return [hasMatchingPreferredType, typeName, isGenericMatch];
|
|
123
123
|
};
|
|
124
124
|
|
|
125
|
-
|
|
125
|
+
for (const jsdocTag of jsdocTagsWithPossibleType) {
|
|
126
126
|
const invalidTypes = [];
|
|
127
127
|
let typeAst;
|
|
128
128
|
|
|
129
129
|
try {
|
|
130
130
|
typeAst = mode === 'permissive' ? (0, _jsdocTypePrattParser.tryParse)(jsdocTag.type) : (0, _jsdocTypePrattParser.parse)(jsdocTag.type, mode);
|
|
131
131
|
} catch {
|
|
132
|
-
|
|
132
|
+
continue;
|
|
133
133
|
}
|
|
134
134
|
|
|
135
135
|
const tagName = jsdocTag.tag;
|
|
@@ -177,7 +177,8 @@ var _default = (0, _iterateJsdoc.default)(({
|
|
|
177
177
|
continue;
|
|
178
178
|
}
|
|
179
179
|
|
|
180
|
-
if (strictNativeType.toLowerCase() === nodeName.toLowerCase() && strictNativeType !== nodeName && (
|
|
180
|
+
if (strictNativeType.toLowerCase() === nodeName.toLowerCase() && strictNativeType !== nodeName && ( // Don't report if user has own map for a strict native type
|
|
181
|
+
!preferredTypes || (preferredTypes === null || preferredTypes === void 0 ? void 0 : preferredTypes[strictNativeType]) === undefined)) {
|
|
181
182
|
preferred = strictNativeType;
|
|
182
183
|
invalidTypes.push([nodeName, preferred]);
|
|
183
184
|
break;
|
|
@@ -193,7 +194,8 @@ var _default = (0, _iterateJsdoc.default)(({
|
|
|
193
194
|
|
|
194
195
|
if (invalidTypes.length) {
|
|
195
196
|
const fixedType = (0, _jsdocTypePrattParser.stringify)(typeAst);
|
|
196
|
-
|
|
197
|
+
|
|
198
|
+
for (const [badType, preferredType = '', message] of invalidTypes) {
|
|
197
199
|
const fix = fixer => {
|
|
198
200
|
return fixer.replaceText(jsdocNode, sourceCode.getText(jsdocNode).replace(`{${jsdocTag.type}}`, `{${fixedType}}`));
|
|
199
201
|
};
|
|
@@ -206,16 +208,16 @@ var _default = (0, _iterateJsdoc.default)(({
|
|
|
206
208
|
}) => {
|
|
207
209
|
return tag === tagName && (types === true || types.includes(jsdocTag.type));
|
|
208
210
|
})) {
|
|
209
|
-
|
|
211
|
+
continue;
|
|
210
212
|
}
|
|
211
213
|
|
|
212
214
|
report(message || `Invalid JSDoc @${tagName}${tagValue} type "${badType}"` + (preferredType ? '; ' : '.') + (preferredType ? `prefer: ${JSON.stringify(preferredType)}.` : ''), preferredType ? fix : null, jsdocTag, message ? {
|
|
213
215
|
tagName,
|
|
214
216
|
tagValue
|
|
215
217
|
} : null);
|
|
216
|
-
}
|
|
218
|
+
}
|
|
217
219
|
}
|
|
218
|
-
}
|
|
220
|
+
}
|
|
219
221
|
}, {
|
|
220
222
|
iterateAllJsdocs: true,
|
|
221
223
|
meta: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/rules/checkTypes.js"],"names":["strictNativeTypes","adjustNames","type","preferred","isGenericMatch","nodeName","node","parentNode","ret","meta","brackets","dot","dotBracketEnd","match","slice","length","bracketEnd","endsWith","value","replace","jsdocNode","sourceCode","report","utils","settings","context","jsdocTagsWithPossibleType","filterTags","tag","tagMightHaveTypePosition","preferredTypes","structuredTags","mode","noDefaults","unifyParentAndChildTypeChecks","exemptTagContexts","options","getPreferredTypeInfo","_type","property","hasMatchingPreferredType","typeName","Object","keys","isNameOfGeneric","undefined","checkPostFixes","some","checkPostFix","directNameMatch","values","includes","unifiedSyntaxParentMatch","forEach","jsdocTag","invalidTypes","typeAst","tagName","types","preferredSetting","push","replacement","message","reportSettings","entries","typs","Array","isArray","strictNativeType","toLowerCase","fixedType","badType","preferredType","fix","fixer","replaceText","getText","tagValue","name","JSON","stringify","iterateAllJsdocs","docs","description","url","fixable","schema","additionalProperties","properties","items","oneOf"],"mappings":";;;;;;;AAAA;;AAGA;;;;AAEA,MAAMA,iBAAiB,GAAG,CACxB,WADwB,EAExB,MAFwB,EAGxB,SAHwB,EAIxB,QAJwB,EAKxB,QALwB,EAMxB,QANwB,EAOxB,QAPwB,EAQxB,QARwB,EASxB,OATwB,EAUxB,UAVwB,EAWxB,MAXwB,EAYxB,QAZwB,CAA1B;;AAeA,MAAMC,WAAW,GAAG,CAACC,IAAD,EAAOC,SAAP,EAAkBC,cAAlB,EAAkCC,QAAlC,EAA4CC,IAA5C,EAAkDC,UAAlD,KAAiE;AACnF,MAAIC,GAAG,GAAGL,SAAV;;AACA,MAAIC,cAAJ,EAAoB;AAClB,QAAID,SAAS,KAAK,IAAlB,EAAwB;AACtBI,MAAAA,UAAU,CAACE,IAAX,CAAgBC,QAAhB,GAA2B,QAA3B;AACAH,MAAAA,UAAU,CAACE,IAAX,CAAgBE,GAAhB,GAAsB,KAAtB;AACAH,MAAAA,GAAG,GAAG,OAAN;AACD,KAJD,MAIO;AACL,YAAMI,aAAa,GAAGT,SAAS,CAACU,KAAV,CAAgB,aAAhB,CAAtB;;AACA,UAAID,aAAJ,EAAmB;AACjBL,QAAAA,UAAU,CAACE,IAAX,CAAgBC,QAAhB,GAA2B,OAA3B;AACAH,QAAAA,UAAU,CAACE,IAAX,CAAgBE,GAAhB,GAAsB,IAAtB;AACAH,QAAAA,GAAG,GAAGL,SAAS,CAACW,KAAV,CAAgB,CAAhB,EAAmB,CAACF,aAAa,CAAC,CAAD,CAAb,CAAiBG,MAArC,CAAN;AACD,OAJD,MAIO;AACL,cAAMC,UAAU,GAAGb,SAAS,CAACc,QAAV,CAAmB,IAAnB,CAAnB;;AACA,YAAID,UAAJ,EAAgB;AACdT,UAAAA,UAAU,CAACE,IAAX,CAAgBC,QAAhB,GAA2B,OAA3B;AACAH,UAAAA,UAAU,CAACE,IAAX,CAAgBE,GAAhB,GAAsB,KAAtB;AACAH,UAAAA,GAAG,GAAGL,SAAS,CAACW,KAAV,CAAgB,CAAhB,EAAmB,CAAC,CAApB,CAAN;AACD,SAJD,MAIO,IACLP,UAAU,CAACE,IAAX,CAAgBC,QAAhB,KAA6B,QAA7B,KACCL,QAAQ,KAAK,IAAb,IAAqBA,QAAQ,KAAK,OADnC,CADK,EAGL;AACAE,UAAAA,UAAU,CAACE,IAAX,CAAgBC,QAAhB,GAA2B,OAA3B;AACAH,UAAAA,UAAU,CAACE,IAAX,CAAgBE,GAAhB,GAAsB,KAAtB;AACD;AACF;AACF;AACF,GA1BD,MA0BO,IAAIT,IAAI,KAAK,cAAb,EAA6B;AAClCI,IAAAA,IAAI,CAACJ,IAAL,GAAY,eAAZ;AACD;;AACDI,EAAAA,IAAI,CAACY,KAAL,GAAaV,GAAG,CAACW,OAAJ,CAAY,uBAAZ,EAAqC,EAArC,CAAb,CA/BmF,CAiCnF;;AACA,MAAI,CAACX,GAAL,EAAU;AACRF,IAAAA,IAAI,CAACY,KAAL,GAAab,QAAb;AACD;AACF,CArCD;;eAuCe,2BAAa,CAAC;AAC3Be,EAAAA,SAD2B;AAE3BC,EAAAA,UAF2B;AAG3BC,EAAAA,MAH2B;AAI3BC,EAAAA,KAJ2B;AAK3BC,EAAAA,QAL2B;AAM3BC,EAAAA;AAN2B,CAAD,KAOtB;AACJ,QAAMC,yBAAyB,GAAGH,KAAK,CAACI,UAAN,CAAkBC,GAAD,IAAS;AAC1D,WAAOL,KAAK,CAACM,wBAAN,CAA+BD,GAAG,CAACA,GAAnC,CAAP;AACD,GAFiC,CAAlC;AAIA,QAAM;AAACE,IAAAA,cAAD;AAAiBC,IAAAA,cAAjB;AAAiCC,IAAAA;AAAjC,MAAyCR,QAA/C;AACA,QAAM;AACJS,IAAAA,UADI;AAEJC,IAAAA,6BAFI;AAGJC,IAAAA,iBAAiB,GAAG;AAHhB,MAIFV,OAAO,CAACW,OAAR,CAAgB,CAAhB,KAAsB,EAJ1B;;AAMA,QAAMC,oBAAoB,GAAG,CAACC,KAAD,EAAQjC,QAAR,EAAkBE,UAAlB,EAA8BgC,QAA9B,KAA2C;AACtE,QAAIC,wBAAJ;AACA,QAAIpC,cAAJ;AACA,QAAIqC,QAAQ,GAAGpC,QAAf;;AACA,QAAIqC,MAAM,CAACC,IAAP,CAAYb,cAAZ,EAA4Bf,MAAhC,EAAwC;AACtC,YAAM6B,eAAe,GAAGrC,UAAU,KAAKsC,SAAf,IAA4BtC,UAAU,CAACL,IAAX,KAAoB,kBAAhD,IAAsEqC,QAAQ,KAAK,MAA3G;;AACA,UAAIL,6BAA6B,IAAIU,eAArC,EAAsD;AAAA;;AACpD,cAAMlC,QAAQ,GAAGH,UAAH,aAAGA,UAAH,2CAAGA,UAAU,CAAEE,IAAf,qDAAG,iBAAkBC,QAAnC;AACA,cAAMC,GAAG,GAAGJ,UAAH,aAAGA,UAAH,4CAAGA,UAAU,CAAEE,IAAf,sDAAG,kBAAkBE,GAA9B;;AAEA,YAAID,QAAQ,KAAK,OAAjB,EAA0B;AACxB,gBAAMoC,cAAc,GAAGnC,GAAG,GAAG,CAAC,GAAD,EAAM,KAAN,CAAH,GAAkB,CAAC,IAAD,CAA5C;AACAP,UAAAA,cAAc,GAAG0C,cAAc,CAACC,IAAf,CAAqBC,YAAD,IAAkB;AACrD,gBAAI,CAAAlB,cAAc,SAAd,IAAAA,cAAc,WAAd,YAAAA,cAAc,CAAGzB,QAAQ,GAAG2C,YAAd,CAAd,MAA8CH,SAAlD,EAA6D;AAC3DJ,cAAAA,QAAQ,IAAIO,YAAZ;AAEA,qBAAO,IAAP;AACD;;AAED,mBAAO,KAAP;AACD,WARgB,CAAjB;AASD;;AAED,YAAI,CAAC5C,cAAD,IAAmBmC,QAAvB,EAAiC;AAC/B,gBAAMO,cAAc,GAAGnC,GAAG,GAAG,CAAC,GAAD,EAAM,KAAN,CAAH,GAAkB,CAACD,QAAQ,KAAK,OAAb,GAAuB,IAAvB,GAA8B,IAA/B,CAA5C;AAEAN,UAAAA,cAAc,GAAG0C,cAAc,CAACC,IAAf,CAAqBC,YAAD,IAAkB;AACrD,gBAAI,CAAAlB,cAAc,SAAd,IAAAA,cAAc,WAAd,YAAAA,cAAc,CAAGkB,YAAH,CAAd,MAAmCH,SAAvC,EAAkD;AAChDJ,cAAAA,QAAQ,GAAGO,YAAX;AAEA,qBAAO,IAAP;AACD;;AAED,mBAAO,KAAP;AACD,WARgB,CAAjB;AASD;AACF;;AACD,YAAMC,eAAe,GAAG,CAAAnB,cAAc,SAAd,IAAAA,cAAc,WAAd,YAAAA,cAAc,CAAGzB,QAAH,CAAd,MAA+BwC,SAA/B,IACtB,CAACH,MAAM,CAACQ,MAAP,CAAcpB,cAAd,EAA8BqB,QAA9B,CAAuC9C,QAAvC,CADH;AAEA,YAAM+C,wBAAwB,GAAGb,QAAQ,IAAIU,eAAZ,IAA+Bf,6BAAhE;AACA9B,MAAAA,cAAc,GAAGA,cAAc,IAAIgD,wBAAnC;AAEAZ,MAAAA,wBAAwB,GAAGpC,cAAc,IACvC6C,eAAe,IAAI,CAACV,QADtB;AAED;;AAED,WAAO,CAACC,wBAAD,EAA2BC,QAA3B,EAAqCrC,cAArC,CAAP;AACD,GA/CD;;AAiDAsB,EAAAA,yBAAyB,CAAC2B,OAA1B,CAAmCC,QAAD,IAAc;AAC9C,UAAMC,YAAY,GAAG,EAArB;AACA,QAAIC,OAAJ;;AAEA,QAAI;AACFA,MAAAA,OAAO,GAAGxB,IAAI,KAAK,YAAT,GAAwB,oCAASsB,QAAQ,CAACpD,IAAlB,CAAxB,GAAkD,iCAAMoD,QAAQ,CAACpD,IAAf,EAAqB8B,IAArB,CAA5D;AACD,KAFD,CAEE,MAAM;AACN;AACD;;AACD,UAAMyB,OAAO,GAAGH,QAAQ,CAAC1B,GAAzB;AAEA,wCAAS4B,OAAT,EAAkB,CAAClD,IAAD,EAAOC,UAAP,EAAmBgC,QAAnB,KAAgC;AAChD,YAAM;AAACrC,QAAAA,IAAD;AAAOgB,QAAAA;AAAP,UAAgBZ,IAAtB;;AACA,UAAI,CAAC,CAAC,eAAD,EAAkB,cAAlB,EAAkC6C,QAAlC,CAA2CjD,IAA3C,CAAL,EAAuD;AACrD;AACD;;AACD,UAAIG,QAAQ,GAAGH,IAAI,KAAK,cAAT,GAA0B,GAA1B,GAAgCgB,KAA/C;AAEA,YAAM,CAACsB,wBAAD,EAA2BC,QAA3B,EAAqCrC,cAArC,IAAuDiC,oBAAoB,CAACnC,IAAD,EAAOG,QAAP,EAAiBE,UAAjB,EAA6BgC,QAA7B,CAAjF;AAEA,UAAIpC,SAAJ;AACA,UAAIuD,KAAJ;;AACA,UAAIlB,wBAAJ,EAA8B;AAC5B,cAAMmB,gBAAgB,GAAG7B,cAAc,CAACW,QAAD,CAAvC;AACApC,QAAAA,QAAQ,GAAGoC,QAAQ,KAAK,IAAb,GAAoBA,QAApB,GAA+BpC,QAA1C;;AAEA,YAAI,CAACsD,gBAAL,EAAuB;AACrBJ,UAAAA,YAAY,CAACK,IAAb,CAAkB,CAACvD,QAAD,CAAlB;AACD,SAFD,MAEO,IAAI,OAAOsD,gBAAP,KAA4B,QAAhC,EAA0C;AAC/CxD,UAAAA,SAAS,GAAGwD,gBAAZ;AACAJ,UAAAA,YAAY,CAACK,IAAb,CAAkB,CAACvD,QAAD,EAAWF,SAAX,CAAlB;AACD,SAHM,MAGA,IAAI,OAAOwD,gBAAP,KAA4B,QAAhC,EAA0C;AAC/CxD,UAAAA,SAAS,GAAGwD,gBAAH,aAAGA,gBAAH,uBAAGA,gBAAgB,CAAEE,WAA9B;AACAN,UAAAA,YAAY,CAACK,IAAb,CAAkB,CAChBvD,QADgB,EAEhBF,SAFgB,EAGhBwD,gBAHgB,aAGhBA,gBAHgB,uBAGhBA,gBAAgB,CAAEG,OAHF,CAAlB;AAKD,SAPM,MAOA;AACLvC,UAAAA,KAAK,CAACwC,cAAN,CACE,wFADF;AAIA;AACD;AACF,OAvBD,MAuBO,IAAIrB,MAAM,CAACsB,OAAP,CAAejC,cAAf,EAA+BgB,IAA/B,CAAoC,CAAC,CAACnB,GAAD,EAAM;AAAC1B,QAAAA,IAAI,EAAE+D;AAAP,OAAN,CAAD,KAAyB;AACtEP,QAAAA,KAAK,GAAGO,IAAR;AAEA,eAAOrC,GAAG,KAAK6B,OAAR,IACLS,KAAK,CAACC,OAAN,CAAcT,KAAd,CADK,IAEL,CAACA,KAAK,CAACP,QAAN,CAAe9C,QAAf,CAFH;AAGD,OANU,CAAJ,EAMH;AACFkD,QAAAA,YAAY,CAACK,IAAb,CAAkB,CAACvD,QAAD,EAAWqD,KAAX,CAAlB;AACD,OARM,MAQA,IAAI,CAACzB,UAAD,IAAe/B,IAAI,KAAK,eAA5B,EAA6C;AAClD,aAAK,MAAMkE,gBAAX,IAA+BpE,iBAA/B,EAAkD;AAChD,cAAIoE,gBAAgB,KAAK,QAArB,IAAiCpC,IAAI,KAAK,YAA9C,EAA4D;AAC1D;AACD;;AACD,cAAIoC,gBAAgB,CAACC,WAAjB,OAAmChE,QAAQ,CAACgE,WAAT,EAAnC,IACFD,gBAAgB,KAAK/D,QADnB,KAID,CAACyB,cAAD,IAAmB,CAAAA,cAAc,SAAd,IAAAA,cAAc,WAAd,YAAAA,cAAc,CAAGsC,gBAAH,CAAd,MAAuCvB,SAJzD,CAAJ,EAKE;AACA1C,YAAAA,SAAS,GAAGiE,gBAAZ;AACAb,YAAAA,YAAY,CAACK,IAAb,CAAkB,CAACvD,QAAD,EAAWF,SAAX,CAAlB;AACA;AACD;AACF;AACF,OA1D+C,CA4DhD;;;AACA,UAAIA,SAAJ,EAAe;AACbF,QAAAA,WAAW,CAACC,IAAD,EAAOC,SAAP,EAAkBC,cAAlB,EAAkCC,QAAlC,EAA4CC,IAA5C,EAAkDC,UAAlD,CAAX;AACD;AACF,KAhED;;AAkEA,QAAIgD,YAAY,CAACxC,MAAjB,EAAyB;AACvB,YAAMuD,SAAS,GAAG,qCAAUd,OAAV,CAAlB;AAEAD,MAAAA,YAAY,CAACF,OAAb,CAAqB,CAAC,CAACkB,OAAD,EAAUC,aAAa,GAAG,EAA1B,EAA8BV,OAA9B,CAAD,KAA4C;AAC/D,cAAMW,GAAG,GAAIC,KAAD,IAAW;AACrB,iBAAOA,KAAK,CAACC,WAAN,CACLvD,SADK,EAELC,UAAU,CAACuD,OAAX,CAAmBxD,SAAnB,EAA8BD,OAA9B,CACG,IAAGmC,QAAQ,CAACpD,IAAK,GADpB,EAEG,IAAGoE,SAAU,GAFhB,CAFK,CAAP;AAOD,SARD;;AAUA,cAAMO,QAAQ,GAAGvB,QAAQ,CAACwB,IAAT,GAAiB,KAAIxB,QAAQ,CAACwB,IAAK,GAAnC,GAAwC,EAAzD;;AACA,YAAI3C,iBAAiB,CAACY,IAAlB,CAAuB,CAAC;AAACnB,UAAAA,GAAD;AAAM8B,UAAAA;AAAN,SAAD,KAAkB;AAC3C,iBAAO9B,GAAG,KAAK6B,OAAR,KACJC,KAAK,KAAK,IAAV,IAAkBA,KAAK,CAACP,QAAN,CAAeG,QAAQ,CAACpD,IAAxB,CADd,CAAP;AAED,SAHG,CAAJ,EAGI;AACF;AACD;;AAEDoB,QAAAA,MAAM,CACJwC,OAAO,IACJ,kBAAiBL,OAAQ,GAAEoB,QAAS,UAASN,OAAQ,GAAtD,IACCC,aAAa,GAAG,IAAH,GAAU,GADxB,KAECA,aAAa,GAAI,WAAUO,IAAI,CAACC,SAAL,CAAeR,aAAf,CAA8B,GAA5C,GAAiD,EAF/D,CAFE,EAKJA,aAAa,GAAGC,GAAH,GAAS,IALlB,EAMJnB,QANI,EAOJQ,OAAO,GAAG;AACRL,UAAAA,OADQ;AAERoB,UAAAA;AAFQ,SAAH,GAGH,IAVA,CAAN;AAYD,OA/BD;AAgCD;AACF,GAjHD;AAkHD,CAtLc,EAsLZ;AACDI,EAAAA,gBAAgB,EAAE,IADjB;AAEDxE,EAAAA,IAAI,EAAE;AACJyE,IAAAA,IAAI,EAAE;AACJC,MAAAA,WAAW,EAAE,wBADT;AAEJC,MAAAA,GAAG,EAAE;AAFD,KADF;AAKJC,IAAAA,OAAO,EAAE,MALL;AAMJC,IAAAA,MAAM,EAAE,CACN;AACEC,MAAAA,oBAAoB,EAAE,KADxB;AAEEC,MAAAA,UAAU,EAAE;AACVrD,QAAAA,iBAAiB,EAAE;AACjBsD,UAAAA,KAAK,EAAE;AACLF,YAAAA,oBAAoB,EAAE,KADjB;AAELC,YAAAA,UAAU,EAAE;AACV5D,cAAAA,GAAG,EAAE;AACH1B,gBAAAA,IAAI,EAAE;AADH,eADK;AAIVwD,cAAAA,KAAK,EAAE;AACLgC,gBAAAA,KAAK,EAAE,CACL;AACExF,kBAAAA,IAAI,EAAE;AADR,iBADK,EAIL;AACEuF,kBAAAA,KAAK,EAAE;AACLvF,oBAAAA,IAAI,EAAE;AADD,mBADT;AAIEA,kBAAAA,IAAI,EAAE;AAJR,iBAJK;AADF;AAJG,aAFP;AAoBLA,YAAAA,IAAI,EAAE;AApBD,WADU;AAuBjBA,UAAAA,IAAI,EAAE;AAvBW,SADT;AA0BV+B,QAAAA,UAAU,EAAE;AACV/B,UAAAA,IAAI,EAAE;AADI,SA1BF;AA6BVgC,QAAAA,6BAA6B,EAAE;AAC7BhC,UAAAA,IAAI,EAAE;AADuB;AA7BrB,OAFd;AAmCEA,MAAAA,IAAI,EAAE;AAnCR,KADM,CANJ;AA6CJA,IAAAA,IAAI,EAAE;AA7CF;AAFL,CAtLY,C","sourcesContent":["import {\n parse, stringify, traverse, tryParse,\n} from 'jsdoc-type-pratt-parser';\nimport iterateJsdoc from '../iterateJsdoc';\n\nconst strictNativeTypes = [\n 'undefined',\n 'null',\n 'boolean',\n 'number',\n 'bigint',\n 'string',\n 'symbol',\n 'object',\n 'Array',\n 'Function',\n 'Date',\n 'RegExp',\n];\n\nconst adjustNames = (type, preferred, isGenericMatch, nodeName, node, parentNode) => {\n let ret = preferred;\n if (isGenericMatch) {\n if (preferred === '[]') {\n parentNode.meta.brackets = 'square';\n parentNode.meta.dot = false;\n ret = 'Array';\n } else {\n const dotBracketEnd = preferred.match(/\\.(?:<>)?$/u);\n if (dotBracketEnd) {\n parentNode.meta.brackets = 'angle';\n parentNode.meta.dot = true;\n ret = preferred.slice(0, -dotBracketEnd[0].length);\n } else {\n const bracketEnd = preferred.endsWith('<>');\n if (bracketEnd) {\n parentNode.meta.brackets = 'angle';\n parentNode.meta.dot = false;\n ret = preferred.slice(0, -2);\n } else if (\n parentNode.meta.brackets === 'square' &&\n (nodeName === '[]' || nodeName === 'Array')\n ) {\n parentNode.meta.brackets = 'angle';\n parentNode.meta.dot = false;\n }\n }\n }\n } else if (type === 'JsdocTypeAny') {\n node.type = 'JsdocTypeName';\n }\n node.value = ret.replace(/(?:\\.|<>|\\.<>|\\[\\])$/u, '');\n\n // For bare pseudo-types like `<>`\n if (!ret) {\n node.value = nodeName;\n }\n};\n\nexport default iterateJsdoc(({\n jsdocNode,\n sourceCode,\n report,\n utils,\n settings,\n context,\n}) => {\n const jsdocTagsWithPossibleType = utils.filterTags((tag) => {\n return utils.tagMightHaveTypePosition(tag.tag);\n });\n\n const {preferredTypes, structuredTags, mode} = settings;\n const {\n noDefaults,\n unifyParentAndChildTypeChecks,\n exemptTagContexts = [],\n } = context.options[0] || {};\n\n const getPreferredTypeInfo = (_type, nodeName, parentNode, property) => {\n let hasMatchingPreferredType;\n let isGenericMatch;\n let typeName = nodeName;\n if (Object.keys(preferredTypes).length) {\n const isNameOfGeneric = parentNode !== undefined && parentNode.type === 'JsdocTypeGeneric' && property === 'left';\n if (unifyParentAndChildTypeChecks || isNameOfGeneric) {\n const brackets = parentNode?.meta?.brackets;\n const dot = parentNode?.meta?.dot;\n\n if (brackets === 'angle') {\n const checkPostFixes = dot ? ['.', '.<>'] : ['<>'];\n isGenericMatch = checkPostFixes.some((checkPostFix) => {\n if (preferredTypes?.[nodeName + checkPostFix] !== undefined) {\n typeName += checkPostFix;\n\n return true;\n }\n\n return false;\n });\n }\n\n if (!isGenericMatch && property) {\n const checkPostFixes = dot ? ['.', '.<>'] : [brackets === 'angle' ? '<>' : '[]'];\n\n isGenericMatch = checkPostFixes.some((checkPostFix) => {\n if (preferredTypes?.[checkPostFix] !== undefined) {\n typeName = checkPostFix;\n\n return true;\n }\n\n return false;\n });\n }\n }\n const directNameMatch = preferredTypes?.[nodeName] !== undefined &&\n !Object.values(preferredTypes).includes(nodeName);\n const unifiedSyntaxParentMatch = property && directNameMatch && unifyParentAndChildTypeChecks;\n isGenericMatch = isGenericMatch || unifiedSyntaxParentMatch;\n\n hasMatchingPreferredType = isGenericMatch ||\n directNameMatch && !property;\n }\n\n return [hasMatchingPreferredType, typeName, isGenericMatch];\n };\n\n jsdocTagsWithPossibleType.forEach((jsdocTag) => {\n const invalidTypes = [];\n let typeAst;\n\n try {\n typeAst = mode === 'permissive' ? tryParse(jsdocTag.type) : parse(jsdocTag.type, mode);\n } catch {\n return;\n }\n const tagName = jsdocTag.tag;\n\n traverse(typeAst, (node, parentNode, property) => {\n const {type, value} = node;\n if (!['JsdocTypeName', 'JsdocTypeAny'].includes(type)) {\n return;\n }\n let nodeName = type === 'JsdocTypeAny' ? '*' : value;\n\n const [hasMatchingPreferredType, typeName, isGenericMatch] = getPreferredTypeInfo(type, nodeName, parentNode, property);\n\n let preferred;\n let types;\n if (hasMatchingPreferredType) {\n const preferredSetting = preferredTypes[typeName];\n nodeName = typeName === '[]' ? typeName : nodeName;\n\n if (!preferredSetting) {\n invalidTypes.push([nodeName]);\n } else if (typeof preferredSetting === 'string') {\n preferred = preferredSetting;\n invalidTypes.push([nodeName, preferred]);\n } else if (typeof preferredSetting === 'object') {\n preferred = preferredSetting?.replacement;\n invalidTypes.push([\n nodeName,\n preferred,\n preferredSetting?.message,\n ]);\n } else {\n utils.reportSettings(\n 'Invalid `settings.jsdoc.preferredTypes`. Values must be falsy, a string, or an object.',\n );\n\n return;\n }\n } else if (Object.entries(structuredTags).some(([tag, {type: typs}]) => {\n types = typs;\n\n return tag === tagName &&\n Array.isArray(types) &&\n !types.includes(nodeName);\n })) {\n invalidTypes.push([nodeName, types]);\n } else if (!noDefaults && type === 'JsdocTypeName') {\n for (const strictNativeType of strictNativeTypes) {\n if (strictNativeType === 'object' && mode === 'typescript') {\n continue;\n }\n if (strictNativeType.toLowerCase() === nodeName.toLowerCase() &&\n strictNativeType !== nodeName &&\n\n // Don't report if user has own map for a strict native type\n (!preferredTypes || preferredTypes?.[strictNativeType] === undefined)\n ) {\n preferred = strictNativeType;\n invalidTypes.push([nodeName, preferred]);\n break;\n }\n }\n }\n\n // For fixer\n if (preferred) {\n adjustNames(type, preferred, isGenericMatch, nodeName, node, parentNode);\n }\n });\n\n if (invalidTypes.length) {\n const fixedType = stringify(typeAst);\n\n invalidTypes.forEach(([badType, preferredType = '', message]) => {\n const fix = (fixer) => {\n return fixer.replaceText(\n jsdocNode,\n sourceCode.getText(jsdocNode).replace(\n `{${jsdocTag.type}}`,\n `{${fixedType}}`,\n ),\n );\n };\n\n const tagValue = jsdocTag.name ? ` \"${jsdocTag.name}\"` : '';\n if (exemptTagContexts.some(({tag, types}) => {\n return tag === tagName &&\n (types === true || types.includes(jsdocTag.type));\n })) {\n return;\n }\n\n report(\n message ||\n `Invalid JSDoc @${tagName}${tagValue} type \"${badType}\"` +\n (preferredType ? '; ' : '.') +\n (preferredType ? `prefer: ${JSON.stringify(preferredType)}.` : ''),\n preferredType ? fix : null,\n jsdocTag,\n message ? {\n tagName,\n tagValue,\n } : null,\n );\n });\n }\n });\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Reports invalid types.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-check-types',\n },\n fixable: 'code',\n schema: [\n {\n additionalProperties: false,\n properties: {\n exemptTagContexts: {\n items: {\n additionalProperties: false,\n properties: {\n tag: {\n type: 'string',\n },\n types: {\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 type: 'boolean',\n },\n unifyParentAndChildTypeChecks: {\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"file":"checkTypes.js"}
|
|
1
|
+
{"version":3,"sources":["../../src/rules/checkTypes.js"],"names":["strictNativeTypes","adjustNames","type","preferred","isGenericMatch","nodeName","node","parentNode","ret","meta","brackets","dot","dotBracketEnd","match","slice","length","bracketEnd","endsWith","value","replace","jsdocNode","sourceCode","report","utils","settings","context","jsdocTagsWithPossibleType","filterTags","tag","tagMightHaveTypePosition","preferredTypes","structuredTags","mode","noDefaults","unifyParentAndChildTypeChecks","exemptTagContexts","options","getPreferredTypeInfo","_type","property","hasMatchingPreferredType","typeName","Object","keys","isNameOfGeneric","undefined","checkPostFixes","some","checkPostFix","directNameMatch","values","includes","unifiedSyntaxParentMatch","jsdocTag","invalidTypes","typeAst","tagName","types","preferredSetting","push","replacement","message","reportSettings","entries","typs","Array","isArray","strictNativeType","toLowerCase","fixedType","badType","preferredType","fix","fixer","replaceText","getText","tagValue","name","JSON","stringify","iterateAllJsdocs","docs","description","url","fixable","schema","additionalProperties","properties","items","oneOf"],"mappings":"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","sourcesContent":["import {\n parse, stringify, traverse, tryParse,\n} from 'jsdoc-type-pratt-parser';\nimport iterateJsdoc from '../iterateJsdoc';\n\nconst strictNativeTypes = [\n 'undefined',\n 'null',\n 'boolean',\n 'number',\n 'bigint',\n 'string',\n 'symbol',\n 'object',\n 'Array',\n 'Function',\n 'Date',\n 'RegExp',\n];\n\nconst adjustNames = (type, preferred, isGenericMatch, nodeName, node, parentNode) => {\n let ret = preferred;\n if (isGenericMatch) {\n if (preferred === '[]') {\n parentNode.meta.brackets = 'square';\n parentNode.meta.dot = false;\n ret = 'Array';\n } else {\n const dotBracketEnd = preferred.match(/\\.(?:<>)?$/u);\n if (dotBracketEnd) {\n parentNode.meta.brackets = 'angle';\n parentNode.meta.dot = true;\n ret = preferred.slice(0, -dotBracketEnd[0].length);\n } else {\n const bracketEnd = preferred.endsWith('<>');\n if (bracketEnd) {\n parentNode.meta.brackets = 'angle';\n parentNode.meta.dot = false;\n ret = preferred.slice(0, -2);\n } else if (\n parentNode.meta.brackets === 'square' &&\n (nodeName === '[]' || nodeName === 'Array')\n ) {\n parentNode.meta.brackets = 'angle';\n parentNode.meta.dot = false;\n }\n }\n }\n } else if (type === 'JsdocTypeAny') {\n node.type = 'JsdocTypeName';\n }\n\n node.value = ret.replace(/(?:\\.|<>|\\.<>|\\[\\])$/u, '');\n\n // For bare pseudo-types like `<>`\n if (!ret) {\n node.value = nodeName;\n }\n};\n\nexport default iterateJsdoc(({\n jsdocNode,\n sourceCode,\n report,\n utils,\n settings,\n context,\n}) => {\n const jsdocTagsWithPossibleType = utils.filterTags((tag) => {\n return utils.tagMightHaveTypePosition(tag.tag);\n });\n\n const {preferredTypes, structuredTags, mode} = settings;\n const {\n noDefaults,\n unifyParentAndChildTypeChecks,\n exemptTagContexts = [],\n } = context.options[0] || {};\n\n const getPreferredTypeInfo = (_type, nodeName, parentNode, property) => {\n let hasMatchingPreferredType;\n let isGenericMatch;\n let typeName = nodeName;\n if (Object.keys(preferredTypes).length) {\n const isNameOfGeneric = parentNode !== undefined && parentNode.type === 'JsdocTypeGeneric' && property === 'left';\n if (unifyParentAndChildTypeChecks || isNameOfGeneric) {\n const brackets = parentNode?.meta?.brackets;\n const dot = parentNode?.meta?.dot;\n\n if (brackets === 'angle') {\n const checkPostFixes = dot ? ['.', '.<>'] : ['<>'];\n isGenericMatch = checkPostFixes.some((checkPostFix) => {\n if (preferredTypes?.[nodeName + checkPostFix] !== undefined) {\n typeName += checkPostFix;\n\n return true;\n }\n\n return false;\n });\n }\n\n if (!isGenericMatch && property) {\n const checkPostFixes = dot ? ['.', '.<>'] : [brackets === 'angle' ? '<>' : '[]'];\n\n isGenericMatch = checkPostFixes.some((checkPostFix) => {\n if (preferredTypes?.[checkPostFix] !== undefined) {\n typeName = checkPostFix;\n\n return true;\n }\n\n return false;\n });\n }\n }\n\n const directNameMatch = preferredTypes?.[nodeName] !== undefined &&\n !Object.values(preferredTypes).includes(nodeName);\n const unifiedSyntaxParentMatch = property && directNameMatch && unifyParentAndChildTypeChecks;\n isGenericMatch = isGenericMatch || unifiedSyntaxParentMatch;\n\n hasMatchingPreferredType = isGenericMatch ||\n directNameMatch && !property;\n }\n\n return [hasMatchingPreferredType, typeName, isGenericMatch];\n };\n\n for (const jsdocTag of jsdocTagsWithPossibleType) {\n const invalidTypes = [];\n let typeAst;\n\n try {\n typeAst = mode === 'permissive' ? tryParse(jsdocTag.type) : parse(jsdocTag.type, mode);\n } catch {\n continue;\n }\n\n const tagName = jsdocTag.tag;\n\n traverse(typeAst, (node, parentNode, property) => {\n const {type, value} = node;\n if (!['JsdocTypeName', 'JsdocTypeAny'].includes(type)) {\n return;\n }\n\n let nodeName = type === 'JsdocTypeAny' ? '*' : value;\n\n const [hasMatchingPreferredType, typeName, isGenericMatch] = getPreferredTypeInfo(type, nodeName, parentNode, property);\n\n let preferred;\n let types;\n if (hasMatchingPreferredType) {\n const preferredSetting = preferredTypes[typeName];\n nodeName = typeName === '[]' ? typeName : nodeName;\n\n if (!preferredSetting) {\n invalidTypes.push([nodeName]);\n } else if (typeof preferredSetting === 'string') {\n preferred = preferredSetting;\n invalidTypes.push([nodeName, preferred]);\n } else if (typeof preferredSetting === 'object') {\n preferred = preferredSetting?.replacement;\n invalidTypes.push([\n nodeName,\n preferred,\n preferredSetting?.message,\n ]);\n } else {\n utils.reportSettings(\n 'Invalid `settings.jsdoc.preferredTypes`. Values must be falsy, a string, or an object.',\n );\n\n return;\n }\n } else if (Object.entries(structuredTags).some(([tag, {type: typs}]) => {\n types = typs;\n\n return tag === tagName &&\n Array.isArray(types) &&\n !types.includes(nodeName);\n })) {\n invalidTypes.push([nodeName, types]);\n } else if (!noDefaults && type === 'JsdocTypeName') {\n for (const strictNativeType of strictNativeTypes) {\n if (strictNativeType === 'object' && mode === 'typescript') {\n continue;\n }\n\n if (strictNativeType.toLowerCase() === nodeName.toLowerCase() &&\n strictNativeType !== nodeName &&\n\n // Don't report if user has own map for a strict native type\n (!preferredTypes || preferredTypes?.[strictNativeType] === undefined)\n ) {\n preferred = strictNativeType;\n invalidTypes.push([nodeName, preferred]);\n break;\n }\n }\n }\n\n // For fixer\n if (preferred) {\n adjustNames(type, preferred, isGenericMatch, nodeName, node, parentNode);\n }\n });\n\n if (invalidTypes.length) {\n const fixedType = stringify(typeAst);\n\n for (const [badType, preferredType = '', message] of invalidTypes) {\n const fix = (fixer) => {\n return fixer.replaceText(\n jsdocNode,\n sourceCode.getText(jsdocNode).replace(\n `{${jsdocTag.type}}`,\n `{${fixedType}}`,\n ),\n );\n };\n\n const tagValue = jsdocTag.name ? ` \"${jsdocTag.name}\"` : '';\n if (exemptTagContexts.some(({tag, types}) => {\n return tag === tagName &&\n (types === true || types.includes(jsdocTag.type));\n })) {\n continue;\n }\n\n report(\n message ||\n `Invalid JSDoc @${tagName}${tagValue} type \"${badType}\"` +\n (preferredType ? '; ' : '.') +\n (preferredType ? `prefer: ${JSON.stringify(preferredType)}.` : ''),\n preferredType ? fix : null,\n jsdocTag,\n message ? {\n tagName,\n tagValue,\n } : null,\n );\n }\n }\n }\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Reports invalid types.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-check-types',\n },\n fixable: 'code',\n schema: [\n {\n additionalProperties: false,\n properties: {\n exemptTagContexts: {\n items: {\n additionalProperties: false,\n properties: {\n tag: {\n type: 'string',\n },\n types: {\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 type: 'boolean',\n },\n unifyParentAndChildTypeChecks: {\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"file":"checkTypes.js"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/rules/checkValues.js"],"names":["utils","report","context","options","allowedLicenses","allowedAuthors","numericOnlyVariation","licensePattern","forEachPreferredTag","jsdocParameter","targetTagName","version","getTagDescription","trim","semver","valid","variation","Number","isInteger","licenseRegex","getRegexFromString","match","license","includes","join","author","iterateAllJsdocs","meta","docs","description","url","schema","additionalProperties","properties","items","type","anyOf"],"mappings":";;;;;;;AAAA;;AACA;;AACA;;;;eAEe,2BAAa,CAAC;AAC3BA,EAAAA,KAD2B;AAE3BC,EAAAA,MAF2B;AAG3BC,EAAAA;AAH2B,CAAD,KAItB;AACJ,QAAMC,OAAO,GAAGD,OAAO,CAACC,OAAR,CAAgB,CAAhB,KAAsB,EAAtC;AACA,QAAM;AACJC,IAAAA,eAAe,GAAG,IADd;AAEJC,IAAAA,cAAc,GAAG,IAFb;AAGJC,IAAAA,oBAAoB,GAAG,KAHnB;AAIJC,IAAAA,cAAc,GAAG;AAJb,MAKFJ,OALJ;AAOAH,EAAAA,KAAK,CAACQ,mBAAN,CAA0B,SAA1B,EAAqC,CAACC,cAAD,EAAiBC,aAAjB,KAAmC;AACtE,UAAMC,OAAO,GAAGX,KAAK,CAACY,iBAAN,CAAwBH,cAAxB,EAAwCI,IAAxC,EAAhB;;AACA,QAAI,CAACF,OAAL,EAAc;AACZV,MAAAA,MAAM,CACH,kBAAiBS,aAAc,SAD5B,EAEJ,IAFI,EAGJD,cAHI,CAAN;AAKD,KAND,MAMO,IAAI,CAACK,gBAAOC,KAAP,CAAaJ,OAAb,CAAL,EAA4B;AACjCV,MAAAA,MAAM,CACH,kBAAiBS,aAAc,MAAKV,KAAK,CAACY,iBAAN,CAAwBH,cAAxB,CAAwC,IADzE,EAEJ,IAFI,EAGJA,cAHI,CAAN;AAKD;AACF,GAfD;;AAgBA,MAAIH,oBAAJ,EAA0B;AACxBN,IAAAA,KAAK,CAACQ,mBAAN,CAA0B,WAA1B,EAAuC,CAACC,cAAD,EAAiBC,aAAjB,KAAmC;AACxE,YAAMM,SAAS,GAAGhB,KAAK,CAACY,iBAAN,CAAwBH,cAAxB,EAAwCI,IAAxC,EAAlB;;AACA,UAAI,CAACG,SAAL,EAAgB;AACdf,QAAAA,MAAM,CACH,kBAAiBS,aAAc,SAD5B,EAEJ,IAFI,EAGJD,cAHI,CAAN;AAKD,OAND,MAMO,IACL,CAACQ,MAAM,CAACC,SAAP,CAAiBD,MAAM,CAACD,SAAD,CAAvB,CAAD,IACAC,MAAM,CAACD,SAAD,CAAN,IAAqB,CAFhB,EAGL;AACAf,QAAAA,MAAM,CACH,kBAAiBS,aAAc,MAAKV,KAAK,CAACY,iBAAN,CAAwBH,cAAxB,CAAwC,IADzE,EAEJ,IAFI,EAGJA,cAHI,CAAN;AAKD;AACF,KAlBD;AAmBD;;
|
|
1
|
+
{"version":3,"sources":["../../src/rules/checkValues.js"],"names":["utils","report","context","options","allowedLicenses","allowedAuthors","numericOnlyVariation","licensePattern","forEachPreferredTag","jsdocParameter","targetTagName","version","getTagDescription","trim","semver","valid","variation","Number","isInteger","licenseRegex","getRegexFromString","match","license","includes","join","author","iterateAllJsdocs","meta","docs","description","url","schema","additionalProperties","properties","items","type","anyOf"],"mappings":"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","sourcesContent":["import semver from 'semver';\nimport spdxExpressionParse from 'spdx-expression-parse';\nimport iterateJsdoc from '../iterateJsdoc';\n\nexport default iterateJsdoc(({\n utils,\n report,\n context,\n}) => {\n const options = context.options[0] || {};\n const {\n allowedLicenses = null,\n allowedAuthors = null,\n numericOnlyVariation = false,\n licensePattern = '/([^\\n\\r]*)/gu',\n } = options;\n\n utils.forEachPreferredTag('version', (jsdocParameter, targetTagName) => {\n const version = utils.getTagDescription(jsdocParameter).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 if (numericOnlyVariation) {\n utils.forEachPreferredTag('variation', (jsdocParameter, targetTagName) => {\n const variation = utils.getTagDescription(jsdocParameter).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 = utils.getTagDescription(jsdocParameter).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 match = utils.getTagDescription(jsdocParameter).match(licenseRegex);\n const license = match && match[1] || match[0];\n if (!license.trim()) {\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 utils.forEachPreferredTag('author', (jsdocParameter, targetTagName) => {\n const author = utils.getTagDescription(jsdocParameter).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#eslint-plugin-jsdoc-rules-check-values',\n },\n schema: [\n {\n additionalProperties: false,\n properties: {\n allowedAuthors: {\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 },\n licensePattern: {\n type: 'string',\n },\n numericOnlyVariation: {\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"file":"checkValues.js"}
|
package/dist/rules/emptyTags.js
CHANGED
|
@@ -30,7 +30,8 @@ var _default = (0, _iterateJsdoc.default)(({
|
|
|
30
30
|
return tag === tagName;
|
|
31
31
|
}) || settings.mode !== 'closure' && emptyIfNotClosure.has(tagName);
|
|
32
32
|
});
|
|
33
|
-
|
|
33
|
+
|
|
34
|
+
for (const tag of emptyTags) {
|
|
34
35
|
const content = tag.name || tag.description || tag.type;
|
|
35
36
|
|
|
36
37
|
if (content.trim()) {
|
|
@@ -40,7 +41,7 @@ var _default = (0, _iterateJsdoc.default)(({
|
|
|
40
41
|
|
|
41
42
|
utils.reportJSDoc(`@${tag.tag} should be empty.`, tag, fix, true);
|
|
42
43
|
}
|
|
43
|
-
}
|
|
44
|
+
}
|
|
44
45
|
}, {
|
|
45
46
|
checkInternal: true,
|
|
46
47
|
checkPrivate: true,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/rules/emptyTags.js"],"names":["defaultEmptyTags","Set","emptyIfNotClosure","settings","jsdoc","utils","emptyTags","filterTags","tag","tagName","has","hasOptionTag","tags","some","mode","
|
|
1
|
+
{"version":3,"sources":["../../src/rules/emptyTags.js"],"names":["defaultEmptyTags","Set","emptyIfNotClosure","settings","jsdoc","utils","emptyTags","filterTags","tag","tagName","has","hasOptionTag","tags","some","mode","content","name","description","type","trim","fix","setTag","reportJSDoc","checkInternal","checkPrivate","iterateAllJsdocs","meta","docs","url","fixable","schema","additionalProperties","properties","items"],"mappings":";;;;;;;AAAA;;;;AAEA,MAAMA,gBAAgB,GAAG,IAAIC,GAAJ,CAAQ,CAC/B,UAD+B,EACnB,OADmB,EACV,WADU,EACG,QADH,EACa,iBADb,EAE/B,QAF+B,EAErB,OAFqB,EAEZ,UAFY,EAEA,UAFA,EAEY,UAFZ,EAI/B;AACA;AACA,YAN+B,EAQ/B;AACA,UAT+B,CAAR,CAAzB;AAYA,MAAMC,iBAAiB,GAAG,IAAID,GAAJ,CAAQ,CAChC,SADgC,EACrB,SADqB,EACV,WADU,EACG,QADH,EACa,QADb,EAGhC;AACA,YAJgC,CAAR,CAA1B;;eAOe,2BAAa,CAAC;AAC3BE,EAAAA,QAD2B;AAE3BC,EAAAA,KAF2B;AAG3BC,EAAAA;AAH2B,CAAD,KAItB;AACJ,QAAMC,SAAS,GAAGD,KAAK,CAACE,UAAN,CAAiB,CAAC;AAACC,IAAAA,GAAG,EAAEC;AAAN,GAAD,KAAoB;AACrD,WAAOT,gBAAgB,CAACU,GAAjB,CAAqBD,OAArB,KACLJ,KAAK,CAACM,YAAN,CAAmBF,OAAnB,KAA+BL,KAAK,CAACQ,IAAN,CAAWC,IAAX,CAAgB,CAAC;AAACL,MAAAA;AAAD,KAAD,KAAW;AACxD,aAAOA,GAAG,KAAKC,OAAf;AACD,KAF8B,CAD1B,IAILN,QAAQ,CAACW,IAAT,KAAkB,SAAlB,IAA+BZ,iBAAiB,CAACQ,GAAlB,CAAsBD,OAAtB,CAJjC;AAKD,GANiB,CAAlB;;AAOA,OAAK,MAAMD,GAAX,IAAkBF,SAAlB,EAA6B;AAC3B,UAAMS,OAAO,GAAGP,GAAG,CAACQ,IAAJ,IAAYR,GAAG,CAACS,WAAhB,IAA+BT,GAAG,CAACU,IAAnD;;AACA,QAAIH,OAAO,CAACI,IAAR,EAAJ,EAAoB;AAClB,YAAMC,GAAG,GAAG,MAAM;AAChBf,QAAAA,KAAK,CAACgB,MAAN,CAAab,GAAb;AACD,OAFD;;AAIAH,MAAAA,KAAK,CAACiB,WAAN,CAAmB,IAAGd,GAAG,CAACA,GAAI,mBAA9B,EAAkDA,GAAlD,EAAuDY,GAAvD,EAA4D,IAA5D;AACD;AACF;AACF,CAtBc,EAsBZ;AACDG,EAAAA,aAAa,EAAE,IADd;AAEDC,EAAAA,YAAY,EAAE,IAFb;AAGDC,EAAAA,gBAAgB,EAAE,IAHjB;AAIDC,EAAAA,IAAI,EAAE;AACJC,IAAAA,IAAI,EAAE;AACJV,MAAAA,WAAW,EAAE,mDADT;AAEJW,MAAAA,GAAG,EAAE;AAFD,KADF;AAKJC,IAAAA,OAAO,EAAE,MALL;AAMJC,IAAAA,MAAM,EAAE,CACN;AACEC,MAAAA,oBAAoB,EAAE,KADxB;AAEEC,MAAAA,UAAU,EAAE;AACVpB,QAAAA,IAAI,EAAE;AACJqB,UAAAA,KAAK,EAAE;AACLf,YAAAA,IAAI,EAAE;AADD,WADH;AAIJA,UAAAA,IAAI,EAAE;AAJF;AADI,OAFd;AAUEA,MAAAA,IAAI,EAAE;AAVR,KADM,CANJ;AAoBJA,IAAAA,IAAI,EAAE;AApBF;AAJL,CAtBY,C","sourcesContent":["import iterateJsdoc from '../iterateJsdoc';\n\nconst defaultEmptyTags = new Set([\n 'abstract', 'async', 'generator', 'global', 'hideconstructor',\n 'ignore', 'inner', 'instance', 'override', 'readonly',\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 'inheritDoc',\n\n // jsdoc doesn't use but allow for TypeScript\n 'internal',\n]);\n\nconst emptyIfNotClosure = new Set([\n 'package', 'private', 'protected', 'public', 'static',\n\n // Closure doesn't allow with this casing\n 'inheritdoc',\n]);\n\nexport default iterateJsdoc(({\n settings,\n jsdoc,\n utils,\n}) => {\n const emptyTags = utils.filterTags(({tag: tagName}) => {\n return defaultEmptyTags.has(tagName) ||\n utils.hasOptionTag(tagName) && jsdoc.tags.some(({tag}) => {\n return tag === tagName;\n }) ||\n settings.mode !== 'closure' && emptyIfNotClosure.has(tagName);\n });\n for (const tag of emptyTags) {\n const content = tag.name || tag.description || tag.type;\n if (content.trim()) {\n const fix = () => {\n utils.setTag(tag);\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: 'Expects specific tags to be empty of any content.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-empty-tags',\n },\n fixable: 'code',\n schema: [\n {\n additionalProperties: false,\n properties: {\n tags: {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"file":"emptyTags.js"}
|
|
@@ -70,7 +70,7 @@ var _default = (0, _iterateJsdoc.default)(({
|
|
|
70
70
|
const {
|
|
71
71
|
description
|
|
72
72
|
} = utils.getDescription();
|
|
73
|
-
validateDescription(description.replace(/\s
|
|
73
|
+
validateDescription(description.replace(/\s+$/u, ''));
|
|
74
74
|
}
|
|
75
75
|
|
|
76
76
|
if (!tags || !Object.keys(tags).length) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/rules/matchDescription.js"],"names":["matchDescriptionDefault","stringOrDefault","value","userDefault","jsdoc","report","context","utils","mainDescription","matchDescription","message","tags","options","validateDescription","description","tag","mainDescriptionMatch","errorMessage","match","tagValue","tagName","regex","getRegexFromString","test","line","source","number","getDescription","replace","Object","keys","length","hasOptionTag","Boolean","forEachPreferredTag","matchingJsdocTag","targetTagName","name","getTagDescription","trim","whitelistedTags","filterTags","tagsWithNames","tagsWithoutNames","getTagsByType","some","contextDefaults","meta","docs","url","schema","additionalProperties","properties","contexts","items","anyOf","type","comment","oneOf","format","patternProperties","enum"],"mappings":"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","sourcesContent":["import iterateJsdoc from '../iterateJsdoc';\n\n// If supporting Node >= 10, we could loosen the default to this for the\n// initial letter: \\\\p{Upper}\nconst matchDescriptionDefault = '^[A-Z`\\\\d_][\\\\s\\\\S]*[.?!`]$';\n\nconst stringOrDefault = (value, userDefault) => {\n return typeof value === 'string' ?\n value :\n userDefault || matchDescriptionDefault;\n};\n\nexport default iterateJsdoc(({\n jsdoc,\n report,\n context,\n utils,\n}) => {\n const {\n mainDescription,\n matchDescription,\n message,\n tags,\n } = context.options[0] || {};\n\n const validateDescription = (description, tag) => {\n let mainDescriptionMatch = mainDescription;\n let errorMessage = message;\n if (typeof mainDescription === 'object') {\n mainDescriptionMatch = mainDescription.match;\n errorMessage = mainDescription.message;\n }\n if (!tag && mainDescriptionMatch === false) {\n return;\n }\n\n let tagValue = mainDescriptionMatch;\n if (tag) {\n const tagName = tag.tag;\n if (typeof tags[tagName] === 'object') {\n tagValue = tags[tagName].match;\n errorMessage = tags[tagName].message;\n } else {\n tagValue = tags[tagName];\n }\n }\n\n const regex = utils.getRegexFromString(\n stringOrDefault(tagValue, matchDescription),\n );\n\n if (!regex.test(description)) {\n report(\n errorMessage || 'JSDoc description does not satisfy the regex pattern.',\n null,\n tag || {\n // Add one as description would typically be into block\n line: jsdoc.source[0].number + 1,\n },\n );\n }\n };\n\n if (jsdoc.description) {\n const {description} = utils.getDescription();\n validateDescription(\n description.replace(/\\s+$/, ''),\n );\n }\n\n if (!tags || !Object.keys(tags).length) {\n return;\n }\n\n const hasOptionTag = (tagName) => {\n return Boolean(tags[tagName]);\n };\n\n utils.forEachPreferredTag('description', (matchingJsdocTag, targetTagName) => {\n const description = (matchingJsdocTag.name + ' ' + utils.getTagDescription(matchingJsdocTag)).trim();\n if (hasOptionTag(targetTagName)) {\n validateDescription(description, matchingJsdocTag);\n }\n }, true);\n\n const whitelistedTags = utils.filterTags(({tag: tagName}) => {\n return hasOptionTag(tagName);\n });\n const {tagsWithNames, tagsWithoutNames} = utils.getTagsByType(whitelistedTags);\n\n tagsWithNames.some((tag) => {\n const description = utils.getTagDescription(tag).replace(/^[- ]*/u, '').trim();\n\n return validateDescription(description, tag);\n });\n\n tagsWithoutNames.some((tag) => {\n const description = (tag.name + ' ' + utils.getTagDescription(tag)).trim();\n\n return validateDescription(description, tag);\n });\n}, {\n contextDefaults: true,\n meta: {\n docs: {\n description: 'Enforces a regular expression pattern on descriptions.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-match-description',\n },\n schema: [\n {\n additionalProperties: false,\n properties: {\n contexts: {\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 mainDescription: {\n oneOf: [\n {\n format: 'regex',\n type: 'string',\n },\n {\n type: 'boolean',\n },\n {\n additionalProperties: false,\n properties: {\n match: {\n oneOf: [\n {\n format: 'regex',\n type: 'string',\n },\n {\n type: 'boolean',\n },\n ],\n },\n message: {\n type: 'string',\n },\n },\n type: 'object',\n },\n ],\n },\n matchDescription: {\n format: 'regex',\n type: 'string',\n },\n message: {\n type: 'string',\n },\n tags: {\n patternProperties: {\n '.*': {\n oneOf: [\n {\n format: 'regex',\n type: 'string',\n },\n {\n enum: [true],\n type: 'boolean',\n },\n {\n additionalProperties: false,\n properties: {\n match: {\n oneOf: [\n {\n format: 'regex',\n type: 'string',\n },\n {\n enum: [true],\n type: 'boolean',\n },\n ],\n },\n message: {\n type: 'string',\n },\n },\n type: 'object',\n },\n ],\n },\n },\n type: 'object',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"file":"matchDescription.js"}
|
|
1
|
+
{"version":3,"sources":["../../src/rules/matchDescription.js"],"names":["matchDescriptionDefault","stringOrDefault","value","userDefault","jsdoc","report","context","utils","mainDescription","matchDescription","message","tags","options","validateDescription","description","tag","mainDescriptionMatch","errorMessage","match","tagValue","tagName","regex","getRegexFromString","test","line","source","number","getDescription","replace","Object","keys","length","hasOptionTag","Boolean","forEachPreferredTag","matchingJsdocTag","targetTagName","name","getTagDescription","trim","whitelistedTags","filterTags","tagsWithNames","tagsWithoutNames","getTagsByType","some","contextDefaults","meta","docs","url","schema","additionalProperties","properties","contexts","items","anyOf","type","comment","oneOf","format","patternProperties","enum"],"mappings":"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","sourcesContent":["import iterateJsdoc from '../iterateJsdoc';\n\n// If supporting Node >= 10, we could loosen the default to this for the\n// initial letter: \\\\p{Upper}\nconst matchDescriptionDefault = '^[A-Z`\\\\d_][\\\\s\\\\S]*[.?!`]$';\n\nconst stringOrDefault = (value, userDefault) => {\n return typeof value === 'string' ?\n value :\n userDefault || matchDescriptionDefault;\n};\n\nexport default iterateJsdoc(({\n jsdoc,\n report,\n context,\n utils,\n}) => {\n const {\n mainDescription,\n matchDescription,\n message,\n tags,\n } = context.options[0] || {};\n\n const validateDescription = (description, tag) => {\n let mainDescriptionMatch = mainDescription;\n let errorMessage = message;\n if (typeof mainDescription === 'object') {\n mainDescriptionMatch = mainDescription.match;\n errorMessage = mainDescription.message;\n }\n\n if (!tag && mainDescriptionMatch === false) {\n return;\n }\n\n let tagValue = mainDescriptionMatch;\n if (tag) {\n const tagName = tag.tag;\n if (typeof tags[tagName] === 'object') {\n tagValue = tags[tagName].match;\n errorMessage = tags[tagName].message;\n } else {\n tagValue = tags[tagName];\n }\n }\n\n const regex = utils.getRegexFromString(\n stringOrDefault(tagValue, matchDescription),\n );\n\n if (!regex.test(description)) {\n report(\n errorMessage || 'JSDoc description does not satisfy the regex pattern.',\n null,\n tag || {\n // Add one as description would typically be into block\n line: jsdoc.source[0].number + 1,\n },\n );\n }\n };\n\n if (jsdoc.description) {\n const {description} = utils.getDescription();\n validateDescription(\n description.replace(/\\s+$/u, ''),\n );\n }\n\n if (!tags || !Object.keys(tags).length) {\n return;\n }\n\n const hasOptionTag = (tagName) => {\n return Boolean(tags[tagName]);\n };\n\n utils.forEachPreferredTag('description', (matchingJsdocTag, targetTagName) => {\n const description = (matchingJsdocTag.name + ' ' + utils.getTagDescription(matchingJsdocTag)).trim();\n if (hasOptionTag(targetTagName)) {\n validateDescription(description, matchingJsdocTag);\n }\n }, true);\n\n const whitelistedTags = utils.filterTags(({tag: tagName}) => {\n return hasOptionTag(tagName);\n });\n const {tagsWithNames, tagsWithoutNames} = utils.getTagsByType(whitelistedTags);\n\n tagsWithNames.some((tag) => {\n const description = utils.getTagDescription(tag).replace(/^[- ]*/u, '')\n .trim();\n\n return validateDescription(description, tag);\n });\n\n tagsWithoutNames.some((tag) => {\n const description = (tag.name + ' ' + utils.getTagDescription(tag)).trim();\n\n return validateDescription(description, tag);\n });\n}, {\n contextDefaults: true,\n meta: {\n docs: {\n description: 'Enforces a regular expression pattern on descriptions.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-match-description',\n },\n schema: [\n {\n additionalProperties: false,\n properties: {\n contexts: {\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 mainDescription: {\n oneOf: [\n {\n format: 'regex',\n type: 'string',\n },\n {\n type: 'boolean',\n },\n {\n additionalProperties: false,\n properties: {\n match: {\n oneOf: [\n {\n format: 'regex',\n type: 'string',\n },\n {\n type: 'boolean',\n },\n ],\n },\n message: {\n type: 'string',\n },\n },\n type: 'object',\n },\n ],\n },\n matchDescription: {\n format: 'regex',\n type: 'string',\n },\n message: {\n type: 'string',\n },\n tags: {\n patternProperties: {\n '.*': {\n oneOf: [\n {\n format: 'regex',\n type: 'string',\n },\n {\n enum: [true],\n type: 'boolean',\n },\n {\n additionalProperties: false,\n properties: {\n match: {\n oneOf: [\n {\n format: 'regex',\n type: 'string',\n },\n {\n enum: [true],\n type: 'boolean',\n },\n ],\n },\n message: {\n type: 'string',\n },\n },\n type: 'object',\n },\n ],\n },\n },\n type: 'object',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"file":"matchDescription.js"}
|
package/dist/rules/matchName.js
CHANGED
|
@@ -9,6 +9,7 @@ var _iterateJsdoc = _interopRequireDefault(require("../iterateJsdoc"));
|
|
|
9
9
|
|
|
10
10
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
11
11
|
|
|
12
|
+
// eslint-disable-next-line complexity
|
|
12
13
|
var _default = (0, _iterateJsdoc.default)(({
|
|
13
14
|
context,
|
|
14
15
|
jsdoc,
|
|
@@ -42,17 +43,18 @@ var _default = (0, _iterateJsdoc.default)(({
|
|
|
42
43
|
}
|
|
43
44
|
|
|
44
45
|
let reported = false;
|
|
45
|
-
|
|
46
|
+
|
|
47
|
+
for (const tag of applicableTags) {
|
|
46
48
|
const allowed = !allowNameRegex || allowNameRegex.test(tag.name);
|
|
47
49
|
const disallowed = disallowNameRegex && disallowNameRegex.test(tag.name);
|
|
48
50
|
const hasRegex = allowNameRegex || disallowNameRegex;
|
|
49
51
|
|
|
50
52
|
if (hasRegex && allowed && !disallowed) {
|
|
51
|
-
|
|
53
|
+
continue;
|
|
52
54
|
}
|
|
53
55
|
|
|
54
56
|
if (!hasRegex && reported) {
|
|
55
|
-
|
|
57
|
+
continue;
|
|
56
58
|
}
|
|
57
59
|
|
|
58
60
|
const fixer = () => {
|
|
@@ -82,7 +84,7 @@ var _default = (0, _iterateJsdoc.default)(({
|
|
|
82
84
|
if (!hasRegex) {
|
|
83
85
|
reported = true;
|
|
84
86
|
}
|
|
85
|
-
}
|
|
87
|
+
}
|
|
86
88
|
}, {
|
|
87
89
|
matchContext: true,
|
|
88
90
|
meta: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/rules/matchName.js"],"names":["context","jsdoc","report","info","lastIndex","utils","match","options","allowName","disallowName","replacement","tags","allowNameRegex","getRegexFromString","disallowNameRegex","applicableTags","includes","getPresentTags","reported","
|
|
1
|
+
{"version":3,"sources":["../../src/rules/matchName.js"],"names":["context","jsdoc","report","info","lastIndex","utils","match","options","allowName","disallowName","replacement","tags","allowNameRegex","getRegexFromString","disallowNameRegex","applicableTags","includes","getPresentTags","reported","tag","allowed","test","name","disallowed","hasRegex","fixer","source","tokens","replace","message","reportJSDoc","undefined","matchContext","meta","docs","description","url","fixable","schema","additionalProperies","properties","items","type","comment","required"],"mappings":"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","sourcesContent":["import iterateJsdoc from '../iterateJsdoc';\n\n// eslint-disable-next-line complexity\nexport default iterateJsdoc(({\n context,\n jsdoc,\n report,\n info: {lastIndex},\n utils,\n}) => {\n const {match} = context.options[0] || {};\n if (!match) {\n report('Rule `no-restricted-syntax` is missing a `match` option.');\n\n return;\n }\n\n const {\n allowName,\n disallowName,\n replacement,\n tags = ['*'],\n } = match[lastIndex];\n\n const allowNameRegex = allowName && utils.getRegexFromString(allowName);\n const disallowNameRegex = disallowName && utils.getRegexFromString(disallowName);\n\n let applicableTags = jsdoc.tags;\n if (!tags.includes('*')) {\n applicableTags = utils.getPresentTags(tags);\n }\n\n let reported = false;\n for (const tag of applicableTags) {\n const allowed = !allowNameRegex || allowNameRegex.test(tag.name);\n const disallowed = disallowNameRegex && disallowNameRegex.test(tag.name);\n const hasRegex = allowNameRegex || disallowNameRegex;\n if (hasRegex && allowed && !disallowed) {\n continue;\n }\n\n if (!hasRegex && reported) {\n continue;\n }\n\n const fixer = () => {\n tag.source[0].tokens.name = tag.source[0].tokens.name.replace(\n disallowNameRegex, replacement,\n );\n };\n\n let {message} = match[lastIndex];\n if (!message) {\n if (hasRegex) {\n message = disallowed ?\n `Only allowing names not matching \\`${disallowNameRegex}\\` but found \"${tag.name}\".` :\n `Only allowing names matching \\`${allowNameRegex}\\` but found \"${tag.name}\".`;\n } else {\n message = `Prohibited context for \"${tag.name}\".`;\n }\n }\n\n utils.reportJSDoc(\n message,\n hasRegex ? tag : null,\n\n // We could match up\n disallowNameRegex && replacement !== undefined ?\n fixer :\n null,\n false,\n {\n // Could also supply `context`, `comment`, `tags`\n allowName,\n disallowName,\n name: tag.name,\n },\n );\n if (!hasRegex) {\n reported = true;\n }\n }\n}, {\n matchContext: true,\n meta: {\n docs: {\n description: 'Reports the name portion of a JSDoc tag if matching or not matching a given regular expression.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-match-name',\n },\n fixable: 'code',\n schema: [\n {\n additionalProperies: false,\n properties: {\n match: {\n additionalProperies: false,\n items: {\n properties: {\n allowName: {\n type: 'string',\n },\n comment: {\n type: 'string',\n },\n context: {\n type: 'string',\n },\n disallowName: {\n type: 'string',\n },\n message: {\n type: 'string',\n },\n tags: {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n },\n type: 'object',\n },\n type: 'array',\n },\n },\n required: ['match'],\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"file":"matchName.js"}
|
|
@@ -85,9 +85,11 @@ var _default = (0, _iterateJsdoc.default)(({
|
|
|
85
85
|
const {
|
|
86
86
|
delimiter
|
|
87
87
|
} = line;
|
|
88
|
-
|
|
88
|
+
|
|
89
|
+
for (const prop of ['delimiter', 'postDelimiter', 'tag', 'type', 'lineEnd', 'postType', 'postTag', 'name', 'postName', 'description']) {
|
|
89
90
|
finalLineTokens[prop] = '';
|
|
90
|
-
}
|
|
91
|
+
}
|
|
92
|
+
|
|
91
93
|
utils.addLine(jsdoc.source.length - 1, { ...line,
|
|
92
94
|
delimiter,
|
|
93
95
|
end: ''
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/rules/multilineBlocks.js"],"names":["context","jsdoc","utils","allowMultipleTags","noFinalLineText","noZeroLineText","noSingleLineBlocks","singleLineTags","noMultilineBlocks","minimumLengthForMultiline","Number","POSITIVE_INFINITY","multilineTags","options","source","tokens","description","tag","sourceLength","length","isInvalidSingleLine","tagName","includes","slice","fixer","makeMultiline","reportJSDoc","lineChecks","line","emptyTokens","delimiter","start","addLine","finalLine","finalLineTokens","trim","trimEnd","forEach","prop","end","tags","hasATag","filterTags","tg","number","reduce","obj","desc","type","typ","name","nme","lineEnd","postType","postName","postTag","nameOrDescription","seedTokens","postDelimiter","iterateAllJsdocs","meta","docs","url","fixable","schema","additionalProperies","properties","anyOf","enum","items"],"mappings":"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","sourcesContent":["import iterateJsdoc from '../iterateJsdoc';\n\nexport default iterateJsdoc(({\n context,\n jsdoc,\n utils,\n}) => {\n const {\n allowMultipleTags = true,\n noFinalLineText = true,\n noZeroLineText = true,\n noSingleLineBlocks = false,\n singleLineTags = ['lends', 'type'],\n noMultilineBlocks = false,\n minimumLengthForMultiline = Number.POSITIVE_INFINITY,\n multilineTags = ['*'],\n } = context.options[0] || {};\n\n const {source: [{tokens}]} = jsdoc;\n const {description, tag} = tokens;\n const sourceLength = jsdoc.source.length;\n\n const isInvalidSingleLine = (tagName) => {\n return noSingleLineBlocks &&\n (!tagName ||\n !singleLineTags.includes(tagName) && !singleLineTags.includes('*'));\n };\n\n if (sourceLength === 1) {\n if (!isInvalidSingleLine(tag.slice(1))) {\n return;\n }\n\n const fixer = () => {\n utils.makeMultiline();\n };\n\n utils.reportJSDoc(\n 'Single line blocks are not permitted by your configuration.',\n null, fixer, true,\n );\n\n return;\n }\n\n const lineChecks = () => {\n if (\n noZeroLineText &&\n (tag || description)\n ) {\n const fixer = () => {\n const line = {...tokens};\n utils.emptyTokens(tokens);\n const {tokens: {delimiter, start}} = jsdoc.source[1];\n utils.addLine(1, {...line, delimiter, start});\n };\n utils.reportJSDoc(\n 'Should have no text on the \"0th\" line (after the `/**`).',\n null, fixer,\n );\n\n return;\n }\n\n const finalLine = jsdoc.source[jsdoc.source.length - 1];\n const finalLineTokens = finalLine.tokens;\n if (\n noFinalLineText &&\n finalLineTokens.description.trim()\n ) {\n const fixer = () => {\n const line = {...finalLineTokens};\n line.description = line.description.trimEnd();\n\n const {delimiter} = line;\n\n [\n 'delimiter',\n 'postDelimiter',\n 'tag',\n 'type',\n 'lineEnd',\n 'postType',\n 'postTag',\n 'name',\n 'postName',\n 'description',\n ].forEach((prop) => {\n finalLineTokens[prop] = '';\n });\n\n utils.addLine(jsdoc.source.length - 1, {...line, delimiter, end: ''});\n };\n utils.reportJSDoc(\n 'Should have no text on the final line (before the `*/`).',\n null, fixer,\n );\n }\n };\n\n if (noMultilineBlocks) {\n if (\n jsdoc.tags.length &&\n (multilineTags.includes('*') || utils.hasATag(multilineTags))\n ) {\n lineChecks();\n\n return;\n }\n\n if (jsdoc.description.length >= minimumLengthForMultiline) {\n lineChecks();\n\n return;\n }\n\n if (\n noSingleLineBlocks &&\n (!jsdoc.tags.length ||\n !utils.filterTags(({tag: tg}) => {\n return !isInvalidSingleLine(tg);\n }).length)\n ) {\n utils.reportJSDoc(\n 'Multiline jsdoc blocks are prohibited by ' +\n 'your configuration but fixing would result in a single ' +\n 'line block which you have prohibited with `noSingleLineBlocks`.',\n );\n\n return;\n }\n\n if (jsdoc.tags.length > 1) {\n if (!allowMultipleTags) {\n utils.reportJSDoc(\n 'Multiline jsdoc blocks are prohibited by ' +\n 'your configuration but the block has multiple tags.',\n );\n\n return;\n }\n } else if (jsdoc.tags.length === 1 && jsdoc.description.trim()) {\n if (!allowMultipleTags) {\n utils.reportJSDoc(\n 'Multiline jsdoc blocks are prohibited by ' +\n 'your configuration but the block has a description with a tag.',\n );\n\n return;\n }\n } else {\n const fixer = () => {\n jsdoc.source = [{\n number: 1,\n source: '',\n tokens: jsdoc.source.reduce((obj, {\n tokens: {\n description: desc, tag: tg, type: typ, name: nme,\n lineEnd, postType, postName, postTag,\n },\n }) => {\n if (typ) {\n obj.type = typ;\n }\n if (tg && typ && nme) {\n obj.postType = postType;\n }\n if (nme) {\n obj.name += nme;\n }\n if (nme && desc) {\n obj.postName = postName;\n }\n obj.description += desc;\n\n const nameOrDescription = obj.description || obj.name;\n if (\n nameOrDescription && nameOrDescription.slice(-1) !== ' '\n ) {\n obj.description += ' ';\n }\n obj.lineEnd = lineEnd;\n\n // Already filtered for multiple tags\n obj.tag += tg;\n if (tg) {\n obj.postTag = postTag || ' ';\n }\n\n return obj;\n }, utils.seedTokens({\n delimiter: '/**',\n end: '*/',\n postDelimiter: ' ',\n })),\n }];\n };\n utils.reportJSDoc(\n 'Multiline jsdoc blocks are prohibited by ' +\n 'your configuration.',\n null, fixer,\n );\n\n return;\n }\n }\n\n lineChecks();\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Controls how and whether jsdoc blocks can be expressed as single or multiple line blocks.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-multiline-blocks',\n },\n fixable: 'code',\n schema: [\n {\n additionalProperies: false,\n properties: {\n allowMultipleTags: {\n type: 'boolean',\n },\n minimumLengthForMultiline: {\n type: 'integer',\n },\n multilineTags: {\n anyOf: [\n {\n enum: ['*'],\n type: 'string',\n }, {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n ],\n },\n noFinalLineText: {\n type: 'boolean',\n },\n noMultilineBlocks: {\n type: 'boolean',\n },\n noSingleLineBlocks: {\n type: 'boolean',\n },\n noZeroLineText: {\n type: 'boolean',\n },\n singleLineTags: {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"file":"multilineBlocks.js"}
|
|
1
|
+
{"version":3,"sources":["../../src/rules/multilineBlocks.js"],"names":["context","jsdoc","utils","allowMultipleTags","noFinalLineText","noZeroLineText","noSingleLineBlocks","singleLineTags","noMultilineBlocks","minimumLengthForMultiline","Number","POSITIVE_INFINITY","multilineTags","options","source","tokens","description","tag","sourceLength","length","isInvalidSingleLine","tagName","includes","slice","fixer","makeMultiline","reportJSDoc","lineChecks","line","emptyTokens","delimiter","start","addLine","finalLine","finalLineTokens","trim","trimEnd","prop","end","tags","hasATag","filterTags","tg","number","reduce","obj","desc","type","typ","name","nme","lineEnd","postType","postName","postTag","nameOrDescription","seedTokens","postDelimiter","iterateAllJsdocs","meta","docs","url","fixable","schema","additionalProperies","properties","anyOf","enum","items"],"mappings":"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","sourcesContent":["import iterateJsdoc from '../iterateJsdoc';\n\nexport default iterateJsdoc(({\n context,\n jsdoc,\n utils,\n}) => {\n const {\n allowMultipleTags = true,\n noFinalLineText = true,\n noZeroLineText = true,\n noSingleLineBlocks = false,\n singleLineTags = ['lends', 'type'],\n noMultilineBlocks = false,\n minimumLengthForMultiline = Number.POSITIVE_INFINITY,\n multilineTags = ['*'],\n } = context.options[0] || {};\n\n const {source: [{tokens}]} = jsdoc;\n const {description, tag} = tokens;\n const sourceLength = jsdoc.source.length;\n\n const isInvalidSingleLine = (tagName) => {\n return noSingleLineBlocks &&\n (!tagName ||\n !singleLineTags.includes(tagName) && !singleLineTags.includes('*'));\n };\n\n if (sourceLength === 1) {\n if (!isInvalidSingleLine(tag.slice(1))) {\n return;\n }\n\n const fixer = () => {\n utils.makeMultiline();\n };\n\n utils.reportJSDoc(\n 'Single line blocks are not permitted by your configuration.',\n null,\n fixer,\n true,\n );\n\n return;\n }\n\n const lineChecks = () => {\n if (\n noZeroLineText &&\n (tag || description)\n ) {\n const fixer = () => {\n const line = {...tokens};\n utils.emptyTokens(tokens);\n const {tokens: {delimiter, start}} = jsdoc.source[1];\n utils.addLine(1, {...line, delimiter, start});\n };\n\n utils.reportJSDoc(\n 'Should have no text on the \"0th\" line (after the `/**`).',\n null,\n fixer,\n );\n\n return;\n }\n\n const finalLine = jsdoc.source[jsdoc.source.length - 1];\n const finalLineTokens = finalLine.tokens;\n if (\n noFinalLineText &&\n finalLineTokens.description.trim()\n ) {\n const fixer = () => {\n const line = {...finalLineTokens};\n line.description = line.description.trimEnd();\n\n const {delimiter} = line;\n\n for (const prop of [\n 'delimiter',\n 'postDelimiter',\n 'tag',\n 'type',\n 'lineEnd',\n 'postType',\n 'postTag',\n 'name',\n 'postName',\n 'description',\n ]) {\n finalLineTokens[prop] = '';\n }\n\n utils.addLine(jsdoc.source.length - 1, {...line, delimiter, end: ''});\n };\n\n utils.reportJSDoc(\n 'Should have no text on the final line (before the `*/`).',\n null,\n fixer,\n );\n }\n };\n\n if (noMultilineBlocks) {\n if (\n jsdoc.tags.length &&\n (multilineTags.includes('*') || utils.hasATag(multilineTags))\n ) {\n lineChecks();\n\n return;\n }\n\n if (jsdoc.description.length >= minimumLengthForMultiline) {\n lineChecks();\n\n return;\n }\n\n if (\n noSingleLineBlocks &&\n (!jsdoc.tags.length ||\n !utils.filterTags(({tag: tg}) => {\n return !isInvalidSingleLine(tg);\n }).length)\n ) {\n utils.reportJSDoc(\n 'Multiline jsdoc blocks are prohibited by ' +\n 'your configuration but fixing would result in a single ' +\n 'line block which you have prohibited with `noSingleLineBlocks`.',\n );\n\n return;\n }\n\n if (jsdoc.tags.length > 1) {\n if (!allowMultipleTags) {\n utils.reportJSDoc(\n 'Multiline jsdoc blocks are prohibited by ' +\n 'your configuration but the block has multiple tags.',\n );\n\n return;\n }\n } else if (jsdoc.tags.length === 1 && jsdoc.description.trim()) {\n if (!allowMultipleTags) {\n utils.reportJSDoc(\n 'Multiline jsdoc blocks are prohibited by ' +\n 'your configuration but the block has a description with a tag.',\n );\n\n return;\n }\n } else {\n const fixer = () => {\n jsdoc.source = [{\n number: 1,\n source: '',\n tokens: jsdoc.source.reduce((obj, {\n tokens: {\n description: desc, tag: tg, type: typ, name: nme,\n lineEnd, postType, postName, postTag,\n },\n }) => {\n if (typ) {\n obj.type = typ;\n }\n\n if (tg && typ && nme) {\n obj.postType = postType;\n }\n\n if (nme) {\n obj.name += nme;\n }\n\n if (nme && desc) {\n obj.postName = postName;\n }\n\n obj.description += desc;\n\n const nameOrDescription = obj.description || obj.name;\n if (\n nameOrDescription && nameOrDescription.slice(-1) !== ' '\n ) {\n obj.description += ' ';\n }\n\n obj.lineEnd = lineEnd;\n\n // Already filtered for multiple tags\n obj.tag += tg;\n if (tg) {\n obj.postTag = postTag || ' ';\n }\n\n return obj;\n }, utils.seedTokens({\n delimiter: '/**',\n end: '*/',\n postDelimiter: ' ',\n })),\n }];\n };\n\n utils.reportJSDoc(\n 'Multiline jsdoc blocks are prohibited by ' +\n 'your configuration.',\n null,\n fixer,\n );\n\n return;\n }\n }\n\n lineChecks();\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Controls how and whether jsdoc blocks can be expressed as single or multiple line blocks.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-multiline-blocks',\n },\n fixable: 'code',\n schema: [\n {\n additionalProperies: false,\n properties: {\n allowMultipleTags: {\n type: 'boolean',\n },\n minimumLengthForMultiline: {\n type: 'integer',\n },\n multilineTags: {\n anyOf: [\n {\n enum: ['*'],\n type: 'string',\n }, {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n ],\n },\n noFinalLineText: {\n type: 'boolean',\n },\n noMultilineBlocks: {\n type: 'boolean',\n },\n noSingleLineBlocks: {\n type: 'boolean',\n },\n noZeroLineText: {\n type: 'boolean',\n },\n singleLineTags: {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"file":"multilineBlocks.js"}
|
|
@@ -36,7 +36,7 @@ var _default = (0, _iterateJsdoc.default)(({
|
|
|
36
36
|
description,
|
|
37
37
|
lastDescriptionLine
|
|
38
38
|
} = utils.getDescription();
|
|
39
|
-
const descriptionEndsWithANewline = /\n\r
|
|
39
|
+
const descriptionEndsWithANewline = /\n\r?$/u.test(description);
|
|
40
40
|
|
|
41
41
|
if (always) {
|
|
42
42
|
if (!descriptionEndsWithANewline) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/rules/newlineAfterDescription.js"],"names":["jsdoc","report","context","jsdocNode","sourceCode","indent","utils","always","description","trim","tags","length","_","has","options","lastDescriptionLine","getDescription","descriptionEndsWithANewline","test","sourceLines","getText","split","fixer","injectedLine","endsWith","splice","replaceText","join","line","iterateAllJsdocs","meta","docs","url","fixable","schema","enum","type"],"mappings":";;;;;;;AAAA;;AACA;;;;eAEe,2BAAa,CAAC;AAC3BA,EAAAA,KAD2B;AAE3BC,EAAAA,MAF2B;AAG3BC,EAAAA,OAH2B;AAI3BC,EAAAA,SAJ2B;AAK3BC,EAAAA,UAL2B;AAM3BC,EAAAA,MAN2B;AAO3BC,EAAAA;AAP2B,CAAD,KAQtB;AACJ,MAAIC,MAAJ;;AAEA,MAAI,CAACP,KAAK,CAACQ,WAAN,CAAkBC,IAAlB,EAAD,IAA6B,CAACT,KAAK,CAACU,IAAN,CAAWC,MAA7C,EAAqD;AACnD;AACD;;AAED,MAAIC,gBAAEC,GAAF,CAAMX,OAAO,CAACY,OAAd,EAAuB,CAAvB,CAAJ,EAA+B;AAC7BP,IAAAA,MAAM,GAAGL,OAAO,CAACY,OAAR,CAAgB,CAAhB,MAAuB,QAAhC;AACD,GAFD,MAEO;AACLP,IAAAA,MAAM,GAAG,IAAT;AACD;;AAED,QAAM;AAACC,IAAAA,WAAD;AAAcO,IAAAA;AAAd,MAAqCT,KAAK,CAACU,cAAN,EAA3C;AACA,QAAMC,2BAA2B,GAAI,
|
|
1
|
+
{"version":3,"sources":["../../src/rules/newlineAfterDescription.js"],"names":["jsdoc","report","context","jsdocNode","sourceCode","indent","utils","always","description","trim","tags","length","_","has","options","lastDescriptionLine","getDescription","descriptionEndsWithANewline","test","sourceLines","getText","split","fixer","injectedLine","endsWith","splice","replaceText","join","line","iterateAllJsdocs","meta","docs","url","fixable","schema","enum","type"],"mappings":";;;;;;;AAAA;;AACA;;;;eAEe,2BAAa,CAAC;AAC3BA,EAAAA,KAD2B;AAE3BC,EAAAA,MAF2B;AAG3BC,EAAAA,OAH2B;AAI3BC,EAAAA,SAJ2B;AAK3BC,EAAAA,UAL2B;AAM3BC,EAAAA,MAN2B;AAO3BC,EAAAA;AAP2B,CAAD,KAQtB;AACJ,MAAIC,MAAJ;;AAEA,MAAI,CAACP,KAAK,CAACQ,WAAN,CAAkBC,IAAlB,EAAD,IAA6B,CAACT,KAAK,CAACU,IAAN,CAAWC,MAA7C,EAAqD;AACnD;AACD;;AAED,MAAIC,gBAAEC,GAAF,CAAMX,OAAO,CAACY,OAAd,EAAuB,CAAvB,CAAJ,EAA+B;AAC7BP,IAAAA,MAAM,GAAGL,OAAO,CAACY,OAAR,CAAgB,CAAhB,MAAuB,QAAhC;AACD,GAFD,MAEO;AACLP,IAAAA,MAAM,GAAG,IAAT;AACD;;AAED,QAAM;AAACC,IAAAA,WAAD;AAAcO,IAAAA;AAAd,MAAqCT,KAAK,CAACU,cAAN,EAA3C;AACA,QAAMC,2BAA2B,GAAI,SAAD,CAAYC,IAAZ,CAAiBV,WAAjB,CAApC;;AAEA,MAAID,MAAJ,EAAY;AACV,QAAI,CAACU,2BAAL,EAAkC;AAChC,YAAME,WAAW,GAAGf,UAAU,CAACgB,OAAX,CAAmBjB,SAAnB,EAA8BkB,KAA9B,CAAoC,IAApC,CAApB;AAEApB,MAAAA,MAAM,CAAC,mEAAD,EAAuEqB,KAAD,IAAW;AACrF;AACA,cAAMC,YAAY,GAAI,GAAElB,MAAO,IAAV,IAClBc,WAAW,CAACJ,mBAAD,CAAX,CAAiCS,QAAjC,CAA0C,IAA1C,IAAkD,IAAlD,GAAyD,EADvC,CAArB;AAEAL,QAAAA,WAAW,CAACM,MAAZ,CAAmBV,mBAAmB,GAAG,CAAzC,EAA4C,CAA5C,EAA+CQ,YAA/C;AAEA,eAAOD,KAAK,CAACI,WAAN,CAAkBvB,SAAlB,EAA6BgB,WAAW,CAACQ,IAAZ,CAAiB,IAAjB,CAA7B,CAAP;AACD,OAPK,EAOH;AACDC,QAAAA,IAAI,EAAEb;AADL,OAPG,CAAN;AAUD;AACF,GAfD,MAeO,IAAIE,2BAAJ,EAAiC;AACtC,UAAME,WAAW,GAAGf,UAAU,CAACgB,OAAX,CAAmBjB,SAAnB,EAA8BkB,KAA9B,CAAoC,IAApC,CAApB;AACApB,IAAAA,MAAM,CAAC,oEAAD,EAAwEqB,KAAD,IAAW;AACtF;AACAH,MAAAA,WAAW,CAACM,MAAZ,CAAmBV,mBAAnB,EAAwC,CAAxC;AAEA,aAAOO,KAAK,CAACI,WAAN,CAAkBvB,SAAlB,EAA6BgB,WAAW,CAACQ,IAAZ,CAAiB,IAAjB,CAA7B,CAAP;AACD,KALK,EAKH;AACDC,MAAAA,IAAI,EAAEb;AADL,KALG,CAAN;AAQD;AACF,CAlDc,EAkDZ;AACDc,EAAAA,gBAAgB,EAAE,IADjB;AAEDC,EAAAA,IAAI,EAAE;AACJC,IAAAA,IAAI,EAAE;AACJvB,MAAAA,WAAW,EAAE,yDADT;AAEJwB,MAAAA,GAAG,EAAE;AAFD,KADF;AAKJC,IAAAA,OAAO,EAAE,YALL;AAMJC,IAAAA,MAAM,EAAE,CACN;AACEC,MAAAA,IAAI,EAAE,CAAC,QAAD,EAAW,OAAX,CADR;AAEEC,MAAAA,IAAI,EAAE;AAFR,KADM,CANJ;AAYJA,IAAAA,IAAI,EAAE;AAZF;AAFL,CAlDY,C","sourcesContent":["import _ from 'lodash';\nimport iterateJsdoc from '../iterateJsdoc';\n\nexport default iterateJsdoc(({\n jsdoc,\n report,\n context,\n jsdocNode,\n sourceCode,\n indent,\n utils,\n}) => {\n let always;\n\n if (!jsdoc.description.trim() || !jsdoc.tags.length) {\n return;\n }\n\n if (_.has(context.options, 0)) {\n always = context.options[0] === 'always';\n } else {\n always = true;\n }\n\n const {description, lastDescriptionLine} = utils.getDescription();\n const descriptionEndsWithANewline = (/\\n\\r?$/u).test(description);\n\n if (always) {\n if (!descriptionEndsWithANewline) {\n const sourceLines = sourceCode.getText(jsdocNode).split('\\n');\n\n report('There must be a newline after the description of the JSDoc block.', (fixer) => {\n // Add the new line\n const injectedLine = `${indent} *` +\n (sourceLines[lastDescriptionLine].endsWith('\\r') ? '\\r' : '');\n sourceLines.splice(lastDescriptionLine + 1, 0, injectedLine);\n\n return fixer.replaceText(jsdocNode, sourceLines.join('\\n'));\n }, {\n line: lastDescriptionLine,\n });\n }\n } else if (descriptionEndsWithANewline) {\n const sourceLines = sourceCode.getText(jsdocNode).split('\\n');\n report('There must be no newline after the description of the JSDoc block.', (fixer) => {\n // Remove the extra line\n sourceLines.splice(lastDescriptionLine, 1);\n\n return fixer.replaceText(jsdocNode, sourceLines.join('\\n'));\n }, {\n line: lastDescriptionLine,\n });\n }\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Enforces a consistent padding of the block description.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-newline-after-description',\n },\n fixable: 'whitespace',\n schema: [\n {\n enum: ['always', 'never'],\n type: 'string',\n },\n ],\n type: 'layout',\n },\n});\n"],"file":"newlineAfterDescription.js"}
|
|
@@ -62,8 +62,8 @@ var _default = (0, _iterateJsdoc.default)(({
|
|
|
62
62
|
return;
|
|
63
63
|
}
|
|
64
64
|
|
|
65
|
-
|
|
66
|
-
const report = makeReport(context, node);
|
|
65
|
+
for (const node of nonJsdocNodes) {
|
|
66
|
+
const report = makeReport(context, node); // eslint-disable-next-line no-loop-func
|
|
67
67
|
|
|
68
68
|
const fix = fixer => {
|
|
69
69
|
const text = sourceCode.getText(node);
|
|
@@ -71,7 +71,7 @@ var _default = (0, _iterateJsdoc.default)(({
|
|
|
71
71
|
};
|
|
72
72
|
|
|
73
73
|
report('Expected JSDoc-like comment to begin with two asterisks.', fix);
|
|
74
|
-
}
|
|
74
|
+
}
|
|
75
75
|
}, {
|
|
76
76
|
checkFile: true,
|
|
77
77
|
meta: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/rules/noBadBlocks.js"],"names":["commentRegexp","extraAsteriskCommentRegexp","context","sourceCode","allComments","makeReport","ignore","preventAllMultiAsteriskBlocks","options","extraAsterisks","nonJsdocNodes","filter","comment","commentText","getText","sliceIndex","test","multiline","exec","length","tags","slice","some","tag","includes","
|
|
1
|
+
{"version":3,"sources":["../../src/rules/noBadBlocks.js"],"names":["commentRegexp","extraAsteriskCommentRegexp","context","sourceCode","allComments","makeReport","ignore","preventAllMultiAsteriskBlocks","options","extraAsterisks","nonJsdocNodes","filter","comment","commentText","getText","sliceIndex","test","multiline","exec","length","tags","slice","some","tag","includes","node","report","fix","fixer","text","replaceText","replace","checkFile","meta","docs","description","url","fixable","schema","additionalProperties","properties","items","type"],"mappings":"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","sourcesContent":["import {\n parse as commentParser,\n} from 'comment-parser';\nimport iterateJsdoc from '../iterateJsdoc';\n\n// Neither a single nor 3+ asterisks are valid jsdoc per\n// https://jsdoc.app/about-getting-started.html#adding-documentation-comments-to-your-code\nconst commentRegexp = /^\\/\\*(?!\\*)/u;\nconst extraAsteriskCommentRegexp = /^\\/\\*{3,}/u;\n\nexport default iterateJsdoc(({\n context,\n sourceCode,\n allComments,\n makeReport,\n}) => {\n const [\n {\n ignore = [\n 'ts-check',\n 'ts-expect-error',\n 'ts-ignore',\n 'ts-nocheck',\n ],\n preventAllMultiAsteriskBlocks = false,\n } = {},\n ] = context.options;\n\n let extraAsterisks = false;\n const nonJsdocNodes = allComments.filter((comment) => {\n const commentText = sourceCode.getText(comment);\n let sliceIndex = 2;\n if (!commentRegexp.test(commentText)) {\n const multiline = extraAsteriskCommentRegexp.exec(commentText)?.[0];\n if (!multiline) {\n return false;\n }\n\n sliceIndex = multiline.length;\n extraAsterisks = true;\n if (preventAllMultiAsteriskBlocks) {\n return true;\n }\n }\n\n const [{tags = {}} = {}] = commentParser(\n `${commentText.slice(0, 2)}*${commentText.slice(sliceIndex)}`,\n );\n\n return tags.length && !tags.some(({tag}) => {\n return ignore.includes(tag);\n });\n });\n\n if (!nonJsdocNodes.length) {\n return;\n }\n\n for (const node of nonJsdocNodes) {\n const report = makeReport(context, node);\n\n // eslint-disable-next-line no-loop-func\n const fix = (fixer) => {\n const text = sourceCode.getText(node);\n\n return fixer.replaceText(\n node,\n extraAsterisks ?\n text.replace(extraAsteriskCommentRegexp, '/**') :\n text.replace('/*', '/**'),\n );\n };\n\n report('Expected JSDoc-like comment to begin with two asterisks.', fix);\n }\n}, {\n checkFile: true,\n meta: {\n docs: {\n description: 'This rule checks for multi-line-style comments which fail to meet the criteria of a jsdoc block.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-no-bad-blocks',\n },\n fixable: 'code',\n schema: [\n {\n additionalProperties: false,\n properties: {\n ignore: {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n preventAllMultiAsteriskBlocks: {\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n type: 'layout',\n },\n});\n"],"file":"noBadBlocks.js"}
|