rbs 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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