rbs_rails 0.4.1 → 0.5.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.
@@ -1,4 +0,0 @@
1
- # patches
2
-
3
- This directory has monkey patches for RBS to make to pass `rbs validate`.
4
- These patches are unnecessary ideally, but we need them for some reasons, such as RBS's bug.
@@ -1,74 +0,0 @@
1
-
2
- module AbstractController
3
- class Base
4
- # alias bug: https://github.com/ruby/rbs/issues/458
5
- def send: (String | Symbol name, *untyped args) ?{ (*untyped) -> untyped } -> untyped
6
-
7
- # bug: rbs prototype rb isn't aware of `class << self` for attr_reader
8
- # https://github.com/rails/rails/blob/fbe2433be6e052a1acac63c7faf287c52ed3c5ba/actionpack/lib/abstract_controller/base.rb#L34-L35
9
- def self.abstract: () -> untyped
10
- end
11
- end
12
-
13
- module ActionController
14
- class Metal
15
- # alias bug?: https://github.com/ruby/rbs/issues/458
16
- def status: -> untyped
17
- end
18
-
19
- class LiveTestResponse < Live::Response
20
- # alias bug?: https://github.com/ruby/rbs/issues/458
21
- def successful?: -> untyped
22
- def not_found?: -> untyped
23
- def server_error?: -> untyped
24
- end
25
- end
26
-
27
- module ActionDispatch
28
- class Response
29
- # alias bug: https://github.com/ruby/rbs/issues/458
30
- attr_accessor cache_control: untyped
31
-
32
- # alias bug: https://github.com/ruby/rbs/issues/458
33
- def location: () -> untyped
34
- end
35
-
36
- class Cookies
37
- class CookieJar
38
- # alias bug: https://github.com/ruby/rbs/issues/458
39
- def to_h: () -> ::Hash[untyped, untyped]
40
- | [T, U] () { (untyped) -> [T, U] } -> ::Hash[T, U]
41
- end
42
- end
43
-
44
- module Journey
45
- module Nodes
46
- class Terminal < Node
47
- # alias bug: https://github.com/ruby/rbs/issues/458
48
- def left: () -> untyped
49
- end
50
- end
51
- end
52
-
53
- module Routing
54
- class Mapper
55
- module Resources
56
- class SingletonResource < Resource
57
- # alias bug: https://github.com/ruby/rbs/issues/458
58
- attr_reader path: untyped
59
- end
60
- end
61
- end
62
-
63
- class OptionRedirect < Redirect
64
- # alias bug: https://github.com/ruby/rbs/issues/458
65
- attr_reader block: untyped
66
- end
67
-
68
- class RouteSet
69
- # alias bug: https://github.com/ruby/rbs/issues/458
70
- def to_s: () -> String
71
- end
72
- end
73
- end
74
-
@@ -1,19 +0,0 @@
1
-
2
- module ActionView
3
- class OutputBuffer < ActiveSupport::SafeBuffer
4
- # alias bug: https://github.com/ruby/rbs/issues/458
5
- def safe_concat: (untyped value) -> untyped
6
- end
7
-
8
- class LookupContext
9
- class DetailsKey
10
- # alias bug: https://github.com/ruby/rbs/issues/458
11
- def equal?: (untyped other) -> bool
12
- end
13
- end
14
-
15
- class Resolver
16
- # Defined with meta-programming
17
- def self.caching: () -> untyped
18
- end
19
- end
@@ -1,11 +0,0 @@
1
- module ActiveModel
2
- module Serialization
3
- # alias bug: https://github.com/ruby/rbs/issues/458
4
- def `send`: (String name, *untyped args) ?{ (*untyped) -> untyped } -> untyped
5
- end
6
-
7
- module Validations
8
- # alias bug: https://github.com/ruby/rbs/issues/458
9
- def `send`: (String name, *untyped args) ?{ (*untyped) -> untyped } -> untyped
10
- end
11
- end
@@ -1,84 +0,0 @@
1
- module ActiveRecord
2
- class Relation
3
- # alias bug: https://github.com/ruby/rbs/issues/458
4
- def lock_value: () -> untyped
5
- end
6
-
7
- module QueryMethods
8
- # It is defined with meta programming
9
- def extending_values: () -> untyped
10
- end
11
-
12
- module ConnectionAdapters
13
- module PostgreSQL
14
- module OID
15
- class Uuid < ActiveModel::Type::Value
16
- # alias bug: https://github.com/ruby/rbs/issues/458
17
- def deserialize: (*untyped) -> untyped
18
- end
19
- end
20
- end
21
- end
22
-
23
- module ConnectionAdapters
24
- class PostgreSQLAdapter < AbstractAdapter
25
- def database_version: (*untyped) -> untyped
26
- end
27
- end
28
-
29
- class Migration
30
- class CommandRecorder
31
- # They are defined with meta programming
32
- def add_reference: (*untyped) -> untyped
33
- def remove_reference: (*untyped) -> untyped
34
- def invert_add_reference: (*untyped) -> untyped
35
- def invert_remove_reference: (*untyped) -> untyped
36
- end
37
- end
38
-
39
- class Result
40
- # alias bug: https://github.com/ruby/rbs/issues/458
41
- def map: [U] () { (untyped arg0) -> U } -> ::Array[U]
42
- | () -> ::Enumerator[untyped, ::Array[untyped]]
43
- end
44
- end
45
-
46
- module Arel
47
- module Nodes
48
- class Quoted < Arel::Nodes::Unary
49
- # alias bug: https://github.com/ruby/rbs/issues/458
50
- def value: () -> untyped
51
- end
52
-
53
- class Equality < Arel::Nodes::Binary
54
- # alias bug: https://github.com/ruby/rbs/issues/458
55
- def left: () -> untyped
56
- # alias bug: https://github.com/ruby/rbs/issues/458
57
- def right: () -> untyped
58
- end
59
-
60
- class TableAlias < Arel::Nodes::Binary
61
- # alias bug: https://github.com/ruby/rbs/issues/458
62
- def left: () -> untyped
63
- # alias bug: https://github.com/ruby/rbs/issues/458
64
- def right: () -> untyped
65
- end
66
-
67
- class UnqualifiedColumn < Arel::Nodes::Unary
68
- # alias bug: https://github.com/ruby/rbs/issues/458
69
- def expr: () -> untyped
70
- # alias bug: https://github.com/ruby/rbs/issues/458
71
- def expr=: (untyped) -> untyped
72
- end
73
-
74
- class ValuesList < Unary
75
- # alias bug: https://github.com/ruby/rbs/issues/458
76
- def expr: () -> untyped
77
- end
78
-
79
- class With < Arel::Nodes::Unary
80
- # alias bug: https://github.com/ruby/rbs/issues/458
81
- def expr: () -> untyped
82
- end
83
- end
84
- end
@@ -1,48 +0,0 @@
1
- class Object
2
- # Object#sum is actually not defined, but rbs prototype rb generates it mistakenly due to `class << Benchmark`.
3
- # So we need to define it to suppress the alias error.
4
- def sum: () -> untyped
5
- end
6
-
7
- class Time
8
- # alias bug: https://github.com/ruby/rbs/issues/458
9
- def xmlschema: (?::Integer fraction_digits) -> ::String
10
- end
11
-
12
- module ActiveSupport
13
- class TestCase < ::Minitest::Test
14
- # alias bug: https://github.com/ruby/rbs/issues/458
15
- def name: () -> untyped
16
- def assert_raises: (*untyped) -> untyped
17
- def refute_empty: (*untyped) -> untyped
18
- def refute_equal: (*untyped) -> untyped
19
- def refute_in_delta: (*untyped) -> untyped
20
- def refute_in_epsilon: (*untyped) -> untyped
21
- def refute_includes: (*untyped) -> untyped
22
- def refute_instance_of: (*untyped) -> untyped
23
- def refute_kind_of: (*untyped) -> untyped
24
- def refute_match: (*untyped) -> untyped
25
- def refute_nil: (*untyped) -> untyped
26
- def refute_operator: (*untyped) -> untyped
27
- def refute_predicate: (*untyped) -> untyped
28
- def refute_respond_to: (*untyped) -> untyped
29
- def refute_same: (*untyped) -> untyped
30
- end
31
-
32
- module Notifications
33
- class Fanout
34
- module Subscribers
35
- class AllMessages
36
- # alias bug: https://github.com/ruby/rbs/issues/458
37
- def ===: (untyped) -> bool
38
- end
39
- end
40
- end
41
- end
42
-
43
- class TimeWithZone
44
- # alias bug: https://github.com/ruby/rbs/issues/458
45
- def <: (untyped) -> bool
46
- def >: (untyped) -> bool
47
- end
48
- end
@@ -1,30 +0,0 @@
1
-
2
- module Rails
3
- class Application < Engine
4
- # alias bug: https://github.com/ruby/rbs/issues/458
5
- def app: () -> untyped
6
- end
7
-
8
- class Engine < Railtie
9
- # bug: rbs prototype rb isn't aware of `class << self` for attr_*
10
- def self.isolated: () -> untyped
11
- def self.isolated=: (untyped) -> untyped
12
-
13
- # alias bug: https://github.com/ruby/rbs/issues/458
14
- def self.railtie_name: (?untyped? name) -> untyped
15
- end
16
-
17
- module Generators
18
- class PluginGenerator < AppBase
19
- # alias bug: https://github.com/ruby/rbs/issues/458
20
- def app_path: () -> untyped
21
- end
22
- end
23
-
24
- module Initializable
25
- class Collection[T] < Array[T]
26
- def each: () -> ::Enumerator[T, self]
27
- | () { (T item) -> void } -> self
28
- end
29
- end
30
- end
@@ -1,201 +0,0 @@
1
- # Usage
2
- #
3
- # ruby bin/generate_rbs_from_rails_source_code.rb ../../rails/rails actionpack
4
-
5
- require 'bundler/inline'
6
-
7
- require 'pathname'
8
- require 'open3'
9
-
10
- SIG_DIR = Pathname('assets/sig/generated/')
11
-
12
- def bin(c)
13
- Pathname(__dir__).join(c).to_s
14
- end
15
-
16
- def sh!(*cmd, **kwargs)
17
- puts(cmd.join(' '))
18
- Open3.capture2(*cmd, **kwargs).then do |out, status|
19
- raise unless status.success?
20
-
21
- out
22
- end
23
- end
24
-
25
- def patch!(name, rbs)
26
- case name
27
- when 'actionpack'
28
- rbs.gsub!(/( def _reduce_\d+: \(untyped val, untyped _values\) -> )([A-Z]\w*)/) do
29
- "#{$~[1]}Nodes::#{$~[2]}"
30
- end || raise('it looks unnecessary.')
31
-
32
- # XXX: I guess add-type-params.rb resolves this
33
- rbs.gsub!('-> Parameter', '-> Parameter[untyped]') || raise('it looks unnecessary')
34
- when 'railties'
35
- rbs.gsub!(
36
- 'class NonSymbolAccessDeprecatedHash < HashWithIndifferentAccess',
37
- 'class NonSymbolAccessDeprecatedHash[T, U] < HashWithIndifferentAccess[T, U]')
38
- # XXX: I guess add-type-params.rb resolves this
39
- rbs.gsub!(
40
- 'def middleware: () -> Hash',
41
- 'def middleware: () -> Hash[untyped, untyped]')
42
- # XXX: I guess add-type-params.rb resolves this
43
- rbs.gsub!(
44
- 'def +: (untyped other) -> Collection',
45
- 'def +: (untyped other) -> Collection[untyped]')
46
- # XXX: I guess add-type-params.rb resolves this
47
- rbs.gsub!(
48
- 'def initializers_for: (untyped binding) -> Collection',
49
- 'def initializers_for: (untyped binding) -> Collection[untyped]')
50
- when 'activesupport'
51
- rbs.gsub!(
52
- /^ include Java$/,
53
- ' # include Java # Java module is missing')
54
- # XXX: I guess add-type-params.rb resolves this
55
- rbs.gsub!(
56
- 'class Configuration < ActiveSupport::InheritableOptions',
57
- 'class Configuration[T, U] < ActiveSupport::InheritableOptions[T, U]')
58
- # XXX: I guess add-type-params.rb resolves this
59
- rbs.gsub!(
60
- 'class InheritableOptions < OrderedOptions',
61
- 'class InheritableOptions[T, U] < OrderedOptions[T, U]')
62
- rbs.gsub!( # ref: 5c507aaae492ff5b2002fdd3ece2044b283b5d6f
63
- 'include ActiveSupport::Logger::Severity',
64
- 'include ::Logger::Severity')
65
- # XXX: I guess add-type-params.rb resolves this
66
- rbs.gsub!(
67
- 'def with_indifferent_access: () -> ActiveSupport::HashWithIndifferentAccess',
68
- 'def with_indifferent_access: () -> ActiveSupport::HashWithIndifferentAccess[K, V]')
69
- # XXX: I guess add-type-params.rb resolves this
70
- rbs.gsub!(
71
- 'def inquiry: () -> ActiveSupport::ArrayInquirer',
72
- 'def inquiry: () -> ActiveSupport::ArrayInquirer[Elem]')
73
-
74
- # These aliases are actually defined, but it causes duplicated method definition
75
- rbs.gsub!('alias to_s to_formatted_s', '')
76
- rbs.gsub!('alias + plus_with_duration', '')
77
- rbs.gsub!('alias - minus_with_duration', '')
78
- rbs.gsub!('alias - minus_with_coercion', '')
79
- rbs.gsub!('alias <=> compare_with_coercion', '')
80
- rbs.gsub!('alias eql? eql_with_coercion', '')
81
- rbs.gsub!('alias self.at self.at_with_coercion', '')
82
- rbs.gsub!('alias inspect readable_inspect', '')
83
- rbs.gsub!('alias default_inspect inspect', '')
84
-
85
- rbs.gsub!('HashWithIndifferentAccess: untyped', <<~RBS)
86
- # NOTE: HashWithIndifferentAccess and ActiveSupport::HashWithIndifferentAccess are the same object
87
- # but RBS doesn't have class alias syntax
88
- class HashWithIndifferentAccess[T, U] < ActiveSupport::HashWithIndifferentAccess[T, U]
89
- end
90
- RBS
91
- when 'actionview'
92
- rbs.gsub!(
93
- 'class CheckBoxBuilder < Builder',
94
- 'class CheckBoxBuilder < CollectionHelpers::Builder')
95
- rbs.gsub!(
96
- 'class RadioButtonBuilder < Builder',
97
- 'class RadioButtonBuilder < CollectionHelpers::Builder')
98
- rbs.gsub!('TemplateError: untyped', <<~RBS)
99
- # It is actual TemplateError = Template::Error, but we can't write it in RBS
100
- class TemplateError < Template::Error
101
- end
102
- RBS
103
- when 'activerecord'
104
- rbs.gsub!(':==', 'Symbol') # To avoid syntax error
105
-
106
- rbs.gsub!(
107
- '< Type::Value',
108
- '< ActiveModel::Type::Value')
109
- rbs.gsub!(
110
- '< Type::Binary',
111
- '< ActiveModel::Type::Binary')
112
- rbs.gsub!(
113
- '< Type::Decimal',
114
- '< ActiveModel::Type::Decimal')
115
- rbs.gsub!(
116
- '< Type::String',
117
- '< ActiveModel::Type::String')
118
- rbs.gsub!(
119
- '< Type::Integer',
120
- '< ActiveModel::Type::Integer')
121
-
122
- rbs.gsub!(
123
- 'class SchemaDumper < SchemaDumper',
124
- 'class SchemaDumper < ActiveRecord::SchemaDumper')
125
- rbs.gsub!(
126
- 'def schema_creation: () -> SchemaCreation',
127
- 'def schema_creation: () -> untyped')
128
- rbs.gsub!('V6_0: untyped', <<~RBS)
129
- # V6_0 and Current are the same object actually. hack for https://github.com/ruby/rbs/issues/345
130
- class V6_0 < Current
131
- end
132
- RBS
133
- rbs.gsub!('alias numeric decimal', '')
134
-
135
- # XXX: I guess add-type-params.rb resolves this
136
- rbs.gsub!(
137
- '-> ColumnDefinition',
138
- '-> ColumnDefinition[untyped]')
139
- # XXX: I guess add-type-params.rb resolves this
140
- rbs.gsub!(
141
- 'def build_point: (untyped x, untyped y) -> ActiveRecord::Point',
142
- 'def build_point: (untyped x, untyped y) -> ActiveRecord::Point[untyped]')
143
- # XXX: I guess add-type-params.rb resolves this
144
- rbs.gsub!(
145
- 'class NullMigration < MigrationProxy',
146
- 'class NullMigration[T] < MigrationProxy[T]')
147
- # XXX: I guess add-type-params.rb resolves this
148
- rbs.gsub!(
149
- '-> JoinKeys',
150
- '-> JoinKeys[untyped]')
151
- # XXX: I guess add-type-params.rb resolves this
152
- rbs.gsub!(
153
- 'def row_num_literal: (untyped order_by) -> RowNumber',
154
- 'def row_num_literal: (untyped order_by) -> RowNumber[untyped]')
155
-
156
- rbs.gsub!(
157
- 'def get_database_version: () -> Version',
158
- 'def get_database_version: () -> AbstractAdapter::Version')
159
- rbs.gsub!(
160
- 'def get_database_version: () -> SQLite3Adapter::Version',
161
- 'def get_database_version: () -> AbstractAdapter::Version')
162
- rbs.gsub!(
163
- 'def []: (untyped name) -> Attribute',
164
- 'def []: (untyped name) -> ::Arel::Attributes::Attribute')
165
-
166
- end
167
- end
168
-
169
- def generate1!(rails_code_dir, name)
170
- files = Pathname(rails_code_dir).join(name, 'lib').glob('**/*.rb').map(&:to_s)
171
- generated_rbs_path = SIG_DIR.join("#{name}.rbs")
172
-
173
- rbs = sh! 'ruby', bin("rbs-prototype-rb.rb"), 'prototype', 'rb', *files
174
- rbs.gsub!(/^(?<indent>\s*)class (?<name>\S+) < $/) { "#{$~[:indent]}class #{$~[:name]} # Note: It inherits unnamed class, but omitted" }
175
- rbs.gsub!(/[^[:ascii:]]+/, '(trim non-ascii characters)')
176
- patch! name, rbs
177
- generated_rbs_path.write(rbs)
178
-
179
- end
180
-
181
- def generate2!(rails_code_dir, name)
182
- generated_rbs_path = SIG_DIR.join("#{name}.rbs")
183
-
184
- rbs = sh! 'ruby', bin('add-type-params.rb'), generated_rbs_path.to_s
185
- generated_rbs_path.write(rbs)
186
-
187
- sh!({ 'ONLY' => name }, 'ruby', bin('postprocess.rb'), '-rlogger', '-rmutex_m', '-Iassets/sig', '-Isig', 'assets/')
188
- end
189
-
190
- def main(rails_code_dir, name)
191
- if name == 'all'
192
- gems = %w[activesupport actionpack activejob activemodel actionview activerecord railties]
193
- gems.each { |n| generate1!(rails_code_dir, n) }
194
- gems.each { |n| generate2!(rails_code_dir, n) }
195
- else
196
- generate1!(rails_code_dir, name)
197
- generate2!(rails_code_dir, name)
198
- end
199
- end
200
-
201
- main(*ARGV)