เครื่องมือจัดรูปแบบ Python
จัดรูปแบบ Python ใหม่ในแบบที่ Black ทำ - และดูว่ามีกี่บรรทัดที่เปลี่ยนแปลง
โค้ดของคุณ
0 ตัวอักษรจัดรูปแบบแล้ว
จัดรูปแบบ Python ใหม่ในแบบที่ Black ทำ - และดูว่ามีกี่บรรทัดที่เปลี่ยนแปลง
เครื่องมือนี้รัน Black ซึ่งเป็นตัวจัดรูปแบบที่โปรเจกต์ Python ส่วนใหญ่เห็นพ้องต้องกันอยู่แล้ว กับสิ่ง ที่คุณวาง โดยใช้ความยาวบรรทัดและการจัดการเครื่องหมายคำพูดที่คุณเลือก หากไฟล์แยกวิเคราะห์ไม่ได้ มันจะ บอกว่าอยู่ที่บรรทัดไหน และหากจัดรูปแบบไว้แล้ว มันก็จะบอกเช่นกัน แทนที่จะทำเหมือนว่าได้ทำอะไรไปแล้ว
การจัดรูปแบบ Python ไม่จำเป็นต้องรันมัน โค้ดถูกแยกวิเคราะห์เป็นต้นไม้ไวยากรณ์และเขียนขึ้นใหม่ จากต้นไม้นั้น ทั้งหมดอยู่ในหน่วยความจำ มันไม่ถูกเขียนลงไฟล์ ไม่ถูกนำเข้า และไม่ถูกรันเลย ตัวจัดรูปแบบที่รันสิ่งที่คุณวางไว้จะเป็นเชลล์ระยะไกลที่มีกล่องข้อความ
Black เป็นการแปลงที่รักษา AST ไว้ โค้ดที่ออกมาคือโปรแกรมเดียวกันกับโค้ดที่เข้ามา คุณสมบัตินั้นคือเหตุผลทั้งหมดที่ทำให้ไว้ใจตัว จัดรูปแบบได้ และเป็นเหตุผลที่ไม่มีโมเดลภาษาเข้ามาเกี่ยวข้องในส่วนใดของเครื่องมือนี้เลย โมเดลที่ถูกขอให้จัดโค้ดให้เรียบร้อยจะเขียนบรรทัดใหม่เป็นครั้งคราวในระหว่างทำ และการเปลี่ยนแปลง เงียบ ๆ ต่อโค้ดที่ทำงานได้อยู่แล้วคือความล้มเหลวเพียงอย่างเดียวที่ตัวจัดรูปแบบรับไม่ได้
คำถามเดียวกับที่ CI ถาม ไฟล์นี้จะเปลี่ยนหรือไม่ โหมดตรวจสอบจะส่งโค้ดต้นฉบับของคุณกลับมาโดย ไม่แก้ไข และรายงานว่า Black จะจัดรูปแบบมันใหม่หรือไม่ และกี่บรรทัด นี่เป็นวิธีที่รวดเร็วในการ หาว่าทำไมไปป์ไลน์ล้มเหลวกับไฟล์ที่คุณไม่สามารถทำซ้ำได้ในเครื่องของคุณเอง
เครื่องหมายจุลภาคหลังรายการสุดท้ายบอกให้ Black คงการเรียกฟังก์ชันหรือคอลเลกชันไว้บรรทัดละหนึ่งรายการ: result = compute(alpha, beta,) จะกลับมาเป็นสี่บรรทัด โดย alpha, และ beta, อยู่คนละบรรทัด ถ้าติ๊ก ละเว้น magic trailing comma อินพุตเดียวกันจะกลายเป็น result = compute(alpha, beta) เมื่อพอดีกับความยาวบรรทัด หากต้องการปกป้องบล็อกที่จัดแนวเอง เช่น เมทริกซ์ ให้ใส่ # fmt: off ที่บรรทัดด้านบนและ # fmt: on ด้านล่าง Black จะคงทุกอย่างระหว่างนั้นไว้ตามที่คุณเขียน ส่วน # fmt: skip ท้ายบรรทัดจะปกป้องเฉพาะบรรทัดนั้น ทั้งหมดนี้เป็นคอมเมนต์ของ Black เอง จึงยังใช้ได้เมื่อ CI ของโปรเจกต์รัน Black
มันถูกส่งไปที่เซิร์ฟเวอร์ จัดรูปแบบในหน่วยความจำ และส่งกลับมาในการตอบสนองเดียวกัน ไม่มีอะไรถูกเขียนลงดิสก์ แคช หรือบันทึกล็อก และบันทึกการใช้งานเก็บไว้แค่จำนวน เช่น ขนาด ตัวเลือก มีกี่บรรทัดที่เปลี่ยน แต่ไม่เคยเก็บโค้ด
ไม่ Black เปลี่ยนรูปแบบการจัดวาง ไม่ใช่การทำงาน แต่ทำมากกว่าการขยับช่องว่าง โดยจะลบวงเล็บที่ไม่จำเป็น (x = (1) กลายเป็น x = 1) เปลี่ยนคำนำหน้าและเลขชี้กำลังของตัวเลขเป็นตัวพิมพ์เล็ก (0XABCDEF กลายเป็น 0xABCDEF และ 1E5 กลายเป็น 1e5) เติมจุลภาคท้ายเมื่อแยกการเรียกฟังก์ชันออกเป็นหลายบรรทัด ลดบรรทัดว่างที่ติดกันหลายบรรทัด และตัดช่องว่างภายใน docstring (""" Doc. """ กลายเป็น """Doc.""") การเปลี่ยนแปลงข้อสุดท้ายนี้ทำให้ข้อความของ __doc__ เปลี่ยนไป ซึ่งมีผลเฉพาะเมื่อโค้ดของคุณอ่าน docstring ของตัวเอง
เพราะมันถูกจัดรูปแบบไว้แล้วที่ความยาวบรรทัดที่คุณเลือก เครื่องมือนี้บอกว่า "จัดรูปแบบไว้แล้ว" แทนที่จะส่งสำเนากลับมาเงียบ ๆ
ไม่ การเรียงลำดับ import เป็นงานของ isort ไม่ใช่ Black และทั้งสองไม่เห็นด้วยกันบ่อยพอที่การทำแบบนั้นที่นี่จะทำให้คุณประหลาดใจ
ไม่มีตัวจัดรูปแบบใดทำได้ ไฟล์ที่แยกวิเคราะห์ไม่ได้ไม่มีโครงสร้างให้เขียนใหม่ คุณจะได้บรรทัด คอลัมน์ และโค้ดโดยรอบเพื่อให้คุณแก้ไขและลองใหม่ได้
Black เข้ากันได้กับ PEP 8 โดยมีข้อยกเว้นที่รู้จักกันดีข้อหนึ่ง ความยาวบรรทัดเริ่มต้นคือ 88 ไม่ใช่ 79 เลือก 79 ในตัวเลือกความยาวบรรทัดหากคุณต้องการตัวเลขที่เข้มงวดกว่า
สูงสุด 400,000 อักขระต่อครั้ง การจัดรูปแบบจะหยุดหลัง 10 วินาที ซึ่งเกิดเฉพาะกับไฟล์ที่ใหญ่มากหรือซ้ำกันมาก และแต่ละที่อยู่ IP จัดรูปแบบได้ 30 ครั้งทุก 10 นาที
หน้านี้ใช้ Black และแสดงเวอร์ชันไว้ที่ส่วนหัวของหน้าบนหน้าจอกว้าง Black อ่านการตั้งค่าโปรเจกต์จาก pyproject.toml ในส่วน [tool.black] โดยใช้ชื่อตัวเลือกแบบยาว ได้แก่ line-length = 88 สำหรับ "ความยาวบรรทัด" ที่คุณเลือก, skip-string-normalization = true หากคุณติ๊ก "คงอัญประกาศเดิมไว้", skip-magic-trailing-comma = true สำหรับ "ละเว้น magic trailing comma" และ target-version = ["py311"] สำหรับค่าที่กำหนดตายตัวใน "เป้าหมาย" ปลั๊กอินของเอดิเตอร์และ hook ของ pre-commit อ่านไฟล์เดียวกันนี้ รัน black . เพื่อจัดรูปแบบ และ black --check --diff . ใน CI ซึ่งจะไม่แก้ไขอะไรและจบด้วยรหัส 1 เมื่อมีไฟล์ที่จะถูกจัดรูปแบบใหม่ ควรตรึงเวอร์ชัน Black ให้ตรงกับหน้านี้ เพราะรุ่นแรกของแต่ละปีปฏิทินอาจเปลี่ยนสไตล์แบบเสถียรได้
เกือบทุกครั้ง แต่ไม่ได้ตรงกันทุกไบต์ ตัวจัดรูปแบบของ Ruff ออกแบบมาให้ใช้แทน Black ได้ทันที และเอกสารของ Ruff ระบุว่าในโปรเจกต์ใหญ่ที่จัดรูปแบบด้วย Black อยู่แล้ว เช่น Django และ Zulip บรรทัดมากกว่า 99.9% ออกมาเหมือนกัน แต่จะต่างกันมากขึ้นกับโค้ดที่ไม่เคยผ่าน Black โดยเฉพาะคอมเมนต์ท้ายบรรทัด และเอกสารของ Ruff ระบุความแตกต่างที่ตั้งใจไว้ ความยาวบรรทัดเริ่มต้นก็เป็น 88 เช่นกัน ตั้งได้ด้วย line-length ใน [tool.ruff] ส่วน quote-style = "preserve" ใน [tool.ruff.format] ตรงกับ "คงอัญประกาศเดิมไว้" และ skip-magic-trailing-comma = true ตรงกับ "ละเว้น magic trailing comma" หาก CI ของคุณรัน ruff format --check ให้ทดสอบไฟล์ด้วย Ruff ไม่ใช่ด้วยหน้านี้