rbs 3.5.0.pre.1 → 3.5.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d531a807ca33dac823ab8abc9381ad2769607581f7f878c7e90b64f96a7df12c
4
- data.tar.gz: f063ae7209b5eded9645c0429ddba1c70104d4866252eee234b4f58dad2f0090
3
+ metadata.gz: 1b76067316b4cfcc66b0072df88be6f74b1e982c3e2c583aa81153fc1d7590cf
4
+ data.tar.gz: 1051d0012adab3eb36807bad04223e2f6aee7e242981ff12ad0f5e7bdab910d9
5
5
  SHA512:
6
- metadata.gz: 361cee4e71bb3430d5f83e48923e44f3a542336b77b81ee6aa2188d5434f14d89569d204d866c8b688fc932803bd6fd5c6ad3a1c65db99536032d63f5b882443
7
- data.tar.gz: 2c526b49e8db179a6137a2ab82d1205f11fd1b2346e630248f8cdd874d514c6647bff7cb5bfc9e224d5ea10ae3d90c2fff0cacd903b69f071b5930d3831eded3
6
+ metadata.gz: cb7c0b36f6398e989fb33cac75b76566404004c54bc395d2e320c01ec50022a6dd9161589506d2446ec71e4f64bebc983a2664acefc8b64a5bbef1832ee86191
7
+ data.tar.gz: fc53b27131a5b9d947c072b809aff22c23edadbbe211f49ce415796dc0d3f084230f6c609b1eaf1229adf4a15acce1f67aa57bc9ec0929989c9f085155f8c272
@@ -1,13 +1,21 @@
1
1
  version: 2
2
2
  updates:
3
- - package-ecosystem: "bundler"
3
+ - package-ecosystem: bundler
4
4
  directory: "/"
5
5
  schedule:
6
- interval: "daily"
7
- - package-ecosystem: "bundler"
6
+ interval: daily
7
+ open-pull-requests-limit: 3
8
+ allow:
9
+ - dependency-type: all
10
+
11
+ - package-ecosystem: bundler
8
12
  directory: "/steep"
9
13
  schedule:
10
- interval: "daily"
14
+ interval: daily
15
+ open-pull-requests-limit: 3
16
+ allow:
17
+ - dependency-type: all
18
+
11
19
  - package-ecosystem: 'github-actions'
12
20
  directory: '/'
13
21
  schedule:
@@ -0,0 +1,26 @@
1
+ name: Merge dependabot PRs automatically
2
+ on: pull_request_target
3
+
4
+ permissions:
5
+ pull-requests: write
6
+ contents: write
7
+
8
+ env:
9
+ blocker_files: rbs.gemspec Gemfile steep/Gemfile
10
+
11
+ jobs:
12
+ dependabot:
13
+ runs-on: ubuntu-latest
14
+ if: ${{ github.actor == 'dependabot[bot]' }}
15
+ steps:
16
+ - name: Checkout repository
17
+ uses: actions/checkout@v4
18
+ with:
19
+ fetch-depth: 0
20
+ - name: Abort if blocker files are changed
21
+ run: git diff --exit-code ${{ github.event.pull_request.base.sha }} ${{ github.event.pull_request.head.sha }} ${{ env.blocker_files }}
22
+ - name: Enable auto-merge for Dependabot PRs
23
+ run: gh pr merge --auto --merge "$PR_URL"
24
+ env:
25
+ PR_URL: ${{github.event.pull_request.html_url}}
26
+ GH_TOKEN: ${{secrets.DEPENDABOT_MERGE_GH_TOKEN}}
@@ -31,7 +31,9 @@ jobs:
31
31
  - ruby: "3.3"
32
32
  job: lexer compile confirm_lexer
33
33
  - ruby: "3.3"
34
- job: rubocop validate test_doc build test_generate_stdlib
34
+ job: rubocop validate test_doc build test_generate_stdlib raap
35
+ - ruby: "3.3"
36
+ job: typecheck_test
35
37
  steps:
36
38
  - uses: actions/checkout@v4
37
39
  - uses: ruby/setup-ruby@v1
@@ -64,6 +66,10 @@ jobs:
64
66
  echo "NO_MINITEST=true" >> $GITHUB_ENV
65
67
  bundle config set --local without 'minitest'
66
68
  if: ${{ contains(matrix.ruby, 'head') }}
69
+ - name: Skip installing type checkers
70
+ if: ${{ ! contains(matrix.job, 'typecheck_test') }}
71
+ run: |
72
+ bundle config set without 'typecheck_test'
67
73
  - name: bin/setup
68
74
  run: |
69
75
  bin/setup
data/CHANGELOG.md CHANGED
@@ -1,6 +1,107 @@
1
1
  # CHANGELOG
2
2
 
3
- ## master
3
+ ## 3.5.0 (2024-06-06)
4
+
5
+ ### Signature updates
6
+
7
+ * `net-http` headers ([#1750](https://github.com/ruby/rbs/pull/1750))
8
+ * `CSV.foreach` ([#1738](https://github.com/ruby/rbs/pull/1738))
9
+ * `Enumerator#initialize` ([#1801](https://github.com/ruby/rbs/pull/1801))
10
+ * `Float#divmod`, `Rational#divmod` ([#1868](https://github.com/ruby/rbs/pull/1868))
11
+ * `GC` ([#1530](https://github.com/ruby/rbs/pull/1530))
12
+ * `Integer#pow` ([#1706](https://github.com/ruby/rbs/pull/1706))
13
+ * `Kernel.rand` ([#1783](https://github.com/ruby/rbs/pull/1783))
14
+ * `Kernel#extend` ([#1769](https://github.com/ruby/rbs/pull/1769))
15
+ * `Module#include`, `Module#prepend` ([#1769](https://github.com/ruby/rbs/pull/1769))
16
+ * `Proc#parameters` ([#1819](https://github.com/ruby/rbs/pull/1819))
17
+ * `Range#step` ([#1709](https://github.com/ruby/rbs/pull/1709))
18
+ * `Regexp.union` ([#1809](https://github.com/ruby/rbs/pull/1809))
19
+ * `RubyVM::YJIT.enable` ([#1812](https://github.com/ruby/rbs/pull/1812))
20
+ * `RubyVM::YJIT`, `RubyVM::RJIT` ([#1746](https://github.com/ruby/rbs/pull/1746))
21
+ * `String#bytesplice` ([#1793](https://github.com/ruby/rbs/pull/1793))
22
+ * `String#gsub!` ([#1768](https://github.com/ruby/rbs/pull/1768))
23
+ * `Symbol#=~` ([#1704](https://github.com/ruby/rbs/pull/1704))
24
+ * `Time#initialize` ([#1771](https://github.com/ruby/rbs/pull/1771))
25
+ * `Time#zone` ([#1770](https://github.com/ruby/rbs/pull/1770))
26
+ * `Timeout::ExitException` ([#1803](https://github.com/ruby/rbs/pull/1803))
27
+ * `URI::MailTo` ([#1858](https://github.com/ruby/rbs/pull/1858))
28
+ * Update docs ([#1811](https://github.com/ruby/rbs/pull/1811), [#1699](https://github.com/ruby/rbs/pull/1699))
29
+
30
+ ### Language updates
31
+
32
+ * Fix proc type syntax ([#1807](https://github.com/ruby/rbs/pull/1807))
33
+ * Function types with untyped parameter ([#1806](https://github.com/ruby/rbs/pull/1806))
34
+ * Fix record type ([#1732](https://github.com/ruby/rbs/pull/1732))
35
+ * parser: enable record types with optional fields ([#1717](https://github.com/ruby/rbs/pull/1717))
36
+
37
+ ### Library changes
38
+
39
+ * Drop dependency on `abbrev` ([#1866](https://github.com/ruby/rbs/pull/1866))
40
+ * Fix source display ([#1832](https://github.com/ruby/rbs/pull/1832))
41
+ * Include trivia tokens to lex result ([#1831](https://github.com/ruby/rbs/pull/1831))
42
+ * Implement token list API ([#1829](https://github.com/ruby/rbs/pull/1829))
43
+ * Fix memory leak when ParsingError ([#1830](https://github.com/ruby/rbs/pull/1830))
44
+ * [rbs diff] Fix error when empty manifest.yaml ([#1762](https://github.com/ruby/rbs/pull/1762))
45
+ * Remove deprecated API since RBS v1 ([#1805](https://github.com/ruby/rbs/pull/1805))
46
+ * Use array instead of linked list for rbs location's child ([#1786](https://github.com/ruby/rbs/pull/1786))
47
+ * Fix SEGV with parse negative position ([#1790](https://github.com/ruby/rbs/pull/1790))
48
+ * Add location for attribute ([#1787](https://github.com/ruby/rbs/pull/1787))
49
+ * Always be private ([#1774](https://github.com/ruby/rbs/pull/1774))
50
+ * Prevent resource leak with type/method-type parser when reaching EOF. ([#1742](https://github.com/ruby/rbs/pull/1742))
51
+ * Allow loading RBS from different version of a gem ([#1731](https://github.com/ruby/rbs/pull/1731))
52
+ * Fix method name tag on assertion ([#1705](https://github.com/ruby/rbs/pull/1705))
53
+ * Improve interface check by method parameters ([#1698](https://github.com/ruby/rbs/pull/1698))
54
+
55
+ #### rbs prototype
56
+
57
+ * Fix prototype for ruby-3.4 ([#1760](https://github.com/ruby/rbs/pull/1760))
58
+ * Fix 3.4 `prototype rb` failure ([#1713](https://github.com/ruby/rbs/pull/1713))
59
+ * Add Numeric Node's check for parse rbs ([#1711](https://github.com/ruby/rbs/pull/1711))
60
+
61
+ #### rbs collection
62
+
63
+ * Fix RBS loading precedence ([#1720](https://github.com/ruby/rbs/pull/1720))
64
+ * Refactor Git source by using `git?` method ([#1701](https://github.com/ruby/rbs/pull/1701))
65
+
66
+ ### Miscellaneous
67
+
68
+ * Introduce RaaP for testing of signature ([#1810](https://github.com/ruby/rbs/pull/1810))
69
+ * Revise .gemspec to remove `Gemfile` and `Gemfile.lock` ([#1856](https://github.com/ruby/rbs/pull/1856))
70
+ * Add link to gem_rbs_collection to README ([#1827](https://github.com/ruby/rbs/pull/1827))
71
+ * Remove `Gemfile.lock` from the gem package ([#1823](https://github.com/ruby/rbs/pull/1823))
72
+ * Modify template to use TestHelper ([#1776](https://github.com/ruby/rbs/pull/1776))
73
+ * Should focus on `String.new` not `String#initialize`. ([#1789](https://github.com/ruby/rbs/pull/1789))
74
+ * Make the test suite compatible with `--enable-frozen-string-literal` ([#1767](https://github.com/ruby/rbs/pull/1767))
75
+ * Stop reusing `fd` ([#1752](https://github.com/ruby/rbs/pull/1752))
76
+ * Fix test failures on Ruby 3.4 ([#1734](https://github.com/ruby/rbs/pull/1734))
77
+ * Stop trace object allocations during test ([#1724](https://github.com/ruby/rbs/pull/1724))
78
+ * Fix head test fails ([#1719](https://github.com/ruby/rbs/pull/1719))
79
+
80
+ ## 3.4.4 (2024-02-08)
81
+
82
+ ### Miscellaneous
83
+
84
+ * Backport [#1752](https://github.com/ruby/rbs/pull/1752) ([#1753](https://github.com/ruby/rbs/pull/1753))
85
+
86
+ ## 3.4.3 (2024-01-25)
87
+
88
+ ### Library changes
89
+
90
+ #### rbs collection
91
+
92
+ * Backport [#1731](https://github.com/ruby/rbs/pull/1731) ([#1735](https://github.com/ruby/rbs/pull/1735))
93
+
94
+ ## 3.4.2 (2024-01-19)
95
+
96
+ ### Miscellaneous
97
+
98
+ * Backport [#1724](https://github.com/ruby/rbs/pull/1724) ([#1726](https://github.com/ruby/rbs/pull/1726))
99
+
100
+ ## 3.4.1 (2023-12-26)
101
+
102
+ ### Signature updates
103
+
104
+ * Update embedded RDoc based on ruby-3.3.0 (Backport #1699) ([#1700](https://github.com/ruby/rbs/pull/1700))
4
105
 
5
106
  ## 3.4.0 (2023-12-21)
6
107
 
data/README.md CHANGED
@@ -69,7 +69,7 @@ gem "rbs"
69
69
 
70
70
  The gem ships with the `rbs` command line tool to demonstrate what it can do and help develop RBS.
71
71
 
72
- ```bash
72
+ ```console
73
73
  $ rbs version
74
74
  $ rbs list
75
75
  $ rbs ancestors ::Object
@@ -98,7 +98,7 @@ end
98
98
 
99
99
  Running prototype on the above will automatically generate
100
100
 
101
- ```
101
+ ```console
102
102
  $ rbs prototype rb person.rb
103
103
  class Person
104
104
  @name: untyped
@@ -190,6 +190,7 @@ Here is a list of some places you can talk with active maintainers.
190
190
 
191
191
  - [Ruby Discord Server (invite link)](https://discord.gg/ad2acQFtkh) -- We have `rbs` channel in Ruby Discord server.
192
192
  - [ruby-jp Slack Workspace (in Japanese)](https://ruby-jp.github.io/) -- We have `types` channel in ruby-jp slack workspace.
193
+ - [gem_rbs_collection](https://github.com/ruby/gem_rbs_collection) -- We have a repository of third-party RBS type definitions, for the case your dependency doesn't ship with RBS files.
193
194
 
194
195
  ## Development
195
196
 
data/Rakefile CHANGED
@@ -19,7 +19,7 @@ Rake::TestTask.new(:test => :compile) do |t|
19
19
  end
20
20
  end
21
21
 
22
- multitask :default => [:test, :stdlib_test, :rubocop, :validate, :test_doc]
22
+ multitask :default => [:test, :stdlib_test, :typecheck_test, :rubocop, :validate, :test_doc]
23
23
 
24
24
  task :lexer do
25
25
  sh "re2c -W --no-generation-date -o ext/rbs_extension/lexer.c ext/rbs_extension/lexer.re"
@@ -92,6 +92,23 @@ task :stdlib_test => :compile do
92
92
  sh "#{ruby} -Ilib #{bin}/test_runner.rb test/stdlib/Encoding_test.rb"
93
93
  end
94
94
 
95
+ task :typecheck_test => :compile do
96
+ FileList["test/typecheck/*"].each do |test|
97
+ Dir.chdir(test) do
98
+ expectations = File.join(test, "steep_expectations.yml")
99
+ if File.exist?(expectations)
100
+ sh "steep check --with_expectations"
101
+ else
102
+ sh "steep check"
103
+ end
104
+ end
105
+ end
106
+ end
107
+
108
+ task :raap => :compile do
109
+ sh %q[cat test/raap.txt | egrep -v '^#|^$' | xargs bundle exec raap]
110
+ end
111
+
95
112
  task :rubocop do
96
113
  sh "rubocop --parallel"
97
114
  end
data/Steepfile CHANGED
@@ -8,7 +8,7 @@ target :lib do
8
8
  # "lib/rbs/test.rb"
9
9
  )
10
10
 
11
- library "pathname", "json", "logger", "monitor", "tsort", "uri", 'dbm', 'pstore', 'singleton', 'shellwords', 'fileutils', 'find', 'digest', 'abbrev', 'prettyprint', 'yaml', "psych", "securerandom"
11
+ library "pathname", "json", "logger", "monitor", "tsort", "uri", 'dbm', 'pstore', 'singleton', 'shellwords', 'fileutils', 'find', 'digest', 'prettyprint', 'yaml', "psych", "securerandom"
12
12
  signature "stdlib/strscan/0/"
13
13
  signature "stdlib/optparse/0/"
14
14
  signature "stdlib/rdoc/0/"
data/core/float.rbs CHANGED
@@ -442,7 +442,8 @@ class Float < Numeric
442
442
  # 13.0.divmod(4.0) # => [3, 1.0]
443
443
  # 13.0.divmod(Rational(4, 1)) # => [3, 1.0]
444
444
  #
445
- def divmod: (Numeric) -> [ Numeric, Numeric ]
445
+ def divmod: (Integer | Float | Rational) -> [ Integer, Float ]
446
+ | (Numeric) -> [ Numeric, Numeric ]
446
447
 
447
448
  def dup: () -> self
448
449
 
data/core/integer.rbs CHANGED
@@ -766,7 +766,8 @@ class Integer < Numeric
766
766
  # 13.divmod(Rational(4, 1)) # => [3, (1/1)]
767
767
  #
768
768
  def divmod: (Integer) -> [ Integer, Integer ]
769
- | (Float) -> [ Float, Float ]
769
+ | (Float) -> [ Integer, Float ]
770
+ | (Rational) -> [ Integer, Rational ]
770
771
  | (Numeric) -> [ Numeric, Numeric ]
771
772
 
772
773
  # <!--
data/core/proc.rbs CHANGED
@@ -602,7 +602,7 @@ class Proc < Object
602
602
  # prc = lambda{|x, y=42, *other|}
603
603
  # prc.parameters(lambda: false) #=> [[:opt, :x], [:opt, :y], [:rest, :other]]
604
604
  #
605
- def parameters: (lambda: boolish) -> ::Array[[ Symbol, Symbol ]]
605
+ def parameters: (?lambda: boolish) -> ::Array[[ Symbol, Symbol ]]
606
606
 
607
607
  # <!--
608
608
  # rdoc-file=proc.c
data/core/rational.rbs CHANGED
@@ -245,7 +245,8 @@ class Rational < Numeric
245
245
 
246
246
  def div: (Numeric) -> Integer
247
247
 
248
- def divmod: (Numeric) -> [ Numeric, Numeric ]
248
+ def divmod: (Integer | Float | Rational) -> [ Integer, Rational ]
249
+ | (Numeric) -> [ Numeric, Numeric ]
249
250
 
250
251
  def dup: () -> self
251
252
 
data/core/regexp.rbs CHANGED
@@ -1544,8 +1544,8 @@ class Regexp
1544
1544
  #
1545
1545
  # If any regexp pattern contains captures, the behavior is unspecified.
1546
1546
  #
1547
- def self.union: (*_ToRegexp | string patterns) -> Regexp
1548
- | (array[_ToRegexp | string] patterns) -> Regexp
1547
+ def self.union: (*Regexp | _ToRegexp | string patterns) -> Regexp
1548
+ | (array[Regexp | _ToRegexp | string] patterns) -> Regexp
1549
1549
  | (Symbol | [Symbol] symbol_pattern) -> Regexp
1550
1550
 
1551
1551
  # <!--
data/core/ruby_vm.rbs CHANGED
@@ -309,9 +309,13 @@ module RubyVM::YJIT
309
309
  # rdoc-file=yjit.rb
310
310
  # - enable(stats: false)
311
311
  # -->
312
- # Enable YJIT compilation.
312
+ # Enable YJIT compilation. `stats` option decides whether to enable YJIT stats
313
+ # or not.
314
+ # * `false`: Disable stats.
315
+ # * `true`: Enable stats. Print stats at exit.
316
+ # * `:quiet`: Enable stats. Do not print stats at exit.
313
317
  #
314
- def self.enable: () -> void
318
+ def self.enable: (?stats: false | true | :quiet) -> void
315
319
 
316
320
  # <!--
317
321
  # rdoc-file=yjit.rb
@@ -482,7 +482,7 @@ module Gem
482
482
  # rdoc-file=lib/rubygems.rb
483
483
  # - find_unresolved_default_spec(path)
484
484
  # -->
485
- # Find a Gem::Specification of default gem from `path`
485
+ # Find an unresolved Gem::Specification of default gem from `path`
486
486
  #
487
487
  def self.find_unresolved_default_spec: (String path) -> Specification?
488
488
 
data/core/set.rbs CHANGED
@@ -415,7 +415,7 @@ class Set[unchecked out A]
415
415
  # Equivalent to Set#delete_if, but returns nil if no changes were
416
416
  # made. Returns an enumerator if no block is given.
417
417
  #
418
- def reject!: () { (A) -> untyped } -> self
418
+ def reject!: () { (A) -> untyped } -> self?
419
419
 
420
420
  # <!--
421
421
  # rdoc-file=lib/set.rb
@@ -437,7 +437,7 @@ class Set[unchecked out A]
437
437
  # Set[1, 2, 3].disjoint? [3, 4] #=> false
438
438
  # Set[1, 2, 3].disjoint? 4..5 #=> true
439
439
  #
440
- def disjoint?: (_Each[A]) -> bool
440
+ def disjoint?: (Set[A] | Enumerable[A]) -> bool
441
441
 
442
442
  # <!--
443
443
  # rdoc-file=lib/set.rb
@@ -458,8 +458,8 @@ class Set[unchecked out A]
458
458
  #
459
459
  # Returns an enumerator if no block is given.
460
460
  #
461
- def divide: () { (A, A) -> untyped } -> Set[self]
462
- | () { (A) -> untyped } -> Set[self]
461
+ def divide: () { (A, A) -> Hash::_Key } -> Set[self]
462
+ | () { (A) -> Hash::_Key } -> Set[self]
463
463
 
464
464
  # <!--
465
465
  # rdoc-file=lib/set.rb
@@ -500,7 +500,7 @@ class Set[unchecked out A]
500
500
  # Set[1, 2, 3].intersect? 4..5 #=> false
501
501
  # Set[1, 2, 3].intersect? [3, 4] #=> true
502
502
  #
503
- def intersect?: (_Each[A]) -> bool
503
+ def intersect?: (Set[A] | Enumerable[A]) -> bool
504
504
 
505
505
  # <!--
506
506
  # rdoc-file=lib/set.rb
@@ -534,7 +534,7 @@ class Set[unchecked out A]
534
534
  # Merges the elements of the given enumerable objects to the set and
535
535
  # returns self.
536
536
  #
537
- def merge: (_Each[A]) -> self
537
+ def merge: (*_Each[A]) -> self
538
538
 
539
539
  # <!--
540
540
  # rdoc-file=lib/set.rb
@@ -544,7 +544,13 @@ class Set[unchecked out A]
544
544
  #
545
545
  def subset?: (self) -> bool
546
546
 
547
- def proper_subst?: (self) -> bool
547
+ # <!--
548
+ # rdoc-file=lib/set.rb
549
+ # - proper_subset?(set)
550
+ # -->
551
+ # Returns true if the set is a proper subset of the given set.
552
+ #
553
+ def proper_subset?: (self) -> bool
548
554
 
549
555
  # <!--
550
556
  # rdoc-file=lib/set.rb
data/docs/gem.md CHANGED
@@ -31,7 +31,6 @@ Assume you have three RBS files in your gem package:
31
31
 
32
32
  ```yaml
33
33
  dependencies:
34
- - name: abbrev
35
34
  - name: json
36
35
  - name: logger
37
36
  - name: optparse