orthoses 0.3.0 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2d5b96650f0b18fdb84d67bc6821887ac974e529bf13e05c079ad703645a0583
4
- data.tar.gz: 50a0101c732e7a66d166e0ff4a3f6fd439d7c50ab2985ffb49c618e698f5873f
3
+ metadata.gz: 0e53d784825b1c759916988c4aaca8e6942fd89e0de4c73dff022f40ca265027
4
+ data.tar.gz: 7e6fdb9ac599274b713a9930d15bb8b81267c3afcc4a7ed3a6c747a13c711201
5
5
  SHA512:
6
- metadata.gz: 2a9443b508c4dbb2518c656d34441fcedf4d571254834b375a99d97fd3c1443dd8bc4ef165c48334a66e64267efa7e9da7db43f9fcfea7c96d90a023f83e25b9
7
- data.tar.gz: aa13ee94cb12d5729204fa8ecd926142bf56c58f30e9a6e13ee1c73914748fda0d752d3aeb7d31292de677c8ad4c19c5dd8636d919b05664b154cd4d62e0188a
6
+ metadata.gz: 61b9855a1f2744de78e9993d4adb024133aa08eeefa4541f9371bbb9598c500b8e4af2618ff9904039bbb086a2fde61b714c6ae20bc466077b1b46601f9d6735
7
+ data.tar.gz: 6a2eaea1e8da4d1231dbcf4ebb4b4b92e228a03656a89385a439ff651b5dc204a9fb5071e8fb11a0fec35e95e85e6e1c332cc341ecb72302bd3d2623e3779585
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.4.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,48 @@
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::RBSPrototypeRB,
26
+ paths: Dir.glob('src/lib/minitest{.rb,/*.rb}'),
27
+ constant_filter: ->(_) { false },
28
+ mixin_filter: ->(_) { false }
29
+ run ->(){
30
+ require_relative 'src/lib/minitest'
31
+ require_relative 'src/lib/minitest/test'
32
+ require_relative 'src/lib/minitest/spec'
33
+ require_relative 'src/lib/minitest/parallel'
34
+ require_relative 'src/lib/minitest/mock'
35
+ require_relative 'src/lib/minitest/benchmark'
36
+
37
+ require_relative 'src/lib/minitest/pride_plugin'
38
+ }
39
+ end.call
40
+
41
+ sh "rbs -r mutex_m -I #{out} validate --silent"
42
+ out.join("manifest.yaml").write <<~YAML
43
+ dependencies:
44
+ - name: mutex_m
45
+ YAML
46
+ end
47
+
48
+ 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,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
@@ -4,24 +4,38 @@ 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.reverse_each do |member|
12
+ key = member_key(member)
13
+ if uniq_map.key?(key)
14
+ Orthoses.logger.warn("#{@decl.name}::#{member_to_s(member)} was droped since duplication")
15
+ else
16
+ uniq_map[key] = member
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.reverse)
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.each do |member|
30
+ case member
31
+ when RBS::AST::Members::MethodDefinition, RBS::AST::Members::Alias
32
+ uniq_map.delete(member_key(member))
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
38
+
25
39
  def member_to_s(member)
26
40
  out = StringIO.new
27
41
  RBS::Writer.new(out: out).write_member(member)
@@ -36,7 +50,7 @@ module Orthoses
36
50
  when RBS::AST::Members::LocationOnly
37
51
  [member.class]
38
52
  when RBS::AST::Members::Alias
39
- [member.class, member.new_name, member.old_name, member.kind]
53
+ [RBS::AST::Members::MethodDefinition, member.new_name, member.kind]
40
54
  else
41
55
  [member.class, member.name]
42
56
  end
@@ -2,90 +2,53 @@ module Orthoses
2
2
  class Content
3
3
  class Environment
4
4
  def initialize(constant_filter: nil, mixin_filter: nil)
5
- @env = RBS::Environment.new
5
+ @load_env = RBS::Environment.new
6
+ @known_env = Utils.rbs_environment(collection: true)
6
7
  @constant_filter = constant_filter
7
8
  @mixin_filter = mixin_filter
8
9
  end
9
10
 
10
11
  def <<(decl)
11
- @env << decl
12
+ if known_class_entry = @known_env.class_decls[decl.name.absolute!]
13
+ decl.type_params.replace(known_class_entry.primary.decl.type_params)
14
+ end
15
+ @load_env << decl
16
+ rescue RBS::DuplicatedDeclarationError => err
17
+ Orthoses.logger.warn(err.inspect)
12
18
  end
13
19
 
14
20
  def write_to(store:)
15
21
  each do |add_content|
16
22
  content = store[add_content.name]
17
- # content.header = add_content.header
23
+ content.header ||= add_content.header
18
24
  content.concat(add_content.body)
19
25
  end
20
26
  end
21
27
 
22
28
  def each
23
- each_class do |content|
24
- yield content
25
- end
26
- each_interface do |content|
27
- yield content
28
- end
29
- end
30
-
31
- private
29
+ header_builder = HeaderBuilder.new(env: @load_env)
32
30
 
33
- def each_class
34
- @env.class_decls.each do |type_name, m_entry|
31
+ @load_env.class_decls.each do |type_name, m_entry|
35
32
  name = type_name.relative!.to_s
36
33
  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
34
+ content.header = header_builder.build(entry: m_entry, name_hint: name)
47
35
  decls_to_lines(m_entry.decls.map(&:decl)).each do |line|
48
36
  content << line
49
37
  end
50
38
  yield content
51
39
  end
52
- end
53
40
 
54
- def each_interface
55
- @env.interface_decls.each do |type_name, s_entry|
41
+ @load_env.interface_decls.each do |type_name, s_entry|
56
42
  name = type_name.relative!.to_s
57
43
  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|
44
+ content.header = header_builder.build(entry: s_entry)
45
+ decls_to_lines([s_entry.decl]).each do |line|
61
46
  content << line
62
47
  end
63
48
  yield content
64
49
  end
65
50
  end
66
51
 
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
78
-
79
- def name_and_args(name, args)
80
- if name && args
81
- if args.empty?
82
- "#{name}"
83
- else
84
- "#{name}[#{args.join(", ")}]"
85
- end
86
- end
87
- end
88
-
89
52
  def decls_to_lines(decls)
90
53
  out = StringIO.new
91
54
  writer = RBS::Writer.new(out: out)
@@ -0,0 +1,93 @@
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
+
52
+ super_class_name = @resolver.resolve(primary.decl.super_class.name, context: context) || primary.decl.super_class.name
53
+ if primary.decl.super_class.args.empty?
54
+ if super_class_entry = @env.class_decls[super_class_name.absolute!]
55
+ super_primary = super_class_entry.primary
56
+ " < #{name_and_args(super_class_name, super_primary.decl.type_params.map { :untyped })}"
57
+ else
58
+ " < #{name_and_args(super_class_name, [])}"
59
+ end
60
+ else
61
+ " < #{name_and_args(super_class_name, primary.decl.super_class.args)}"
62
+ end
63
+ end
64
+
65
+ def build_interface(entry:, name_hint: nil)
66
+ full_name = name_hint || entry.decl.name.relative!
67
+ "interface #{name_and_params(full_name, entry.decl.type_params)}"
68
+ end
69
+
70
+ def name_and_params(name, params)
71
+ if params.empty?
72
+ "#{name}"
73
+ else
74
+ ps = params.each.map do |param|
75
+ param.to_s
76
+ end
77
+
78
+ "#{name}[#{ps.join(", ")}]"
79
+ end
80
+ end
81
+
82
+ def name_and_args(name, args)
83
+ if name && args
84
+ if args.empty?
85
+ "#{name}"
86
+ else
87
+ "#{name}[#{args.join(", ")}]"
88
+ end
89
+ end
90
+ end
91
+ end
92
+ end
93
+ 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
@@ -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
@@ -15,6 +15,7 @@ module Orthoses
15
15
  parser = RBS::Prototype::RB.new
16
16
  @paths.each do |path|
17
17
  begin
18
+ Orthoses.logger.debug("parse #{path} by RBS::Prototype::RB")
18
19
  parser.parse File.read(path.to_s)
19
20
  rescue => err
20
21
  Orthoses.logger.error("Parse error #{err.inspect} by RBS::Prototype::RB #{path}")
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Orthoses
4
- VERSION = "0.3.0"
4
+ VERSION = "0.4.0"
5
5
  end
data/lib/orthoses.rb CHANGED
@@ -3,6 +3,7 @@
3
3
  require 'rbs'
4
4
  require 'pathname'
5
5
 
6
+ require_relative 'orthoses/avoid_recursive_ancestor_error'
6
7
  require_relative 'orthoses/builder'
7
8
  require_relative 'orthoses/call_tracer'
8
9
  require_relative 'orthoses/constant'
@@ -0,0 +1,7 @@
1
+ # THIS IS GENERATED CODE from `$ rake generate_self_sig`
2
+
3
+ class Orthoses::AvoidRecursiveAncestorError
4
+ @loader: Orthoses::_Call
5
+ include Orthoses::_MiddleWare
6
+ def initialize: (Orthoses::_Call loader) -> void
7
+ end
@@ -1,6 +1,6 @@
1
1
  # THIS IS GENERATED CODE from `$ rake generate_self_sig`
2
2
 
3
- class Orthoses::ConstLoadError < ::StandardError
3
+ class Orthoses::ConstLoadError < StandardError
4
4
  attr_reader root: Module
5
5
  attr_reader const: Symbol
6
6
  attr_reader error: untyped
@@ -8,4 +8,7 @@ class Orthoses::Content
8
8
  def <<: (String) -> void
9
9
  def concat: (Array[String]) -> void
10
10
  def to_rbs: () -> String
11
+ private
12
+ def uniqed_body_string: () -> String
13
+ def uniqed_body_decl: () -> RBS::AST::Declarations::t
11
14
  end
@@ -1,4 +1,4 @@
1
1
  # THIS IS GENERATED CODE from `$ rake generate_self_sig`
2
2
 
3
- class Orthoses::NameSpaceError < ::StandardError
3
+ class Orthoses::NameSpaceError < StandardError
4
4
  end
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.4.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-05-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rbs
@@ -36,13 +36,18 @@ 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/avoid_recursive_ancestor_error.rb
40
44
  - lib/orthoses/builder.rb
41
45
  - lib/orthoses/call_tracer.rb
42
46
  - lib/orthoses/constant.rb
43
47
  - lib/orthoses/content.rb
44
48
  - lib/orthoses/content/duplication_checker.rb
45
49
  - lib/orthoses/content/environment.rb
50
+ - lib/orthoses/content/header_builder.rb
46
51
  - lib/orthoses/create_file_by_name.rb
47
52
  - lib/orthoses/delegate_class.rb
48
53
  - lib/orthoses/filter.rb
@@ -61,6 +66,7 @@ files:
61
66
  - sig/orthoses.rbs
62
67
  - sig/orthoses/_call.rbs
63
68
  - sig/orthoses/_middle_ware.rbs
69
+ - sig/orthoses/avoid_recursive_ancestor_error.rbs
64
70
  - sig/orthoses/builder.rbs
65
71
  - sig/orthoses/builder/call_logable.rbs
66
72
  - sig/orthoses/call_tracer.rbs