यह टूल क्या करता है
Python फ़ॉर्मैटर Python कोड को व्यापक रूप से इस्तेमाल होने वाली Black स्टाइल में फिर से लिखता है: एक जैसा इंडेंटेशन, ऑपरेटर के आसपास स्पेस, डबल कोट्स, top-level डेफ़िनिशन के बीच दो खाली लाइनें और लंबी लाइनें सही जगहों पर तोड़ी गई।
अंदर से यह Ruff का फ़ॉर्मैटर चलाता है, Rust में लिखा तेज़ Python linter और फ़ॉर्मैटर, जो WebAssembly में कंपाइल किया गया है। Ruff का आउटपुट लगभग लाइन-दर-लाइन Black से मेल खाता है, इसलिए यहाँ फ़ॉर्मैट किया गया कोड आपके प्रोजेक्ट का pre-commit hook दोबारा फ़ॉर्मैट नहीं करेगा।
इसे कैसे इस्तेमाल करें
- Python कोड पेस्ट करें, या
.pyफ़ाइल खोलें। - टाइप करते ही फ़ॉर्मैट किया हुआ कोड दाईं ओर दिखता है।
- अगर आपका प्रोजेक्ट अलग स्टाइल इस्तेमाल करता है तो विकल्प बदलें:
- इंडेंट: 4 स्पेस PEP 8 और डिफ़ॉल्ट है; 2 स्पेस और टैब उपलब्ध हैं।
- लाइन की चौड़ाई: 88 Black का डिफ़ॉल्ट है, 79 PEP 8 की सीमा है, और 100 या 120 चौड़ी स्क्रीन के लिए ठीक हैं।
- कोट्स: डबल, सिंगल, या हर स्ट्रिंग के मौजूदा कोट्स जैसे हैं वैसे रखें।
- ट्रेलिंग कॉमा का ध्यान रखें: कॉमा पर ख़त्म होने वाले collections को खुला रखें।
- नतीजा कॉपी या डाउनलोड करें।
जब कोड पार्स नहीं हो पाता, तो एरर मैसेज दिखाता है कि parser कहाँ रुका, जैसे लाइन 4 पर Expected `,`, found `=` , और आप उस लाइन पर जा सकते हैं।
उदाहरण
उदाहरण लापरवाही से लिखा गया एक छोटा मॉड्यूल है: बिना स्पेस के एक ही लाइन में imports, कोलन से पहले स्पेस वाली एक dataclass, दो स्पेस से इंडेंट किया गया मेथड और एक लाइन का if स्टेटमेंट। फ़ॉर्मैट करने के बाद हर ब्लॉक चार-स्पेस इंडेंटेशन इस्तेमाल करता है, if की बॉडी अपनी लाइन पर चली जाती है, ऑपरेटर के आसपास स्पेस आ जाते हैं, सिंगल कोट्स डबल कोट्स बन जाते हैं और क्लास व फ़ंक्शन के बीच खाली लाइनें जुड़ जाती हैं। ट्रेलिंग कॉमा पर ख़त्म होने वाली लिस्ट हर लाइन पर एक dictionary के साथ खुल जाती है।
फ़ॉर्मैटर क्या नहीं करता
फ़ॉर्मैटिंग सिर्फ़ लेआउट बदलती है। यह imports को सॉर्ट नहीं करती, बिना इस्तेमाल हुए वेरिएबल नहीं हटाती और किसी का नाम नहीं बदलती; ये linter के काम हैं (ruff check --fix इन्हें संभालता है)। कमेंट्स और docstrings बने रहते हैं, और जिस कोड को फ़ॉर्मैटर पार्स नहीं कर पाता उसे अंदाज़े से बदलने के बजाय वह बदलने से मना कर देता है।
सुझाव
- अपने प्रोजेक्ट की
pyproject.tomlवाली ही लाइन की चौड़ाई इस्तेमाल करें ताकि नतीजा आपके CI से मेल खाए। - किसी सवाल या रिव्यू में पोस्ट करने से पहले snippet को फ़ॉर्मैट करने से उसे पढ़ना बहुत आसान हो जाता है।
- अगर कोड किसी notebook या चैट से आया है और उसमें टैब और स्पेस मिले-जुले हैं, तो फ़ॉर्मैटर उसे एक ही बार में ठीक कर देता है।
अक्सर पूछे जाने वाले सवाल
› क्या आउटपुट Black जैसा ही है?
Ruff का फ़ॉर्मैटर Black के drop-in replacement के रूप में बनाया गया है और बड़े असली प्रोजेक्ट्स में 99.9% से ज़्यादा लाइनों पर उसके आउटपुट से मेल खाता है। यहाँ की डिफ़ॉल्ट सेटिंग्स (4-स्पेस इंडेंट, 88 कॉलम, डबल कोट्स) Black की डिफ़ॉल्ट सेटिंग्स हैं।
› "magic trailing comma" क्या है?
अगर कोई लिस्ट, कॉल या डेफ़िनिशन ट्रेलिंग कॉमा पर ख़त्म होती है, तो Black और Ruff उसे हर लाइन पर एक आइटम के साथ खुला रखते हैं, भले ही वह एक लाइन में आ जाए। जब भी ऐसे collections फ़िट हों उन्हें समेटने के लिए स्विच बंद करें।
› कौन-से Python वर्ज़न सपोर्ट होते हैं?
parser आधुनिक Python 3 सिंटैक्स समझता है, जिसमें match स्टेटमेंट, type parameter लिस्ट और nested कोट्स वाली f-strings शामिल हैं। `print "x"` जैसा Python 2 कोड सिंटैक्स एरर है।
› क्या मेरा कोड अपलोड होता है?
नहीं। Ruff WebAssembly मॉड्यूल एक बार डाउनलोड होता है और फ़ॉर्मैटिंग आपके ब्राउज़र में चलती है।