rbs 3.4.0.pre.1 → 3.4.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 48c814d4cbaac5fe01ca09ff353a0fdde62a95b37a677e398925e0f1905b5a4f
4
- data.tar.gz: 3e8ff356790ab3879392996f26db15d0c0e01686a7e496ee4c6e26f9b326b9b2
3
+ metadata.gz: d3cadb8632c98b89ed21369dc36069d3f4070df6d289f4998398efa7d0265581
4
+ data.tar.gz: 985603ca882b4e3049661958d43607a42ad1e4672caf2393c0e3b276268725b4
5
5
  SHA512:
6
- metadata.gz: a14fdcafb7e142a4685fd31325900e24aceee40c17b453e87800bebcc1958e02d9ade0ff912ef711650a8e1ca8adae62c150ccd8377a6859d687be55ba999440
7
- data.tar.gz: 8c69b1dafc7738fb35c6da0a12c33ac7fdc7bcd75f7fcefaf4dc68383b85fb3717fc21ca632d151ec9182633ebea115160edf44324681275de8dbfd945e7ba02
6
+ metadata.gz: a75696df23d12ed0448fc3439abc4c80813df333586a66bccd16578a4d98701e8f736ef34e4f51b3983ee490604940b3798eceae0d28e33013af6be6ee211f23
7
+ data.tar.gz: 8a4edec0026f960dc9642b0fbb0398fde953ded13a8c347e9aabeb0cee904d242aeff76b76fde13b2e3b067a6767c3a12aee88c918d81bd996840ecb901d9b83
data/CHANGELOG.md CHANGED
@@ -2,6 +2,21 @@
2
2
 
3
3
  ## master
4
4
 
5
+ ## 3.4.0 (2023-12-21)
6
+
7
+ ### Signature updates
8
+
9
+ * minitest's lifecycle hooks ([#1694](https://github.com/ruby/rbs/pull/1694))
10
+ * `IO.popen`, `IO#read` ([#1693](https://github.com/ruby/rbs/pull/1693))
11
+
12
+ ### Library changes
13
+
14
+ * Fix klass name if klass is singleton_class ([#1695](https://github.com/ruby/rbs/pull/1695))
15
+
16
+ ### Miscellaneous
17
+
18
+ * Suppress warnings on testing ([#1691](https://github.com/ruby/rbs/pull/1691))
19
+
5
20
  ## 3.4.0.pre.1 (2023-12-19)
6
21
 
7
22
  ### Signature updates
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- rbs (3.4.0.pre.1)
4
+ rbs (3.4.0)
5
5
  abbrev
6
6
 
7
7
  PATH
data/README.md CHANGED
@@ -181,6 +181,7 @@ puts singleton.methods[:gsub]
181
181
  - [RBS by Example](docs/rbs_by_example.md)
182
182
  - [RBS collection](docs/collection.md)
183
183
  - [Using `Data` and `Struct`](docs/data_and_struct.md)
184
+ - [Releasing a gem with RBS](docs/gem.md)
184
185
 
185
186
  ## Community
186
187
 
data/Rakefile CHANGED
@@ -56,7 +56,7 @@ end
56
56
  task :validate => :compile do
57
57
  require 'yaml'
58
58
 
59
- sh "#{ruby} #{rbs} validate --silent"
59
+ sh "#{ruby} #{rbs} validate"
60
60
 
61
61
  libs = FileList["stdlib/*"].map {|path| File.basename(path).to_s }
62
62
 
@@ -72,7 +72,7 @@ task :validate => :compile do
72
72
  end
73
73
 
74
74
  libs.each do |lib|
75
- sh "#{ruby} #{rbs} -r #{lib} validate --silent"
75
+ sh "#{ruby} #{rbs} -r #{lib} validate"
76
76
  end
77
77
  end
78
78
 
data/core/io.rbs CHANGED
@@ -1532,7 +1532,8 @@ class IO < Object
1532
1532
  #
1533
1533
  # Related: IO#write.
1534
1534
  #
1535
- def read: (?int? length, ?string outbuf) -> String?
1535
+ def read: (?nil, ?string outbuf) -> String
1536
+ | (int? length, ?string outbuf) -> String?
1536
1537
 
1537
1538
  # <!--
1538
1539
  # rdoc-file=io.rb
@@ -2533,10 +2534,19 @@ class IO < Object
2533
2534
  #
2534
2535
  # Raises exceptions that IO.pipe and Kernel.spawn raise.
2535
2536
  #
2536
- def self.popen: (string cmd, ?string | int mode, ?path: string?, ?external_encoding: String | Encoding | nil, ?internal_encoding: String | Encoding | nil, ?encoding: String | Encoding | nil, ?textmode: boolish, ?binmode: boolish, ?autoclose: boolish, ?mode: String, ?unsetenv_others: boolish, ?pgroup: true | Integer, ?umask: Integer, ?in: Kernel::redirect_fd, ?out: Kernel::redirect_fd, ?err: Kernel::redirect_fd, ?close_others: boolish, ?chdir: String) -> instance
2537
- | (Hash[string, string?] env, string cmd, ?string | int mode, ?path: string?, ?external_encoding: String | Encoding | nil, ?internal_encoding: String | Encoding | nil, ?encoding: String | Encoding | nil, ?textmode: boolish, ?binmode: boolish, ?autoclose: boolish, ?mode: String, ?unsetenv_others: boolish, ?pgroup: true | Integer, ?umask: Integer, ?in: Kernel::redirect_fd, ?out: Kernel::redirect_fd, ?err: Kernel::redirect_fd, ?close_others: boolish, ?chdir: String) -> instance
2538
- | [X] (string cmd, ?string | int mode, ?path: string?, ?external_encoding: String | Encoding | nil, ?internal_encoding: String | Encoding | nil, ?encoding: String | Encoding | nil, ?textmode: boolish, ?binmode: boolish, ?autoclose: boolish, ?mode: String, ?unsetenv_others: boolish, ?pgroup: true | Integer, ?umask: Integer, ?in: Kernel::redirect_fd, ?out: Kernel::redirect_fd, ?err: Kernel::redirect_fd, ?close_others: boolish, ?chdir: String) { (instance) -> X } -> X
2539
- | [X] (Hash[string, string?] env, string cmd, ?string | int mode, ?path: string?, ?external_encoding: String | Encoding | nil, ?internal_encoding: String | Encoding | nil, ?encoding: String | Encoding | nil, ?textmode: boolish, ?binmode: boolish, ?autoclose: boolish, ?mode: String, ?unsetenv_others: boolish, ?pgroup: true | Integer, ?umask: Integer, ?in: Kernel::redirect_fd, ?out: Kernel::redirect_fd, ?err: Kernel::redirect_fd, ?close_others: boolish, ?chdir: String) { (instance) -> X } -> X
2537
+ def self.popen: (string | cmd_array cmd, ?string | int mode, ?path: string?, ?external_encoding: String | Encoding | nil, ?internal_encoding: String | Encoding | nil, ?encoding: String | Encoding | nil, ?textmode: boolish, ?binmode: boolish, ?autoclose: boolish, ?mode: String, ?unsetenv_others: boolish, ?pgroup: true | Integer, ?umask: Integer, ?in: Kernel::redirect_fd, ?out: Kernel::redirect_fd, ?err: Kernel::redirect_fd, ?close_others: boolish, ?chdir: String) -> instance
2538
+ | (Hash[string, string?] env, string | cmd_array cmd, ?string | int mode, ?path: string?, ?external_encoding: String | Encoding | nil, ?internal_encoding: String | Encoding | nil, ?encoding: String | Encoding | nil, ?textmode: boolish, ?binmode: boolish, ?autoclose: boolish, ?mode: String, ?unsetenv_others: boolish, ?pgroup: true | Integer, ?umask: Integer, ?in: Kernel::redirect_fd, ?out: Kernel::redirect_fd, ?err: Kernel::redirect_fd, ?close_others: boolish, ?chdir: String) -> instance
2539
+ | [X] (string | cmd_array cmd, ?string | int mode, ?path: string?, ?external_encoding: String | Encoding | nil, ?internal_encoding: String | Encoding | nil, ?encoding: String | Encoding | nil, ?textmode: boolish, ?binmode: boolish, ?autoclose: boolish, ?mode: String, ?unsetenv_others: boolish, ?pgroup: true | Integer, ?umask: Integer, ?in: Kernel::redirect_fd, ?out: Kernel::redirect_fd, ?err: Kernel::redirect_fd, ?close_others: boolish, ?chdir: String) { (instance) -> X } -> X
2540
+ | [X] (Hash[string, string?] env, string | cmd_array cmd, ?string | int mode, ?path: string?, ?external_encoding: String | Encoding | nil, ?internal_encoding: String | Encoding | nil, ?encoding: String | Encoding | nil, ?textmode: boolish, ?binmode: boolish, ?autoclose: boolish, ?mode: String, ?unsetenv_others: boolish, ?pgroup: true | Integer, ?umask: Integer, ?in: Kernel::redirect_fd, ?out: Kernel::redirect_fd, ?err: Kernel::redirect_fd, ?close_others: boolish, ?chdir: String) { (instance) -> X } -> X
2541
+
2542
+ # The command can be given as:
2543
+ #
2544
+ # * Array of string `["ruby", "-v"]`, or
2545
+ # * Array of string with the first element of array `[["ruby", "RUBY"], "-v"]`
2546
+ #
2547
+ # But RBS cannot define such a type. So this is simply a union of `string` or `[String, String]`.
2548
+ #
2549
+ type cmd_array = array[string | [String, String]]
2540
2550
 
2541
2551
  # <!--
2542
2552
  # rdoc-file=io.c
data/docs/gem.md ADDED
@@ -0,0 +1,58 @@
1
+ # Releasing a gem with RBS
2
+
3
+ You can release the RBS type definition of your gem included in the gem package. Just add your RBS files inside `/sig` directory, put them in your rubygem package, and release a new version. RBS gem will load the RBS files from your gem package automatically.
4
+
5
+ ## `/sig` directory
6
+
7
+ RBS gem tries to load a type definition of a gem from gem package first. It checks if there is `/sig` directory in the gem package and loads `*.rbs` files from the directory. So, everything you have to do to make your type definition available are:
8
+
9
+ 1. Add `/sig` directory in your gem package
10
+ 2. Put your RBS files inside the directory
11
+ 3. Make sure the RBS files are included in the gem package
12
+
13
+ ### Hidden RBS files
14
+
15
+ If you have RBS files you don't want to export to the gem users, you can put the files under a directory that starts with `_``.
16
+
17
+ Assume you have three RBS files in your gem package:
18
+
19
+ * `/sig/foo.rbs`
20
+ * `/sig/bar/baz.rbs`
21
+ * `/sig/_private/internal.rbs`
22
+
23
+ `foo.rbs` and `baz.rbs` will be loaded from the gem package, but the `internal.rbs` will be skipped. This is only when you load RBS files of a *library*, for example through `-r` option given to `rbs` command. If you load RBS files as *source code*, for example through `-I` option given to `rbs` command, the hidden RBS files will be loaded too.
24
+
25
+ * `rbs -r your-gem` => Loading a library
26
+ * `rbs -I sig` => Loading RBS files as source code
27
+
28
+ ### Adding `manifest.yaml`
29
+
30
+ `manifest.yaml` lets you declare dependencies to standard libraries. Here is an example, from [RBS gem](https://github.com/ruby/rbs/blob/6b3d0f976a50b3974d0bff26ea8fa9931053f38b/sig/manifest.yaml).
31
+
32
+ ```yaml
33
+ dependencies:
34
+ - name: abbrev
35
+ - name: json
36
+ - name: logger
37
+ - name: optparse
38
+ - name: pathname
39
+ - name: rdoc
40
+ - name: tsort
41
+ ```
42
+
43
+ Note that you don't have to write the dependencies that are included in your `.gemspec`. RBS will detect the dependencies between gems, declared in `.gemspec`. `manifest.yaml` is a material for undeclared dependencies, which usually is for standard libraries.
44
+
45
+ ## Testing your type definition
46
+
47
+ If you develop your gem using a static type checker, like [Steep](https://github.com/soutaro/steep), your type definition will be (mostly) correct and reliable. If not, we strongly recommend adding extra tests focusing on the RBS type definitions.
48
+
49
+ `RBS::UnitTest` is a library to do that. `assert_send_type` is the most important assertion.
50
+
51
+ ```rb
52
+ assert_send_type '(Regexp) { (String) -> String } -> String',
53
+ 'hello', :gsub, /hello/, &proc { "foo" }
54
+ ```
55
+
56
+ It calls `String#gsub` method and confirms if given arguments and the return value has correct types.
57
+
58
+ You can find examples under `test/stdlib` directory of [RBS repository](https://github.com/ruby/rbs/blob/6b3d0f976a50b3974d0bff26ea8fa9931053f38b/test/stdlib/String_test.rb).
@@ -41,7 +41,12 @@ module RBS
41
41
  end
42
42
 
43
43
  def self.to_string(error)
44
- method = "#{error.klass.name}#{error.method_name}"
44
+ name = if error.klass.singleton_class?
45
+ inspect_(error.klass).sub(/\A#<Class:(.*)>\z/, '\1')
46
+ else
47
+ error.klass.name
48
+ end
49
+ method = "#{name}#{error.method_name}"
45
50
  case error
46
51
  when ArgumentTypeError
47
52
  "[#{method}] ArgumentTypeError: expected #{format_param error.param} but given `#{inspect_(error.value)}`"
data/lib/rbs/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module RBS
4
- VERSION = "3.4.0.pre.1"
4
+ VERSION = "3.4.0"
5
5
  end
@@ -39,7 +39,7 @@ module Minitest::Test::LifecycleHooks
39
39
  # include MyMinitestPlugin
40
40
  # end
41
41
  #
42
- def before_setup: () -> nil
42
+ def before_setup: () -> void
43
43
 
44
44
  # <!--
45
45
  # rdoc-file=lib/minitest/test.rb
@@ -47,7 +47,7 @@ module Minitest::Test::LifecycleHooks
47
47
  # -->
48
48
  # Runs before every test. Use this to set up before each test run.
49
49
  #
50
- def setup: () -> nil
50
+ def setup: () -> void
51
51
 
52
52
  # <!--
53
53
  # rdoc-file=lib/minitest/test.rb
@@ -58,7 +58,7 @@ module Minitest::Test::LifecycleHooks
58
58
  #
59
59
  # See #before_setup for an example.
60
60
  #
61
- def after_setup: () -> nil
61
+ def after_setup: () -> void
62
62
 
63
63
  # <!--
64
64
  # rdoc-file=lib/minitest/test.rb
@@ -69,7 +69,7 @@ module Minitest::Test::LifecycleHooks
69
69
  #
70
70
  # See #before_setup for an example.
71
71
  #
72
- def before_teardown: () -> nil
72
+ def before_teardown: () -> void
73
73
 
74
74
  # <!--
75
75
  # rdoc-file=lib/minitest/test.rb
@@ -77,7 +77,7 @@ module Minitest::Test::LifecycleHooks
77
77
  # -->
78
78
  # Runs after every test. Use this to clean up after each test run.
79
79
  #
80
- def teardown: () -> nil
80
+ def teardown: () -> void
81
81
 
82
82
  # <!--
83
83
  # rdoc-file=lib/minitest/test.rb
@@ -88,5 +88,5 @@ module Minitest::Test::LifecycleHooks
88
88
  #
89
89
  # See #before_setup for an example.
90
90
  #
91
- def after_teardown: () -> nil
91
+ def after_teardown: () -> void
92
92
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rbs
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.4.0.pre.1
4
+ version: 3.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Soutaro Matsumoto
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-12-19 00:00:00.000000000 Z
11
+ date: 2023-12-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: abbrev
@@ -134,6 +134,7 @@ files:
134
134
  - docs/CONTRIBUTING.md
135
135
  - docs/collection.md
136
136
  - docs/data_and_struct.md
137
+ - docs/gem.md
137
138
  - docs/rbs_by_example.md
138
139
  - docs/repo.md
139
140
  - docs/sigs.md