Tính năng định dạng mã được đưa vào uv dưới dạng thử nghiệm
(pydevtools.com)- Phiên bản uv mới cung cấp tính năng định dạng mã dưới dạng thử nghiệm
- Lệnh
uv formatsử dụng trình định dạng của Ruff ở bên trong để áp dụng kiểu định dạng nhất quán cho mã Python - Giờ đây có thể dọn dẹp mã thuận tiện chỉ với uv mà không cần công cụ riêng biệt như trước
- Người dùng có thể tinh chỉnh chi tiết hành vi định dạng thông qua các đối số bổ sung
- Vì vẫn là tính năng thử nghiệm, cách dùng lệnh, xử lý lỗi và các phần khác vẫn có thể thay đổi
Tổng quan
Bản phát hành mới nhất của uv (0.8.13) đã giới thiệu uv format, một lệnh thử nghiệm mà các nhà phát triển Python đã chờ đợi từ lâu. Với tính năng này, có thể chuẩn hóa style mã chỉ bằng công cụ uv mà không cần quản lý thêm công cụ định dạng riêng trong dự án
uv format là gì?
- Lệnh
uv formatcung cấp khả năng định dạng mã Python thông qua giao diện uv - Bên trong, nó gọi trình định dạng Ruff để tự động sắp xếp mã một cách nhất quán
Lưu ý cho nhà phát triển
Charlie Marsh (nhà phát triển uv) đã giải thích như sau trên Hacker News
Ruff và uv không được hợp nhất, và chúng vẫn là hai công cụ riêng biệt
Mục tiêu đơn giản là cải thiện trải nghiệm để người dùng có thể dùng trình định dạng mà không cần xem đó là một công cụ riêng
Điều này tương tự mối quan hệ giữa cargo fmt và rustfmt trong hệ sinh thái Rust
Cách sử dụng
- Cần dùng uv phiên bản 0.8.13 trở lên
- Chạy lệnh
uv formatở thư mục gốc của dự án sẽ mang lại hiệu quả tương đương với việc chạy ruff format - Cách thực thi tuân theo giao diện lệnh của uv
Truyền đối số bổ sung
- Có thể đặt các tùy chọn chi tiết để truyền cho Ruff theo dạng
uv format -- [đối số bổ sung] - Có thể tận dụng đồng thời sự tiện lợi của uv và khả năng cấu hình chi tiết của Ruff
Hướng dẫn về giai đoạn thử nghiệm
- Hiện tại, tính năng này vẫn ở giai đoạn thử nghiệm, nên trong tương lai cách dùng lệnh hoặc cách tích hợp với cấu trúc dự án có thể thay đổi
- Cách xử lý lỗi, định dạng đầu ra và các phần khác cũng sẽ tiếp tục được cải thiện
- Tính năng này dự kiến sẽ tiếp tục phát triển dựa trên phản hồi của người dùng
Kết luận
- Nếu bạn cần định dạng mã đơn giản và nhất quán cho dự án Python, có thể tích cực thử
uv format - Vì đây là bổ sung mang tính thử nghiệm, việc trực tiếp sử dụng rồi gửi phản hồi sẽ giúp đóng góp cho sự phát triển của uv trong tương lai
1 bình luận
Ý kiến Hacker News
ruffđược gộp vớity, cònuvthì nên tập trung vào quản lý gói hoặc dự án và không nên can thiệp cả vào việc chỉnh style code; theo tôi, trường hợp duy nhất màuvnên sửa file mã nguồn là khi cập nhật dependency (PEP 723)ruffvàuvkhông được hợp nhất với nhau mà sẽ tiếp tục là các công cụ riêng biệt; mục đích là mang lại trải nghiệm đơn giản hơn cho những người dùng không muốn phải bận tâm riêng đến formatter. Cách này tương tự như Rust Cargo, nơicargo fmtbên dưới sẽ gọirustfmtcargo fmttyđược tích hợp vàouvthì sẽ ra sao. Vì tất cả đều đến từ astral.sh nên có thể đó chính là tầm nhìn, nhưng hiện tại ty vẫn chưa thực sự sẵn sànguv lintđể bên dưới chạyty; lý tưởng nhất là có một lệnh chuẩn hoặc một nhóm lệnh chuẩn để chuẩn bị dự án Python (format, lint, test, deploy). Có lẽ đây chính là tầm nhìn được nhắm tới ở đâyuv run --no-projectvàuv run --activechẳng hạn). Tôi mong họ tập trung nhiều hơn vào việc cải thiện công cụ và tài liệu hiện có thay vì tiếp tục thêm tính năng mới không cần thiếtuv syncvề mặt lý thuyết rất hữu ích vì chỉ build các tập package có thể tái tạo lại, nhưng các package phức tạp như torch-tensorrt hay flash-attn thì vẫn khó tránh khỏi việc phụ thuộc vào môi trường. Cộng đồng Python thường có xu hướng cá nhân hóa vấn đề theo kiểu "máy tôi chạy được", nhưng cái giá để phần mềm có thể triển khai, an toàn, lặp lại được và đáng tin cậy thì không bao giờ tự biến mất; rốt cuộc sẽ có ai đó phải trả cái giá đó về sau trong điều kiện còn hạn chế hơn. Cố gắng đáp ứng đủ mọi nhu cầu người dùng và yêu cầu vận hành đa dạng như vậy thực sự rất khóuvx ruff formatdài hơn một từ là điều tệ. Ngược lại, điều có thể gây rối hơn là formatter thực sự đang chạy là gì, liệu ruff có được cài tự động hay không, hay nó vẫn tải và cache công cụ như trướcuv formatsẽ không hoạt độnguv <tính năng>rất có ích cho cả đội. Tôi cũng hy vọng có thể tích hợp với các formatter khác, và nếu còn hỗ trợ cả format cho model SQL/dbt thì gần như không còn gì để chê. Trước mắt tôi sẽ thử dùng để xem tiềm năng đến đâujust formatlà có thể format Python/SQL/Bash/TypeScript cùng lúcuv formatmới về cơ bản chỉ là lối tắt củauv run --with ruff ruffuv fmt, và có lẽ cũng nên đưa những thứ nhưuv vetvào roadmapuv formatgần như chỉ là frontend choruff format, chứ không phải thêm một formatter mới nàoruff format, vốn đã được rất nhiều người sử dụng dễ dàng hơn mà thôi