orthoses 0.3.0 → 0.4.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: 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