UNPKG

eslint-plugin-jsdoc

Version:
1 lines 7.44 kB
{"version":3,"file":"tsNoUnnecessaryTemplateExpression.cjs","names":["_iterateJsdoc","_interopRequireDefault","require","_jsdocUtils","_jsdoccomment","e","__esModule","default","_default","exports","iterateJsdoc","context","indent","jsdoc","settings","utils","mode","enableFixer","options","checkType","tag","potentialType","type","parsedType","parseType","traverse","nde","parentNode","property","index","stringInterpolationIndex","interpolations","findIndex","interpolation","reportJSDoc","literals","splice","value","rewireByParsedType","length","tags","filterTags","Boolean","tagMightHaveTypePosition","iterateAllJsdocs","meta","docs","description","url","fixable","schema","additionalProperties","properties","module"],"sources":["../../src/rules/tsNoUnnecessaryTemplateExpression.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc.js';\nimport {\n rewireByParsedType,\n} from '../jsdocUtils.js';\nimport {\n parse as parseType,\n traverse,\n} from '@es-joy/jsdoccomment';\n\nexport default iterateJsdoc(({\n context,\n indent,\n jsdoc,\n settings,\n utils,\n}) => {\n if (settings.mode !== 'typescript') {\n return;\n }\n\n const {\n enableFixer = true,\n } = context.options[0] ?? {};\n\n /**\n * @param {import('@es-joy/jsdoccomment').JsdocTagWithInline} tag\n */\n const checkType = (tag) => {\n const potentialType = tag.type;\n /** @type {import('jsdoc-type-pratt-parser').RootResult} */\n let parsedType;\n try {\n parsedType = parseType(\n /** @type {string} */ (potentialType), 'typescript',\n );\n } catch {\n return;\n }\n\n traverse(parsedType, (nde, parentNode, property, index) => {\n switch (nde.type) {\n case 'JsdocTypeTemplateLiteral': {\n const stringInterpolationIndex = nde.interpolations.findIndex((interpolation) => {\n return interpolation.type === 'JsdocTypeStringValue';\n });\n if (stringInterpolationIndex > -1) {\n utils.reportJSDoc(\n 'Found an unnecessary string literal within a template.',\n tag,\n enableFixer ? () => {\n nde.literals.splice(\n stringInterpolationIndex,\n 2,\n nde.literals[stringInterpolationIndex] +\n /** @type {import('jsdoc-type-pratt-parser').StringValueResult} */\n (nde.interpolations[stringInterpolationIndex]).value +\n nde.literals[stringInterpolationIndex + 1],\n );\n\n nde.interpolations.splice(\n stringInterpolationIndex, 1,\n );\n\n rewireByParsedType(jsdoc, tag, parsedType, indent);\n } : null,\n );\n } else if (nde.literals.length === 2 && nde.literals[0] === '' &&\n nde.literals[1] === ''\n ) {\n utils.reportJSDoc(\n 'Found a lone template expression within a template.',\n tag,\n enableFixer ? () => {\n const interpolation = nde.interpolations[0];\n\n if (parentNode && property) {\n if (typeof index === 'number') {\n // @ts-expect-error Safe\n parentNode[property][index] = interpolation;\n } else {\n // @ts-expect-error Safe\n parentNode[property] = interpolation;\n }\n } else {\n parsedType = interpolation;\n }\n\n rewireByParsedType(jsdoc, tag, parsedType, indent);\n } : null,\n );\n }\n }\n }\n });\n };\n\n const tags = utils.filterTags(({\n tag,\n }) => {\n return Boolean(tag !== 'import' && utils.tagMightHaveTypePosition(tag));\n });\n\n for (const tag of tags) {\n if (tag.type) {\n checkType(tag);\n }\n }\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Catches unnecessary template expressions such as string expressions within a template literal.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/ts-no-unnecessary-template-expression.md#repos-sticky-header',\n },\n fixable: 'code',\n schema: [\n {\n additionalProperties: false,\n properties: {\n enableFixer: {\n description: 'Whether to enable the fixer. Defaults to `true`.',\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"mappings":";;;;;;AAAA,IAAAA,aAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,WAAA,GAAAD,OAAA;AAGA,IAAAE,aAAA,GAAAF,OAAA;AAG8B,SAAAD,uBAAAI,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAAA,IAAAG,QAAA,GAAAC,OAAA,CAAAF,OAAA,GAEf,IAAAG,qBAAY,EAAC,CAAC;EAC3BC,OAAO;EACPC,MAAM;EACNC,KAAK;EACLC,QAAQ;EACRC;AACF,CAAC,KAAK;EACJ,IAAID,QAAQ,CAACE,IAAI,KAAK,YAAY,EAAE;IAClC;EACF;EAEA,MAAM;IACJC,WAAW,GAAG;EAChB,CAAC,GAAGN,OAAO,CAACO,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;;EAE5B;AACF;AACA;EACE,MAAMC,SAAS,GAAIC,GAAG,IAAK;IACzB,MAAMC,aAAa,GAAGD,GAAG,CAACE,IAAI;IAC9B;IACA,IAAIC,UAAU;IACd,IAAI;MACFA,UAAU,GAAG,IAAAC,mBAAS,EACpB,qBAAuBH,aAAa,EAAG,YACzC,CAAC;IACH,CAAC,CAAC,MAAM;MACN;IACF;IAEA,IAAAI,sBAAQ,EAACF,UAAU,EAAE,CAACG,GAAG,EAAEC,UAAU,EAAEC,QAAQ,EAAEC,KAAK,KAAK;MACzD,QAAQH,GAAG,CAACJ,IAAI;QACd,KAAK,0BAA0B;UAAE;YAC/B,MAAMQ,wBAAwB,GAAGJ,GAAG,CAACK,cAAc,CAACC,SAAS,CAAEC,aAAa,IAAK;cAC/E,OAAOA,aAAa,CAACX,IAAI,KAAK,sBAAsB;YACtD,CAAC,CAAC;YACF,IAAIQ,wBAAwB,GAAG,CAAC,CAAC,EAAE;cACjCf,KAAK,CAACmB,WAAW,CACf,wDAAwD,EACxDd,GAAG,EACHH,WAAW,GAAG,MAAM;gBAClBS,GAAG,CAACS,QAAQ,CAACC,MAAM,CACjBN,wBAAwB,EACxB,CAAC,EACDJ,GAAG,CAACS,QAAQ,CAACL,wBAAwB,CAAC,GACpC;gBACCJ,GAAG,CAACK,cAAc,CAACD,wBAAwB,CAAC,CAAEO,KAAK,GACpDX,GAAG,CAACS,QAAQ,CAACL,wBAAwB,GAAG,CAAC,CAC7C,CAAC;gBAEDJ,GAAG,CAACK,cAAc,CAACK,MAAM,CACvBN,wBAAwB,EAAE,CAC5B,CAAC;gBAED,IAAAQ,8BAAkB,EAACzB,KAAK,EAAEO,GAAG,EAAEG,UAAU,EAAEX,MAAM,CAAC;cACpD,CAAC,GAAG,IACN,CAAC;YACH,CAAC,MAAM,IAAIc,GAAG,CAACS,QAAQ,CAACI,MAAM,KAAK,CAAC,IAAIb,GAAG,CAACS,QAAQ,CAAC,CAAC,CAAC,KAAK,EAAE,IAC5DT,GAAG,CAACS,QAAQ,CAAC,CAAC,CAAC,KAAK,EAAE,EACtB;cACApB,KAAK,CAACmB,WAAW,CACf,qDAAqD,EACrDd,GAAG,EACHH,WAAW,GAAG,MAAM;gBAClB,MAAMgB,aAAa,GAAGP,GAAG,CAACK,cAAc,CAAC,CAAC,CAAC;gBAE3C,IAAIJ,UAAU,IAAIC,QAAQ,EAAE;kBAC1B,IAAI,OAAOC,KAAK,KAAK,QAAQ,EAAE;oBAC7B;oBACAF,UAAU,CAACC,QAAQ,CAAC,CAACC,KAAK,CAAC,GAAGI,aAAa;kBAC7C,CAAC,MAAM;oBACL;oBACAN,UAAU,CAACC,QAAQ,CAAC,GAAGK,aAAa;kBACtC;gBACF,CAAC,MAAM;kBACLV,UAAU,GAAGU,aAAa;gBAC5B;gBAEA,IAAAK,8BAAkB,EAACzB,KAAK,EAAEO,GAAG,EAAEG,UAAU,EAAEX,MAAM,CAAC;cACpD,CAAC,GAAG,IACN,CAAC;YACH;UACF;MACF;IACF,CAAC,CAAC;EACJ,CAAC;EAED,MAAM4B,IAAI,GAAGzB,KAAK,CAAC0B,UAAU,CAAC,CAAC;IAC7BrB;EACF,CAAC,KAAK;IACJ,OAAOsB,OAAO,CAACtB,GAAG,KAAK,QAAQ,IAAIL,KAAK,CAAC4B,wBAAwB,CAACvB,GAAG,CAAC,CAAC;EACzE,CAAC,CAAC;EAEF,KAAK,MAAMA,GAAG,IAAIoB,IAAI,EAAE;IACtB,IAAIpB,GAAG,CAACE,IAAI,EAAE;MACZH,SAAS,CAACC,GAAG,CAAC;IAChB;EACF;AACF,CAAC,EAAE;EACDwB,gBAAgB,EAAE,IAAI;EACtBC,IAAI,EAAE;IACJC,IAAI,EAAE;MACJC,WAAW,EAAE,gGAAgG;MAC7GC,GAAG,EAAE;IACP,CAAC;IACDC,OAAO,EAAE,MAAM;IACfC,MAAM,EAAE,CACN;MACEC,oBAAoB,EAAE,KAAK;MAC3BC,UAAU,EAAE;QACVnC,WAAW,EAAE;UACX8B,WAAW,EAAE,kDAAkD;UAC/DzB,IAAI,EAAE;QACR;MACF,CAAC;MACDA,IAAI,EAAE;IACR,CAAC,CACF;IACDA,IAAI,EAAE;EACR;AACF,CAAC,CAAC;AAAA+B,MAAA,CAAA5C,OAAA,GAAAA,OAAA,CAAAF,OAAA","ignoreList":[]}