---
title: API de Regras
description: Referência da API TypeScript para escrever regras do Archgate. Aprenda RuleSet com satisfies, RuleContext, relatórios de violação, correspondência de arquivos e verificações AST.
---
As regras do Archgate são arquivos TypeScript que exportam um objeto simples tipado com `satisfies RuleSet`. Cada regra recebe um `RuleContext` com utilitários para buscar arquivos, ler conteúdo e reportar violações.
## RuleSet
```typescript
///
export default {
rules: {
"my-rule-id": {
description: "Human-readable description of what this rule checks",
severity: "error", // optional, defaults to "error"
async check(ctx) {
// Rule logic here
},
},
},
} satisfies RuleSet;
```
Um arquivo de regras exporta por padrão um objeto simples com um registro `rules` indexado por ID de regra. As chaves se tornam os IDs das regras que aparecem na saída de verificação e nos relatórios de violação. A anotação `satisfies RuleSet` fornece verificação de tipos sem envolver em uma chamada de função.
```typescript
type RuleSet = { rules: Record };
```
---
## RuleConfig
Cada regra no registro deve estar em conformidade com a interface `RuleConfig`.
```typescript
interface RuleConfig {
description: string;
severity?: Severity;
check: (ctx: RuleContext) => Promise;
}
```
| Campo | Tipo | Obrigatório | Descrição |
| ------------- | ------------------------------------- | ----------- | --------------------------------------------------- |
| `description` | `string` | Sim | Descrição legível exibida na saída de verificação |
| `severity` | `Severity` | Não | Severidade padrão para violações. Padrão: `"error"` |
| `check` | `(ctx: RuleContext) => Promise` | Sim | Função assíncrona contendo a lógica da regra |
---
## RuleContext
A função `check` recebe um objeto `RuleContext` com o estado do projeto e métodos utilitários.
```typescript
interface RuleContext {
projectRoot: string;
scopedFiles: string[];
changedFiles: string[];
glob(pattern: string): Promise;
grep(file: string, pattern: RegExp): Promise;
grepFiles(pattern: RegExp, fileGlob: string): Promise;
readFile(path: string): Promise;
readJSON(path: string): Promise;
report: RuleReport;
}
```
### Propriedades
#### projectRoot
```typescript
projectRoot: string;
```
Caminho absoluto para o diretório raiz do projeto (onde `.archgate/` está localizado).
#### scopedFiles
```typescript
scopedFiles: string[];
```
Arquivos que correspondem aos padrões glob de `files` do frontmatter do ADR. Se o ADR não tiver o campo `files`, contém todos os arquivos do projeto. Use esta lista como a lista principal de arquivos para suas verificações de regra.
#### changedFiles
```typescript
changedFiles: string[];
```
Arquivos que foram modificados de acordo com o git. Quando `--staged` é usado, contém apenas arquivos no stage. Quando executado sem `--staged`, contém todos os arquivos alterados (staged e unstaged). Vazio quando nenhuma alteração git é detectada.
#### report
```typescript
report: RuleReport;
```
A interface de relatório para registrar violações, avisos e mensagens informativas. Veja [RuleReport](#rulereport) abaixo.
### Métodos
#### glob
```typescript
glob(pattern: string): Promise;
```
Encontra arquivos correspondentes a um padrão glob relativo à raiz do projeto. Retorna um array de caminhos absolutos de arquivo.
```typescript
const testFiles = await ctx.glob("tests/**/*.test.ts");
```
#### grep
```typescript
grep(file: string, pattern: RegExp): Promise;
```
Busca em um único arquivo por linhas correspondentes a uma expressão regular. Retorna um array de objetos `GrepMatch` com caminho do arquivo, número da linha, coluna e conteúdo correspondente.
```typescript
const matches = await ctx.grep(file, /console\.error\(/);
```
#### grepFiles
```typescript
grepFiles(pattern: RegExp, fileGlob: string): Promise;
```
Busca em múltiplos arquivos correspondentes a um padrão glob por linhas que correspondam a uma expressão regular. Combina `glob` e `grep` em uma única chamada.
```typescript
const matches = await ctx.grepFiles(/TODO:/i, "src/**/*.ts");
```
#### readFile
```typescript
readFile(path: string): Promise;
```
Lê o conteúdo de um arquivo como string. O caminho é relativo à raiz do projeto.
```typescript
const content = await ctx.readFile("src/config.ts");
```
#### readJSON
```typescript
readJSON(path: string): Promise;
```
Lê e faz o parse de um arquivo JSON. O caminho é relativo à raiz do projeto. Retorna o valor parseado como `unknown` -- faça o cast para o tipo esperado na sua regra.
```typescript
const pkg = (await ctx.readJSON("package.json")) as {
dependencies?: Record;
};
```
---
## RuleReport
A interface de relatório para registrar resultados de verificação. Cada método aceita um objeto de detalhe descrevendo o problema.
```typescript
interface RuleReport {
violation(detail: ReportDetail): void;
warning(detail: ReportDetail): void;
info(detail: ReportDetail): void;
}
```
#### violation
```typescript
report.violation(detail: ReportDetail): void;
```
Reporta uma violação de regra. Violações fazem a verificação falhar com código de saída 1. Use para restrições rígidas que não devem ser mergeadas.
#### warning
```typescript
report.warning(detail: ReportDetail): void;
```
Reporta um aviso. Avisos aparecem na saída de verificação mas não fazem a verificação falhar. Use para orientações não bloqueantes.
#### info
```typescript
report.info(detail: ReportDetail): void;
```
Reporta uma mensagem informativa. Não afeta o código de saída da verificação. Use para sugestões ou notas.
### ReportDetail
O objeto de detalhe passado para `violation`, `warning` e `info`.
```typescript
interface ReportDetail {
message: string;
file?: string;
line?: number;
endLine?: number;
endColumn?: number;
fix?: string;
}
```
| Campo | Tipo | Obrigatório | Descrição |
| ----------- | -------- | ----------- | ----------------------------------------------------------------- |
| `message` | `string` | Sim | Descrição legível do problema |
| `file` | `string` | Não | Caminho do arquivo onde o problema foi encontrado |
| `line` | `number` | Não | Número da linha inicial (base 1) |
| `endLine` | `number` | Não | Número da linha final (base 1) — para destaque preciso no editor |
| `endColumn` | `number` | Não | Número da coluna final (base 0) — para destaque preciso no editor |
| `fix` | `string` | Não | Sugestão de correção ou ação de remediação |
Quando `endLine` e `endColumn` são fornecidos, editores (VS Code, Cursor) podem destacar a expressão exata que viola a regra, em vez da linha inteira. Se omitidos, a linha completa em `line` é destacada.
---
## GrepMatch
Retornado por `ctx.grep()` e `ctx.grepFiles()`.
```typescript
interface GrepMatch {
file: string;
line: number;
column: number;
content: string;
}
```
| Campo | Tipo | Descrição |
| --------- | -------- | -------------------------------------------- |
| `file` | `string` | Caminho absoluto do arquivo correspondente |
| `line` | `number` | Número da linha da correspondência (base 1) |
| `column` | `number` | Número da coluna da correspondência (base 1) |
| `content` | `string` | Conteúdo completo da linha correspondente |
---
## Severity
```typescript
type Severity = "error" | "warning" | "info";
```
| Valor | Impacto no código de saída | Descrição |
| ----------- | -------------------------- | --------------------------------- |
| `"error"` | Causa saída 1 | Restrição rígida, bloqueia merges |
| `"warning"` | Sem impacto | Orientação não bloqueante |
| `"info"` | Sem impacto | Informativo, apenas sugestões |
---
## ViolationDetail
A representação interna de um problema reportado, usada na saída de verificação e nos resultados JSON.
```typescript
interface ViolationDetail {
ruleId: string;
adrId: string;
message: string;
file?: string;
line?: number;
endLine?: number;
endColumn?: number;
fix?: string;
severity: Severity;
}
```
| Campo | Tipo | Descrição |
| ----------- | ---------- | ------------------------------------------------------- |
| `ruleId` | `string` | ID da regra da chave do objeto `rules` |
| `adrId` | `string` | ID do ADR do frontmatter |
| `message` | `string` | Descrição legível |
| `file` | `string?` | Caminho do arquivo onde o problema foi encontrado |
| `line` | `number?` | Número da linha inicial (base 1) |
| `endLine` | `number?` | Linha final (base 1) — para destaque preciso no editor |
| `endColumn` | `number?` | Coluna final (base 0) — para destaque preciso no editor |
| `fix` | `string?` | Sugestão de correção |
| `severity` | `Severity` | Severidade efetiva desta violação |
---
## RuleSet
O tipo usado com `satisfies` para verificar a tipagem do seu objeto de regras. Exporte um objeto simples que esteja em conformidade com esta forma.
```typescript
type RuleSet = { rules: Record };
```