eslint-plugin-jsdoc 63.0.7 → 63.0.8
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.
|
@@ -116,6 +116,14 @@ var _default = exports.default = (0, _iterateJsdoc.default)(({
|
|
|
116
116
|
}
|
|
117
117
|
}
|
|
118
118
|
}
|
|
119
|
+
|
|
120
|
+
// Template names may be used only within the heritage clause types of a
|
|
121
|
+
// class/interface, e.g. `@template T` used in `@augments {Base<T>}`.
|
|
122
|
+
for (const heritageTagName of ['augments', 'extends', 'implements']) {
|
|
123
|
+
for (const heritageTag of (0, _jsdocUtils.getTags)(jsdoc, heritageTagName)) {
|
|
124
|
+
checkForUsedTypes(heritageTag.type);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
119
127
|
checkTemplateTags();
|
|
120
128
|
};
|
|
121
129
|
const handleTypeAliases = () => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checkTemplateNames.cjs","names":["_iterateJsdoc","_interopRequireWildcard","require","_jsdocUtils","_jsdoccomment","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","_default","exports","iterateJsdoc","jsdoc","node","report","settings","sourceCode","utils","mode","tgName","getPreferredTagName","tagName","templateTags","getTags","usedNames","Set","checkForUsedTypes","potentialType","parsedType","tryParseType","parseType","traverse","nde","type","value","add","checkParamsAndReturnsTags","jsdc","paramName","paramTags","paramTag","returnsName","returnsTags","returnsTag","checkTemplateTags","tag","names","parseClosureTemplateTag","nme","checkParameters","aliasDeclaration","checkParamsAndReturns","params","typeParameters","name","body","commentNode","getJSDocComment","innerJsdoc","parseComment","typeName","typeTags","typeTag","handleTypeAliases","declaration","callbackTags","functionTags","length","typedefTags","potentialTypedefType","propertyName","propertyTags","propertyTag","iterateAllJsdocs","meta","docs","description","url","schema","module"],"sources":["../../src/rules/checkTemplateNames.js"],"sourcesContent":["import iterateJsdoc, {\n parseComment,\n} from '../iterateJsdoc.js';\nimport {\n getTags,\n} from '../jsdocUtils.js';\nimport {\n getJSDocComment,\n parse as parseType,\n traverse,\n tryParse as tryParseType,\n} from '@es-joy/jsdoccomment';\n\nexport default iterateJsdoc(({\n jsdoc,\n node,\n report,\n settings,\n sourceCode,\n utils,\n}) => {\n const {\n mode,\n } = settings;\n\n const tgName = /** @type {string} */ (utils.getPreferredTagName({\n tagName: 'template',\n }));\n if (!tgName) {\n return;\n }\n\n const templateTags = utils.getTags(tgName);\n\n const usedNames = new Set();\n /**\n * @param {string} potentialType\n */\n const checkForUsedTypes = (potentialType) => {\n let parsedType;\n try {\n parsedType = mode === 'permissive' ?\n tryParseType(/** @type {string} */ (potentialType)) :\n parseType(/** @type {string} */ (potentialType), mode);\n } catch {\n return;\n }\n\n traverse(parsedType, (nde) => {\n const {\n type,\n value,\n } = /** @type {import('jsdoc-type-pratt-parser').NameResult} */ (nde);\n if (type === 'JsdocTypeName') {\n usedNames.add(value);\n }\n });\n };\n\n const checkParamsAndReturnsTags = (jsdc = jsdoc) => {\n const paramName = /** @type {string} */ (utils.getPreferredTagName({\n tagName: 'param',\n }));\n const paramTags = getTags(jsdc, paramName);\n for (const paramTag of paramTags) {\n checkForUsedTypes(paramTag.type);\n }\n\n const returnsName = /** @type {string} */ (utils.getPreferredTagName({\n tagName: 'returns',\n }));\n const returnsTags = getTags(jsdc, returnsName);\n for (const returnsTag of returnsTags) {\n checkForUsedTypes(returnsTag.type);\n }\n };\n\n const checkTemplateTags = () => {\n for (const tag of templateTags) {\n const names = utils.parseClosureTemplateTag(tag);\n for (const nme of names) {\n if (!usedNames.has(nme)) {\n report(`@${tgName} ${nme} not in use`, null, tag);\n }\n }\n }\n };\n\n /**\n * @param {import('@typescript-eslint/types').TSESTree.FunctionDeclaration|\n * import('@typescript-eslint/types').TSESTree.ClassDeclaration|\n * import('@typescript-eslint/types').TSESTree.TSInterfaceDeclaration|\n * import('@typescript-eslint/types').TSESTree.TSTypeAliasDeclaration} aliasDeclaration\n * @param {boolean} [checkParamsAndReturns]\n */\n const checkParameters = (aliasDeclaration, checkParamsAndReturns) => {\n /* c8 ignore next -- Guard */\n const {\n params,\n } = aliasDeclaration.typeParameters ?? {\n params: [],\n };\n for (const {\n name: {\n name,\n },\n } of params) {\n usedNames.add(name);\n }\n\n if (checkParamsAndReturns) {\n checkParamsAndReturnsTags();\n } else if (aliasDeclaration.type === 'ClassDeclaration') {\n /* c8 ignore next -- TS */\n for (const nde of aliasDeclaration?.body?.body ?? []) {\n // @ts-expect-error Should be ok\n const commentNode = getJSDocComment(sourceCode, nde, settings);\n if (!commentNode) {\n continue;\n }\n\n const innerJsdoc = parseComment(commentNode, '');\n checkParamsAndReturnsTags(innerJsdoc);\n\n const typeName = /** @type {string} */ (utils.getPreferredTagName({\n tagName: 'type',\n }));\n const typeTags = getTags(innerJsdoc, typeName);\n for (const typeTag of typeTags) {\n checkForUsedTypes(typeTag.type);\n }\n }\n }\n\n checkTemplateTags();\n };\n\n const handleTypeAliases = () => {\n const nde = /** @type {import('@typescript-eslint/types').TSESTree.Node} */ (\n node\n );\n if (!nde) {\n return;\n }\n\n switch (nde.type) {\n case 'ClassDeclaration':\n case 'TSInterfaceDeclaration':\n case 'TSTypeAliasDeclaration':\n checkParameters(nde);\n break;\n case 'ExportDefaultDeclaration':\n case 'ExportNamedDeclaration':\n switch (nde.declaration?.type) {\n case 'ClassDeclaration':\n case 'TSInterfaceDeclaration':\n case 'TSTypeAliasDeclaration':\n checkParameters(nde.declaration);\n break;\n case 'FunctionDeclaration':\n checkParameters(nde.declaration, true);\n break;\n }\n\n break;\n case 'FunctionDeclaration':\n checkParameters(nde, true);\n break;\n }\n };\n\n const callbackTags = utils.getTags('callback');\n const functionTags = utils.getTags('function');\n if (callbackTags.length || functionTags.length) {\n checkParamsAndReturnsTags();\n checkTemplateTags();\n return;\n }\n\n const typedefTags = utils.getTags('typedef');\n if (!typedefTags.length || typedefTags.length >= 2) {\n handleTypeAliases();\n return;\n }\n\n const potentialTypedefType = typedefTags[0].type;\n checkForUsedTypes(potentialTypedefType);\n\n const propertyName = /** @type {string} */ (utils.getPreferredTagName({\n tagName: 'property',\n }));\n const propertyTags = utils.getTags(propertyName);\n for (const propertyTag of propertyTags) {\n checkForUsedTypes(propertyTag.type);\n }\n\n checkTemplateTags();\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Checks that any `@template` names are actually used in the connected `@typedef` or type alias.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/check-template-names.md#repos-sticky-header',\n },\n schema: [],\n type: 'suggestion',\n },\n});\n"],"mappings":";;;;;;AAAA,IAAAA,aAAA,GAAAC,uBAAA,CAAAC,OAAA;AAGA,IAAAC,WAAA,GAAAD,OAAA;AAGA,IAAAE,aAAA,GAAAF,OAAA;AAK8B,SAAAD,wBAAAI,CAAA,EAAAC,CAAA,6BAAAC,OAAA,MAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAN,uBAAA,YAAAA,CAAAI,CAAA,EAAAC,CAAA,SAAAA,CAAA,IAAAD,CAAA,IAAAA,CAAA,CAAAK,UAAA,SAAAL,CAAA,MAAAM,CAAA,EAAAC,CAAA,EAAAC,CAAA,KAAAC,SAAA,QAAAC,OAAA,EAAAV,CAAA,iBAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,SAAAQ,CAAA,MAAAF,CAAA,GAAAL,CAAA,GAAAG,CAAA,GAAAD,CAAA,QAAAG,CAAA,CAAAK,GAAA,CAAAX,CAAA,UAAAM,CAAA,CAAAM,GAAA,CAAAZ,CAAA,GAAAM,CAAA,CAAAO,GAAA,CAAAb,CAAA,EAAAQ,CAAA,gBAAAP,CAAA,IAAAD,CAAA,gBAAAC,CAAA,OAAAa,cAAA,CAAAC,IAAA,CAAAf,CAAA,EAAAC,CAAA,OAAAM,CAAA,IAAAD,CAAA,GAAAU,MAAA,CAAAC,cAAA,KAAAD,MAAA,CAAAE,wBAAA,CAAAlB,CAAA,EAAAC,CAAA,OAAAM,CAAA,CAAAK,GAAA,IAAAL,CAAA,CAAAM,GAAA,IAAAP,CAAA,CAAAE,CAAA,EAAAP,CAAA,EAAAM,CAAA,IAAAC,CAAA,CAAAP,CAAA,IAAAD,CAAA,CAAAC,CAAA,WAAAO,CAAA,KAAAR,CAAA,EAAAC,CAAA;AAAA,IAAAkB,QAAA,GAAAC,OAAA,CAAAV,OAAA,GAEf,IAAAW,qBAAY,EAAC,CAAC;EAC3BC,KAAK;EACLC,IAAI;EACJC,MAAM;EACNC,QAAQ;EACRC,UAAU;EACVC;AACF,CAAC,KAAK;EACJ,MAAM;IACJC;EACF,CAAC,GAAGH,QAAQ;EAEZ,MAAMI,MAAM,GAAG,qBAAuBF,KAAK,CAACG,mBAAmB,CAAC;IAC9DC,OAAO,EAAE;EACX,CAAC,CAAE;EACH,IAAI,CAACF,MAAM,EAAE;IACX;EACF;EAEA,MAAMG,YAAY,GAAGL,KAAK,CAACM,OAAO,CAACJ,MAAM,CAAC;EAE1C,MAAMK,SAAS,GAAG,IAAIC,GAAG,CAAC,CAAC;EAC3B;AACF;AACA;EACE,MAAMC,iBAAiB,GAAIC,aAAa,IAAK;IAC3C,IAAIC,UAAU;IACd,IAAI;MACFA,UAAU,GAAGV,IAAI,KAAK,YAAY,GAChC,IAAAW,sBAAY,EAAC,qBAAuBF,aAAc,CAAC,GACnD,IAAAG,mBAAS,EAAC,qBAAuBH,aAAa,EAAGT,IAAI,CAAC;IAC1D,CAAC,CAAC,MAAM;MACN;IACF;IAEA,IAAAa,sBAAQ,EAACH,UAAU,EAAGI,GAAG,IAAK;MAC5B,MAAM;QACJC,IAAI;QACJC;MACF,CAAC,GAAG,2DAA6DF,GAAI;MACrE,IAAIC,IAAI,KAAK,eAAe,EAAE;QAC5BT,SAAS,CAACW,GAAG,CAACD,KAAK,CAAC;MACtB;IACF,CAAC,CAAC;EACJ,CAAC;EAED,MAAME,yBAAyB,GAAGA,CAACC,IAAI,GAAGzB,KAAK,KAAK;IAClD,MAAM0B,SAAS,GAAG,qBAAuBrB,KAAK,CAACG,mBAAmB,CAAC;MACjEC,OAAO,EAAE;IACX,CAAC,CAAE;IACH,MAAMkB,SAAS,GAAG,IAAAhB,mBAAO,EAACc,IAAI,EAAEC,SAAS,CAAC;IAC1C,KAAK,MAAME,QAAQ,IAAID,SAAS,EAAE;MAChCb,iBAAiB,CAACc,QAAQ,CAACP,IAAI,CAAC;IAClC;IAEA,MAAMQ,WAAW,GAAG,qBAAuBxB,KAAK,CAACG,mBAAmB,CAAC;MACnEC,OAAO,EAAE;IACX,CAAC,CAAE;IACH,MAAMqB,WAAW,GAAG,IAAAnB,mBAAO,EAACc,IAAI,EAAEI,WAAW,CAAC;IAC9C,KAAK,MAAME,UAAU,IAAID,WAAW,EAAE;MACpChB,iBAAiB,CAACiB,UAAU,CAACV,IAAI,CAAC;IACpC;EACF,CAAC;EAED,MAAMW,iBAAiB,GAAGA,CAAA,KAAM;IAC9B,KAAK,MAAMC,GAAG,IAAIvB,YAAY,EAAE;MAC9B,MAAMwB,KAAK,GAAG7B,KAAK,CAAC8B,uBAAuB,CAACF,GAAG,CAAC;MAChD,KAAK,MAAMG,GAAG,IAAIF,KAAK,EAAE;QACvB,IAAI,CAACtB,SAAS,CAACvB,GAAG,CAAC+C,GAAG,CAAC,EAAE;UACvBlC,MAAM,CAAC,IAAIK,MAAM,IAAI6B,GAAG,aAAa,EAAE,IAAI,EAAEH,GAAG,CAAC;QACnD;MACF;IACF;EACF,CAAC;;EAED;AACF;AACA;AACA;AACA;AACA;AACA;EACE,MAAMI,eAAe,GAAGA,CAACC,gBAAgB,EAAEC,qBAAqB,KAAK;IACnE;IACA,MAAM;MACJC;IACF,CAAC,GAAGF,gBAAgB,CAACG,cAAc,IAAI;MACrCD,MAAM,EAAE;IACV,CAAC;IACD,KAAK,MAAM;MACTE,IAAI,EAAE;QACJA;MACF;IACF,CAAC,IAAIF,MAAM,EAAE;MACX5B,SAAS,CAACW,GAAG,CAACmB,IAAI,CAAC;IACrB;IAEA,IAAIH,qBAAqB,EAAE;MACzBf,yBAAyB,CAAC,CAAC;IAC7B,CAAC,MAAM,IAAIc,gBAAgB,CAACjB,IAAI,KAAK,kBAAkB,EAAE;MACvD;MACA,KAAK,MAAMD,GAAG,IAAIkB,gBAAgB,EAAEK,IAAI,EAAEA,IAAI,IAAI,EAAE,EAAE;QACpD;QACA,MAAMC,WAAW,GAAG,IAAAC,6BAAe,EAACzC,UAAU,EAAEgB,GAAG,EAAEjB,QAAQ,CAAC;QAC9D,IAAI,CAACyC,WAAW,EAAE;UAChB;QACF;QAEA,MAAME,UAAU,GAAG,IAAAC,0BAAY,EAACH,WAAW,EAAE,EAAE,CAAC;QAChDpB,yBAAyB,CAACsB,UAAU,CAAC;QAErC,MAAME,QAAQ,GAAG,qBAAuB3C,KAAK,CAACG,mBAAmB,CAAC;UAChEC,OAAO,EAAE;QACX,CAAC,CAAE;QACH,MAAMwC,QAAQ,GAAG,IAAAtC,mBAAO,EAACmC,UAAU,EAAEE,QAAQ,CAAC;QAC9C,KAAK,MAAME,OAAO,IAAID,QAAQ,EAAE;UAC9BnC,iBAAiB,CAACoC,OAAO,CAAC7B,IAAI,CAAC;QACjC;MACF;IACF;IAEAW,iBAAiB,CAAC,CAAC;EACrB,CAAC;EAED,MAAMmB,iBAAiB,GAAGA,CAAA,KAAM;IAC9B,MAAM/B,GAAG,GAAG;IACVnB,IACD;IACD,IAAI,CAACmB,GAAG,EAAE;MACR;IACF;IAEA,QAAQA,GAAG,CAACC,IAAI;MACd,KAAK,kBAAkB;MACvB,KAAK,wBAAwB;MAC7B,KAAK,wBAAwB;QAC3BgB,eAAe,CAACjB,GAAG,CAAC;QACpB;MACF,KAAK,0BAA0B;MAC/B,KAAK,wBAAwB;QAC3B,QAAQA,GAAG,CAACgC,WAAW,EAAE/B,IAAI;UAC3B,KAAK,kBAAkB;UACvB,KAAK,wBAAwB;UAC7B,KAAK,wBAAwB;YAC3BgB,eAAe,CAACjB,GAAG,CAACgC,WAAW,CAAC;YAChC;UACF,KAAK,qBAAqB;YACxBf,eAAe,CAACjB,GAAG,CAACgC,WAAW,EAAE,IAAI,CAAC;YACtC;QACJ;QAEA;MACF,KAAK,qBAAqB;QACxBf,eAAe,CAACjB,GAAG,EAAE,IAAI,CAAC;QAC1B;IACJ;EACF,CAAC;EAED,MAAMiC,YAAY,GAAGhD,KAAK,CAACM,OAAO,CAAC,UAAU,CAAC;EAC9C,MAAM2C,YAAY,GAAGjD,KAAK,CAACM,OAAO,CAAC,UAAU,CAAC;EAC9C,IAAI0C,YAAY,CAACE,MAAM,IAAID,YAAY,CAACC,MAAM,EAAE;IAC9C/B,yBAAyB,CAAC,CAAC;IAC3BQ,iBAAiB,CAAC,CAAC;IACnB;EACF;EAEA,MAAMwB,WAAW,GAAGnD,KAAK,CAACM,OAAO,CAAC,SAAS,CAAC;EAC5C,IAAI,CAAC6C,WAAW,CAACD,MAAM,IAAIC,WAAW,CAACD,MAAM,IAAI,CAAC,EAAE;IAClDJ,iBAAiB,CAAC,CAAC;IACnB;EACF;EAEA,MAAMM,oBAAoB,GAAGD,WAAW,CAAC,CAAC,CAAC,CAACnC,IAAI;EAChDP,iBAAiB,CAAC2C,oBAAoB,CAAC;EAEvC,MAAMC,YAAY,GAAG,qBAAuBrD,KAAK,CAACG,mBAAmB,CAAC;IACpEC,OAAO,EAAE;EACX,CAAC,CAAE;EACH,MAAMkD,YAAY,GAAGtD,KAAK,CAACM,OAAO,CAAC+C,YAAY,CAAC;EAChD,KAAK,MAAME,WAAW,IAAID,YAAY,EAAE;IACtC7C,iBAAiB,CAAC8C,WAAW,CAACvC,IAAI,CAAC;EACrC;EAEAW,iBAAiB,CAAC,CAAC;AACrB,CAAC,EAAE;EACD6B,gBAAgB,EAAE,IAAI;EACtBC,IAAI,EAAE;IACJC,IAAI,EAAE;MACJC,WAAW,EAAE,gGAAgG;MAC7GC,GAAG,EAAE;IACP,CAAC;IACDC,MAAM,EAAE,EAAE;IACV7C,IAAI,EAAE;EACR;AACF,CAAC,CAAC;AAAA8C,MAAA,CAAArE,OAAA,GAAAA,OAAA,CAAAV,OAAA","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"checkTemplateNames.cjs","names":["_iterateJsdoc","_interopRequireWildcard","require","_jsdocUtils","_jsdoccomment","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","_default","exports","iterateJsdoc","jsdoc","node","report","settings","sourceCode","utils","mode","tgName","getPreferredTagName","tagName","templateTags","getTags","usedNames","Set","checkForUsedTypes","potentialType","parsedType","tryParseType","parseType","traverse","nde","type","value","add","checkParamsAndReturnsTags","jsdc","paramName","paramTags","paramTag","returnsName","returnsTags","returnsTag","checkTemplateTags","tag","names","parseClosureTemplateTag","nme","checkParameters","aliasDeclaration","checkParamsAndReturns","params","typeParameters","name","body","commentNode","getJSDocComment","innerJsdoc","parseComment","typeName","typeTags","typeTag","heritageTagName","heritageTag","handleTypeAliases","declaration","callbackTags","functionTags","length","typedefTags","potentialTypedefType","propertyName","propertyTags","propertyTag","iterateAllJsdocs","meta","docs","description","url","schema","module"],"sources":["../../src/rules/checkTemplateNames.js"],"sourcesContent":["import iterateJsdoc, {\n parseComment,\n} from '../iterateJsdoc.js';\nimport {\n getTags,\n} from '../jsdocUtils.js';\nimport {\n getJSDocComment,\n parse as parseType,\n traverse,\n tryParse as tryParseType,\n} from '@es-joy/jsdoccomment';\n\nexport default iterateJsdoc(({\n jsdoc,\n node,\n report,\n settings,\n sourceCode,\n utils,\n}) => {\n const {\n mode,\n } = settings;\n\n const tgName = /** @type {string} */ (utils.getPreferredTagName({\n tagName: 'template',\n }));\n if (!tgName) {\n return;\n }\n\n const templateTags = utils.getTags(tgName);\n\n const usedNames = new Set();\n /**\n * @param {string} potentialType\n */\n const checkForUsedTypes = (potentialType) => {\n let parsedType;\n try {\n parsedType = mode === 'permissive' ?\n tryParseType(/** @type {string} */ (potentialType)) :\n parseType(/** @type {string} */ (potentialType), mode);\n } catch {\n return;\n }\n\n traverse(parsedType, (nde) => {\n const {\n type,\n value,\n } = /** @type {import('jsdoc-type-pratt-parser').NameResult} */ (nde);\n if (type === 'JsdocTypeName') {\n usedNames.add(value);\n }\n });\n };\n\n const checkParamsAndReturnsTags = (jsdc = jsdoc) => {\n const paramName = /** @type {string} */ (utils.getPreferredTagName({\n tagName: 'param',\n }));\n const paramTags = getTags(jsdc, paramName);\n for (const paramTag of paramTags) {\n checkForUsedTypes(paramTag.type);\n }\n\n const returnsName = /** @type {string} */ (utils.getPreferredTagName({\n tagName: 'returns',\n }));\n const returnsTags = getTags(jsdc, returnsName);\n for (const returnsTag of returnsTags) {\n checkForUsedTypes(returnsTag.type);\n }\n };\n\n const checkTemplateTags = () => {\n for (const tag of templateTags) {\n const names = utils.parseClosureTemplateTag(tag);\n for (const nme of names) {\n if (!usedNames.has(nme)) {\n report(`@${tgName} ${nme} not in use`, null, tag);\n }\n }\n }\n };\n\n /**\n * @param {import('@typescript-eslint/types').TSESTree.FunctionDeclaration|\n * import('@typescript-eslint/types').TSESTree.ClassDeclaration|\n * import('@typescript-eslint/types').TSESTree.TSInterfaceDeclaration|\n * import('@typescript-eslint/types').TSESTree.TSTypeAliasDeclaration} aliasDeclaration\n * @param {boolean} [checkParamsAndReturns]\n */\n const checkParameters = (aliasDeclaration, checkParamsAndReturns) => {\n /* c8 ignore next -- Guard */\n const {\n params,\n } = aliasDeclaration.typeParameters ?? {\n params: [],\n };\n for (const {\n name: {\n name,\n },\n } of params) {\n usedNames.add(name);\n }\n\n if (checkParamsAndReturns) {\n checkParamsAndReturnsTags();\n } else if (aliasDeclaration.type === 'ClassDeclaration') {\n /* c8 ignore next -- TS */\n for (const nde of aliasDeclaration?.body?.body ?? []) {\n // @ts-expect-error Should be ok\n const commentNode = getJSDocComment(sourceCode, nde, settings);\n if (!commentNode) {\n continue;\n }\n\n const innerJsdoc = parseComment(commentNode, '');\n checkParamsAndReturnsTags(innerJsdoc);\n\n const typeName = /** @type {string} */ (utils.getPreferredTagName({\n tagName: 'type',\n }));\n const typeTags = getTags(innerJsdoc, typeName);\n for (const typeTag of typeTags) {\n checkForUsedTypes(typeTag.type);\n }\n }\n }\n\n // Template names may be used only within the heritage clause types of a\n // class/interface, e.g. `@template T` used in `@augments {Base<T>}`.\n for (const heritageTagName of [\n 'augments', 'extends', 'implements',\n ]) {\n for (const heritageTag of getTags(jsdoc, heritageTagName)) {\n checkForUsedTypes(heritageTag.type);\n }\n }\n\n checkTemplateTags();\n };\n\n const handleTypeAliases = () => {\n const nde = /** @type {import('@typescript-eslint/types').TSESTree.Node} */ (\n node\n );\n if (!nde) {\n return;\n }\n\n switch (nde.type) {\n case 'ClassDeclaration':\n case 'TSInterfaceDeclaration':\n case 'TSTypeAliasDeclaration':\n checkParameters(nde);\n break;\n case 'ExportDefaultDeclaration':\n case 'ExportNamedDeclaration':\n switch (nde.declaration?.type) {\n case 'ClassDeclaration':\n case 'TSInterfaceDeclaration':\n case 'TSTypeAliasDeclaration':\n checkParameters(nde.declaration);\n break;\n case 'FunctionDeclaration':\n checkParameters(nde.declaration, true);\n break;\n }\n\n break;\n case 'FunctionDeclaration':\n checkParameters(nde, true);\n break;\n }\n };\n\n const callbackTags = utils.getTags('callback');\n const functionTags = utils.getTags('function');\n if (callbackTags.length || functionTags.length) {\n checkParamsAndReturnsTags();\n checkTemplateTags();\n return;\n }\n\n const typedefTags = utils.getTags('typedef');\n if (!typedefTags.length || typedefTags.length >= 2) {\n handleTypeAliases();\n return;\n }\n\n const potentialTypedefType = typedefTags[0].type;\n checkForUsedTypes(potentialTypedefType);\n\n const propertyName = /** @type {string} */ (utils.getPreferredTagName({\n tagName: 'property',\n }));\n const propertyTags = utils.getTags(propertyName);\n for (const propertyTag of propertyTags) {\n checkForUsedTypes(propertyTag.type);\n }\n\n checkTemplateTags();\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Checks that any `@template` names are actually used in the connected `@typedef` or type alias.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/check-template-names.md#repos-sticky-header',\n },\n schema: [],\n type: 'suggestion',\n },\n});\n"],"mappings":"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","ignoreList":[]}
|
package/package.json
CHANGED
|
@@ -132,6 +132,16 @@ export default iterateJsdoc(({
|
|
|
132
132
|
}
|
|
133
133
|
}
|
|
134
134
|
|
|
135
|
+
// Template names may be used only within the heritage clause types of a
|
|
136
|
+
// class/interface, e.g. `@template T` used in `@augments {Base<T>}`.
|
|
137
|
+
for (const heritageTagName of [
|
|
138
|
+
'augments', 'extends', 'implements',
|
|
139
|
+
]) {
|
|
140
|
+
for (const heritageTag of getTags(jsdoc, heritageTagName)) {
|
|
141
|
+
checkForUsedTypes(heritageTag.type);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
|
|
135
145
|
checkTemplateTags();
|
|
136
146
|
};
|
|
137
147
|
|