コンテンツにスキップ

rigor-activesupport-core-ext

実際のRailsコードで最もよく使われるActiveSupportのcore_ext拡張 ── Time.current3.daysArray.wrap"x".squishobj.blank?など ── 向けの、オプトインのRBSバンドルです。解析器もdiagnosticも提供しません。その唯一の仕事は、これらのメソッドのシグネチャをRigorに渡し、call.undefined-methodの偽陽性として現れなくすることです。4プロジェクトのRails調査では、各プロジェクトのdiagnosticの64〜90%が、stdlib RBSに欠けているActiveSupport拡張に由来していました ── このことが、本バンドルをRailsアプリにおける最大の偽陽性抑制器とし、Rigorがundefined-methodのノイズでRailsコードベースを埋め尽くしたときに真っ先に手を伸ばすべきものにしています。

これはrigortypeにバンドルされて配布されます。plugins:の下で有効化します。

plugins:
- rigor-activesupport-core-ext

これでセットアップは完了です ── Rigorはバンドルされたsig/を自動的に解決します(ADR-25)。パス指定もvendoringもsignature_paths:の配線も不要です。

おおよそ上位40程度のセレクタとその近隣のものを、以下にわたってカバーします。

  • Object(全クラス共通) ── #blank?#present?#presence#try#try!#acts_like?(およびNilClass / TrueClass / FalseClass)。
  • Integer / Float ── Duration乗数(#days#hours#minutes、…)とBytes乗数(#megabytes#gigabytes、…)。
  • String ── 語形変化(#underscore#camelize#classify#constantize#pluralize、…)、フィルタ(#squish#truncate)、#html_safe#starts_with? / #ends_with?、変換。
  • Time / Date / DateTime ── .current.zone#yesterday#tomorrow#beginning_of_* / #end_of_*#ago#since
  • Array ── .wrap#to_sentence#in_groups_of#second#fifth#compact_blank#exclude?
  • Hash ── #symbolize_keys / #stringify_keys(およびdeep / bang版)、#deep_merge#with_indifferent_access#except!
  • Enumerable ── #index_by#index_with#pluck#exclude?
3.days # バンドルなしの場合: call.undefined-method Integer#days
" x ".squish # バンドルなしの場合: call.undefined-method String#squish
Time.current # バンドルなしの場合: call.undefined-method Time.current

このプラグインはRBS専用です ── diagnosticを一切出さず、設定ノブもありません。plugins:の下に列挙されると、無条件にそのシグネチャを提供します。

  • 保守的な戻り値型Integer#daysは実際にはActiveSupport::Durationを返しますが、解析環境には通常Durationクラスが存在しないため、バンドルではuntypedとして型付けしています ── 目的はundefined-methodを黙らせることであり、精密な戻り値を与えることではありません。同様に#html_safeは(SafeBufferではなく)Stringとして型付けされ、#try / #try!untypedを返します。
  • プロジェクト固有のモンキーパッチはカバーされません ── 本物のActiveSupport拡張のみが対象です。自前のコアクラスパッチについてはpre_eval:メカニズム(ADR-17)を参照してください。
  • 上位40程度のセレクタであり、網羅的ではありません。 ActiveSupportは数百もの拡張を提供しています。本バンドルは実世界の分布の先頭部分をカバーします。

RBSのレイアウト、クラスごとのカバレッジ、セレクタを選定した調査については、プラグインのREADMEにあります。プラグインの書き方についてはexamples/rigor-plugin-authorスキルを参照してください。

© 2026 TypedDuck. Licensed under CC BY-SA 4.0.