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 +4 -4
- data/Gemfile.lock +3 -3
- data/README.md +16 -12
- data/examples/minitest/Rakefile +48 -0
- data/examples/simple_middleware.rb +11 -0
- data/examples/simple_middleware.rbs +7 -0
- data/lib/orthoses/avoid_recursive_ancestor_error.rb +22 -0
- data/lib/orthoses/content/duplication_checker.rb +26 -12
- data/lib/orthoses/content/environment.rb +15 -52
- data/lib/orthoses/content/header_builder.rb +93 -0
- data/lib/orthoses/content.rb +50 -29
- data/lib/orthoses/mixin.rb +1 -9
- data/lib/orthoses/rbs_prototype_rb.rb +1 -0
- data/lib/orthoses/version.rb +1 -1
- data/lib/orthoses.rb +1 -0
- data/sig/orthoses/avoid_recursive_ancestor_error.rbs +7 -0
- data/sig/orthoses/const_load_error.rbs +1 -1
- data/sig/orthoses/content.rbs +3 -0
- data/sig/orthoses/name_space_error.rbs +1 -1
- metadata +8 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0e53d784825b1c759916988c4aaca8e6942fd89e0de4c73dff022f40ca265027
|
4
|
+
data.tar.gz: 7e6fdb9ac599274b713a9930d15bb8b81267c3afcc4a7ed3a6c747a13c711201
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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.
|
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.
|
33
|
+
rbs (2.5.0)
|
34
34
|
rgot (1.1.0)
|
35
|
-
steep (0.
|
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,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
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
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
|
-
|
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
|
-
[
|
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
|
-
@
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
59
|
-
|
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
|
data/lib/orthoses/content.rb
CHANGED
@@ -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
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
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
|
data/lib/orthoses/mixin.rb
CHANGED
@@ -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
|
-
|
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}")
|
data/lib/orthoses/version.rb
CHANGED
data/lib/orthoses.rb
CHANGED
data/sig/orthoses/content.rbs
CHANGED
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.
|
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-
|
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
|