প্রকল্প সম্পর্কে

gdstyle হলো GDScript-এর জন্য একটি লিন্টার ও ফরম্যাটার, যা Godot 4.x গেম ইঞ্জিনে ব্যবহৃত স্ক্রিপ্টিং ভাষা। এটি Rust-এ লেখা এবং একটি একক স্ট্যাটিক বাইনারি হিসেবে বিতরণ করা হয়, তাই এটি চালাতে Python, Rust টুলচেইন বা Godot ইনস্টলেশনের প্রয়োজন হয় না। এটি কী করে এই টুলটি GDScript ফাইলগুলোতে স্টাইল লঙ্ঘন, নামকরণের অসঙ্গতি এবং সাধারণ কোড-কোয়ালিটি সমস্যা পরীক্ষা করে এবং অফিসিয়াল Godot স্টাইল গাইড অনুসরণ করতে ফাইলগুলো পুনরায় ফরম্যাট করতে পারে। অনেক কনভেনশন GDQuest-এর GDScript স্টাইল গাইড থেকে নেওয়া। এতে ৫৬টি রুল পাঁচটি ক্যাটাগরিতে বিভক্ত: - Syntax (১টি রুল): unterminated string বা অবৈধ সংখ্যার মতো lexer ত্রুটি রিপোর্ট করে। - Naming (১১টি রুল): ক্লাস ও enum-এর জন্য PascalCase, ফাংশন, ভেরিয়েবল, সিগন্যাল ও ফাইল নামের জন্য snake_case, কনস্ট্যান্ট ও enum সদস্যের জন্য SCREAMING_SNAKE_CASE, past-tense সিগন্যাল নাম এবং PascalCase নোড পাথ বাধ্যতামূলক করে। - Formatting (২০টি রুল): লাইন দৈর্ঘ্য, trailing whitespace ও newline, tab বনাম space, boolean অপারেটর, quote স্টাইল, কমেন্ট স্পেসিং, বন্ধনী, সংখ্যা লিটারাল, প্রতি লাইনে একটি statement, খালি লাইন, trailing comma, operator/colon/comma/brace স্পেসিং, call parentheses, float zero, বড় সংখ্যায় underscore এবং enum লেআউট কভার করে। - Ordering (১টি রুল): ক্যানোনিকাল Godot ক্লাস-সদস্য ক্রম বাধ্যতামূলক করে, annotation ও class_name থেকে শুরু করে signal, enum, constant, variable, virtual method, method এবং inner class পর্যন্ত। - Quality (২৩টি রুল): ফাংশন, ফাইল, প্যারামিটার, nesting, return, branch, local-variable, class-variable, public-method ও inner-class সংখ্যার সীমা নির্ধারণ করে, সাথে অপ্রয়োজনীয় pass, self-comparison, self-assignment, ডুপ্লিকেট dictionary key, ডুপ্লিকেট load call, unreachable code, loop-এ await, loop-এ allocation, _process-এ node lookup ইত্যাদি পরীক্ষা করে। বেশিরভাগ রুল ডিফল্টভাবে warning severity-তে সক্রিয় থাকে। কয়েকটি পরামর্শমূলক রুল (type hint, খালি ফাংশন, debug print) ডিফল্টভাবে বন্ধ থাকে এবং স্পষ্টভাবে সক্রিয় করতে হয়। ফরম্যাটার ও অটো-ফিক্স fmt সাবকমান্ড ফাইলগুলোকে জায়গাতেই পুনরায় ফরম্যাট করে এবং এটি idempotent। এটি indentation, whitespace, খালি লাইন, boolean অপারেটর, quote, কমেন্ট স্পেসিং, punctuation স্পেসিং, সংখ্যা লিটারাল ও trailing newline স্বাভাবিক করে, এক-লাইনের enum প্রসারিত করে, ক্লাস সদস্য পুনর্বিন্যাস করে এবং delimiter-এর ভেতরে কমায়, শর্তে and/or-এ এবং কমেন্টে শব্দের সীমায় লম্বা লাইন মোড়ায়। বিরতি দেওয়ার মতো প্যাটার্ন নেই এমন লাইন অপরিবর্তিত রাখা হয়। check সাবকমান্ড নিরাপদ ফিক্সের জন্য --fix এবং rename ও পুনর্বিন্যাসের জন্য --unsafe-fix সমর্থন করে। অনিরাপদ rename অন্যান্য .gd ফাইলে এবং .tscn/.tres scene wiring-এ ছড়িয়ে দেওয়া হয়; যা নিরাপদে পুনর্লিখন করা যায় না তা warning হিসেবে রিপোর্ট করা হয়। ফিক্স ব্যাকআপ বা নিশ্চিতকরণ ছাড়াই ডিস্কে লেখা হয়, তাই README-তে আগে commit বা stash করার পরামর্শ দেওয়া হয়েছে। কনফিগারেশন ও suppression কনফিগারেশন gdstyle.toml বা .gdstyle.toml-এ থাকে, যা ডিরেক্টরি ট্রি উপরে হেঁটে খুঁজে পাওয়া যায়, অথবা --config দিয়ে পাস করা হয়। সেটিংসে রয়েছে লাইন দৈর্ঘ্য, tab ব্যবহার, বিভিন্ন আকারের সীমা, exclude/include প্যাটার্ন এবং প্রতি-রুল severity override (off, warn, error)। কনফিগে অজানা রুল নাম stderr-এ রিপোর্ট করা হয়। # gdstyle:ignore এবং # gdstyle:ignore-file কমেন্ট দিয়ে প্রতি লাইনে বা প্রতি ফাইলে ডায়াগনস্টিক নীরব করা যায়, ঐচ্ছিকভাবে নির্দিষ্ট রুল ID-তে সীমাবদ্ধ করা যায়। member-order রুল উপেক্ষা করলে একটি সদস্য pinned হয়ে যায় যাতে ফরম্যাটার সেটি সরাবে না। ইন্টিগ্রেশন আউটপুট text বা JSON হতে পারে, এবং exit code পরিষ্কার রান, lint ত্রুটি বা অতিক্রান্ত warning সীমা এবং কনফিগারেশন ত্রুটি আলাদা করে। README-তে GitHub Actions ব্যবহার, pre-commit hook (gdstyle ও gdstyle-fmt) এবং একটি ন্যূনতম raw git hook নথিভুক্ত করা হয়েছে। একটি ঐচ্ছিক Godot editor plugin ক্লিকযোগ্য ডায়াগনস্টিক, এক-ক্লিকে ফিক্স এবং সংরক্ষণে lint/format সহ একটি bottom panel প্রদান করে, যা উপলব্ধ হলে GDExtension ব্যবহার করে এবং অন্যথায় CLI বাইনারিতে ফিরে যায়। ক্রেটটি Rust লাইব্রেরি হিসেবেও ব্যবহারযোগ্য।