ruby_mod_kit 0.0.1 → 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e3a08a3d1865aa1abd27922326dc12e4cfc6c9a621f0c73882a64c12a80cc3d4
4
- data.tar.gz: d30dd20e654a68c233f33925f6f27938a3920675df07dea1377f31ba8fa42ab6
3
+ metadata.gz: 83923be4714ddc71e6c09823f58468b46717815164235dc5437d495c62cd6b7c
4
+ data.tar.gz: d7a12ed80c113de570b7a1a30c39a0f31d13803c140c1b3c1fe946ec26dde484
5
5
  SHA512:
6
- metadata.gz: cc67818cecc1c39a1aaf1f925a8ebd59dab9220a77e0d1e2dd19be99ea7b8b72e582e4a8d794966ab411125b229084f339f85cd427eebf33e29f88ee576eb111
7
- data.tar.gz: ed11c866fba06fe283e1957ba41c2138194cdc3d5049dfe9cefdee662519d3e222ef5ac8b9b5f491e579fef4db049c11b3b46074f5f7fe8585c7cf2c84ab94d5
6
+ metadata.gz: ffbd1485194583c50a78287cbb779437d1bfe8991e31e4eca113b3ec0af2d06682e42ab652bed96b7bd9edd6595116c94ffac3c34693b4575696a5ba89e48e39
7
+ data.tar.gz: 8d5cd3e6989aa21225e9bdaeae4ab68658670bbbb727f5a6f965e3b5e83323a1d79b5debb79861b00fc141bb57f3630a678c5caa386583cb7a4fa0d8eefaaf79
data/README.md CHANGED
@@ -20,20 +20,26 @@ If bundler is not being used to manage dependencies, install the gem by executin
20
20
  #### `transpile`
21
21
 
22
22
  You can get transpiled ruby script from .rbm file by `ruby_mod_kit transpile` command.
23
+ `transpile` command outputs script to stdout by default. `--output` can change output target.
24
+ `--output=.rb` is a special pattern that means "Output the original script file name with the extension changed to .rb".
23
25
 
24
- ```
25
- ruby_mod_kit transpile path/to/script.rbm
26
- ```
26
+ These below have the same meaning: "Output ruby script to stdout".
27
+
28
+ $ ruby_mod_kit transpile path/to/script.rbm
29
+ $ ruby_mod_kit transpile --output=- path/to/script.rbm
30
+ $ ruby_mod_kit transpile --output=/dev/stdout path/to/script.rbm
31
+
32
+ These below have the same meaning: "Output ruby script to `path/to/script.rb`".
33
+
34
+ $ ruby_mod_kit transpile path/to/script.rbm > path/to/script.rb
35
+ $ ruby_mod_kit transpile --output=path/to/script.rb path/to/script.rbm
36
+ $ ruby_mod_kit transpile --output=.rb path/to/script.rbm
27
37
 
28
38
  #### `exec`
29
39
 
30
40
  You can run transpiled ruby script by `ruby_mod_kit exec` command.
31
41
 
32
- ```
33
- ruby_mod_kit transpile path/to/script.rbm
34
- ```
35
-
36
- The command also creates/updates ruby script before running.
42
+ $ ruby_mod_kit exec path/to/script.rbm
37
43
 
38
44
  ## Feature
39
45
 
@@ -16,11 +16,20 @@ module RubyModKit
16
16
  end
17
17
 
18
18
  desc "transpile", "transpile rbm files"
19
+ method_option :output, type: :string
19
20
  # @rbs *args: String
20
21
  # @rbs return: void
21
22
  def transpile(*args)
23
+ output = case options[:output]
24
+ when nil, "-", "/dev/stdout"
25
+ $stdout
26
+ when ".rb"
27
+ nil
28
+ else
29
+ options[:output]
30
+ end
22
31
  args.each do |path|
23
- RubyModKit.transpile_file(path)
32
+ RubyModKit.transpile_file(path, output: output || RubyModKit.rb_path(path))
24
33
  end
25
34
  end
26
35
  end
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ # rbs_inline: enabled
4
+
5
+ require "ruby_mod_kit"
6
+
7
+ module RubyModKit
8
+ module CoreExt
9
+ # the extension for eval
10
+ module Eval
11
+ module_function
12
+
13
+ # @rbs expr: String
14
+ # @rbs *rest: Object
15
+ # @rbs transpile: bool
16
+ # @rbs return: Object
17
+ def eval(expr, *rest, transpile: true)
18
+ if transpile
19
+ fname = rest[1].is_a?(String) ? rest[1] : "(eval)"
20
+ expr = RubyModKit.transpile(expr, filename: fname)
21
+ end
22
+
23
+ case rest
24
+ in [] | [Binding] | [Binding, String] | [Binding, String, Integer]
25
+ super(expr, *rest)
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,66 @@
1
+ # frozen_string_literal: true
2
+
3
+ # rbs_inline: enabled
4
+
5
+ require "ruby_mod_kit"
6
+ require "ruby_mod_kit/core_ext/eval"
7
+
8
+ module RubyModKit
9
+ module CoreExt
10
+ # the extension for load/require
11
+ module Load
12
+ LOADABLE_EXTS = %w[.rb .rbm .so .o .dll].freeze #: Array[String]
13
+
14
+ module_function
15
+
16
+ # @rbs path: String
17
+ # @rbs wrap: bool
18
+ # @rbs return: void
19
+ def load(path, wrap = false) # rubocop:disable Style/OptionalBooleanParameter
20
+ return super unless path.end_with?(".rbm")
21
+
22
+ b = wrap ? binding : TOPLEVEL_BINDING
23
+ RubyModKit::CoreExt::Eval.eval(File.read(path), b, path)
24
+ end
25
+
26
+ # @rbs path: String
27
+ # @rbs return: void
28
+ def require(path)
29
+ require_path = Load.require_path(path)
30
+ return super unless require_path&.end_with?(".rbm")
31
+ return if Load.loaded_features.include?(require_path)
32
+
33
+ Load.loaded_features << require_path
34
+ load(require_path)
35
+ end
36
+
37
+ class << self
38
+ # @rbs return: Array[String]
39
+ def loaded_features
40
+ $LOADED_FEATURES
41
+ end
42
+
43
+ # @rbs return: Array[String]
44
+ def load_path
45
+ $LOAD_PATH
46
+ end
47
+
48
+ # @rbs path: String
49
+ # @rbs expanded: bool
50
+ # @rbs return: String | nil
51
+ def require_path(path, expanded: false)
52
+ if !expanded && !File.absolute_path?(path)
53
+ return load_path.each.lazy.map { require_path(File.join(_1, path), expanded: true) }.find(&:itself)
54
+ end
55
+
56
+ pathes = if path.end_with?(*LOADABLE_EXTS)
57
+ [path]
58
+ else
59
+ LOADABLE_EXTS.map { "#{path}#{_1}" }
60
+ end
61
+ pathes.find { File.exist?(_1) }
62
+ end
63
+ end
64
+ end
65
+ end
66
+ end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "ruby_mod_kit/core_ext/eval"
4
+ require "ruby_mod_kit/core_ext/load"
5
+
6
+ Object.prepend(RubyModKit::CoreExt::Eval)
7
+ Object.prepend(RubyModKit::CoreExt::Load)
@@ -4,17 +4,17 @@
4
4
 
5
5
  module RubyModKit
6
6
  class Memo
7
- # The memo for parameter type
8
- class Class < OffsetMemo
7
+ # The memo for def parent (class, module)
8
+ class DefParent < OffsetMemo
9
9
  # @rbs @ivars_memo: Hash[Symbol, Memo::Ivar]
10
10
 
11
11
  attr_reader :ivars_memo #: Hash[Symbol, Memo::Ivar]
12
12
 
13
- # @rbs class_node: Node::ClassNode
13
+ # @rbs def_parent_node: Node::DefParentNode
14
14
  # @rbs return: void
15
- def initialize(class_node)
15
+ def initialize(def_parent_node)
16
16
  @ivars_memo = {}
17
- super(class_node.offset)
17
+ super(def_parent_node.offset)
18
18
  end
19
19
 
20
20
  # @rbs name: Symbol
@@ -5,17 +5,17 @@
5
5
  module RubyModKit
6
6
  # The class of transpiler generation.
7
7
  class Memo
8
- # @rbs @classes_memo: Hash[Integer, Memo::Class]
8
+ # @rbs @def_parents_memo: Hash[Integer, Memo::DefParent]
9
9
  # @rbs @methods_memo: Hash[Integer, Memo::Method]
10
10
  # @rbs @parameters_memo: Hash[Integer, Memo::Parameter]
11
11
 
12
- attr_reader :classes_memo #: Hash[Integer, Memo::Class]
12
+ attr_reader :def_parents_memo #: Hash[Integer, Memo::DefParent]
13
13
  attr_reader :methods_memo #: Hash[Integer, Memo::Method]
14
14
  attr_reader :parameters_memo #: Hash[Integer, Memo::Parameter]
15
15
 
16
16
  # @rbs return: void
17
17
  def initialize
18
- @classes_memo = {}
18
+ @def_parents_memo = {}
19
19
  @methods_memo = {}
20
20
  @parameters_memo = {}
21
21
  end
@@ -23,7 +23,7 @@ module RubyModKit
23
23
  # @rbs offset_diff: OffsetDiff
24
24
  # @rbs return: void
25
25
  def succ(offset_diff)
26
- [@methods_memo, @parameters_memo, @classes_memo].each do |offset_node_memo|
26
+ [@methods_memo, @parameters_memo, @def_parents_memo].each do |offset_node_memo|
27
27
  new_offset_node_memo = {}
28
28
  offset_node_memo.each_value do |node_memo|
29
29
  node_memo.succ(offset_diff)
@@ -34,10 +34,10 @@ module RubyModKit
34
34
  self
35
35
  end
36
36
 
37
- # @rbs class_node: Node::ClassNode
38
- # @rbs return: Memo::Class
39
- def class_memo(class_node)
40
- @classes_memo[class_node.offset] ||= Memo::Class.new(class_node)
37
+ # @rbs def_parent_node: Node::DefParentNode
38
+ # @rbs return: Memo::DefParent
39
+ def def_parent_memo(def_parent_node)
40
+ @def_parents_memo[def_parent_node.offset] ||= Memo::DefParent.new(def_parent_node)
41
41
  end
42
42
 
43
43
  # @rbs def_node: Node::DefNode
@@ -67,7 +67,7 @@ module RubyModKit
67
67
  end
68
68
 
69
69
  require_relative "memo/offset_memo"
70
- require_relative "memo/class"
70
+ require_relative "memo/def_parent"
71
71
  require_relative "memo/ivar"
72
72
  require_relative "memo/method"
73
73
  require_relative "memo/parameter"
@@ -58,9 +58,12 @@ module RubyModKit
58
58
  parse_result.errors.each do |parse_error|
59
59
  message << "\n" unless message.empty?
60
60
  message << "#{generation.name}:#{parse_error.location.start_line}:#{parse_error.message} "
61
- message << "(#{parse_error.type})\n"
62
- message << parse_result.source.lines[parse_error.location.start_line - 1].chomp << "\n"
63
- message << "#{" " * parse_error.location.start_column}^#{"~" * [parse_error.location.length - 1, 0].max}"
61
+ message << "(#{parse_error.type})"
62
+ line = parse_result.source.lines[parse_error.location.start_line - 1]
63
+ if line
64
+ message << "\n#{line.chomp}\n"
65
+ message << "#{" " * parse_error.location.start_column}^#{"~" * [parse_error.location.length - 1, 0].max}"
66
+ end
64
67
  end
65
68
  raise RubyModKit::SyntaxError, message
66
69
  end
@@ -108,8 +111,8 @@ module RubyModKit
108
111
 
109
112
  return unless parameter_memo.untyped?
110
113
 
111
- class_node = root_node.class_node_at(parse_error.location.start_offset) || return
112
- ivar_memo_type = memo.class_memo(class_node).ivar_memo(name.to_sym).type || return
114
+ def_parent_node = root_node.def_parent_node_at(parse_error.location.start_offset) || return
115
+ ivar_memo_type = memo.def_parent_memo(def_parent_node).ivar_memo(name.to_sym).type || return
113
116
  parameter_memo.type = ivar_memo_type
114
117
  end
115
118
 
@@ -156,7 +159,7 @@ module RubyModKit
156
159
  case parent_node
157
160
  when Node::DefNode
158
161
  fix_unexpected_colon_in_def(parse_error, generation, root_node, parent_node, memo)
159
- when Node::ClassNode
162
+ when Node::DefParentNode
160
163
  fix_unexpected_colon_in_module(parse_error, generation, parent_node, memo)
161
164
  end
162
165
  end
@@ -186,10 +189,10 @@ module RubyModKit
186
189
 
187
190
  # @rbs parse_error: Prism::ParseError
188
191
  # @rbs generation: Generation
189
- # @rbs class_node: Node::ClassNode
192
+ # @rbs def_parent_node: Node::DefParentNode
190
193
  # @rbs memo: Memo
191
194
  # @rbs return: void
192
- def fix_unexpected_colon_in_module(parse_error, generation, class_node, memo)
195
+ def fix_unexpected_colon_in_module(parse_error, generation, def_parent_node, memo)
193
196
  line = generation.line(parse_error)
194
197
  line_offset = generation.src_offset(parse_error) || return
195
198
  attr_patterns = %i[attr_reader reader getter attr_writer writer setter attr_accessor accessor property]
@@ -202,7 +205,7 @@ module RubyModKit
202
205
  type = ::Regexp.last_match(4)
203
206
  return if !length || !indent || !ivar_name || !type
204
207
 
205
- ivar_memo = memo.class_memo(class_node).ivar_memo(ivar_name.to_sym)
208
+ ivar_memo = memo.def_parent_memo(def_parent_node).ivar_memo(ivar_name.to_sym)
206
209
  ivar_memo.type = type
207
210
  ivar_memo.attr_kind = attr_kind if attr_kind
208
211
 
@@ -22,7 +22,7 @@ module RubyModKit
22
22
  # @rbs return: bool
23
23
  def perform(generation, root_node, parse_result, memo)
24
24
  method_memo_groups = memo.methods_memo.each_value.group_by do |method_memo|
25
- [root_node.class_node_at(method_memo.offset), method_memo.name]
25
+ [root_node.def_parent_node_at(method_memo.offset), method_memo.name]
26
26
  end
27
27
  method_memo_groups.each_value do |method_memos|
28
28
  next if method_memos.length <= 1
@@ -17,11 +17,11 @@ module RubyModKit
17
17
  # @rbs memo: Memo
18
18
  # @rbs return: bool
19
19
  def perform(generation, root_node, _parse_result, memo)
20
- memo.classes_memo.each_value do |class_memo|
21
- ivars_memo = class_memo.ivars_memo.dup
22
- class_node = root_node.class_node_at(class_memo.offset) || raise(RubyModKit::Error)
20
+ memo.def_parents_memo.each_value do |def_parent_memo|
21
+ ivars_memo = def_parent_memo.ivars_memo.dup
22
+ def_parent_node = root_node.def_parent_node_at(def_parent_memo.offset) || raise(RubyModKit::Error)
23
23
  attr_adding_line = 0
24
- class_node.body_node&.children&.each do |call_node|
24
+ def_parent_node.body_node&.children&.each do |call_node|
25
25
  break if ivars_memo.empty?
26
26
  next unless call_node.is_a?(Node::CallNode)
27
27
  next unless %i[attr_reader attr_writer attr_accessor].include?(call_node.name)
@@ -42,7 +42,7 @@ module RubyModKit
42
42
 
43
43
  add_first_separator_line = false
44
44
  if attr_adding_line == 0
45
- attr_adding_line = class_node.location.start_line
45
+ attr_adding_line = def_parent_node.location.start_line
46
46
  prev_line = nil
47
47
  while generation.line(attr_adding_line) =~ /\A\s*#.*|\A$/
48
48
  prev_line = ::Regexp.last_match(0)
@@ -54,12 +54,12 @@ module RubyModKit
54
54
  add_separator_line = line != "\n" && line !~ /\A\s*end$/
55
55
  offset = generation.src_offset(attr_adding_line) || next
56
56
 
57
- if class_node.body_node
58
- first_line = generation.line(class_node.body_node)
57
+ if def_parent_node.body_node
58
+ first_line = generation.line(def_parent_node.body_node)
59
59
  indent = first_line[/\A\s*/] || raise(RubyModKit::Error)
60
60
  else
61
- class_line = generation.line(class_node)
62
- indent = " #{class_line[/\A\s*/]}"
61
+ def_parent_line = generation.line(def_parent_node)
62
+ indent = " #{def_parent_line[/\A\s*/]}"
63
63
  end
64
64
 
65
65
  generation[offset, 0] = "\n" if add_first_separator_line
@@ -5,22 +5,22 @@
5
5
  module RubyModKit
6
6
  class Node
7
7
  # Transpiler program node
8
- class ClassNode < Node
9
- # @rbs @prism_node: Prism::ClassNode
8
+ class DefParentNode < Node
9
+ # @rbs @prism_node: Prism::ClassNode | Prism::ModuleNode
10
10
  # @rbs @body_node: nil | Node::StatementsNode
11
11
  # @rbs @parent: Node
12
12
 
13
- attr_reader :prism_node #: Prism::ClassNode
13
+ attr_reader :prism_node #: Prism::ClassNode | Prism::ModuleNode
14
14
  attr_reader :body_node #: nil | Node::StatementsNode
15
15
  attr_reader :parent #: Node
16
16
 
17
- # @rbs prism_node: Prism::ClassNode
17
+ # @rbs prism_node: Prism::ClassNode | Prism::ModuleNode
18
18
  # @rbs parent: Node
19
19
  # @rbs return: void
20
20
  def initialize(prism_node, parent:)
21
21
  @prism_node = prism_node
22
22
  @parent = parent
23
- raise RubyModKit::Error unless prism_node.is_a?(Prism::ClassNode)
23
+ raise RubyModKit::Error if !prism_node.is_a?(Prism::ClassNode) && !prism_node.is_a?(Prism::ModuleNode)
24
24
 
25
25
  super()
26
26
  end
@@ -31,8 +31,8 @@ module RubyModKit
31
31
  case prism_node
32
32
  when Prism::SymbolNode
33
33
  Node::SymbolNode.new(prism_node, parent: self)
34
- when Prism::ClassNode
35
- Node::ClassNode.new(prism_node, parent: self)
34
+ when Prism::ClassNode, Prism::ModuleNode
35
+ Node::DefParentNode.new(prism_node, parent: self)
36
36
  when Prism::DefNode
37
37
  Node::DefNode.new(prism_node, parent: self)
38
38
  when Prism::RequiredParameterNode, Prism::OptionalKeywordParameterNode,
@@ -99,10 +99,10 @@ module RubyModKit
99
99
  end
100
100
 
101
101
  # @rbs offset: Integer
102
- # @rbs return: Node::ClassNode | nil
103
- def class_node_at(offset)
102
+ # @rbs return: Node::DefParentNode | nil
103
+ def def_parent_node_at(offset)
104
104
  node = node_at(offset) || return
105
- [node, *node.ancestors].each { return _1 if _1.is_a?(Node::ClassNode) }
105
+ [node, *node.ancestors].each { return _1 if _1.is_a?(Node::DefParentNode) }
106
106
  nil
107
107
  end
108
108
 
@@ -155,7 +155,7 @@ module RubyModKit
155
155
  end
156
156
 
157
157
  require_relative "node/symbol_node"
158
- require_relative "node/class_node"
158
+ require_relative "node/def_parent_node"
159
159
  require_relative "node/call_node"
160
160
  require_relative "node/def_node"
161
161
  require_relative "node/parameter_node"
@@ -2,23 +2,24 @@
2
2
 
3
3
  # rbs_inline: enabled
4
4
 
5
- require "sorted_set"
6
-
7
5
  module RubyModKit
8
6
  # The class of offset differences.
9
7
  class OffsetDiff
10
- # @rbs @diffs: SortedSet[[Integer, Integer, Integer]]
8
+ # @rbs @diffs: Hash[Integer, Integer]
9
+ # @rbs @offsets: Array[Integer]
11
10
 
12
11
  # @rbs return: void
13
12
  def initialize
14
- @diffs = SortedSet.new
13
+ @diffs = {}
14
+ @offsets = []
15
15
  end
16
16
 
17
17
  # @rbs src_offset: Integer
18
18
  # @rbs return: Integer
19
19
  def [](src_offset)
20
20
  dst_offset = src_offset
21
- @diffs.each do |(offset, _, diff)|
21
+ @offsets.each do |offset|
22
+ diff = @diffs[offset]
22
23
  break if offset > src_offset
23
24
  break if offset == src_offset && diff < 0
24
25
 
@@ -31,7 +32,12 @@ module RubyModKit
31
32
  # @rbs new_diff: Integer
32
33
  # @rbs return: void
33
34
  def insert(src_offset, new_diff)
34
- @diffs << [src_offset, @diffs.size, new_diff]
35
+ if @diffs[src_offset]
36
+ @diffs[src_offset] += new_diff
37
+ else
38
+ @diffs[src_offset] = new_diff
39
+ @offsets.insert(@offsets.bsearch_index { _1 > src_offset } || -1, src_offset)
40
+ end
35
41
  end
36
42
  end
37
43
  end
@@ -3,5 +3,5 @@
3
3
  # rbs_inline: enabled
4
4
 
5
5
  module RubyModKit
6
- VERSION = "0.0.1" #: String
6
+ VERSION = "0.0.2" #: String
7
7
  end
data/lib/ruby_mod_kit.rb CHANGED
@@ -13,19 +13,29 @@ module RubyModKit
13
13
  class << self
14
14
  # @rbs file: String
15
15
  # @rbs *args: String
16
+ # @rbs output: String | nil
16
17
  # @rbs return: void
17
- def execute_file(file, *args)
18
- rb_file = transpile_file(file)
19
- execute_rb_file(rb_file, *args)
18
+ def execute_file(file, *args, output: nil)
19
+ rb_script = transpile_file(file, output: output)
20
+ if output
21
+ execute_rb_file(output, *args)
22
+ else
23
+ execute_rb(rb_script, *args)
24
+ end
20
25
  end
21
26
 
22
27
  # @rbs file: String
28
+ # @rbs output: String | IO | nil
23
29
  # @rbs return: String
24
- def transpile_file(file)
25
- rb_src = transpile(File.read(file), filename: file)
26
- rb_path = rb_path(file)
27
- File.write(rb_path, rb_src)
28
- rb_path
30
+ def transpile_file(file, output: nil)
31
+ rb_script = transpile(File.read(file), filename: file)
32
+ case output
33
+ when IO
34
+ output.write(rb_script)
35
+ when String
36
+ File.write(output, rb_script)
37
+ end
38
+ rb_script
29
39
  end
30
40
 
31
41
  # @rbs src: String
@@ -47,6 +57,14 @@ module RubyModKit
47
57
  def rb_path(path)
48
58
  path.sub(/(?:\.rbm)?$/, ".rb")
49
59
  end
60
+
61
+ # @rbs rb_script: String
62
+ # @rbs *args: String
63
+ # @rbs return: void
64
+ def execute_rb(rb_script, *args)
65
+ ARGV.replace(args)
66
+ eval(rb_script, TOPLEVEL_BINDING) # rubocop:disable Security/Eval
67
+ end
50
68
  end
51
69
  end
52
70
 
data/ruby_mod_kit.gemspec CHANGED
@@ -4,14 +4,10 @@ require_relative "lib/ruby_mod_kit/version"
4
4
 
5
5
  Gem::Specification.new do |spec|
6
6
  spec.name = "ruby_mod_kit"
7
+ spec.version = RubyModKit::VERSION
7
8
  spec.authors = ["wanabe"]
8
9
  spec.email = ["s.wanabe@gmail.com"]
9
10
 
10
- version = RubyModKit::VERSION
11
- tag_version = `git tag --points-at HEAD`.chomp.sub("v", "")
12
- version += "-#{`git rev-parse --short HEAD`}" if version != tag_version
13
- spec.version = version
14
-
15
11
  spec.summary = "ruby_mod_kit"
16
12
  spec.description = "ruby_mod_kit"
17
13
  spec.homepage = "https://github.com/wanabe/ruby_mod_kit"
@@ -43,7 +39,6 @@ Gem::Specification.new do |spec|
43
39
 
44
40
  # Uncomment to register a new dependency of your gem
45
41
  spec.add_dependency "prism", "~> 1.0"
46
- spec.add_dependency "sorted_set", "~> 1.0"
47
42
  spec.add_dependency "thor", "~> 1.3"
48
43
 
49
44
  # For more information and examples about making a new gem, check out our
@@ -0,0 +1,14 @@
1
+ # Generated from lib/ruby_mod_kit/core_ext/eval.rb with RBS::Inline
2
+
3
+ module RubyModKit
4
+ module CoreExt
5
+ # the extension for eval
6
+ module Eval
7
+ # @rbs expr: String
8
+ # @rbs *rest: Object
9
+ # @rbs transpile: bool
10
+ # @rbs return: Object
11
+ def self?.eval: (String expr, *Object rest, ?transpile: bool) -> Object
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,30 @@
1
+ # Generated from lib/ruby_mod_kit/core_ext/load.rb with RBS::Inline
2
+
3
+ module RubyModKit
4
+ module CoreExt
5
+ # the extension for load/require
6
+ module Load
7
+ LOADABLE_EXTS: Array[String]
8
+
9
+ # @rbs path: String
10
+ # @rbs wrap: bool
11
+ # @rbs return: void
12
+ def self?.load: (String path, ?bool wrap) -> void
13
+
14
+ # @rbs path: String
15
+ # @rbs return: void
16
+ def self?.require: (String path) -> void
17
+
18
+ # @rbs return: Array[String]
19
+ def self.loaded_features: () -> Array[String]
20
+
21
+ # @rbs return: Array[String]
22
+ def self.load_path: () -> Array[String]
23
+
24
+ # @rbs path: String
25
+ # @rbs expanded: bool
26
+ # @rbs return: String | nil
27
+ def self.require_path: (String path, ?expanded: bool) -> (String | nil)
28
+ end
29
+ end
30
+ end
@@ -1,16 +1,16 @@
1
- # Generated from lib/ruby_mod_kit/memo/class.rb with RBS::Inline
1
+ # Generated from lib/ruby_mod_kit/memo/def_parent.rb with RBS::Inline
2
2
 
3
3
  module RubyModKit
4
4
  class Memo
5
- # The memo for parameter type
6
- class Class < OffsetMemo
5
+ # The memo for def parent (class, module)
6
+ class DefParent < OffsetMemo
7
7
  @ivars_memo: Hash[Symbol, Memo::Ivar]
8
8
 
9
9
  attr_reader ivars_memo: Hash[Symbol, Memo::Ivar]
10
10
 
11
- # @rbs class_node: Node::ClassNode
11
+ # @rbs def_parent_node: Node::DefParentNode
12
12
  # @rbs return: void
13
- def initialize: (Node::ClassNode class_node) -> void
13
+ def initialize: (Node::DefParentNode def_parent_node) -> void
14
14
 
15
15
  # @rbs name: Symbol
16
16
  # @rbs return: Memo::Ivar
@@ -3,13 +3,13 @@
3
3
  module RubyModKit
4
4
  # The class of transpiler generation.
5
5
  class Memo
6
- @classes_memo: Hash[Integer, Memo::Class]
6
+ @def_parents_memo: Hash[Integer, Memo::DefParent]
7
7
 
8
8
  @methods_memo: Hash[Integer, Memo::Method]
9
9
 
10
10
  @parameters_memo: Hash[Integer, Memo::Parameter]
11
11
 
12
- attr_reader classes_memo: Hash[Integer, Memo::Class]
12
+ attr_reader def_parents_memo: Hash[Integer, Memo::DefParent]
13
13
 
14
14
  attr_reader methods_memo: Hash[Integer, Memo::Method]
15
15
 
@@ -22,9 +22,9 @@ module RubyModKit
22
22
  # @rbs return: void
23
23
  def succ: (OffsetDiff offset_diff) -> void
24
24
 
25
- # @rbs class_node: Node::ClassNode
26
- # @rbs return: Memo::Class
27
- def class_memo: (Node::ClassNode class_node) -> Memo::Class
25
+ # @rbs def_parent_node: Node::DefParentNode
26
+ # @rbs return: Memo::DefParent
27
+ def def_parent_memo: (Node::DefParentNode def_parent_node) -> Memo::DefParent
28
28
 
29
29
  # @rbs def_node: Node::DefNode
30
30
  # @rbs return: Memo::Method
@@ -64,10 +64,10 @@ module RubyModKit
64
64
 
65
65
  # @rbs parse_error: Prism::ParseError
66
66
  # @rbs generation: Generation
67
- # @rbs class_node: Node::ClassNode
67
+ # @rbs def_parent_node: Node::DefParentNode
68
68
  # @rbs memo: Memo
69
69
  # @rbs return: void
70
- def fix_unexpected_colon_in_module: (Prism::ParseError parse_error, Generation generation, Node::ClassNode class_node, Memo memo) -> void
70
+ def fix_unexpected_colon_in_module: (Prism::ParseError parse_error, Generation generation, Node::DefParentNode def_parent_node, Memo memo) -> void
71
71
  end
72
72
  end
73
73
  end
@@ -1,25 +1,25 @@
1
- # Generated from lib/ruby_mod_kit/node/class_node.rb with RBS::Inline
1
+ # Generated from lib/ruby_mod_kit/node/def_parent_node.rb with RBS::Inline
2
2
 
3
3
  module RubyModKit
4
4
  class Node
5
5
  # Transpiler program node
6
- class ClassNode < Node
7
- @prism_node: Prism::ClassNode
6
+ class DefParentNode < Node
7
+ @prism_node: Prism::ClassNode | Prism::ModuleNode
8
8
 
9
9
  @body_node: nil | Node::StatementsNode
10
10
 
11
11
  @parent: Node
12
12
 
13
- attr_reader prism_node: Prism::ClassNode
13
+ attr_reader prism_node: Prism::ClassNode | Prism::ModuleNode
14
14
 
15
15
  attr_reader body_node: nil | Node::StatementsNode
16
16
 
17
17
  attr_reader parent: Node
18
18
 
19
- # @rbs prism_node: Prism::ClassNode
19
+ # @rbs prism_node: Prism::ClassNode | Prism::ModuleNode
20
20
  # @rbs parent: Node
21
21
  # @rbs return: void
22
- def initialize: (Prism::ClassNode prism_node, parent: Node) -> void
22
+ def initialize: (Prism::ClassNode | Prism::ModuleNode prism_node, parent: Node) -> void
23
23
 
24
24
  # @rbs child_prism_node: Prism::Node
25
25
  # @rbs return: Node
@@ -44,8 +44,8 @@ module RubyModKit
44
44
  def parameter_node_at: (Integer offset) -> (Node::ParameterNode | nil)
45
45
 
46
46
  # @rbs offset: Integer
47
- # @rbs return: Node::ClassNode | nil
48
- def class_node_at: (Integer offset) -> (Node::ClassNode | nil)
47
+ # @rbs return: Node::DefParentNode | nil
48
+ def def_parent_node_at: (Integer offset) -> (Node::DefParentNode | nil)
49
49
 
50
50
  # @rbs offset: Integer
51
51
  # @rbs return: bool
@@ -3,7 +3,9 @@
3
3
  module RubyModKit
4
4
  # The class of offset differences.
5
5
  class OffsetDiff
6
- @diffs: SortedSet[[ Integer, Integer, Integer ]]
6
+ @diffs: Hash[Integer, Integer]
7
+
8
+ @offsets: Array[Integer]
7
9
 
8
10
  # @rbs return: void
9
11
  def initialize: () -> void
@@ -10,12 +10,14 @@ module RubyModKit
10
10
 
11
11
  # @rbs file: String
12
12
  # @rbs *args: String
13
+ # @rbs output: String | nil
13
14
  # @rbs return: void
14
- def self.execute_file: (String file, *String args) -> void
15
+ def self.execute_file: (String file, *String args, ?output: String | nil) -> void
15
16
 
16
17
  # @rbs file: String
18
+ # @rbs output: String | IO | nil
17
19
  # @rbs return: String
18
- def self.transpile_file: (String file) -> String
20
+ def self.transpile_file: (String file, ?output: String | IO | nil) -> String
19
21
 
20
22
  # @rbs src: String
21
23
  # @rbs filename: String | nil
@@ -30,4 +32,9 @@ module RubyModKit
30
32
  # @rbs path: String
31
33
  # @rbs return: String
32
34
  def self.rb_path: (String path) -> String
35
+
36
+ # @rbs rb_script: String
37
+ # @rbs *args: String
38
+ # @rbs return: void
39
+ def self.execute_rb: (String rb_script, *String args) -> void
33
40
  end
data/sig/thor.rbs CHANGED
@@ -1,3 +1,5 @@
1
1
  class Thor
2
2
  def self.desc: (String usage, String description, ?Hash[untyped, untyped] options) -> (String | false)?
3
+ def self.method_option: (Symbol name, Hash[Symbol, untyped] option) -> untyped
4
+ def options: () -> Hash[Symbol, untyped]
3
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby_mod_kit
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - wanabe
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2024-11-18 00:00:00.000000000 Z
11
+ date: 2024-11-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: prism
@@ -24,20 +24,6 @@ dependencies:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '1.0'
27
- - !ruby/object:Gem::Dependency
28
- name: sorted_set
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - "~>"
32
- - !ruby/object:Gem::Version
33
- version: '1.0'
34
- type: :runtime
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - "~>"
39
- - !ruby/object:Gem::Version
40
- version: '1.0'
41
27
  - !ruby/object:Gem::Dependency
42
28
  name: thor
43
29
  requirement: !ruby/object:Gem::Requirement
@@ -67,9 +53,12 @@ files:
67
53
  - exe/ruby_mod_kit
68
54
  - lib/ruby_mod_kit.rb
69
55
  - lib/ruby_mod_kit/cli.rb
56
+ - lib/ruby_mod_kit/core_ext.rb
57
+ - lib/ruby_mod_kit/core_ext/eval.rb
58
+ - lib/ruby_mod_kit/core_ext/load.rb
70
59
  - lib/ruby_mod_kit/generation.rb
71
60
  - lib/ruby_mod_kit/memo.rb
72
- - lib/ruby_mod_kit/memo/class.rb
61
+ - lib/ruby_mod_kit/memo/def_parent.rb
73
62
  - lib/ruby_mod_kit/memo/ivar.rb
74
63
  - lib/ruby_mod_kit/memo/method.rb
75
64
  - lib/ruby_mod_kit/memo/offset_memo.rb
@@ -83,8 +72,8 @@ files:
83
72
  - lib/ruby_mod_kit/mission/type_return.rb
84
73
  - lib/ruby_mod_kit/node.rb
85
74
  - lib/ruby_mod_kit/node/call_node.rb
86
- - lib/ruby_mod_kit/node/class_node.rb
87
75
  - lib/ruby_mod_kit/node/def_node.rb
76
+ - lib/ruby_mod_kit/node/def_parent_node.rb
88
77
  - lib/ruby_mod_kit/node/parameter_node.rb
89
78
  - lib/ruby_mod_kit/node/program_node.rb
90
79
  - lib/ruby_mod_kit/node/statements_node.rb
@@ -97,9 +86,11 @@ files:
97
86
  - sig/generated/examples/user.rbs
98
87
  - sig/generated/ruby_mod_kit.rbs
99
88
  - sig/generated/ruby_mod_kit/cli.rbs
89
+ - sig/generated/ruby_mod_kit/core_ext/eval.rbs
90
+ - sig/generated/ruby_mod_kit/core_ext/load.rbs
100
91
  - sig/generated/ruby_mod_kit/generation.rbs
101
92
  - sig/generated/ruby_mod_kit/memo.rbs
102
- - sig/generated/ruby_mod_kit/memo/class.rbs
93
+ - sig/generated/ruby_mod_kit/memo/def_parent.rbs
103
94
  - sig/generated/ruby_mod_kit/memo/ivar.rbs
104
95
  - sig/generated/ruby_mod_kit/memo/located.rbs
105
96
  - sig/generated/ruby_mod_kit/memo/method.rbs
@@ -115,8 +106,8 @@ files:
115
106
  - sig/generated/ruby_mod_kit/mission/type_return.rbs
116
107
  - sig/generated/ruby_mod_kit/node.rbs
117
108
  - sig/generated/ruby_mod_kit/node/call_node.rbs
118
- - sig/generated/ruby_mod_kit/node/class_node.rbs
119
109
  - sig/generated/ruby_mod_kit/node/def_node.rbs
110
+ - sig/generated/ruby_mod_kit/node/def_parent_node.rbs
120
111
  - sig/generated/ruby_mod_kit/node/parameter_node.rbs
121
112
  - sig/generated/ruby_mod_kit/node/program_node.rbs
122
113
  - sig/generated/ruby_mod_kit/node/statements_node.rbs