rbs-siggen 0.1.0

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 1e403c0c57cc49ef98ae97fc5f63ee2f0c7bfdb3d4311fd45239fc8c7c3c18a7
4
+ data.tar.gz: 98fcb8dd20631d140fd925ce71f0f8864f47c0b1e3ad22cc8db536b9f3a42d25
5
+ SHA512:
6
+ metadata.gz: fa1febf6e6fe41d8bf020f1854cf0f41e956eec2b017d5c468196cfd78cb5cd802e7f6367c027cb9d1bfaf408252181c4d018ca66ca4e63e32a47d727de995e7
7
+ data.tar.gz: 8bb8326380805b4a6732328e3715cf9e1315c9e3ad8d926b41857a4dff7a42185a6f9081d29dcb4a4e785c7761d2ea1f5cc67262c43e3f0141d85d0927786757
data/LICENSE.txt ADDED
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2026 Koji NAKAMURA
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,35 @@
1
+ # RBS::Siggen
2
+
3
+ RBS::Siggen
4
+
5
+ ## Installation
6
+
7
+ Install the gem and add to the application's Gemfile by executing:
8
+
9
+ ```bash
10
+ bundle add rbs-siggen
11
+ ```
12
+
13
+ If bundler is not being used to manage dependencies, install the gem by executing:
14
+
15
+ ```bash
16
+ gem install rbs-siggen
17
+ ```
18
+
19
+ ## Usage
20
+
21
+ TBD
22
+
23
+ ## Development
24
+
25
+ After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake test` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
26
+
27
+ To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and the created tag, and push the `.gem` file to [rubygems.org](https://rubygems.org).
28
+
29
+ ## Contributing
30
+
31
+ Bug reports and pull requests are welcome on GitHub at https://github.com/kozy4324/rbs-siggen.
32
+
33
+ ## License
34
+
35
+ The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
data/Rakefile ADDED
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "bundler/gem_tasks"
4
+ require "minitest/test_task"
5
+
6
+ Minitest::TestTask.create
7
+
8
+ require "rubocop/rake_task"
9
+
10
+ RuboCop::RakeTask.new
11
+
12
+ require "steep/rake_task"
13
+ Steep::RakeTask.new do |t|
14
+ t.check.severity_level = :error
15
+ t.watch.verbose
16
+ end
17
+
18
+ task default: %i[test rubocop steep]
data/Steepfile ADDED
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ D = Steep::Diagnostic
4
+
5
+ target :lib do
6
+ signature "sig"
7
+ ignore_signature "sig/test"
8
+ check "lib"
9
+ end
10
+
11
+ target :test do
12
+ unreferenced!
13
+ signature "sig/test"
14
+ check "test"
15
+ configure_code_diagnostics(D::Ruby.lenient)
16
+ end
data/exe/rbs-siggen ADDED
@@ -0,0 +1,40 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ $LOAD_PATH << File.join(__dir__, "../lib")
5
+ require "rbs/siggen"
6
+ require "pathname"
7
+ require "optparse"
8
+
9
+ options = { sig_dir: "sig" }
10
+ parser = OptionParser.new do |opts|
11
+ opts.banner = "Usage: rbs-siggen [options] <lib-path>"
12
+
13
+ opts.on("--sig-dir DIR", "Path to RBS signature directory (default: sig)") do |dir|
14
+ options[:sig_dir] = dir
15
+ end
16
+
17
+ opts.on("-v", "--version", "Show version") do
18
+ puts "rbs-siggen #{RBS::Siggen::VERSION}"
19
+ exit
20
+ end
21
+
22
+ opts.on("-h", "--help", "Show this help") do
23
+ puts opts
24
+ exit
25
+ end
26
+ end
27
+
28
+ parser.parse!
29
+
30
+ if ARGV.empty?
31
+ puts parser
32
+ exit 1
33
+ end
34
+
35
+ lib_path = ARGV[0]
36
+
37
+ siggen = RBS::Siggen.new(path: options[:sig_dir])
38
+ siggen.analyze(path: Pathname(lib_path)) do |siggen, _|
39
+ puts siggen.generate
40
+ end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RBS
4
+ class Siggen
5
+ VERSION = "0.1.0"
6
+ end
7
+ end
data/lib/rbs/siggen.rb ADDED
@@ -0,0 +1,174 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "rbs"
4
+ require "steep"
5
+ require "parser"
6
+ require "erb"
7
+ require "stringio"
8
+ require_relative "siggen/version"
9
+
10
+ module RBS
11
+ class Siggen # rubocop:disable Style/Documentation
12
+ # @rbs @env: RBS::Environment
13
+ # @rbs @typing: untyped
14
+ # @rbs @node: Parser::AST::Node
15
+
16
+ #: (path: String) -> void
17
+ def initialize(path: "sig")
18
+ core_root = RBS::EnvironmentLoader::DEFAULT_CORE_ROOT
19
+ env_loader = RBS::EnvironmentLoader.new(core_root: core_root)
20
+ env_loader.add path: Pathname(path)
21
+
22
+ env = RBS::Environment.new
23
+ env_loader.load(env: env)
24
+ @env = env.resolve_type_names
25
+ end
26
+
27
+ #: (String sig_string, ?name: String) -> void
28
+ def add_signature(sig_string, name: "a.rbs")
29
+ buffer = RBS::Buffer.new(name:, content: sig_string)
30
+ _, dirs, decls = RBS::Parser.parse_signature(buffer)
31
+ @env.add_signature(buffer: buffer, directives: dirs, decls: decls)
32
+ end
33
+
34
+ #: (path: String) { (Siggen, String) -> void } -> void
35
+ def analyze(path:)
36
+ ruby_files = Dir.glob("#{path}/**/*.rb")
37
+ ruby_files.each do |file|
38
+ analyze_ruby(File.read(file), name: file)
39
+ yield self, file
40
+ end
41
+ end
42
+
43
+ #: (String ruby_string, ?name: String) -> void
44
+ def analyze_ruby(ruby_string, name: "a.rb")
45
+ # steep:ignore:start
46
+ definition_builder = RBS::DefinitionBuilder.new(env: @env)
47
+
48
+ factory = Steep::AST::Types::Factory.new(builder: definition_builder)
49
+ builder = Steep::Interface::Builder.new(factory, implicitly_returns_nil: true)
50
+ checker = Steep::Subtyping::Check.new(builder: builder)
51
+
52
+ source = Steep::Source.parse(ruby_string, path: Pathname(name), factory: factory)
53
+
54
+ annotations = source.annotations(block: source.node, factory: checker.factory, context: nil)
55
+ resolver = RBS::Resolver::ConstantResolver.new(builder: checker.factory.definition_builder)
56
+ const_env = Steep::TypeInference::ConstantEnv.new(factory: checker.factory, context: nil, resolver: resolver)
57
+
58
+ case annotations.self_type
59
+ when Steep::AST::Types::Name::Instance
60
+ module_name = annotations.self_type.name
61
+ module_type = Steep::AST::Types::Name::Singleton.new(name: module_name)
62
+ instance_type = annotations.self_type
63
+ when Steep::AST::Types::Name::Singleton
64
+ module_name = annotations.self_type.name
65
+ module_type = annotations.self_type
66
+ instance_type = annotations.self_type
67
+ else
68
+ module_name = Steep::AST::Builtin::Object.module_name
69
+ module_type = Steep::AST::Builtin::Object.module_type
70
+ instance_type = Steep::AST::Builtin::Object.instance_type
71
+ end
72
+
73
+ type_env = Steep::TypeInference::TypeEnvBuilder.new(
74
+ Steep::TypeInference::TypeEnvBuilder::Command::ImportGlobalDeclarations.new(checker.factory),
75
+ Steep::TypeInference::TypeEnvBuilder::Command::ImportInstanceVariableAnnotations.new(annotations),
76
+ Steep::TypeInference::TypeEnvBuilder::Command::ImportConstantAnnotations.new(annotations),
77
+ Steep::TypeInference::TypeEnvBuilder::Command::ImportLocalVariableAnnotations.new(annotations)
78
+ ).build(Steep::TypeInference::TypeEnv.new(const_env))
79
+
80
+ context = Steep::TypeInference::Context.new(
81
+ block_context: nil,
82
+ method_context: nil,
83
+ module_context: Steep::TypeInference::Context::ModuleContext.new(
84
+ instance_type: instance_type,
85
+ module_type: module_type,
86
+ implement_name: nil,
87
+ nesting: nil,
88
+ class_name: module_name,
89
+ instance_definition: checker.factory.definition_builder.build_instance(module_name),
90
+ module_definition: checker.factory.definition_builder.build_singleton(module_name)
91
+ ),
92
+ break_context: nil,
93
+ self_type: instance_type,
94
+ type_env: type_env,
95
+ call_context: Steep::TypeInference::MethodCall::TopLevelContext.new,
96
+ variable_context: Steep::TypeInference::Context::TypeVariableContext.empty
97
+ )
98
+
99
+ typing = Steep::Typing.new(source: source, root_context: context, cursor: nil)
100
+ construction = Steep::TypeConstruction.new(checker: checker,
101
+ source: source,
102
+ annotations: annotations,
103
+ context: context,
104
+ typing: typing)
105
+ construction.synthesize(source.node)
106
+
107
+ @typing = typing
108
+ @node = source.node
109
+ # steep:ignore:end
110
+ end
111
+
112
+ #: () -> String
113
+ def generate
114
+ result = {} #: Hash[String, Array[String]]
115
+
116
+ traverse(@node) do |node, call_of|
117
+ next unless node.type == :send
118
+
119
+ _, _, *args = node.children
120
+ args = args.map { |a| a.children[0] }
121
+
122
+ call_of.method_decls.each do |method_decl|
123
+ receiver_type = method_decl.method_name.type_name
124
+ class_name = "#{receiver_type.namespace}#{receiver_type.name}"
125
+
126
+ rp = method_decl.method_def.type.type.required_positionals.map(&:name)
127
+ arg_hash = rp.zip(args).to_h
128
+ annos = method_decl.method_def
129
+ .member_annotations
130
+ .filter { |a| a.string.include?("siggen:") }
131
+ .map { |a| a.string.split("siggen:")[1].strip }
132
+ next if annos.empty?
133
+
134
+ result[class_name] ||= []
135
+ annos.each do |anno|
136
+ result[class_name] << ERB.new(anno).result_with_hash(arg_hash)
137
+ end
138
+ end
139
+ end
140
+
141
+ io = ::StringIO.new
142
+ result.each do |key, values|
143
+ io.puts "class #{key}"
144
+ values.each do |v|
145
+ io.puts " #{v}"
146
+ end
147
+ io.puts "end"
148
+ end
149
+ io.rewind
150
+ io.read || ""
151
+ end
152
+
153
+ #: (untyped node) ?{ (Parser::AST::Node node, untyped call_of) -> void } -> void
154
+ def traverse(node, &block)
155
+ return unless node.is_a?(::Parser::AST::Node)
156
+
157
+ call_of = begin
158
+ @typing.call_of(node:)
159
+ rescue StandardError
160
+ nil
161
+ end
162
+
163
+ unless call_of.nil? ||
164
+ call_of.is_a?(Steep::TypeInference::MethodCall::NoMethodError) || # steep:ignore
165
+ call_of.is_a?(Steep::TypeInference::MethodCall::Untyped) # steep:ignore
166
+ yield(node, call_of)
167
+ end
168
+
169
+ node.children.each do |child|
170
+ traverse(child, &block)
171
+ end
172
+ end
173
+ end
174
+ end
@@ -0,0 +1,252 @@
1
+ ---
2
+ path: ".gem_rbs_collection"
3
+ gems:
4
+ - name: activesupport
5
+ version: '7.0'
6
+ source:
7
+ type: git
8
+ name: ruby/gem_rbs_collection
9
+ revision: 5aeae33367fa324abf3a4ef912f4e27aaf17f6b9
10
+ remote: https://github.com/ruby/gem_rbs_collection.git
11
+ repo_dir: gems
12
+ - name: ast
13
+ version: '2.4'
14
+ source:
15
+ type: git
16
+ name: ruby/gem_rbs_collection
17
+ revision: 5aeae33367fa324abf3a4ef912f4e27aaf17f6b9
18
+ remote: https://github.com/ruby/gem_rbs_collection.git
19
+ repo_dir: gems
20
+ - name: base64
21
+ version: 0.3.0
22
+ source:
23
+ type: rubygems
24
+ - name: bigdecimal
25
+ version: '4.0'
26
+ source:
27
+ type: git
28
+ name: ruby/gem_rbs_collection
29
+ revision: 5aeae33367fa324abf3a4ef912f4e27aaf17f6b9
30
+ remote: https://github.com/ruby/gem_rbs_collection.git
31
+ repo_dir: gems
32
+ - name: concurrent-ruby
33
+ version: '1.1'
34
+ source:
35
+ type: git
36
+ name: ruby/gem_rbs_collection
37
+ revision: 5aeae33367fa324abf3a4ef912f4e27aaf17f6b9
38
+ remote: https://github.com/ruby/gem_rbs_collection.git
39
+ repo_dir: gems
40
+ - name: connection_pool
41
+ version: '2.4'
42
+ source:
43
+ type: git
44
+ name: ruby/gem_rbs_collection
45
+ revision: 5aeae33367fa324abf3a4ef912f4e27aaf17f6b9
46
+ remote: https://github.com/ruby/gem_rbs_collection.git
47
+ repo_dir: gems
48
+ - name: csv
49
+ version: '3.3'
50
+ source:
51
+ type: git
52
+ name: ruby/gem_rbs_collection
53
+ revision: 5aeae33367fa324abf3a4ef912f4e27aaf17f6b9
54
+ remote: https://github.com/ruby/gem_rbs_collection.git
55
+ repo_dir: gems
56
+ - name: date
57
+ version: '0'
58
+ source:
59
+ type: stdlib
60
+ - name: digest
61
+ version: '0'
62
+ source:
63
+ type: stdlib
64
+ - name: erb
65
+ version: '0'
66
+ source:
67
+ type: stdlib
68
+ - name: ffi
69
+ version: 1.17.3
70
+ source:
71
+ type: rubygems
72
+ - name: fileutils
73
+ version: '0'
74
+ source:
75
+ type: stdlib
76
+ - name: forwardable
77
+ version: '0'
78
+ source:
79
+ type: stdlib
80
+ - name: i18n
81
+ version: '1.10'
82
+ source:
83
+ type: git
84
+ name: ruby/gem_rbs_collection
85
+ revision: 5aeae33367fa324abf3a4ef912f4e27aaf17f6b9
86
+ remote: https://github.com/ruby/gem_rbs_collection.git
87
+ repo_dir: gems
88
+ - name: io-console
89
+ version: '0'
90
+ source:
91
+ type: stdlib
92
+ - name: json
93
+ version: '0'
94
+ source:
95
+ type: stdlib
96
+ - name: listen
97
+ version: '3.9'
98
+ source:
99
+ type: git
100
+ name: ruby/gem_rbs_collection
101
+ revision: 5aeae33367fa324abf3a4ef912f4e27aaf17f6b9
102
+ remote: https://github.com/ruby/gem_rbs_collection.git
103
+ repo_dir: gems
104
+ - name: logger
105
+ version: '0'
106
+ source:
107
+ type: stdlib
108
+ - name: minitest
109
+ version: '5.25'
110
+ source:
111
+ type: git
112
+ name: ruby/gem_rbs_collection
113
+ revision: 5aeae33367fa324abf3a4ef912f4e27aaf17f6b9
114
+ remote: https://github.com/ruby/gem_rbs_collection.git
115
+ repo_dir: gems
116
+ - name: monitor
117
+ version: '0'
118
+ source:
119
+ type: stdlib
120
+ - name: mutex_m
121
+ version: 0.3.0
122
+ source:
123
+ type: rubygems
124
+ - name: openssl
125
+ version: '0'
126
+ source:
127
+ type: stdlib
128
+ - name: optparse
129
+ version: '0'
130
+ source:
131
+ type: stdlib
132
+ - name: parallel
133
+ version: '1.20'
134
+ source:
135
+ type: git
136
+ name: ruby/gem_rbs_collection
137
+ revision: 5aeae33367fa324abf3a4ef912f4e27aaf17f6b9
138
+ remote: https://github.com/ruby/gem_rbs_collection.git
139
+ repo_dir: gems
140
+ - name: parser
141
+ version: '3.2'
142
+ source:
143
+ type: git
144
+ name: ruby/gem_rbs_collection
145
+ revision: 5aeae33367fa324abf3a4ef912f4e27aaf17f6b9
146
+ remote: https://github.com/ruby/gem_rbs_collection.git
147
+ repo_dir: gems
148
+ - name: pp
149
+ version: '0'
150
+ source:
151
+ type: stdlib
152
+ - name: prettyprint
153
+ version: '0'
154
+ source:
155
+ type: stdlib
156
+ - name: prism
157
+ version: 1.9.0
158
+ source:
159
+ type: rubygems
160
+ - name: rainbow
161
+ version: '3.0'
162
+ source:
163
+ type: git
164
+ name: ruby/gem_rbs_collection
165
+ revision: 5aeae33367fa324abf3a4ef912f4e27aaf17f6b9
166
+ remote: https://github.com/ruby/gem_rbs_collection.git
167
+ repo_dir: gems
168
+ - name: rake
169
+ version: '13.0'
170
+ source:
171
+ type: git
172
+ name: ruby/gem_rbs_collection
173
+ revision: 5aeae33367fa324abf3a4ef912f4e27aaf17f6b9
174
+ remote: https://github.com/ruby/gem_rbs_collection.git
175
+ repo_dir: gems
176
+ - name: rbs
177
+ version: 3.10.3
178
+ source:
179
+ type: rubygems
180
+ - name: rdoc
181
+ version: '0'
182
+ source:
183
+ type: stdlib
184
+ - name: regexp_parser
185
+ version: '2.8'
186
+ source:
187
+ type: git
188
+ name: ruby/gem_rbs_collection
189
+ revision: 5aeae33367fa324abf3a4ef912f4e27aaf17f6b9
190
+ remote: https://github.com/ruby/gem_rbs_collection.git
191
+ repo_dir: gems
192
+ - name: rubocop
193
+ version: '1.57'
194
+ source:
195
+ type: git
196
+ name: ruby/gem_rbs_collection
197
+ revision: 5aeae33367fa324abf3a4ef912f4e27aaf17f6b9
198
+ remote: https://github.com/ruby/gem_rbs_collection.git
199
+ repo_dir: gems
200
+ - name: rubocop-ast
201
+ version: '1.46'
202
+ source:
203
+ type: git
204
+ name: ruby/gem_rbs_collection
205
+ revision: 5aeae33367fa324abf3a4ef912f4e27aaf17f6b9
206
+ remote: https://github.com/ruby/gem_rbs_collection.git
207
+ repo_dir: gems
208
+ - name: securerandom
209
+ version: '0'
210
+ source:
211
+ type: stdlib
212
+ - name: singleton
213
+ version: '0'
214
+ source:
215
+ type: stdlib
216
+ - name: socket
217
+ version: '0'
218
+ source:
219
+ type: stdlib
220
+ - name: stringio
221
+ version: '0'
222
+ source:
223
+ type: stdlib
224
+ - name: strscan
225
+ version: '0'
226
+ source:
227
+ type: stdlib
228
+ - name: time
229
+ version: '0'
230
+ source:
231
+ type: stdlib
232
+ - name: timeout
233
+ version: '0'
234
+ source:
235
+ type: stdlib
236
+ - name: tsort
237
+ version: '0'
238
+ source:
239
+ type: stdlib
240
+ - name: tzinfo
241
+ version: '2.0'
242
+ source:
243
+ type: git
244
+ name: ruby/gem_rbs_collection
245
+ revision: 5aeae33367fa324abf3a4ef912f4e27aaf17f6b9
246
+ remote: https://github.com/ruby/gem_rbs_collection.git
247
+ repo_dir: gems
248
+ - name: uri
249
+ version: '0'
250
+ source:
251
+ type: stdlib
252
+ gemfile_lock_path: Gemfile.lock
@@ -0,0 +1,19 @@
1
+ # Download sources
2
+ sources:
3
+ - type: git
4
+ name: ruby/gem_rbs_collection
5
+ remote: https://github.com/ruby/gem_rbs_collection.git
6
+ revision: main
7
+ repo_dir: gems
8
+
9
+ # You can specify local directories as sources also.
10
+ # - type: local
11
+ # path: path/to/your/local/repository
12
+
13
+ # A directory to install the downloaded RBSs
14
+ path: .gem_rbs_collection
15
+
16
+ # gems:
17
+ # # If you want to avoid installing rbs files for gems, you can specify them here.
18
+ # - name: GEM_NAME
19
+ # ignore: true
@@ -0,0 +1,29 @@
1
+ # Generated from lib/rbs/siggen.rb with RBS::Inline
2
+
3
+ module RBS
4
+ class Siggen
5
+ @env: RBS::Environment
6
+
7
+ @typing: untyped
8
+
9
+ @node: Parser::AST::Node
10
+
11
+ # : (path: String) -> void
12
+ def initialize: (path: String) -> void
13
+
14
+ # : (String sig_string, ?name: String) -> void
15
+ def add_signature: (String sig_string, ?name: String) -> void
16
+
17
+ # : (path: String) { (Siggen, String) -> void } -> void
18
+ def analyze: (path: String) { (Siggen, String) -> void } -> void
19
+
20
+ # : (String ruby_string, ?name: String) -> void
21
+ def analyze_ruby: (String ruby_string, ?name: String) -> void
22
+
23
+ # : () -> String
24
+ def generate: () -> String
25
+
26
+ # : (untyped node) ?{ (Parser::AST::Node node, untyped call_of) -> void } -> void
27
+ def traverse: (untyped node) ?{ (Parser::AST::Node node, untyped call_of) -> void } -> void
28
+ end
29
+ end
@@ -0,0 +1,5 @@
1
+ module RBS
2
+ class Siggen
3
+ VERSION: String
4
+ end
5
+ end
metadata ADDED
@@ -0,0 +1,85 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rbs-siggen
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Koji NAKAMURA
8
+ bindir: exe
9
+ cert_chain: []
10
+ date: 1980-01-02 00:00:00.000000000 Z
11
+ dependencies:
12
+ - !ruby/object:Gem::Dependency
13
+ name: rbs
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - "~>"
17
+ - !ruby/object:Gem::Version
18
+ version: '3.0'
19
+ type: :runtime
20
+ prerelease: false
21
+ version_requirements: !ruby/object:Gem::Requirement
22
+ requirements:
23
+ - - "~>"
24
+ - !ruby/object:Gem::Version
25
+ version: '3.0'
26
+ - !ruby/object:Gem::Dependency
27
+ name: steep
28
+ requirement: !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - "~>"
31
+ - !ruby/object:Gem::Version
32
+ version: '1.10'
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '1.10'
40
+ description: RBS::Siggen
41
+ email:
42
+ - kozy4324@gmail.com
43
+ executables:
44
+ - rbs-siggen
45
+ extensions: []
46
+ extra_rdoc_files: []
47
+ files:
48
+ - LICENSE.txt
49
+ - README.md
50
+ - Rakefile
51
+ - Steepfile
52
+ - exe/rbs-siggen
53
+ - lib/rbs/siggen.rb
54
+ - lib/rbs/siggen/version.rb
55
+ - rbs_collection.lock.yaml
56
+ - rbs_collection.yaml
57
+ - sig/generated/rbs/siggen.rbs
58
+ - sig/rbs/siggen.rbs
59
+ homepage: https://github.com/kozy4324/rbs-siggen
60
+ licenses:
61
+ - MIT
62
+ metadata:
63
+ allowed_push_host: https://rubygems.org
64
+ homepage_uri: https://github.com/kozy4324/rbs-siggen
65
+ source_code_uri: https://github.com/kozy4324/rbs-siggen
66
+ changelog_uri: https://github.com/kozy4324/rbs-siggen/releases
67
+ rubygems_mfa_required: 'true'
68
+ rdoc_options: []
69
+ require_paths:
70
+ - lib
71
+ required_ruby_version: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: 3.2.0
76
+ required_rubygems_version: !ruby/object:Gem::Requirement
77
+ requirements:
78
+ - - ">="
79
+ - !ruby/object:Gem::Version
80
+ version: '0'
81
+ requirements: []
82
+ rubygems_version: 4.0.3
83
+ specification_version: 4
84
+ summary: RBS::Siggen
85
+ test_files: []