Công cụ định dạng Python
Định dạng lại Python theo cách Black làm - và xem chính xác số dòng đã thay đổi.
Mã của bạn
0 ký tựĐã định dạng
Định dạng lại Python theo cách Black làm - và xem chính xác số dòng đã thay đổi.
Công cụ này chạy Black - bộ định dạng mà hầu hết các dự án Python đã đồng thuận sử dụng - trên những gì bạn dán vào, với độ dài dòng và cách xử lý dấu ngoặc kép mà bạn chọn. Nếu tệp không phân tích được, nó cho biết ở dòng nào, và nếu tệp đã được định dạng sẵn, nó cũng cho biết điều đó, thay vì giả vờ đã làm gì đó.
Định dạng Python không yêu cầu chạy nó. Mã được phân tích thành một cây cú pháp và được viết lại từ cây đó, hoàn toàn trong bộ nhớ - nó không bao giờ được viết vào tệp, không bao giờ được nhập và không bao giờ được chạy. Một bộ định dạng chạy những gì bạn dán vào sẽ là một shell từ xa với một hộp văn bản.
Black là một phép biến đổi bảo toàn AST: mã đầu ra là cùng một chương trình với mã đầu vào. Thuộc tính đó là toàn bộ lý do một bộ định dạng có thể được tin tưởng, và đó là lý do không có mô hình ngôn ngữ nào tham gia vào bất kỳ phần nào của công cụ này. Một mô hình được yêu cầu dọn dẹp mã đôi khi sẽ viết lại một dòng trong khi làm việc đó, và một thay đổi âm thầm đối với mã đang hoạt động là thất bại duy nhất mà một bộ định dạng không thể chấp nhận.
Cùng câu hỏi mà CI đặt ra: tệp này có thay đổi không? Chế độ kiểm tra trả lại mã gốc của bạn không bị thay đổi và báo cáo liệu Black có định dạng lại nó hay không, và bao nhiêu dòng. Đây là cách nhanh để tìm ra tại sao một pipeline đang thất bại trên một tệp mà bạn không thể tái tạo cục bộ.
Dấu phẩy sau phần tử cuối báo cho Black giữ lời gọi hoặc tập hợp ở dạng mỗi phần tử một dòng: result = compute(alpha, beta,) trả về thành bốn dòng, alpha, và beta, mỗi cái nằm trên một dòng riêng. Đánh dấu Bỏ qua dấu phẩy magic ở cuối thì cùng đầu vào đó trở thành result = compute(alpha, beta) khi vừa độ dài dòng. Để bảo vệ một khối căn chỉnh bằng tay, như một ma trận, đặt # fmt: off ở dòng phía trên và # fmt: on ở phía dưới; Black giữ nguyên mọi thứ ở giữa đúng như bạn viết. # fmt: skip ở cuối dòng chỉ bảo vệ dòng đó. Đây là chú thích của chính Black, nên vẫn có tác dụng khi CI của dự án chạy Black.
Nó được gửi đến máy chủ, được định dạng trong bộ nhớ và trả về trong cùng một phản hồi. Không có gì được viết vào đĩa, lưu vào bộ nhớ đệm hoặc ghi nhật ký, và bản ghi sử dụng chỉ giữ số lượng - kích thước, tùy chọn, bao nhiêu dòng đã thay đổi - không bao giờ là mã.
Không. Black thay đổi cách trình bày, không thay đổi hành vi, nhưng nó làm nhiều hơn việc dịch chuyển khoảng trắng. Nó bỏ dấu ngoặc thừa (x = (1) thành x = 1), viết thường tiền tố và số mũ của số (0XABCDEF thành 0xABCDEF, 1E5 thành 1e5), thêm dấu phẩy cuối khi tách một lời gọi ra nhiều dòng, rút gọn các chuỗi dòng trống và cắt khoảng trắng bên trong docstring (""" Doc. """ thành """Doc."""). Thay đổi cuối này làm khác nội dung __doc__, điều chỉ quan trọng nếu mã của bạn đọc docstring của chính nó.
Vì nó đã được định dạng ở độ dài dòng bạn chọn. Công cụ này nói "đã được định dạng" thay vì âm thầm trả về một bản sao.
Không. Sắp xếp import là việc của isort, không phải Black, và hai công cụ này đủ thường xuyên không đồng ý để việc làm điều đó ở đây sẽ khiến bạn ngạc nhiên.
Không bộ định dạng nào có thể - một tệp không thể phân tích không có cấu trúc để viết lại. Bạn nhận được dòng, cột và mã xung quanh để có thể sửa nó và thử lại.
Black tương thích với PEP 8 với một sai lệch nổi tiếng: độ dài dòng mặc định của nó là 88 thay vì 79. Chọn 79 trong bộ chọn độ dài dòng nếu bạn cần con số nghiêm ngặt hơn.
Tối đa 400.000 ký tự mỗi lần chạy. Việc định dạng dừng sau 10 giây, mức chỉ các tệp rất lớn hoặc lặp lại nhiều mới chạm tới, và mỗi địa chỉ IP có thể định dạng 30 lần trong 10 phút.
Trang này chạy Black, và phiên bản của nó hiển thị ở đầu trang trên màn hình rộng. Black đọc cấu hình dự án từ pyproject.toml trong mục [tool.black], dùng tên dài của các tùy chọn: line-length = 88 cho "Độ dài dòng" bạn đã chọn, skip-string-normalization = true nếu bạn đánh dấu "Giữ nguyên dấu ngoặc của tôi", skip-magic-trailing-comma = true cho "Bỏ qua dấu phẩy magic ở cuối" và target-version = ["py311"] cho giá trị cố định ở "Mục tiêu". Plugin trình soạn thảo và hook pre-commit đọc cùng tệp đó. Chạy black . để định dạng và black --check --diff . trong CI: lệnh không thay đổi gì và thoát với mã 1 khi có tệp sẽ bị định dạng lại. Hãy ghim cùng phiên bản Black với trang này, vì bản phát hành đầu tiên của mỗi năm dương lịch có thể thay đổi kiểu ổn định.
Gần như luôn giống, nhưng không giống từng byte. Trình định dạng của Ruff được thiết kế để thay thế trực tiếp Black, và tài liệu của Ruff cho biết trên các dự án lớn đã định dạng bằng Black như Django và Zulip, hơn 99,9% số dòng ra giống hệt. Nó khác nhiều hơn với mã chưa từng qua Black, nhất là chú thích cuối dòng, và tài liệu của nó liệt kê các điểm khác biệt có chủ ý. Độ dài dòng mặc định của nó cũng là 88, đặt bằng line-length trong [tool.ruff]; quote-style = "preserve" trong [tool.ruff.format] tương ứng với "Giữ nguyên dấu ngoặc của tôi" và skip-magic-trailing-comma = true tương ứng với "Bỏ qua dấu phẩy magic ở cuối". Nếu CI của bạn chạy ruff format --check, hãy kiểm tra tệp bằng Ruff, không phải bằng trang này.