steep 0.13.0 → 0.16.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (214) hide show
  1. checksums.yaml +4 -4
  2. data/.gitmodules +0 -3
  3. data/CHANGELOG.md +28 -0
  4. data/Rakefile +0 -13
  5. data/bin/setup +0 -2
  6. data/bin/smoke_runner.rb +0 -1
  7. data/exe/steep +0 -1
  8. data/lib/steep.rb +33 -1
  9. data/lib/steep/annotation_parser.rb +4 -4
  10. data/lib/steep/ast/buffer.rb +11 -7
  11. data/lib/steep/ast/builtin.rb +8 -0
  12. data/lib/steep/ast/types/factory.rb +124 -89
  13. data/lib/steep/cli.rb +16 -1
  14. data/lib/steep/drivers/annotations.rb +1 -1
  15. data/lib/steep/drivers/check.rb +20 -4
  16. data/lib/steep/drivers/init.rb +5 -5
  17. data/lib/steep/drivers/langserver.rb +13 -287
  18. data/lib/steep/drivers/utils/driver_helper.rb +1 -1
  19. data/lib/steep/drivers/vendor.rb +2 -2
  20. data/lib/steep/drivers/watch.rb +97 -85
  21. data/lib/steep/drivers/worker.rb +51 -0
  22. data/lib/steep/project.rb +9 -5
  23. data/lib/steep/project/completion_provider.rb +298 -0
  24. data/lib/steep/project/dsl.rb +14 -0
  25. data/lib/steep/project/file.rb +54 -47
  26. data/lib/steep/project/hover_content.rb +17 -8
  27. data/lib/steep/project/options.rb +25 -3
  28. data/lib/steep/project/target.rb +40 -24
  29. data/lib/steep/server/base_worker.rb +56 -0
  30. data/lib/steep/server/code_worker.rb +151 -0
  31. data/lib/steep/server/interaction_worker.rb +281 -0
  32. data/lib/steep/server/master.rb +196 -0
  33. data/lib/steep/server/signature_worker.rb +148 -0
  34. data/lib/steep/server/utils.rb +36 -0
  35. data/lib/steep/server/worker_process.rb +62 -0
  36. data/lib/steep/signature/errors.rb +1 -1
  37. data/lib/steep/signature/validator.rb +13 -13
  38. data/lib/steep/source.rb +1 -1
  39. data/lib/steep/type_construction.rb +1004 -727
  40. data/lib/steep/type_inference/constant_env.rb +3 -11
  41. data/lib/steep/type_inference/context.rb +8 -3
  42. data/lib/steep/type_inference/context_array.rb +111 -0
  43. data/lib/steep/type_inference/local_variable_type_env.rb +226 -0
  44. data/lib/steep/type_inference/logic.rb +130 -0
  45. data/lib/steep/type_inference/type_env.rb +5 -69
  46. data/lib/steep/typing.rb +91 -23
  47. data/lib/steep/version.rb +1 -1
  48. data/smoke/alias/Steepfile +1 -0
  49. data/smoke/alias/a.rb +1 -1
  50. data/smoke/and/Steepfile +1 -0
  51. data/smoke/array/Steepfile +1 -0
  52. data/smoke/array/b.rb +0 -2
  53. data/smoke/block/Steepfile +1 -0
  54. data/smoke/case/Steepfile +1 -0
  55. data/smoke/class/Steepfile +1 -0
  56. data/smoke/const/Steepfile +1 -0
  57. data/smoke/dstr/Steepfile +1 -0
  58. data/smoke/ensure/Steepfile +1 -0
  59. data/smoke/enumerator/Steepfile +1 -0
  60. data/smoke/extension/Steepfile +1 -0
  61. data/smoke/extension/c.rb +1 -0
  62. data/smoke/hash/Steepfile +1 -0
  63. data/smoke/hello/Steepfile +1 -0
  64. data/smoke/if/Steepfile +1 -0
  65. data/smoke/if/a.rb +1 -1
  66. data/smoke/implements/Steepfile +1 -0
  67. data/smoke/initialize/Steepfile +1 -0
  68. data/smoke/integer/Steepfile +1 -0
  69. data/smoke/interface/Steepfile +1 -0
  70. data/smoke/kwbegin/Steepfile +1 -0
  71. data/smoke/lambda/Steepfile +1 -0
  72. data/smoke/literal/Steepfile +1 -0
  73. data/smoke/map/Steepfile +1 -0
  74. data/smoke/method/Steepfile +1 -0
  75. data/smoke/module/Steepfile +1 -0
  76. data/smoke/regexp/Steepfile +1 -0
  77. data/smoke/regexp/b.rb +4 -4
  78. data/smoke/regression/Steepfile +1 -0
  79. data/smoke/rescue/Steepfile +1 -0
  80. data/smoke/rescue/a.rb +1 -1
  81. data/smoke/self/Steepfile +1 -0
  82. data/smoke/skip/Steepfile +1 -0
  83. data/smoke/stdout/Steepfile +1 -0
  84. data/smoke/super/Steepfile +1 -0
  85. data/smoke/type_case/Steepfile +1 -0
  86. data/smoke/yield/Steepfile +1 -0
  87. data/steep.gemspec +8 -8
  88. metadata +38 -138
  89. data/exe/rbs +0 -3
  90. data/exe/ruby-signature +0 -3
  91. data/vendor/ruby-signature/.github/workflows/ruby.yml +0 -27
  92. data/vendor/ruby-signature/.gitignore +0 -12
  93. data/vendor/ruby-signature/.rubocop.yml +0 -15
  94. data/vendor/ruby-signature/BSDL +0 -22
  95. data/vendor/ruby-signature/COPYING +0 -56
  96. data/vendor/ruby-signature/Gemfile +0 -6
  97. data/vendor/ruby-signature/README.md +0 -93
  98. data/vendor/ruby-signature/Rakefile +0 -66
  99. data/vendor/ruby-signature/bin/annotate-with-rdoc +0 -156
  100. data/vendor/ruby-signature/bin/console +0 -14
  101. data/vendor/ruby-signature/bin/query-rdoc +0 -103
  102. data/vendor/ruby-signature/bin/setup +0 -10
  103. data/vendor/ruby-signature/bin/sort +0 -88
  104. data/vendor/ruby-signature/bin/test_runner.rb +0 -17
  105. data/vendor/ruby-signature/docs/CONTRIBUTING.md +0 -97
  106. data/vendor/ruby-signature/docs/sigs.md +0 -148
  107. data/vendor/ruby-signature/docs/stdlib.md +0 -152
  108. data/vendor/ruby-signature/docs/syntax.md +0 -528
  109. data/vendor/ruby-signature/exe/rbs +0 -3
  110. data/vendor/ruby-signature/exe/ruby-signature +0 -7
  111. data/vendor/ruby-signature/lib/ruby/signature.rb +0 -64
  112. data/vendor/ruby-signature/lib/ruby/signature/ast/annotation.rb +0 -29
  113. data/vendor/ruby-signature/lib/ruby/signature/ast/comment.rb +0 -29
  114. data/vendor/ruby-signature/lib/ruby/signature/ast/declarations.rb +0 -391
  115. data/vendor/ruby-signature/lib/ruby/signature/ast/members.rb +0 -364
  116. data/vendor/ruby-signature/lib/ruby/signature/buffer.rb +0 -52
  117. data/vendor/ruby-signature/lib/ruby/signature/builtin_names.rb +0 -54
  118. data/vendor/ruby-signature/lib/ruby/signature/cli.rb +0 -534
  119. data/vendor/ruby-signature/lib/ruby/signature/constant.rb +0 -28
  120. data/vendor/ruby-signature/lib/ruby/signature/constant_table.rb +0 -152
  121. data/vendor/ruby-signature/lib/ruby/signature/definition.rb +0 -172
  122. data/vendor/ruby-signature/lib/ruby/signature/definition_builder.rb +0 -921
  123. data/vendor/ruby-signature/lib/ruby/signature/environment.rb +0 -283
  124. data/vendor/ruby-signature/lib/ruby/signature/environment_loader.rb +0 -138
  125. data/vendor/ruby-signature/lib/ruby/signature/environment_walker.rb +0 -126
  126. data/vendor/ruby-signature/lib/ruby/signature/errors.rb +0 -189
  127. data/vendor/ruby-signature/lib/ruby/signature/location.rb +0 -104
  128. data/vendor/ruby-signature/lib/ruby/signature/method_type.rb +0 -125
  129. data/vendor/ruby-signature/lib/ruby/signature/namespace.rb +0 -93
  130. data/vendor/ruby-signature/lib/ruby/signature/parser.y +0 -1343
  131. data/vendor/ruby-signature/lib/ruby/signature/prototype/rb.rb +0 -441
  132. data/vendor/ruby-signature/lib/ruby/signature/prototype/rbi.rb +0 -579
  133. data/vendor/ruby-signature/lib/ruby/signature/prototype/runtime.rb +0 -383
  134. data/vendor/ruby-signature/lib/ruby/signature/substitution.rb +0 -48
  135. data/vendor/ruby-signature/lib/ruby/signature/test.rb +0 -28
  136. data/vendor/ruby-signature/lib/ruby/signature/test/errors.rb +0 -63
  137. data/vendor/ruby-signature/lib/ruby/signature/test/hook.rb +0 -290
  138. data/vendor/ruby-signature/lib/ruby/signature/test/setup.rb +0 -58
  139. data/vendor/ruby-signature/lib/ruby/signature/test/spy.rb +0 -324
  140. data/vendor/ruby-signature/lib/ruby/signature/test/test_helper.rb +0 -185
  141. data/vendor/ruby-signature/lib/ruby/signature/test/type_check.rb +0 -256
  142. data/vendor/ruby-signature/lib/ruby/signature/type_name.rb +0 -72
  143. data/vendor/ruby-signature/lib/ruby/signature/types.rb +0 -932
  144. data/vendor/ruby-signature/lib/ruby/signature/variance_calculator.rb +0 -140
  145. data/vendor/ruby-signature/lib/ruby/signature/vendorer.rb +0 -49
  146. data/vendor/ruby-signature/lib/ruby/signature/version.rb +0 -5
  147. data/vendor/ruby-signature/lib/ruby/signature/writer.rb +0 -271
  148. data/vendor/ruby-signature/ruby-signature.gemspec +0 -45
  149. data/vendor/ruby-signature/stdlib/abbrev/abbrev.rbs +0 -3
  150. data/vendor/ruby-signature/stdlib/base64/base64.rbs +0 -15
  151. data/vendor/ruby-signature/stdlib/builtin/array.rbs +0 -1997
  152. data/vendor/ruby-signature/stdlib/builtin/basic_object.rbs +0 -280
  153. data/vendor/ruby-signature/stdlib/builtin/binding.rbs +0 -177
  154. data/vendor/ruby-signature/stdlib/builtin/builtin.rbs +0 -35
  155. data/vendor/ruby-signature/stdlib/builtin/class.rbs +0 -145
  156. data/vendor/ruby-signature/stdlib/builtin/comparable.rbs +0 -116
  157. data/vendor/ruby-signature/stdlib/builtin/complex.rbs +0 -400
  158. data/vendor/ruby-signature/stdlib/builtin/constants.rbs +0 -37
  159. data/vendor/ruby-signature/stdlib/builtin/data.rbs +0 -5
  160. data/vendor/ruby-signature/stdlib/builtin/deprecated.rbs +0 -2
  161. data/vendor/ruby-signature/stdlib/builtin/dir.rbs +0 -419
  162. data/vendor/ruby-signature/stdlib/builtin/encoding.rbs +0 -606
  163. data/vendor/ruby-signature/stdlib/builtin/enumerable.rbs +0 -404
  164. data/vendor/ruby-signature/stdlib/builtin/enumerator.rbs +0 -260
  165. data/vendor/ruby-signature/stdlib/builtin/errno.rbs +0 -781
  166. data/vendor/ruby-signature/stdlib/builtin/errors.rbs +0 -582
  167. data/vendor/ruby-signature/stdlib/builtin/exception.rbs +0 -193
  168. data/vendor/ruby-signature/stdlib/builtin/false_class.rbs +0 -40
  169. data/vendor/ruby-signature/stdlib/builtin/fiber.rbs +0 -68
  170. data/vendor/ruby-signature/stdlib/builtin/fiber_error.rbs +0 -12
  171. data/vendor/ruby-signature/stdlib/builtin/file.rbs +0 -476
  172. data/vendor/ruby-signature/stdlib/builtin/file_test.rbs +0 -59
  173. data/vendor/ruby-signature/stdlib/builtin/float.rbs +0 -696
  174. data/vendor/ruby-signature/stdlib/builtin/gc.rbs +0 -121
  175. data/vendor/ruby-signature/stdlib/builtin/hash.rbs +0 -1029
  176. data/vendor/ruby-signature/stdlib/builtin/integer.rbs +0 -710
  177. data/vendor/ruby-signature/stdlib/builtin/io.rbs +0 -683
  178. data/vendor/ruby-signature/stdlib/builtin/kernel.rbs +0 -574
  179. data/vendor/ruby-signature/stdlib/builtin/marshal.rbs +0 -135
  180. data/vendor/ruby-signature/stdlib/builtin/match_data.rbs +0 -141
  181. data/vendor/ruby-signature/stdlib/builtin/math.rbs +0 -66
  182. data/vendor/ruby-signature/stdlib/builtin/method.rbs +0 -182
  183. data/vendor/ruby-signature/stdlib/builtin/module.rbs +0 -248
  184. data/vendor/ruby-signature/stdlib/builtin/nil_class.rbs +0 -82
  185. data/vendor/ruby-signature/stdlib/builtin/numeric.rbs +0 -409
  186. data/vendor/ruby-signature/stdlib/builtin/object.rbs +0 -824
  187. data/vendor/ruby-signature/stdlib/builtin/proc.rbs +0 -426
  188. data/vendor/ruby-signature/stdlib/builtin/process.rbs +0 -354
  189. data/vendor/ruby-signature/stdlib/builtin/random.rbs +0 -93
  190. data/vendor/ruby-signature/stdlib/builtin/range.rbs +0 -226
  191. data/vendor/ruby-signature/stdlib/builtin/rational.rbs +0 -424
  192. data/vendor/ruby-signature/stdlib/builtin/rb_config.rbs +0 -10
  193. data/vendor/ruby-signature/stdlib/builtin/regexp.rbs +0 -131
  194. data/vendor/ruby-signature/stdlib/builtin/ruby_vm.rbs +0 -14
  195. data/vendor/ruby-signature/stdlib/builtin/signal.rbs +0 -55
  196. data/vendor/ruby-signature/stdlib/builtin/string.rbs +0 -770
  197. data/vendor/ruby-signature/stdlib/builtin/string_io.rbs +0 -13
  198. data/vendor/ruby-signature/stdlib/builtin/struct.rbs +0 -40
  199. data/vendor/ruby-signature/stdlib/builtin/symbol.rbs +0 -230
  200. data/vendor/ruby-signature/stdlib/builtin/thread.rbs +0 -1112
  201. data/vendor/ruby-signature/stdlib/builtin/thread_group.rbs +0 -23
  202. data/vendor/ruby-signature/stdlib/builtin/time.rbs +0 -739
  203. data/vendor/ruby-signature/stdlib/builtin/trace_point.rbs +0 -91
  204. data/vendor/ruby-signature/stdlib/builtin/true_class.rbs +0 -46
  205. data/vendor/ruby-signature/stdlib/builtin/unbound_method.rbs +0 -159
  206. data/vendor/ruby-signature/stdlib/builtin/warning.rbs +0 -17
  207. data/vendor/ruby-signature/stdlib/erb/erb.rbs +0 -18
  208. data/vendor/ruby-signature/stdlib/find/find.rbs +0 -44
  209. data/vendor/ruby-signature/stdlib/pathname/pathname.rbs +0 -21
  210. data/vendor/ruby-signature/stdlib/prime/integer-extension.rbs +0 -23
  211. data/vendor/ruby-signature/stdlib/prime/prime.rbs +0 -188
  212. data/vendor/ruby-signature/stdlib/securerandom/securerandom.rbs +0 -9
  213. data/vendor/ruby-signature/stdlib/set/set.rbs +0 -77
  214. data/vendor/ruby-signature/stdlib/tmpdir/tmpdir.rbs +0 -53
@@ -1,37 +0,0 @@
1
- ::ARGF: Object
2
-
3
- ::ARGV: Array[String]
4
-
5
- ::CROSS_COMPILING: NilClass
6
-
7
- ::FALSE: FalseClass
8
-
9
- ::NIL: NilClass
10
-
11
- ::RUBY_COPYRIGHT: String
12
-
13
- ::RUBY_DESCRIPTION: String
14
-
15
- ::RUBY_ENGINE: String
16
-
17
- ::RUBY_ENGINE_VERSION: String
18
-
19
- ::RUBY_PATCHLEVEL: Integer
20
-
21
- ::RUBY_PLATFORM: String
22
-
23
- ::RUBY_RELEASE_DATE: String
24
-
25
- ::RUBY_REVISION: Integer
26
-
27
- ::RUBY_VERSION: String
28
-
29
- ::STDERR: IO
30
-
31
- ::STDIN: IO
32
-
33
- ::STDOUT: IO
34
-
35
- ::TOPLEVEL_BINDING: Binding
36
-
37
- ::TRUE: TrueClass
@@ -1,5 +0,0 @@
1
- # This is a deprecated class, base class for C extensions using Data_Make_Struct
2
- # or Data_Wrap_Struct.
3
- #
4
- class Data < Object
5
- end
@@ -1,2 +0,0 @@
1
- Fixnum: singleton(Integer)
2
- Bignum: singleton(Integer)
@@ -1,419 +0,0 @@
1
- # Objects of class Dir are directory streams representing directories in the
2
- # underlying file system. They provide a variety of ways to list directories and
3
- # their contents. See also File.
4
- #
5
- # The directory used in these examples contains the two regular files
6
- # (`config.h` and `main.rb`), the parent directory (`..`), and the directory
7
- # itself (`.`).
8
- #
9
- class Dir
10
- include Enumerable[String, Dir]
11
-
12
- # Returns a new directory object for the named directory.
13
- #
14
- # The optional *encoding* keyword argument specifies the encoding of the
15
- # directory. If not specified, the filesystem encoding is used.
16
- #
17
- def initialize: (string, ?encoding: Encoding | string | nil) -> void
18
-
19
- # Equivalent to calling `Dir.glob([string,...], 0)`.
20
- #
21
- def self.[]: (*string patterns, ?base: string) ?{ (String path) -> void } -> Array[String]
22
-
23
- # Changes the current working directory of the process to the given string. When
24
- # called without an argument, changes the directory to the value of the
25
- # environment variable `HOME`, or `LOGDIR`. SystemCallError (probably
26
- # Errno::ENOENT) if the target directory does not exist.
27
- #
28
- # If a block is given, it is passed the name of the new current directory, and
29
- # the block is executed with that as the current directory. The original working
30
- # directory is restored when the block exits. The return value of `chdir` is the
31
- # value of the block. `chdir` blocks can be nested, but in a multi-threaded
32
- # program an error will be raised if a thread attempts to open a `chdir` block
33
- # while another thread has one open.
34
- #
35
- # Dir.chdir("/var/spool/mail")
36
- # puts Dir.pwd
37
- # Dir.chdir("/tmp") do
38
- # puts Dir.pwd
39
- # Dir.chdir("/usr") do
40
- # puts Dir.pwd
41
- # end
42
- # puts Dir.pwd
43
- # end
44
- # puts Dir.pwd
45
- #
46
- # *produces:*
47
- #
48
- # /var/spool/mail
49
- # /tmp
50
- # /usr
51
- # /tmp
52
- # /var/spool/mail
53
- #
54
- def self.chdir: (?string) -> void
55
- | [U] (?string) { (String) -> U } -> U
56
-
57
- # Returns an array containing all of the filenames except for "." and ".." in
58
- # the given directory. Will raise a SystemCallError if the named directory
59
- # doesn't exist.
60
- #
61
- # The optional *encoding* keyword argument specifies the encoding of the
62
- # directory. If not specified, the filesystem encoding is used.
63
- #
64
- # Dir.children("testdir") #=> ["config.h", "main.rb"]
65
- #
66
- def self.children: (string dirname, ?encoding: string | Encoding | nil enc) -> Array[String]
67
-
68
- # Changes this process's idea of the file system root. Only a privileged process
69
- # may make this call. Not available on all platforms. On Unix systems, see
70
- # `chroot(2)` for more information.
71
- #
72
- def self.chroot: (string) -> void
73
-
74
- # Deletes the named directory. Raises a subclass of SystemCallError if the
75
- # directory isn't empty.
76
- #
77
- def self.delete: (string) -> void
78
-
79
- # Calls the block once for each entry except for "." and ".." in the named
80
- # directory, passing the filename of each entry as a parameter to the block.
81
- #
82
- # If no block is given, an enumerator is returned instead.
83
- #
84
- # Dir.each_child("testdir") {|x| puts "Got #{x}" }
85
- #
86
- # *produces:*
87
- #
88
- # Got config.h
89
- # Got main.rb
90
- #
91
- def self.each_child: (string dirname, ?encoding: string | Encoding | nil enc) -> Enumerator[String, void]
92
- | (string dirname, ?encoding: string | Encoding | nil enc) { (String filename) -> void } -> void
93
-
94
- # Returns `true` if the named file is an empty directory, `false` if it is not a
95
- # directory or non-empty.
96
- #
97
- def self.empty?: (string path_name) -> bool
98
-
99
- # Returns an array containing all of the filenames in the given directory. Will
100
- # raise a SystemCallError if the named directory doesn't exist.
101
- #
102
- # The optional *encoding* keyword argument specifies the encoding of the
103
- # directory. If not specified, the filesystem encoding is used.
104
- #
105
- # Dir.entries("testdir") #=> [".", "..", "config.h", "main.rb"]
106
- #
107
- def self.entries: (string dirname, ?encoding: Encoding | string | nil enc) -> ::Array[String]
108
-
109
- # Returns `true` if the named file is a directory, `false` otherwise.
110
- #
111
- def self.exist?: (string file) -> bool
112
-
113
- # Deprecated method. Don't use.
114
- #
115
- def self.exists?: (string file) -> bool
116
-
117
- # Calls the block once for each entry in the named directory, passing the
118
- # filename of each entry as a parameter to the block.
119
- #
120
- # If no block is given, an enumerator is returned instead.
121
- #
122
- # Dir.foreach("testdir") {|x| puts "Got #{x}" }
123
- #
124
- # *produces:*
125
- #
126
- # Got .
127
- # Got ..
128
- # Got config.h
129
- # Got main.rb
130
- #
131
- alias self.foreach self.each_child
132
-
133
- # Returns the path to the current working directory of this process as a string.
134
- #
135
- # Dir.chdir("/tmp") #=> 0
136
- # Dir.getwd #=> "/tmp"
137
- # Dir.pwd #=> "/tmp"
138
- #
139
- def self.getwd: () -> String
140
-
141
- # Expands `pattern`, which is a pattern string or an Array of pattern strings,
142
- # and returns an array containing the matching filenames. If a block is given,
143
- # calls the block once for each matching filename, passing the filename as a
144
- # parameter to the block.
145
- #
146
- # The optional `base` keyword argument specifies the base directory for
147
- # interpreting relative pathnames instead of the current working directory. As
148
- # the results are not prefixed with the base directory name in this case, you
149
- # will need to prepend the base directory name if you want real paths.
150
- #
151
- # Note that the pattern is not a regexp, it's closer to a shell glob. See
152
- # File::fnmatch for the meaning of the `flags` parameter. Case sensitivity
153
- # depends on your system (File::FNM_CASEFOLD is ignored), as does the order in
154
- # which the results are returned.
155
- #
156
- # `*`
157
- # : Matches any file. Can be restricted by other values in the glob.
158
- # Equivalent to `/ .* /mx` in regexp.
159
- #
160
- # `*`
161
- # : Matches all files
162
- # `c*`
163
- # : Matches all files beginning with `c`
164
- # `*c`
165
- # : Matches all files ending with `c`
166
- # `*c*`
167
- # : Match all files that have `c` in them (including at the beginning or
168
- # end).
169
- #
170
- #
171
- # Note, this will not match Unix-like hidden files (dotfiles). In order to
172
- # include those in the match results, you must use the File::FNM_DOTMATCH
173
- # flag or something like `"{*,.*}"`.
174
- #
175
- # `**`
176
- # : Matches directories recursively.
177
- #
178
- # `?`
179
- # : Matches any one character. Equivalent to `/.{1}/` in regexp.
180
- #
181
- # `[set]`
182
- # : Matches any one character in `set`. Behaves exactly like character sets
183
- # in Regexp, including set negation (`[^a-z]`).
184
- #
185
- # `{p,q}`
186
- # : Matches either literal `p` or literal `q`. Equivalent to pattern
187
- # alternation in regexp.
188
- #
189
- # Matching literals may be more than one character in length. More than two
190
- # literals may be specified.
191
- #
192
- # ` \\ `
193
- # : Escapes the next metacharacter.
194
- #
195
- # Note that this means you cannot use backslash on windows as part of a
196
- # glob, i.e. `Dir["c:\\foo*"]` will not work, use `Dir["c:/foo*"]` instead.
197
- #
198
- #
199
- # Examples:
200
- #
201
- # Dir["config.?"] #=> ["config.h"]
202
- # Dir.glob("config.?") #=> ["config.h"]
203
- # Dir.glob("*.[a-z][a-z]") #=> ["main.rb"]
204
- # Dir.glob("*.[^r]*") #=> ["config.h"]
205
- # Dir.glob("*.{rb,h}") #=> ["main.rb", "config.h"]
206
- # Dir.glob("*") #=> ["config.h", "main.rb"]
207
- # Dir.glob("*", File::FNM_DOTMATCH) #=> [".", "..", "config.h", "main.rb"]
208
- # Dir.glob(["*.rb", "*.h"]) #=> ["main.rb", "config.h"]
209
- #
210
- # rbfiles = File.join("**", "*.rb")
211
- # Dir.glob(rbfiles) #=> ["main.rb",
212
- # # "lib/song.rb",
213
- # # "lib/song/karaoke.rb"]
214
- #
215
- # Dir.glob(rbfiles, base: "lib") #=> ["song.rb",
216
- # # "song/karaoke.rb"]
217
- #
218
- # libdirs = File.join("**", "lib")
219
- # Dir.glob(libdirs) #=> ["lib"]
220
- #
221
- # librbfiles = File.join("**", "lib", "**", "*.rb")
222
- # Dir.glob(librbfiles) #=> ["lib/song.rb",
223
- # # "lib/song/karaoke.rb"]
224
- #
225
- # librbfiles = File.join("**", "lib", "*.rb")
226
- # Dir.glob(librbfiles) #=> ["lib/song.rb"]
227
- #
228
- def self.glob: (string | ::Array[string] pattern, ?Integer flags, ?base: string) -> ::Array[String]
229
- | (string | ::Array[string] pattern, ?Integer flags, ?base: string) { (String) -> void } -> void
230
-
231
- # Returns the home directory of the current user or the named user if given.
232
- #
233
- def self.home: (?string user) -> String
234
-
235
- # Makes a new directory named by *string*, with permissions specified by the
236
- # optional parameter *anInteger*. The permissions may be modified by the value
237
- # of File::umask, and are ignored on NT. Raises a SystemCallError if the
238
- # directory cannot be created. See also the discussion of permissions in the
239
- # class documentation for File.
240
- #
241
- # Dir.mkdir(File.join(Dir.home, ".foo"), 0700) #=> 0
242
- #
243
- def self.mkdir: (string, ?Integer permissions) -> void
244
-
245
- # The optional *encoding* keyword argument specifies the encoding of the
246
- # directory. If not specified, the filesystem encoding is used.
247
- #
248
- # With no block, `open` is a synonym for Dir::new. If a block is present, it is
249
- # passed *aDir* as a parameter. The directory is closed at the end of the block,
250
- # and Dir::open returns the value of the block.
251
- #
252
- # # arglists 💪👽🚨 << Delete this section
253
- # Dir.open( string ) -> aDir
254
- # Dir.open( string, encoding: enc ) -> aDir
255
- # Dir.open( string ) {| aDir | block } -> anObject
256
- # Dir.open( string, encoding: enc ) {| aDir | block } -> anObject
257
- #
258
- def self.open: (string, ?encoding: Encoding | string | nil) -> Dir
259
- | [U] (string, ?encoding: Encoding) { (Dir) -> U } -> U
260
-
261
- # Returns the path to the current working directory of this process as a string.
262
- #
263
- # Dir.chdir("/tmp") #=> 0
264
- # Dir.getwd #=> "/tmp"
265
- # Dir.pwd #=> "/tmp"
266
- #
267
- def self.pwd: () -> String
268
-
269
- # Deletes the named directory. Raises a subclass of SystemCallError if the
270
- # directory isn't empty.
271
- #
272
- alias self.rmdir self.delete
273
-
274
- # Deletes the named directory. Raises a subclass of SystemCallError if the
275
- # directory isn't empty.
276
- #
277
- alias self.unlink self.delete
278
-
279
- public
280
-
281
- # Returns an array containing all of the filenames except for "." and ".." in
282
- # this directory.
283
- #
284
- # d = Dir.new("testdir")
285
- # d.children #=> ["config.h", "main.rb"]
286
- #
287
- def children: () -> Array[String]
288
-
289
- # Closes the directory stream. Calling this method on closed Dir object is
290
- # ignored since Ruby 2.3.
291
- #
292
- # d = Dir.new("testdir")
293
- # d.close #=> nil
294
- #
295
- def close: () -> void
296
-
297
- # Calls the block once for each entry in this directory, passing the filename of
298
- # each entry as a parameter to the block.
299
- #
300
- # If no block is given, an enumerator is returned instead.
301
- #
302
- # d = Dir.new("testdir")
303
- # d.each {|x| puts "Got #{x}" }
304
- #
305
- # *produces:*
306
- #
307
- # Got .
308
- # Got ..
309
- # Got config.h
310
- # Got main.rb
311
- #
312
- def each: () { (String) -> void } -> self
313
- | () -> ::Enumerator[String, self]
314
-
315
- # Calls the block once for each entry except for "." and ".." in this directory,
316
- # passing the filename of each entry as a parameter to the block.
317
- #
318
- # If no block is given, an enumerator is returned instead.
319
- #
320
- # d = Dir.new("testdir")
321
- # d.each_child {|x| puts "Got #{x}" }
322
- #
323
- # *produces:*
324
- #
325
- # Got config.h
326
- # Got main.rb
327
- #
328
- def each_child: () { (String) -> void } -> self
329
- | () -> ::Enumerator[String, self]
330
-
331
- # Returns the file descriptor used in *dir*.
332
- #
333
- # d = Dir.new("..")
334
- # d.fileno #=> 8
335
- #
336
- # This method uses dirfd() function defined by POSIX 2008. NotImplementedError
337
- # is raised on other platforms, such as Windows, which doesn't provide the
338
- # function.
339
- #
340
- def fileno: () -> Integer
341
-
342
- # Return a string describing this Dir object.
343
- #
344
- def inspect: () -> String
345
-
346
- # Returns the path parameter passed to *dir*'s constructor.
347
- #
348
- # d = Dir.new("..")
349
- # d.path #=> ".."
350
- #
351
- def path: () -> String?
352
-
353
- # Returns the current position in *dir*. See also Dir#seek.
354
- #
355
- # d = Dir.new("testdir")
356
- # d.tell #=> 0
357
- # d.read #=> "."
358
- # d.tell #=> 12
359
- #
360
- def pos: () -> Integer
361
-
362
- # Synonym for Dir#seek, but returns the position parameter.
363
- #
364
- # d = Dir.new("testdir") #=> #<Dir:0x401b3c40>
365
- # d.read #=> "."
366
- # i = d.pos #=> 12
367
- # d.read #=> ".."
368
- # d.pos = i #=> 12
369
- # d.read #=> ".."
370
- #
371
- def pos=: (Integer pos) -> Integer
372
-
373
- # Reads the next entry from *dir* and returns it as a string. Returns `nil` at
374
- # the end of the stream.
375
- #
376
- # d = Dir.new("testdir")
377
- # d.read #=> "."
378
- # d.read #=> ".."
379
- # d.read #=> "config.h"
380
- #
381
- def read: () -> String?
382
-
383
- # Repositions *dir* to the first entry.
384
- #
385
- # d = Dir.new("testdir")
386
- # d.read #=> "."
387
- # d.rewind #=> #<Dir:0x401b3fb0>
388
- # d.read #=> "."
389
- #
390
- def rewind: () -> self
391
-
392
- # Seeks to a particular location in *dir*. *integer* must be a value returned by
393
- # Dir#tell.
394
- #
395
- # d = Dir.new("testdir") #=> #<Dir:0x401b3c40>
396
- # d.read #=> "."
397
- # i = d.tell #=> 12
398
- # d.read #=> ".."
399
- # d.seek(i) #=> #<Dir:0x401b3c40>
400
- # d.read #=> ".."
401
- #
402
- def seek: (Integer) -> self
403
-
404
- # Returns the current position in *dir*. See also Dir#seek.
405
- #
406
- # d = Dir.new("testdir")
407
- # d.tell #=> 0
408
- # d.read #=> "."
409
- # d.tell #=> 12
410
- #
411
- def tell: () -> Integer
412
-
413
- # Returns the path parameter passed to *dir*'s constructor.
414
- #
415
- # d = Dir.new("..")
416
- # d.path #=> ".."
417
- #
418
- alias to_path path
419
- end