Oxfmt: Oxc 포맷터 알파
Oxfmt, 루스트 기반의, Prettier와 호환되는 코드 포맷터의 알파 릴리스를 발표하게 되어 기쁩니다. 이번 첫 릴리스는 자바스크립트 및 타입스크립트에 초점이 맞춰져 있으며, 곧 추가 언어 지원이 예정되어 있습니다.
Oxfmt는 다음과 같은 목표를 가지고 설계되었습니다:
- 성능: 캐시 없이 초기 실행 시, Prettier보다 30배 이상 빠르고, 비옴(비움)보다 3배 이상 빠릅니다 (벤치마크).
- 호환성: Prettier와 호환되므로, 기존 프로젝트에 쉽게 도입할 수 있습니다.
- 개발자 경험: 앞으로는 임포트 정렬, 확장된 포맷팅 옵션, 그리고 Prettier 플러그인 지원이 제공될 예정입니다.
빠른 시작
프로젝트에 oxfmt를 추가하세요:
npm add -D oxfmt@latestpnpm add -D oxfmt@latestyarn add -D oxfmt@latestbun add -D oxfmt@latestdeno add -D npm:oxfmt@latestOxfmt는 Prettier의 구성 형식을 따릅니다. 만약 당신이 JSON 구성 파일과 함께 Prettier를 사용하고 있다면, 이를 .oxfmtrc.jsonc로 이름을 바꿀 수 있습니다:
cp .prettierrc.json .oxfmtrc.jsonc또는 이 .oxfmtrc.jsonc 구성 예제에서 시작할 수도 있습니다:
{
"$schema": "./node_modules/oxfmt/configuration_schema.json",
// Prettier에서 마이그레이션하는 경우 80을 사용하세요; 100은 Oxfmt의 기본값입니다!
"printWidth": 80,
"ignorePatterns": [] // `.prettierignore`와 동일합니다
}다음으로, oxfmt를 패키지 파일의 스크립트에 추가하세요:
"scripts": {
"format": "oxfmt"
}또는 자세한 지침을 위해 설치 가이드를 참조하세요.
성능
Oxfmt는 매우 빠릅니다. Outline 저장소에서의 벤치마크 결과는 다음과 같습니다:
- 캐시 없이 실험적인 CLI를 사용할 때, Prettier보다 30배 이상 빠름
@prettier/plugin-oxc를 통해 오크스 파서를 사용할 때, Prettier보다 20배 이상 빠름- 다른 루스트 기반 포맷터인 비옴보다 3배 이상 빠름
자세한 벤치마크 설정 방법은 다음 저장소를 참조하세요:
oxc-project/bench-formatter
https://github.com/oxc-project/bench-formatter
설계
오크스 팀은 기존 생태계와의 호환성을 우선시하여, 큰 코드베이스라도 마이그레이션이 쉬워지도록 설계했습니다.
코드 포맷팅 결과
Oxfmt는 자바스크립트 포맷팅에서 Prettier와 일치합니다. 오늘날 오크스 포맷터로 마이그레이션하더라도, Prettier와 비교해 포맷팅 차이가 보이지 않아야 합니다.
기존의 더 오래된 버전의 Prettier에서 마이그레이션할 때 약간의 차이가 나타날 수 있습니다 (예시 마이그레이션 보기) — 왜냐하면 우리는 Prettier의 포맷팅 개선 가능 영역을 식별했기 때문입니다. 우리는 지속적으로 Prettier 팀과 협력하며 직접 버그 리포트 및 풀 리퀘스트를 제출하고 있습니다. 이러한 개선 사항 중 다수가 최근 Prettier 3.7 릴리스에 반영되었습니다.
현재 오크스 포맷터는 오크스가 전달하는 약 95%의 Prettier 자바스크립트 및 타입스크립트 테스트를 통과하고 있으며, 장기적으로는 Prettier 팀과 함께 포맷팅을 일치시키는 작업을 진행할 계획입니다.
기본값으로 printWidth: 100
우리는 기본 줄 길이로 printWidth: 100을 선택했습니다. 대신, Prettier의 80이 아닌 이유는 다음과 같습니다:
- 타입 어노테이션으로 인해 타입스크립트 코드는 자바스크립트보다 일반적으로 길어집니다.
- 임포트 문에는 종종 많은 항목이 포함됩니다.
- 더 큰 화면은 더 많은 수평 공간을 제공합니다.
- 약간 적은 LLM 토큰을 생성합니다.
비록 오크스 포맷터가 여전히 Prettier와 호환되지만, 기본적인 출력 폭은 100자로 설정되어 있습니다. 만약 릴리스 시 큰 차이를 피하고 싶다면, 명시적으로 printWidth를 80으로 설정하세요.
ignorePatterns
오크스 포맷터는 .prettierignore를 지원하지만, 모든 설정을 하나의 파일에 통합하기 위한 ignorePatterns 구성 옵션도 제공합니다.
구성
Prettier의 JSON 구성 파일은 오크스 포맷터와 호환됩니다. 가장 간단한 경우, 구성 파일 마이그레이션은 다음과 같습니다:
cp .prettierrc.json .oxfmtrc.jsonc편집기가 JSON 언어 서버를 지원한다면, devDependencies에 oxfmt를 추가한 후 다음 최소한의 템플릿으로 시작할 수 있습니다:
{
"$schema": "./node_modules/oxfmt/configuration_schema.json",
"ignorePatterns": []
}현재 알파 릴리스에서는 아직 모든 Prettier 구성 옵션을 지원하지는 않지만, 다음 주요 옵션은 이미 지원합니다: printWidth, tabWidth, useTabs, semi, singleQuote, quoteProps, jsxSingleQuote, trailingComma, bracketSpacing, objectWrap, bracketSameLine, arrowParens, endOfLine, singleAttributePerLine.
모든 옵션은 우리의 문서에서 확인할 수 있습니다.
터미널 출력
오크스 포맷터의 기본 동작은 prettier . --write와 동일하며, cargo fmt와 동일한 사용자 경험을 제공하고, 출력은 없습니다. --check를 사용하면 포맷팅 차이를 표시하고, 컨티뉴어스 인테그레이션 파이프라인에서 오크스 포맷터 사용을 강제할 수 있습니다.
베타 릴리스 계획
베타 릴리스를 위한 우리의 계획은 다음과 같습니다:
- 더 많은 파일 형식 지원 – 예:
.json파일 - 임베디드 언어 포맷팅 지원 추가 – 자바스크립트 내부의 CSS 또는 GraphQL
- 내장된 정렬 및 미적 기능, 예: 임포트 정렬
- Prettier 플러그인 지원
- Node.js API for Oxfmt
- 파일 끝에 새 줄 없애기
--migrate prettier- … 그리고 귀하의 기능 요청
베타 릴리스까지의 진행 상황은 여기에서 추적할 수 있습니다:
포맷터 베타 · 마일스톤 #15 · oxc-project/oxc
https://github.com/oxc-project/oxc/milestone/15
또한 미래의 버전에서는 일부 포맷팅 의견을 완화할 계획입니다.
다음 단계
오크스 포맷터 문서에서 전체 설치 가이드를 확인하세요.
문제 보고
포맷팅 차이에 대해선 https://github.com/oxc-project/oxc/discussions/14669를 참조하세요.
또한 알려진 문제는 라벨로 구분됩니다.
기타 문제가 발견되면, 전용 템플릿을 사용해 깃허브에서 이슈를 만들어 주세요.
커뮤니티 참여하기
RFC: 포맷터 · oxc-project/oxc · 논의 #13608
https://github.com/oxc-project/oxc/discussions/13608
오크스 포맷터를 더욱 발전시키기 위해 귀하의 피드백을 기다립니다!
감사의 말
오크스 포맷터는 biome_formatter의 수정된 복제본 위에 구축되었으며, 특히 @ematipico와 @MichaReiser를 포함한 비옴 팀에게 감사를 표합니다. 또한 포맷팅 호환성 협업에 대해 오크스 팀과 협력해 준 Prettier 팀 및 @fisker에게도 고맙습니다.



