เพิ่มฟีเจอร์จัดรูปแบบโค้ดเข้าสู่ uv แบบทดลอง
(pydevtools.com)- uv เวอร์ชันใหม่เพิ่มฟีเจอร์ จัดรูปแบบโค้ด แบบทดลอง
- คำสั่ง
uv formatใช้ formatter ของ Ruff ภายในเพื่อจัดสไตล์โค้ด Python ให้สม่ำเสมอ - เดิมทีต้องใช้เครื่องมือแยกต่างหาก แต่ตอนนี้สามารถ จัดระเบียบโค้ดได้ง่าย ๆ ด้วย uv เพียงตัวเดียว
- ผู้ใช้สามารถส่งอาร์กิวเมนต์เพิ่มเติมเพื่อ ปรับพฤติกรรมการจัดรูปแบบได้อย่างละเอียด
- เนื่องจากยังเป็น ฟีเจอร์ทดลอง จึงอาจมีการเปลี่ยนแปลงในวิธีใช้คำสั่ง การจัดการข้อผิดพลาด และส่วนอื่น ๆ
ภาพรวม
รีลีสล่าสุดของ uv (0.8.13) ได้นำฟีเจอร์ uv format ซึ่งเป็นคำสั่งแบบทดลองที่นักพัฒนา Python รอคอยมานานเข้ามาใช้ ด้วยฟีเจอร์นี้ จึงสามารถ จัดการสไตล์โค้ดได้ด้วย uv เพียงตัวเดียว โดยไม่ต้องดูแลเครื่องมือจัดรูปแบบแยกต่างหากภายในโปรเจกต์
uv format คืออะไร?
- คำสั่ง
uv formatมอบความสามารถในการ จัดรูปแบบโค้ด Python ผ่านอินเทอร์เฟซของ uv - ภายในจะเรียกใช้ Ruff formatter เพื่อจัดโค้ดให้เป็นระเบียบและสม่ำเสมอโดยอัตโนมัติ
ข้อสังเกตสำหรับนักพัฒนา
Charlie Marsh (นักพัฒนา uv) อธิบายไว้บน Hacker News ดังนี้
Ruff และ uv ไม่ได้ถูกรวมเข้าด้วยกัน และยังคงเป็นเครื่องมือแยกกันอยู่
จุดประสงค์เป็นเพียงการปรับปรุงประสบการณ์ใช้งาน เพื่อให้ผู้ใช้สามารถใช้ formatter ได้โดยไม่ต้องมองว่าเป็นเครื่องมืออีกตัวหนึ่งแยกต่างหาก
มีความคล้ายกับความสัมพันธ์ระหว่างcargo fmtและrustfmtใน ecosystem ของ Rust
วิธีใช้งาน
- ต้องใช้ uv เวอร์ชัน 0.8.13 ขึ้นไป
- หากรันคำสั่ง
uv formatที่รากของโปรเจกต์ จะให้ผลเทียบเท่ากับการรัน ruff format - วิธีการเรียกใช้งานเป็นไปตามอินเทอร์เฟซคำสั่งของ uv
การส่งอาร์กิวเมนต์เพิ่มเติม
- สามารถกำหนด ตัวเลือกแบบละเอียดที่จะส่งต่อให้ Ruff ได้ในรูปแบบ
uv format -- [additional arguments] - ทำให้ใช้งานทั้งความสะดวกของ uv และการตั้งค่าละเอียดของ Ruff ได้พร้อมกัน
คำแนะนำเกี่ยวกับช่วงทดลอง
- ฟีเจอร์นี้ยังอยู่ใน ขั้นทดลอง และในอนาคตวิธีใช้คำสั่งหรือแนวทางการผสานเข้ากับโครงสร้างโปรเจกต์อาจเปลี่ยนแปลงได้
- การจัดการข้อผิดพลาด รูปแบบเอาต์พุต และส่วนอื่น ๆ ก็มีแผนจะปรับปรุงต่อเนื่อง
- ฟีเจอร์นี้จะพัฒนาต่อไปโดยอิงจากข้อเสนอแนะของผู้ใช้
สรุปส่งท้าย
- หากโปรเจกต์ Python ของคุณต้องการ การจัดสไตล์โค้ดที่ง่ายและสม่ำเสมอ ก็สามารถลองใช้
uv formatได้อย่างจริงจัง - เนื่องจากเป็น การนำมาใช้แบบทดลอง หากได้ลองใช้งานแล้วส่งข้อเสนอแนะกลับไป ก็จะช่วยสนับสนุนการพัฒนาของ uv ในอนาคตได้
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
ruffไปรวมกับtyส่วนuvก็ควรโฟกัสที่การจัดการแพ็กเกจหรือโปรเจกต์ และไม่ควรเข้ามาเกี่ยวกับการจัดรูปแบบโค้ด มองว่ากรณีเดียวที่uvควรแก้ไขไฟล์โค้ดคือเวลาที่อัปเดต dependency (PEP 723)ruffกับuvไม่ได้ถูกรวมเป็นตัวเดียวกัน และจะยังคงเป็นเครื่องมือแยกกันต่อไป จุดประสงค์คือเพื่อมอบประสบการณ์ที่เรียบง่ายขึ้นให้ผู้ใช้ที่ไม่อยากต้องมาดูแล formatter เอง คล้ายกับใน Rust ที่cargo fmtเรียกrustfmtภายในcargo fmttyถูกรวมเข้าuvด้วยจะเป็นอย่างไร ทั้งหมดออกมาจาก astral.sh เหมือนกัน เลยอาจเป็นวิสัยทัศน์ของทีมก็ได้ แต่ตอนนี้ ty ยังไม่พร้อมนักuv lintแล้วให้มันเรียกtyภายใน ในอุดมคติแล้วน่าจะดีถ้ามีคำสั่งมาตรฐานหนึ่งเดียวหรือชุดคำสั่งที่ใช้เตรียมโปรเจกต์ Python ได้ครบทั้ง format, lint, test, deploy บางทีนี่อาจเป็นวิสัยทัศน์ที่กำลังมุ่งไปก็ได้uv run --no-projectกับuv run --activeเป็นต้น) เลยอยากให้โฟกัสกับการปรับปรุงเครื่องมือเดิมและเอกสารมากกว่าการเพิ่มฟีเจอร์ใหม่ที่ไม่จำเป็นuv syncมีประโยชน์มากเพราะในทางทฤษฎีมันสร้างชุดแพ็กเกจที่ทำซ้ำได้อีกครั้ง แต่แพ็กเกจซับซ้อนอย่าง torch-tensorrt หรือ flash-attn ก็ยังขึ้นอยู่กับสภาพแวดล้อมอยู่ดี ชุมชน Python มักมีแนวโน้มจะทำให้ปัญหากลายเป็นเรื่องเฉพาะบุคคลแบบ “มันใช้ได้บนเครื่องฉัน” แต่ต้นทุนของการทำให้ซอฟต์แวร์ deploy ได้ ปลอดภัย ทำซ้ำได้ และเชื่อถือได้ ไม่เคยหายไปไหน สุดท้ายก็จะมีใครสักคนต้องจ่ายต้นทุนนั้นในภายหลังภายใต้ข้อจำกัดที่มากกว่า การพยายามตอบโจทย์ผู้ใช้และข้อกำหนดด้านปฏิบัติการที่หลากหลายเหล่านี้จึงเป็นเรื่องยากมากจริง ๆuvx ruff formatที่ยาวกว่าอยู่หนึ่งคำจะเป็นปัญหา อันที่จริงสิ่งที่อาจทำให้สับสนมากกว่าคือไม่ชัดเจนว่า formatter ตัวไหนถูกเรียกใช้งาน, ruff ถูกติดตั้งอัตโนมัติหรือไม่ หรือมันจะดาวน์โหลดและแคชเครื่องมือไว้เหมือนเดิมuv <ฟีเจอร์>ช่วยทีมได้มาก อยากให้เชื่อมกับ formatter อื่นได้ด้วย และถ้ารองรับการ format โมเดล SQL/dbt ได้ด้วยก็คงไม่มีอะไรจะขอเพิ่มแล้ว เดี๋ยวคงลองใช้ดูก่อนเพื่อดูศักยภาพjust formatเพื่อ format ทั้ง Python/SQL/Bash/TypeScript พร้อมกันได้uv formatใหม่นั้นจริง ๆ แล้วแทบจะเป็นชอร์ตคัตของuv run --with ruff ruffuv fmtและอาจเพิ่มอะไรอย่างuv vetเข้าไปในโรดแมปด้วยuv formatก็แทบจะเป็น frontend ของruff formatเท่านั้น ไม่ได้มี formatter ใหม่เพิ่มขึ้นมา