UNPKG

@containerbase/eslint-plugin

Version:
54 lines (50 loc) 1.38 kB
/** @type {import('eslint').Rule.RuleModule} */ export default { meta: { fixable: 'code', }, create(context) { const absoluteFileName = context.filename; if (!/\.spec\.[cm]?tsx?$/.test(absoluteFileName)) { return {}; } const relativeFileName = absoluteFileName .replace(context.cwd, '') .replace(/\\/g, '/') .replace(/^(?:\/(?:lib|src|test))?\//, ''); const testName = relativeFileName.replace(/\.spec\.[cm]?tsx?$/, ''); return { CallExpression(node) { const { callee } = node; if (callee.type !== 'Identifier' || callee.name !== 'describe') { return; } if (node.parent?.parent?.type !== 'Program') { return; } const [descr] = node.arguments; if (!descr) { context.report({ node, message: 'Test root describe must have arguments', }); return; } if ( descr.type === 'Literal' && typeof descr.value === 'string' && testName === descr.value ) { return; } context.report({ node: descr, message: `Test must be described by this string: '${testName}'`, fix(fixer) { return fixer.replaceText(descr, `'${testName}'`); }, }); }, }; }, };