rbs 3.0.0.dev.1 → 3.0.0.dev.3

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.
Files changed (165) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/comments.yml +2 -1
  3. data/.github/workflows/ruby.yml +4 -3
  4. data/CHANGELOG.md +28 -0
  5. data/Gemfile.lock +12 -12
  6. data/README.md +1 -0
  7. data/Rakefile +77 -3
  8. data/Steepfile +1 -1
  9. data/core/array.rbs +574 -424
  10. data/core/basic_object.rbs +11 -39
  11. data/core/binding.rbs +1 -1
  12. data/core/builtin.rbs +9 -1
  13. data/core/class.rbs +37 -0
  14. data/core/comparable.rbs +7 -18
  15. data/core/complex.rbs +2 -2
  16. data/core/data.rbs +419 -0
  17. data/core/dir.rbs +52 -104
  18. data/core/encoding.rbs +22 -181
  19. data/core/enumerable.rbs +212 -175
  20. data/core/enumerator/product.rbs +96 -0
  21. data/core/enumerator.rbs +57 -8
  22. data/core/errors.rbs +8 -2
  23. data/core/exception.rbs +41 -0
  24. data/core/fiber.rbs +95 -12
  25. data/core/file.rbs +840 -275
  26. data/core/file_test.rbs +34 -19
  27. data/core/float.rbs +40 -96
  28. data/core/gc.rbs +15 -3
  29. data/core/hash.rbs +114 -176
  30. data/core/integer.rbs +85 -145
  31. data/core/io/buffer.rbs +187 -60
  32. data/core/io/wait.rbs +28 -16
  33. data/core/io.rbs +1859 -1389
  34. data/core/kernel.rbs +525 -961
  35. data/core/match_data.rbs +306 -142
  36. data/core/math.rbs +506 -234
  37. data/core/method.rbs +0 -24
  38. data/core/module.rbs +111 -18
  39. data/core/nil_class.rbs +2 -0
  40. data/core/numeric.rbs +76 -144
  41. data/core/object.rbs +88 -212
  42. data/core/proc.rbs +17 -5
  43. data/core/process.rbs +22 -5
  44. data/core/ractor.rbs +1 -1
  45. data/core/random.rbs +20 -3
  46. data/core/range.rbs +91 -89
  47. data/core/rational.rbs +2 -3
  48. data/core/rbs/unnamed/argf.rbs +177 -120
  49. data/core/rbs/unnamed/env_class.rbs +89 -163
  50. data/core/rbs/unnamed/random.rbs +36 -12
  51. data/core/refinement.rbs +8 -0
  52. data/core/regexp.rbs +462 -272
  53. data/core/ruby_vm.rbs +210 -0
  54. data/{stdlib/set/0 → core}/set.rbs +43 -47
  55. data/core/string.rbs +1403 -1332
  56. data/core/string_io.rbs +191 -107
  57. data/core/struct.rbs +67 -63
  58. data/core/symbol.rbs +187 -201
  59. data/core/thread.rbs +40 -35
  60. data/core/time.rbs +902 -826
  61. data/core/trace_point.rbs +55 -6
  62. data/core/unbound_method.rbs +48 -24
  63. data/docs/collection.md +4 -0
  64. data/docs/syntax.md +55 -0
  65. data/ext/rbs_extension/constants.c +16 -2
  66. data/ext/rbs_extension/constants.h +8 -1
  67. data/ext/rbs_extension/extconf.rb +1 -1
  68. data/ext/rbs_extension/lexer.c +834 -777
  69. data/ext/rbs_extension/lexer.h +3 -1
  70. data/ext/rbs_extension/lexer.re +3 -1
  71. data/ext/rbs_extension/lexstate.c +4 -2
  72. data/ext/rbs_extension/parser.c +262 -43
  73. data/ext/rbs_extension/ruby_objs.c +56 -2
  74. data/ext/rbs_extension/ruby_objs.h +7 -1
  75. data/lib/rbs/annotate/rdoc_annotator.rb +1 -1
  76. data/lib/rbs/ast/declarations.rb +49 -2
  77. data/lib/rbs/ast/directives.rb +39 -0
  78. data/lib/rbs/cli.rb +38 -19
  79. data/lib/rbs/collection/cleaner.rb +8 -1
  80. data/lib/rbs/collection/config/lockfile.rb +3 -1
  81. data/lib/rbs/collection/config/lockfile_generator.rb +37 -30
  82. data/lib/rbs/collection/config.rb +3 -3
  83. data/lib/rbs/collection/sources/git.rb +10 -3
  84. data/lib/rbs/collection/sources/local.rb +79 -0
  85. data/lib/rbs/collection/sources.rb +8 -1
  86. data/lib/rbs/definition_builder/ancestor_builder.rb +24 -8
  87. data/lib/rbs/definition_builder.rb +8 -8
  88. data/lib/rbs/environment/use_map.rb +77 -0
  89. data/lib/rbs/environment.rb +358 -88
  90. data/lib/rbs/environment_loader.rb +12 -9
  91. data/lib/rbs/environment_walker.rb +1 -1
  92. data/lib/rbs/errors.rb +52 -37
  93. data/lib/rbs/locator.rb +27 -8
  94. data/lib/rbs/parser_aux.rb +8 -6
  95. data/lib/rbs/resolver/constant_resolver.rb +23 -7
  96. data/lib/rbs/resolver/type_name_resolver.rb +2 -1
  97. data/lib/rbs/sorter.rb +5 -5
  98. data/lib/rbs/test/setup.rb +1 -1
  99. data/lib/rbs/type_alias_dependency.rb +1 -1
  100. data/lib/rbs/type_alias_regularity.rb +3 -3
  101. data/lib/rbs/validator.rb +23 -2
  102. data/lib/rbs/variance_calculator.rb +2 -2
  103. data/lib/rbs/version.rb +1 -1
  104. data/lib/rbs/writer.rb +28 -2
  105. data/lib/rbs.rb +2 -2
  106. data/lib/rdoc_plugin/parser.rb +2 -2
  107. data/rbs.gemspec +1 -1
  108. data/sig/ancestor_graph.rbs +22 -2
  109. data/sig/collection/config/lockfile_generator.rbs +8 -10
  110. data/sig/collection/config.rbs +1 -1
  111. data/sig/collection/sources.rbs +44 -9
  112. data/sig/constant.rbs +1 -1
  113. data/sig/declarations.rbs +36 -3
  114. data/sig/definition.rbs +1 -1
  115. data/sig/definition_builder.rbs +0 -1
  116. data/sig/directives.rbs +61 -0
  117. data/sig/environment.rbs +150 -29
  118. data/sig/environment_loader.rbs +1 -1
  119. data/sig/errors.rbs +22 -1
  120. data/sig/locator.rbs +14 -2
  121. data/sig/parser.rbs +8 -15
  122. data/sig/resolver/constant_resolver.rbs +1 -2
  123. data/sig/shims/{abstract_syntax_tree.rbs → _abstract_syntax_tree.rbs} +0 -0
  124. data/sig/shims/bundler.rbs +18 -0
  125. data/sig/shims/rubygems.rbs +6 -0
  126. data/sig/use_map.rbs +35 -0
  127. data/sig/validator.rbs +12 -5
  128. data/sig/writer.rbs +4 -2
  129. data/stdlib/bigdecimal/0/big_decimal.rbs +16 -13
  130. data/stdlib/cgi/0/core.rbs +16 -0
  131. data/stdlib/coverage/0/coverage.rbs +50 -8
  132. data/stdlib/csv/0/csv.rbs +1 -1
  133. data/stdlib/date/0/date.rbs +856 -726
  134. data/stdlib/date/0/date_time.rbs +83 -210
  135. data/stdlib/erb/0/erb.rbs +13 -36
  136. data/stdlib/etc/0/etc.rbs +127 -20
  137. data/stdlib/fileutils/0/fileutils.rbs +1290 -381
  138. data/stdlib/logger/0/logger.rbs +466 -316
  139. data/stdlib/net-http/0/net-http.rbs +2211 -534
  140. data/stdlib/nkf/0/nkf.rbs +5 -5
  141. data/stdlib/objspace/0/objspace.rbs +31 -14
  142. data/stdlib/openssl/0/openssl.rbs +11 -7
  143. data/stdlib/optparse/0/optparse.rbs +20 -17
  144. data/stdlib/pathname/0/pathname.rbs +21 -4
  145. data/stdlib/pstore/0/pstore.rbs +378 -154
  146. data/stdlib/pty/0/pty.rbs +24 -8
  147. data/stdlib/ripper/0/ripper.rbs +1650 -0
  148. data/stdlib/socket/0/addrinfo.rbs +9 -15
  149. data/stdlib/socket/0/socket.rbs +36 -3
  150. data/stdlib/strscan/0/string_scanner.rbs +7 -5
  151. data/stdlib/tempfile/0/tempfile.rbs +104 -44
  152. data/stdlib/time/0/time.rbs +2 -2
  153. data/stdlib/uri/0/file.rbs +5 -0
  154. data/stdlib/uri/0/generic.rbs +2 -2
  155. data/stdlib/yaml/0/yaml.rbs +2 -2
  156. data/stdlib/zlib/0/zlib.rbs +1 -1
  157. metadata +13 -13
  158. data/core/deprecated.rbs +0 -9
  159. data/lib/rbs/constant_table.rb +0 -167
  160. data/lib/rbs/type_name_resolver.rb +0 -67
  161. data/sig/constant_table.rbs +0 -30
  162. data/sig/shims/ripper.rbs +0 -8
  163. data/sig/type_name_resolver.rbs +0 -26
  164. data/steep/Gemfile +0 -3
  165. data/steep/Gemfile.lock +0 -61
@@ -1,167 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module RBS
4
- class ConstantTable
5
- attr_reader :definition_builder
6
- attr_reader :constant_scopes_cache
7
-
8
- def env
9
- definition_builder.env
10
- end
11
-
12
- def resolver
13
- @resolver ||= TypeNameResolver.from_env(env)
14
- end
15
-
16
- def initialize(builder:)
17
- @definition_builder = builder
18
- @constant_scopes_cache = {}
19
- end
20
-
21
- def absolute_type(type, context:)
22
- type.map_type_name do |type_name, location|
23
- absolute_type_name(type_name, context: context, location: location)
24
- end
25
- end
26
-
27
- def absolute_type_name(type_name, context:, location:)
28
- resolver.resolve(type_name, context: context) or
29
- raise NoTypeFoundError.new(type_name: type_name, location: location)
30
- end
31
-
32
- def name_to_constant(name)
33
- case
34
- when entry = env.constant_decls[name]
35
- type = absolute_type(entry.decl.type, context: entry.context)
36
- Constant.new(name: name, type: type, entry: entry)
37
- when entry = env.class_decls[name]
38
- type = Types::ClassSingleton.new(name: name, location: nil)
39
- Constant.new(name: name, type: type, entry: entry)
40
- end
41
- end
42
-
43
- def split_name(name)
44
- name.namespace.path + [name.name]
45
- end
46
-
47
- def resolve_constant_reference(name, context:)
48
- raise "Context cannot be empty: Specify `[Namespace.root]`" if context.empty?
49
-
50
- head, *tail = split_name(name)
51
-
52
- raise unless head
53
-
54
- head_constant = case
55
- when name.absolute?
56
- name_to_constant(TypeName.new(name: head, namespace: Namespace.root))
57
- when context == [Namespace.root]
58
- name_to_constant(TypeName.new(name: head, namespace: Namespace.root))
59
- else
60
- resolve_constant_reference_context(head, context: context) ||
61
- context.first.yield_self do |first_context|
62
- raise unless first_context
63
- resolve_constant_reference_inherit(head, scopes: constant_scopes(first_context.to_type_name))
64
- end
65
- end
66
-
67
- tail.inject(head_constant) do |constant, name|
68
- if constant
69
- resolve_constant_reference_inherit(
70
- name,
71
- scopes: constant_scopes(constant.name),
72
- no_object: constant.name != BuiltinNames::Object.name
73
- )
74
- end
75
- end
76
- end
77
-
78
- def resolve_constant_reference_context(name, context:)
79
- head, *tail = context
80
-
81
- if head
82
- if head.path.last == name
83
- name_to_constant(head.to_type_name)
84
- else
85
- name_to_constant(TypeName.new(name: name, namespace: head)) ||
86
- resolve_constant_reference_context(name, context: tail)
87
- end
88
- end
89
- end
90
-
91
- def resolve_constant_reference_inherit(name, scopes:, no_object: false)
92
- scopes.each do |context|
93
- if context.path == [:Object]
94
- unless no_object
95
- constant = name_to_constant(TypeName.new(name: name, namespace: context)) ||
96
- name_to_constant(TypeName.new(name: name, namespace: Namespace.root))
97
- end
98
- else
99
- constant = name_to_constant(TypeName.new(name: name, namespace: context))
100
- end
101
-
102
- return constant if constant
103
- end
104
-
105
- nil
106
- end
107
-
108
- def constant_scopes(name)
109
- constant_scopes_cache[name] ||= constant_scopes0(name, scopes: [])
110
- end
111
-
112
- def constant_scopes_module(name, scopes:)
113
- entry = env.class_decls[name]
114
- namespace = name.to_namespace
115
-
116
- entry.decls.each do |d|
117
- d.decl.members.each do |member|
118
- case member
119
- when AST::Members::Include
120
- if member.name.class?
121
- constant_scopes_module absolute_type_name(member.name, context: d.context, location: member.location),
122
- scopes: scopes
123
- end
124
- end
125
- end
126
- end
127
-
128
- scopes.unshift namespace
129
- end
130
-
131
- def constant_scopes0(name, scopes: [])
132
- entry = env.class_decls[name]
133
- namespace = name.to_namespace
134
-
135
- case entry
136
- when Environment::ClassEntry
137
- unless name == BuiltinNames::BasicObject.name
138
- super_name = entry.primary.decl.super_class&.yield_self do |super_class|
139
- absolute_type_name(super_class.name, context: entry.primary.context, location: entry.primary.decl.location)
140
- end || BuiltinNames::Object.name
141
-
142
- constant_scopes0 super_name, scopes: scopes
143
- end
144
-
145
- entry.decls.each do |d|
146
- d.decl.members.each do |member|
147
- case member
148
- when AST::Members::Include
149
- if member.name.class?
150
- constant_scopes_module absolute_type_name(member.name, context: d.context, location: member.location),
151
- scopes: scopes
152
- end
153
- end
154
- end
155
- end
156
-
157
- scopes.unshift namespace
158
-
159
- when Environment::ModuleEntry
160
- constant_scopes0 BuiltinNames::Module.name, scopes: scopes
161
- constant_scopes_module name, scopes: scopes
162
- end
163
-
164
- scopes
165
- end
166
- end
167
- end
@@ -1,67 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module RBS
4
- class TypeNameResolver
5
- Query = _ = Struct.new(:type_name, :context, keyword_init: true)
6
-
7
- attr_reader :all_names
8
- attr_reader :cache
9
-
10
- def initialize()
11
- @all_names = Set[]
12
- @cache = {}
13
- end
14
-
15
- def self.from_env(env)
16
- new.add_names(env.class_decls.keys)
17
- .add_names(env.interface_decls.keys)
18
- .add_names(env.alias_decls.keys)
19
- end
20
-
21
- def add_names(names)
22
- all_names.merge(names)
23
- self
24
- end
25
-
26
- def try_cache(query)
27
- cache.fetch(query) do
28
- result = yield
29
- cache[query] = result
30
- end
31
- end
32
-
33
- def resolve(type_name, context:)
34
- if type_name.absolute?
35
- return type_name
36
- end
37
-
38
- query = Query.new(type_name: type_name, context: context)
39
- try_cache(query) do
40
- path_head, *path_tail = type_name.split
41
- raise unless path_head
42
-
43
- name_head = TypeName.new(name: path_head, namespace: Namespace.empty)
44
-
45
- absolute_head = context.find do |namespace|
46
- # @type break: TypeName
47
- full_name = name_head.with_prefix(namespace)
48
- has_name?(full_name) and break full_name
49
- end
50
-
51
- case absolute_head
52
- when TypeName
53
- has_name?(Namespace.new(path: absolute_head.to_namespace.path.push(*path_tail), absolute: true).to_type_name)
54
- when Namespace
55
- # This cannot happen because the `context.find` doesn't return a Namespace.
56
- raise
57
- end
58
- end
59
- end
60
-
61
- def has_name?(full_name)
62
- if all_names.include?(full_name)
63
- full_name
64
- end
65
- end
66
- end
67
- end
@@ -1,30 +0,0 @@
1
- module RBS
2
- class ConstantTable
3
- attr_reader definition_builder: DefinitionBuilder
4
- attr_reader constant_scopes_cache: Hash[TypeName, Array[Namespace]]
5
- attr_reader resolver: TypeNameResolver
6
- attr_reader env(): Environment
7
-
8
- def initialize: (builder: DefinitionBuilder) -> void
9
-
10
- def absolute_type: (Types::t, context: Array[Namespace]) -> Types::t
11
-
12
- def absolute_type_name: (TypeName, context: Array[Namespace], location: Location[untyped, untyped]?) -> TypeName
13
-
14
- def name_to_constant: (TypeName) -> Constant?
15
-
16
- def split_name: (TypeName) -> Array[Symbol]
17
-
18
- def resolve_constant_reference: (TypeName name, context: Array[Namespace]) -> Constant?
19
-
20
- def resolve_constant_reference_context: (Symbol, context: Array[Namespace]) -> Constant?
21
-
22
- def resolve_constant_reference_inherit: (Symbol, scopes: Array[Namespace], ?no_object: boolish) -> Constant?
23
-
24
- def constant_scopes: (TypeName) -> Array[Namespace]
25
-
26
- def constant_scopes_module: (TypeName, scopes: Array[Namespace]) -> Array[Namespace]
27
-
28
- def constant_scopes0: (TypeName, ?scopes: Array[Namespace]) -> Array[Namespace]
29
- end
30
- end
data/sig/shims/ripper.rbs DELETED
@@ -1,8 +0,0 @@
1
- class Ripper
2
- def self.lex: (String src, ?String filename, ?Integer lineno, ?raise_errors: bool) -> Array[[[Integer, Integer], Symbol, String, Lexer::State]]
3
-
4
- class Lexer
5
- class State
6
- end
7
- end
8
- end
@@ -1,26 +0,0 @@
1
- module RBS
2
- class TypeNameResolver
3
- type context = Array[Namespace]
4
-
5
- class Query
6
- attr_reader type_name: TypeName
7
- attr_reader context: Array[Namespace]
8
-
9
- def initialize: (type_name: TypeName, context: context) -> void
10
- end
11
-
12
- attr_reader all_names: Set[TypeName]
13
-
14
- attr_reader cache: Hash[Query, TypeName?]
15
-
16
- def self.from_env: (Environment) -> TypeNameResolver
17
-
18
- def add_names: (Array[TypeName]) -> self
19
-
20
- def resolve: (TypeName, context: context) -> TypeName?
21
-
22
- def has_name?: (TypeName) -> TypeName?
23
-
24
- def try_cache: (Query) { () -> TypeName? } -> TypeName?
25
- end
26
- end
data/steep/Gemfile DELETED
@@ -1,3 +0,0 @@
1
- source "https://rubygems.org"
2
-
3
- gem "steep"
data/steep/Gemfile.lock DELETED
@@ -1,61 +0,0 @@
1
- GEM
2
- remote: https://rubygems.org/
3
- specs:
4
- activesupport (7.0.4)
5
- concurrent-ruby (~> 1.0, >= 1.0.2)
6
- i18n (>= 1.6, < 2)
7
- minitest (>= 5.1)
8
- tzinfo (~> 2.0)
9
- ast (2.4.2)
10
- concurrent-ruby (1.1.10)
11
- csv (3.2.5)
12
- ffi (1.15.5)
13
- fileutils (1.6.0)
14
- i18n (1.12.0)
15
- concurrent-ruby (~> 1.0)
16
- json (2.6.2)
17
- language_server-protocol (3.17.0.1)
18
- listen (3.7.1)
19
- rb-fsevent (~> 0.10, >= 0.10.3)
20
- rb-inotify (~> 0.9, >= 0.9.10)
21
- logger (1.5.1)
22
- minitest (5.16.3)
23
- parallel (1.22.1)
24
- parser (3.1.2.1)
25
- ast (~> 2.4.1)
26
- rainbow (3.1.1)
27
- rb-fsevent (0.11.2)
28
- rb-inotify (0.10.1)
29
- ffi (~> 1.0)
30
- rbs (2.8.0)
31
- securerandom (0.2.0)
32
- steep (1.3.0)
33
- activesupport (>= 5.1)
34
- csv (>= 3.0.9)
35
- fileutils (>= 1.1.0)
36
- json (>= 2.1.0)
37
- language_server-protocol (>= 3.15, < 4.0)
38
- listen (~> 3.0)
39
- logger (>= 1.3.0)
40
- parallel (>= 1.0.0)
41
- parser (>= 3.1)
42
- rainbow (>= 2.2.2, < 4.0)
43
- rbs (>= 2.8.0)
44
- securerandom (>= 0.1)
45
- strscan (>= 1.0.0)
46
- terminal-table (>= 2, < 4)
47
- strscan (3.0.4)
48
- terminal-table (3.0.2)
49
- unicode-display_width (>= 1.1.1, < 3)
50
- tzinfo (2.0.5)
51
- concurrent-ruby (~> 1.0)
52
- unicode-display_width (2.3.0)
53
-
54
- PLATFORMS
55
- ruby
56
-
57
- DEPENDENCIES
58
- steep
59
-
60
- BUNDLED WITH
61
- 2.3.14