eslint-plugin-jsdoc 37.3.0 → 37.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +54 -7
- package/dist/rules/requireReturnsCheck.js +9 -2
- package/dist/rules/requireReturnsCheck.js.map +1 -1
- package/dist/rules/requireThrows.js +4 -0
- package/dist/rules/requireThrows.js.map +1 -1
- package/dist/rules/requireYieldsCheck.js +8 -0
- package/dist/rules/requireYieldsCheck.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -16507,6 +16507,22 @@ async function foo() {
|
|
|
16507
16507
|
function quux () {}
|
|
16508
16508
|
// "jsdoc/require-returns-check": ["error"|"warn", {"reportMissingReturnForUndefinedTypes":true}]
|
|
16509
16509
|
// Message: JSDoc @returns declaration present but return expression not available in function.
|
|
16510
|
+
|
|
16511
|
+
/**
|
|
16512
|
+
* @returns {never} Foo.
|
|
16513
|
+
*/
|
|
16514
|
+
function quux () {
|
|
16515
|
+
return undefined;
|
|
16516
|
+
}
|
|
16517
|
+
// Message: JSDoc @returns declaration set with "never" but return expression is present in function.
|
|
16518
|
+
|
|
16519
|
+
/**
|
|
16520
|
+
* @returns {never}
|
|
16521
|
+
*/
|
|
16522
|
+
function quux (foo) {
|
|
16523
|
+
return foo;
|
|
16524
|
+
}
|
|
16525
|
+
// Message: JSDoc @returns declaration set with "never" but return expression is present in function.
|
|
16510
16526
|
````
|
|
16511
16527
|
|
|
16512
16528
|
The following patterns are not considered problems:
|
|
@@ -16643,13 +16659,6 @@ function quux () {
|
|
|
16643
16659
|
function quux () {
|
|
16644
16660
|
}
|
|
16645
16661
|
|
|
16646
|
-
/**
|
|
16647
|
-
* @returns {never} Foo.
|
|
16648
|
-
*/
|
|
16649
|
-
function quux () {
|
|
16650
|
-
return undefined;
|
|
16651
|
-
}
|
|
16652
|
-
|
|
16653
16662
|
/**
|
|
16654
16663
|
* @returns {void} Foo.
|
|
16655
16664
|
*/
|
|
@@ -18445,6 +18454,14 @@ const directThrowAfterArrow = (b) => {
|
|
|
18445
18454
|
return a;
|
|
18446
18455
|
};
|
|
18447
18456
|
// Message: Missing JSDoc @throws declaration.
|
|
18457
|
+
|
|
18458
|
+
/**
|
|
18459
|
+
* @throws {never}
|
|
18460
|
+
*/
|
|
18461
|
+
function quux (foo) {
|
|
18462
|
+
throw new Error('err')
|
|
18463
|
+
}
|
|
18464
|
+
// Message: JSDoc @throws declaration set to "never" but throw value found.
|
|
18448
18465
|
````
|
|
18449
18466
|
|
|
18450
18467
|
The following patterns are not considered problems:
|
|
@@ -18466,6 +18483,13 @@ function quux (foo) {
|
|
|
18466
18483
|
} catch(e) {}
|
|
18467
18484
|
}
|
|
18468
18485
|
|
|
18486
|
+
/**
|
|
18487
|
+
* @throws {object}
|
|
18488
|
+
*/
|
|
18489
|
+
function quux (foo) {
|
|
18490
|
+
throw new Error('err')
|
|
18491
|
+
}
|
|
18492
|
+
|
|
18469
18493
|
/**
|
|
18470
18494
|
* @inheritdoc
|
|
18471
18495
|
*/
|
|
@@ -18509,6 +18533,12 @@ const nested = () => () => {throw new Error('oops');};
|
|
|
18509
18533
|
async function foo() {
|
|
18510
18534
|
throw Error("bar");
|
|
18511
18535
|
}
|
|
18536
|
+
|
|
18537
|
+
/**
|
|
18538
|
+
* @throws {never}
|
|
18539
|
+
*/
|
|
18540
|
+
function quux (foo) {
|
|
18541
|
+
}
|
|
18512
18542
|
````
|
|
18513
18543
|
|
|
18514
18544
|
|
|
@@ -19493,6 +19523,23 @@ async function * quux() {}
|
|
|
19493
19523
|
*/
|
|
19494
19524
|
const quux = async function * () {}
|
|
19495
19525
|
// Message: JSDoc @yields declaration present but yield expression not available in function.
|
|
19526
|
+
|
|
19527
|
+
/**
|
|
19528
|
+
* @yields {never} Foo.
|
|
19529
|
+
*/
|
|
19530
|
+
function * quux () {
|
|
19531
|
+
yield 5;
|
|
19532
|
+
}
|
|
19533
|
+
// Message: JSDoc @yields declaration set with "never" but yield expression is present in function.
|
|
19534
|
+
|
|
19535
|
+
/**
|
|
19536
|
+
* @next {never}
|
|
19537
|
+
*/
|
|
19538
|
+
function * quux (foo) {
|
|
19539
|
+
const a = yield;
|
|
19540
|
+
}
|
|
19541
|
+
// "jsdoc/require-yields-check": ["error"|"warn", {"next":true}]
|
|
19542
|
+
// Message: JSDoc @next declaration set with "never" but yield expression with return value is present in function.
|
|
19496
19543
|
````
|
|
19497
19544
|
|
|
19498
19545
|
The following patterns are not considered problems:
|
|
@@ -67,9 +67,16 @@ var _default = (0, _iterateJsdoc.default)(({
|
|
|
67
67
|
return;
|
|
68
68
|
}
|
|
69
69
|
|
|
70
|
-
const [tag] = tags;
|
|
70
|
+
const [tag] = tags;
|
|
71
|
+
const returnNever = tag.type.trim() === 'never';
|
|
71
72
|
|
|
72
|
-
if (
|
|
73
|
+
if (returnNever && utils.hasValueOrExecutorHasNonEmptyResolveValue(false)) {
|
|
74
|
+
report(`JSDoc @${tagName} declaration set with "never" but return expression is present in function.`);
|
|
75
|
+
return;
|
|
76
|
+
} // In case a return value is declared in JSDoc, we also expect one in the code.
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
if (!returnNever && (reportMissingReturnForUndefinedTypes || utils.hasDefinedTypeTag(tag)) && !utils.hasValueOrExecutorHasNonEmptyResolveValue(exemptAsync) && (!exemptGenerators || !node.generator)) {
|
|
73
80
|
report(`JSDoc @${tagName} declaration present but return expression not available in function.`);
|
|
74
81
|
}
|
|
75
82
|
}, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/rules/requireReturnsCheck.js"],"names":["canSkip","utils","settings","voidingTags","mode","push","hasATag","isConstructor","classHasTag","context","node","report","exemptAsync","exemptGenerators","reportMissingReturnForUndefinedTypes","options","isAsync","tagName","getPreferredTagName","tags","getTags","length","tag","type","trim","
|
|
1
|
+
{"version":3,"sources":["../../src/rules/requireReturnsCheck.js"],"names":["canSkip","utils","settings","voidingTags","mode","push","hasATag","isConstructor","classHasTag","context","node","report","exemptAsync","exemptGenerators","reportMissingReturnForUndefinedTypes","options","isAsync","tagName","getPreferredTagName","tags","getTags","length","tag","returnNever","type","trim","hasValueOrExecutorHasNonEmptyResolveValue","hasDefinedTypeTag","generator","meta","docs","description","url","schema","additionalProperties","properties","default"],"mappings":";;;;;;;AAAA;;;;AAEA,MAAMA,OAAO,GAAG,CAACC,KAAD,EAAQC,QAAR,KAAqB;AACnC,QAAMC,WAAW,GAAG,CAClB;AACA;AACA;AACA;AACA;AACA,YANkB,EAOlB,SAPkB,EASlB;AACA;AACA,SAXkB,EAYlB,aAZkB,EAalB,WAbkB,CAApB;;AAgBA,MAAID,QAAQ,CAACE,IAAT,KAAkB,SAAtB,EAAiC;AAC/B;AACAD,IAAAA,WAAW,CAACE,IAAZ,CAAiB,QAAjB;AACD;;AAED,SAAOJ,KAAK,CAACK,OAAN,CAAcH,WAAd,KACLF,KAAK,CAACM,aAAN,EADK,IAELN,KAAK,CAACO,WAAN,CAAkB,WAAlB,CAFK,IAGLN,QAAQ,CAACE,IAAT,KAAkB,SAAlB,IAA+BH,KAAK,CAACO,WAAN,CAAkB,QAAlB,CAHjC;AAID,CA1BD;;eA4Be,2BAAa,CAAC;AAC3BC,EAAAA,OAD2B;AAE3BC,EAAAA,IAF2B;AAG3BC,EAAAA,MAH2B;AAI3BT,EAAAA,QAJ2B;AAK3BD,EAAAA;AAL2B,CAAD,KAMtB;AACJ,QAAM;AACJW,IAAAA,WAAW,GAAG,IADV;AAEJC,IAAAA,gBAAgB,GAAGX,QAAQ,CAACE,IAAT,KAAkB,YAFjC;AAGJU,IAAAA,oCAAoC,GAAG;AAHnC,MAIFL,OAAO,CAACM,OAAR,CAAgB,CAAhB,KAAsB,EAJ1B;;AAMA,MAAIf,OAAO,CAACC,KAAD,EAAQC,QAAR,CAAX,EAA8B;AAC5B;AACD;;AAED,MAAIU,WAAW,IAAIX,KAAK,CAACe,OAAN,EAAnB,EAAoC;AAClC;AACD;;AAED,QAAMC,OAAO,GAAGhB,KAAK,CAACiB,mBAAN,CAA0B;AAACD,IAAAA,OAAO,EAAE;AAAV,GAA1B,CAAhB;;AACA,MAAI,CAACA,OAAL,EAAc;AACZ;AACD;;AAED,QAAME,IAAI,GAAGlB,KAAK,CAACmB,OAAN,CAAcH,OAAd,CAAb;;AAEA,MAAIE,IAAI,CAACE,MAAL,KAAgB,CAApB,EAAuB;AACrB;AACD;;AAED,MAAIF,IAAI,CAACE,MAAL,GAAc,CAAlB,EAAqB;AACnBV,IAAAA,MAAM,CAAE,wBAAuBM,OAAQ,eAAjC,CAAN;AAEA;AACD;;AAED,QAAM,CAACK,GAAD,IAAQH,IAAd;AAEA,QAAMI,WAAW,GAAGD,GAAG,CAACE,IAAJ,CAASC,IAAT,OAAoB,OAAxC;;AAEA,MAAIF,WAAW,IAAItB,KAAK,CAACyB,yCAAN,CAAgD,KAAhD,CAAnB,EAA2E;AACzEf,IAAAA,MAAM,CAAE,UAASM,OAAQ,6EAAnB,CAAN;AAEA;AACD,GAxCG,CA0CJ;;;AACA,MACE,CAACM,WAAD,KAEET,oCAAoC,IACpCb,KAAK,CAAC0B,iBAAN,CAAwBL,GAAxB,CAHF,KAKA,CAACrB,KAAK,CAACyB,yCAAN,CACCd,WADD,CALD,KAOM,CAACC,gBAAD,IAAqB,CAACH,IAAI,CAACkB,SAPjC,CADF,EASE;AACAjB,IAAAA,MAAM,CAAE,UAASM,OAAQ,uEAAnB,CAAN;AACD;AACF,CA7Dc,EA6DZ;AACDY,EAAAA,IAAI,EAAE;AACJC,IAAAA,IAAI,EAAE;AACJC,MAAAA,WAAW,EAAE,iGADT;AAEJC,MAAAA,GAAG,EAAE;AAFD,KADF;AAKJC,IAAAA,MAAM,EAAE,CACN;AACEC,MAAAA,oBAAoB,EAAE,KADxB;AAEEC,MAAAA,UAAU,EAAE;AACVvB,QAAAA,WAAW,EAAE;AACXwB,UAAAA,OAAO,EAAE,IADE;AAEXZ,UAAAA,IAAI,EAAE;AAFK,SADH;AAKVX,QAAAA,gBAAgB,EAAE;AAChBW,UAAAA,IAAI,EAAE;AADU,SALR;AAQVV,QAAAA,oCAAoC,EAAE;AACpCsB,UAAAA,OAAO,EAAE,KAD2B;AAEpCZ,UAAAA,IAAI,EAAE;AAF8B;AAR5B,OAFd;AAeEA,MAAAA,IAAI,EAAE;AAfR,KADM,CALJ;AAwBJA,IAAAA,IAAI,EAAE;AAxBF;AADL,CA7DY,C","sourcesContent":["import iterateJsdoc from '../iterateJsdoc';\n\nconst canSkip = (utils, settings) => {\n const voidingTags = [\n // An abstract function is by definition incomplete\n // so it is perfectly fine if a return is documented but\n // not present within the function.\n // A subclass may inherit the doc and implement the\n // missing return.\n 'abstract',\n 'virtual',\n\n // A constructor function returns `this` by default, so may be `@returns`\n // tag indicating this but no explicit return\n 'class',\n 'constructor',\n 'interface',\n ];\n\n if (settings.mode === 'closure') {\n // Structural Interface in GCC terms, equivalent to @interface tag as far as this rule is concerned\n voidingTags.push('record');\n }\n\n return utils.hasATag(voidingTags) ||\n utils.isConstructor() ||\n utils.classHasTag('interface') ||\n settings.mode === 'closure' && utils.classHasTag('record');\n};\n\nexport default iterateJsdoc(({\n context,\n node,\n report,\n settings,\n utils,\n}) => {\n const {\n exemptAsync = true,\n exemptGenerators = settings.mode === 'typescript',\n reportMissingReturnForUndefinedTypes = false,\n } = context.options[0] || {};\n\n if (canSkip(utils, settings)) {\n return;\n }\n\n if (exemptAsync && utils.isAsync()) {\n return;\n }\n\n const tagName = utils.getPreferredTagName({tagName: 'returns'});\n if (!tagName) {\n return;\n }\n\n const tags = utils.getTags(tagName);\n\n if (tags.length === 0) {\n return;\n }\n\n if (tags.length > 1) {\n report(`Found more than one @${tagName} declaration.`);\n\n return;\n }\n\n const [tag] = tags;\n\n const returnNever = tag.type.trim() === 'never';\n\n if (returnNever && utils.hasValueOrExecutorHasNonEmptyResolveValue(false)) {\n report(`JSDoc @${tagName} declaration set with \"never\" but return expression is present in function.`);\n\n return;\n }\n\n // In case a return value is declared in JSDoc, we also expect one in the code.\n if (\n !returnNever &&\n (\n reportMissingReturnForUndefinedTypes ||\n utils.hasDefinedTypeTag(tag)\n ) &&\n !utils.hasValueOrExecutorHasNonEmptyResolveValue(\n exemptAsync,\n ) && (!exemptGenerators || !node.generator)\n ) {\n report(`JSDoc @${tagName} declaration present but return expression not available in function.`);\n }\n}, {\n meta: {\n docs: {\n description: 'Requires a return statement in function body if a `@returns` tag is specified in jsdoc comment.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-require-returns-check',\n },\n schema: [\n {\n additionalProperties: false,\n properties: {\n exemptAsync: {\n default: true,\n type: 'boolean',\n },\n exemptGenerators: {\n type: 'boolean',\n },\n reportMissingReturnForUndefinedTypes: {\n default: false,\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"file":"requireReturnsCheck.js"}
|
|
@@ -52,6 +52,10 @@ var _default = (0, _iterateJsdoc.default)(({
|
|
|
52
52
|
|
|
53
53
|
const shouldReport = () => {
|
|
54
54
|
if (!missingThrowsTag) {
|
|
55
|
+
if (tag.type.trim() === 'never' && iteratingFunction && utils.hasThrowValue()) {
|
|
56
|
+
report(`JSDoc @${tagName} declaration set to "never" but throw value found.`);
|
|
57
|
+
}
|
|
58
|
+
|
|
55
59
|
return false;
|
|
56
60
|
}
|
|
57
61
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/rules/requireThrows.js"],"names":["canSkip","utils","hasATag","avoidDocs","report","tagName","getPreferredTagName","tags","getTags","iteratingFunction","isIteratingFunction","tag","missingThrowsTag","shouldReport","hasThrowValue","contextDefaults","meta","docs","description","url","schema","additionalProperties","properties","contexts","items","anyOf","
|
|
1
|
+
{"version":3,"sources":["../../src/rules/requireThrows.js"],"names":["canSkip","utils","hasATag","avoidDocs","report","tagName","getPreferredTagName","tags","getTags","iteratingFunction","isIteratingFunction","tag","missingThrowsTag","shouldReport","type","trim","hasThrowValue","contextDefaults","meta","docs","description","url","schema","additionalProperties","properties","contexts","items","anyOf","comment","context","exemptedBy"],"mappings":";;;;;;;AAAA;;;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMA,OAAO,GAAIC,KAAD,IAAW;AACzB,SAAOA,KAAK,CAACC,OAAN,CAAc,CACnB;AACA;AACA;AACA;AACA;AACA,YANmB,EAOnB,SAPmB,EASnB;AACA,QAVmB,CAAd,KAYLD,KAAK,CAACE,SAAN,EAZF;AAaD,CAdD;;eAgBe,2BAAa,CAAC;AAC3BC,EAAAA,MAD2B;AAE3BH,EAAAA;AAF2B,CAAD,KAGtB;AACJ;AACA;AACA,MAAID,OAAO,CAACC,KAAD,CAAX,EAAoB;AAClB;AACD;;AAED,QAAMI,OAAO,GAAGJ,KAAK,CAACK,mBAAN,CAA0B;AAACD,IAAAA,OAAO,EAAE;AAAV,GAA1B,CAAhB;;AACA,MAAI,CAACA,OAAL,EAAc;AACZ;AACD;;AAED,QAAME,IAAI,GAAGN,KAAK,CAACO,OAAN,CAAcH,OAAd,CAAb;AACA,QAAMI,iBAAiB,GAAGR,KAAK,CAACS,mBAAN,EAA1B,CAbI,CAeJ;;AACA,QAAM,CAACC,GAAD,IAAQJ,IAAd;AACA,QAAMK,gBAAgB,GAAG,OAAOD,GAAP,KAAe,WAAf,IAA8BA,GAAG,KAAK,IAA/D;;AAEA,QAAME,YAAY,GAAG,MAAM;AACzB,QAAI,CAACD,gBAAL,EAAuB;AACrB,UAAID,GAAG,CAACG,IAAJ,CAASC,IAAT,OAAoB,OAApB,IAA+BN,iBAA/B,IAAoDR,KAAK,CAACe,aAAN,EAAxD,EAA+E;AAC7EZ,QAAAA,MAAM,CAAE,UAASC,OAAQ,oDAAnB,CAAN;AACD;;AAED,aAAO,KAAP;AACD;;AAED,WAAOI,iBAAiB,IAAIR,KAAK,CAACe,aAAN,EAA5B;AACD,GAVD;;AAYA,MAAIH,YAAY,EAAhB,EAAoB;AAClBT,IAAAA,MAAM,CAAE,kBAAiBC,OAAQ,eAA3B,CAAN;AACD;AACF,CArCc,EAqCZ;AACDY,EAAAA,eAAe,EAAE,IADhB;AAEDC,EAAAA,IAAI,EAAE;AACJC,IAAAA,IAAI,EAAE;AACJC,MAAAA,WAAW,EAAE,gDADT;AAEJC,MAAAA,GAAG,EAAE;AAFD,KADF;AAKJC,IAAAA,MAAM,EAAE,CACN;AACEC,MAAAA,oBAAoB,EAAE,KADxB;AAEEC,MAAAA,UAAU,EAAE;AACVC,QAAAA,QAAQ,EAAE;AACRC,UAAAA,KAAK,EAAE;AACLC,YAAAA,KAAK,EAAE,CACL;AACEb,cAAAA,IAAI,EAAE;AADR,aADK,EAIL;AACES,cAAAA,oBAAoB,EAAE,KADxB;AAEEC,cAAAA,UAAU,EAAE;AACVI,gBAAAA,OAAO,EAAE;AACPd,kBAAAA,IAAI,EAAE;AADC,iBADC;AAIVe,gBAAAA,OAAO,EAAE;AACPf,kBAAAA,IAAI,EAAE;AADC;AAJC,eAFd;AAUEA,cAAAA,IAAI,EAAE;AAVR,aAJK;AADF,WADC;AAoBRA,UAAAA,IAAI,EAAE;AApBE,SADA;AAuBVgB,QAAAA,UAAU,EAAE;AACVJ,UAAAA,KAAK,EAAE;AACLZ,YAAAA,IAAI,EAAE;AADD,WADG;AAIVA,UAAAA,IAAI,EAAE;AAJI;AAvBF,OAFd;AAgCEA,MAAAA,IAAI,EAAE;AAhCR,KADM,CALJ;AAyCJA,IAAAA,IAAI,EAAE;AAzCF;AAFL,CArCY,C","sourcesContent":["import iterateJsdoc from '../iterateJsdoc';\n\n/**\n * We can skip checking for a throws value, in case the documentation is inherited\n * or the method is either a constructor or an abstract method.\n *\n * @param {*} utils a reference to the utils which are used to probe if a tag is present or not.\n * @returns {boolean} true in case deep checking can be skipped; otherwise false.\n */\nconst canSkip = (utils) => {\n return utils.hasATag([\n // inheritdoc implies that all documentation is inherited\n // see https://jsdoc.app/tags-inheritdoc.html\n //\n // Abstract methods are by definition incomplete,\n // so it is not necessary to document that they throw an error.\n 'abstract',\n 'virtual',\n\n // The designated type can itself document `@throws`\n 'type',\n ]) ||\n utils.avoidDocs();\n};\n\nexport default iterateJsdoc(({\n report,\n utils,\n}) => {\n // A preflight check. We do not need to run a deep check for abstract\n // functions.\n if (canSkip(utils)) {\n return;\n }\n\n const tagName = utils.getPreferredTagName({tagName: 'throws'});\n if (!tagName) {\n return;\n }\n\n const tags = utils.getTags(tagName);\n const iteratingFunction = utils.isIteratingFunction();\n\n // In case the code returns something, we expect a return value in JSDoc.\n const [tag] = tags;\n const missingThrowsTag = typeof tag === 'undefined' || tag === null;\n\n const shouldReport = () => {\n if (!missingThrowsTag) {\n if (tag.type.trim() === 'never' && iteratingFunction && utils.hasThrowValue()) {\n report(`JSDoc @${tagName} declaration set to \"never\" but throw value found.`);\n }\n\n return false;\n }\n\n return iteratingFunction && utils.hasThrowValue();\n };\n\n if (shouldReport()) {\n report(`Missing JSDoc @${tagName} declaration.`);\n }\n}, {\n contextDefaults: true,\n meta: {\n docs: {\n description: 'Requires that throw statements are documented.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-require-throws',\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 exemptedBy: {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"file":"requireThrows.js"}
|
|
@@ -70,6 +70,10 @@ var _default = (0, _iterateJsdoc.default)(({
|
|
|
70
70
|
if (preferredYieldTagName) {
|
|
71
71
|
const shouldReportYields = () => {
|
|
72
72
|
if (yieldTag.type.trim() === 'never') {
|
|
73
|
+
if (utils.hasYieldValue()) {
|
|
74
|
+
report(`JSDoc @${preferredYieldTagName} declaration set with "never" but yield expression is present in function.`);
|
|
75
|
+
}
|
|
76
|
+
|
|
73
77
|
return false;
|
|
74
78
|
}
|
|
75
79
|
|
|
@@ -92,6 +96,10 @@ var _default = (0, _iterateJsdoc.default)(({
|
|
|
92
96
|
if (preferredNextTagName) {
|
|
93
97
|
const shouldReportNext = () => {
|
|
94
98
|
if (nextTag.type.trim() === 'never') {
|
|
99
|
+
if (utils.hasYieldReturnValue()) {
|
|
100
|
+
report(`JSDoc @${preferredNextTagName} declaration set with "never" but yield expression with return value is present in function.`);
|
|
101
|
+
}
|
|
102
|
+
|
|
95
103
|
return false;
|
|
96
104
|
}
|
|
97
105
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/rules/requireYieldsCheck.js"],"names":["canSkip","utils","settings","voidingTags","mode","push","hasATag","isConstructor","classHasTag","checkTagName","report","tagName","preferredTagName","getPreferredTagName","tags","getTags","length","context","next","checkGeneratorsOnly","options","preferredYieldTagName","yieldTag","shouldReportYields","type","trim","
|
|
1
|
+
{"version":3,"sources":["../../src/rules/requireYieldsCheck.js"],"names":["canSkip","utils","settings","voidingTags","mode","push","hasATag","isConstructor","classHasTag","checkTagName","report","tagName","preferredTagName","getPreferredTagName","tags","getTags","length","context","next","checkGeneratorsOnly","options","preferredYieldTagName","yieldTag","shouldReportYields","type","trim","hasYieldValue","isGenerator","hasDefinedTypeTag","preferredNextTagName","nextTag","shouldReportNext","hasYieldReturnValue","meta","docs","description","url","schema","additionalProperties","properties","default","contexts","items","anyOf","comment","exemptedBy"],"mappings":"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","sourcesContent":["import iterateJsdoc from '../iterateJsdoc';\n\nconst canSkip = (utils, settings) => {\n const voidingTags = [\n // An abstract function is by definition incomplete\n // so it is perfectly fine if a yield is documented but\n // not present within the function.\n // A subclass may inherit the doc and implement the\n // missing yield.\n 'abstract',\n 'virtual',\n\n // Constructor functions do not have a yield value\n // so we can bail here, too.\n 'class',\n 'constructor',\n\n // This seems to imply a class as well\n 'interface',\n ];\n\n if (settings.mode === 'closure') {\n // Structural Interface in GCC terms, equivalent to @interface tag as far as this rule is concerned\n voidingTags.push('record');\n }\n\n return utils.hasATag(voidingTags) ||\n utils.isConstructor() ||\n utils.classHasTag('interface') ||\n settings.mode === 'closure' && utils.classHasTag('record');\n};\n\nconst checkTagName = (utils, report, tagName) => {\n const preferredTagName = utils.getPreferredTagName({tagName});\n if (!preferredTagName) {\n return [];\n }\n\n const tags = utils.getTags(preferredTagName);\n\n if (tags.length === 0) {\n return [];\n }\n\n if (tags.length > 1) {\n report(`Found more than one @${preferredTagName} declaration.`);\n\n return [];\n }\n\n return [preferredTagName, tags[0]];\n};\n\nexport default iterateJsdoc(({\n context,\n report,\n settings,\n utils,\n}) => {\n if (canSkip(utils, settings)) {\n return;\n }\n\n const {\n next = false,\n checkGeneratorsOnly = false,\n } = context.options[0] || {};\n\n const [preferredYieldTagName, yieldTag] = checkTagName(\n utils, report, 'yields',\n );\n if (preferredYieldTagName) {\n const shouldReportYields = () => {\n if (yieldTag.type.trim() === 'never') {\n if (utils.hasYieldValue()) {\n report(`JSDoc @${preferredYieldTagName} declaration set with \"never\" but yield expression is present in function.`);\n }\n\n return false;\n }\n\n if (checkGeneratorsOnly && !utils.isGenerator()) {\n return true;\n }\n\n return utils.hasDefinedTypeTag(yieldTag) && !utils.hasYieldValue();\n };\n\n // In case a yield value is declared in JSDoc, we also expect one in the code.\n if (shouldReportYields()) {\n report(`JSDoc @${preferredYieldTagName} declaration present but yield expression not available in function.`);\n }\n }\n\n if (next) {\n const [preferredNextTagName, nextTag] = checkTagName(\n utils, report, 'next',\n );\n if (preferredNextTagName) {\n const shouldReportNext = () => {\n if (nextTag.type.trim() === 'never') {\n if (utils.hasYieldReturnValue()) {\n report(`JSDoc @${preferredNextTagName} declaration set with \"never\" but yield expression with return value is present in function.`);\n }\n\n return false;\n }\n\n if (checkGeneratorsOnly && !utils.isGenerator()) {\n return true;\n }\n\n return utils.hasDefinedTypeTag(nextTag) && !utils.hasYieldReturnValue();\n };\n\n if (shouldReportNext()) {\n report(`JSDoc @${preferredNextTagName} declaration present but yield expression with return value not available in function.`);\n }\n }\n }\n}, {\n meta: {\n docs: {\n description: 'Requires a yield statement in function body if a `@yields` tag is specified in jsdoc comment.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-require-yields-check',\n },\n schema: [\n {\n additionalProperties: false,\n properties: {\n checkGeneratorsOnly: {\n default: false,\n type: 'boolean',\n },\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 exemptedBy: {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n next: {\n default: false,\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"file":"requireYieldsCheck.js"}
|
package/package.json
CHANGED
|
@@ -107,5 +107,5 @@
|
|
|
107
107
|
"test-index": "cross-env BABEL_ENV=test mocha --recursive --require @babel/register --reporter progress --timeout 12000 test/rules/index.js",
|
|
108
108
|
"test-no-cov": "cross-env BABEL_ENV=test mocha --reporter dot --recursive --require @babel/register --timeout 12000"
|
|
109
109
|
},
|
|
110
|
-
"version": "37.
|
|
110
|
+
"version": "37.4.0"
|
|
111
111
|
}
|