Skip to content

Oxfmt: alpha do formatador Oxc

Esta publicação anuncia o lançamento alpha do Oxfmt. O Oxfmt já está em beta! Veja o anúncio do Oxfmt Beta para recursos e melhorias atuais.

Temos o prazer de anunciar o lançamento alpha do Oxfmt — um formatador de código em Rust compatível com o Prettier. A primeira versão foca em JavaScript e TypeScript; outros idiomas virão em breve.

Objetivos do Oxfmt:

  • Desempenho: mais de 30× mais rápido que o Prettier e mais de 3× que o Biome na primeira execução sem cache (benchmark).
  • Compatibilidade: paridade com o Prettier para adoção simples em projetos existentes.
  • Experiência do desenvolvedor: em plano estão ordenação de imports, mais opções de formatação e suporte a plugins do Prettier.

Início rápido

Adicione oxfmt ao projeto:

sh
npm add -D oxfmt@latest
sh
pnpm add -D oxfmt@latest
sh
yarn add -D oxfmt@latest
sh
bun add -D oxfmt@latest
sh
deno add -D npm:oxfmt@latest

O Oxfmt segue o formato de configuração do Prettier. Se você usa JSON de config do Prettier, pode renomear para .oxfmtrc.jsonc:

bash
cp .prettierrc.json .oxfmtrc.jsonc

Exemplo inicial de .oxfmtrc.jsonc:

jsx
{
  "$schema": "./node_modules/oxfmt/configuration_schema.json",
  // Use 80 if migrating from Prettier; 100 is the Oxfmt default!
  "printWidth": 80,
  "ignorePatterns": [] // Same as `.prettierignore`
}

Adicione um script ao package.json:

jsx
"scripts": {
  "format": "oxfmt"
}

Mais detalhes no guia de instalação.

Desempenho

O Oxfmt é muito rápido. No repositório Outline:

  • mais de 30× mais rápido que o CLI experimental do Prettier sem cache;
  • mais de 20× mais rápido que o Prettier com parser Oxc via @prettier/plugin-oxc;
  • mais de 3× mais rápido que o Biome.

Configuração detalhada do benchmark:

oxc-project/bench-formatter
https://github.com/oxc-project/bench-formatter

Design

A equipe Oxc prioriza compatibilidade com o ecossistema para tornar migrações simples, inclusive em bases grandes.

Resultado da formatação

O Oxfmt coincide com a formatação JS do Prettier. Ao migrar para o Oxfmt hoje, não deve haver diferenças em relação ao Prettier.

Pequenas divergências podem aparecer ao migrar de versões antigas do Prettier (exemplo de migração): identificamos pontos em que a formatação do Prettier pode melhorar. Colaboramos ativamente com a equipe do Prettier — parte das melhorias entrou no Prettier 3.7.

O Oxfmt passa em cerca de 95% dos testes do Prettier para JS e TS; esperamos convergir na formatação com o tempo.

printWidth: 100 por padrão

Escolhemos printWidth: 100 em vez do 80 do Prettier. Motivos:

  • código TypeScript tende a ser mais longo por causa das anotações de tipo;
  • imports costumam ter muitos itens;
  • em telas maiores há mais espaço horizontal;
  • um pouco menos de tokens para LLMs.

O Oxfmt permanece compatível com o Prettier, mas a largura padrão é 100 caracteres. Para evitar diffs grandes ao migrar do Prettier, defina explicitamente a largura 80.

ignorePatterns

Além do .prettierignore, há a opção ignorePatterns para manter tudo em um único arquivo de configuração.

Configuração

Arquivos JSON do Prettier são compatíveis com o Oxfmt. O caso mais simples de migração:

bash
cp .prettierrc.json .oxfmtrc.jsonc

Se o editor tiver JSON language server, após adicionar oxfmt em devDependencies você pode começar com este modelo:

json
{
  "$schema": "./node_modules/oxfmt/configuration_schema.json",
  "ignorePatterns": []
}

Neste alpha ainda não há todas as opções do Prettier, mas já estão as principais: printWidth, tabWidth, useTabs, semi, singleQuote, quoteProps, jsxSingleQuote, trailingComma, bracketSpacing, objectWrap, bracketSameLine, arrowParens, endOfLine, singleAttributePerLine.

Lista completa na documentação.

Saída no terminal

O comportamento padrão equivale a prettier . --write: como o cargo fmt, sem ruído extra. A flag --check mostra diferenças e serve para CI.

Planos para o beta

Acompanhe o progresso rumo ao beta:

Formatter Beta · Milestone #15 · oxc-project/oxc
https://github.com/oxc-project/oxc/milestone/15

Em versões futuras, pretendemos relaxar parte das escolhas estilísticas.

Próximos passos

Guia completo na documentação do Oxfmt.

Reportar problemas

Para diferenças de formatação, veja a discussão no GitHub. Issues conhecidas usam labels.

Para outros problemas, abra uma issue com o modelo dedicado.

Comunidade

RFC: Formatter · oxc-project/oxc · Discussion #13608
https://github.com/oxc-project/oxc/discussions/13608

Contamos com seu feedback para melhorar o Oxfmt!

Agradecimentos

O Oxfmt se baseia em um fork da infraestrutura biome_formatter; agradecemos à equipe Biome, em especial @ematipico e @MichaReiser. Obrigado também à equipe do Prettier e a @fisker pela colaboração em compatibilidade de formatação.