قالببندیکننده Python
قالببندی مجدد Python به روش Black - و مشاهده دقیق تعداد خطوط تغییریافته.
کد شما
0 کاراکترقالببندیشده
قالببندی مجدد Python به روش Black - و مشاهده دقیق تعداد خطوط تغییریافته.
این ابزار Black - قالببندگری که بیشتر پروژههای Python از پیش بر آن توافق دارند - را روی هر چه جایگذاری کنید اجرا میکند، با طول خط و نحوه برخورد با علامت نقلقول که خودتان انتخاب میکنید. اگر فایل تحلیل نشود، میگوید در کدام خط، و اگر از قبل قالببندیشده باشد، آن را هم میگوید، بهجای وانمود کردن که کاری انجام داده است.
قالببندی Python نیازی به اجرای آن ندارد. کد به یک درخت نحوی تحلیل و از همان درخت، کاملاً در حافظه، بازنویسی میشود - هرگز در فایلی نوشته نمیشود، هرگز وارد نمیشود و هرگز اجرا نمیشود. قالببندی که آنچه جایگذاری کردهاید را اجرا کند، یک پوسته فرمان راهدور با یک کادر متنی خواهد بود.
Black تبدیلی است که درخت نحوی انتزاعی (AST) را حفظ میکند: کدی که بیرون میآید همان برنامه کدی است که وارد شده. این ویژگی تمام دلیل قابلاعتماد بودن یک قالببند است، و دلیل این است که هیچ مدل زبانی در هیچ بخشی از این ابزار دخالت ندارد. مدلی که از او خواسته شود کد را مرتب کند، گاهی یک خط را در همان حین بازنویسی میکند، و تغییر خاموش در کدی که کار میکند، تنها شکستی است که یک قالببند نمیتواند بپذیرد.
همان سؤالی که CI میپرسد: آیا این فایل تغییر میکرد؟ حالت بررسی کد اصلی شما را بدون تغییر برمیگرداند و میگوید آیا Black آن را دوباره قالببندی میکرد و در چند خط. این راه سریعی برای فهمیدن این است که چرا یک پایپلاین روی فایلی که نمیتوانید بهصورت محلی بازتولید کنید شکست میخورد.
کاما بعد از آخرین عنصر به Black میگوید یک فراخوانی یا مجموعه را با یک عنصر در هر سطر نگه دارد: result = compute(alpha, beta,) در چهار سطر برمیگردد و alpha, و beta, هر کدام در سطر جداگانهاند. گزینه نادیده گرفتن کامای انتهایی جادویی را تیک بزنید تا همان ورودی، هر جا در طول سطر جا شود، به 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های خودش را بخواند.
چون از قبل با طول خطی که انتخاب کرده بودید قالببندی شده بود. ابزار میگوید "از قبل قالببندیشده" بهجای برگرداندن بیصدای یک کپی.
نه. مرتبسازی وارد کردنیها کار isort است، نه Black، و این دو به اندازه کافی با هم اختلاف دارند که اگر اینجا انجام میشد شما را شگفتزده میکرد.
هیچ قالببندی نمیتواند - فایلی که تحلیل نمیشود، ساختاری برای بازنویسی ندارد. خط، ستون و کد اطراف را دریافت میکنید تا بتوانید آن را اصلاح و دوباره تلاش کنید.
Black با یک انحراف شناختهشده با PEP 8 سازگار است: طول خط پیشفرض آن 88 است، نه 79. اگر به رقم سختگیرانهتر نیاز دارید، 79 را در انتخابگر طول خط انتخاب کنید.
تا 400,000 نویسه در هر اجرا. قالببندی پس از 10 ثانیه متوقف میشود، که فقط فایلهای بسیار بزرگ یا بسیار تکراری به آن میرسند، و هر نشانی IP میتواند هر 10 دقیقه 30 بار قالببندی کند.
این صفحه از Black استفاده میکند و نسخهاش در صفحههای عریض در سربرگ بالای صفحه نمایش داده میشود. Black تنظیمات پروژه را از pyproject.toml در بخش [tool.black] با نامهای بلند گزینهها میخواند: line-length = 88 برای گزینه "طول خط" که انتخاب کردهاید، skip-string-normalization = true اگر "حفظ نقلقولهای من" را تیک زدهاید، skip-magic-trailing-comma = true برای "نادیده گرفتن کامای انتهایی جادویی" و target-version = ["py311"] برای مقدار ثابت در "هدف". افزونههای ویرایشگر و هوک pre-commit همین فایل را میخوانند. برای قالببندی black . و در CI دستور black --check --diff . را اجرا کنید: چیزی را تغییر نمیدهد و اگر فایلی دوباره قالببندی شود با کد 1 خارج میشود. همان نسخه Black این صفحه را ثابت کنید، چون نخستین انتشار هر سال میلادی ممکن است سبک پایدار را تغییر دهد.
تقریباً همیشه، اما نه بایت به بایت. قالببند Ruff طوری طراحی شده که مستقیماً جایگزین Black شود و مستندات Ruff میگوید در پروژههای بزرگی که با Black قالببندی شدهاند، مانند Django و Zulip، بیش از 99.9% خطوط یکسان درمیآیند. در کدی که هرگز از Black رد نشده، بهویژه در توضیحات پایان خط، تفاوت بیشتری دارد و مستنداتش تفاوتهای عمدی را فهرست میکند. طول خط پیشفرض آن هم 88 است و با line-length در [tool.ruff] تنظیم میشود؛ quote-style = "preserve" در [tool.ruff.format] معادل "حفظ نقلقولهای من" و skip-magic-trailing-comma = true معادل "نادیده گرفتن کامای انتهایی جادویی" است. اگر CI شما ruff format --check را اجرا میکند، فایل را با Ruff آزمایش کنید، نه با این صفحه.