포맷터
OpenCode는 파일을 작성하거나 편집한 후 언어별 포맷터를 사용하여 파일을 포맷할 수 있습니다. 포맷터는 기본적으로 비활성화되어 있습니다. OpenCode가 실행되려면 먼저 구성에서 활성화해야 합니다.
기본 제공 포맷터
OpenCode는 인기 있는 언어 및 프레임워크를 위한 여러 기본 제공 포맷터를 제공합니다. 아래는 포맷터, 지원되는 파일 확장자, 필요한 명령 또는 구성 옵션 목록입니다.
| 포맷터 | 확장자 | 요구사항 |
|---|---|---|
| air | .R | air 명령어 사용 가능 |
| biome | .js, .jsx, .ts, .tsx, .html, .css, .md, .json, .yaml 등 | biome.json(c) 설정 파일 필요 |
| cargofmt | .rs | cargo fmt 명령어 사용 가능 |
| clang-format | .c, .cpp, .h, .hpp, .ino 등 | .clang-format 설정 파일 필요 |
| cljfmt | .clj, .cljs, .cljc, .edn | cljfmt 명령어 사용 가능 |
| dart | .dart | dart 명령어 사용 가능 |
| dfmt | .d | dfmt 명령어 사용 가능 |
| gleam | .gleam | gleam 명령어 사용 가능 |
| gofmt | .go | gofmt 명령어 사용 가능 |
| htmlbeautifier | .erb, .html.erb | htmlbeautifier 명령어 사용 가능 |
| ktlint | .kt, .kts | ktlint 명령어 사용 가능 |
| mix | .ex, .exs, .eex, .heex, .leex, .neex, .sface | mix 명령어 사용 가능 |
| nixfmt | .nix | nixfmt 명령어 사용 가능 |
| ocamlformat | .ml, .mli | ocamlformat 명령어 사용 가능 및 .ocamlformat 설정 파일 필요 |
| ormolu | .hs | ormolu 명령어 사용 가능 |
| oxfmt (실험적) | .js, .jsx, .ts, .tsx | package.json의 oxfmt 의존성 및 실험적 환경 변수 플래그 필요 |
| pint | .php | composer.json의 laravel/pint 의존성 필요 |
| prettier | .js, .jsx, .ts, .tsx, .html, .css, .md, .json, .yaml 등 | package.json의 prettier 의존성 필요 |
| rubocop | .rb, .rake, .gemspec, .ru | rubocop 명령어 사용 가능 |
| ruff | .py, .pyi | ruff 명령어 사용 가능 (설정 필요) |
| rustfmt | .rs | rustfmt 명령어 사용 가능 |
| shfmt | .sh, .bash | shfmt 명령어 사용 가능 |
| standardrb | .rb, .rake, .gemspec, .ru | standardrb 명령어 사용 가능 |
| terraform | .tf, .tfvars | terraform 명령어 사용 가능 |
| uv | .py, .pyi | uv 명령어 사용 가능 |
| zig | .zig, .zon | zig 명령어 사용 가능 |
포맷터가 활성화되어 있고 프로젝트의 package.json에 prettier가 있으면, OpenCode는 일치하는 파일에 prettier를 사용합니다.
작동 원리
OpenCode가 파일을 쓰거나 편집하고 포맷터가 활성화되어 있으면:
- 파일 확장자를 모든 활성화된 포맷터와 확인합니다.
- 해당 파일에서 적절한 포맷터 명령을 실행합니다.
- 포맷 변경을 적용합니다.
이 프로세스는 활성화된 포맷터에 대해 백그라운드에서 실행됩니다.
구성
OpenCode 구성의 formatter 섹션에서 포맷터를 활성화하고 사용자 정의할 수 있습니다.
모든 기본 제공 포맷터를 활성화하려면 formatter를 true로 설정합니다.
{
"$schema": "https://opencode.ai/config.json",
"formatter": true
}
객체를 사용하여 기본 제공 포맷터를 활성화 상태로 유지하면서 재정의하거나 사용자 정의 포맷터를 구성할 수 있습니다.
{
"$schema": "https://opencode.ai/config.json",
"formatter": {}
}
각 포맷터 구성은 다음을 지원합니다:
| 속성 | 타입 | 설명 |
|---|---|---|
disabled | boolean | true로 설정하면 포맷터가 비활성화됩니다 |
command | string[] | 포맷팅을 실행할 명령입니다. 사용자 정의 포맷터에는 필수, 기본 제공에는 선택 사항 |
environment | object | 포맷터 실행 시 설정할 환경 변수 |
extensions | string[] | 이 포맷터가 처리해야 하는 파일 확장자 |
예제를 살펴보겠습니다.
포맷터 비활성화
formatter를 생략하면 모든 포맷터가 비활성화됩니다. 다른 구성에서 활성화한 후 모든 포맷터를 비활성화하려면 formatter를 false로 설정합니다:
{
"$schema": "https://opencode.ai/config.json",
"formatter": false
}
특정 포맷터를 비활성화하려면 disabled를 true로 설정합니다:
{
"$schema": "https://opencode.ai/config.json",
"formatter": {
"prettier": {
"disabled": true
}
}
}
사용자 정의 포맷터
environment 또는 extensions 등의 옵션으로 기본 제공 포맷터를 구성할 수 있습니다. 사용자 정의 포맷터를 추가하려면 command와 extensions를 지정합니다:
{
"$schema": "https://opencode.ai/config.json",
"formatter": {
"prettier": {
"command": ["npx", "prettier", "--write", "$FILE"],
"environment": {
"NODE_ENV": "development"
},
"extensions": [".js", ".ts", ".jsx", ".tsx"]
},
"custom-markdown-formatter": {
"command": ["deno", "fmt", "$FILE"],
"extensions": [".md"]
}
}
}
명령어의 $FILE 자리 표시자는 포맷팅되는 파일의 경로로 대체됩니다.