技能 generating-sorbet-inline
💎

generating-sorbet-inline

安全 ⚙️ 外部命令🌐 網路存取📁 檔案系統存取

إضافة توقيعات نوع Sorbet إلى طرق Ruby

تحتاج مشاريع Ruby إلى أمان الأنواع لرموز موثوقة. تضيف هذه المهارة توقيعات نوع Sorbet المضمنة إلى الطرق باستخدام كتل sig. تحلل ملفات مصدر Ruby، وتولد تعليقات توضيحية مناسبة للأنواع، وتتحقق من التوقيعات مع مدقق نوع Sorbet.

支援: Claude Codex Code(CC)
📊 69 充足
1

下載技能 ZIP

2

在 Claude 中上傳

前往 設定 → 功能 → 技能 → 上傳技能

3

開啟並開始使用

測試它

正在使用「generating-sorbet-inline」。 إضافة أنواع Sorbet إلى فئة User هذه

預期結果:

  • Added # typed: true sigil
  • Added extend T::Sig to User class
  • Generated sig for initialize(name: String, age: Integer).void
  • Generated sig for greet(greeting: String).returns(String)
  • Generated sig for attr_reader :name returns(String)
  • Generated sig for attr_reader :age returns(Integer)

正在使用「generating-sorbet-inline」。 كتابة كائن الخدمة هذا مع المعاملات والإرجاع

預期結果:

  • Analyzed PaymentService class
  • Generated sig for process(amount: T.any(Integer, Float), currency: String).returns(T::Boolean)
  • Generated sig for validate_customer(customer_id: Integer).void
  • Ran 'bundle exec srb tc' - all signatures valid

正在使用「generating-sorbet-inline」。 إضافة أنواع إلى هذه الوحدة مع طرق الفئة

預期結果:

  • Found module with class methods
  • Added extend T::Sig to module
  • Generated sig for self.from_json(json: String).returns(T.untyped)
  • Generated sig for self.parse(data: T::Hash[String, T.untyped]).returns(self)

安全審計

安全
v5 • 1/17/2026

This is a documentation-only skill providing instructions for generating Sorbet inline type signatures. All static findings are in the reference/ directory which contains example code from the Packwerk gem (Shopify) for learning purposes. The 'weak cryptographic algorithm' findings are for MD5 digests used in cache invalidation (non-security use). Shell backtick execution is for running 'srb tc' validation command (legitimate tooling). No credential access or exfiltration patterns exist. The skill explicitly prohibits running project Ruby code.

68
已掃描檔案
5,273
分析行數
3
發現項
5
審計總數

風險因素

⚙️ 外部命令 (168)
reference/sorbet_examples/packwerk/packwerk/application_validator.rb:119 reference/sorbet_examples/packwerk/packwerk/cli.rb:60 reference/sorbet_examples/packwerk/packwerk/commands/init_command.rb:27 reference/sorbet_examples/packwerk/packwerk/commands/update_todo_command.rb:49 reference/sorbet_examples/packwerk/packwerk/commands/update_todo_command.rb:51 reference/sorbet_examples/packwerk/packwerk/const_node_inspector.rb:20 reference/sorbet_examples/packwerk/packwerk/const_node_inspector.rb:21 reference/sorbet_examples/packwerk/packwerk/const_node_inspector.rb:21 reference/sorbet_examples/packwerk/packwerk/constant_discovery.rb:12 reference/sorbet_examples/packwerk/packwerk/constant_discovery.rb:12 reference/sorbet_examples/packwerk/packwerk/constant_discovery.rb:12 reference/sorbet_examples/packwerk/packwerk/constant_discovery.rb:13 reference/sorbet_examples/packwerk/packwerk/constant_discovery.rb:50 reference/sorbet_examples/packwerk/packwerk/extension_loader.rb:5 reference/sorbet_examples/packwerk/packwerk/extension_loader.rb:6 reference/sorbet_examples/packwerk/packwerk/file_processor.rb:59 reference/sorbet_examples/packwerk/packwerk/file_processor.rb:59 reference/sorbet_examples/packwerk/packwerk/formatters/default_offenses_formatter.rb:26 reference/sorbet_examples/packwerk/packwerk/generators/root_package.rb:31 reference/sorbet_examples/packwerk/packwerk/generators/root_package.rb:36 reference/sorbet_examples/packwerk/packwerk/node_helpers.rb:82 reference/sorbet_examples/packwerk/packwerk/node_helpers.rb:82 reference/sorbet_examples/packwerk/packwerk/node_helpers.rb:83 reference/sorbet_examples/packwerk/packwerk/node_helpers.rb:83 reference/sorbet_examples/packwerk/packwerk/offenses_formatter.rb:16 reference/sorbet_examples/packwerk/packwerk/package_todo.rb:65 reference/sorbet_examples/packwerk/packwerk/package_todo.rb:65 reference/sorbet_examples/packwerk/packwerk/package_todo.rb:66 reference/sorbet_examples/packwerk/packwerk/package_todo.rb:117 reference/syntax.md:10 reference/syntax.md:10 reference/syntax.md:13 reference/syntax.md:13 reference/syntax.md:13 reference/syntax.md:13 reference/syntax.md:14 reference/syntax.md:14 reference/syntax.md:14 reference/syntax.md:14 reference/syntax.md:14 reference/syntax.md:15 reference/syntax.md:15 reference/syntax.md:15 reference/syntax.md:15 reference/syntax.md:16 reference/syntax.md:16 reference/syntax.md:17 reference/syntax.md:17 reference/syntax.md:17 reference/syntax.md:21 reference/syntax.md:21 reference/syntax.md:21 reference/syntax.md:25 reference/syntax.md:27-31 reference/syntax.md:31-37 reference/syntax.md:37-39 reference/syntax.md:39-42 reference/syntax.md:42-43 reference/syntax.md:43-44 reference/syntax.md:44-45 reference/syntax.md:45-46 reference/syntax.md:46 reference/syntax.md:46-50 reference/syntax.md:50-54 reference/syntax.md:54-59 reference/syntax.md:59-64 reference/syntax.md:64-68 reference/syntax.md:68-73 reference/syntax.md:73-78 reference/syntax.md:78-82 reference/syntax.md:82-85 reference/syntax.md:85-89 reference/syntax.md:89-92 reference/syntax.md:92-96 reference/syntax.md:96-99 reference/syntax.md:99-104 reference/syntax.md:104-107 reference/syntax.md:107-112 reference/syntax.md:112-115 reference/syntax.md:115-124 reference/syntax.md:124-128 reference/syntax.md:128-139 reference/syntax.md:139-144 reference/syntax.md:144-149 reference/syntax.md:149-152 reference/syntax.md:152-156 reference/syntax.md:156-159 reference/syntax.md:159-163 reference/syntax.md:163-166 reference/syntax.md:166-170 reference/syntax.md:170-175 reference/syntax.md:175-180 reference/syntax.md:180-183 reference/syntax.md:183-188 reference/syntax.md:188-191 reference/syntax.md:191-196 reference/syntax.md:196-199 reference/syntax.md:199-204 reference/syntax.md:204-207 reference/syntax.md:207-211 reference/syntax.md:211-216 reference/syntax.md:216-226 reference/syntax.md:226-229 reference/syntax.md:229-231 reference/syntax.md:231-234 reference/syntax.md:234-236 reference/syntax.md:236-239 reference/syntax.md:239-243 reference/syntax.md:243-248 reference/syntax.md:248-256 reference/syntax.md:256-259 reference/syntax.md:259-269 reference/syntax.md:269-274 reference/syntax.md:274-277 reference/syntax.md:277-280 reference/syntax.md:280-283 reference/syntax.md:283-286 reference/syntax.md:286-289 reference/syntax.md:289-293 reference/syntax.md:293-303 reference/syntax.md:303-307 reference/syntax.md:307-312 reference/syntax.md:312-317 reference/syntax.md:317-334 reference/syntax.md:334-338 reference/syntax.md:338-339 reference/syntax.md:339-340 reference/syntax.md:340-341 reference/syntax.md:341-342 SKILL.md:8 SKILL.md:16-20 SKILL.md:20-23 SKILL.md:23-28 SKILL.md:28-29 SKILL.md:29-30 SKILL.md:30-32 SKILL.md:32-33 SKILL.md:33-34 SKILL.md:34 SKILL.md:34-36 SKILL.md:36-37 SKILL.md:37-46 SKILL.md:46 SKILL.md:46 SKILL.md:46-47 SKILL.md:47-54 SKILL.md:54-56 SKILL.md:56-58 SKILL.md:58 SKILL.md:58 SKILL.md:58 SKILL.md:58 SKILL.md:58-60 SKILL.md:60-61 SKILL.md:61-65 SKILL.md:65-67 SKILL.md:67-70 SKILL.md:70-83 SKILL.md:83-86 SKILL.md:86-109 SKILL.md:109-114 SKILL.md:114-118 SKILL.md:118-120 SKILL.md:120-127 SKILL.md:127-137 SKILL.md:137-139 SKILL.md:139-143 SKILL.md:143-145
🌐 網路存取 (30)
reference/sorbet_examples/packwerk/packwerk/cache.rb:116 reference/sorbet_examples/packwerk/packwerk/checker.rb:47 reference/sorbet_examples/packwerk/packwerk/commands/init_command.rb:28 reference/sorbet_examples/packwerk/packwerk/commands/init_command.rb:34 reference/sorbet_examples/packwerk/packwerk/commands/uses_parse_run.rb:35 reference/sorbet_examples/packwerk/packwerk/disable_sorbet.rb:33 reference/sorbet_examples/packwerk/packwerk/files_for_processing.rb:20 reference/sorbet_examples/packwerk/packwerk/output_styles/coloured.rb:6 reference/sorbet_examples/packwerk/packwerk/package_set.rb:93 reference/sorbet_examples/packwerk/packwerk/package_todo.rb:34 reference/sorbet_examples/packwerk/packwerk/package_todo.rb:37 reference/sorbet_examples/packwerk/packwerk/package_todo.rb:44 reference/sorbet_examples/packwerk/packwerk/package_todo.rb:48 reference/sorbet_examples/packwerk/packwerk/package_todo.rb:51 reference/sorbet_examples/packwerk/packwerk/package_todo.rb:108 reference/sorbet_examples/packwerk/packwerk/package_todo.rb:108 reference/sorbet_examples/packwerk/packwerk/package_todo.rb:109 reference/sorbet_examples/packwerk/packwerk/package_todo.rb:109 reference/sorbet_examples/packwerk/packwerk/package_todo.rb:122 reference/sorbet_examples/packwerk/packwerk/package_todo.rb:124 reference/sorbet_examples/packwerk/packwerk/package_todo.rb:138 reference/sorbet_examples/packwerk/packwerk/package_todo.rb:153 reference/sorbet_examples/packwerk/packwerk/package_todo.rb:154 reference/sorbet_examples/packwerk/packwerk/reference_checking/checkers/dependency_checker.rb:61 reference/sorbet_examples/packwerk/packwerk/run_context.rb:76 reference/sorbet_examples/packwerk/packwerk/validators/dependency_validator.rb:71 reference/sorbet_examples/STRUCTURE.md:5 reference/syntax.md:3 skill-report.json:6 SKILL.md:159
📁 檔案系統存取 (6)
審計者: claude 查看審計歷史 →

品質評分

38
架構
100
可維護性
85
內容
21
社群
100
安全
91
規範符合性

你能建構什麼

إضافة أنواع إلى قاعدة كود Ruby الموجودة

إضافة أمان الأنواع تدريجياً إلى طرق Ruby في التطبيقات القديمة

كتابة نماذج Rails والخدمات

إضافة توقيعات نوع إلى نماذج Rails والخدمات وفئات PORO

توثيق واجهات API العامة مع الأنواع

توليد توقيعات نوع لواجهات العامة للمجوهرات

試試這些提示

إضافة توقيعات إلى فئة واحدة
إضافة توقيعات نوع Sorbet المضمنة إلى جميع الطرق في ملف فئة Ruby هذا
كتابة ملف بالكامل
تحليل ملف Ruby هذا وإضافة كتل sig إلى جميع الطرق والسمات وطرق الفئة
معالجة الأنواع العامة
إضافة توقيعات Sorbet إلى فئة Ruby هذه مع معاملات الأنواع والأنواع العامة
التحقق باستخدام Sorbet
إضافة توقيعات Sorbet المضمنة إلى هذا الملف وتشغيل 'srb tc' للتحقق منها

最佳實務

  • ابدأ بـ # typed: true وزيادة الصرامة تدريجياً
  • استخدام أنواع محددة مثل String وInteger بدلاً من T.untyped
  • تشغيل 'srb tc' بعد إضافة التوقيعات لاكتشاف الأخطاء مبكراً
  • طلب التوضيح عندما تكون معلومات النوع غامضة

避免

  • استخدام T.untyped كاختصار defeats الغرض من الكتابة
  • تغيير مستويات typed sigil بدون فهم التأثير
  • إضافة التوقيعات بدون تشغيل التحقق
  • تشغيل رمز Ruby الخاص بالمشروع أثناء توليد التوقيعات

常見問題

ما هو Sorbet؟
Sorbet هو مدقق نوع ثابت لـ Ruby طوره Stripe. يتحقق من تعليقات الأنواع في وقت التجميع.
ما الفرق بين الأنواع المضمنة وملفات RBI؟
تستخدم الأنواع المضمنة كتل sig مباشرة في ملفات Ruby. ملفات RBI هي ملفات نوع stub منفصلة للمجوهرات الخارجية.
هل تشغل هذه المهارة رمز Ruby الخاص بي؟
لا. تحظر المهارة صراحة تشغيل رمز Ruby الخاص بالمشروع. إنه يحلل فقط بنية المصدر.
ماذا يعني sig { returns(String) }؟
يعلن أن الطريقة ترجع قيمة String. تحدد كتلة sig الأنواع للطريقة.
كيف أتعامل مع الأنواع غير المعروفة؟
اطلب التوضيح من المستخدم. استخدم T.any لاتحاد الأنواع وT.nilable للقيم الاختيارية.
ما هو typed sigil الذي يجب أن أستخدمه؟
ابدأ بـ typed: true للتبني التدريجي. ارفع إلى strict أو strong عندما تنضج قاعدة الكود الخاصة بك.