
سائیکلوومیٹک پیچیدگی کی اسکل کیا ہے؟
cyclomatic-complexity ایک Claude اسکل ہے جو موجودہ کوڈ میں ضرورت سے زیادہ برانچنگ کم کرنے کے لیے بنائی گئی ہے۔ یہ خاص طور پر AI سے تیار کردہ ایسے کوڈ کے لیے مفید ہے جو درست کام کرتا ہو، لیکن اس میں گہرائی سے نیسٹ کیے گئے شرائطی بلاکس، فیصلہ سازی کے بہت سے راستے، یا ایسے فنکشنز جمع ہو گئے ہوں جنہیں انسانوں کے لیے برقرار رکھنا مشکل ہو۔
یہ اسکل Claude کو ایک منظم عمل کے ذریعے رہنمائی دیتی ہے: ہر فنکشن کی پیچیدگی ناپنا، سب سے زیادہ پیچیدہ حصوں کی شناخت کرنا، ان حصوں کو ریفیکٹر کرنا، رویے کی تصدیق کرنا، اور تبدیلی سے پہلے اور بعد کی پیچیدگی کی قدروں کے ساتھ نتائج کا خلاصہ پیش کرنا۔
کمپریسڈ ایکسپریشنز یا چالاک ون لائنرز کے ذریعے اسکور بہتر بنانے کے بجائے، یہ اسکل فیصلہ سازی کی منطق کو واضح اور بامعنی نام والے فنکشنز میں منتقل کرتی ہے۔ اس کا مقصد پیچیدگی کی پیمائش کم کرنے کے ساتھ ساتھ کوڈ کو برقرار رکھنے کے قابل بنانا ہے۔
اہم خصوصیات
- ہر فنکشن کی پیمائش: پیچیدگی Radon، ESLint، gocyclo، Lizard، یا دستی گنتی کے ذریعے ناپی جا سکتی ہے۔
- پروجیکٹ سے باخبر حدیں: یہ اسکل پروجیکٹ کے لنٹر میں پہلے سے تشکیل شدہ پیچیدگی کی حدود کا احترام کرتی ہے۔
- پیچیدہ حصوں کی ترجیح: یہ کوڈ میں بلاوجہ تبدیلی کرنے کے بجائے سب سے پیچیدہ فنکشنز کو پہلے ریفیکٹر کرتی ہے۔
- آزمودہ ریفیکٹرنگ پیٹرنز: یہ اسکل گارڈ کلازز، الگ کیے گئے فنکشنز، لک اَپ ٹیبلز، اور بامعنی نام والے پریڈی کیٹس استعمال کرتی ہے۔
- میٹرک میں جعل سازی نہیں: پیچیدگی کو گنجان نحو میں چھپانے کے بجائے قابلِ فہم یونٹس میں منظم کیا جاتا ہے۔
- واضح رپورٹنگ: ہر ریفیکٹرنگ کا اختتام تبدیلی سے پہلے اور بعد کی پیچیدگی کی رپورٹ پر ہوتا ہے۔
انسٹالیشن
Claude Code میں انسٹال کریں
پروجیکٹ کی پلگ اِن مارکیٹ پلیس شامل کریں، پھر اسکل انسٹال کریں:
/plugin marketplace add saurabhkumar8112/cyclomatic-complexity-skill
/plugin install cyclomatic-complexity@cyclomatic-complexity-skillانسٹالیشن کے بعد Claude Code متعلقہ ریفیکٹرنگ، صفائی، اور کوڈ ریویو کی درخواستوں کے لیے اسکل فعال کر سکتا ہے۔
Claude.ai میں انسٹال کریں
- ریپوزٹری کا Releases سیکشن کھولیں اور
.skillفائل ڈاؤن لوڈ کریں۔ متبادل طور پر،skills/cyclomatic-complexityفولڈر کا ZIP آرکائیو بنائیں۔ - Claude.ai کھولیں اور Settings، پھر Capabilities، اور پھر Skills پر جائیں۔
- ڈاؤن لوڈ کی گئی اسکل فائل یا ZIP آرکائیو اپ لوڈ کریں۔
Claude API کے ساتھ انسٹال کریں
API پر مبنی ورک فلو کے لیے اسکل کو Claude Skills API کے ذریعے اپ لوڈ کریں۔ موجودہ اپ لوڈ اور کنفیگریشن کے طریقۂ کار کے لیے API گائیڈ پر عمل کریں۔
بنیادی استعمال
جب آپ کی درخواست ریفیکٹرنگ، صفائی، یا کوڈ ریویو سے متعلق ہو تو یہ اسکل خودکار طور پر فعال ہو جاتی ہے۔ مزید کنٹرول کے لیے اسکل کا نام واضح طور پر لکھیں اور وہ فائل بتائیں جس کا Claude کو جائزہ لینا ہے۔
parser.py کو ریفیکٹر کرنے کے لیے cyclomatic complexity اسکل استعمال کریں
یہ براہِ راست درخواست مطلوبہ ورک فلو اور ہدف فائل، دونوں واضح کر دیتی ہے۔ اس کے بعد Claude پیچیدگی ناپ سکتا ہے، سب سے زیادہ مسئلہ پیدا کرنے والے فنکشنز تلاش کر سکتا ہے، اور مناسب ریفیکٹرنگ پیٹرنز لاگو کر سکتا ہے۔
مرکوز کوڈ ریویو کی درخواست کریں
آپ کام کو پیچیدگی پر مرکوز ریویو کے طور پر بھی پیش کر سکتے ہیں:
cyclomatic complexity اسکل کے ساتھ parser.py کا ریویو کریں۔ ہر فنکشن کی پیچیدگی ناپیں اور سب سے پیچیدہ حصوں کو پہلے ریفیکٹر کریں۔اگر آپ کے پروجیکٹ میں پہلے سے لنٹر کی کوئی حد مقرر ہے تو اس کنفیگریشن کو ریپوزٹری میں موجود رکھیں تاکہ اسکل پروجیکٹ کے موجودہ معیار کا احترام کر سکے۔
ریفیکٹرنگ کے عمل کو سمجھنا
- ہر فنکشن کی پیمائش: یہ اسکل مناسب معاون اینالائزر، جیسے Radon، ESLint، gocyclo، یا Lizard، استعمال کرتی ہے۔ یہ دستی گنتی بھی کر سکتی ہے۔
- پروجیکٹ کی حدیں چیک کرنا: جہاں موجودہ لنٹر کی حدود تشکیل شدہ ہوں، وہاں انہیں ترجیح دی جاتی ہے۔
- پیچیدہ حصوں کی درجہ بندی: سب سے زیادہ پیچیدگی والے فنکشنز پر پہلے کام کیا جاتا ہے۔
- قابلِ مطالعہ تبدیلیاں لاگو کرنا: Claude ضرورت کے مطابق گارڈ کلازز شامل کرتا ہے، فنکشنز الگ کرتا ہے، لک اَپ ٹیبلز بناتا ہے، یا پیچیدہ پریڈی کیٹس کو نام دیتا ہے۔
- رویے کی تصدیق: ریفیکٹرنگ سے موجودہ رویہ برقرار رہنا چاہیے، اور دستیاب ٹیسٹ سوٹ کو تصدیق کے لیے استعمال کیا جاتا ہے۔
- نتائج کی رپورٹ: حتمی جواب تبدیلیوں سے پہلے اور بعد کی پیچیدگی دکھاتا ہے۔
آؤٹ پٹ پڑھنا
مکمل شدہ ریفیکٹرنگ میں درج ذیل جیسی رپورٹ شامل ہوتی ہے:
## Complexity report
| Function | Before | After |
|----------|--------|-------|
| parseOrder | 14 | 4 |
Extracted: validateHeader, resolveDiscount
Behavior verified: existing test suite passesاس مثال میں parseOrder کی پیچیدگی 14 سے کم ہو کر 4 رہ جاتی ہے۔ رپورٹ الگ کیے گئے فنکشنز، validateHeader اور resolveDiscount، کے نام بھی بتاتی ہے اور ریکارڈ کرتی ہے کہ موجودہ ٹیسٹس کامیاب رہے۔
الگ کیے گئے فنکشنز کی فہرست اہم ہے، کیونکہ صرف کم نمبر اس بات کا ثبوت نہیں کہ کوڈ کو برقرار رکھنا آسان ہو گیا ہے۔ واضح نام دکھاتے ہیں کہ ذمہ داریاں کہاں منتقل ہوئی ہیں اور ریویو کرنے والوں کو نئی ساخت سمجھنے میں مدد دیتے ہیں۔
اسکل میں استعمال ہونے والی ریفیکٹرنگ تکنیکیں
گارڈ کلازز
گارڈ کلازز نامعتبر یا غیر معمولی حالات کو ابتدا ہی میں سنبھال لیتی ہیں۔ اس سے نیسٹنگ کم ہو سکتی ہے اور عمل درآمد کے بنیادی راستے کو سمجھنا آسان ہو جاتا ہے۔
الگ کیے گئے فنکشنز
جب ایک فنکشن کئی فیصلے یا ذمہ داریاں انجام دیتا ہو تو یہ اسکل مربوط حصوں کو بامعنی نام والے فنکشنز میں منتقل کر سکتی ہے۔ اس طرح پیچیدگی ایسے یونٹس میں تقسیم ہو جاتی ہے جو اپنے مقصد کو واضح کرتے ہیں۔
لک اَپ ٹیبلز
وہ بار بار آنے والی شاخیں جو معلوم ان پٹس کو معلوم نتائج سے منسلک کرتی ہیں، ان کی جگہ ایک lookup table استعمال کیا جا سکتا ہے۔ یہ اسکل یہ طریقہ وہاں استعمال کرتی ہے جہاں اس سے وضاحت بہتر ہوتی ہو، نہ کہ صرف کوڈ مختصر ہوتا ہو۔
نامزد Predicates
پیچیدہ شرائط کو ایسی فنکشنز میں رکھا جا سکتا ہے جن کے نام کاروباری اصول کی وضاحت کرتے ہوں۔ اس سے فیصلہ سازی کے مقامات زیادہ قابلِ فہم ہو جاتے ہیں اور غیر واضح conditional expressions سے بچا جا سکتا ہے۔
اعلیٰ سطحی تجاویز
محدود ہدف سے آغاز کریں
بڑے codebase کے لیے ایک فائل یا معلوم مسئلے والے حصے سے آغاز کریں۔ جیسی مرکوز ہدایت refactor parser.py اسکل کو واضح حدود فراہم کرتی ہے اور نتیجے میں آنے والی رپورٹ کا جائزہ لینا آسان بناتی ہے۔
Linter کی configuration دستیاب رکھیں
اگر آپ کے project کی اپنی complexity threshold ہے تو Claude کے task انجام دیتے وقت متعلقہ configuration موجود ہونی چاہیے۔ یہ اسکل کسی غیر متعلقہ معیار کو مسلط کرنے کے بجائے project کی مقرر کردہ حدود کی پیروی کرنے کے لیے بنائی گئی ہے۔
سب سے خراب Hotspots پہلے طلب کریں
سب سے زیادہ complexity والی functions کو ترجیح دینے سے کوشش وہاں مرکوز ہوتی ہے جہاں maintainability پر سب سے زیادہ اثر پڑ سکتا ہے۔ اس سے پہلے ہی سادہ functions میں غیر ضروری تبدیلیوں سے بھی بچا جا سکتا ہے۔
صرف Scores نہیں، نام بھی دیکھیں
حتمی نمبروں کے علاوہ نکالی گئی functions اور predicates کے ناموں کا بھی جائزہ لیں۔ validateHeader اور resolveDiscount جیسے نام ذمہ داری کی وضاحت کرتے ہیں؛ مبہم helper names refactor کو کم مفید بنا دیں گے، چاہے ناپا گیا score کم ہی کیوں نہ ہو۔
Tests کو حفاظتی جانچ کے طور پر استعمال کریں
Complexity میں کمی سے behavior برقرار رہنا چاہیے۔ موجودہ test suite دستیاب رکھیں اور تصدیق کریں کہ حتمی رپورٹ میں یہ درج ہو کہ tests کامیاب ہوئے یا نہیں۔ بہتر complexity score درستگی کی قیمت پر حاصل نہیں ہونا چاہیے۔
Metric Gaming کی ترغیب دینے والی درخواستوں سے بچیں
ممکنہ طور پر کم ترین score کے بجائے قابلِ فہم اور maintainable تبدیلیوں کا مطالبہ کریں۔ یہ اسکل دانستہ طور پر clever one-liners میں فیصلے چھپانے سے گریز کرتی ہے، اس لیے prompts میں وضاحت اور طویل مدتی maintainability کو تقویت دینی چاہیے۔
نتیجہ
cyclomatic-complexity skill Claude کو branch-heavy code بہتر بنانے کے لیے ایک قابلِ تکرار workflow فراہم کرتی ہے۔ یہ complexity ناپتی ہے، project thresholds کی پیروی کرتی ہے، بدترین functions کو پہلے حل کرتی ہے، قابلِ فہم refactoring patterns لاگو کرتی ہے، behavior کی تصدیق کرتی ہے، اور آخر میں تبدیلی سے پہلے اور بعد کی ٹھوس رپورٹ پیش کرتی ہے۔ یہ project Apache 2.0 license کے تحت تقسیم کیا جاتا ہے۔
