DevToolPal
한국어

Python 포매터

WebAssembly로 컴파일된 Ruff 포매터로 Python 코드를 Black 스타일로 정리합니다.

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

옵션

들여쓰기
따옴표

입력

0자 · 0 B

출력

0자 · 0 B

기능 소개

Python 포매터는 널리 쓰이는 Black 스타일로 Python 코드를 다시 씁니다. 일관된 들여쓰기, 연산자 주위의 공백, 큰따옴표, 최상위 정의 사이의 빈 줄 두 개, 적절한 위치에서의 긴 줄 줄바꿈이 적용됩니다.

내부적으로는 Rust로 작성된 빠른 Python 린터 겸 포매터인 Ruff의 포매터를 WebAssembly로 컴파일해 실행합니다. Ruff의 출력은 Black과 거의 줄 단위로 일치하므로, 여기서 포맷한 코드는 프로젝트의 pre-commit 훅에서 다시 포맷되지 않습니다.

사용 방법

  1. Python 코드를 붙여 넣거나 .py 파일을 엽니다.
  2. 입력하는 동안 포맷된 코드가 오른쪽에 나타납니다.
  3. 프로젝트가 다른 스타일을 쓴다면 옵션을 조정합니다.
    • 들여쓰기: PEP 8이자 기본값은 공백 4칸이며, 공백 2칸과 탭도 있습니다.
    • 줄 너비: 88은 Black의 기본값, 79는 PEP 8의 한도이고, 넓은 화면에는 100이나 120이 적당합니다.
    • 따옴표: 큰따옴표, 작은따옴표, 또는 각 문자열이 이미 쓰는 따옴표 유지.
    • 후행 쉼표 존중: 쉼표로 끝나는 컬렉션을 펼친 상태로 유지합니다.
  4. 결과를 복사하거나 다운로드합니다.

코드를 해석할 수 없으면 4행의 Expected `,`, found `=` 처럼 파서가 멈춘 위치를 오류 메시지로 보여 주며, 해당 줄로 바로 이동할 수 있습니다.

예시

예시는 대충 작성한 작은 모듈입니다. 공백 없이 한 줄에 몰아 쓴 import, 콜론 앞에 공백이 있는 dataclass, 공백 2칸으로 들여쓴 메서드, 한 줄짜리 if 문이 들어 있습니다. 포맷하면 모든 블록이 공백 4칸 들여쓰기를 쓰고, if 본문이 별도 줄로 옮겨지며, 연산자 주위에 공백이 들어가고, 작은따옴표가 큰따옴표로 바뀌고, 클래스와 함수 사이에 빈 줄이 추가됩니다. 후행 쉼표로 끝난 리스트는 딕셔너리를 한 줄에 하나씩 두도록 펼쳐집니다.

포매터가 하지 않는 일

포맷은 레이아웃만 바꿉니다. import를 정렬하거나, 사용하지 않는 변수를 지우거나, 이름을 바꾸지 않습니다. 그런 일은 린터의 몫입니다(ruff check --fix가 처리합니다). 주석과 독스트링은 유지되며, 해석할 수 없는 코드는 추측해서 바꾸지 않고 포맷을 거부합니다.

팁

  • 프로젝트 pyproject.toml과 같은 줄 너비를 쓰면 결과가 CI와 일치합니다.
  • 질문이나 리뷰에 코드 조각을 올리기 전에 포맷하면 훨씬 읽기 쉬워집니다.
  • 노트북이나 채팅에서 가져온 코드에 탭과 공백이 섞여 있어도 포매터가 한 번에 정리합니다.

자주 묻는 질문

› 결과가 Black과 같나요?

Ruff 포매터는 Black을 그대로 대체하도록 설계되었고, 실제 대규모 프로젝트에서 99.9% 이상의 줄이 Black의 출력과 일치합니다. 이 도구의 기본 설정(들여쓰기 4칸, 88열, 큰따옴표)도 Black의 기본값입니다.

› "매직 후행 쉼표"란 무엇인가요?

리스트, 호출, 정의가 후행 쉼표로 끝나면 Black과 Ruff는 한 줄에 들어가더라도 항목을 한 줄에 하나씩 펼친 상태로 유지합니다. 스위치를 끄면 이런 컬렉션도 한 줄에 들어갈 때는 한 줄로 합칩니다.

› 어떤 Python 버전을 지원하나요?

파서는 match 문, 타입 매개변수 목록, 중첩 따옴표가 있는 f-string 등 최신 Python 3 문법을 이해합니다. `print "x"` 같은 Python 2 코드는 문법 오류가 됩니다.

› 코드가 업로드되나요?

아니요. Ruff WebAssembly 모듈을 한 번 내려받은 뒤에는 포맷이 브라우저에서 실행됩니다.