Python ফরম্যাটার
Black যেভাবে করে সেভাবে Python রিফরম্যাট করুন - এবং দেখুন ঠিক কতগুলি লাইন পরিবর্তিত হয়েছে।
আপনার কোড
0টি অক্ষরফরম্যাট করা
Black যেভাবে করে সেভাবে Python রিফরম্যাট করুন - এবং দেখুন ঠিক কতগুলি লাইন পরিবর্তিত হয়েছে।
এটি 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 সামঞ্জস্যপূর্ণ: এর ডিফল্ট লাইন দৈর্ঘ্য 79-এর পরিবর্তে 88। আপনার যদি কঠোর সংখ্যাটি প্রয়োজন হয় তবে লাইন দৈর্ঘ্য নির্বাচকে 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-এর ডকুমেন্টেশন বলে Django ও Zulip-এর মতো Black-এ ফরম্যাট করা বড় প্রজেক্টে 99.9%-এর বেশি লাইন একই রকম আসে। যে কোড কখনো Black-এর মধ্য দিয়ে যায়নি, তাতে, বিশেষ করে লাইনের শেষের মন্তব্যে, পার্থক্য বেশি হয়, আর এর ডকুমেন্টেশন ইচ্ছাকৃত পার্থক্যগুলোর তালিকা দেয়। এর ডিফল্ট লাইন দৈর্ঘ্যও 88, যা [tool.ruff]-এ line-length দিয়ে ঠিক করা যায়; [tool.ruff.format]-এ quote-style = "preserve" হলো "আমার উদ্ধৃতি চিহ্নগুলি রেখে দিন"-এর সমান আর skip-magic-trailing-comma = true হলো "ম্যাজিক ট্রেইলিং কমা উপেক্ষা করুন"-এর সমান। আপনার CI যদি ruff format --check চালায়, তবে ফাইলটি এই পেজে নয়, Ruff দিয়ে পরীক্ষা করুন।