컨텐츠로 건너뛰기

포맷터

OpenCode는 파일을 작성하거나 편집한 후 언어별 포맷터를 사용하여 파일을 포맷할 수 있습니다. 포맷터는 기본적으로 비활성화되어 있습니다. OpenCode가 실행되려면 먼저 구성에서 활성화해야 합니다.


기본 제공 포맷터

OpenCode는 인기 있는 언어 및 프레임워크를 위한 여러 기본 제공 포맷터를 제공합니다. 아래는 포맷터, 지원되는 파일 확장자, 필요한 명령 또는 구성 옵션 목록입니다.

포맷터확장자요구사항
air.Rair 명령어 사용 가능
biome.js, .jsx, .ts, .tsx, .html, .css, .md, .json, .yaml 등biome.json(c) 설정 파일 필요
cargofmt.rscargo fmt 명령어 사용 가능
clang-format.c, .cpp, .h, .hpp, .ino 등.clang-format 설정 파일 필요
cljfmt.clj, .cljs, .cljc, .edncljfmt 명령어 사용 가능
dart.dartdart 명령어 사용 가능
dfmt.ddfmt 명령어 사용 가능
gleam.gleamgleam 명령어 사용 가능
gofmt.gogofmt 명령어 사용 가능
htmlbeautifier.erb, .html.erbhtmlbeautifier 명령어 사용 가능
ktlint.kt, .ktsktlint 명령어 사용 가능
mix.ex, .exs, .eex, .heex, .leex, .neex, .sfacemix 명령어 사용 가능
nixfmt.nixnixfmt 명령어 사용 가능
ocamlformat.ml, .mliocamlformat 명령어 사용 가능 및 .ocamlformat 설정 파일 필요
ormolu.hsormolu 명령어 사용 가능
oxfmt (실험적).js, .jsx, .ts, .tsxpackage.jsonoxfmt 의존성 및 실험적 환경 변수 플래그 필요
pint.phpcomposer.jsonlaravel/pint 의존성 필요
prettier.js, .jsx, .ts, .tsx, .html, .css, .md, .json, .yaml 등package.jsonprettier 의존성 필요
rubocop.rb, .rake, .gemspec, .rurubocop 명령어 사용 가능
ruff.py, .pyiruff 명령어 사용 가능 (설정 필요)
rustfmt.rsrustfmt 명령어 사용 가능
shfmt.sh, .bashshfmt 명령어 사용 가능
standardrb.rb, .rake, .gemspec, .rustandardrb 명령어 사용 가능
terraform.tf, .tfvarsterraform 명령어 사용 가능
uv.py, .pyiuv 명령어 사용 가능
zig.zig, .zonzig 명령어 사용 가능

포맷터가 활성화되어 있고 프로젝트의 package.jsonprettier가 있으면, OpenCode는 일치하는 파일에 prettier를 사용합니다.


작동 원리

OpenCode가 파일을 쓰거나 편집하고 포맷터가 활성화되어 있으면:

  1. 파일 확장자를 모든 활성화된 포맷터와 확인합니다.
  2. 해당 파일에서 적절한 포맷터 명령을 실행합니다.
  3. 포맷 변경을 적용합니다.

이 프로세스는 활성화된 포맷터에 대해 백그라운드에서 실행됩니다.


구성

OpenCode 구성의 formatter 섹션에서 포맷터를 활성화하고 사용자 정의할 수 있습니다.

모든 기본 제공 포맷터를 활성화하려면 formattertrue로 설정합니다.

{
  "$schema": "https://opencode.ai/config.json",
  "formatter": true
}

객체를 사용하여 기본 제공 포맷터를 활성화 상태로 유지하면서 재정의하거나 사용자 정의 포맷터를 구성할 수 있습니다.

{
  "$schema": "https://opencode.ai/config.json",
  "formatter": {}
}

각 포맷터 구성은 다음을 지원합니다:

속성타입설명
disabledbooleantrue로 설정하면 포맷터가 비활성화됩니다
commandstring[]포맷팅을 실행할 명령입니다. 사용자 정의 포맷터에는 필수, 기본 제공에는 선택 사항
environmentobject포맷터 실행 시 설정할 환경 변수
extensionsstring[]이 포맷터가 처리해야 하는 파일 확장자

예제를 살펴보겠습니다.


포맷터 비활성화

formatter를 생략하면 모든 포맷터가 비활성화됩니다. 다른 구성에서 활성화한 후 모든 포맷터를 비활성화하려면 formatterfalse로 설정합니다:

{
  "$schema": "https://opencode.ai/config.json",
  "formatter": false
}

특정 포맷터를 비활성화하려면 disabledtrue로 설정합니다:

{
  "$schema": "https://opencode.ai/config.json",
  "formatter": {
    "prettier": {
      "disabled": true
    }
  }
}

사용자 정의 포맷터

environment 또는 extensions 등의 옵션으로 기본 제공 포맷터를 구성할 수 있습니다. 사용자 정의 포맷터를 추가하려면 commandextensions를 지정합니다:

{
  "$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 자리 표시자는 포맷팅되는 파일의 경로로 대체됩니다.