DevToolPal
VI

Định dạng Python

Định dạng mã Python theo phong cách Black bằng Ruff formatter được biên dịch sang WebAssembly.

Chạy cục bộ, không bao giờ tải lên

Tùy chọn

Thụt lề
Dấu nháy

Đầu vào

0 ký tự · 0 B

Đầu ra

0 ký tự · 0 B

Công cụ này làm gì

Công cụ định dạng Python viết lại mã Python theo phong cách Black phổ biến: thụt lề nhất quán, dấu cách quanh toán tử, nháy kép, hai dòng trống giữa các định nghĩa cấp cao nhất và ngắt các dòng dài ở những vị trí hợp lý.

Bên dưới, công cụ chạy formatter của Ruff, linter và formatter Python tốc độ cao viết bằng Rust, được biên dịch sang WebAssembly. Kết quả của Ruff khớp với Black gần như từng dòng, nên mã định dạng ở đây sẽ không bị pre-commit hook của dự án định dạng lại.

Cách sử dụng

  1. Dán mã Python, hoặc mở một tệp .py.
  2. Mã đã định dạng xuất hiện ở bên phải ngay khi bạn gõ.
  3. Điều chỉnh các tùy chọn nếu dự án của bạn dùng phong cách khác:
    • Thụt lề: 4 dấu cách theo PEP 8 và là mặc định; có cả 2 dấu cách và tab.
    • Độ rộng dòng: 88 là mặc định của Black, 79 là giới hạn của PEP 8, còn 100 hoặc 120 hợp với màn hình rộng.
    • Dấu nháy: nháy kép, nháy đơn, hoặc giữ nguyên dấu nháy mà mỗi chuỗi đang dùng.
    • Tôn trọng dấu phẩy cuối: giữ các tập hợp kết thúc bằng dấu phẩy ở dạng mở rộng.
  4. Sao chép hoặc tải kết quả xuống.

Khi không phân tích được mã, thông báo lỗi sẽ chỉ ra nơi bộ phân tích dừng lại, chẳng hạn Expected `,`, found `=` ở dòng 4, và bạn có thể nhảy tới dòng đó.

Ví dụ

Mã ví dụ là một module nhỏ viết cẩu thả: các import nằm trên một dòng không có dấu cách, một dataclass có dấu cách trước dấu hai chấm, một method thụt lề hai dấu cách và một câu lệnh if viết trên một dòng. Sau khi định dạng, mọi khối dùng thụt lề bốn dấu cách, thân if chuyển xuống dòng riêng, toán tử có thêm dấu cách, nháy đơn thành nháy kép và các dòng trống được thêm giữa class và các hàm. Danh sách kết thúc bằng dấu phẩy cuối được mở rộng với mỗi dictionary một dòng.

Những gì công cụ không làm

Định dạng chỉ thay đổi bố cục. Nó không sắp xếp import, không xóa biến không dùng và không đổi tên gì cả; đó là việc của linter (ruff check --fix xử lý chúng). Chú thích và docstring được giữ nguyên, và công cụ từ chối thay đổi mã mà nó không phân tích được thay vì đoán mò.

Mẹo

  • Dùng cùng độ rộng dòng như trong pyproject.toml của dự án để kết quả khớp với CI.
  • Định dạng một đoạn mã trước khi đăng nó trong câu hỏi hoặc buổi review giúp đọc dễ hơn nhiều.
  • Nếu mã đến từ notebook hoặc tin nhắn chat và lẫn lộn tab với dấu cách, công cụ sẽ chuẩn hóa nó trong một bước.

Câu hỏi thường gặp

› Kết quả có giống Black không?

Ruff formatter được thiết kế để thay thế trực tiếp Black và cho kết quả giống hệt trên hơn 99,9% số dòng trong các dự án thực tế lớn. Cài đặt mặc định ở đây (thụt lề 4 dấu cách, 88 cột, nháy kép) chính là mặc định của Black.

› "Magic trailing comma" là gì?

Nếu một danh sách, lời gọi hàm hay định nghĩa kết thúc bằng dấu phẩy cuối, Black và Ruff sẽ giữ nó ở dạng mở rộng, mỗi phần tử một dòng, kể cả khi vừa một dòng. Tắt công tắc này để thu gọn các tập hợp như vậy mỗi khi chúng vừa một dòng.

› Hỗ trợ những phiên bản Python nào?

Bộ phân tích hiểu cú pháp Python 3 hiện đại, bao gồm câu lệnh match, danh sách tham số kiểu và f-string có dấu nháy lồng nhau. Mã Python 2 như `print "x"` là lỗi cú pháp.

› Mã của tôi có bị tải lên không?

Không. Module Ruff WebAssembly chỉ được tải về một lần và việc định dạng chạy trong trình duyệt của bạn.