orthoses 1.13.0 → 1.15.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +7 -2
- data/lib/orthoses/content/duplication_checker.rb +3 -1
- data/lib/orthoses/create_file_by_name.rb +25 -2
- data/lib/orthoses/exclude_rbs.rb +36 -0
- data/lib/orthoses/trace/attribute.rb +3 -1
- data/lib/orthoses/trace/method.rb +4 -4
- data/lib/orthoses/utils.rb +11 -0
- data/lib/orthoses/version.rb +1 -1
- data/lib/orthoses.rb +1 -0
- data/sig/orthoses/call_tracer.rbs +1 -1
- data/sig/orthoses/constant.rbs +1 -1
- data/sig/orthoses/create_file_by_name.rbs +7 -1
- data/sig/orthoses/exclude_rbs.rbs +13 -0
- data/sig/orthoses/trace.rbs +6 -4
- data/sig/orthoses/utils.rbs +2 -0
- metadata +6 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: '0555497d665f5573dfa6a86e454c165195f0e33ae82842fa83c2cff54b7d360d'
|
4
|
+
data.tar.gz: c760feb2cecc92c04f0eecedf9790d7ac9be2dd5a7aed5850d009d51e49594dd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f3febe9350d66db369d8d8b24bd3ef6e3a1885b0207a5bef263a048e4eab732604f48d0fe27900ae1318f29ea87cc1f018a06f9b62a544aae8a402d0312674d1
|
7
|
+
data.tar.gz: e90e69dcd746b3a83984e3234e51666f9cc9102670a71f09676ce97c664c79ff9f68b84ed3da4d7d43a4aa5213b091f05e6455ca6c4709ee54a13dfeab91de23
|
data/README.md
CHANGED
@@ -175,15 +175,20 @@ Force load const defined by `autoload`.
|
|
175
175
|
|
176
176
|
Sort signatures by class/module.
|
177
177
|
|
178
|
-
|
178
|
+
### Orthoses::Trace
|
179
179
|
|
180
180
|
Trace the argument and return value objects when the method is actually called and determine the type.
|
181
181
|
|
182
|
-
|
182
|
+
### Orthoses::MissingName
|
183
183
|
|
184
184
|
Completes undefined class/module names.
|
185
185
|
If it is unknown whether it is a class or a module, it is defined as an empty module, and if it is a superclass, it is defined as an empty class.
|
186
186
|
|
187
|
+
### Orthoses::ExcludeRBS
|
188
|
+
|
189
|
+
You can specify that the specified RBS should not be intentionally generated.
|
190
|
+
This is useful when you want to exclude handwritten RBS.
|
191
|
+
|
187
192
|
## Development
|
188
193
|
|
189
194
|
After checking out the repo, run `bin/setup` to install dependencies. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
@@ -3,6 +3,11 @@
|
|
3
3
|
require 'orthoses/outputable'
|
4
4
|
|
5
5
|
module Orthoses
|
6
|
+
# @param to [String, nil]
|
7
|
+
# @param header [String, nil]
|
8
|
+
# @param if [Proc, nil]
|
9
|
+
# @param depth [Integer, Hash{String => Integer}, nil]
|
10
|
+
# @param rmtree [Boolean]
|
6
11
|
class CreateFileByName
|
7
12
|
prepend Outputable
|
8
13
|
|
@@ -43,8 +48,7 @@ module Orthoses
|
|
43
48
|
@if.nil? || @if.call(name, content)
|
44
49
|
end
|
45
50
|
grouped = store.group_by do |name, _|
|
46
|
-
|
47
|
-
(@depth ? splitted[0, @depth] : splitted).join('::')
|
51
|
+
extract(name)
|
48
52
|
end
|
49
53
|
|
50
54
|
grouped.each do |group_name, group|
|
@@ -64,5 +68,24 @@ module Orthoses
|
|
64
68
|
end
|
65
69
|
end
|
66
70
|
end
|
71
|
+
|
72
|
+
def extract(name)
|
73
|
+
case @depth
|
74
|
+
when nil
|
75
|
+
name.to_s
|
76
|
+
when Integer
|
77
|
+
name.split('::')[0, @depth].join('::')
|
78
|
+
when Hash
|
79
|
+
found_key, found_index = @depth.find do |n, _|
|
80
|
+
name.start_with?(n)
|
81
|
+
end
|
82
|
+
case found_index
|
83
|
+
when nil
|
84
|
+
name.to_s
|
85
|
+
else
|
86
|
+
name.split('::')[0, found_index].join('::')
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
67
90
|
end
|
68
91
|
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Orthoses
|
4
|
+
# Exclude RBS from output.
|
5
|
+
# @example
|
6
|
+
# use Orthoses::ExcludeRBS, paths: Dir['sig/hand-written/**/*.rbs']
|
7
|
+
class ExcludeRBS
|
8
|
+
def initialize(loader, paths: nil, rbs: nil)
|
9
|
+
raise ArgumentError, ':paths or :rbs keyword is required' if paths.nil? && rbs.nil?
|
10
|
+
|
11
|
+
@loader = loader
|
12
|
+
@paths = paths
|
13
|
+
@rbs = rbs
|
14
|
+
end
|
15
|
+
|
16
|
+
def call
|
17
|
+
case
|
18
|
+
when @paths
|
19
|
+
@paths.each do |path|
|
20
|
+
add_signature_to_known_env(File.read(path.to_s))
|
21
|
+
end
|
22
|
+
when @rbs
|
23
|
+
add_signature_to_known_env(@rbs)
|
24
|
+
else
|
25
|
+
raise "bug"
|
26
|
+
end
|
27
|
+
|
28
|
+
@loader.call
|
29
|
+
end
|
30
|
+
|
31
|
+
def add_signature_to_known_env(rbs)
|
32
|
+
buffer, directives, decls = ::RBS::Parser.parse_signature(rbs)
|
33
|
+
Utils.rbs_environment.add_signature(buffer: buffer, directives: directives, decls: decls)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -23,9 +23,10 @@ module Orthoses
|
|
23
23
|
|
24
24
|
include Targetable
|
25
25
|
|
26
|
-
def initialize(loader, patterns:)
|
26
|
+
def initialize(loader, patterns:, sort_union_types: true)
|
27
27
|
@loader = loader
|
28
28
|
@patterns = patterns
|
29
|
+
@sort_union_types = sort_union_types
|
29
30
|
|
30
31
|
@captured_dict = Hash.new { |h, k| h[k] = Hash.new { |hh, kk| hh[kk] = [] } }
|
31
32
|
end
|
@@ -45,6 +46,7 @@ module Orthoses
|
|
45
46
|
|
46
47
|
@captured_dict.each do |mod_name, captures|
|
47
48
|
captures.each do |(kind, prefix, name), types|
|
49
|
+
types.sort! if @sort_union_types
|
48
50
|
injected = Utils::TypeList.new(types).inject
|
49
51
|
store[mod_name] << "#{kind} #{prefix}#{name}: #{injected}"
|
50
52
|
end
|
@@ -7,9 +7,10 @@ module Orthoses
|
|
7
7
|
Info = Struct.new(:key, :op_name_types, :raised, keyword_init: true)
|
8
8
|
include Targetable
|
9
9
|
|
10
|
-
def initialize(loader, patterns:)
|
10
|
+
def initialize(loader, patterns:, sort_union_types: true)
|
11
11
|
@loader = loader
|
12
12
|
@patterns = patterns
|
13
|
+
@sort_union_types = sort_union_types
|
13
14
|
|
14
15
|
@stack = []
|
15
16
|
@args_return_map = Hash.new { |h, k| h[k] = [] }
|
@@ -36,9 +37,7 @@ module Orthoses
|
|
36
37
|
case tp.event
|
37
38
|
when :call
|
38
39
|
if tp.defined_class.singleton_class?
|
39
|
-
|
40
|
-
m = tp.defined_class.to_s&.match(/#<Class:([\w:]+)>/) or next
|
41
|
-
mod_name = m[1] or next
|
40
|
+
mod_name = Utils.attached_module_name(tp.defined_class) or next
|
42
41
|
kind = :singleton
|
43
42
|
else
|
44
43
|
mod_name = Utils.module_name(tp.defined_class) or next
|
@@ -81,6 +80,7 @@ module Orthoses
|
|
81
80
|
|
82
81
|
@args_return_map.map do |(mod_name, kind, visibility, method_id), type_samples|
|
83
82
|
type_samples.uniq!
|
83
|
+
type_samples.sort! if @sort_union_types
|
84
84
|
method_types = type_samples.map do |(op_name_types, return_type)|
|
85
85
|
required_positionals = []
|
86
86
|
optional_positionals = []
|
data/lib/orthoses/utils.rb
CHANGED
@@ -171,6 +171,17 @@ module Orthoses
|
|
171
171
|
end
|
172
172
|
end
|
173
173
|
|
174
|
+
def self.attached_module_name(mod)
|
175
|
+
if mod.respond_to?(:attached_object)
|
176
|
+
attached_object = mod.attached_object
|
177
|
+
(attached_object&.is_a?(Module) && attached_object.name) || nil
|
178
|
+
else
|
179
|
+
# e.g. `Minitest::Spec::DSL#to_s` may return `nil` with `#to_s`
|
180
|
+
m = mod.to_s&.match(/#<Class:([\w:]+)>/)
|
181
|
+
m && m[1]
|
182
|
+
end
|
183
|
+
end
|
184
|
+
|
174
185
|
def self.known_type_params(name)
|
175
186
|
type_name =
|
176
187
|
case name
|
data/lib/orthoses/version.rb
CHANGED
data/lib/orthoses.rb
CHANGED
@@ -14,6 +14,7 @@ module Orthoses
|
|
14
14
|
autoload :CreateFileByName, 'orthoses/create_file_by_name'
|
15
15
|
autoload :DelegateClass, 'orthoses/delegate_class'
|
16
16
|
autoload :Descendants, 'orthoses/descendants'
|
17
|
+
autoload :ExcludeRBS, 'orthoses/exclude_rbs'
|
17
18
|
autoload :Filter, 'orthoses/filter'
|
18
19
|
autoload :Mixin, 'orthoses/mixin'
|
19
20
|
autoload :LazyTracePoint, 'orthoses/lazy_trace_point'
|
@@ -17,7 +17,7 @@ module Orthoses::CallTracer::Capturable
|
|
17
17
|
end
|
18
18
|
|
19
19
|
module Orthoses::CallTracer::Capturable::ExtractRestParameters
|
20
|
-
def __extract_rest_parameters__: (*untyped rest, **untyped kw_rest) { () -> untyped } ->
|
20
|
+
def __extract_rest_parameters__: (*untyped rest, **untyped kw_rest) { (*untyped, **untyped) -> untyped } -> untyped
|
21
21
|
end
|
22
22
|
|
23
23
|
class Orthoses::CallTracer::Capture < ::Struct[untyped]
|
data/sig/orthoses/constant.rbs
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
class Orthoses::Constant
|
4
4
|
@loader: Orthoses::_Call
|
5
5
|
@strict: bool
|
6
|
-
@if: ^(Module mod, Symbol const, untyped val, String rbs) -> boolish?
|
6
|
+
@if: (^(Module mod, Symbol const, untyped val, String rbs) -> boolish)?
|
7
7
|
@on_error: ^(Orthoses::ConstLoadError) -> void | nil
|
8
8
|
def initialize: (Orthoses::_Call loader, ?strict: bool, ?if: ^(Module, Symbol, untyped) -> boolish | nil, ?on_error: ^(Orthoses::ConstLoadError) -> void | nil) -> void
|
9
9
|
def call: () -> Orthoses::store
|
@@ -1,5 +1,10 @@
|
|
1
1
|
# THIS IS GENERATED CODE from `$ rake sig`
|
2
2
|
|
3
|
+
# @param to [String, nil]
|
4
|
+
# @param header [String, nil]
|
5
|
+
# @param if [Proc, nil]
|
6
|
+
# @param depth [Integer, Hash{String => Integer}, nil]
|
7
|
+
# @param rmtree [Boolean]
|
3
8
|
class Orthoses::CreateFileByName
|
4
9
|
@loader: Orthoses::_Call
|
5
10
|
@to: untyped
|
@@ -7,6 +12,7 @@ class Orthoses::CreateFileByName
|
|
7
12
|
@depth: untyped
|
8
13
|
@rmtree: untyped
|
9
14
|
@if: untyped
|
10
|
-
def initialize: (Orthoses::_Call loader, to: String, ?header: String?, ?depth: Integer
|
15
|
+
def initialize: (Orthoses::_Call loader, to: String, ?header: String?, ?depth: Integer | Hash[String, Integer] | nil, ?rmtree: boolish) -> void
|
11
16
|
def call: () -> Orthoses::store
|
17
|
+
def extract: (untyped name) -> untyped
|
12
18
|
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
# THIS IS GENERATED CODE from `$ rake sig`
|
2
|
+
|
3
|
+
# Exclude RBS from output.
|
4
|
+
# @example
|
5
|
+
# use Orthoses::ExcludeRBS, paths: Dir['sig/hand-written/**/*.rbs']
|
6
|
+
class Orthoses::ExcludeRBS
|
7
|
+
@loader: untyped
|
8
|
+
@paths: untyped
|
9
|
+
@rbs: untyped
|
10
|
+
def initialize: (untyped loader, ?paths: untyped?, ?rbs: untyped?) -> void
|
11
|
+
def call: () -> untyped
|
12
|
+
def add_signature_to_known_env: (untyped rbs) -> untyped
|
13
|
+
end
|
data/sig/orthoses/trace.rbs
CHANGED
@@ -10,9 +10,10 @@ end
|
|
10
10
|
class Orthoses::Trace::Attribute
|
11
11
|
@loader: untyped
|
12
12
|
@patterns: untyped
|
13
|
+
@sort_union_types: untyped
|
13
14
|
@captured_dict: untyped
|
14
|
-
def initialize: (
|
15
|
-
def call: () ->
|
15
|
+
def initialize: (Orthoses::_Call loader, patterns: Array[String], ?sort_union_types: bool?) -> void
|
16
|
+
def call: () -> Orthoses::store
|
16
17
|
private def build_trace_hook: () -> untyped
|
17
18
|
include Orthoses::Trace::Targetable
|
18
19
|
end
|
@@ -30,11 +31,12 @@ end
|
|
30
31
|
class Orthoses::Trace::Method
|
31
32
|
@loader: untyped
|
32
33
|
@patterns: untyped
|
34
|
+
@sort_union_types: untyped
|
33
35
|
@stack: untyped
|
34
36
|
@args_return_map: untyped
|
35
37
|
@alias_map: untyped
|
36
|
-
def initialize: (
|
37
|
-
def call: () ->
|
38
|
+
def initialize: (Orthoses::_Call loader, patterns: Array[String], ?sort_union_types: bool?) -> void
|
39
|
+
def call: () -> Orthoses::store
|
38
40
|
private def build_trace_point: () -> untyped
|
39
41
|
private def build_members: () -> untyped
|
40
42
|
private def build_method_definitions: () -> untyped
|
data/sig/orthoses/utils.rbs
CHANGED
@@ -21,6 +21,8 @@ module Orthoses::Utils
|
|
21
21
|
|
22
22
|
def self.module_to_type_name: (Module) -> RBS::TypeName?
|
23
23
|
|
24
|
+
def self.attached_module_name: (Module) -> String?
|
25
|
+
|
24
26
|
def self.known_type_params: (Module | String) -> Array[RBS::AST::TypeParam]?
|
25
27
|
|
26
28
|
def self.new_store: () -> Orthoses::store
|
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: 1.
|
4
|
+
version: 1.15.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- ksss
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2024-10-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rbs
|
@@ -49,6 +49,7 @@ files:
|
|
49
49
|
- lib/orthoses/create_file_by_name.rb
|
50
50
|
- lib/orthoses/delegate_class.rb
|
51
51
|
- lib/orthoses/descendants.rb
|
52
|
+
- lib/orthoses/exclude_rbs.rb
|
52
53
|
- lib/orthoses/filter.rb
|
53
54
|
- lib/orthoses/lazy_trace_point.rb
|
54
55
|
- lib/orthoses/load_rbs.rb
|
@@ -89,6 +90,7 @@ files:
|
|
89
90
|
- sig/orthoses/create_file_by_name.rbs
|
90
91
|
- sig/orthoses/delegate_class.rbs
|
91
92
|
- sig/orthoses/descendants.rbs
|
93
|
+
- sig/orthoses/exclude_rbs.rbs
|
92
94
|
- sig/orthoses/filter.rbs
|
93
95
|
- sig/orthoses/lazy_trace_point.rbs
|
94
96
|
- sig/orthoses/load_rbs.rbs
|
@@ -122,14 +124,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
122
124
|
requirements:
|
123
125
|
- - ">="
|
124
126
|
- !ruby/object:Gem::Version
|
125
|
-
version: 3.
|
127
|
+
version: 3.1.0
|
126
128
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
127
129
|
requirements:
|
128
130
|
- - ">="
|
129
131
|
- !ruby/object:Gem::Version
|
130
132
|
version: '0'
|
131
133
|
requirements: []
|
132
|
-
rubygems_version: 3.
|
134
|
+
rubygems_version: 3.5.16
|
133
135
|
signing_key:
|
134
136
|
specification_version: 4
|
135
137
|
summary: Framework for Generate RBS
|