Sha256: 46972e5daca3f2cbce2d3212281e1a51ee36386587b1e7842d84b2147d60d518

Contents?: true

Size: 1.48 KB

Versions: 7

Compression:

Stored size: 1.48 KB

Contents

# typed: strict
require 'parlour'
class SorbetRails::HelperRbiFormatter
  extend T::Sig
  # @param [Array<Module>] helpers
  # @return [void]
  sig { params(helpers: T::Array[Module]).void }
  def initialize(helpers)
    @parlour = T.let(Parlour::RbiGenerator.new, Parlour::RbiGenerator)
    @helpers = T.let(helpers, T::Array[Module])
  end

  # Generates RBI file's contents.
  # @return [String]
  sig {returns(String)}
  def generate_rbi
    puts "-- Generate sigs for helpers --"

    @parlour.root.add_comments([
      'This is an autogenerated file for Rails helpers.',
      'Please rerun rake rails_rbi:helpers to regenerate.'
    ])

    @helpers.each do |helper|
      @parlour.root.create_module(helper.to_s) do |mod|
        mod.create_include('Kernel')
        mod.create_include('ActionView::Helpers')
        ::SorbetRails.config.extra_helper_includes.each do |extra_helper|
          mod.create_include(extra_helper) unless extra_helper == helper.to_s
        end
      end
    end

    if ActionController::Helpers.method_defined?(:helpers)
      # Adds the `helpers` method that provides access to all methods within the
      # application's helpers.
      # https://api.rubyonrails.org/classes/ActionController/Helpers/ClassMethods.html#method-i-helpers
      @parlour.root.create_module('ActionController::Helpers') do |mod|
        mod.create_method(
          'helpers',
          return_type: "T.all(#{@helpers.join(', ')})"
        )
      end
    end

    return @parlour.rbi
  end
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
sorbet-rails-0.6.0 lib/sorbet-rails/helper_rbi_formatter.rb
sorbet-rails-0.5.9.1 lib/sorbet-rails/helper_rbi_formatter.rb
sorbet-rails-0.5.9 lib/sorbet-rails/helper_rbi_formatter.rb
sorbet-rails-0.5.8.1 lib/sorbet-rails/helper_rbi_formatter.rb
sorbet-rails-0.5.8 lib/sorbet-rails/helper_rbi_formatter.rb
sorbet-rails-0.5.7 lib/sorbet-rails/helper_rbi_formatter.rb
sorbet-rails-0.5.6 lib/sorbet-rails/helper_rbi_formatter.rb