Arquitetura do linter
Artigo original em leaysgur.github.io/posts, por @leaysgur.
apps/oxlint
O binário oxlint compila main.rs da crate apps/oxlint.
Analisa argumentos de linha de comando e chama LintRunner.
crates/oxc_diagnostics
LintService envia pelo Sender de mpsc::channel resultados ao oxc_diagnostics.
Formata e exibe com o crate miette.
crates/oxc_linter
LintService:
- guarda
self.runtimecomoArc<Runtime> Runtimetem os caminhos a avaliar- percorre em paralelo com
rayon - envia
Noneao terminar
Runtime::process_path()
- infere extensão e tipo de arquivo
- suporta
.[m|c]?[j|t]sou.[j|t]sx - exceções:
.vue,.astro,.svelte(blocosscriptparciais) - processa fontes JS/TS
- dispara lint e envia ao
DiagnosticService
Runtime::process_source()
- parse → AST
SemanticBuilder→LintContext→ executaLinter
crates/oxc_semantic — SemanticBuilder
Monta dados semânticos a partir da fonte.
Inclui: source_text, nós AST, classes, escopos, comentários, JSDoc, etc.
Ao final retorna SemanticBuilderReturn; só Semantic segue para LintContext.
crates/oxc_linter — LintContext
Wrap do Semantic com getters e diagnostic() para emitir alertas.
crates/oxc_linter — Linter
run() coordena execução — self.rules; cada regra pode ter até três fases tratadas pela trait, executadas em sequência.
Listagem das regras:
Novas regras: atualize essa lista.