no-banned-imports
Previne o uso de bibliotecas banidas e impõe alternativas recomendadas.
Detalhes da regra
Seção intitulada “Detalhes da regra”Equipes frequentemente banem bibliotecas pesadas ou depreciadas em favor de alternativas mais leves, ou nativas. Esta regra usa uma configuração orientada a dados: um array de objetos especificando o padrão regex, o nome da biblioteca e a alternativa recomendada. Adicionar um novo banimento é uma alteração de uma linha.
Exemplos de código incorreto
Seção intitulada “Exemplos de código incorreto”import { format } from "moment";import axios from "axios";Exemplos de código correto
Seção intitulada “Exemplos de código correto”import { format } from "date-fns";const response = await fetch("/api/data");Implementação da regra
Seção intitulada “Implementação da regra”/// <reference path="../rules.d.ts" />
const BANNED_IMPORTS = [ { pattern: /from\s+['"]lodash['"]/, name: "lodash", alternative: "native array methods", }, { pattern: /from\s+['"]moment['"]/, name: "moment", alternative: "Temporal API or date-fns", }, { pattern: /from\s+['"]axios['"]/, name: "axios", alternative: "native fetch()", },];
export default { rules: { "no-banned-imports": { description: "Prevent usage of banned libraries", async check(ctx) { for (const banned of BANNED_IMPORTS) { const matches = await ctx.grepFiles(banned.pattern, "src/**/*.ts"); for (const match of matches) { ctx.report.violation({ message: `Banned import: "${banned.name}" is not allowed. Use ${banned.alternative} instead.`, file: match.file, line: match.line, fix: `Replace ${banned.name} with ${banned.alternative}`, }); } } }, }, },} satisfies RuleSet;Quando usar
Seção intitulada “Quando usar”Quando sua equipe padronizou bibliotecas específicas e deseja evitar a migração para alternativas. Banimentos comuns incluem lodash (métodos nativos), moment (date-fns ou Temporal) e axios (fetch nativo).
Quando não usar
Seção intitulada “Quando não usar”Quando seu projeto não tem preferência entre bibliotecas, ou quando a biblioteca banida ainda está em migração ativa e algum uso é esperado temporariamente.