Module: Tapioca::RBIHelper

Constant Summary

Constants included from SorbetHelper

SorbetHelper::FEATURE_REQUIREMENTS, SorbetHelper::SORBET_BIN, SorbetHelper::SORBET_EXE_PATH_ENV_VAR, SorbetHelper::SORBET_GEM_SPEC, SorbetHelper::SORBET_PAYLOAD_URL, SorbetHelper::SPOOM_CONTEXT

Class Method Summary collapse

Instance Method Summary collapse

Methods included from SorbetHelper

sorbet, sorbet_path, sorbet_supports?

Class Method Details

.serialize_type_variable(type, variance, fixed, upper, lower) ⇒ Object

: (String type, Symbol variance, String? fixed, String? upper, String? lower) -> String



15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# File 'lib/tapioca/helpers/rbi_helper.rb', line 15

def serialize_type_variable(type, variance, fixed, upper, lower)
  variance = nil if variance == :invariant

  block = []
  block << "fixed: #{fixed}" if fixed
  block << "lower: #{lower}" if lower
  block << "upper: #{upper}" if upper

  parameters = []
  parameters << ":#{variance}" if variance

  serialized = type.dup
  serialized << "(#{parameters.join(", ")})" unless parameters.empty?
  serialized << " { { #{block.join(", ")} } }" unless block.empty?
  serialized
end

Instance Method Details

#as_nilable_type(type) ⇒ Object

: (String type) -> String



83
84
85
86
87
88
89
# File 'lib/tapioca/helpers/rbi_helper.rb', line 83

def as_nilable_type(type)
  if type.start_with?("T.nilable(", "::T.nilable(") || type == "T.untyped" || type == "::T.untyped"
    type
  else
    "T.nilable(#{type})"
  end
end

#as_non_nilable_type(type) ⇒ Object

: (String type) -> String



92
93
94
95
96
97
98
# File 'lib/tapioca/helpers/rbi_helper.rb', line 92

def as_non_nilable_type(type)
  if type.match(/\A(?:::)?T.nilable\((.+)\)\z/)
    T.must(::Regexp.last_match(1))
  else
    type
  end
end

#create_block_param(name, type:) ⇒ Object

: (String name, type: String) -> RBI::TypedParam



64
65
66
# File 'lib/tapioca/helpers/rbi_helper.rb', line 64

def create_block_param(name, type:)
  create_typed_param(RBI::BlockParam.new(name), type)
end

#create_kw_opt_param(name, type:, default:) ⇒ Object

: (String name, type: String, default: String) -> RBI::TypedParam



54
55
56
# File 'lib/tapioca/helpers/rbi_helper.rb', line 54

def create_kw_opt_param(name, type:, default:)
  create_typed_param(RBI::KwOptParam.new(name, default), type)
end

#create_kw_param(name, type:) ⇒ Object

: (String name, type: String) -> RBI::TypedParam



49
50
51
# File 'lib/tapioca/helpers/rbi_helper.rb', line 49

def create_kw_param(name, type:)
  create_typed_param(RBI::KwParam.new(name), type)
end

#create_kw_rest_param(name, type:) ⇒ Object

: (String name, type: String) -> RBI::TypedParam



59
60
61
# File 'lib/tapioca/helpers/rbi_helper.rb', line 59

def create_kw_rest_param(name, type:)
  create_typed_param(RBI::KwRestParam.new(name), type)
end

#create_opt_param(name, type:, default:) ⇒ Object

: (String name, type: String, default: String) -> RBI::TypedParam



39
40
41
# File 'lib/tapioca/helpers/rbi_helper.rb', line 39

def create_opt_param(name, type:, default:)
  create_typed_param(RBI::OptParam.new(name, default), type)
end

#create_param(name, type:) ⇒ Object

: (String name, type: String) -> RBI::TypedParam



34
35
36
# File 'lib/tapioca/helpers/rbi_helper.rb', line 34

def create_param(name, type:)
  create_typed_param(RBI::ReqParam.new(name), type)
end

#create_rest_param(name, type:) ⇒ Object

: (String name, type: String) -> RBI::TypedParam



44
45
46
# File 'lib/tapioca/helpers/rbi_helper.rb', line 44

def create_rest_param(name, type:)
  create_typed_param(RBI::RestParam.new(name), type)
end

#create_typed_param(param, type) ⇒ Object

: (RBI::Param param, String type) -> RBI::TypedParam



69
70
71
# File 'lib/tapioca/helpers/rbi_helper.rb', line 69

def create_typed_param(param, type)
  RBI::TypedParam.new(param: param, type: sanitize_signature_types(type))
end

#sanitize_signature_types(sig_string) ⇒ Object

: (String sig_string) -> String



74
75
76
77
78
79
80
# File 'lib/tapioca/helpers/rbi_helper.rb', line 74

def sanitize_signature_types(sig_string)
  sig_string
    .gsub(".returns(<VOID>)", ".void")
    .gsub("<VOID>", "void")
    .gsub("<NOT-TYPED>", "T.untyped")
    .gsub(".params()", "")
end

#valid_method_name?(name) ⇒ Boolean

: (String name) -> bool

Returns:

  • (Boolean)


101
102
103
# File 'lib/tapioca/helpers/rbi_helper.rb', line 101

def valid_method_name?(name)
  Prism.parse_success?("def self.#{name}(a); end")
end

#valid_parameter_name?(name) ⇒ Boolean

: (String name) -> bool

Returns:

  • (Boolean)


106
107
108
# File 'lib/tapioca/helpers/rbi_helper.rb', line 106

def valid_parameter_name?(name)
  Prism.parse_success?("def sentinel_method_name(#{name}:); end")
end