import type { Rule } from 'eslint'; import type { Position } from 'estree'; const rule: Rule.RuleModule = { meta: { type: 'problem', docs: { description: "Ban useless import aliasing like `import { abc as abc } from 'module'`", category: 'Best Practices', recommended: true, }, fixable: 'code', }, create(context) { return { ImportDeclaration(node) { if (node.specifiers.length === 0) return; for (const specifier of node.specifiers) { if (specifier.type !== 'ImportSpecifier') continue; const { imported, local } = specifier; if ( imported.name === local.name && !arePositionsEqual(imported.loc!.start, local.loc!.start) ) { context.report({ node: specifier, message: `Useless aliasing of '${imported.name}'?`, fix(fixer) { return fixer.removeRange([imported.range![1], local.range![1]]); }, }); } } }, }; }, }; const arePositionsEqual = (a: Position, b: Position) => a.line === b.line && a.column === b.column; export default rule;