blob: bf96909077d5fc9b6f19c322943f9d817bb5a4d8 [file] [log] [blame]
{"version":3,"sources":["../../src/rules/requireReturnsCheck.js"],"names":["canSkip","utils","settings","voidingTags","mode","push","hasATag","isConstructor","classHasTag","report","isAsync","tagName","getPreferredTagName","tags","getTags","length","hasDefinedTypeReturnTag","hasReturnValue","meta","type"],"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,MAD2B;AAE3BP,EAAAA,QAF2B;AAG3BD,EAAAA;AAH2B,CAAD,KAItB;AACJ,MAAID,OAAO,CAACC,KAAD,EAAQC,QAAR,CAAX,EAA8B;AAC5B;AACD;;AAED,MAAID,KAAK,CAACS,OAAN,EAAJ,EAAqB;AACnB;AACD;;AAED,QAAMC,OAAO,GAAGV,KAAK,CAACW,mBAAN,CAA0B;AAACD,IAAAA,OAAO,EAAE;AAAV,GAA1B,CAAhB;;AACA,MAAI,CAACA,OAAL,EAAc;AACZ;AACD;;AACD,QAAME,IAAI,GAAGZ,KAAK,CAACa,OAAN,CAAcH,OAAd,CAAb;;AAEA,MAAIE,IAAI,CAACE,MAAL,KAAgB,CAApB,EAAuB;AACrB;AACD;;AAED,MAAIF,IAAI,CAACE,MAAL,GAAc,CAAlB,EAAqB;AACnBN,IAAAA,MAAM,CAAE,wBAAuBE,OAAQ,eAAjC,CAAN;AAEA;AACD,GAvBG,CAyBJ;;;AACA,MAAIV,KAAK,CAACe,uBAAN,CAA8BH,IAAI,CAAC,CAAD,CAAlC,KAA0C,CAACZ,KAAK,CAACgB,cAAN,EAA/C,EAAuE;AACrER,IAAAA,MAAM,CAAE,UAASE,OAAQ,uEAAnB,CAAN;AACD;AACF,CAjCc,EAiCZ;AACDO,EAAAA,IAAI,EAAE;AACJC,IAAAA,IAAI,EAAE;AADF;AADL,CAjCY,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 report,\n settings,\n utils,\n}) => {\n if (canSkip(utils, settings)) {\n return;\n }\n\n if (utils.isAsync()) {\n return;\n }\n\n const tagName = utils.getPreferredTagName({tagName: 'returns'});\n if (!tagName) {\n return;\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 // In case a return value is declared in JSDoc, we also expect one in the code.\n if (utils.hasDefinedTypeReturnTag(tags[0]) && !utils.hasReturnValue()) {\n report(`JSDoc @${tagName} declaration present but return expression not available in function.`);\n }\n}, {\n meta: {\n type: 'suggestion',\n },\n});\n"],"file":"requireReturnsCheck.js"}