Class: Chiridion::Engine::TypeMerger
- Inherits:
-
Object
- Object
- Chiridion::Engine::TypeMerger
- Defined in:
- lib/chiridion/engine/type_merger.rb
Overview
Merges RBS type signatures with YARD documentation.
RBS is treated as authoritative for types. When YARD and RBS disagree, a warning is logged but RBS types are used. This ensures documentation reflects the actual type contracts defined in sig/*.rbs.
Constant Summary collapse
- BOOLEAN_TYPES =
Known type equivalences between YARD conventions and RBS.
%w[bool TrueClass FalseClass].freeze
- GENERIC_PREFIXES =
{ "Hash" => "Hash[", "Array" => "Array[" }.freeze
Instance Method Summary collapse
-
#initialize(logger = nil) ⇒ TypeMerger
constructor
A new instance of TypeMerger.
-
#merge_params(yard_params, rbs_data, class_path, method_name) ⇒ Array<Hash>
Merge YARD params with RBS types - RBS is authoritative.
-
#merge_return(yard_return, rbs_data, class_path, method_name) ⇒ Hash?
Merge YARD return with RBS return type - RBS is authoritative.
Constructor Details
#initialize(logger = nil) ⇒ TypeMerger
Returns a new instance of TypeMerger.
15 |
# File 'lib/chiridion/engine/type_merger.rb', line 15 def initialize(logger = nil) = @logger = logger |
Instance Method Details
#merge_params(yard_params, rbs_data, class_path, method_name) ⇒ Array<Hash>
Merge YARD params with RBS types - RBS is authoritative.
24 25 26 27 28 29 |
# File 'lib/chiridion/engine/type_merger.rb', line 24 def merge_params(yard_params, rbs_data, class_path, method_name) return yard_params unless rbs_data&.dig(:params) rbs_params = rbs_data[:params] yard_params.map { |p| merge_single_param(p, rbs_params, class_path, method_name) } end |
#merge_return(yard_return, rbs_data, class_path, method_name) ⇒ Hash?
Merge YARD return with RBS return type - RBS is authoritative.
38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
# File 'lib/chiridion/engine/type_merger.rb', line 38 def merge_return(yard_return, rbs_data, class_path, method_name) return yard_return unless rbs_data&.dig(:returns) rbs_return_data = rbs_data[:returns] # Handle both old format (string) and new format ({ type:, desc: }) rbs_type = rbs_return_data.is_a?(Hash) ? rbs_return_data[:type] : rbs_return_data rbs_desc = rbs_return_data.is_a?(Hash) ? rbs_return_data[:desc] : nil if yard_return check_return_mismatch(yard_return, rbs_type, class_path, method_name) merged_desc = merge_description(yard_return[:text], rbs_desc) yard_return.merge(types: [rbs_type], text: merged_desc) else { types: [rbs_type], text: rbs_desc } end end |