rbs 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (132) hide show
  1. checksums.yaml +7 -0
  2. data/.github/workflows/ruby.yml +28 -0
  3. data/.gitignore +12 -0
  4. data/.rubocop.yml +15 -0
  5. data/BSDL +22 -0
  6. data/CHANGELOG.md +9 -0
  7. data/COPYING +56 -0
  8. data/Gemfile +6 -0
  9. data/README.md +93 -0
  10. data/Rakefile +142 -0
  11. data/bin/annotate-with-rdoc +157 -0
  12. data/bin/console +14 -0
  13. data/bin/query-rdoc +103 -0
  14. data/bin/setup +10 -0
  15. data/bin/sort +89 -0
  16. data/bin/test_runner.rb +16 -0
  17. data/docs/CONTRIBUTING.md +97 -0
  18. data/docs/sigs.md +148 -0
  19. data/docs/stdlib.md +152 -0
  20. data/docs/syntax.md +528 -0
  21. data/exe/rbs +7 -0
  22. data/lib/rbs.rb +64 -0
  23. data/lib/rbs/ast/annotation.rb +27 -0
  24. data/lib/rbs/ast/comment.rb +27 -0
  25. data/lib/rbs/ast/declarations.rb +395 -0
  26. data/lib/rbs/ast/members.rb +362 -0
  27. data/lib/rbs/buffer.rb +50 -0
  28. data/lib/rbs/builtin_names.rb +55 -0
  29. data/lib/rbs/cli.rb +558 -0
  30. data/lib/rbs/constant.rb +26 -0
  31. data/lib/rbs/constant_table.rb +150 -0
  32. data/lib/rbs/definition.rb +170 -0
  33. data/lib/rbs/definition_builder.rb +919 -0
  34. data/lib/rbs/environment.rb +281 -0
  35. data/lib/rbs/environment_loader.rb +136 -0
  36. data/lib/rbs/environment_walker.rb +124 -0
  37. data/lib/rbs/errors.rb +187 -0
  38. data/lib/rbs/location.rb +102 -0
  39. data/lib/rbs/method_type.rb +123 -0
  40. data/lib/rbs/namespace.rb +91 -0
  41. data/lib/rbs/parser.y +1344 -0
  42. data/lib/rbs/prototype/rb.rb +553 -0
  43. data/lib/rbs/prototype/rbi.rb +587 -0
  44. data/lib/rbs/prototype/runtime.rb +381 -0
  45. data/lib/rbs/substitution.rb +46 -0
  46. data/lib/rbs/test.rb +26 -0
  47. data/lib/rbs/test/errors.rb +61 -0
  48. data/lib/rbs/test/hook.rb +294 -0
  49. data/lib/rbs/test/setup.rb +58 -0
  50. data/lib/rbs/test/spy.rb +325 -0
  51. data/lib/rbs/test/test_helper.rb +183 -0
  52. data/lib/rbs/test/type_check.rb +254 -0
  53. data/lib/rbs/type_name.rb +70 -0
  54. data/lib/rbs/types.rb +936 -0
  55. data/lib/rbs/variance_calculator.rb +138 -0
  56. data/lib/rbs/vendorer.rb +47 -0
  57. data/lib/rbs/version.rb +3 -0
  58. data/lib/rbs/writer.rb +269 -0
  59. data/lib/ruby/signature.rb +7 -0
  60. data/rbs.gemspec +46 -0
  61. data/stdlib/abbrev/abbrev.rbs +60 -0
  62. data/stdlib/base64/base64.rbs +71 -0
  63. data/stdlib/benchmark/benchmark.rbs +372 -0
  64. data/stdlib/builtin/array.rbs +1997 -0
  65. data/stdlib/builtin/basic_object.rbs +280 -0
  66. data/stdlib/builtin/binding.rbs +177 -0
  67. data/stdlib/builtin/builtin.rbs +45 -0
  68. data/stdlib/builtin/class.rbs +145 -0
  69. data/stdlib/builtin/comparable.rbs +116 -0
  70. data/stdlib/builtin/complex.rbs +400 -0
  71. data/stdlib/builtin/constants.rbs +37 -0
  72. data/stdlib/builtin/data.rbs +5 -0
  73. data/stdlib/builtin/deprecated.rbs +2 -0
  74. data/stdlib/builtin/dir.rbs +413 -0
  75. data/stdlib/builtin/encoding.rbs +607 -0
  76. data/stdlib/builtin/enumerable.rbs +404 -0
  77. data/stdlib/builtin/enumerator.rbs +260 -0
  78. data/stdlib/builtin/errno.rbs +781 -0
  79. data/stdlib/builtin/errors.rbs +582 -0
  80. data/stdlib/builtin/exception.rbs +194 -0
  81. data/stdlib/builtin/false_class.rbs +40 -0
  82. data/stdlib/builtin/fiber.rbs +68 -0
  83. data/stdlib/builtin/fiber_error.rbs +12 -0
  84. data/stdlib/builtin/file.rbs +1076 -0
  85. data/stdlib/builtin/file_test.rbs +59 -0
  86. data/stdlib/builtin/float.rbs +696 -0
  87. data/stdlib/builtin/gc.rbs +243 -0
  88. data/stdlib/builtin/hash.rbs +1029 -0
  89. data/stdlib/builtin/integer.rbs +707 -0
  90. data/stdlib/builtin/io.rbs +683 -0
  91. data/stdlib/builtin/kernel.rbs +576 -0
  92. data/stdlib/builtin/marshal.rbs +161 -0
  93. data/stdlib/builtin/match_data.rbs +271 -0
  94. data/stdlib/builtin/math.rbs +369 -0
  95. data/stdlib/builtin/method.rbs +185 -0
  96. data/stdlib/builtin/module.rbs +1104 -0
  97. data/stdlib/builtin/nil_class.rbs +82 -0
  98. data/stdlib/builtin/numeric.rbs +409 -0
  99. data/stdlib/builtin/object.rbs +824 -0
  100. data/stdlib/builtin/proc.rbs +429 -0
  101. data/stdlib/builtin/process.rbs +1227 -0
  102. data/stdlib/builtin/random.rbs +267 -0
  103. data/stdlib/builtin/range.rbs +226 -0
  104. data/stdlib/builtin/rational.rbs +424 -0
  105. data/stdlib/builtin/rb_config.rbs +57 -0
  106. data/stdlib/builtin/regexp.rbs +1083 -0
  107. data/stdlib/builtin/ruby_vm.rbs +14 -0
  108. data/stdlib/builtin/signal.rbs +55 -0
  109. data/stdlib/builtin/string.rbs +1901 -0
  110. data/stdlib/builtin/string_io.rbs +284 -0
  111. data/stdlib/builtin/struct.rbs +40 -0
  112. data/stdlib/builtin/symbol.rbs +228 -0
  113. data/stdlib/builtin/thread.rbs +1108 -0
  114. data/stdlib/builtin/thread_group.rbs +23 -0
  115. data/stdlib/builtin/time.rbs +1047 -0
  116. data/stdlib/builtin/trace_point.rbs +290 -0
  117. data/stdlib/builtin/true_class.rbs +46 -0
  118. data/stdlib/builtin/unbound_method.rbs +153 -0
  119. data/stdlib/builtin/warning.rbs +17 -0
  120. data/stdlib/coverage/coverage.rbs +62 -0
  121. data/stdlib/csv/csv.rbs +773 -0
  122. data/stdlib/erb/erb.rbs +392 -0
  123. data/stdlib/find/find.rbs +40 -0
  124. data/stdlib/ipaddr/ipaddr.rbs +247 -0
  125. data/stdlib/json/json.rbs +335 -0
  126. data/stdlib/pathname/pathname.rbs +1093 -0
  127. data/stdlib/prime/integer-extension.rbs +23 -0
  128. data/stdlib/prime/prime.rbs +188 -0
  129. data/stdlib/securerandom/securerandom.rbs +9 -0
  130. data/stdlib/set/set.rbs +301 -0
  131. data/stdlib/tmpdir/tmpdir.rbs +53 -0
  132. metadata +292 -0
@@ -0,0 +1,335 @@
1
+ interface _ToJson
2
+ def to_json: (?JSON::State state) -> String
3
+ end
4
+
5
+ interface _JsonToWritableIO
6
+ def to_io: () -> _JsonWrite
7
+ end
8
+
9
+ interface _JsonWrite
10
+ def write: (String json) -> void
11
+ end
12
+
13
+ interface _JsonReadableIO
14
+ def to_io: () -> _JsonRead
15
+ end
16
+
17
+ interface _JsonRead
18
+ def read: () -> string
19
+ end
20
+
21
+ type json_options = Hash[Symbol, untyped]
22
+
23
+ class JSON::State
24
+ end
25
+
26
+ # This module holds all the modules/classes that implement JSON's functionality
27
+ # as C extensions.
28
+ #
29
+ module JSON::Ext
30
+ end
31
+
32
+ # This is the JSON generator implemented as a C extension. It can be configured
33
+ # to be used by setting
34
+ #
35
+ # JSON.generator = JSON::Ext::Generator
36
+ #
37
+ # with the method generator= in JSON.
38
+ #
39
+ module JSON::Ext::Generator
40
+ end
41
+
42
+ class JSON::Ext::Generator::State
43
+ end
44
+
45
+ module JSON::Pure
46
+ end
47
+
48
+ module JSON::Pure::Generator
49
+ end
50
+
51
+ class JSON::Pure::Generator::State
52
+ end
53
+
54
+ type json_generator = singleton(::JSON::Ext::Generator) | singleton(::JSON::Pure::Generator)
55
+ type json_parser = singleton(::JSON::Ext::Parser) | singleton(::JSON::Pure::Parser)
56
+ type json_state = singleton(JSON::Ext::Generator::State) | singleton(JSON::Pure::Generator::State)
57
+
58
+ # # JavaScript Object Notation (JSON)
59
+ #
60
+ # JSON is a lightweight data-interchange format. It is easy for us humans to
61
+ # read and write. Plus, equally simple for machines to generate or parse. JSON
62
+ # is completely language agnostic, making it the ideal interchange format.
63
+ #
64
+ # Built on two universally available structures:
65
+ # 1. A collection of name/value pairs. Often referred to as an _object_, hash table, record, struct, keyed list, or associative array.
66
+ # 2. An ordered list of values. More commonly called an _array_, vector, sequence or list.
67
+ #
68
+ # To read more about JSON visit: http://json.org
69
+ #
70
+ # ## Parsing JSON
71
+ #
72
+ # To parse a JSON string received by another application or generated within
73
+ # your existing application:
74
+ #
75
+ # require 'json'
76
+ #
77
+ # my_hash = JSON.parse('{"hello": "goodbye"}')
78
+ # puts my_hash["hello"] => "goodbye"
79
+ #
80
+ # Notice the extra quotes `''` around the hash notation. Ruby expects the
81
+ # argument to be a string and can't convert objects like a hash or array.
82
+ #
83
+ # Ruby converts your string into a hash
84
+ #
85
+ # ## Generating JSON
86
+ #
87
+ # Creating a JSON string for communication or serialization is just as simple.
88
+ #
89
+ # require 'json'
90
+ #
91
+ # my_hash = {:hello => "goodbye"}
92
+ # puts JSON.generate(my_hash) => "{\"hello\":\"goodbye\"}"
93
+ #
94
+ # Or an alternative way:
95
+ #
96
+ # require 'json'
97
+ # puts {:hello => "goodbye"}.to_json => "{\"hello\":\"goodbye\"}"
98
+ #
99
+ # `JSON.generate` only allows objects or arrays to be converted to JSON syntax.
100
+ # `to_json`, however, accepts many Ruby classes even though it acts only as a
101
+ # method for serialization:
102
+ #
103
+ # require 'json'
104
+ #
105
+ # 1.to_json => "1"
106
+ #
107
+ module JSON
108
+ # If *object* is string-like, parse the string and return the parsed result as a
109
+ # Ruby data structure. Otherwise generate a JSON text from the Ruby data
110
+ # structure object and return it.
111
+ #
112
+ # The *opts* argument is passed through to generate/parse respectively. See
113
+ # generate and parse for their documentation.
114
+ #
115
+ def self.[]: (untyped object, ?json_options opts) -> untyped
116
+
117
+ # This is create identifier, which is used to decide if the *json_create* hook
118
+ # of a class should be called. It defaults to 'json_class'.
119
+ #
120
+ def self.create_id: () -> _ToS
121
+
122
+ def self.create_id=: (_ToS create_id) -> _ToS
123
+
124
+ def self.deep_const_get: (_ToS path) -> untyped
125
+ # Dumps *obj* as a JSON string, i.e. calls generate on the object and returns
126
+ # the result.
127
+ #
128
+ # If anIO (an IO-like object or an object that responds to the write method) was
129
+ # given, the resulting JSON is written to it.
130
+ #
131
+ # If the number of nested arrays or objects exceeds *limit*, an ArgumentError
132
+ # exception is raised. This argument is similar (but not exactly the same!) to
133
+ # the *limit* argument in Marshal.dump.
134
+ #
135
+ # The default options for the generator can be changed via the
136
+ # dump_default_options method.
137
+ #
138
+ # This method is part of the implementation of the load/dump interface of
139
+ # Marshal and YAML.
140
+ #
141
+ def self?.dump: (_ToJson obj, ?Integer limit) -> String
142
+ | (_ToJson obj, _JsonToWritableIO anIO) -> _JsonWrite
143
+ | (_ToJson obj, _JsonWrite anIO, ?Integer limit) -> _JsonWrite
144
+
145
+ # The global default options for the JSON.dump method:
146
+ # :max_nesting: false
147
+ # :allow_nan: true
148
+ # :allow_blank: true
149
+ #
150
+ def self.dump_default_options: () -> json_options
151
+
152
+ def self.dump_default_options=: (json_options) -> json_options
153
+
154
+ # Generate a JSON document from the Ruby data structure *obj* and return it.
155
+ # This method disables the checks for circles in Ruby objects.
156
+ #
157
+ # **WARNING**: Be careful not to pass any Ruby data structures with circles as
158
+ # *obj* argument because this will cause JSON to go into an infinite loop.
159
+ #
160
+ def self?.fast_generate: (_ToJson obj, ?json_options opts) -> String
161
+
162
+ alias self.fast_unparse self.fast_generate
163
+ alias fast_unparse fast_generate
164
+
165
+ # Generate a JSON document from the Ruby data structure *obj* and return it.
166
+ # *state* is * a JSON::State object,
167
+ # * or a Hash like object (responding to to_hash),
168
+ # * an object convertible into a hash by a to_h method,
169
+ #
170
+ # that is used as or to configure a State object.
171
+ #
172
+ # It defaults to a state object, that creates the shortest possible JSON text in
173
+ # one line, checks for circular data structures and doesn't allow NaN, Infinity,
174
+ # and -Infinity.
175
+ #
176
+ # A *state* hash can have the following keys:
177
+ # * **indent**: a string used to indent levels (default: ''),
178
+ # * **space**: a string that is put after, a : or , delimiter (default: ''),
179
+ # * **space_before**: a string that is put before a : pair delimiter (default:
180
+ # ''),
181
+ # * **object_nl**: a string that is put at the end of a JSON object (default:
182
+ # ''),
183
+ # * **array_nl**: a string that is put at the end of a JSON array (default:
184
+ # ''),
185
+ # * **allow_nan**: true if NaN, Infinity, and -Infinity should be generated,
186
+ # otherwise an exception is thrown if these values are encountered. This
187
+ # options defaults to false.
188
+ # * **max_nesting**: The maximum depth of nesting allowed in the data
189
+ # structures from which JSON is to be generated. Disable depth checking with
190
+ # :max_nesting => false, it defaults to 100.
191
+ #
192
+ #
193
+ # See also the fast_generate for the fastest creation method with the least
194
+ # amount of sanity checks, and the pretty_generate method for some defaults for
195
+ # pretty output.
196
+ #
197
+ def self?.generate: (_ToJson obj, ?json_options opts) -> String
198
+
199
+ # Returns the JSON generator module that is used by JSON. This is either
200
+ # JSON::Ext::Generator or JSON::Pure::Generator.
201
+ #
202
+ def self.generator: () -> json_generator
203
+
204
+ def self.generator=: (json_generator generator) -> void
205
+
206
+ # Encodes string using Ruby's *String.encode*
207
+ #
208
+ def self.iconv: (encoding to, encoding from, String string) -> String
209
+
210
+ # Load a ruby data structure from a JSON *source* and return it. A source can
211
+ # either be a string-like object, an IO-like object, or an object responding to
212
+ # the read method. If *proc* was given, it will be called with any nested Ruby
213
+ # object as an argument recursively in depth first order. To modify the default
214
+ # options pass in the optional *options* argument as well.
215
+ #
216
+ # BEWARE: This method is meant to serialise data from trusted user input, like
217
+ # from your own database server or clients under your control, it could be
218
+ # dangerous to allow untrusted users to pass JSON sources into it. The default
219
+ # options for the parser can be changed via the load_default_options method.
220
+ #
221
+ # This method is part of the implementation of the load/dump interface of
222
+ # Marshal and YAML.
223
+ #
224
+ def self?.load: (string | _JsonReadableIO | _JsonRead source, ?Proc proc, ?json_options options) -> untyped
225
+
226
+ # The global default options for the JSON.load method:
227
+ # :max_nesting: false
228
+ # :allow_nan: true
229
+ # :allow_blank: true
230
+ #
231
+ def self.load_default_options: () -> json_options
232
+
233
+ def self.load_default_options=: (json_options) -> json_options
234
+
235
+ # Parse the JSON document *source* into a Ruby data structure and return it.
236
+ #
237
+ # *opts* can have the following keys:
238
+ # * **max_nesting**: The maximum depth of nesting allowed in the parsed data
239
+ # structures. Disable depth checking with :max_nesting => false. It defaults
240
+ # to 100.
241
+ # * **allow_nan**: If set to true, allow NaN, Infinity and -Infinity in
242
+ # defiance of RFC 7159 to be parsed by the Parser. This option defaults to
243
+ # false.
244
+ # * **symbolize_names**: If set to true, returns symbols for the names (keys)
245
+ # in a JSON object. Otherwise strings are returned. Strings are the default.
246
+ # * **create_additions**: If set to false, the Parser doesn't create additions
247
+ # even if a matching class and create_id was found. This option defaults to
248
+ # false.
249
+ # * **object_class**: Defaults to Hash
250
+ # * **array_class**: Defaults to Array
251
+ #
252
+ #
253
+ def self?.parse: (string source, ?json_options opts) -> untyped
254
+
255
+ # Parse the JSON document *source* into a Ruby data structure and return it. The
256
+ # bang version of the parse method defaults to the more dangerous values for the
257
+ # *opts* hash, so be sure only to parse trusted *source* documents.
258
+ #
259
+ # *opts* can have the following keys:
260
+ # * **max_nesting**: The maximum depth of nesting allowed in the parsed data
261
+ # structures. Enable depth checking with :max_nesting => anInteger. The
262
+ # parse! methods defaults to not doing max depth checking: This can be
263
+ # dangerous if someone wants to fill up your stack.
264
+ # * **allow_nan**: If set to true, allow NaN, Infinity, and -Infinity in
265
+ # defiance of RFC 7159 to be parsed by the Parser. This option defaults to
266
+ # true.
267
+ # * **create_additions**: If set to false, the Parser doesn't create additions
268
+ # even if a matching class and create_id was found. This option defaults to
269
+ # false.
270
+ #
271
+ #
272
+ def self?.parse!: (string source, ?json_options opts) -> untyped
273
+
274
+ # Returns the JSON parser class that is used by JSON. This is either
275
+ # JSON::Ext::Parser or JSON::Pure::Parser.
276
+ #
277
+ def self.parser: () -> json_parser
278
+
279
+ def self.parser=: (json_parser parser) -> void
280
+
281
+ # Generate a JSON document from the Ruby data structure *obj* and return it. The
282
+ # returned document is a prettier form of the document returned by #unparse.
283
+ #
284
+ # The *opts* argument can be used to configure the generator. See the generate
285
+ # method for a more detailed explanation.
286
+ #
287
+ def self?.pretty_generate: (_ToJson obj, ?json_options opts) -> untyped
288
+
289
+ alias self.pretty_unparse self.pretty_generate
290
+ alias pretty_unparse pretty_generate
291
+
292
+ # Recursively calls passed *Proc* if the parsed data structure is an *Array* or
293
+ # *Hash*
294
+ #
295
+ def self?.recurse_proc: (untyped result) { (*untyped) -> void } -> void
296
+
297
+ alias self.restore self.load
298
+ alias restore load
299
+
300
+ # Returns the JSON generator state class that is used by JSON. This is either
301
+ # JSON::Ext::Generator::State or JSON::Pure::Generator::State.
302
+ #
303
+ def self.state: () -> json_state
304
+
305
+ def self.state=: (json_state) -> json_state
306
+
307
+ alias self.unparse self.generate
308
+ alias unparse generate
309
+ end
310
+
311
+ JSON::FAST_STATE_PROTOTYPE: json_state
312
+
313
+ JSON::Infinity: Float
314
+
315
+ JSON::JSON_LOADED: bool
316
+
317
+ JSON::MinusInfinity: Float
318
+
319
+ JSON::NaN: Float
320
+
321
+ JSON::PRETTY_STATE_PROTOTYPE: json_state
322
+
323
+ JSON::SAFE_STATE_PROTOTYPE: json_state
324
+
325
+ # JSON version
326
+ #
327
+ JSON::VERSION: String
328
+
329
+ JSON::VERSION_ARRAY: Array
330
+
331
+ JSON::VERSION_BUILD: Integer
332
+
333
+ JSON::VERSION_MAJOR: Integer
334
+
335
+ JSON::VERSION_MINOR: Integer
@@ -0,0 +1,1093 @@
1
+ # Pathname represents the name of a file or directory on the filesystem, but not
2
+ # the file itself.
3
+ #
4
+ # The pathname depends on the Operating System: Unix, Windows, etc. This library
5
+ # works with pathnames of local OS, however non-Unix pathnames are supported
6
+ # experimentally.
7
+ #
8
+ # A Pathname can be relative or absolute. It's not until you try to reference
9
+ # the file that it even matters whether the file exists or not.
10
+ #
11
+ # Pathname is immutable. It has no method for destructive update.
12
+ #
13
+ # The goal of this class is to manipulate file path information in a neater way
14
+ # than standard Ruby provides. The examples below demonstrate the difference.
15
+ #
16
+ # **All** functionality from File, FileTest, and some from Dir and FileUtils is
17
+ # included, in an unsurprising way. It is essentially a facade for all of
18
+ # these, and more.
19
+ #
20
+ # ## Examples
21
+ #
22
+ # ### Example 1: Using Pathname
23
+ #
24
+ # require 'pathname'
25
+ # pn = Pathname.new("/usr/bin/ruby")
26
+ # size = pn.size # 27662
27
+ # isdir = pn.directory? # false
28
+ # dir = pn.dirname # Pathname:/usr/bin
29
+ # base = pn.basename # Pathname:ruby
30
+ # dir, base = pn.split # [Pathname:/usr/bin, Pathname:ruby]
31
+ # data = pn.read
32
+ # pn.open { |f| _ }
33
+ # pn.each_line { |line| _ }
34
+ #
35
+ # ### Example 2: Using standard Ruby
36
+ #
37
+ # pn = "/usr/bin/ruby"
38
+ # size = File.size(pn) # 27662
39
+ # isdir = File.directory?(pn) # false
40
+ # dir = File.dirname(pn) # "/usr/bin"
41
+ # base = File.basename(pn) # "ruby"
42
+ # dir, base = File.split(pn) # ["/usr/bin", "ruby"]
43
+ # data = File.read(pn)
44
+ # File.open(pn) { |f| _ }
45
+ # File.foreach(pn) { |line| _ }
46
+ #
47
+ # ### Example 3: Special features
48
+ #
49
+ # p1 = Pathname.new("/usr/lib") # Pathname:/usr/lib
50
+ # p2 = p1 + "ruby/1.8" # Pathname:/usr/lib/ruby/1.8
51
+ # p3 = p1.parent # Pathname:/usr
52
+ # p4 = p2.relative_path_from(p3) # Pathname:lib/ruby/1.8
53
+ # pwd = Pathname.pwd # Pathname:/home/gavin
54
+ # pwd.absolute? # true
55
+ # p5 = Pathname.new "." # Pathname:.
56
+ # p5 = p5 + "music/../articles" # Pathname:music/../articles
57
+ # p5.cleanpath # Pathname:articles
58
+ # p5.realpath # Pathname:/home/gavin/articles
59
+ # p5.children # [Pathname:/home/gavin/articles/linux, ...]
60
+ #
61
+ # ## Breakdown of functionality
62
+ #
63
+ # ### Core methods
64
+ #
65
+ # These methods are effectively manipulating a String, because that's all a path
66
+ # is. None of these access the file system except for #mountpoint?, #children,
67
+ # #each_child, #realdirpath and #realpath.
68
+ #
69
+ # * +
70
+ # * #join
71
+ # * #parent
72
+ # * #root?
73
+ # * #absolute?
74
+ # * #relative?
75
+ # * #relative_path_from
76
+ # * #each_filename
77
+ # * #cleanpath
78
+ # * #realpath
79
+ # * #realdirpath
80
+ # * #children
81
+ # * #each_child
82
+ # * #mountpoint?
83
+ #
84
+ #
85
+ # ### File status predicate methods
86
+ #
87
+ # These methods are a facade for FileTest:
88
+ # * #blockdev?
89
+ # * #chardev?
90
+ # * #directory?
91
+ # * #executable?
92
+ # * #executable_real?
93
+ # * #exist?
94
+ # * #file?
95
+ # * #grpowned?
96
+ # * #owned?
97
+ # * #pipe?
98
+ # * #readable?
99
+ # * #world_readable?
100
+ # * #readable_real?
101
+ # * #setgid?
102
+ # * #setuid?
103
+ # * #size
104
+ # * #size?
105
+ # * #socket?
106
+ # * #sticky?
107
+ # * #symlink?
108
+ # * #writable?
109
+ # * #world_writable?
110
+ # * #writable_real?
111
+ # * #zero?
112
+ #
113
+ #
114
+ # ### File property and manipulation methods
115
+ #
116
+ # These methods are a facade for File:
117
+ # * #atime
118
+ # * #birthtime
119
+ # * #ctime
120
+ # * #mtime
121
+ # * #chmod(mode)
122
+ # * #lchmod(mode)
123
+ # * #chown(owner, group)
124
+ # * #lchown(owner, group)
125
+ # * #fnmatch(pattern, *args)
126
+ # * #fnmatch?(pattern, *args)
127
+ # * #ftype
128
+ # * #make_link(old)
129
+ # * #open(*args, &block)
130
+ # * #readlink
131
+ # * #rename(to)
132
+ # * #stat
133
+ # * #lstat
134
+ # * #make_symlink(old)
135
+ # * #truncate(length)
136
+ # * #utime(atime, mtime)
137
+ # * #basename(*args)
138
+ # * #dirname
139
+ # * #extname
140
+ # * #expand_path(*args)
141
+ # * #split
142
+ #
143
+ #
144
+ # ### Directory methods
145
+ #
146
+ # These methods are a facade for Dir:
147
+ # * Pathname.glob(*args)
148
+ # * Pathname.getwd / Pathname.pwd
149
+ # * #rmdir
150
+ # * #entries
151
+ # * #each_entry(&block)
152
+ # * #mkdir(*args)
153
+ # * #opendir(*args)
154
+ #
155
+ #
156
+ # ### IO
157
+ #
158
+ # These methods are a facade for IO:
159
+ # * #each_line(*args, &block)
160
+ # * #read(*args)
161
+ # * #binread(*args)
162
+ # * #readlines(*args)
163
+ # * #sysopen(*args)
164
+ #
165
+ #
166
+ # ### Utilities
167
+ #
168
+ # These methods are a mixture of Find, FileUtils, and others:
169
+ # * #find(&block)
170
+ # * #mkpath
171
+ # * #rmtree
172
+ # * #unlink / #delete
173
+ #
174
+ #
175
+ # ## Method documentation
176
+ #
177
+ # As the above section shows, most of the methods in Pathname are facades. The
178
+ # documentation for these methods generally just says, for instance, "See
179
+ # FileTest.writable?", as you should be familiar with the original method
180
+ # anyway, and its documentation (e.g. through `ri`) will contain more
181
+ # information. In some cases, a brief description will follow.
182
+ #
183
+ class Pathname
184
+ # Returns the current working directory as a Pathname.
185
+ #
186
+ # Pathname.getwd
187
+ # #=> #<Pathname:/home/zzak/projects/ruby>
188
+ #
189
+ # See Dir.getwd.
190
+ #
191
+ def self.getwd: () -> Pathname
192
+
193
+ # Returns or yields Pathname objects.
194
+ #
195
+ # Pathname.glob("lib/i*.rb")
196
+ # #=> [#<Pathname:lib/ipaddr.rb>, #<Pathname:lib/irb.rb>]
197
+ #
198
+ # See Dir.glob.
199
+ #
200
+ def self.glob: (String | Array[String] pattern, ?Integer flags) -> Array[Pathname]
201
+ | (String | Array[String] pattern, ?Integer flags) { (Pathname) -> untyped } -> nil
202
+
203
+ # Returns the current working directory as a Pathname.
204
+ #
205
+ # Pathname.getwd
206
+ # #=> #<Pathname:/home/zzak/projects/ruby>
207
+ #
208
+ # See Dir.getwd.
209
+ #
210
+ def self.pwd: () -> Pathname
211
+
212
+ public
213
+
214
+ # Appends a pathname fragment to `self` to produce a new Pathname object.
215
+ #
216
+ # p1 = Pathname.new("/usr") # Pathname:/usr
217
+ # p2 = p1 + "bin/ruby" # Pathname:/usr/bin/ruby
218
+ # p3 = p1 + "/etc/passwd" # Pathname:/etc/passwd
219
+ #
220
+ # # / is aliased to +.
221
+ # p4 = p1 / "bin/ruby" # Pathname:/usr/bin/ruby
222
+ # p5 = p1 / "/etc/passwd" # Pathname:/etc/passwd
223
+ #
224
+ # This method doesn't access the file system; it is pure string manipulation.
225
+ #
226
+ def +: (Pathname | String | _ToStr other) -> Pathname
227
+
228
+ alias / +
229
+
230
+ # Provides a case-sensitive comparison operator for pathnames.
231
+ #
232
+ # Pathname.new('/usr') <=> Pathname.new('/usr/bin')
233
+ # #=> -1
234
+ # Pathname.new('/usr/bin') <=> Pathname.new('/usr/bin')
235
+ # #=> 0
236
+ # Pathname.new('/usr/bin') <=> Pathname.new('/USR/BIN')
237
+ # #=> 1
238
+ #
239
+ # It will return `-1`, `0` or `1` depending on the value of the left argument
240
+ # relative to the right argument. Or it will return `nil` if the arguments are
241
+ # not comparable.
242
+ #
243
+ def <=>: (untyped other) -> Integer?
244
+
245
+ # Compare this pathname with `other`. The comparison is string-based. Be aware
246
+ # that two different paths (`foo.txt` and `./foo.txt`) can refer to the same
247
+ # file.
248
+ #
249
+ def ==: (untyped) -> bool
250
+
251
+ # Compare this pathname with `other`. The comparison is string-based. Be aware
252
+ # that two different paths (`foo.txt` and `./foo.txt`) can refer to the same
253
+ # file.
254
+ #
255
+ def ===: (untyped) -> bool
256
+
257
+ # Predicate method for testing whether a path is absolute.
258
+ #
259
+ # It returns `true` if the pathname begins with a slash.
260
+ #
261
+ # p = Pathname.new('/im/sure')
262
+ # p.absolute?
263
+ # #=> true
264
+ #
265
+ # p = Pathname.new('not/so/sure')
266
+ # p.absolute?
267
+ # #=> false
268
+ #
269
+ def absolute?: () -> bool
270
+
271
+ # Iterates over and yields a new Pathname object for each element in the given
272
+ # path in ascending order.
273
+ #
274
+ # Pathname.new('/path/to/some/file.rb').ascend {|v| p v}
275
+ # #<Pathname:/path/to/some/file.rb>
276
+ # #<Pathname:/path/to/some>
277
+ # #<Pathname:/path/to>
278
+ # #<Pathname:/path>
279
+ # #<Pathname:/>
280
+ #
281
+ # Pathname.new('path/to/some/file.rb').ascend {|v| p v}
282
+ # #<Pathname:path/to/some/file.rb>
283
+ # #<Pathname:path/to/some>
284
+ # #<Pathname:path/to>
285
+ # #<Pathname:path>
286
+ #
287
+ # Returns an Enumerator if no block was given.
288
+ #
289
+ # enum = Pathname.new("/usr/bin/ruby").ascend
290
+ # # ... do stuff ...
291
+ # enum.each { |e| ... }
292
+ # # yields Pathnames /usr/bin/ruby, /usr/bin, /usr, and /.
293
+ #
294
+ # It doesn't access the filesystem.
295
+ #
296
+ def ascend: () { (Pathname) -> untyped } -> nil
297
+ | () -> Enumerator[Pathname, nil]
298
+
299
+ # Returns the last access time for the file.
300
+ #
301
+ # See File.atime.
302
+ #
303
+ def atime: () -> Time
304
+
305
+ # Returns the last component of the path.
306
+ #
307
+ # See File.basename.
308
+ #
309
+ def basename: (?String | _ToStr suffix) -> Pathname
310
+
311
+ # Returns all the bytes from the file, or the first `N` if specified.
312
+ #
313
+ # See File.binread.
314
+ #
315
+ def binread: (?Integer length, ?Integer offset) -> String
316
+
317
+ # Writes `contents` to the file, opening it in binary mode.
318
+ #
319
+ # See File.binwrite.
320
+ #
321
+ def binwrite: (String, ?Integer offset,
322
+ ?mode: Integer | String,
323
+ ?flags: Integer,
324
+ ?external_encoding: encoding,
325
+ ?internal_encoding: encoding,
326
+ ?encoding: encoding,
327
+ ?textmode: bool,
328
+ ?binmode: bool,
329
+ ?autoclose: bool,
330
+
331
+ # From String#encode
332
+ ?invalid: :replace ?,
333
+ ?undef: :replace ?,
334
+ ?replace: String,
335
+ ?fallback: Hash[String, String] | Proc | Method,
336
+ ?xml: :text | :attr,
337
+ ?universal_newline: true,
338
+ ?cr_newline: true,
339
+ ?crlf_newline: true,
340
+ ) -> Integer
341
+
342
+ # Returns the birth time for the file. If the platform doesn't have birthtime,
343
+ # raises NotImplementedError.
344
+ #
345
+ # See File.birthtime.
346
+ #
347
+ def birthtime: () -> Time
348
+
349
+ # See FileTest.blockdev?.
350
+ #
351
+ def blockdev?: () -> bool
352
+
353
+ # See FileTest.chardev?.
354
+ #
355
+ def chardev?: () -> bool
356
+
357
+ # Returns the children of the directory (files and subdirectories, not
358
+ # recursive) as an array of Pathname objects.
359
+ #
360
+ # By default, the returned pathnames will have enough information to access the
361
+ # files. If you set `with_directory` to `false`, then the returned pathnames
362
+ # will contain the filename only.
363
+ #
364
+ # For example:
365
+ # pn = Pathname("/usr/lib/ruby/1.8")
366
+ # pn.children
367
+ # # -> [ Pathname:/usr/lib/ruby/1.8/English.rb,
368
+ # Pathname:/usr/lib/ruby/1.8/Env.rb,
369
+ # Pathname:/usr/lib/ruby/1.8/abbrev.rb, ... ]
370
+ # pn.children(false)
371
+ # # -> [ Pathname:English.rb, Pathname:Env.rb, Pathname:abbrev.rb, ... ]
372
+ #
373
+ # Note that the results never contain the entries `.` and `..` in the directory
374
+ # because they are not children.
375
+ #
376
+ def children: (?bool with_directory) -> untyped
377
+
378
+ # Changes file permissions.
379
+ #
380
+ # See File.chmod.
381
+ #
382
+ def chmod: (Integer mode_int) -> Integer
383
+
384
+ # Change owner and group of the file.
385
+ #
386
+ # See File.chown.
387
+ #
388
+ def chown: (Integer owner, Integer group) -> Integer
389
+
390
+ # Returns clean pathname of `self` with consecutive slashes and useless dots
391
+ # removed. The filesystem is not accessed.
392
+ #
393
+ # If `consider_symlink` is `true`, then a more conservative algorithm is used to
394
+ # avoid breaking symbolic linkages. This may retain more `..` entries than
395
+ # absolutely necessary, but without accessing the filesystem, this can't be
396
+ # avoided.
397
+ #
398
+ # See Pathname#realpath.
399
+ #
400
+ def cleanpath: (?bool consider_symlink) -> Pathname
401
+
402
+ # Returns the last change time, using directory information, not the file
403
+ # itself.
404
+ #
405
+ # See File.ctime.
406
+ #
407
+ def ctime: () -> Time
408
+
409
+ # Removes a file or directory, using File.unlink if `self` is a file, or
410
+ # Dir.unlink as necessary.
411
+ #
412
+ def delete: () -> Integer
413
+
414
+ # Iterates over and yields a new Pathname object for each element in the given
415
+ # path in descending order.
416
+ #
417
+ # Pathname.new('/path/to/some/file.rb').descend {|v| p v}
418
+ # #<Pathname:/>
419
+ # #<Pathname:/path>
420
+ # #<Pathname:/path/to>
421
+ # #<Pathname:/path/to/some>
422
+ # #<Pathname:/path/to/some/file.rb>
423
+ #
424
+ # Pathname.new('path/to/some/file.rb').descend {|v| p v}
425
+ # #<Pathname:path>
426
+ # #<Pathname:path/to>
427
+ # #<Pathname:path/to/some>
428
+ # #<Pathname:path/to/some/file.rb>
429
+ #
430
+ # Returns an Enumerator if no block was given.
431
+ #
432
+ # enum = Pathname.new("/usr/bin/ruby").descend
433
+ # # ... do stuff ...
434
+ # enum.each { |e| ... }
435
+ # # yields Pathnames /, /usr, /usr/bin, and /usr/bin/ruby.
436
+ #
437
+ # It doesn't access the filesystem.
438
+ #
439
+ def descend: () { (Pathname) -> untyped } -> nil
440
+ | () -> Enumerator[Pathname, nil]
441
+
442
+ # See FileTest.directory?.
443
+ #
444
+ def directory?: () -> bool
445
+
446
+ # Returns all but the last component of the path.
447
+ #
448
+ # See File.dirname.
449
+ #
450
+ def dirname: () -> Pathname
451
+
452
+ # Iterates over the children of the directory (files and subdirectories, not
453
+ # recursive).
454
+ #
455
+ # It yields Pathname object for each child.
456
+ #
457
+ # By default, the yielded pathnames will have enough information to access the
458
+ # files.
459
+ #
460
+ # If you set `with_directory` to `false`, then the returned pathnames will
461
+ # contain the filename only.
462
+ #
463
+ # Pathname("/usr/local").each_child {|f| p f }
464
+ # #=> #<Pathname:/usr/local/share>
465
+ # # #<Pathname:/usr/local/bin>
466
+ # # #<Pathname:/usr/local/games>
467
+ # # #<Pathname:/usr/local/lib>
468
+ # # #<Pathname:/usr/local/include>
469
+ # # #<Pathname:/usr/local/sbin>
470
+ # # #<Pathname:/usr/local/src>
471
+ # # #<Pathname:/usr/local/man>
472
+ #
473
+ # Pathname("/usr/local").each_child(false) {|f| p f }
474
+ # #=> #<Pathname:share>
475
+ # # #<Pathname:bin>
476
+ # # #<Pathname:games>
477
+ # # #<Pathname:lib>
478
+ # # #<Pathname:include>
479
+ # # #<Pathname:sbin>
480
+ # # #<Pathname:src>
481
+ # # #<Pathname:man>
482
+ #
483
+ # Note that the results never contain the entries `.` and `..` in the directory
484
+ # because they are not children.
485
+ #
486
+ # See Pathname#children
487
+ #
488
+ def each_child: (?bool with_directory) { (Pathname) -> void } -> Array[Pathname]
489
+ | (?bool with_directory) -> Enumerator[Pathname, Array[Pathname]]
490
+
491
+ # Iterates over the entries (files and subdirectories) in the directory,
492
+ # yielding a Pathname object for each entry.
493
+ #
494
+ def each_entry: () { (Pathname) -> untyped } -> nil
495
+
496
+ # Iterates over each component of the path.
497
+ #
498
+ # Pathname.new("/usr/bin/ruby").each_filename {|filename| ... }
499
+ # # yields "usr", "bin", and "ruby".
500
+ #
501
+ # Returns an Enumerator if no block was given.
502
+ #
503
+ # enum = Pathname.new("/usr/bin/ruby").each_filename
504
+ # # ... do stuff ...
505
+ # enum.each { |e| ... }
506
+ # # yields "usr", "bin", and "ruby".
507
+ #
508
+ def each_filename: () { (String) -> untyped } -> nil
509
+ | () -> Enumerator[String, nil]
510
+
511
+ # Iterates over each line in the file and yields a String object for each.
512
+ #
513
+ def each_line: (?String sep, ?Integer limit,
514
+ # open_args
515
+ ?mode: Integer | String,
516
+ ?flags: Integer,
517
+ ?external_encoding: encoding,
518
+ ?internal_encoding: encoding,
519
+ ?encoding: encoding,
520
+ ?textmode: bool,
521
+ ?binmode: bool,
522
+ ?autoclose: bool,
523
+ # getline_args
524
+ ?chomp: bool,
525
+ ) { (String) -> untyped } -> nil
526
+ | (Integer limit,
527
+ # open_args
528
+ ?mode: Integer | String,
529
+ ?flags: Integer,
530
+ ?external_encoding: encoding,
531
+ ?internal_encoding: encoding,
532
+ ?encoding: encoding,
533
+ ?textmode: bool,
534
+ ?binmode: bool,
535
+ ?autoclose: bool,
536
+ # getline_args
537
+ ?chomp: bool,
538
+ ) { (String) -> untyped } -> nil
539
+ | (?String sep, ?Integer limit,
540
+ # open_args
541
+ ?mode: Integer | String,
542
+ ?flags: Integer,
543
+ ?external_encoding: encoding,
544
+ ?internal_encoding: encoding,
545
+ ?encoding: encoding,
546
+ ?textmode: bool,
547
+ ?binmode: bool,
548
+ ?autoclose: bool,
549
+ # getline_args
550
+ ?chomp: bool,
551
+ ) -> Enumerator[String, nil]
552
+ | (Integer limit,
553
+ # open_args
554
+ ?mode: Integer | String,
555
+ ?flags: Integer,
556
+ ?external_encoding: encoding,
557
+ ?internal_encoding: encoding,
558
+ ?encoding: encoding,
559
+ ?textmode: bool,
560
+ ?binmode: bool,
561
+ ?autoclose: bool,
562
+ # getline_args
563
+ ?chomp: bool,
564
+ ) -> Enumerator[String, nil]
565
+
566
+ # Tests the file is empty.
567
+ #
568
+ # See Dir#empty? and FileTest.empty?.
569
+ #
570
+ def empty?: () -> bool
571
+
572
+ # Return the entries (files and subdirectories) in the directory, each as a
573
+ # Pathname object.
574
+ #
575
+ # The results contains just the names in the directory, without any trailing
576
+ # slashes or recursive look-up.
577
+ #
578
+ # pp Pathname.new('/usr/local').entries
579
+ # #=> [#<Pathname:share>,
580
+ # # #<Pathname:lib>,
581
+ # # #<Pathname:..>,
582
+ # # #<Pathname:include>,
583
+ # # #<Pathname:etc>,
584
+ # # #<Pathname:bin>,
585
+ # # #<Pathname:man>,
586
+ # # #<Pathname:games>,
587
+ # # #<Pathname:.>,
588
+ # # #<Pathname:sbin>,
589
+ # # #<Pathname:src>]
590
+ #
591
+ # The result may contain the current directory `#<Pathname:.>` and the parent
592
+ # directory `#<Pathname:..>`.
593
+ #
594
+ # If you don't want `.` and `..` and want directories, consider
595
+ # Pathname#children.
596
+ #
597
+ def entries: () -> Array[Pathname]
598
+
599
+ # Compare this pathname with `other`. The comparison is string-based. Be aware
600
+ # that two different paths (`foo.txt` and `./foo.txt`) can refer to the same
601
+ # file.
602
+ #
603
+ def eql?: (untyped) -> bool
604
+
605
+ # See FileTest.executable?.
606
+ #
607
+ def executable?: () -> bool
608
+
609
+ # See FileTest.executable_real?.
610
+ #
611
+ def executable_real?: () -> bool
612
+
613
+ # See FileTest.exist?.
614
+ #
615
+ def exist?: () -> bool
616
+
617
+ # Returns the absolute path for the file.
618
+ #
619
+ # See File.expand_path.
620
+ #
621
+ def expand_path: (?String dir) -> Pathname
622
+
623
+ # Returns the file's extension.
624
+ #
625
+ # See File.extname.
626
+ #
627
+ def extname: () -> String
628
+
629
+ # See FileTest.file?.
630
+ #
631
+ def file?: () -> bool
632
+
633
+ # Iterates over the directory tree in a depth first manner, yielding a Pathname
634
+ # for each file under "this" directory.
635
+ #
636
+ # Returns an Enumerator if no block is given.
637
+ #
638
+ # Since it is implemented by the standard library module Find, Find.prune can be
639
+ # used to control the traversal.
640
+ #
641
+ # If `self` is `.`, yielded pathnames begin with a filename in the current
642
+ # directory, not `./`.
643
+ #
644
+ # See Find.find
645
+ #
646
+ def find: (?ignore_error: bool) { (Pathname) -> untyped } -> nil
647
+ | (?ignore_error: bool) -> Enumerator[Pathname, nil]
648
+
649
+ # Return `true` if the receiver matches the given pattern.
650
+ #
651
+ # See File.fnmatch.
652
+ #
653
+ def fnmatch: (String pattern, ?Integer flags) -> bool
654
+
655
+ # Return `true` if the receiver matches the given pattern.
656
+ #
657
+ # See File.fnmatch.
658
+ #
659
+ alias fnmatch? fnmatch
660
+
661
+ # Freezes this Pathname.
662
+ #
663
+ # See Object.freeze.
664
+ #
665
+ def freeze: () -> Pathname
666
+
667
+ # Returns "type" of file ("file", "directory", etc).
668
+ #
669
+ # See File.ftype.
670
+ #
671
+ def ftype: () -> String
672
+
673
+ # Returns or yields Pathname objects.
674
+ #
675
+ # Pathname("ruby-2.4.2").glob("R*.md")
676
+ # #=> [#<Pathname:ruby-2.4.2/README.md>, #<Pathname:ruby-2.4.2/README.ja.md>]
677
+ #
678
+ # See Dir.glob. This method uses the `base` keyword argument of Dir.glob.
679
+ #
680
+ def glob: (String | Array[String] pattern, ?Integer flags) -> Array[Pathname]
681
+ | (String | Array[String] pattern, ?Integer flags) { (Pathname) -> untyped } -> nil
682
+
683
+ # See FileTest.grpowned?.
684
+ #
685
+ def grpowned?: () -> bool
686
+
687
+ def hash: () -> Integer
688
+
689
+ def inspect: () -> String
690
+
691
+ # Joins the given pathnames onto `self` to create a new Pathname object.
692
+ #
693
+ # path0 = Pathname.new("/usr") # Pathname:/usr
694
+ # path0 = path0.join("bin/ruby") # Pathname:/usr/bin/ruby
695
+ # # is the same as
696
+ # path1 = Pathname.new("/usr") + "bin/ruby" # Pathname:/usr/bin/ruby
697
+ # path0 == path1
698
+ # #=> true
699
+ #
700
+ def join: (*String | _ToStr | Pathname args) -> Pathname
701
+
702
+ # Same as Pathname.chmod, but does not follow symbolic links.
703
+ #
704
+ # See File.lchmod.
705
+ #
706
+ def lchmod: (Integer mode) -> Integer
707
+
708
+ # Same as Pathname.chown, but does not follow symbolic links.
709
+ #
710
+ # See File.lchown.
711
+ #
712
+ def lchown: (Integer owner, Integer group) -> Integer
713
+
714
+ # See File.lstat.
715
+ #
716
+ def lstat: () -> ::File::Stat
717
+
718
+ # Creates a hard link at *pathname*.
719
+ #
720
+ # See File.link.
721
+ #
722
+ def make_link: (String | Pathname | _ToStr old) -> Integer
723
+
724
+ # Creates a symbolic link.
725
+ #
726
+ # See File.symlink.
727
+ #
728
+ def make_symlink: (String | Pathname | _ToStr old) -> Integer
729
+
730
+ # Create the referenced directory.
731
+ #
732
+ # See Dir.mkdir.
733
+ #
734
+ def mkdir: (?Integer perm) -> Integer
735
+
736
+ # Creates a full path, including any intermediate directories that don't yet
737
+ # exist.
738
+ #
739
+ # See FileUtils.mkpath and FileUtils.mkdir_p
740
+ #
741
+ def mkpath: () -> nil
742
+
743
+ # Returns `true` if `self` points to a mountpoint.
744
+ #
745
+ def mountpoint?: () -> bool
746
+
747
+ # Returns the last modified time of the file.
748
+ #
749
+ # See File.mtime.
750
+ #
751
+ def mtime: () -> Time
752
+
753
+ # Opens the file for reading or writing.
754
+ #
755
+ # See File.open.
756
+ #
757
+ def open: (?String mode, ?Integer perm) -> File
758
+ | [T] (?String mode, ?Integer perm) { (File) -> T } -> T
759
+
760
+ # Opens the referenced directory.
761
+ #
762
+ # See Dir.open.
763
+ #
764
+ def opendir: () -> Dir
765
+ | [U] () { (Dir) -> U } -> U
766
+
767
+ # See FileTest.owned?.
768
+ #
769
+ def owned?: () -> bool
770
+
771
+ # Returns the parent directory.
772
+ #
773
+ # This is same as `self + '..'`.
774
+ #
775
+ def parent: () -> Pathname
776
+
777
+ # See FileTest.pipe?.
778
+ #
779
+ def pipe?: () -> bool
780
+
781
+ # Returns all data from the file, or the first `N` bytes if specified.
782
+ #
783
+ # See File.read.
784
+ #
785
+ def read: (?Integer length, ?Integer offset,
786
+ # open_args
787
+ ?mode: Integer | String,
788
+ ?flags: Integer,
789
+ ?external_encoding: encoding,
790
+ ?internal_encoding: encoding,
791
+ ?encoding: encoding,
792
+ ?textmode: bool,
793
+ ?binmode: bool,
794
+ ?autoclose: bool,
795
+ ) -> String
796
+
797
+ # See FileTest.readable?.
798
+ #
799
+ def readable?: () -> bool
800
+
801
+ # See FileTest.readable_real?.
802
+ #
803
+ def readable_real?: () -> bool
804
+
805
+ # Returns all the lines from the file.
806
+ #
807
+ # See File.readlines.
808
+ #
809
+ def readlines: (?String sep, ?Integer limit,
810
+ # open_args
811
+ ?mode: Integer | String,
812
+ ?flags: Integer,
813
+ ?external_encoding: encoding,
814
+ ?internal_encoding: encoding,
815
+ ?encoding: encoding,
816
+ ?textmode: bool,
817
+ ?binmode: bool,
818
+ ?autoclose: bool,
819
+ # getline_args
820
+ ?chomp: bool,
821
+ ) -> Array[String]
822
+ | (Integer limit,
823
+ # open_args
824
+ ?mode: Integer | String,
825
+ ?flags: Integer,
826
+ ?external_encoding: encoding,
827
+ ?internal_encoding: encoding,
828
+ ?encoding: encoding,
829
+ ?textmode: bool,
830
+ ?binmode: bool,
831
+ ?autoclose: bool,
832
+ # getline_args
833
+ ?chomp: bool,
834
+ ) -> Array[String]
835
+
836
+ # Read symbolic link.
837
+ #
838
+ # See File.readlink.
839
+ #
840
+ def readlink: () -> untyped
841
+
842
+ # Returns the real (absolute) pathname of `self` in the actual filesystem.
843
+ #
844
+ # Does not contain symlinks or useless dots, `..` and `.`.
845
+ #
846
+ # The last component of the real pathname can be nonexistent.
847
+ #
848
+ def realdirpath: (?string | Pathname base_dir) -> Pathname
849
+
850
+ # Returns the real (absolute) pathname for `self` in the actual filesystem.
851
+ #
852
+ # Does not contain symlinks or useless dots, `..` and `.`.
853
+ #
854
+ # All components of the pathname must exist when this method is called.
855
+ #
856
+ def realpath: (?string | Pathname base_dir) -> Pathname
857
+
858
+ # The opposite of Pathname#absolute?
859
+ #
860
+ # It returns `false` if the pathname begins with a slash.
861
+ #
862
+ # p = Pathname.new('/im/sure')
863
+ # p.relative?
864
+ # #=> false
865
+ #
866
+ # p = Pathname.new('not/so/sure')
867
+ # p.relative?
868
+ # #=> true
869
+ #
870
+ def relative?: () -> bool
871
+
872
+ # Returns a relative path from the given `base_directory` to the receiver.
873
+ #
874
+ # If `self` is absolute, then `base_directory` must be absolute too.
875
+ #
876
+ # If `self` is relative, then `base_directory` must be relative too.
877
+ #
878
+ # This method doesn't access the filesystem. It assumes no symlinks.
879
+ #
880
+ # ArgumentError is raised when it cannot find a relative path.
881
+ #
882
+ def relative_path_from: (Pathname | string base_directory) -> Pathname
883
+
884
+ # Rename the file.
885
+ #
886
+ # See File.rename.
887
+ #
888
+ def rename: (Pathname | string new_name) -> 0
889
+
890
+ # Remove the referenced directory.
891
+ #
892
+ # See Dir.rmdir.
893
+ #
894
+ def rmdir: () -> 0
895
+
896
+ # Recursively deletes a directory, including all directories beneath it.
897
+ #
898
+ # See FileUtils.rm_r
899
+ #
900
+ def rmtree: () -> void
901
+
902
+ # Predicate method for root directories. Returns `true` if the pathname
903
+ # consists of consecutive slashes.
904
+ #
905
+ # It doesn't access the filesystem. So it may return `false` for some pathnames
906
+ # which points to roots such as `/usr/..`.
907
+ #
908
+ def root?: () -> bool
909
+
910
+ # See FileTest.setgid?.
911
+ #
912
+ def setgid?: () -> bool
913
+
914
+ # See FileTest.setuid?.
915
+ #
916
+ def setuid?: () -> bool
917
+
918
+ # See FileTest.size.
919
+ #
920
+ def size: () -> Integer
921
+
922
+ # See FileTest.size?.
923
+ #
924
+ def size?: () -> Integer?
925
+
926
+ # See FileTest.socket?.
927
+ #
928
+ def socket?: () -> untyped
929
+
930
+ # Returns the #dirname and the #basename in an Array.
931
+ #
932
+ # See File.split.
933
+ #
934
+ def split: () -> [Pathname, Pathname]
935
+
936
+ # Returns a File::Stat object.
937
+ #
938
+ # See File.stat.
939
+ #
940
+ def stat: () -> File::Stat
941
+
942
+ # See FileTest.sticky?.
943
+ #
944
+ def sticky?: () -> untyped
945
+
946
+ # Return a pathname which is substituted by String#sub.
947
+ #
948
+ # path1 = Pathname.new('/usr/bin/perl')
949
+ # path1.sub('perl', 'ruby')
950
+ # #=> #<Pathname:/usr/bin/ruby>
951
+ #
952
+ def sub: (Regexp | string pattern, string | Hash[String, String] replacement) -> Pathname
953
+ | (Regexp | string pattern) { (String match) -> string } -> Pathname
954
+
955
+ # Return a pathname with `repl` added as a suffix to the basename.
956
+ #
957
+ # If self has no extension part, `repl` is appended.
958
+ #
959
+ # Pathname.new('/usr/bin/shutdown').sub_ext('.rb')
960
+ # #=> #<Pathname:/usr/bin/shutdown.rb>
961
+ #
962
+ def sub_ext: (string replacement) -> Pathname
963
+
964
+ # See FileTest.symlink?.
965
+ #
966
+ def symlink?: () -> untyped
967
+
968
+ # See IO.sysopen.
969
+ #
970
+ def sysopen: (?String mode, ?Integer perm) -> Integer
971
+
972
+ # Returns pathname. This method is deprecated and will be removed in Ruby 3.2.
973
+ #
974
+ def taint: () -> Pathname
975
+
976
+ # Return the path as a String.
977
+ #
978
+ # to_path is implemented so Pathname objects are usable with File.open, etc.
979
+ #
980
+ def to_path: () -> String
981
+
982
+ # Return the path as a String.
983
+ #
984
+ # to_path is implemented so Pathname objects are usable with File.open, etc.
985
+ #
986
+ alias to_s to_path
987
+
988
+ # Truncates the file to `length` bytes.
989
+ #
990
+ # See File.truncate.
991
+ #
992
+ def truncate: (Integer length) -> 0
993
+
994
+ # Removes a file or directory, using File.unlink if `self` is a file, or
995
+ # Dir.unlink as necessary.
996
+ #
997
+ def unlink: () -> Integer
998
+
999
+ # Returns pathname. This method is deprecated and will be removed in Ruby 3.2.
1000
+ #
1001
+ def untaint: () -> Pathname
1002
+
1003
+ # Update the access and modification times of the file.
1004
+ #
1005
+ # See File.utime.
1006
+ #
1007
+ def utime: (Integer | Time atime, Integer | Time mtime) -> Integer
1008
+
1009
+ # See FileTest.world_readable?.
1010
+ #
1011
+ def world_readable?: () -> (Integer | nil)
1012
+
1013
+ # See FileTest.world_writable?.
1014
+ #
1015
+ def world_writable?: () -> (Integer | nil)
1016
+
1017
+ # See FileTest.writable?.
1018
+ #
1019
+ def writable?: () -> bool
1020
+
1021
+ # See FileTest.writable_real?.
1022
+ #
1023
+ def writable_real?: () -> bool
1024
+
1025
+ # Writes `contents` to the file.
1026
+ #
1027
+ # See File.write.
1028
+ #
1029
+ def write: (String content, ?Integer offset,
1030
+ # open_args
1031
+ ?mode: Integer | String,
1032
+ ?flags: Integer,
1033
+ ?external_encoding: encoding,
1034
+ ?internal_encoding: encoding,
1035
+ ?encoding: encoding,
1036
+ ?textmode: bool,
1037
+ ?binmode: bool,
1038
+ ?autoclose: bool,
1039
+ ) -> Integer
1040
+
1041
+ # See FileTest.zero?.
1042
+ #
1043
+ def zero?: () -> bool
1044
+
1045
+ private
1046
+
1047
+ def add_trailing_separator: (untyped path) -> untyped
1048
+
1049
+ def chop_basename: (untyped path) -> untyped
1050
+
1051
+ def cleanpath_aggressive: () -> untyped
1052
+
1053
+ def cleanpath_conservative: () -> untyped
1054
+
1055
+ def del_trailing_separator: (untyped path) -> untyped
1056
+
1057
+ def has_trailing_separator?: (untyped path) -> untyped
1058
+
1059
+ # Create a Pathname object from the given String (or String-like object). If
1060
+ # `path` contains a NULL character (`\0`), an ArgumentError is raised.
1061
+ #
1062
+ def initialize: (string | Pathname) -> void
1063
+
1064
+ def plus: (untyped path1, untyped path2) -> untyped
1065
+
1066
+ def prepend_prefix: (untyped prefix, untyped relpath) -> untyped
1067
+
1068
+ def split_names: (untyped path) -> untyped
1069
+ end
1070
+
1071
+ Pathname::SAME_PATHS: Proc
1072
+
1073
+ Pathname::SEPARATOR_LIST: String
1074
+
1075
+ Pathname::SEPARATOR_PAT: Regexp
1076
+
1077
+ Pathname::TO_PATH: Symbol
1078
+
1079
+ extension Kernel (Pathname)
1080
+ # Creates a new Pathname object from the given string, `path`, and returns
1081
+ # pathname object.
1082
+ #
1083
+ # In order to use this constructor, you must first require the Pathname standard
1084
+ # library extension.
1085
+ #
1086
+ # require 'pathname'
1087
+ # Pathname("/home/zzak")
1088
+ # #=> #<Pathname:/home/zzak>
1089
+ #
1090
+ # See also Pathname::new for more information.
1091
+ #
1092
+ def Pathname: (String | Pathname) -> Pathname
1093
+ end