DevToolPal
ไทย

จัดรูปแบบโค้ด Python

จัดรูปแบบโค้ด Python ตามสไตล์ Black ด้วยตัวจัดรูปแบบ Ruff ที่คอมไพล์เป็น WebAssembly

ทำงานในเครื่อง ไม่มีการอัปโหลด

ตัวเลือก

การเยื้อง
เครื่องหมายคำพูด

อินพุต

0 ตัวอักษร · 0 B

เอาต์พุต

0 ตัวอักษร · 0 B

เครื่องมือนี้ทำอะไร

ตัวจัดรูปแบบ Python เขียนโค้ด Python ใหม่ตามสไตล์ Black ที่ใช้กันแพร่หลาย ได้แก่ การเยื้องที่สม่ำเสมอ ช่องว่างรอบตัวดำเนินการ เครื่องหมายคำพูดคู่ บรรทัดว่างสองบรรทัดระหว่างการนิยามระดับบนสุด และการตัดบรรทัดยาวในจุดที่เหมาะสม

เบื้องหลังคือตัวจัดรูปแบบของ Ruff ซึ่งเป็น linter และ formatter สำหรับ Python ที่เร็วมาก เขียนด้วย Rust และคอมไพล์เป็น WebAssembly ผลลัพธ์ของ Ruff ตรงกับ Black เกือบทุกบรรทัด โค้ดที่จัดรูปแบบที่นี่จึงจะไม่ถูกจัดใหม่อีกโดย pre-commit hook ของโปรเจกต์

วิธีใช้งาน

  1. วางโค้ด Python หรือเปิดไฟล์ .py
  2. โค้ดที่จัดรูปแบบแล้วจะปรากฏทางขวาขณะพิมพ์
  3. ปรับตัวเลือกหากโปรเจกต์ของคุณใช้สไตล์ต่างออกไป:
    • การเยื้อง: 4 ช่องว่างคือ PEP 8 และเป็นค่าเริ่มต้น มี 2 ช่องว่างและ Tab ให้เลือกด้วย
    • ความกว้างบรรทัด: 88 คือค่าเริ่มต้นของ Black, 79 คือขีดจำกัดของ PEP 8 และ 100 หรือ 120 เหมาะกับจอกว้าง
    • เครื่องหมายคำพูด: คู่ เดี่ยว หรือคงตามที่แต่ละสตริงใช้อยู่
    • คงตามจุลภาคต่อท้าย: คงคอลเลกชันที่ลงท้ายด้วยจุลภาคไว้ในรูปแบบขยาย
  4. คัดลอกหรือดาวน์โหลดผลลัพธ์

เมื่อโค้ดไม่สามารถ parse ได้ ข้อความแจ้งข้อผิดพลาดจะแสดงจุดที่ parser หยุด เช่น Expected `,`, found `=` ที่บรรทัด 4 และคุณสามารถกระโดดไปยังบรรทัดนั้นได้

ตัวอย่าง

ตัวอย่างคือโมดูลเล็ก ๆ ที่เขียนแบบไม่ใส่ใจ: import อยู่บรรทัดเดียวไม่มีช่องว่าง dataclass ที่มีช่องว่างก่อนโคลอน เมธอดที่เยื้องสองช่องว่าง และคำสั่ง if ในบรรทัดเดียว หลังจัดรูปแบบ ทุกบล็อกจะเยื้องสี่ช่องว่าง เนื้อหาของ if ย้ายไปอยู่บรรทัดของตัวเอง ตัวดำเนินการมีช่องว่าง เครื่องหมายคำพูดเดี่ยวกลายเป็นคู่ และมีบรรทัดว่างคั่นระหว่างคลาสกับฟังก์ชัน ลิสต์ที่ลงท้ายด้วยจุลภาคจะถูกขยายเป็นดิกชันนารีละบรรทัด

สิ่งที่ตัวจัดรูปแบบไม่ทำ

การจัดรูปแบบเปลี่ยนเฉพาะเลย์เอาต์ ไม่เรียง import ไม่ลบตัวแปรที่ไม่ได้ใช้ และไม่เปลี่ยนชื่อสิ่งใด สิ่งเหล่านั้นเป็นงานของ linter (ruff check --fix จัดการได้) คอมเมนต์และ docstring จะถูกเก็บไว้ และตัวจัดรูปแบบจะไม่แก้โค้ดที่ parse ไม่ได้แทนที่จะเดาเอาเอง

เคล็ดลับ

  • ใช้ความกว้างบรรทัดเดียวกับใน pyproject.toml ของโปรเจกต์ เพื่อให้ผลลัพธ์ตรงกับ CI
  • การจัดรูปแบบโค้ดก่อนโพสต์ในคำถามหรือการรีวิวทำให้อ่านง่ายขึ้นมาก
  • หากโค้ดมาจาก notebook หรือแชทและมี Tab ปนกับช่องว่าง ตัวจัดรูปแบบจะปรับให้เป็นมาตรฐานเดียวในขั้นตอนเดียว

คำถามที่พบบ่อย

› ผลลัพธ์เหมือนกับ Black หรือไม่?

ตัวจัดรูปแบบของ Ruff ถูกออกแบบมาให้ใช้แทน Black ได้ทันที และให้ผลตรงกันมากกว่า 99.9% ของบรรทัดในโปรเจกต์จริงขนาดใหญ่ ค่าเริ่มต้นที่นี่ (เยื้อง 4 ช่องว่าง 88 คอลัมน์ และเครื่องหมายคำพูดคู่) คือค่าเริ่มต้นของ Black

› "magic trailing comma" คืออะไร?

หากลิสต์ การเรียกฟังก์ชัน หรือการนิยามลงท้ายด้วยจุลภาค Black และ Ruff จะคงไว้ในรูปแบบขยาย รายการละบรรทัด แม้จะใส่ในบรรทัดเดียวได้ก็ตาม ปิดสวิตช์นี้เพื่อยุบคอลเลกชันเหล่านี้ลงบรรทัดเดียวเมื่อพอดี

› รองรับ Python เวอร์ชันไหนบ้าง?

parser เข้าใจไวยากรณ์ Python 3 สมัยใหม่ รวมถึงคำสั่ง match, type parameter list และ f-string ที่มีเครื่องหมายคำพูดซ้อน โค้ด Python 2 อย่าง `print "x"` จะถือเป็นข้อผิดพลาดทางไวยากรณ์

› โค้ดของฉันถูกอัปโหลดหรือไม่?

ไม่ โมดูล Ruff WebAssembly ถูกดาวน์โหลดเพียงครั้งเดียว และการจัดรูปแบบทำงานในเบราว์เซอร์ของคุณ