Skip to content

Commit ec7fd30

Browse files
committed
Add Scaffold::RBI
1 parent 7ae43a2 commit ec7fd30

File tree

9 files changed

+835
-1
lines changed

9 files changed

+835
-1
lines changed

lib/ruby/signature.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
require "set"
44
require "json"
55
require "pathname"
6+
require "pp"
67

78
require "ruby/signature/errors"
89
require "ruby/signature/buffer"
@@ -23,5 +24,6 @@
2324
require "ruby/signature/constant"
2425
require "ruby/signature/constant_table"
2526
require "ruby/signature/writer"
27+
require "ruby/signature/scaffold/rbi"
2628

2729
require "ruby/signature/parser"

lib/ruby/signature/builtin_names.rb

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,9 @@ def self.define(name, namespace: Namespace.root)
4141
Enumerable = Name.define(:Enumerable)
4242
Class = Name.define(:Class)
4343
Module = Name.define(:Module)
44+
Array = Name.define(:Array)
45+
Hash = Name.define(:Hash)
46+
Range = Name.define(:Range)
4447
end
4548
end
4649
end

lib/ruby/signature/cli.rb

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ def initialize(stdout:, stderr:)
3737
@stderr = stderr
3838
end
3939

40-
COMMANDS = [:ast, :list, :ancestors, :methods, :method, :validate, :constant, :paths, :version]
40+
COMMANDS = [:ast, :list, :ancestors, :methods, :method, :validate, :constant, :paths, :scaffold, :version]
4141

4242
def library_parse(opts, options:)
4343
opts.on("-r LIBRARY") do |lib|
@@ -392,6 +392,22 @@ def run_paths(args, options)
392392
end
393393
end
394394

395+
def run_scaffold(args, options)
396+
format = args.shift
397+
398+
parser = case format
399+
when "rbi"
400+
Scaffold::RBI.new()
401+
end
402+
403+
args.each do |file|
404+
parser.parse Pathname(file).read, filename: file
405+
end
406+
407+
writer = Writer.new(out: stdout)
408+
writer.write parser.decls
409+
end
410+
395411
def parse_type_name(string)
396412
Namespace.parse(string).yield_self do |namespace|
397413
last = namespace.path.last

lib/ruby/signature/method_type.rb

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,15 @@ def sub(s)
6767
end
6868
end
6969

70+
def update(type_params: self.type_params, type: self.type, block: self.block, location: self.location)
71+
self.class.new(
72+
type_params: type_params,
73+
type: type,
74+
block: block,
75+
location: location
76+
)
77+
end
78+
7079
def free_variables(set = Set.new)
7180
type.free_variables(set)
7281
block&.type&.free_variables(set)

lib/ruby/signature/namespace.rb

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,10 @@ def absolute!
4545
self.class.new(path: path, absolute: true)
4646
end
4747

48+
def relative!
49+
self.class.new(path: path, absolute: false)
50+
end
51+
4852
def empty?
4953
path.empty?
5054
end

0 commit comments

Comments
 (0)