Lint com informação de tipos (“type-aware”)
Regras que dependem do sistema de tipos — promises não tratadas, atribuições inseguras etc. No Oxlint isso é fornecido pelo tsgolint, integrado à CLI e à configuração.
Cobertura atual: 59 de 61 regras type-aware do typescript-eslint; desempenho e compatibilidade seguem melhorando.
Visão geral
Oxlint (Rust)
Percursos de arquivos, ignores, config, regras sem tipo, relatório.tsgolint (Go)
Monta programas TypeScript comtypescript-go, executa regras type-aware e devolve diagnósticos ao Oxlint.
Instalação
Dependência extra:
npm add -D oxlint-tsgolint@latestpnpm add -D oxlint-tsgolint@latestyarn add -D oxlint-tsgolint@latestbun add -D oxlint-tsgolint@latestRodando
- CLI:
--type-aware - Config raiz:
options.typeAware: true
CLI:
oxlint --type-awareConfig raiz:
{
"options": {
"typeAware": true
}
}import { defineConfig } from "oxlint";
export default defineConfig({
options: {
typeAware: true,
},
});Com isso rodam regras normais + regras typescript/*.
--type-aware ganha da config CLI+arquivo mesmo que o arquivo diga false.
options.typeAware e options.typeCheck só na raiz — configs aninhadas não devem defini-los.
Integrações editor/LSP: opção typeAware; veja Editores.
Monorepos e builds
Precisa de informação de tipo resolvida:
- gere pacotes dependentes (
.d.ts) - dependências instaladas
pnpm install
pnpm -r build
oxlint --type-awareDiagnósticos de verificação de tipos (type-check)
Erros TS junto ao lint:
oxlint --type-aware --type-checkOu na raiz:
{
"options": {
"typeAware": true,
"typeCheck": true
}
}import { defineConfig } from "oxlint";
export default defineConfig({
options: {
typeAware: true,
typeCheck: true,
},
});--type-check também sobrescreve arquivo de config.
Pode substituir tsc --noEmit no CI:
# antes
tsc --noEmit
oxlint
# depois
oxlint --type-aware --type-checkConfigurar regras type-aware
Igual às outras regras Oxlint:
{
"plugins": ["typescript"],
"rules": {
"typescript/no-floating-promises": "error",
"typescript/no-unsafe-assignment": "warn"
}
}import { defineConfig } from "oxlint";
export default defineConfig({
plugins: ["typescript"],
rules: {
"typescript/no-floating-promises": "error",
"typescript/no-unsafe-assignment": "warn",
},
});Opções iguais às do typescript-eslint:
{
"plugins": ["typescript"],
"rules": {
"typescript/no-floating-promises": ["error", { "ignoreVoid": true }]
}
}import { defineConfig } from "oxlint";
export default defineConfig({
plugins: ["typescript"],
rules: {
"typescript/no-floating-promises": ["error", { ignoreVoid: true }],
},
});Comentários de desabilitar
// oxlint-disable-next-line typescript/no-floating-promises
doSomethingAsync();Comentários de disable não usados:
oxlint --type-aware --report-unused-disable-directivesCompatibilidade TypeScript
Baseado em typescript-go:
- precisa TypeScript 7.0+
- algumas opções legadas de
tsconfignão são suportadas (ex.:baseUrl) - migre opções depreciadas/removidas (TS 6 → 7) antes
type-checkacusa opções inválidas
Migração TypeScript, ferramenta ts5to6 para tsconfig.
Estabilidade
- Cobertura de regras ainda não total (mas bem próxima)
- Codebases gigantes podem usar muita memória
- Desempenho em evolução
Solução de problemas
Desempenho e debug
- Atualize
oxlinteoxlint-tsgolint. - Log de debug:
OXC_LOG=debug oxlint --type-awareInterpretação do log:
- Mapeamento de arquivos (
Starting to assign files...): associação a projetos tsconfig — normalmente rápido; se lento, abra issue. - Por programa (
[N/M] Running linter on program...): cada projeto TS lintado à parte — demora extra pode indicar resolução de tipos pesada ou projeto enorme.
include gigante na raiz
{
"include": ["**/*"] // ❌ puxa demais
}Correção: inclua só fonte e liste exclude explícitos:
{
"include": ["src/**/*"],
"exclude": ["dist", "build", "coverage"]
}Monorepo na raiz, evite incluir código-fonte direto no tsconfig da raiz quando não for o caso:
{
"files": []
}Diagnóstico: no log debug, procure Program created with com número absurdamente alto de arquivos — revise include/exclude.