orthoses 0.7.0 → 0.10.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 894390a9b9736bc6c773da2d8522b76a47a4f345f1eb48c847b4dc2cf691cfe4
4
- data.tar.gz: 9189fdd9d19a953227093f99cd04e8a20f258e231e40b40ed5e7582cd5ac107c
3
+ metadata.gz: c0818d6847c70769b9111a99016d92dff5d4b369485ec5df1752ac847895c077
4
+ data.tar.gz: d7b7866d290d31836a4fa860662b7abd44da2a4dd79ae0e8f0be4a3aa127cd86
5
5
  SHA512:
6
- metadata.gz: 90d06b917b9fb9aa88a18bae14bd792fe85520a8d8cf9f75c8d422f080cfe992036f3b1d2b9e115f1a6ff315478899a2b275d6ae99bdd6c5598bdcc21e3ddf56
7
- data.tar.gz: 4d134a532af9973901e87fa48d1e96d9ca1469b46fa266d548476d252f8651dce94b40ee3de799dd7aa10f5d961e06d330048b5c833af88eee536965779dd131
6
+ metadata.gz: ae990a63a96d5d6e4c7a0053203695564451fb709fbcc139cce1d4c6dc8962a10c9bb7b78667be1eccf5dd8ccd69447da97cd011bb58beaa9cacf3dbb951e3ec
7
+ data.tar.gz: 137f461a5286b3dc9d30c9c71d91fc61f6d948d743f9151b5e9b150dd47cecbe43d6d10073eb29de633bd51f12b3d43afed8ffccf29d52278a035ecbb2757c33
data/Gemfile CHANGED
@@ -5,6 +5,7 @@ source "https://rubygems.org"
5
5
  # Specify your gem's dependencies in orthoses.gemspec
6
6
  gemspec
7
7
 
8
+ gem "rbs"
8
9
  gem "rake", "~> 13.0"
9
10
  gem "rgot", "~> 1.1"
10
11
  gem "steep"
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- orthoses (0.7.0)
4
+ orthoses (0.10.0)
5
5
  rbs (~> 2.0)
6
6
 
7
7
  GEM
@@ -21,7 +21,7 @@ GEM
21
21
  listen (3.7.1)
22
22
  rb-fsevent (~> 0.10, >= 0.10.3)
23
23
  rb-inotify (~> 0.9, >= 0.9.10)
24
- minitest (5.15.0)
24
+ minitest (5.16.1)
25
25
  parallel (1.22.1)
26
26
  parser (3.1.2.0)
27
27
  ast (~> 2.4.1)
@@ -30,14 +30,14 @@ GEM
30
30
  rb-fsevent (0.11.1)
31
31
  rb-inotify (0.10.1)
32
32
  ffi (~> 1.0)
33
- rbs (2.5.0)
33
+ rbs (2.6.0)
34
34
  rgot (1.1.0)
35
- steep (1.0.0)
35
+ steep (1.0.1)
36
36
  activesupport (>= 5.1)
37
37
  language_server-protocol (>= 3.15, < 4.0)
38
38
  listen (~> 3.0)
39
39
  parallel (>= 1.0.0)
40
- parser (>= 3.0)
40
+ parser (>= 3.1)
41
41
  rainbow (>= 2.2.2, < 4.0)
42
42
  rbs (>= 2.3.2)
43
43
  terminal-table (>= 2, < 4)
@@ -54,6 +54,7 @@ DEPENDENCIES
54
54
  activesupport
55
55
  orthoses!
56
56
  rake (~> 13.0)
57
+ rbs
57
58
  rgot (~> 1.1)
58
59
  steep
59
60
 
data/README.md CHANGED
@@ -41,6 +41,34 @@ Orthoses::Builder.new do
41
41
  end.call
42
42
  ```
43
43
 
44
+ ## Utils
45
+
46
+ `Orthoses::Utils` is a collection of useful methods.
47
+
48
+ ### Orthoses::Utils.each_const_recursive
49
+
50
+ Yield const by recursive.
51
+
52
+ ### Orthoses::Utils.rbs_defined_const?
53
+
54
+ Checks if the const name is already defined.
55
+
56
+ ### Orthoses::Utils.rbs_defined_class?
57
+
58
+ Checks if the class name is already defined.
59
+
60
+ ### Orthoses::Utils.rbs_environment
61
+
62
+ Fetch cached `RBS::Environment`.
63
+
64
+ ### Orthoses::Utils.object_to_rbs
65
+
66
+ Convert Ruby object to RBS string.
67
+
68
+ ### Orthoses::Utils.module_name
69
+
70
+ Get true module name by `Module.instance_method(:name).bind(mod).call`.
71
+
44
72
  ## Middlewares
45
73
 
46
74
  ### Orthoses::Constant
@@ -48,10 +76,14 @@ end.call
48
76
  Add constant signature to class/module.
49
77
  Signatures are predicted from constant values.
50
78
 
79
+ ### Orthoses::Attribute
80
+
81
+ Add `attr`, `attr_accessor`, `attr_reader` and `attr_writer` to output RBS.
82
+ All type set `untyped`.
83
+
51
84
  ### Orthoses::Mixin
52
85
 
53
86
  Add module include/extend/prepend definition.
54
- It use `Module#{includeed,extended,prepended}` for capture.
55
87
 
56
88
  ### Orthoses::ObjectSpaceAll
57
89
 
@@ -115,11 +147,19 @@ Run `rbs prototype rb` command process to `paths` option files.
115
147
  `content_filter` option could filter with content decl.
116
148
  `mixin_filter` option could filter with mixin(include, extend, prepend) decl.
117
149
 
150
+ ### Orthoses::RBSPrototypeRuntime
151
+
152
+ Run `rbs prototype runtime` command process with `patterns` option string.
153
+
118
154
  ### Orthoses::AvoidRecursiveAncestorError
119
155
 
120
156
  Mixin a module into an Object class raises `RBS::RecursiveAncestorError` when validation.
121
157
  Please add this middleware then.
122
158
 
159
+ ### Orthoses::Autoload
160
+
161
+ Force load const defined by `autoload`.
162
+
123
163
  ## Development
124
164
 
125
165
  After checking out the repo, run `bin/setup` to install dependencies. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
@@ -23,41 +23,40 @@ module Orthoses
23
23
  end
24
24
 
25
25
  def call
26
- Module.prepend(Hook)
26
+ ::Module.prepend(Hook)
27
27
 
28
28
  attr = CallTracer.new
29
29
  attr_accessor = CallTracer.new
30
30
  attr_reader = CallTracer.new
31
31
  attr_writer = CallTracer.new
32
32
 
33
- store = attr.trace(Hook.method(:attr)) do
34
- attr_accessor.trace(Hook.method(:attr_accessor)) do
35
- attr_reader.trace(Hook.method(:attr_reader)) do
36
- attr_writer.trace(Hook.method(:attr_writer)) do
33
+ store = attr.trace(Hook.instance_method(:attr)) do
34
+ attr_accessor.trace(Hook.instance_method(:attr_accessor)) do
35
+ attr_reader.trace(Hook.instance_method(:attr_reader)) do
36
+ attr_writer.trace(Hook.instance_method(:attr_writer)) do
37
37
  @loader.call
38
38
  end
39
39
  end
40
40
  end
41
41
  end
42
42
 
43
- store["Module"].body.delete("prepend Orthoses::Attribute::Hook")
44
-
45
- attr.result.each do |method, argument|
46
- m = method.receiver.to_s.match(/#<Class:([\w:]+)>/)
43
+ attr.captures.each do |capture|
44
+ m = capture.method.receiver.to_s.match(/#<Class:([\w:]+)>/)
47
45
  if m && m[1]
48
46
  receiver_name = m[1]
49
47
  prefix = "self."
50
48
  else
51
- receiver_name = Utils.module_name(method.receiver) or next
49
+ receiver_name = Utils.module_name(capture.method.receiver) or next
52
50
  prefix = nil
53
51
  end
54
52
  content = store[receiver_name]
55
- if argument[:names][1].equal?(true)
56
- content << "attr_accessor #{prefix}#{argument[:names][0]}: untyped"
57
- elsif argument[:names][1].equal?(false)
58
- content << "attr_reader #{prefix}#{argument[:names][0]}: untyped"
53
+ names = capture.argument[:names]
54
+ if names[1].equal?(true)
55
+ content << "attr_accessor #{prefix}#{names[0]}: untyped"
56
+ elsif names[1].equal?(false)
57
+ content << "attr_reader #{prefix}#{names[0]}: untyped"
59
58
  else
60
- argument[:names].each do |name|
59
+ names.each do |name|
61
60
  content << "attr_reader #{prefix}#{name}: untyped"
62
61
  end
63
62
  end
@@ -79,16 +78,17 @@ module Orthoses
79
78
  private
80
79
 
81
80
  def each_definition(call_tracer)
82
- call_tracer.result.each do |method, argument|
83
- m = method.receiver.to_s.match(/#<Class:([\w:]+)>/)
81
+ call_tracer.captures.each do |capture|
82
+ m = capture.method.receiver.to_s.match(/#<Class:([\w:]+)>/)
83
+ names = capture.argument[:names]
84
84
  if m && m[1]
85
85
  receiver_name = m[1]
86
- argument[:names].each do |name|
86
+ names.each do |name|
87
87
  yield [receiver_name, "self.#{name}"]
88
88
  end
89
89
  else
90
- receiver_name = Utils.module_name(method.receiver) or next
91
- argument[:names].each do |name|
90
+ receiver_name = Utils.module_name(capture.method.receiver) or next
91
+ names.each do |name|
92
92
  yield [receiver_name, name]
93
93
  end
94
94
  end
@@ -0,0 +1,37 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Orthoses
4
+ class Autoload
5
+ module Hook
6
+ def autoload(name, path)
7
+ super
8
+ end
9
+ end
10
+
11
+ def initialize(loader)
12
+ @loader = loader
13
+ end
14
+
15
+ def call
16
+ ::Module.prepend(Hook)
17
+
18
+ autoload = CallTracer.new
19
+
20
+ store = autoload.trace(Hook.instance_method(:autoload)) do
21
+ @loader.call
22
+ end
23
+
24
+ autoload.captures.each do |capture|
25
+ base_mod = capture.method.receiver
26
+ name = capture.argument[:name]
27
+ begin
28
+ base_mod.const_get(name)
29
+ rescue NameError, LoadError, ArgumentError => e
30
+ Orthoses.logger.warn("[Orthoses::Autoload] raise `#{e.message} (#{e.class})` when try to unautoload `#{base_mod}::#{name}`")
31
+ end
32
+ end
33
+
34
+ store
35
+ end
36
+ end
37
+ end
@@ -7,16 +7,19 @@ module Orthoses
7
7
  # scope.trace(ActiveRecord::Base.method(:scope)) do
8
8
  # @loader.call
9
9
  # end
10
- # scope.result.each do |method, argument|
11
- # argument[:name]
12
- # argument[:body]
13
- # argument[:block]
10
+ # scope.captures.each do |capture|
11
+ # capture.argument[:name]
12
+ # capture.argument[:body]
13
+ # capture.argument[:block]
14
14
  # end
15
15
  class CallTracer
16
- attr_accessor :result
16
+ class Capture < Struct.new(:method, :argument, keyword_init: true)
17
+ end
18
+
19
+ attr_accessor :captures
17
20
 
18
21
  def initialize
19
- @result = []
22
+ @captures = []
20
23
  end
21
24
 
22
25
  def trace(target, &block)
@@ -46,7 +49,11 @@ module Orthoses
46
49
  end
47
50
  end
48
51
  end
49
- @result << [called_method, argument]
52
+
53
+ @captures << Capture.new(
54
+ method: called_method,
55
+ argument: argument,
56
+ )
50
57
  end
51
58
  t.enable(target: target, &block)
52
59
  end
@@ -86,15 +86,29 @@ module Orthoses
86
86
  writer = RBS::Writer.new(out: out)
87
87
  decls.each do |decl|
88
88
  next unless decl.respond_to?(:members)
89
+ last_visibility = :public
89
90
  decl.members.each do |member|
90
91
  next if member.respond_to?(:members)
91
92
  case member
92
93
  when RBS::AST::Declarations::Constant
93
94
  next unless @constant_filter.nil? || @constant_filter.call(member)
95
+ when RBS::AST::Members::MethodDefinition
96
+ if last_visibility == :private && member.kind != :singleton_instance
97
+ member.instance_variable_set(:@visibility, :private)
98
+ end
94
99
  when RBS::AST::Members::Mixin
95
100
  next unless @mixin_filter.nil? || @mixin_filter.call(member)
96
101
  when RBS::AST::Members::Attribute
97
102
  next unless @attribute_filter.nil? || @attribute_filter.call(member)
103
+ if last_visibility == :private
104
+ member.instance_variable_set(:@visibility, :private)
105
+ end
106
+ when RBS::AST::Members::Public
107
+ last_visibility = :public
108
+ next
109
+ when RBS::AST::Members::Private
110
+ last_visibility = :private
111
+ next
98
112
  end
99
113
  writer.write_member(member)
100
114
  end
@@ -43,13 +43,9 @@ module Orthoses
43
43
  end
44
44
 
45
45
  def build_super_class(primary)
46
- return nil if primary.decl.super_class.then { |s| s.nil? || s.name.relative!.to_s.then { |n| n == "Object" || n == "Random::Base" } }
47
-
48
- context = primary.outer.length.times.map do |i|
49
- primary.outer[0, i + 1].map(&:name).inject(:+).to_namespace.absolute!
50
- end
51
- context.push(RBS::Namespace.root)
46
+ return nil if primary.decl.super_class.then { |s| s.nil? || s.name.relative!.to_s.then { |n| n == "Object" || n == "Random::Base" || n.start_with?("RBS::Unnamed") } }
52
47
 
48
+ context = build_context(entry: primary)
53
49
  super_class_name = @resolver.resolve(primary.decl.super_class.name, context: context) || primary.decl.super_class.name
54
50
  if primary.decl.super_class.args.empty?
55
51
  if super_class_entry = @env.class_decls[super_class_name]
@@ -65,7 +61,16 @@ module Orthoses
65
61
 
66
62
  def build_interface(entry:, name_hint: nil)
67
63
  full_name = name_hint || entry.decl.name.relative!
68
- "interface #{name_and_params(full_name, entry.decl.type_params)}"
64
+ context = build_context(entry: entry)
65
+ resolved_name = @resolver.resolve(full_name, context: context) || full_name
66
+ "interface #{name_and_params(resolved_name.relative!, entry.decl.type_params)}"
67
+ end
68
+
69
+ def build_context(entry:)
70
+ context = entry.outer.length.times.map do |i|
71
+ entry.outer[0, i + 1].map(&:name).inject(:+).to_namespace.absolute!
72
+ end
73
+ context.push(RBS::Namespace.root)
69
74
  end
70
75
 
71
76
  def name_and_params(name, params)
@@ -81,11 +81,6 @@ module Orthoses
81
81
  end
82
82
 
83
83
  def auto_header
84
- if name.split('::').last.start_with?('_')
85
- self.header = "interface #{name}"
86
- return
87
- end
88
-
89
84
  env = Utils.rbs_environment(collection: true)
90
85
  if entry = env.class_decls[TypeName(name).absolute!]
91
86
  @header = Content::HeaderBuilder.new(env: env).build(entry: entry)
@@ -94,6 +89,11 @@ module Orthoses
94
89
 
95
90
  return unless @header.nil?
96
91
 
92
+ if name.split('::').last.start_with?('_')
93
+ self.header = "interface #{name}"
94
+ return
95
+ end
96
+
97
97
  val = Object.const_get(name)
98
98
 
99
99
  case val
@@ -2,31 +2,44 @@
2
2
 
3
3
  module Orthoses
4
4
  class DelegateClass
5
+ module Hook
6
+ def inherited(subclass)
7
+ super
8
+ end
9
+ end
10
+
5
11
  def initialize(loader)
6
12
  @loader = loader
7
13
  end
8
14
 
9
15
  def call
10
16
  require 'delegate'
11
- classes = []
12
- Class.class_eval do
13
- define_method(:inherited) do |subclass|
14
- classes << [subclass, self]
15
- end
16
- end
17
+ ::Class.prepend(Hook)
18
+
19
+ inherited = CallTracer.new
20
+
17
21
  delegate_class_super_map = {}
18
22
  delegate_class_tracer = TracePoint.new(:return) do |tp|
19
23
  return_value = tp.return_value
20
24
  superclass = tp.binding.local_variable_get(:superclass)
21
25
  delegate_class_super_map[return_value] = superclass
22
26
  end
27
+
23
28
  store = delegate_class_tracer.enable(target: method(:DelegateClass)) do
24
- @loader.call
29
+ inherited.trace(Hook.instance_method(:inherited)) do
30
+ @loader.call
31
+ end
25
32
  end
26
- classes.each do |subclass, superclass|
33
+
34
+ store["Class"].body.delete("prepend Orthoses::DelegateClass::Hook")
35
+
36
+ inherited.captures.each do |capture|
37
+ superclass = capture.method.receiver
27
38
  if delegate_to_class = delegate_class_super_map[superclass]
39
+ subclass = capture.argument[:subclass]
28
40
  subclass_name = Utils.module_name(subclass)
29
41
  next unless subclass_name
42
+
30
43
  delegate_to_class_name = Utils.module_name(delegate_to_class)
31
44
  next unless delegate_to_class_name
32
45
 
@@ -34,6 +47,7 @@ module Orthoses
34
47
  store[subclass_name].header = header
35
48
  end
36
49
  end
50
+
37
51
  store
38
52
  end
39
53
 
@@ -11,7 +11,9 @@ module Orthoses
11
11
 
12
12
  def call
13
13
  @loader.call.tap do |store|
14
- env = Content::Environment.load_from_paths(@paths)
14
+ paths = @paths
15
+ paths = paths.call if paths.instance_of?(Proc)
16
+ env = Content::Environment.load_from_paths(paths.to_a)
15
17
  env.write_to(store: store)
16
18
  end
17
19
  end
@@ -2,49 +2,71 @@
2
2
 
3
3
  module Orthoses
4
4
  class Mixin
5
+ module Hook
6
+ def include(*modules)
7
+ super
8
+ end
9
+ def extend(*modules)
10
+ super
11
+ end
12
+ def prepend(*modules)
13
+ super
14
+ end
15
+ end
16
+
5
17
  def initialize(loader, if: nil)
6
18
  @loader = loader
7
19
  @if = binding.local_variable_get(:if)
8
20
  end
9
21
 
10
22
  def call
11
- modules = Hash.new { |h, k| h[k] = [] }
12
- ::Module.module_eval do
13
- define_method(:included) do |mod|
14
- modules[mod] << [:include, self]
15
- end
23
+ ::Module.prepend(Hook)
16
24
 
17
- define_method(:extended) do |mod|
18
- modules[mod] << [:extend, self]
19
- end
25
+ include = CallTracer.new
26
+ extend = CallTracer.new
27
+ prepend = CallTracer.new
20
28
 
21
- define_method(:prepended) do |mod|
22
- modules[mod] << [:prepend, self]
29
+ store = include.trace(Hook.instance_method(:include)) do
30
+ extend.trace(Hook.instance_method(:extend)) do
31
+ prepend.trace(Hook.instance_method(:prepend)) do
32
+ @loader.call
33
+ end
23
34
  end
24
35
  end
25
36
 
26
- store = @loader.call
37
+ collect_definitions(store, include, :include)
38
+ collect_definitions(store, extend, :extend)
39
+ collect_definitions(store, prepend, :prepend)
40
+
41
+ store
42
+ end
43
+
44
+ private
27
45
 
28
- modules.each do |base_mod, how_mods|
46
+ def collect_definitions(store, call_tracer, how)
47
+ call_tracer.captures.each do |capture|
48
+ base_mod = capture.method.receiver
29
49
  next unless base_mod.kind_of?(Module)
50
+
30
51
  base_mod_name = Utils.module_name(base_mod)
31
52
  next unless base_mod_name
32
53
 
33
- lines = how_mods.filter.map do |how, mod|
54
+ content = store[base_mod_name]
55
+ capture.argument[:modules].each do |mod|
34
56
  mod_name = Utils.module_name(mod)
35
57
  next unless mod_name
58
+
59
+ next if mod_name.start_with?("Orthoses")
60
+
36
61
  known_type_params = Utils.known_type_params(mod)
37
62
  next unless known_type_params.nil? || known_type_params.empty?
63
+
38
64
  next unless @if.nil? || @if.call(base_mod, how, mod)
39
65
 
40
66
  store[mod_name]
41
-
42
- "#{how} #{mod_name}"
67
+ content << "#{how} #{mod_name}"
43
68
  end
44
- store[base_mod_name].concat(lines)
45
69
  end
46
-
47
- store
48
70
  end
49
71
  end
50
72
  end
@@ -0,0 +1,38 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Helper for find best version dir.
4
+ # Orthoses::PathHelper.best_version_paths(
5
+ # ::ActiveSupport::VERSION::STRING,
6
+ # "known_sig/activesupport")
7
+ module Orthoses
8
+ class PathHelper
9
+ class << self
10
+ def best_version_paths(current, base_dir)
11
+ new(current, base_dir).best_version_paths
12
+ end
13
+ end
14
+
15
+ def initialize(current, base_dir)
16
+ @current = current
17
+ @base_dir = base_dir
18
+ end
19
+
20
+ def best_version_paths
21
+ best_version = find_best_version
22
+ Dir.glob("#{@base_dir}/#{best_version}/**/*.rbs")
23
+ end
24
+
25
+ def find_best_version
26
+ current_v = Gem::Version.new(@current)
27
+ versions = version_dir
28
+ versions.reverse.bsearch { |v| v <= current_v } || versions.first
29
+ end
30
+
31
+ def version_dir
32
+ Dir.glob("#{@base_dir}/*")
33
+ .map(&File.method(:basename))
34
+ .map(&Gem::Version.method(:new))
35
+ .sort
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,32 @@
1
+ module Orthoses
2
+ # Call `rbs prototype runtime` and add to store
3
+ # use Orthoses::RBSPrototypeRuntime,
4
+ # patterns: ['Foo::*']
5
+ class RBSPrototypeRuntime
6
+ def initialize(loader, patterns:)
7
+ @loader = loader
8
+ @patterns = patterns
9
+ end
10
+
11
+ def call
12
+ @loader.call.tap do |store|
13
+ content_env = Orthoses::Content::Environment.new
14
+
15
+ patterns = @patterns
16
+ env = RBS::Environment.new
17
+ merge = true
18
+ owners_included = []
19
+ RBS::Prototype::Runtime.new(
20
+ patterns: patterns,
21
+ env: env,
22
+ merge: merge,
23
+ owners_included: owners_included,
24
+ ).decls.each do |decl|
25
+ content_env << decl
26
+ end
27
+
28
+ content_env.write_to(store: store)
29
+ end
30
+ end
31
+ end
32
+ end
@@ -3,13 +3,14 @@
3
3
  module Orthoses
4
4
  module Utils
5
5
  def self.unautoload!
6
+ warn "`Orthoses::Utils.unautoload!` is deprecated. please use `Orthoses::Autoload` middleware instead."
6
7
  ObjectSpace.each_object(Module) do |mod|
7
8
  each_const_recursive(mod)
8
9
  end
9
10
  end
10
11
 
11
12
  def self.each_const_recursive(root, cache: {}, on_error: nil, &block)
12
- root.constants(false).each do |const|
13
+ root.constants(false).sort.each do |const|
13
14
  val = root.const_get(const)
14
15
  next if cache[const].equal?(val)
15
16
  cache[const] = val
@@ -101,12 +102,16 @@ module Orthoses
101
102
  def self.object_to_rbs(object, strict:)
102
103
  case object
103
104
  when Class, Module
104
- "singleton(#{object})"
105
+ if name = module_name(object)
106
+ "singleton(#{name})"
107
+ else
108
+ "untyped"
109
+ end
105
110
  when Integer, Symbol, String
106
111
  if strict
107
112
  object.inspect
108
113
  else
109
- Utils.module_name(object.class) || 'untyped'
114
+ module_name(object.class) || 'untyped'
110
115
  end
111
116
  when true, false, nil
112
117
  object.inspect
@@ -151,7 +156,7 @@ module Orthoses
151
156
  # see also https://github.com/ruby/rbs/pull/975
152
157
  'untyped'
153
158
  else
154
- Utils.module_name(object.class) || 'untyped'
159
+ module_name(object.class) || 'untyped'
155
160
  end
156
161
  end
157
162
 
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Orthoses
4
- VERSION = "0.7.0"
4
+ VERSION = "0.10.0"
5
5
  end
data/lib/orthoses.rb CHANGED
@@ -15,10 +15,13 @@ require_relative 'orthoses/filter'
15
15
  require_relative 'orthoses/mixin'
16
16
  require_relative 'orthoses/load_rbs'
17
17
  require_relative 'orthoses/object_space_all'
18
+ require_relative 'orthoses/path_helper'
18
19
  require_relative 'orthoses/pp'
19
20
  require_relative 'orthoses/rbs_prototype_rb'
21
+ require_relative 'orthoses/rbs_prototype_runtime'
20
22
  require_relative 'orthoses/store'
21
23
  require_relative 'orthoses/tap'
24
+ require_relative 'orthoses/autoload'
22
25
  require_relative 'orthoses/utils'
23
26
  require_relative 'orthoses/version'
24
27
  require_relative 'orthoses/walk'
@@ -3,7 +3,6 @@
3
3
  class Orthoses::Attribute
4
4
  def initialize: (Orthoses::_Call loader) -> void
5
5
  def call: () -> Orthoses::store
6
- private
7
- def each_definition: (untyped call_tracer) { (untyped) -> untyped } -> untyped
6
+ private def each_definition: (untyped call_tracer) { (untyped) -> untyped } -> untyped
8
7
  @loader: Orthoses::_Call
9
8
  end
@@ -0,0 +1,5 @@
1
+ # THIS IS GENERATED CODE from `$ rake generate_self_sig`
2
+
3
+ module Orthoses::Autoload::Hook
4
+ def autoload: (untyped name, untyped path) -> untyped
5
+ end
@@ -0,0 +1,6 @@
1
+ # THIS IS GENERATED CODE from `$ rake generate_self_sig`
2
+
3
+ class Orthoses::Autoload
4
+ def initialize: (untyped loader) -> void
5
+ def call: () -> untyped
6
+ end
@@ -1,8 +1,8 @@
1
1
  # THIS IS GENERATED CODE from `$ rake generate_self_sig`
2
2
 
3
3
  class Orthoses::Builder
4
- def initialize: () { () -> untyped } -> void
5
- def use: (untyped middleware, *untyped args, **untyped key) { () -> untyped } -> untyped
4
+ def initialize: () ?{ () -> untyped } -> void
5
+ def use: (untyped middleware, *untyped args, **untyped key) ?{ () -> untyped } -> untyped
6
6
  def run: (untyped loader) -> untyped
7
7
  def to_loader: () -> untyped
8
8
 
@@ -0,0 +1,6 @@
1
+ # THIS IS GENERATED CODE from `$ rake generate_self_sig`
2
+
3
+ class Orthoses::CallTracer::Capture < ::Struct[untyped]
4
+ def method: () -> Method
5
+ def argument: () -> Hash[Symbol, untyped]
6
+ end
@@ -4,5 +4,5 @@ class Orthoses::CallTracer
4
4
  def initialize: () -> void
5
5
 
6
6
  def trace: [T] (Method | UnboundMethod) ?{ () -> T } -> T
7
- attr_accessor result: Array[[ Method, Hash[Symbol, untyped] ]]
7
+ attr_accessor captures: Array[Capture]
8
8
  end
@@ -3,8 +3,7 @@
3
3
  class Orthoses::Content::DuplicationChecker
4
4
  def initialize: (untyped decl) -> void
5
5
  def update_decl: () -> untyped
6
- private
7
- def drop_known_method_definition: (untyped uniq_map) -> untyped
8
- def member_to_s: (untyped member) -> untyped
9
- def member_key: (untyped member) -> untyped
6
+ private def drop_known_method_definition: (untyped uniq_map) -> untyped
7
+ private def member_to_s: (untyped member) -> untyped
8
+ private def member_key: (untyped member) -> untyped
10
9
  end
@@ -7,12 +7,11 @@ class Orthoses::Content::Environment
7
7
  def <<: (RBS::AST::Declarations::t decl) -> RBS::Environment
8
8
  def write_to: (store: Orthoses::store) -> void
9
9
  def each: () { (Orthoses::Content) -> void } -> void
10
- private
11
10
  # Avoid `RBS::GenericParameterMismatchError` from like rbs_prototype_rb
12
11
  # class Array # <= RBS::GenericParameterMismatchError
13
12
  # end
14
- def avoid_generic_parameter_mismatch_error: () -> untyped
15
- def decls_to_lines: (untyped decls) -> untyped
13
+ private def avoid_generic_parameter_mismatch_error: () -> untyped
14
+ private def decls_to_lines: (untyped decls) -> untyped
16
15
  type constant_filter = ^(RBS::AST::Declarations::Constant) -> boolish
17
16
  type mixin_filter = ^(RBS::AST::Members::Mixin) -> boolish
18
17
  type attribute_filter = ^(RBS::AST::Members::Attribute) -> boolish
@@ -3,11 +3,11 @@
3
3
  class Orthoses::Content::HeaderBuilder
4
4
  def initialize: (env: untyped) -> void
5
5
  def build: (entry: untyped, ?name_hint: untyped?) -> untyped
6
- private
7
- def build_module: (entry: untyped, ?name_hint: untyped?) -> ::String
8
- def build_class: (entry: untyped, ?name_hint: untyped?) -> ::String
9
- def build_super_class: (untyped primary) -> (nil | untyped)
10
- def build_interface: (entry: untyped, ?name_hint: untyped?) -> ::String
11
- def name_and_params: (untyped name, untyped params) -> ::String
12
- def name_and_args: (untyped name, untyped args) -> (::String | nil)
6
+ private def build_module: (entry: untyped, ?name_hint: untyped?) -> ::String
7
+ private def build_class: (entry: untyped, ?name_hint: untyped?) -> ::String
8
+ private def build_super_class: (untyped primary) -> (nil | untyped)
9
+ private def build_interface: (entry: untyped, ?name_hint: untyped?) -> ::String
10
+ private def build_context: (entry: untyped) -> untyped
11
+ private def name_and_params: (untyped name, untyped params) -> ::String
12
+ private def name_and_args: (untyped name, untyped args) -> (::String | nil)
13
13
  end
@@ -6,15 +6,13 @@ class Orthoses::Content
6
6
  def concat: (Array[String]) -> void
7
7
  def to_rbs: () -> String
8
8
  def to_decl: () -> untyped
9
+ private def original_rbs: () -> ::String
9
10
 
10
- private
11
- def original_rbs: () -> ::String
12
-
13
- def uniqed_body_string: () -> String
14
- def uniqed_body_decl: () -> RBS::AST::Declarations::t
15
- def auto_header: () -> (nil | untyped)
16
- def temporary_type_params: (untyped name) -> untyped
17
- def type_params: (untyped name) -> untyped
11
+ private def uniqed_body_string: () -> String
12
+ private def uniqed_body_decl: () -> RBS::AST::Declarations::t
13
+ private def auto_header: () -> (nil | untyped)
14
+ private def temporary_type_params: (untyped name) -> untyped
15
+ private def type_params: (untyped name) -> untyped
18
16
  attr_reader name: String
19
17
  attr_reader body: Array[String]
20
18
  attr_accessor header: String?
@@ -0,0 +1,5 @@
1
+ # THIS IS GENERATED CODE from `$ rake generate_self_sig`
2
+
3
+ module Orthoses::DelegateClass::Hook
4
+ def inherited: (untyped subclass) -> untyped
5
+ end
@@ -1,8 +1,9 @@
1
1
  # THIS IS GENERATED CODE from `$ rake generate_self_sig`
2
2
 
3
3
  class Orthoses::LoadRBS
4
- def initialize: (Orthoses::_Call loader, paths: Array[_ToS]) -> void
4
+ def initialize: (Orthoses::_Call loader, paths: paths) -> void
5
5
  def call: () -> Orthoses::store
6
+ type paths = Array[String] | ^() -> Array[String]
6
7
  @loader: Orthoses::_Call
7
- @paths: Array[_ToS]
8
+ @paths: paths
8
9
  end
@@ -0,0 +1,9 @@
1
+ # THIS IS GENERATED CODE from `$ rake generate_self_sig`
2
+
3
+ module Orthoses::Mixin::Hook
4
+ def include: (*untyped modules) -> untyped
5
+
6
+ def extend: (*untyped modules) -> untyped
7
+
8
+ def prepend: (*untyped modules) -> untyped
9
+ end
@@ -1,6 +1,8 @@
1
1
  # THIS IS GENERATED CODE from `$ rake generate_self_sig`
2
2
 
3
3
  class Orthoses::Mixin
4
- def initialize: (untyped loader, ?if: untyped?) -> void
5
- def call: () -> untyped
4
+ def initialize: (Orthoses::_Call loader) -> void
5
+ def call: () -> Orthoses::store
6
+ private def collect_definitions: (Orthoses::store store, Orthoses::CallTracer call_tracer, :include | :extend | :prepend how) -> void
7
+ @loader: Orthoses::_Call
6
8
  end
@@ -0,0 +1,9 @@
1
+ # THIS IS GENERATED CODE from `$ rake generate_self_sig`
2
+
3
+ class Orthoses::PathHelper
4
+ def self.best_version_paths: (untyped current, untyped base_dir) -> untyped
5
+ def initialize: (untyped current, untyped base_dir) -> void
6
+ def best_version_paths: () -> untyped
7
+ def find_best_version: () -> untyped
8
+ def version_dir: () -> untyped
9
+ end
@@ -0,0 +1,6 @@
1
+ # THIS IS GENERATED CODE from `$ rake generate_self_sig`
2
+
3
+ class Orthoses::RBSPrototypeRuntime
4
+ def initialize: (untyped loader, patterns: untyped) -> void
5
+ def call: () -> untyped
6
+ end
@@ -1,7 +1,7 @@
1
1
  # THIS IS GENERATED CODE from `$ rake generate_self_sig`
2
2
 
3
3
  module Orthoses::Utils
4
- def self.unautoload!: () -> void
4
+ def self.unautoload!: () -> untyped
5
5
 
6
6
  def self.each_const_recursive: (Module root, ?cache: Hash[untyped, true], ?on_error: ^(Orthoses::ConstLoadError) -> void) ?{ (Module, Symbol, untyped) -> void } -> void
7
7
 
@@ -19,7 +19,7 @@ module Orthoses::Utils
19
19
 
20
20
  def self.module_to_type_name: (Module) -> RBS::TypeName?
21
21
 
22
- def self.known_type_params: (Module | String) -> Array[RBS::AST::TypeParam]
22
+ def self.known_type_params: (Module | String) -> Array[RBS::AST::TypeParam]?
23
23
 
24
24
  def self.new_store: () -> Orthoses::store
25
25
 
data/sig/orthoses.rbs CHANGED
@@ -1,7 +1,7 @@
1
1
  # THIS IS GENERATED CODE from `$ rake generate_self_sig`
2
2
 
3
3
  module Orthoses
4
- VERSION: "0.7.0"
4
+ VERSION: "0.10.0"
5
5
 
6
6
  attr_accessor self.logger: ::Logger
7
7
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: orthoses
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.0
4
+ version: 0.10.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - ksss
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-06-04 00:00:00.000000000 Z
11
+ date: 2022-06-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rbs
@@ -41,6 +41,7 @@ files:
41
41
  - examples/simple_middleware.rbs
42
42
  - lib/orthoses.rb
43
43
  - lib/orthoses/attribute.rb
44
+ - lib/orthoses/autoload.rb
44
45
  - lib/orthoses/avoid_recursive_ancestor_error.rb
45
46
  - lib/orthoses/builder.rb
46
47
  - lib/orthoses/call_tracer.rb
@@ -55,8 +56,10 @@ files:
55
56
  - lib/orthoses/load_rbs.rb
56
57
  - lib/orthoses/mixin.rb
57
58
  - lib/orthoses/object_space_all.rb
59
+ - lib/orthoses/path_helper.rb
58
60
  - lib/orthoses/pp.rb
59
61
  - lib/orthoses/rbs_prototype_rb.rb
62
+ - lib/orthoses/rbs_prototype_runtime.rb
60
63
  - lib/orthoses/store.rb
61
64
  - lib/orthoses/tap.rb
62
65
  - lib/orthoses/utils.rb
@@ -69,10 +72,13 @@ files:
69
72
  - sig/orthoses/_middle_ware.rbs
70
73
  - sig/orthoses/attribute.rbs
71
74
  - sig/orthoses/attribute/hook.rbs
75
+ - sig/orthoses/autoload.rbs
76
+ - sig/orthoses/autoload/hook.rbs
72
77
  - sig/orthoses/avoid_recursive_ancestor_error.rbs
73
78
  - sig/orthoses/builder.rbs
74
79
  - sig/orthoses/builder/call_logable.rbs
75
80
  - sig/orthoses/call_tracer.rbs
81
+ - sig/orthoses/call_tracer/capture.rbs
76
82
  - sig/orthoses/const_load_error.rbs
77
83
  - sig/orthoses/constant.rbs
78
84
  - sig/orthoses/content.rbs
@@ -81,13 +87,17 @@ files:
81
87
  - sig/orthoses/content/header_builder.rbs
82
88
  - sig/orthoses/create_file_by_name.rbs
83
89
  - sig/orthoses/delegate_class.rbs
90
+ - sig/orthoses/delegate_class/hook.rbs
84
91
  - sig/orthoses/filter.rbs
85
92
  - sig/orthoses/load_rbs.rbs
86
93
  - sig/orthoses/mixin.rbs
94
+ - sig/orthoses/mixin/hook.rbs
87
95
  - sig/orthoses/name_space_error.rbs
88
96
  - sig/orthoses/object_space_all.rbs
97
+ - sig/orthoses/path_helper.rbs
89
98
  - sig/orthoses/pp.rbs
90
99
  - sig/orthoses/rbs_prototype_rb.rbs
100
+ - sig/orthoses/rbs_prototype_runtime.rbs
91
101
  - sig/orthoses/store.rbs
92
102
  - sig/orthoses/tap.rbs
93
103
  - sig/orthoses/utils.rbs
@@ -114,7 +124,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
114
124
  - !ruby/object:Gem::Version
115
125
  version: '0'
116
126
  requirements: []
117
- rubygems_version: 3.3.7
127
+ rubygems_version: 3.3.16
118
128
  signing_key:
119
129
  specification_version: 4
120
130
  summary: Framework for Generate RBS