Pular para o conteúdo

required-export-pattern

Verifique que arquivos em um diretório específico exportam uma assinatura de função obrigatória.

Arquiteturas baseadas em convenção (arquivos de comandos CLI, handlers de rotas, módulos de plugins) frequentemente exigem que cada arquivo exporte uma função com um padrão de nomenclatura específico. Esta regra verifica os arquivos do escopo em busca de um export obrigatório e reporta qualquer arquivo que não corresponda ao padrão. Utiliza Promise.all() para verificar arquivos em paralelo, melhorando a performance.

src/commands/deploy.ts
// Missing the required register*Command export
export function deploy() {
// ...
}
src/commands/deploy.ts
import type { Command } from "commander";
export function registerDeployCommand(program: Command) {
program
.command("deploy")
.description("Deploy the application")
.action(() => {
// ...
});
}
/// <reference path="../rules.d.ts" />
export default {
rules: {
"register-function-export": {
description: "Command files must export a register*Command function",
async check(ctx) {
const files = ctx.scopedFiles.filter((f) => !f.endsWith("index.ts"));
const checks = files.map(async (file) => {
const content = await ctx.readFile(file);
if (!/export\s+function\s+register\w+Command/.test(content)) {
ctx.report.violation({
message: "Command file must export a register*Command function",
file,
});
}
});
await Promise.all(checks);
},
},
},
} satisfies RuleSet;

Adapte o padrão para outras convenções:

// Express/Hono route handlers
/export\s+default\s+.*Router/
// React page components
/export\s+default\s+function\s+\w+Page/
// Plugin modules
/export\s+const\s+plugin\s*[:=]/

Quando sua arquitetura exige um padrão de export específico de arquivos em um diretório. Combine esta regra com o campo files do frontmatter do ADR para delimitar o escopo ao diretório correto.

Quando o diretório contém tipos de arquivos mistos que não precisam seguir o mesmo padrão de export.