Sha256: ed150003a5705eeb71e5992a155ebe8b0433356a556996a9c1db025af846b033

Contents?: true

Size: 1.49 KB

Versions: 17

Compression:

Stored size: 1.49 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_comment([
      'This is an autogenerated file for Rails helpers.',
      'Please rerun bundle exec 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

17 entries across 17 versions & 1 rubygems

Version Path
sorbet-rails-0.7.34 lib/sorbet-rails/helper_rbi_formatter.rb
sorbet-rails-0.7.33 lib/sorbet-rails/helper_rbi_formatter.rb
sorbet-rails-0.7.32 lib/sorbet-rails/helper_rbi_formatter.rb
sorbet-rails-0.7.31 lib/sorbet-rails/helper_rbi_formatter.rb
sorbet-rails-0.7.27 lib/sorbet-rails/helper_rbi_formatter.rb
sorbet-rails-0.7.26 lib/sorbet-rails/helper_rbi_formatter.rb
sorbet-rails-0.7.25 lib/sorbet-rails/helper_rbi_formatter.rb
sorbet-rails-0.7.24 lib/sorbet-rails/helper_rbi_formatter.rb
sorbet-rails-0.7.23 lib/sorbet-rails/helper_rbi_formatter.rb
sorbet-rails-0.7.22 lib/sorbet-rails/helper_rbi_formatter.rb
sorbet-rails-0.7.20 lib/sorbet-rails/helper_rbi_formatter.rb
sorbet-rails-0.7.19 lib/sorbet-rails/helper_rbi_formatter.rb
sorbet-rails-0.7.18 lib/sorbet-rails/helper_rbi_formatter.rb
sorbet-rails-0.7.5 lib/sorbet-rails/helper_rbi_formatter.rb
sorbet-rails-0.7.4 lib/sorbet-rails/helper_rbi_formatter.rb
sorbet-rails-0.7.3 lib/sorbet-rails/helper_rbi_formatter.rb
sorbet-rails-0.7.2 lib/sorbet-rails/helper_rbi_formatter.rb