blob: a966d969bee6a650a46f1c6a520686485f7d3fa5 [file] [log] [blame]
{"version":3,"sources":["../src/jsdocUtils.js"],"names":["getFunctionParameterNames","functionNode","getParamName","param","_","has","name","left","type","get","argument","parameter","Error","params","map","getJsdocTagsDeep","jsdoc","targetTagName","tags","reduce","arr","tag","idx","push","getJsdocTags","jsdocNames","filter","includes","modeWarnSettings","getTagNamesForMode","mode","context","jsdocTags","typeScriptTags","closureTags","hasBeenWarned","report","loc","start","column","line","message","markSettingAsWarned","getPreferredTagName","tagPreference","prefValues","values","some","prefVal","replacement","tagNames","preferredTagName","findKey","aliases","isValidTag","definedTags","validTagNames","keys","concat","flatten","additionalTags","allTags","hasTag","targetTagLower","toLowerCase","doc","hasATag","targetTagNames","hasDefinedTypeReturnTag","tagType","trim","tagsWithMandatoryTypePosition","tagsWithMandatoryTypePositionClosure","tagsWithOptionalTypePosition","tagsWithOptionalTypePositionClosure","namepathDefiningTags","tagsWithOptionalNamePosition","tagsWithMandatoryNamePosition","tagsWithMandatoryTypeOrNamePosition","isNamepathDefiningTag","tagName","tagMightHaveTypePosition","tagMustHaveTypePosition","tagMightHaveNamePosition","tagMustHaveNamePosition","tagMightHaveEitherTypeOrNamePosition","tagMustHaveEitherTypeOrNamePosition","hasReturnValue","node","expression","body","bodyNode","consequent","alternate","block","handler","finalizer","cases","someCase","parseClosureTemplateTag","description","split","enforcedContexts","defaultContexts","options","contexts","getContextObject","checkJsdoc","obj","prop","filterTags","tagsWithNamesAndDescriptions","getTagsByType","descName","tagsWithoutNames","tagsWithNames","tagWithName","getIndent","sourceCode","indent","text","match","charAt"],"mappings":";;;;;;;AAAA;;AACA;;AACA;;;;AAIA,MAAMA,yBAAyB,GAAIC,YAAD,IAA2C;AAC3E,QAAMC,YAAY,GAAIC,KAAD,IAAW;AAC9B,QAAIC,gBAAEC,GAAF,CAAMF,KAAN,EAAa,MAAb,CAAJ,EAA0B;AACxB,aAAOA,KAAK,CAACG,IAAb;AACD;;AAED,QAAIF,gBAAEC,GAAF,CAAMF,KAAN,EAAa,WAAb,CAAJ,EAA+B;AAC7B,aAAOA,KAAK,CAACI,IAAN,CAAWD,IAAlB;AACD;;AAED,QAAIH,KAAK,CAACK,IAAN,KAAe,eAAf,IAAkCJ,gBAAEK,GAAF,CAAMN,KAAN,EAAa,WAAb,MAA8B,eAApE,EAAqF;AACnF,aAAO,iBAAP;AACD;;AAED,QAAIA,KAAK,CAACK,IAAN,KAAe,cAAf,IAAiCJ,gBAAEK,GAAF,CAAMN,KAAN,EAAa,WAAb,MAA8B,cAAnE,EAAmF;AACjF,aAAO,gBAAP;AACD;;AAED,QAAIA,KAAK,CAACK,IAAN,KAAe,aAAnB,EAAkC;AAChC,aAAOL,KAAK,CAACO,QAAN,CAAeJ,IAAtB;AACD;;AAED,QAAIH,KAAK,CAACK,IAAN,KAAe,qBAAnB,EAA0C;AACxC,aAAON,YAAY,CAACC,KAAK,CAACQ,SAAP,CAAnB;AACD;;AAED,UAAM,IAAIC,KAAJ,CAAU,wCAAV,CAAN;AACD,GA1BD;;AA4BA,SAAOX,YAAY,CAACY,MAAb,CAAoBC,GAApB,CAAwBZ,YAAxB,CAAP;AACD,CA9BD;AAgCA;;;;;;AAIA,MAAMa,gBAAgB,GAAG,CAACC,KAAD,EAAiBC,aAAjB,KAA4D;AACnF,SAAO,CAACD,KAAK,CAACE,IAAN,IAAc,EAAf,EAAmBC,MAAnB,CAA0B,CAACC,GAAD,EAAM;AAACd,IAAAA,IAAD;AAAOe,IAAAA;AAAP,GAAN,EAAmBC,GAAnB,KAA2B;AAC1D,QAAID,GAAG,KAAKJ,aAAZ,EAA2B;AACzB,aAAOG,GAAP;AACD;;AACDA,IAAAA,GAAG,CAACG,IAAJ,CAAS;AACPD,MAAAA,GADO;AAEPhB,MAAAA;AAFO,KAAT;AAKA,WAAOc,GAAP;AACD,GAVM,EAUJ,EAVI,CAAP;AAWD,CAZD;;AAcA,MAAMI,YAAY,GAAG,CAACR,KAAD,EAAiBC,aAAjB,KAA4D;AAC/E,MAAIQ,UAAJ;AAEAA,EAAAA,UAAU,GAAGV,gBAAgB,CAACC,KAAD,EAAQC,aAAR,CAA7B;AAEAQ,EAAAA,UAAU,GAAGA,UAAU,CAACC,MAAX,CAAkB,CAAC;AAACpB,IAAAA;AAAD,GAAD,KAAY;AACzC,WAAO,CAACA,IAAI,CAACqB,QAAL,CAAc,GAAd,CAAR;AACD,GAFY,CAAb;AAIA,SAAOF,UAAP;AACD,CAVD;;AAYA,MAAMG,gBAAgB,GAAG,4BAAzB;;AAEA,MAAMC,kBAAkB,GAAG,CAACC,IAAD,EAAOC,OAAP,KAAmB;AAC5C,UAAQD,IAAR;AACA,SAAK,OAAL;AACE,aAAOE,mBAAP;;AACF,SAAK,YAAL;AACE,aAAOC,wBAAP;;AACF,SAAK,SAAL;AACE,aAAOC,qBAAP;;AACF;AACE,UAAI,CAACN,gBAAgB,CAACO,aAAjB,CAA+BJ,OAA/B,EAAwC,MAAxC,CAAL,EAAsD;AACpDA,QAAAA,OAAO,CAACK,MAAR,CAAe;AACbC,UAAAA,GAAG,EAAE;AACHC,YAAAA,KAAK,EAAE;AACLC,cAAAA,MAAM,EAAE,CADH;AAELC,cAAAA,IAAI,EAAE;AAFD;AADJ,WADQ;AAObC,UAAAA,OAAO,EAAG,wBAAuBX,IAAK;AAPzB,SAAf;AASAF,QAAAA,gBAAgB,CAACc,mBAAjB,CAAqCX,OAArC,EAA8C,MAA9C;AACD,OAZH,CAcE;;;AACA,aAAOC,mBAAP;AAtBF;AAwBD,CAzBD;;AA2BA,MAAMW,mBAAmB,GAAG,CAC1BZ,OAD0B,EAE1BD,IAF0B,EAG1BxB,IAH0B,EAI1BsC,aAAsB,GAAG,EAJC,KAKP;AACnB,QAAMC,UAAU,GAAGzC,gBAAE0C,MAAF,CAASF,aAAT,CAAnB;;AACA,MAAIC,UAAU,CAAClB,QAAX,CAAoBrB,IAApB,KAA6BuC,UAAU,CAACE,IAAX,CAAiBC,OAAD,IAAa;AAC5D,WAAOA,OAAO,IAAI,OAAOA,OAAP,KAAmB,QAA9B,IAA0CA,OAAO,CAACC,WAAR,KAAwB3C,IAAzE;AACD,GAFgC,CAAjC,EAEI;AACF,WAAOA,IAAP;AACD;;AAED,MAAIF,gBAAEC,GAAF,CAAMuC,aAAN,EAAqBtC,IAArB,CAAJ,EAAgC;AAC9B,WAAOsC,aAAa,CAACtC,IAAD,CAApB;AACD;;AAED,QAAM4C,QAAQ,GAAGrB,kBAAkB,CAACC,IAAD,EAAOC,OAAP,CAAnC;;AAEA,QAAMoB,gBAAgB,GAAG/C,gBAAEgD,OAAF,CAAUF,QAAV,EAAqBG,OAAD,IAAa;AACxD,WAAOA,OAAO,CAAC1B,QAAR,CAAiBrB,IAAjB,CAAP;AACD,GAFwB,CAAzB;;AAGA,MAAI6C,gBAAJ,EAAsB;AACpB,WAAOA,gBAAP;AACD;;AAED,SAAO7C,IAAP;AACD,CA3BD;;AA6BA,MAAMgD,UAAU,GAAG,CACjBvB,OADiB,EAEjBD,IAFiB,EAGjBxB,IAHiB,EAIjBiD,WAJiB,KAKJ;AACb,QAAML,QAAQ,GAAGrB,kBAAkB,CAACC,IAAD,EAAOC,OAAP,CAAnC;;AACA,QAAMyB,aAAa,GAAGpD,gBAAEqD,IAAF,CAAOP,QAAP,EAAiBQ,MAAjB,CAAwBtD,gBAAEuD,OAAF,CAAUvD,gBAAE0C,MAAF,CAASI,QAAT,CAAV,CAAxB,CAAtB;;AACA,QAAMU,cAAc,GAAGL,WAAvB;AACA,QAAMM,OAAO,GAAGL,aAAa,CAACE,MAAd,CAAqBE,cAArB,CAAhB;AAEA,SAAOC,OAAO,CAAClC,QAAR,CAAiBrB,IAAjB,CAAP;AACD,CAZD;;AAcA,MAAMwD,MAAM,GAAG,CAAC9C,KAAD,EAAiBC,aAAjB,KAAsD;AACnE,QAAM8C,cAAc,GAAG9C,aAAa,CAAC+C,WAAd,EAAvB;AAEA,SAAO5D,gBAAE2C,IAAF,CAAO/B,KAAK,CAACE,IAAb,EAAoB+C,GAAD,IAAkB;AAC1C,WAAOA,GAAG,CAAC5C,GAAJ,CAAQ2C,WAAR,OAA0BD,cAAjC;AACD,GAFM,CAAP;AAGD,CAND;;AAQA,MAAMG,OAAO,GAAG,CAAClD,KAAD,EAAiBmD,cAAjB,KAAsD;AACpE,SAAOA,cAAc,CAACpB,IAAf,CAAqB9B,aAAD,IAAmB;AAC5C,WAAO6C,MAAM,CAAC9C,KAAD,EAAQC,aAAR,CAAb;AACD,GAFM,CAAP;AAGD,CAJD;AAMA;;;;;;;;;;AAQA,MAAMmD,uBAAuB,GAAI/C,GAAD,IAAS;AACvC;AACA,MAAI,OAAOA,GAAP,KAAe,WAAf,IAA8BA,GAAG,KAAK,IAA1C,EAAgD;AAC9C,WAAO,KAAP;AACD,GAJsC,CAMvC;;;AACA,QAAMgD,OAAO,GAAGhD,GAAG,CAACb,IAAJ,CAAS8D,IAAT,EAAhB;;AACA,MAAID,OAAO,KAAK,WAAZ,IAA2BA,OAAO,KAAK,MAA3C,EAAmD;AACjD,WAAO,KAAP;AACD,GAVsC,CAYvC;AACA;;;AACA,SAAO,IAAP;AACD,CAfD;;AAiBA,MAAME,6BAA6B,GAAG,CACpC;AACA;AACA,YAHoC,EAKpC;AACA,MANoC,CAAtC;AASA,MAAMC,oCAAoC,GAAG,CAC3C,GAAGD,6BADwC,EAE3C,MAF2C,EAG3C,QAH2C,CAA7C,C,CAMA;AACA;AACA;AACA;AACA;;AACA,MAAME,4BAA4B,GAAG,CACnC;AACA,MAFmC,EAGnC,QAHmC,EAGzB,KAHyB,EAKnC,SALmC,EAOnC;AACA,UARmC,EAQvB,SARuB,EAUnC,OAVmC,EAU1B,aAV0B,EAWnC,UAXmC,EAWvB,OAXuB,EAanC;AACA,QAdmC,EAenC,WAfmC,EAiBnC;AACA;AACA,OAnBmC,EAmB1B,KAnB0B,EAmBnB,UAnBmB,EAoBnC,UApBmC,EAoBvB,MApBuB,EAsBnC;AACA,SAvBmC,EAuBxB,QAvBwB,EAwBnC,QAxBmC,EAwBzB,WAxByB,EAyBnC,QAzBmC,EAyBzB,OAzByB,EA2BnC;AACA;AACA;AACA,UA9BmC,CAArC;AAiCA,MAAMC,mCAAmC,GAAG,CAC1C,GAAGD,4BADuC,EAG1C,QAH0C,EAK1C;AACA;AACA,SAP0C,EAQ1C,SAR0C,EAS1C,WAT0C,EAW1C;AACA,QAZ0C,EAa1C,QAb0C,CAA5C,C,CAgBA;;AACA,MAAME,oBAAoB,GAAG,CAC3B;AACA;AACA;AACA,UAJ2B,EAIf,MAJe,EAK3B,OAL2B,EAO3B;AACA,OAR2B,EAQlB,aARkB,EAS3B,UAT2B,EASf,OATe,EAU3B,UAV2B,EAUf,MAVe,EAUP,QAVO,EAW3B,WAX2B,EAY3B,QAZ2B,EAYjB,KAZiB,EAa3B,OAb2B,EAc3B,WAd2B,EAgB3B;AACA;AACA;AAEA;AACA,MArB2B,EAsB3B,SAtB2B,EAuB3B,UAvB2B,CAA7B,C,CA0BA;AACA;;AACA,MAAMC,4BAA4B,GAAG,CACnC,GAAGD,oBADgC,EAGnC;AACA;AACA,SALmC,EAOnC;AACA,OARmC,EAQ1B,OAR0B,EASnC,SATmC,EAWnC;AACA,OAZmC,EAanC,UAbmC,EAavB,SAbuB,EAcnC,OAdmC,EAenC,MAfmC,EAiBnC;AACA;AACA,UAnBmC,EAmBvB,WAnBuB,EAqBnC;AACA,OAtBmC,EAwBnC;AACA,KAzBmC,CAArC,C,CA4BA;AAEA;;AACA,MAAME,6BAA6B,GAAG,CACpC;AACA,UAFoC,EAExB,MAFwB,EAIpC;AACA,UALoC,EAMpC,MANoC,EAOpC,SAPoC,CAAtC;AAUA,MAAMC,mCAAmC,GAAG,CAC1C;AACA,OAF0C,EAG1C,UAH0C,EAG9B,SAH8B,EAI1C,SAJ0C,EAK1C,OAL0C,EAM1C,UAN0C,EAM9B,WAN8B,EAO1C,MAP0C,EAQ1C,MAR0C,EAS1C,SAT0C,EAW1C;AACA,UAZ0C,EAY9B,MAZ8B,EAc1C;AACA,OAf0C,CAA5C;;AAkBA,MAAMC,qBAAqB,GAAIC,OAAD,IAAa;AACzC,SAAOL,oBAAoB,CAAChD,QAArB,CAA8BqD,OAA9B,CAAP;AACD,CAFD;;AAIA,MAAMC,wBAAwB,GAAG,CAACnD,IAAD,EAAOT,GAAP,KAAe;AAC9C,MAAIS,IAAI,KAAK,SAAb,EAAwB;AACtB,WAAO0C,oCAAoC,CAAC7C,QAArC,CAA8CN,GAA9C,KACLqD,mCAAmC,CAAC/C,QAApC,CAA6CN,GAA7C,CADF;AAED;;AAED,SAAOkD,6BAA6B,CAAC5C,QAA9B,CAAuCN,GAAvC,KACLoD,4BAA4B,CAAC9C,QAA7B,CAAsCN,GAAtC,CADF;AAED,CARD;;AAUA,MAAM6D,uBAAuB,GAAG,CAACpD,IAAD,EAAOT,GAAP,KAAe;AAC7C,MAAIS,IAAI,KAAK,SAAb,EAAwB;AACtB,WAAO0C,oCAAoC,CAAC7C,QAArC,CAA8CN,GAA9C,CAAP;AACD;;AAED,SAAOkD,6BAA6B,CAAC5C,QAA9B,CAAuCN,GAAvC,CAAP;AACD,CAND;;AAQA,MAAM8D,wBAAwB,GAAI9D,GAAD,IAAS;AACxC,SAAOuD,4BAA4B,CAACjD,QAA7B,CAAsCN,GAAtC,CAAP;AACD,CAFD;;AAIA,MAAM+D,uBAAuB,GAAI/D,GAAD,IAAS;AACvC,SAAOwD,6BAA6B,CAAClD,QAA9B,CAAuCN,GAAvC,CAAP;AACD,CAFD;;AAIA,MAAMgE,oCAAoC,GAAG,CAACvD,IAAD,EAAOT,GAAP,KAAe;AAC1D,SAAO4D,wBAAwB,CAACnD,IAAD,EAAOT,GAAP,CAAxB,IAAuC8D,wBAAwB,CAAC9D,GAAD,CAAtE;AACD,CAFD;;AAIA,MAAMiE,mCAAmC,GAAIjE,GAAD,IAAS;AACnD,SAAOyD,mCAAmC,CAACnD,QAApC,CAA6CN,GAA7C,CAAP;AACD,CAFD;AAIA;;;;;;AAMA;;;AACA,MAAMkE,cAAc,GAAIC,IAAD,IAAU;AAC/B,MAAI,CAACA,IAAL,EAAW;AACT,WAAO,KAAP;AACD;;AACD,UAAQA,IAAI,CAAChF,IAAb;AACA,SAAK,oBAAL;AACA,SAAK,qBAAL;AACA,SAAK,yBAAL;AAAgC;AAC9B,eAAOgF,IAAI,CAACC,UAAL,IAAmBF,cAAc,CAACC,IAAI,CAACE,IAAN,CAAxC;AACD;;AACD,SAAK,gBAAL;AAAuB;AACrB,eAAOF,IAAI,CAACE,IAAL,CAAU3C,IAAV,CAAgB4C,QAAD,IAAc;AAClC,iBAAOA,QAAQ,CAACnF,IAAT,KAAkB,qBAAlB,IAA2C+E,cAAc,CAACI,QAAD,CAAhE;AACD,SAFM,CAAP;AAGD;;AACD,SAAK,gBAAL;AACA,SAAK,kBAAL;AACA,SAAK,cAAL;AACA,SAAK,gBAAL;AACA,SAAK,gBAAL;AACA,SAAK,eAAL;AAAsB;AACpB,eAAOJ,cAAc,CAACC,IAAI,CAACE,IAAN,CAArB;AACD;;AACD,SAAK,aAAL;AAAoB;AAClB,eAAOH,cAAc,CAACC,IAAI,CAACI,UAAN,CAAd,IAAmCL,cAAc,CAACC,IAAI,CAACK,SAAN,CAAxD;AACD;;AACD,SAAK,cAAL;AAAqB;AACnB,eAAON,cAAc,CAACC,IAAI,CAACM,KAAN,CAAd,IACLP,cAAc,CAACC,IAAI,CAACO,OAAL,IAAgBP,IAAI,CAACO,OAAL,CAAaL,IAA9B,CADT,IAELH,cAAc,CAACC,IAAI,CAACQ,SAAN,CAFhB;AAGD;;AACD,SAAK,iBAAL;AAAwB;AACtB,eAAOR,IAAI,CAACS,KAAL,CAAWlD,IAAX,CACJmD,QAAD,IAAc;AACZ,iBAAOA,QAAQ,CAACN,UAAT,CAAoB7C,IAApB,CAAyBwC,cAAzB,CAAP;AACD,SAHI,CAAP;AAKD;;AACD,SAAK,iBAAL;AAAwB;AACtB;AACA,YAAIC,IAAI,CAAC9E,QAAL,KAAkB,IAAtB,EAA4B;AAC1B,iBAAO,KAAP;AACD;;AAED,eAAO,IAAP;AACD;;AACD;AAAS;AACP,eAAO,KAAP;AACD;AA5CD;AA8CD,CAlDD;AAoDA;;AACA;;;;;;AAMA;;;;;;;;;AAOA,MAAMyF,uBAAuB,GAAI9E,GAAD,IAAS;AACvC,SAAO,CAACA,GAAG,CAACf,IAAJ,GAAW,GAAX,GAAiBe,GAAG,CAAC+E,WAAtB,EACJC,KADI,CACE,GADF,EAEJvF,GAFI,CAECN,IAAD,IAAU;AACb,WAAOA,IAAI,CAAC8D,IAAL,EAAP;AACD,GAJI,CAAP;AAKD,CAND;AAQA;;;;;;;;;;;AASA,MAAMgC,gBAAgB,GAAG,CAACvE,OAAD,EAAUwE,eAAV,KAA8B;AAAA,eAQjDxE,OAAO,CAACyE,OAAR,CAAgB,CAAhB,KAAsB,EAR2B;AAAA,6BAGnDC,QAHmD;AAAA,QAGnDA,QAHmD,8BAGxCF,eAAe,KAAK,IAApB,GAA2B,CACpC,yBADoC,EAEpC,qBAFoC,EAGpC,oBAHoC,CAA3B,GAIPA,eAP+C;;AAUrD,SAAOE,QAAP;AACD,CAXD;AAaA;;;;;;AAIA,MAAMC,gBAAgB,GAAG,CAACD,QAAD,EAAWE,UAAX,KAA0B;AACjD,SAAOF,QAAQ,CAACtF,MAAT,CAAgB,CAACyF,GAAD,EAAMC,IAAN,KAAe;AACpCD,IAAAA,GAAG,CAACC,IAAD,CAAH,GAAYF,UAAZ;AAEA,WAAOC,GAAP;AACD,GAJM,EAIJ,EAJI,CAAP;AAKD,CAND;;AAQA,MAAME,UAAU,GAAG,CAAC5F,IAAI,GAAG,EAAR,EAAYQ,MAAZ,KAAuB;AACxC,SAAOR,IAAI,CAACQ,MAAL,CAAYA,MAAZ,CAAP;AACD,CAFD;;AAIA,MAAMqF,4BAA4B,GAAG,CACnC,OADmC,EAC1B,KAD0B,EACnB,UADmB,EACP,UADO,EACK,MADL,EAGnC;AACA,SAJmC,EAIxB,QAJwB,CAArC;;AAOA,MAAMC,aAAa,GAAG,CAACjF,OAAD,EAAUD,IAAV,EAAgBZ,IAAhB,EAAsB0B,aAAtB,KAAwC;AAC5D,QAAMqE,QAAQ,GAAGtE,mBAAmB,CAACZ,OAAD,EAAUD,IAAV,EAAgB,aAAhB,EAA+Bc,aAA/B,CAApC;AACA,QAAMsE,gBAAgB,GAAG,EAAzB;AACA,QAAMC,aAAa,GAAGL,UAAU,CAAC5F,IAAD,EAAQG,GAAD,IAAS;AAAA,UAClC2D,OADkC,GACvB3D,GADuB,CACvCA,GADuC;AAE9C,UAAM+F,WAAW,GAAGL,4BAA4B,CAACpF,QAA7B,CAAsCqD,OAAtC,CAApB;;AACA,QAAI,CAACoC,WAAD,IAAgBpC,OAAO,KAAKiC,QAAhC,EAA0C;AACxCC,MAAAA,gBAAgB,CAAC3F,IAAjB,CAAsBF,GAAtB;AACD;;AAED,WAAO+F,WAAP;AACD,GAR+B,CAAhC;AAUA,SAAO;AACLD,IAAAA,aADK;AAELD,IAAAA;AAFK,GAAP;AAID,CAjBD;;AAmBA,MAAMG,SAAS,GAAIC,UAAD,IAAgB;AAChC,MAAIC,MAAM,GAAGD,UAAU,CAACE,IAAX,CAAgBC,KAAhB,CAAsB,eAAtB,CAAb;AACA;;AACAF,EAAAA,MAAM,GAAGA,MAAM,GAAGA,MAAM,CAAC,CAAD,CAAN,GAAYA,MAAM,CAAC,CAAD,CAAN,CAAUG,MAAV,EAAf,GAAoC,GAAnD;AAEA,SAAOH,MAAP;AACD,CAND;;eAQe;AACbjB,EAAAA,gBADa;AAEbQ,EAAAA,UAFa;AAGbJ,EAAAA,gBAHa;AAIb1G,EAAAA,yBAJa;AAKbqH,EAAAA,SALa;AAMb7F,EAAAA,YANa;AAObT,EAAAA,gBAPa;AAQb4B,EAAAA,mBARa;AASbqE,EAAAA,aATa;AAUb9C,EAAAA,OAVa;AAWbE,EAAAA,uBAXa;AAYbmB,EAAAA,cAZa;AAabzB,EAAAA,MAba;AAcbiB,EAAAA,qBAda;AAebzB,EAAAA,UAfa;AAgBb6C,EAAAA,uBAhBa;AAiBbd,EAAAA,oCAjBa;AAkBbF,EAAAA,wBAlBa;AAmBbF,EAAAA,wBAnBa;AAoBbK,EAAAA,mCApBa;AAqBbF,EAAAA,uBArBa;AAsBbF,EAAAA;AAtBa,C","sourcesContent":["import _ from 'lodash';\nimport {jsdocTags, closureTags, typeScriptTags} from './tagNames';\nimport WarnSettings from './WarnSettings';\n\ntype ParserMode = \"jsdoc\"|\"typescript\"|\"closure\";\n\nconst getFunctionParameterNames = (functionNode : Object) : Array<string> => {\n const getParamName = (param) => {\n if (_.has(param, 'name')) {\n return param.name;\n }\n\n if (_.has(param, 'left.name')) {\n return param.left.name;\n }\n\n if (param.type === 'ObjectPattern' || _.get(param, 'left.type') === 'ObjectPattern') {\n return '<ObjectPattern>';\n }\n\n if (param.type === 'ArrayPattern' || _.get(param, 'left.type') === 'ArrayPattern') {\n return '<ArrayPattern>';\n }\n\n if (param.type === 'RestElement') {\n return param.argument.name;\n }\n\n if (param.type === 'TSParameterProperty') {\n return getParamName(param.parameter);\n }\n\n throw new Error('Unsupported function signature format.');\n };\n\n return functionNode.params.map(getParamName);\n};\n\n/**\n * Gets all names of the target type, including those that refer to a path, e.g.\n * \"@param foo; @param foo.bar\".\n */\nconst getJsdocTagsDeep = (jsdoc : Object, targetTagName : string) : Array<Object> => {\n return (jsdoc.tags || []).reduce((arr, {name, tag}, idx) => {\n if (tag !== targetTagName) {\n return arr;\n }\n arr.push({\n idx,\n name,\n });\n\n return arr;\n }, []);\n};\n\nconst getJsdocTags = (jsdoc : Object, targetTagName : string) : Array<string> => {\n let jsdocNames;\n\n jsdocNames = getJsdocTagsDeep(jsdoc, targetTagName);\n\n jsdocNames = jsdocNames.filter(({name}) => {\n return !name.includes('.');\n });\n\n return jsdocNames;\n};\n\nconst modeWarnSettings = WarnSettings();\n\nconst getTagNamesForMode = (mode, context) => {\n switch (mode) {\n case 'jsdoc':\n return jsdocTags;\n case 'typescript':\n return typeScriptTags;\n case 'closure':\n return closureTags;\n default:\n if (!modeWarnSettings.hasBeenWarned(context, 'mode')) {\n context.report({\n loc: {\n start: {\n column: 1,\n line: 1,\n },\n },\n message: `Unrecognized value \\`${mode}\\` for \\`settings.jsdoc.mode\\`.`,\n });\n modeWarnSettings.markSettingAsWarned(context, 'mode');\n }\n\n // We'll avoid breaking too many other rules\n return jsdocTags;\n }\n};\n\nconst getPreferredTagName = (\n context,\n mode : ParserMode,\n name : string,\n tagPreference : Object = {},\n) : string|Object => {\n const prefValues = _.values(tagPreference);\n if (prefValues.includes(name) || prefValues.some((prefVal) => {\n return prefVal && typeof prefVal === 'object' && prefVal.replacement === name;\n })) {\n return name;\n }\n\n if (_.has(tagPreference, name)) {\n return tagPreference[name];\n }\n\n const tagNames = getTagNamesForMode(mode, context);\n\n const preferredTagName = _.findKey(tagNames, (aliases) => {\n return aliases.includes(name);\n });\n if (preferredTagName) {\n return preferredTagName;\n }\n\n return name;\n};\n\nconst isValidTag = (\n context,\n mode : ParserMode,\n name : string,\n definedTags : Array,\n) : boolean => {\n const tagNames = getTagNamesForMode(mode, context);\n const validTagNames = _.keys(tagNames).concat(_.flatten(_.values(tagNames)));\n const additionalTags = definedTags;\n const allTags = validTagNames.concat(additionalTags);\n\n return allTags.includes(name);\n};\n\nconst hasTag = (jsdoc : Object, targetTagName : string) : boolean => {\n const targetTagLower = targetTagName.toLowerCase();\n\n return _.some(jsdoc.tags, (doc : Object) => {\n return doc.tag.toLowerCase() === targetTagLower;\n });\n};\n\nconst hasATag = (jsdoc : Object, targetTagNames : Array) : boolean => {\n return targetTagNames.some((targetTagName) => {\n return hasTag(jsdoc, targetTagName);\n });\n};\n\n/**\n * Checks if the JSDoc comment declares a return value.\n *\n * @param {JsDocTag} tag\n * the tag which should be checked.\n * @returns {boolean}\n * true in case a return value is declared; otherwise false.\n */\nconst hasDefinedTypeReturnTag = (tag) => {\n // The function should not continue in the event @returns is not defined...\n if (typeof tag === 'undefined' || tag === null) {\n return false;\n }\n\n // .. same applies if it declares `@returns {undefined}` or `@returns {void}`\n const tagType = tag.type.trim();\n if (tagType === 'undefined' || tagType === 'void') {\n return false;\n }\n\n // In any other case, something must be returned, and\n // a return statement is expected\n return true;\n};\n\nconst tagsWithMandatoryTypePosition = [\n // These both show curly brackets in the doc signature and examples\n // \"typeExpression\"\n 'implements',\n\n // \"typeName\"\n 'type',\n];\n\nconst tagsWithMandatoryTypePositionClosure = [\n ...tagsWithMandatoryTypePosition,\n 'this',\n 'define',\n];\n\n// All of these have a signature with \"type\" except for\n// `augments`/`extends` (\"namepath\")\n// `param`/`arg`/`argument` (no signature)\n// `property`/`prop` (no signature)\n// `modifies` (undocumented)\nconst tagsWithOptionalTypePosition = [\n // These have the example showing curly brackets but not in their doc signature, e.g.: https://jsdoc.app/tags-enum.html\n 'enum',\n 'member', 'var',\n\n 'typedef',\n\n // These do not show curly brackets in either the signature or examples\n 'augments', 'extends',\n\n 'class', 'constructor',\n 'constant', 'const',\n\n // These show the signature with curly brackets but not in the example\n 'module',\n 'namespace',\n\n // These have no formal signature in the docs but show curly brackets\n // in the examples\n 'param', 'arg', 'argument',\n 'property', 'prop',\n\n // These show curly brackets in the signature and in the examples\n 'returns', 'return',\n 'throws', 'exception',\n 'yields', 'yield',\n\n // Has no documentation, but test example has curly brackets, and\n // \"name\" would be suggested rather than \"namepath\" based on example; not\n // sure if name is required\n 'modifies',\n];\n\nconst tagsWithOptionalTypePositionClosure = [\n ...tagsWithOptionalTypePosition,\n\n 'export',\n\n // Shows the signature with curly brackets but not in the example\n // \"typeExpression\"\n 'package',\n 'private',\n 'protected',\n\n // These do not show a signature nor show curly brackets in the example\n 'public',\n 'static',\n];\n\n// None of these show as having curly brackets for their name/namepath\nconst namepathDefiningTags = [\n // These appear to require a \"name\" in their signature, albeit these\n // are somewhat different from other \"name\"'s (including as described\n // at https://jsdoc.app/about-namepaths.html )\n 'external', 'host',\n 'event',\n\n // These allow for \"name\"'s in their signature, but indicate as optional\n 'class', 'constructor',\n 'constant', 'const',\n 'function', 'func', 'method',\n 'interface',\n 'member', 'var',\n 'mixin',\n 'namespace',\n\n // Todo: Should add `module` here (with optional \"name\" and no curly brackets);\n // this block impacts `no-undefined-types` and `valid-types` (search for\n // \"isNamepathDefiningTag|tagMightHaveNamePosition|tagMightHaveEitherTypeOrNamePosition\")\n\n // These seem to all require a \"namepath\" in their signatures (with no counter-examples)\n 'name',\n 'typedef',\n 'callback',\n];\n\n// The following do not seem to allow curly brackets in their doc\n// signature or examples (besides `modifies`)\nconst tagsWithOptionalNamePosition = [\n ...namepathDefiningTags,\n\n // `borrows` has a different format, however, so needs special parsing;\n // seems to require both, and as \"namepath\"'s\n 'borrows',\n\n // Signature seems to require a \"name\" (of an event) and no counter-examples\n 'emits', 'fires',\n 'listens',\n\n // Signature seems to require a \"namepath\" (and no counter-examples)\n 'alias',\n 'augments', 'extends',\n 'lends',\n 'this',\n\n // Signature seems to require a \"namepath\" (and no counter-examples),\n // though it allows an incomplete namepath ending with connecting symbol\n 'memberof', 'memberof!',\n\n // Signature seems to require a \"OtherObjectPath\" with no counter-examples\n 'mixes',\n\n // Signature allows for \"namepath\" or text\n 'see',\n];\n\n// Todo: `@link` seems to require a namepath OR URL and might be checked as such.\n\n// The doc signature of `event` seems to require a \"name\"\nconst tagsWithMandatoryNamePosition = [\n // \"name\" (and a special syntax for the `external` name)\n 'external', 'host',\n\n // \"namepath\"\n 'callback',\n 'name',\n 'typedef',\n];\n\nconst tagsWithMandatoryTypeOrNamePosition = [\n // \"namepath\"\n 'alias',\n 'augments', 'extends',\n 'borrows',\n 'lends',\n 'memberof', 'memberof!',\n 'name',\n 'this',\n 'typedef',\n\n // \"name\"\n 'external', 'host',\n\n // \"OtherObjectPath\"\n 'mixes',\n];\n\nconst isNamepathDefiningTag = (tagName) => {\n return namepathDefiningTags.includes(tagName);\n};\n\nconst tagMightHaveTypePosition = (mode, tag) => {\n if (mode === 'closure') {\n return tagsWithMandatoryTypePositionClosure.includes(tag) ||\n tagsWithOptionalTypePositionClosure.includes(tag);\n }\n\n return tagsWithMandatoryTypePosition.includes(tag) ||\n tagsWithOptionalTypePosition.includes(tag);\n};\n\nconst tagMustHaveTypePosition = (mode, tag) => {\n if (mode === 'closure') {\n return tagsWithMandatoryTypePositionClosure.includes(tag);\n }\n\n return tagsWithMandatoryTypePosition.includes(tag);\n};\n\nconst tagMightHaveNamePosition = (tag) => {\n return tagsWithOptionalNamePosition.includes(tag);\n};\n\nconst tagMustHaveNamePosition = (tag) => {\n return tagsWithMandatoryNamePosition.includes(tag);\n};\n\nconst tagMightHaveEitherTypeOrNamePosition = (mode, tag) => {\n return tagMightHaveTypePosition(mode, tag) || tagMightHaveNamePosition(tag);\n};\n\nconst tagMustHaveEitherTypeOrNamePosition = (tag) => {\n return tagsWithMandatoryTypeOrNamePosition.includes(tag);\n};\n\n/**\n * Checks if a node has a return statement. Void return does not count.\n *\n * @param {object} node\n * @returns {boolean}\n */\n// eslint-disable-next-line complexity\nconst hasReturnValue = (node) => {\n if (!node) {\n return false;\n }\n switch (node.type) {\n case 'FunctionExpression':\n case 'FunctionDeclaration':\n case 'ArrowFunctionExpression': {\n return node.expression || hasReturnValue(node.body);\n }\n case 'BlockStatement': {\n return node.body.some((bodyNode) => {\n return bodyNode.type !== 'FunctionDeclaration' && hasReturnValue(bodyNode);\n });\n }\n case 'WhileStatement':\n case 'DoWhileStatement':\n case 'ForStatement':\n case 'ForInStatement':\n case 'ForOfStatement':\n case 'WithStatement': {\n return hasReturnValue(node.body);\n }\n case 'IfStatement': {\n return hasReturnValue(node.consequent) || hasReturnValue(node.alternate);\n }\n case 'TryStatement': {\n return hasReturnValue(node.block) ||\n hasReturnValue(node.handler && node.handler.body) ||\n hasReturnValue(node.finalizer);\n }\n case 'SwitchStatement': {\n return node.cases.some(\n (someCase) => {\n return someCase.consequent.some(hasReturnValue);\n },\n );\n }\n case 'ReturnStatement': {\n // void return does not count.\n if (node.argument === null) {\n return false;\n }\n\n return true;\n }\n default: {\n return false;\n }\n }\n};\n\n/** @param {string} tag */\n/*\nconst isInlineTag = (tag) => {\n return /^(@link|@linkcode|@linkplain|@tutorial) /u.test(tag);\n};\n*/\n\n/**\n * Parses GCC Generic/Template types\n *\n * @see {https://github.com/google/closure-compiler/wiki/Generic-Types}\n * @param {JsDocTag} tag\n * @returns {Array<string>}\n */\nconst parseClosureTemplateTag = (tag) => {\n return (tag.name + ' ' + tag.description)\n .split(',')\n .map((type) => {\n return type.trim();\n });\n};\n\n/**\n * Checks user option for `contexts` array, defaulting to\n * contexts designated by the rule. Returns an array of\n * ESTree AST types, indicating allowable contexts.\n *\n * @param {*} context\n * @param {true|string[]} defaultContexts\n * @returns {string[]}\n */\nconst enforcedContexts = (context, defaultContexts) => {\n const {\n /* istanbul ignore next */\n contexts = defaultContexts === true ? [\n 'ArrowFunctionExpression',\n 'FunctionDeclaration',\n 'FunctionExpression',\n ] : defaultContexts,\n } = context.options[0] || {};\n\n return contexts;\n};\n\n/**\n * @param {string[]} contexts\n * @param {Function} checkJsdoc\n */\nconst getContextObject = (contexts, checkJsdoc) => {\n return contexts.reduce((obj, prop) => {\n obj[prop] = checkJsdoc;\n\n return obj;\n }, {});\n};\n\nconst filterTags = (tags = [], filter) => {\n return tags.filter(filter);\n};\n\nconst tagsWithNamesAndDescriptions = [\n 'param', 'arg', 'argument', 'property', 'prop',\n\n // These two are parsed by our custom parser as though having a `name`\n 'returns', 'return',\n];\n\nconst getTagsByType = (context, mode, tags, tagPreference) => {\n const descName = getPreferredTagName(context, mode, 'description', tagPreference);\n const tagsWithoutNames = [];\n const tagsWithNames = filterTags(tags, (tag) => {\n const {tag: tagName} = tag;\n const tagWithName = tagsWithNamesAndDescriptions.includes(tagName);\n if (!tagWithName && tagName !== descName) {\n tagsWithoutNames.push(tag);\n }\n\n return tagWithName;\n });\n\n return {\n tagsWithNames,\n tagsWithoutNames,\n };\n};\n\nconst getIndent = (sourceCode) => {\n let indent = sourceCode.text.match(/^\\n*([ \\t]+)/u);\n /* istanbul ignore next */\n indent = indent ? indent[1] + indent[1].charAt() : ' ';\n\n return indent;\n};\n\nexport default {\n enforcedContexts,\n filterTags,\n getContextObject,\n getFunctionParameterNames,\n getIndent,\n getJsdocTags,\n getJsdocTagsDeep,\n getPreferredTagName,\n getTagsByType,\n hasATag,\n hasDefinedTypeReturnTag,\n hasReturnValue,\n hasTag,\n isNamepathDefiningTag,\n isValidTag,\n parseClosureTemplateTag,\n tagMightHaveEitherTypeOrNamePosition,\n tagMightHaveNamePosition,\n tagMightHaveTypePosition,\n tagMustHaveEitherTypeOrNamePosition,\n tagMustHaveNamePosition,\n tagMustHaveTypePosition,\n};\n"],"file":"jsdocUtils.js"}