منصوبے کے بارے میں

gdstyle GDScript کے لیے ایک linter اور formatter ہے، جو Godot 4.x گیم انجن کی اسکرپٹنگ زبان ہے۔ یہ Rust میں لکھا گیا ہے اور ایک واحد static binary کے طور پر تقسیم کیا جاتا ہے، اس لیے اسے چلانے کے لیے Python، Rust toolchain، یا Godot انسٹالیشن کی ضرورت نہیں۔ یہ کیا کرتا ہے یہ ٹول GDScript فائلوں میں style violations، naming inconsistencies، اور عام code-quality مسائل کی جانچ کرتا ہے، اور فائلوں کو سرکاری Godot style guide کے مطابق دوبارہ فارمیٹ کر سکتا ہے۔ بہت سے conventions GDQuest کے GDScript style guide سے لیے گئے ہیں۔ اس میں 56 rules پانچ categories میں تقسیم ہیں: - Syntax (1 rule): lexer errors جیسے unterminated strings یا invalid numbers رپورٹ کرتا ہے۔ - Naming (11 rules): classes اور enums کے لیے PascalCase، functions، variables، signals، اور file names کے لیے snake_case، constants اور enum members کے لیے SCREAMING_SNAKE_CASE، past-tense signal names، اور PascalCase node paths نافذ کرتا ہے۔ - Formatting (20 rules): line length، trailing whitespace اور newlines، tabs vs spaces، boolean operators، quote style، comment spacing، parentheses، number literals، statement-per-line، blank lines، trailing commas، operator/colon/comma/brace spacing، call parentheses، float zeros، large-number underscores، اور enum layout شامل ہیں۔ - Ordering (1 rule): canonical Godot class-member order نافذ کرتا ہے، annotations اور class_name سے signals، enums، constants، variables، virtual methods، methods، اور inner classes تک۔ - Quality (23 rules): function، file، parameter، nesting، return، branch، local-variable، class-variable، public-method، اور inner-class counts کی حدود، اس کے علاوہ unnecessary pass، self-comparison، self-assignment، duplicate dictionary keys، duplicated load calls، unreachable code، await in loops، allocation in loops، node lookups in _process، اور مزید کی جانچ۔ زیادہ تر rules بطور default warning severity پر فعال ہیں۔ چند advisory rules (type hints، empty functions، debug prints) بطور default بند ہیں اور واضح طور پر فعال کرنے کی ضرورت ہے۔ Formatter اور auto-fix fmt subcommand فائلوں کو原地 میں reformats کرتا ہے اور idempotent ہے۔ یہ indentation، whitespace، blank lines، boolean operators، quotes، comment spacing، punctuation spacing، numeric literals، اور trailing newlines کو normalize کرتا ہے، single-line enums کو expand کرتا ہے، class members کو reorder کرتا ہے، اور long lines کو commas پر delimiters کے اندر، conditions میں and/or پر، اور comments میں word boundaries پر wrap کرتا ہے۔ breakable pattern کے بغیر lines کو چھوڑ دیا جاتا ہے۔ check subcommand محفوظ fixes کے لیے --fix اور renames اور reordering کے لیے --unsafe-fix کو support کرتا ہے۔ Unsafe renames دوسری .gd فائلوں میں اور .tscn/.tres scene wiring میں propagate کیے جاتے ہیں؛ جو کچھ محفوظ طریقے سے rewrite نہیں کیا جا سکتا وہ warning کے طور پر رپورٹ ہوتا ہے۔ Fixes بغیر backup یا confirmation کے disk پر لکھے جاتے ہیں، اس لیے README پہلے commit یا stash کرنے کی سفارش کرتا ہے۔ Configuration اور suppression Configuration gdstyle.toml یا .gdstyle.toml میں ہوتی ہے، جو directory tree میں اوپر جا کر دریافت ہوتی ہے، یا --config کے ساتھ پاس کی جاتی ہے۔ Settings میں line length، tab usage، مختلف size limits، exclude/include patterns، اور per-rule severity overrides (off، warn، error) شامل ہیں۔ Config میں unknown rule names کو stderr پر رپورٹ کیا جاتا ہے۔ Diagnostics کو per line یا per file # gdstyle:ignore اور # gdstyle:ignore-file comments کے ساتھ silence کیا جا سکتا ہے، اختیاری طور پر مخصوص rule IDs تک محدود کیا جا سکتا ہے۔ member-order rule کو ignore کرنے سے ایک member pin بھی ہو جاتا ہے تاکہ formatter اسے move نہ کرے۔ Integration Output text یا JSON ہو سکتا ہے، اور exit codes clean runs، lint errors یا exceeded warning caps، اور configuration errors میں فرق کرتے ہیں۔ README میں GitHub Actions usage، pre-commit hooks (gdstyle اور gdstyle-fmt)، اور ایک minimal raw git hook documented ہیں۔ ایک optional Godot editor plugin bottom panel فراہم کرتا ہے جس میں clickable diagnostics، single-click fixes، اور save پر lint/format شامل ہیں، GDExtension کا استعمال جب available ہو اور CLI binary پر fallback کرتے ہوئے۔ Crate ایک Rust library کے طور پر بھی usable ہے۔