orthoses 0.3.0 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (47) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +3 -3
  3. data/README.md +16 -12
  4. data/examples/minitest/Rakefile +56 -0
  5. data/examples/simple_middleware.rb +11 -0
  6. data/examples/simple_middleware.rbs +7 -0
  7. data/lib/orthoses/attribute.rb +98 -0
  8. data/lib/orthoses/avoid_recursive_ancestor_error.rb +22 -0
  9. data/lib/orthoses/builder.rb +1 -0
  10. data/lib/orthoses/content/duplication_checker.rb +30 -12
  11. data/lib/orthoses/content/environment.rb +44 -47
  12. data/lib/orthoses/content/header_builder.rb +94 -0
  13. data/lib/orthoses/content.rb +50 -29
  14. data/lib/orthoses/load_rbs.rb +1 -8
  15. data/lib/orthoses/mixin.rb +1 -9
  16. data/lib/orthoses/rbs_prototype_rb.rb +4 -1
  17. data/lib/orthoses/utils.rb +33 -7
  18. data/lib/orthoses/version.rb +1 -1
  19. data/lib/orthoses.rb +2 -0
  20. data/sig/orthoses/_call.rbs +1 -1
  21. data/sig/orthoses/attribute/hook.rbs +11 -0
  22. data/sig/orthoses/attribute.rbs +9 -0
  23. data/sig/orthoses/avoid_recursive_ancestor_error.rbs +7 -0
  24. data/sig/orthoses/builder/call_logable.rbs +1 -0
  25. data/sig/orthoses/builder.rbs +5 -0
  26. data/sig/orthoses/call_tracer.rbs +2 -0
  27. data/sig/orthoses/const_load_error.rbs +1 -0
  28. data/sig/orthoses/constant.rbs +5 -2
  29. data/sig/orthoses/content/duplication_checker.rbs +6 -0
  30. data/sig/orthoses/content/environment.rbs +14 -4
  31. data/sig/orthoses/content/header_builder.rbs +13 -0
  32. data/sig/orthoses/content.rbs +10 -0
  33. data/sig/orthoses/create_file_by_name.rbs +2 -2
  34. data/sig/orthoses/delegate_class.rbs +3 -2
  35. data/sig/orthoses/filter.rbs +2 -2
  36. data/sig/orthoses/load_rbs.rbs +2 -2
  37. data/sig/orthoses/mixin.rbs +2 -0
  38. data/sig/orthoses/object_space_all.rbs +2 -2
  39. data/sig/orthoses/pp.rbs +2 -0
  40. data/sig/orthoses/rbs_prototype_rb.rbs +3 -2
  41. data/sig/orthoses/store.rbs +2 -0
  42. data/sig/orthoses/tap.rbs +2 -2
  43. data/sig/orthoses/utils.rbs +6 -4
  44. data/sig/orthoses/walk.rbs +2 -2
  45. data/sig/orthoses/writer.rbs +2 -2
  46. data/sig/orthoses.rbs +1 -1
  47. metadata +12 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2d5b96650f0b18fdb84d67bc6821887ac974e529bf13e05c079ad703645a0583
4
- data.tar.gz: 50a0101c732e7a66d166e0ff4a3f6fd439d7c50ab2985ffb49c618e698f5873f
3
+ metadata.gz: 3fe5907a7edff87d73372b0e6f556d5f3b08a3ae6d7407447f249a25953d069e
4
+ data.tar.gz: 7564345ffdc6363a5ba03bb9c70299b17cb15cdb3cc501bcbd3b221c7b0a823a
5
5
  SHA512:
6
- metadata.gz: 2a9443b508c4dbb2518c656d34441fcedf4d571254834b375a99d97fd3c1443dd8bc4ef165c48334a66e64267efa7e9da7db43f9fcfea7c96d90a023f83e25b9
7
- data.tar.gz: aa13ee94cb12d5729204fa8ecd926142bf56c58f30e9a6e13ee1c73914748fda0d752d3aeb7d31292de677c8ad4c19c5dd8636d919b05664b154cd4d62e0188a
6
+ metadata.gz: 35acabbfbd4ab4c549d8cefdecc829074ade2bc041093432b3a1ae52c095f1d2e8a4420d30754dfd0a1dfb9d09f999fb2885b4f87c7e14c2c3386afff886082f
7
+ data.tar.gz: 01f8881d042a106e720574902abc2227161c65c78b35277618aea2343f8be43dfdcb4d94735ce2f5a7fd62ffb5137e5c928e0bd1e9dd50cd583ecd6819c80d38
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- orthoses (0.3.0)
4
+ orthoses (0.6.0)
5
5
  rbs (~> 2.0)
6
6
 
7
7
  GEM
@@ -30,9 +30,9 @@ GEM
30
30
  rb-fsevent (0.11.1)
31
31
  rb-inotify (0.10.1)
32
32
  ffi (~> 1.0)
33
- rbs (2.4.0)
33
+ rbs (2.5.0)
34
34
  rgot (1.1.0)
35
- steep (0.52.2)
35
+ steep (1.0.0)
36
36
  activesupport (>= 5.1)
37
37
  language_server-protocol (>= 3.15, < 4.0)
38
38
  listen (~> 3.0)
data/README.md CHANGED
@@ -89,18 +89,6 @@ This is very useful for middleware development and debugging.
89
89
  If a class is defined using the `DelegateClass` method
90
90
  RBS is automatically generated as inherited.
91
91
 
92
- ### Orthoses::Writer
93
-
94
- Write output RBS to `io` option object.
95
- `io` should be able to call `#write` method.
96
- This is useful when you want to combine outputs into a single output.
97
-
98
- ### Orthoses::RBSPrototypeRB
99
-
100
- Run `rbs prototype rb` command process to `paths` option files.
101
- `content_filter` option could filter with content decl.
102
- `mixin_filter` option could filter with mixin(include, extend, prepend) decl.
103
-
104
92
  .rb
105
93
 
106
94
  ```rb
@@ -115,6 +103,22 @@ class Tempfile < File
115
103
  end
116
104
  ```
117
105
 
106
+ ### Orthoses::Writer
107
+
108
+ Write output RBS to `io` option object.
109
+ `io` should be able to call `#write` method.
110
+ This is useful when you want to combine outputs into a single output.
111
+
112
+ ### Orthoses::RBSPrototypeRB
113
+
114
+ Run `rbs prototype rb` command process to `paths` option files.
115
+ `content_filter` option could filter with content decl.
116
+ `mixin_filter` option could filter with mixin(include, extend, prepend) decl.
117
+
118
+ ### Orthoses::AvoidRecursiveAncestorError
119
+
120
+ Mixin a module into an Object class raises `RBS::RecursiveAncestorError` when validation.
121
+ Please add this middleware then.
118
122
 
119
123
  ## Development
120
124
 
@@ -0,0 +1,56 @@
1
+ file :src do
2
+ sh "git clone https://github.com/minitest/minitest.git src"
3
+ end
4
+
5
+ desc "generate minitest"
6
+ task :minitest => :src do
7
+ $:.unshift(File.expand_path("src/lib"))
8
+
9
+ out = Pathname('out')
10
+ out.rmtree rescue nil
11
+ require 'orthoses'
12
+
13
+ Orthoses::Builder.new do
14
+ use Orthoses::CreateFileByName,
15
+ base_dir: out.to_s
16
+ use Orthoses::Filter, if: ->(name, content) {
17
+ name.start_with?("Minitest") || name == "Kernel"
18
+ }
19
+ use Orthoses::Constant,
20
+ strict: false,
21
+ if: ->(current, const, val, rbs){
22
+ !Orthoses::Utils.rbs_defined_const?("#{current}::#{const}")
23
+ }
24
+ use Orthoses::Mixin
25
+ use Orthoses::Attribute
26
+ use Orthoses::RBSPrototypeRB,
27
+ paths: Dir.glob('src/lib/minitest{.rb,/*.rb}'),
28
+ constant_filter: ->(_) { false },
29
+ mixin_filter: ->(_) { false },
30
+ attribute_filter: ->(_) { false }
31
+ run ->(){
32
+ require_relative 'src/lib/minitest'
33
+ require_relative 'src/lib/minitest/test'
34
+ require_relative 'src/lib/minitest/spec'
35
+ require_relative 'src/lib/minitest/parallel'
36
+ require_relative 'src/lib/minitest/mock'
37
+ require_relative 'src/lib/minitest/benchmark'
38
+
39
+ require_relative 'src/lib/minitest/pride_plugin'
40
+ }
41
+ end.call
42
+
43
+ sh "rbs -r mutex_m -I #{out} validate --silent"
44
+ out.join("manifest.yaml").write <<~YAML
45
+ dependencies:
46
+ - name: mutex_m
47
+ YAML
48
+ tmp = out.join("kernel.rbs").read
49
+ out.join("kernel.rbs").open("w") do |f|
50
+ f.puts "%a{annotate:rdoc:skip}"
51
+ f.write tmp
52
+ end
53
+ sh "rbs annotate --gems out"
54
+ end
55
+
56
+ task default: :minitest
@@ -0,0 +1,11 @@
1
+ module Orthoses
2
+ class Simple
3
+ def initialize(loader)
4
+ @loader = loader
5
+ end
6
+
7
+ def call
8
+ @loader.call
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,7 @@
1
+ module Orthoses
2
+ class Simple
3
+ @loader: Orthoses::_Call
4
+ include Orthoses::_MiddleWare
5
+ def initialize: (Orthoses::_Call loader) -> void
6
+ end
7
+ end
@@ -0,0 +1,98 @@
1
+ module Orthoses
2
+ class Attribute
3
+ module Hook
4
+ def attr(*names)
5
+ super
6
+ end
7
+
8
+ def attr_accessor(*names)
9
+ super
10
+ end
11
+
12
+ def attr_reader(*names)
13
+ super
14
+ end
15
+
16
+ def attr_writer(*names)
17
+ super
18
+ end
19
+ end
20
+
21
+ def initialize(loader)
22
+ @loader = loader
23
+ end
24
+
25
+ def call
26
+ Module.prepend(Hook)
27
+
28
+ attr = CallTracer.new
29
+ attr_accessor = CallTracer.new
30
+ attr_reader = CallTracer.new
31
+ attr_writer = CallTracer.new
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
37
+ @loader.call
38
+ end
39
+ end
40
+ end
41
+ end
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:]+)>/)
47
+ if m && m[1]
48
+ receiver_name = m[1]
49
+ prefix = "self."
50
+ else
51
+ receiver_name = Utils.module_name(method.receiver) or next
52
+ prefix = nil
53
+ end
54
+ 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"
59
+ else
60
+ argument[:names].each do |name|
61
+ content << "attr_reader #{prefix}#{name}: untyped"
62
+ end
63
+ end
64
+ end
65
+
66
+ each_definition(attr_accessor) do |receiver_name, name|
67
+ store[receiver_name] << "attr_accessor #{name}: untyped"
68
+ end
69
+ each_definition(attr_reader) do |receiver_name, name|
70
+ store[receiver_name] << "attr_reader #{name}: untyped"
71
+ end
72
+ each_definition(attr_writer) do |receiver_name, name|
73
+ store[receiver_name] << "attr_writer #{name}: untyped"
74
+ end
75
+
76
+ store
77
+ end
78
+
79
+ private
80
+
81
+ def each_definition(call_tracer)
82
+ call_tracer.result.each do |method, argument|
83
+ m = method.receiver.to_s.match(/#<Class:([\w:]+)>/)
84
+ if m && m[1]
85
+ receiver_name = m[1]
86
+ argument[:names].each do |name|
87
+ yield [receiver_name, "self.#{name}"]
88
+ end
89
+ else
90
+ receiver_name = Utils.module_name(method.receiver) or next
91
+ argument[:names].each do |name|
92
+ yield [receiver_name, name]
93
+ end
94
+ end
95
+ end
96
+ end
97
+ end
98
+ end
@@ -0,0 +1,22 @@
1
+ module Orthoses
2
+ class AvoidRecursiveAncestorError
3
+ def initialize(loader)
4
+ @loader = loader
5
+ end
6
+
7
+ def call
8
+ @loader.call.tap do |store|
9
+ object_mixins = {}
10
+ store["Object"].to_decl.members.each do |member|
11
+ case member
12
+ when RBS::AST::Members::Mixin
13
+ object_mixins[member.name.relative!.to_s] = true
14
+ end
15
+ end
16
+ object_mixins.each_key do |object_mixin|
17
+ store[object_mixin].header = "module #{object_mixin} : BasicObject"
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -27,6 +27,7 @@ module Orthoses
27
27
  end
28
28
 
29
29
  def use(middleware, *args, **key, &block)
30
+ Orthoses.logger.debug("use #{middleware}")
30
31
  @use << proc do |loader|
31
32
  middleware.new(loader, *args, **key, &block).tap do |m|
32
33
  m.extend CallLogable
@@ -4,24 +4,35 @@ module Orthoses
4
4
  class DuplicationChecker
5
5
  def initialize(decl)
6
6
  @decl = decl
7
- @uniq_map = {}
8
7
  end
9
8
 
10
- def <<(member)
11
- key = member_key(member)
12
- if @uniq_map.key?(key)
13
- Orthoses.logger.warn("#{@decl.name}::#{member_to_s(member)} was droped since duplication")
14
- else
15
- @uniq_map[key] = member
9
+ def update_decl
10
+ uniq_map = {}
11
+ @decl.members.each do |member|
12
+ key = member_key(member)
13
+ drop_member = uniq_map[key]
14
+ uniq_map[key] = member
15
+ if drop_member
16
+ Orthoses.logger.warn("#{@decl.name}::#{drop_member} was droped since duplication")
17
+ end
16
18
  end
17
- end
18
-
19
- def uniq_members
20
- @uniq_map.values
19
+ drop_known_method_definition(uniq_map)
20
+ @decl.members.replace(uniq_map.values)
21
21
  end
22
22
 
23
23
  private
24
24
 
25
+ def drop_known_method_definition(uniq_map)
26
+ env = Utils.rbs_environment(collection: true)
27
+ if m_entry = env.class_decls[@decl.name.absolute!]
28
+ m_entry.decls.each do |d|
29
+ d.decl.members.grep_v(RBS::AST::Members::LocationOnly).each do |member|
30
+ uniq_map.delete(member_key(member))
31
+ end
32
+ end
33
+ end
34
+ end
35
+
25
36
  def member_to_s(member)
26
37
  out = StringIO.new
27
38
  RBS::Writer.new(out: out).write_member(member)
@@ -36,7 +47,14 @@ module Orthoses
36
47
  when RBS::AST::Members::LocationOnly
37
48
  [member.class]
38
49
  when RBS::AST::Members::Alias
39
- [member.class, member.new_name, member.old_name, member.kind]
50
+ [RBS::AST::Members::MethodDefinition, member.new_name, member.kind]
51
+ when RBS::AST::Members::AttrAccessor
52
+ # FIXME: how to check "#{member.name}=" ?
53
+ [RBS::AST::Members::MethodDefinition, member.name, member.kind]
54
+ when RBS::AST::Members::AttrReader
55
+ [RBS::AST::Members::MethodDefinition, member.name, member.kind]
56
+ when RBS::AST::Members::AttrWriter
57
+ [RBS::AST::Members::MethodDefinition, "#{member.name}=", member.kind]
40
58
  else
41
59
  [member.class, member.name]
42
60
  end
@@ -1,87 +1,82 @@
1
1
  module Orthoses
2
2
  class Content
3
3
  class Environment
4
- def initialize(constant_filter: nil, mixin_filter: nil)
5
- @env = RBS::Environment.new
4
+ class << self
5
+ def load_from_paths(paths)
6
+ new.tap do |env|
7
+ paths.each do |path|
8
+ Orthoses.logger.debug("Load #{path}")
9
+ buffer = RBS::Buffer.new(name: path.to_s, content: File.read(path.to_s, encoding: "UTF-8"))
10
+ RBS::Parser.parse_signature(buffer).each do |decl|
11
+ env << decl
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
17
+
18
+ def initialize(constant_filter: nil, mixin_filter: nil, attribute_filter: nil)
19
+ @load_env = RBS::Environment.new
20
+ @known_env = Utils.rbs_environment(collection: true, cache: false)
6
21
  @constant_filter = constant_filter
7
22
  @mixin_filter = mixin_filter
23
+ @attribute_filter = attribute_filter
8
24
  end
9
25
 
10
26
  def <<(decl)
11
- @env << decl
27
+ @load_env << decl
28
+ @known_env << decl
29
+ rescue RBS::DuplicatedDeclarationError => err
30
+ Orthoses.logger.warn(err.inspect)
12
31
  end
13
32
 
14
33
  def write_to(store:)
15
34
  each do |add_content|
16
35
  content = store[add_content.name]
17
- # content.header = add_content.header
36
+ content.header = add_content.header
18
37
  content.concat(add_content.body)
19
38
  end
20
39
  end
21
40
 
22
41
  def each
23
- each_class do |content|
24
- yield content
25
- end
26
- each_interface do |content|
27
- yield content
28
- end
29
- end
42
+ avoid_generic_parameter_mismatch_error
30
43
 
31
- private
44
+ header_builder = HeaderBuilder.new(env: @known_env)
32
45
 
33
- def each_class
34
- @env.class_decls.each do |type_name, m_entry|
46
+ @load_env.class_decls.each do |type_name, m_entry|
35
47
  name = type_name.relative!.to_s
36
48
  content = Content.new(name: name)
37
- case decl = m_entry.decls.first.decl
38
- when RBS::AST::Declarations::Module
39
- self_types = decl.self_types.empty? ? nil : " : #{decl.self_types.join(', ')}"
40
- content.header = "module #{name_and_params(name, decl.type_params)}#{self_types}"
41
- when RBS::AST::Declarations::Class
42
- super_class = decl.super_class.nil? ? nil : " < #{name_and_args(decl.super_class.name, decl.super_class.args)}"
43
- content.header = "class #{name_and_params(name, decl.type_params)}#{super_class}"
44
- else
45
- raise
46
- end
49
+ content.header = header_builder.build(entry: m_entry, name_hint: name)
47
50
  decls_to_lines(m_entry.decls.map(&:decl)).each do |line|
48
51
  content << line
49
52
  end
50
53
  yield content
51
54
  end
52
- end
53
55
 
54
- def each_interface
55
- @env.interface_decls.each do |type_name, s_entry|
56
+ @load_env.interface_decls.each do |type_name, s_entry|
56
57
  name = type_name.relative!.to_s
57
58
  content = Content.new(name: name)
58
- decl = s_entry.decl
59
- content.header = "interface #{name_and_params(name, decl.type_params)}"
60
- decls_to_lines([decl]).each do |line|
59
+ content.header = header_builder.build(entry: s_entry)
60
+ decls_to_lines([s_entry.decl]).each do |line|
61
61
  content << line
62
62
  end
63
63
  yield content
64
64
  end
65
65
  end
66
66
 
67
- def name_and_params(name, params)
68
- if params.empty?
69
- "#{name}"
70
- else
71
- ps = params.each.map do |param|
72
- param.to_s
73
- end
74
-
75
- "#{name}[#{ps.join(", ")}]"
76
- end
77
- end
67
+ private
78
68
 
79
- def name_and_args(name, args)
80
- if name && args
81
- if args.empty?
82
- "#{name}"
83
- else
84
- "#{name}[#{args.join(", ")}]"
69
+ # Avoid `RBS::GenericParameterMismatchError` from like rbs_prototype_rb
70
+ # class Array # <= RBS::GenericParameterMismatchError
71
+ # end
72
+ def avoid_generic_parameter_mismatch_error
73
+ @known_env.class_decls.each do |type_name, m_entry|
74
+ tmp_primary_d = m_entry.decls.find { |d| !d.decl.type_params.empty? }
75
+ next unless tmp_primary_d
76
+ m_entry.decls.each do |d|
77
+ if d.decl.type_params.empty?
78
+ d.decl.type_params.replace(tmp_primary_d.decl.type_params)
79
+ end
85
80
  end
86
81
  end
87
82
  end
@@ -98,6 +93,8 @@ module Orthoses
98
93
  next unless @constant_filter.nil? || @constant_filter.call(member)
99
94
  when RBS::AST::Members::Mixin
100
95
  next unless @mixin_filter.nil? || @mixin_filter.call(member)
96
+ when RBS::AST::Members::Attribute
97
+ next unless @attribute_filter.nil? || @attribute_filter.call(member)
101
98
  end
102
99
  writer.write_member(member)
103
100
  end
@@ -0,0 +1,94 @@
1
+ module Orthoses
2
+ class Content
3
+ class HeaderBuilder
4
+ def initialize(env:)
5
+ @env = env
6
+ @resolver = RBS::TypeNameResolver.from_env(env)
7
+ end
8
+
9
+ def build(entry:, name_hint: nil)
10
+ case entry
11
+ when RBS::Environment::ModuleEntry
12
+ build_module(entry: entry, name_hint: name_hint)
13
+ when RBS::Environment::ClassEntry
14
+ build_class(entry: entry, name_hint: name_hint)
15
+ when RBS::Environment::SingleEntry
16
+ build_interface(entry: entry, name_hint: name_hint)
17
+ else
18
+ raise
19
+ end
20
+ end
21
+
22
+ private
23
+
24
+ def build_module(entry:, name_hint: nil)
25
+ primary = entry.primary
26
+ full_name = name_hint || primary.decl.name.relative!
27
+
28
+ self_types =
29
+ if primary.decl.self_types.empty?
30
+ nil
31
+ else
32
+ " : #{primary.decl.self_types.join(', ')}"
33
+ end
34
+
35
+ "module #{name_and_params(full_name, primary.decl.type_params)}#{self_types}"
36
+ end
37
+
38
+ def build_class(entry:, name_hint: nil)
39
+ primary = entry.primary
40
+ full_name = name_hint || primary.decl.name.relative!
41
+
42
+ "class #{name_and_params(full_name, primary.decl.type_params)}#{build_super_class(primary)}"
43
+ end
44
+
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)
52
+
53
+ super_class_name = @resolver.resolve(primary.decl.super_class.name, context: context) || primary.decl.super_class.name
54
+ if primary.decl.super_class.args.empty?
55
+ if super_class_entry = @env.class_decls[super_class_name]
56
+ super_primary = super_class_entry.primary
57
+ " < #{name_and_args(super_class_name, super_primary.decl.type_params.map { :untyped })}"
58
+ else
59
+ " < #{name_and_args(super_class_name, [])}"
60
+ end
61
+ else
62
+ " < #{name_and_args(super_class_name, primary.decl.super_class.args)}"
63
+ end
64
+ end
65
+
66
+ def build_interface(entry:, name_hint: nil)
67
+ full_name = name_hint || entry.decl.name.relative!
68
+ "interface #{name_and_params(full_name, entry.decl.type_params)}"
69
+ end
70
+
71
+ def name_and_params(name, params)
72
+ if params.empty?
73
+ "#{name}"
74
+ else
75
+ ps = params.each.map do |param|
76
+ param.to_s
77
+ end
78
+
79
+ "#{name}[#{ps.join(", ")}]"
80
+ end
81
+ end
82
+
83
+ def name_and_args(name, args)
84
+ if name && args
85
+ if args.empty?
86
+ "#{name}"
87
+ else
88
+ "#{name}[#{args.join(", ")}]"
89
+ end
90
+ end
91
+ end
92
+ end
93
+ end
94
+ end
@@ -2,6 +2,7 @@
2
2
 
3
3
  require 'orthoses/content/duplication_checker'
4
4
  require 'orthoses/content/environment'
5
+ require 'orthoses/content/header_builder'
5
6
 
6
7
  module Orthoses
7
8
  # Common interface for output.
@@ -20,36 +21,79 @@ module Orthoses
20
21
  attr_accessor :header
21
22
 
22
23
  def initialize(name:)
24
+ Orthoses.logger.debug("Create Orthoses::Content for #{name}")
23
25
  @name = name
24
26
  @body = []
25
27
  @header = nil
26
28
  end
27
29
 
28
30
  def <<(line)
29
- Orthoses.logger.debug("[#{name}] << #{line} on #{__FILE__}:#{__LINE__}")
30
31
  @body << line
31
32
  end
32
33
 
33
34
  def concat(other)
34
- Orthoses.logger.debug("[#{name}] concat #{other} on #{__FILE__}:#{__LINE__}")
35
35
  @body.concat(other)
36
36
  end
37
37
 
38
38
  def to_rbs
39
- if @header.nil?
40
- auto_header
41
- end
42
- body_uniq("#{@header}\n#{@body.map { |b| " #{b}\n" }.join}end\n")
39
+ auto_header
40
+ uniqed_body_string
41
+ end
42
+
43
+ def to_decl
44
+ auto_header
45
+ uniqed_body_decl
43
46
  end
44
47
 
45
48
  private
46
49
 
50
+ def original_rbs
51
+ <<~RBS
52
+ #{@header}
53
+ #{@body.join("\n")}
54
+ end
55
+ RBS
56
+ end
57
+
58
+ def uniqed_body_string
59
+ out = StringIO.new
60
+ writer = RBS::Writer.new(out: out)
61
+ writer.write_decl(uniqed_body_decl)
62
+ out.string
63
+ end
64
+
65
+ def uniqed_body_decl
66
+ buffer = RBS::Buffer.new(
67
+ name: "orthoses/content.rb",
68
+ content: original_rbs
69
+ )
70
+ parsed_decls = RBS::Parser.parse_signature(buffer)
71
+ unless parsed_decls.length == 1
72
+ raise "expect decls.length == 1, but got #{parsed_decls.length}"
73
+ end
74
+ parsed_decl = parsed_decls.first or raise
75
+ parsed_decl.tap do |decl|
76
+ DuplicationChecker.new(decl).update_decl
77
+ end
78
+ rescue RBS::ParsingError
79
+ Orthoses.logger.error "```rbs\n#{original_rbs}```"
80
+ raise
81
+ end
82
+
47
83
  def auto_header
48
84
  if name.split('::').last.start_with?('_')
49
85
  self.header = "interface #{name}"
50
86
  return
51
87
  end
52
88
 
89
+ env = Utils.rbs_environment(collection: true)
90
+ if entry = env.class_decls[TypeName(name).absolute!]
91
+ @header = Content::HeaderBuilder.new(env: env).build(entry: entry)
92
+ return
93
+ end
94
+
95
+ return unless @header.nil?
96
+
53
97
  val = Object.const_get(name)
54
98
 
55
99
  case val
@@ -93,28 +137,5 @@ module Orthoses
93
137
  end
94
138
  end
95
139
  end
96
-
97
- def body_uniq(rbs)
98
- buffer = RBS::Buffer.new(
99
- name: "orthoses/content.rb",
100
- content: rbs
101
- )
102
- out = StringIO.new
103
- writer = RBS::Writer.new(out: out)
104
- decls = RBS::Parser.parse_signature(buffer).map do |parsed_decl|
105
- parsed_decl.tap do |decl|
106
- duplicate_checker = DuplicationChecker.new(decl)
107
- decl.members.each do |member|
108
- duplicate_checker << member
109
- end
110
- decl.members.replace(duplicate_checker.uniq_members)
111
- end
112
- end
113
- writer.write(decls)
114
- out.string
115
- rescue RBS::ParsingError
116
- Orthoses.logger.error "```rbs\n#{rbs}```"
117
- raise
118
- end
119
140
  end
120
141
  end
@@ -11,14 +11,7 @@ module Orthoses
11
11
 
12
12
  def call
13
13
  @loader.call.tap do |store|
14
- env = Content::Environment.new
15
- @paths.each do |path|
16
- Orthoses.logger.debug("Load #{path}")
17
- buffer = RBS::Buffer.new(name: path.to_s, content: File.read(path.to_s, encoding: "UTF-8"))
18
- RBS::Parser.parse_signature(buffer).each do |decl|
19
- env << decl
20
- end
21
- end
14
+ env = Content::Environment.load_from_paths(@paths)
22
15
  env.write_to(store: store)
23
16
  end
24
17
  end
@@ -37,15 +37,7 @@ module Orthoses
37
37
  next unless known_type_params.nil? || known_type_params.empty?
38
38
  next unless @if.nil? || @if.call(base_mod, how, mod)
39
39
 
40
- if base_mod_name == "Object"
41
- # avoid RecursiveAncestorError
42
- content = store[mod_name]
43
- if content.header.nil?
44
- content.header = "module #{Utils.module_to_type_name(mod)} : ::BasicObject"
45
- end
46
- else
47
- store[mod_name]
48
- end
40
+ store[mod_name]
49
41
 
50
42
  "#{how} #{mod_name}"
51
43
  end
@@ -3,11 +3,12 @@ module Orthoses
3
3
  # use Orthoses::RBSPrototypeRB,
4
4
  # paths: Dir.glob("lib/**/*.rb")
5
5
  class RBSPrototypeRB
6
- def initialize(loader, paths:, constant_filter: nil, mixin_filter: nil)
6
+ def initialize(loader, paths:, constant_filter: nil, mixin_filter: nil, attribute_filter: nil)
7
7
  @loader = loader
8
8
  @paths = paths
9
9
  @constant_filter = constant_filter
10
10
  @mixin_filter = mixin_filter
11
+ @attribute_filter = attribute_filter
11
12
  end
12
13
 
13
14
  def call
@@ -15,6 +16,7 @@ module Orthoses
15
16
  parser = RBS::Prototype::RB.new
16
17
  @paths.each do |path|
17
18
  begin
19
+ Orthoses.logger.debug("parse #{path} by RBS::Prototype::RB")
18
20
  parser.parse File.read(path.to_s)
19
21
  rescue => err
20
22
  Orthoses.logger.error("Parse error #{err.inspect} by RBS::Prototype::RB #{path}")
@@ -23,6 +25,7 @@ module Orthoses
23
25
  env = Orthoses::Content::Environment.new(
24
26
  constant_filter: @constant_filter,
25
27
  mixin_filter: @mixin_filter,
28
+ attribute_filter: @attribute_filter,
26
29
  )
27
30
  parser.decls.each do |decl|
28
31
  env << decl
@@ -46,17 +46,39 @@ module Orthoses
46
46
  RBS::Namespace.parse(name).to_type_name
47
47
  end
48
48
 
49
- def self.rbs_environment(library: nil, collection: false)
49
+ class << self
50
+ # Generated scripts are not always located in the root.
51
+ # By default, it follows the upper level directory from the current directory
52
+ # to find the rbs_collection.yaml file and set it to `rbs_collection_pathname`.
53
+ # It can be reconfigured if necessary.
54
+ attr_accessor :rbs_collection_pathname
55
+ end
56
+ # set default
57
+ self.rbs_collection_pathname = ->() {
58
+ begin
59
+ start = here = Dir.pwd
60
+ until ok = RBS::Collection::Config::PATH.exist?
61
+ Dir.chdir("..")
62
+ return nil if Dir.pwd == here
63
+ here = Dir.pwd
64
+ end
65
+ Pathname(here) + RBS::Collection::Config::PATH
66
+ ensure
67
+ Dir.chdir(start)
68
+ end
69
+ }.call
70
+
71
+ def self.rbs_environment(library: nil, collection: false, cache: true)
50
72
  @env_cache ||= {}
51
- if hit = @env_cache[[library, collection]]
73
+ if cache && hit = @env_cache[[library, collection]]
52
74
  return hit
53
75
  end
54
76
 
55
77
  loader = RBS::EnvironmentLoader.new
56
78
 
57
- if collection
58
- lock = RBS::Collection::Config::PATH&.then { |p| RBS::Collection::Config.lockfile_of(p) }
59
- loader.add_collection(lock) if lock
79
+ if collection && rbs_collection_pathname
80
+ config = RBS::Collection::Config.lockfile_of(rbs_collection_pathname) or raise
81
+ loader.add_collection(config)
60
82
  end
61
83
 
62
84
  case library
@@ -71,8 +93,9 @@ module Orthoses
71
93
  end
72
94
  end
73
95
 
74
- environment = RBS::Environment.from_loader(loader).resolve_type_names
75
- @env_cache[[library, collection]] = environment
96
+ RBS::Environment.from_loader(loader).resolve_type_names.tap do |env|
97
+ @env_cache[[library, collection]] = env if cache
98
+ end
76
99
  end
77
100
 
78
101
  def self.object_to_rbs(object, strict:)
@@ -121,6 +144,9 @@ module Orthoses
121
144
  "Hash[#{keys.join(' | ')}, #{values.join(' | ')}]"
122
145
  end
123
146
  end
147
+ when Range
148
+ type = object_to_rbs(object.begin || object.end, strict: false)
149
+ "Range[#{type}]"
124
150
  when ARGF
125
151
  # see also https://github.com/ruby/rbs/pull/975
126
152
  'untyped'
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Orthoses
4
- VERSION = "0.3.0"
4
+ VERSION = "0.6.0"
5
5
  end
data/lib/orthoses.rb CHANGED
@@ -3,6 +3,8 @@
3
3
  require 'rbs'
4
4
  require 'pathname'
5
5
 
6
+ require_relative 'orthoses/attribute'
7
+ require_relative 'orthoses/avoid_recursive_ancestor_error'
6
8
  require_relative 'orthoses/builder'
7
9
  require_relative 'orthoses/call_tracer'
8
10
  require_relative 'orthoses/constant'
@@ -1,5 +1,5 @@
1
1
  # THIS IS GENERATED CODE from `$ rake generate_self_sig`
2
2
 
3
3
  interface Orthoses::_Call
4
- def call: () -> Hash[String, Orthoses::Content]
4
+ def call: () -> Orthoses::store
5
5
  end
@@ -0,0 +1,11 @@
1
+ # THIS IS GENERATED CODE from `$ rake generate_self_sig`
2
+
3
+ module Orthoses::Attribute::Hook
4
+ def attr: (*untyped names) -> untyped
5
+
6
+ def attr_accessor: (*untyped names) -> untyped
7
+
8
+ def attr_reader: (*untyped names) -> untyped
9
+
10
+ def attr_writer: (*untyped names) -> untyped
11
+ end
@@ -0,0 +1,9 @@
1
+ # THIS IS GENERATED CODE from `$ rake generate_self_sig`
2
+
3
+ class Orthoses::Attribute
4
+ def initialize: (Orthoses::_Call loader) -> void
5
+ def call: () -> Orthoses::store
6
+ private
7
+ def each_definition: (untyped call_tracer) { (untyped) -> untyped } -> untyped
8
+ @loader: Orthoses::_Call
9
+ end
@@ -0,0 +1,7 @@
1
+ # THIS IS GENERATED CODE from `$ rake generate_self_sig`
2
+
3
+ class Orthoses::AvoidRecursiveAncestorError
4
+ def initialize: (Orthoses::_Call loader) -> void
5
+ def call: () -> Orthoses::store
6
+ @loader: Orthoses::_Call
7
+ end
@@ -1,4 +1,5 @@
1
1
  # THIS IS GENERATED CODE from `$ rake generate_self_sig`
2
2
 
3
3
  module Orthoses::Builder::CallLogable
4
+ def call: () -> untyped
4
5
  end
@@ -1,5 +1,10 @@
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
6
+ def run: (untyped loader) -> untyped
7
+ def to_loader: () -> untyped
8
+
4
9
  def call: () { () -> void } -> Orthoses::store
5
10
  end
@@ -2,5 +2,7 @@
2
2
 
3
3
  class Orthoses::CallTracer
4
4
  attr_accessor result: Array[[ Method, Hash[Symbol, untyped] ]]
5
+ def initialize: () -> void
6
+
5
7
  def trace: [T] (Method | UnboundMethod) ?{ () -> T } -> T
6
8
  end
@@ -5,4 +5,5 @@ class Orthoses::ConstLoadError < ::StandardError
5
5
  attr_reader const: Symbol
6
6
  attr_reader error: untyped
7
7
  def initialize: (root: Module, const: Symbol, error: untyped) -> void
8
+ def message: () -> ::String
8
9
  end
@@ -1,7 +1,10 @@
1
1
  # THIS IS GENERATED CODE from `$ rake generate_self_sig`
2
2
 
3
3
  class Orthoses::Constant
4
+ def initialize: (Orthoses::_Call loader, strict: bool, ?if: ^(Module, Symbol, untyped) -> boolish, ?on_error: ^(Orthoses::ConstLoadError) -> void) -> void
5
+ def call: () -> Orthoses::store
4
6
  @loader: Orthoses::_Call
5
- include Orthoses::_MiddleWare
6
- def initialize: (Orthoses::_Call loader, ?if: ^(Module, Symbol, untyped) -> boolish, ?on_error: ^(Orthoses::ConstLoadError) -> void) -> void
7
+ @strict: bool
8
+ @if: ^(Module mod, Symbol const, untyped val, String rbs) -> boolish?
9
+ @on_error: ^(Orthoses::ConstLoadError) -> void | nil
7
10
  end
@@ -1,4 +1,10 @@
1
1
  # THIS IS GENERATED CODE from `$ rake generate_self_sig`
2
2
 
3
3
  class Orthoses::Content::DuplicationChecker
4
+ def initialize: (untyped decl) -> void
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
4
10
  end
@@ -1,13 +1,23 @@
1
1
  # THIS IS GENERATED CODE from `$ rake generate_self_sig`
2
2
 
3
3
  class Orthoses::Content::Environment
4
+ def self.load_from_paths: (untyped paths) -> untyped
5
+
6
+ def initialize: (?constant_filter: constant_filter?, ?mixin_filter: mixin_filter?, ?attribute_filter: attribute_filter?) -> void
7
+ def <<: (RBS::AST::Declarations::t decl) -> RBS::Environment
8
+ def write_to: (store: Orthoses::store) -> void
9
+ def each: () { (Orthoses::Content) -> void } -> void
10
+ private
11
+ # Avoid `RBS::GenericParameterMismatchError` from like rbs_prototype_rb
12
+ # class Array # <= RBS::GenericParameterMismatchError
13
+ # end
14
+ def avoid_generic_parameter_mismatch_error: () -> untyped
15
+ def decls_to_lines: (untyped decls) -> untyped
4
16
  type constant_filter = ^(RBS::AST::Declarations::Constant) -> boolish
5
17
  type mixin_filter = ^(RBS::AST::Members::Mixin) -> boolish
18
+ type attribute_filter = ^(RBS::AST::Members::Attribute) -> boolish
6
19
  @env: RBS::Environment
7
20
  @constant_filter: constant_filter?
8
21
  @mixin_filter: mixin_filter?
9
- def initialize: (?constant_filter: constant_filter?, ?mixin_filter: mixin_filter?) -> void
10
- def <<: (RBS::AST::Declarations::t decl) -> RBS::Environment
11
- def write_to: (store: Orthoses::store) -> void
12
- def each: () { (Orthoses::Content) -> void } -> void
22
+ @attribute_filter: attribute_filter?
13
23
  end
@@ -0,0 +1,13 @@
1
+ # THIS IS GENERATED CODE from `$ rake generate_self_sig`
2
+
3
+ class Orthoses::Content::HeaderBuilder
4
+ def initialize: (env: untyped) -> void
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)
13
+ end
@@ -8,4 +8,14 @@ class Orthoses::Content
8
8
  def <<: (String) -> void
9
9
  def concat: (Array[String]) -> void
10
10
  def to_rbs: () -> String
11
+ def to_decl: () -> untyped
12
+
13
+ private
14
+ def original_rbs: () -> ::String
15
+
16
+ def uniqed_body_string: () -> String
17
+ def uniqed_body_decl: () -> RBS::AST::Declarations::t
18
+ def auto_header: () -> (nil | untyped)
19
+ def temporary_type_params: (untyped name) -> untyped
20
+ def type_params: (untyped name) -> untyped
11
21
  end
@@ -1,7 +1,7 @@
1
1
  # THIS IS GENERATED CODE from `$ rake generate_self_sig`
2
2
 
3
3
  class Orthoses::CreateFileByName
4
- @loader: Orthoses::_Call
5
- include Orthoses::_MiddleWare
6
4
  def initialize: (Orthoses::_Call loader, base_dir: String, ?header: String?) -> void
5
+ def call: () -> Orthoses::store
6
+ @loader: Orthoses::_Call
7
7
  end
@@ -1,7 +1,8 @@
1
1
  # THIS IS GENERATED CODE from `$ rake generate_self_sig`
2
2
 
3
3
  class Orthoses::DelegateClass
4
- @loader: Orthoses::_Call
5
- include Orthoses::_MiddleWare
6
4
  def initialize: (Orthoses::_Call loader) -> void
5
+ def call: () -> Orthoses::store
6
+ def temporary_type_params: (untyped name) -> untyped
7
+ @loader: Orthoses::_Call
7
8
  end
@@ -1,7 +1,7 @@
1
1
  # THIS IS GENERATED CODE from `$ rake generate_self_sig`
2
2
 
3
3
  class Orthoses::Filter
4
- @loader: Orthoses::_Call
5
- include Orthoses::_MiddleWare
6
4
  def initialize: (Orthoses::_Call loader, if: ^(String, Orthoses::Content) -> boolish) -> void
5
+ def call: () -> Orthoses::store
6
+ @loader: Orthoses::_Call
7
7
  end
@@ -1,8 +1,8 @@
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
5
+ def call: () -> Orthoses::store
4
6
  @loader: Orthoses::_Call
5
7
  @paths: Array[_ToS]
6
- include Orthoses::_MiddleWare
7
- def initialize: (Orthoses::_Call loader, paths: Array[_ToS]) -> void
8
8
  end
@@ -1,4 +1,6 @@
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
6
  end
@@ -1,7 +1,7 @@
1
1
  # THIS IS GENERATED CODE from `$ rake generate_self_sig`
2
2
 
3
3
  class Orthoses::ObjectSpaceAll
4
- @loader: Orthoses::_Call
5
- include Orthoses::_MiddleWare
6
4
  def initialize: (Orthoses::_Call loader, ?if: ^(Module) -> boolish) -> void
5
+ def call: () -> Orthoses::store
6
+ @loader: Orthoses::_Call
7
7
  end
data/sig/orthoses/pp.rbs CHANGED
@@ -1,4 +1,6 @@
1
1
  # THIS IS GENERATED CODE from `$ rake generate_self_sig`
2
2
 
3
3
  class Orthoses::PP
4
+ def initialize: (untyped loader) -> void
5
+ def call: () -> untyped
4
6
  end
@@ -1,10 +1,11 @@
1
1
  # THIS IS GENERATED CODE from `$ rake generate_self_sig`
2
2
 
3
3
  class Orthoses::RBSPrototypeRB
4
+ def initialize: (Orthoses::_Call loader, paths: Array[_ToS], ?constant_filter: Orthoses::Content::Environment::constant_filter?, ?mixin_filter: Orthoses::Content::Environment::mixin_filter?, ?attribute_filter: Orthoses::Content::Environment::attribute_filter?) -> void
5
+ def call: () -> Orthoses::store
4
6
  @loader: Orthoses::_Call
5
- include Orthoses::_MiddleWare
6
- def initialize: (Orthoses::_Call loader, paths: Array[_ToS], ?constant_filter: Orthoses::Content::Environment::constant_filter?, ?mixin_filter: Orthoses::Content::Environment::mixin_filter?) -> void
7
7
  @paths: Array[_ToS]
8
8
  @constant_filter: Orthoses::Content::Environment::constant_filter?
9
9
  @mixin_filter: Orthoses::Content::Environment::mixin_filter?
10
+ @attribute_filter: Orthoses::Content::Environment::mixin_filter?
10
11
  end
@@ -1,4 +1,6 @@
1
1
  # THIS IS GENERATED CODE from `$ rake generate_self_sig`
2
2
 
3
3
  class Orthoses::Store
4
+ def initialize: (untyped loader) -> void
5
+ def call: () -> untyped
4
6
  end
data/sig/orthoses/tap.rbs CHANGED
@@ -1,7 +1,7 @@
1
1
  # THIS IS GENERATED CODE from `$ rake generate_self_sig`
2
2
 
3
3
  class Orthoses::Tap
4
- @loader: Orthoses::_Call
5
- include Orthoses::_MiddleWare
6
4
  def initialize: (Orthoses::_Call loader) -> void
5
+ def call: () -> Orthoses::store
6
+ @loader: Orthoses::_Call
7
7
  end
@@ -1,11 +1,9 @@
1
1
  # THIS IS GENERATED CODE from `$ rake generate_self_sig`
2
2
 
3
3
  module Orthoses::Utils
4
- UNBOUND_NAME_METHOD: UnboundMethod
5
-
6
4
  def self.unautoload!: () -> void
7
5
 
8
- def self.each_const_recursive: (Module root, ?cache: Hash[untyped, true], ?on_error: ^(Orthoses::ConstLoadError) -> void?) ?{ (Module, Symbol, untyped) -> void } -> void
6
+ def self.each_const_recursive: (Module root, ?cache: Hash[untyped, true], ?on_error: ^(Orthoses::ConstLoadError) -> void) ?{ (Module, Symbol, untyped) -> void } -> void
9
7
 
10
8
  def self.rbs_defined_const?: (String name, ?library: (String | Array[String])?, ?collection: boolish) -> bool
11
9
 
@@ -13,10 +11,14 @@ module Orthoses::Utils
13
11
 
14
12
  def self.rbs_type_name: (String) -> RBS::TypeName
15
13
 
16
- def self.rbs_environment: (?library: String | Array[String] | nil, ?collection: boolish) -> RBS::Environment
14
+ attr_accessor self.rbs_collection_pathname: Pathname
15
+
16
+ def self.rbs_environment: (?library: String | Array[String] | nil, ?collection: boolish, ?cache: boolish) -> RBS::Environment
17
17
 
18
18
  def self.object_to_rbs: (untyped object, strict: bool) -> String
19
19
 
20
+ UNBOUND_NAME_METHOD: UnboundMethod
21
+
20
22
  def self.module_name: (Module mod) -> String?
21
23
 
22
24
  def self.module_to_type_name: (Module) -> RBS::TypeName?
@@ -1,8 +1,8 @@
1
1
  # THIS IS GENERATED CODE from `$ rake generate_self_sig`
2
2
 
3
3
  class Orthoses::Walk
4
+ def initialize: (Orthoses::_Call loader, root: Module | String) -> void
5
+ def call: () -> Orthoses::store
4
6
  @loader: Orthoses::_Call
5
7
  @root: Module | String
6
- include Orthoses::_MiddleWare
7
- def initialize: (Orthoses::_Call loader, root: Module | String) -> void
8
8
  end
@@ -1,7 +1,7 @@
1
1
  # THIS IS GENERATED CODE from `$ rake generate_self_sig`
2
2
 
3
3
  class Orthoses::Writer
4
- @loader: Orthoses::_Call
5
- include Orthoses::_MiddleWare
6
4
  def initialize: (Orthoses::_Call loader, io: _Writer) -> void
5
+ def call: () -> Orthoses::store
6
+ @loader: Orthoses::_Call
7
7
  end
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: String
4
+ VERSION: "0.6.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.3.0
4
+ version: 0.6.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-05-17 00:00:00.000000000 Z
11
+ date: 2022-06-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rbs
@@ -36,13 +36,19 @@ files:
36
36
  - Gemfile.lock
37
37
  - LICENSE.txt
38
38
  - README.md
39
+ - examples/minitest/Rakefile
40
+ - examples/simple_middleware.rb
41
+ - examples/simple_middleware.rbs
39
42
  - lib/orthoses.rb
43
+ - lib/orthoses/attribute.rb
44
+ - lib/orthoses/avoid_recursive_ancestor_error.rb
40
45
  - lib/orthoses/builder.rb
41
46
  - lib/orthoses/call_tracer.rb
42
47
  - lib/orthoses/constant.rb
43
48
  - lib/orthoses/content.rb
44
49
  - lib/orthoses/content/duplication_checker.rb
45
50
  - lib/orthoses/content/environment.rb
51
+ - lib/orthoses/content/header_builder.rb
46
52
  - lib/orthoses/create_file_by_name.rb
47
53
  - lib/orthoses/delegate_class.rb
48
54
  - lib/orthoses/filter.rb
@@ -61,6 +67,9 @@ files:
61
67
  - sig/orthoses.rbs
62
68
  - sig/orthoses/_call.rbs
63
69
  - sig/orthoses/_middle_ware.rbs
70
+ - sig/orthoses/attribute.rbs
71
+ - sig/orthoses/attribute/hook.rbs
72
+ - sig/orthoses/avoid_recursive_ancestor_error.rbs
64
73
  - sig/orthoses/builder.rbs
65
74
  - sig/orthoses/builder/call_logable.rbs
66
75
  - sig/orthoses/call_tracer.rbs
@@ -69,6 +78,7 @@ files:
69
78
  - sig/orthoses/content.rbs
70
79
  - sig/orthoses/content/duplication_checker.rbs
71
80
  - sig/orthoses/content/environment.rbs
81
+ - sig/orthoses/content/header_builder.rbs
72
82
  - sig/orthoses/create_file_by_name.rbs
73
83
  - sig/orthoses/delegate_class.rbs
74
84
  - sig/orthoses/filter.rbs