Class: Rbs2ts::Converter::Members::MethodDefinition

Inherits:
Base
  • Object
show all
Defined in:
lib/rbs2ts/converter/members.rb

Instance Method Summary collapse

Methods inherited from Base

#name

Constructor Details

#initialize(member) ⇒ MethodDefinition

Returns a new instance of MethodDefinition.



47
48
49
50
# File 'lib/rbs2ts/converter/members.rb', line 47

def initialize(member)
  super
  @args_count = 0
end

Instance Method Details

#arg_name(arg) ⇒ Object



66
67
68
69
# File 'lib/rbs2ts/converter/members.rb', line 66

def arg_name(arg)
  name = arg.name.nil? ? next_default_arg_name : arg.name.to_s
  CaseTransform.camel_lower(name)
end

#args_to_tsObject



56
57
58
59
60
61
62
63
64
# File 'lib/rbs2ts/converter/members.rb', line 56

def args_to_ts
  [
    *required_positional_to_ts,
    *optional_positional_to_ts,
    *rest_positionals_to_ts,
    *trailing_positionals_to_ts,
    *keyword_args_to_ts
  ].join(", ")
end

#has_rest_after_argumentsObject



138
139
140
141
142
# File 'lib/rbs2ts/converter/members.rb', line 138

def has_rest_after_arguments
  method_type.trailing_positionals.present? || 
  method_type.required_keywords.present? ||
  method_type.optional_keywords.present?
end

#keyword_args_to_tsObject



104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
# File 'lib/rbs2ts/converter/members.rb', line 104

def keyword_args_to_ts
  required_keywords_ts = method_type.required_keywords.map {|key, value|
    "#{CaseTransform.camel_lower(key.to_s)}: #{Converter::Types::Resolver.to_ts(value.type)}"
  }
  optional_keywords_ts = method_type.optional_keywords.map {|key, value|
    "#{CaseTransform.camel_lower(key.to_s)}?: #{Converter::Types::Resolver.to_ts(value.type)}"
  }
  rest_keywords_ts = method_type.rest_keywords.nil? ? [] : ["[key: string]: unknown;"]

  ts_array = [
    *required_keywords_ts,
    *optional_keywords_ts,
    *rest_keywords_ts
  ]

  return [] if ts_array.empty?

  ts = ts_array.join(', ')

  ["#{next_default_arg_name}#{optional_ts_code}: { #{ts} }"]
end

#method_typeObject



126
127
128
# File 'lib/rbs2ts/converter/members.rb', line 126

def method_type
  member.types.first.type
end

#next_default_arg_nameObject



71
72
73
74
# File 'lib/rbs2ts/converter/members.rb', line 71

def next_default_arg_name
  @args_count = @args_count + 1
  "arg#{@args_count.to_s}"
end

#optional_positional_to_tsObject



82
83
84
85
86
# File 'lib/rbs2ts/converter/members.rb', line 82

def optional_positional_to_ts
  method_type.optional_positionals.map {|arg|
    "#{arg_name(arg)}?: #{Converter::Types::Resolver.to_ts(arg.type)}"
  }
end

#optional_ts_codeObject



134
135
136
# File 'lib/rbs2ts/converter/members.rb', line 134

def optional_ts_code
  method_type.optional_positionals.present? ? '?' : ''
end

#required_positional_to_tsObject



76
77
78
79
80
# File 'lib/rbs2ts/converter/members.rb', line 76

def required_positional_to_ts
  method_type.required_positionals.map {|arg|
    "#{arg_name(arg)}: #{Converter::Types::Resolver.to_ts(arg.type)}"
  }
end

#rest_positionals_to_tsObject



88
89
90
91
92
93
94
95
96
# File 'lib/rbs2ts/converter/members.rb', line 88

def rest_positionals_to_ts
  arg = method_type.rest_positionals
  
  return [] if arg.nil?

  has_rest_after_arguments ?
    ["#{arg_name(arg)}#{optional_ts_code}: #{Converter::Types::Resolver.to_ts(arg.type)}[]"] :
    ["...#{arg_name(arg)}#{optional_ts_code}: #{Converter::Types::Resolver.to_ts(arg.type)}[]"]
end

#return_type_to_tsObject



130
131
132
# File 'lib/rbs2ts/converter/members.rb', line 130

def return_type_to_ts
  Converter::Types::Resolver.to_ts(method_type.return_type)
end

#to_tsObject



52
53
54
# File 'lib/rbs2ts/converter/members.rb', line 52

def to_ts
  "#{name}(#{args_to_ts}): #{return_type_to_ts};"
end

#trailing_positionals_to_tsObject



98
99
100
101
102
# File 'lib/rbs2ts/converter/members.rb', line 98

def trailing_positionals_to_ts
  method_type.trailing_positionals.map {|arg|
    "#{arg_name(arg)}#{optional_ts_code}: #{Converter::Types::Resolver.to_ts(arg.type)}"
  }
end