DevToolPal
한국어

Ruby 포매터

WebAssembly로 컴파일된 실제 Ruby 인터프리터 위에서 Syntax Tree로 Ruby 코드를 정리합니다.

로컬에서 실행, 업로드 없음

옵션

처음 포맷할 때 Ruby 인터프리터(약 13 MB)를 내려받으므로 몇 초 걸릴 수 있습니다. 이후 실행은 즉시 끝납니다.

입력

0자 · 0 B

출력

0자 · 0 B

기능 소개

Ruby 포매터는 Ruby 코드를 일관된 들여쓰기와 간격으로 다시 씁니다. 스크립트, Rails 모델, Rakefile을 붙여 넣으면 공백 2칸 들여쓰기, 한 줄에 문장 하나, 연산자 주위와 중괄호 안쪽의 공백이 적용되고, 긴 메서드 체인은 줄 너비에 맞게 줄바꿈되어 돌아옵니다.

WebAssembly로 컴파일된 실제 Ruby 인터프리터 위에서 Syntax Tree를 실행합니다. 파서가 Ruby 자체의 것이므로 엔드리스 메서드, 패턴 매칭, 키워드 인수 같은 최신 문법도 Ruby가 이해하는 그대로 처리합니다.

사용 방법

  1. Ruby 코드를 붙여 넣거나 .rb 파일을 엽니다.
  2. 첫 결과를 기다립니다. 인터프리터는 백그라운드에서 한 번만 내려받습니다.
  3. 줄 너비를 고릅니다. 이보다 긴 줄은 메서드 호출, 인수, 해시 항목 위치에서 나뉩니다.
  4. 포맷된 코드를 복사하거나 다운로드합니다.

코드를 해석할 수 없으면 syntax error, unexpected 'end' 같은 Ruby의 문법 오류를 보여 주므로 빠진 부분을 찾을 수 있습니다.

예시

예시는 레이아웃을 신경 쓰지 않고 작성한 작은 장바구니 모듈입니다. 들여쓰지 않은 클래스 본문, 세미콜론으로 한 줄에 쓴 initialize, 공백 없는 해시, > 주위에 공백이 없는 삼항 연산자가 들어 있습니다. 포맷하면 모듈과 클래스가 들여쓰기되고, initialize의 각 문장이 한 줄씩 차지하며, 해시 리터럴은 { name: name, price: price, qty: qty }가 되고, 삼항 연산자는 cart.total > 10 ? "big order" : "small order"가 됩니다.

바꾸지 않는 것

포매터는 레이아웃만 바꿉니다. 변수 이름을 바꾸거나, 해시 로켓을 새 문법으로 바꾸거나, 작은따옴표와 큰따옴표를 바꾸지 않습니다. 주석은 보존됩니다. 그런 스타일 수정이 필요하다면 포맷한 뒤 프로젝트에서 RuboCop의 자동 수정을 실행하세요.

팁

  • 프로젝트의 .rubocop.yml(Layout/LineLength)과 같은 줄 너비를 쓰면 포맷된 코드가 린터를 통과합니다.
  • 포맷은 빠진 end를 찾는 빠른 방법이기도 합니다. Ruby는 해석을 포기한 위치를 알려 주는데, 보통 닫히지 않은 블록 바로 뒤입니다.

자주 묻는 질문

› 어떤 포매터를 사용하나요?

공식 Prettier Ruby 플러그인의 바탕이 되는 Ruby 포매터인 Syntax Tree를 사용합니다. 표준 Ruby 인터프리터인 CRuby를 WebAssembly로 컴파일해 그 위에서 실행하므로, 코드를 Ruby와 똑같이 해석합니다.

› 첫 실행이 느린 이유는 무엇인가요?

처음 포맷할 때 페이지가 Ruby 인터프리터와 포매터(약 13 MB)를 내려받고, 페이지가 멈추지 않도록 백그라운드 워커에서 실행합니다. 그다음부터는 포맷이 1초도 걸리지 않습니다.

› RuboCop 스타일을 따르나요?

대체로 그렇습니다. Syntax Tree는 공백 2칸 들여쓰기, 해시 중괄호 안쪽과 연산자 주위의 공백, 메서드 사이 빈 줄 하나를 만들며, 이는 RuboCop의 기본 레이아웃 규칙과 일치합니다. 다만 `rubocop -a`처럼 따옴표 스타일을 바꾸거나 코드를 고쳐 쓰지는 않습니다.

› 코드가 업로드되나요?

아니요. 모든 것이 브라우저에서 실행되며 서버로 전송되는 것은 없습니다.