Module#attr_*
methods (#1300)Object#define_singleton_method
(#1299)String#scan
(#1297)- Removed
Gem.datadir
(#1273)
- Use fenced code block instead of indented one in .rbs files (#1312)
- Fix single use clause
:type_name
location (#1307) - Fix
InvalidOverloadMethodError
on overloading extended method (#1294) - Fix super class of
NoTypeFoundError
fromBaseError
toDefinitionError
(#1290) - Support
#detailed_message
forNonregularTypeAliasError
,CyclicTypeParameterBound
,InconsistentClassModuleAliasError
andCyclicClassAliasDefinitionError
(#1289) - Implement
rbs subtract
command (#1287) - Support
#detailed_message
forInvalidVarianceAnnotationError
,RecursiveAliasDefinitionError
,MixinClassError
andRecursiveTypeAliasError
(#1285) - Support
#detailed_message
forNoTypeError
,InheritModuleError
,NoSelfTypeFoundError
andNoMixinFoundError
(#1280) - Validate duplicate type aliases (#1279)
- Add
-e
,--type
, and--method-type
options torbs parse
(#1252)
- Convert
include
inclass << self
toextend
byprototype rb
(#1255)
- Skip loading
#gemspec
gems via RBS collection (#1319)
- Add missing implementation to support class/module alias (#1271)
- Fix
DefinitionBuilder
(#1268)
- Skip dependencies not included in
Gemfile.lock
(#1266)
- Delete
RubyVM::AbstractSyntaxTree
stub type definition (#1259)
- Ignore
set
library on loading (#1251)
Read the release note for the overview of the changes.
- Ruby 3.2 core updates (#1238, #1246, #1242)
- Ruby 3.2 stdlib updates (#1240)
- Ruby 3.2 incompatibilities (#1241)
- ripper (#1193)
RubyVM::AbstractSyntaxTree
(#1189)Array#zip
(#1232)Enumerable#zip
(#1232)Module#attr_*
(#1218, #1229)Regexp.new
(#1237)Regexp#=~
(#1195)Socket.new
(#1185)Object::name
(#1204)_ToProc#to_proc
(#1223)- Add
implicitly-returns-nil
annotations (#1226)
- Spec: https://hackmd.io/SAE7AGD6SMSJFnYiR2M5-Q?view
- Pull requests: #1219, #1220
- Spec: https://hackmd.io/pQehT1u1RfSj6lBcdgW8hg
- Pull requests: #1224, #1234, #1235
- Pull requests: #1174
Environment
cleanup (#1209, #1236, #1247)- Add "Expected one argument." to
rbs ancestors
command (#1245) - Implement
#detailed_message
forParsingError
(#1166) - Support interface in class/module for
Sorter
(#1191) - Use
-std=gnu99
instead of-std=c99
(#973) - Add
rbs_
prefix toskip
function (#1186) - Better method definition resolution for overload/mixin combination (#1199)
- Escaping for keywords is no longer necessary (#1178)
- Fix super-class location (#1172)
- Introduce new heuristics for block types (#1180)
- Install only library dependencies (#1222, #1228)
- Add local source (#854)
- Refactor collection (#1149)
- Let
#resolved_revision
return the last fetched commit (#1215)
- Update
syntax.md
(#1243) - Add link to
RBS by Example
toREADME.md
#1225 - Make
rake stdlib_test
run with single process (#1207, #1211, #1231) - Remove
steep/*
files from.gem
(#1214, #1216)
- Make
rake stdlib_test
run with single process (Backport #1207, #1211) - Remove
steep/*
files from.gem
(Backport #1214, #1216)
- Use
-std=gnu99
instead of-std=c99
(Backport #973) - Add
rbs_
prefix toskip
function (Backport #1186)
YAML.load
(#1170)
- Add the methods of the
prepend
ed module itself (#1182)
- Add
TestSkip
module to skip tests that fails in ruby CI (#1167)
- Update documents based on ruby-3.1.3 (#1160)
- Delay loading
Gemfile
for unbundled environments (#1161)
- random (#1144)
- Fix SEGV when give invalid object to
variables:
(#1153)
- Make type/method-type parser more flexible about input position (#1140)
- Raise an error if a class definition inherits a module (#1152)
- Fix SEGV when parse with invalid content (#1146)
- Remove
rubygems
fromrbs
’s manifest (#1150) - Use
untyped
instead ofany
insyntax.md
(#1147) - Fix typo and grammatical mistakes in "Generics" section of
syntax.md
(#1127) - Add a doc that describes tools related to RBS (#1125)
- Add self-type-bindings to
syntax.md
(#1123) - Add documentation for
...
insyntax.md
(#1120)
- Always skip CR explicitly (#1112)
- Use
append_cflags
for other than GCC (#1106)
See Release Note 2.7 for the highlights of this release.
- fiber (#1071)
BigDecimal
(#1053)ERB::Util
,ERB::DefMethod
(#1074)Float::Infinity
(#1095)Logger
(#1046)IO.pipe
,IO.foreach
(#1057)Module#refine
(#1064)Regexp.new
(#1059)StringIO#write
(#1065)Warning.#warn
,Kernel.#warn
(#1056)
- RDoc plugin (#1048)
- Dedupe method comments (#1103)
- Reduce object allocations for GC (#1102)
- Add
frozen_string_literal: true
(#1100) - Load dependencies on
-r
option also (#1013) - Fix DefinitionBuilder for methods aliased from module self constraints (#1099)
- Fix RBS type definitions (#1098)
- Give aliases of
.new
methods correct type (#1097) nil
versions are discouraged and will be deprecated in Rubygems 4 (#1091)- Fixes towards Rubygems 4.0 (#1090)
- Remove redundant
add
forRepository.default
(#1062) - Refactor: Use Repository in stdlib source (#1063)
- Move
bin/sort
implementation to underlib/
(#1051)
RBS 2.6 ships with rbs prototype
commands improvements and signature updates.
New minitest RBS definitions will help you to type check your tests.
- etc (#1006)
- minitest (#1009)
- date (#1033)
ENV
.ARGF
,Random::Base
(#1041)Hash#dig
(#1011)Hash#reject
(#1016)Kernel?.fail
(#1026, #1028)Rational#*
(#1012)Regexp.new
(#1040)
- Add
visibility
columns in {AttrReader,AttrAccessor,AttrWriter}#to_json (#1014) - Add support for RSpec's verifying doubles in test setup helper (#1015)
- Fix lexer to analyze escape characters (#1043)
- [rb] Support the case where the return value is
self
(#1003) - [rb] Lean to the optional side (#1021)
- [rb] Fix method commenting (#1027)
- [runtime] Fix decls of output from
Prototype::Runtime
(#1030) - [runtime] Fix class name resolution of prototype runtime (#1032)
- [rbi] Improve
Prototype::RBI
(#1018)
- Fix typo in
CONTRIBUTING.md
(#1004) - Use manifest.yaml instead of manually for validate task (#1010)
- Update re2c (#1017)
- Type check
Prototype::RB
(#1019) - Minor cleanup & fix (#1020)
- Fix type errors (#1023)
- Clarify GHA step name for rake annotate (#1024)
- Silence parser warning (#1039)
- Fix warnings (#1035)
This is a maintenance release mainly to fix errors detected in CI of ruby/ruby
.
Nothing changed related to the users of RBS gem.
- Skip failing tests on ruby/ruby CI (#1036)
- Fix warnings (#1035 except changes on
test/tools/sort_test.rb
that is not included in this release) - Fix
Regexp.new
argument (#1034) - Fix errors with OpenSSL 3 (#1029)
- Fix
OpenSSL::PKey::PKeyError: EVP_PKEY_keygen: bad ffc parameters
with OpenSSL 3 (#1005)
This is a minor release with tuple type/record type syntax updates and rbs prototype
improvements.
- You can write empty tuple type as
[]
, instead of[ ]
- You can write empty record type as
{}
prototype-rb
command with--out-dir
option generates multiple RBS files in the directory
Time
(#994)
- Fix empty tuple type syntax and allow empty record type (#1001)
- Add
name
attribute inMethodDefinition#to_json
(#997)
- Fix (
ArgumentError
) invalid byte sequence in UTF-8 (#995) - Fix broken args after parsed
decls
fromRBS::Prototype::RB
(#998) - Add batch mode to
rbs prototype
(#1000)
This is a minor release with some signature updates, prototype rb
improvement, and test fixes.
- Omit unnecessary param name on keyword arg from
prototype rb
(#974)
- Fix git unsafe repository error on ci test (#985)
- Prefer
IO::Buffer.new
for mutable buffer tests (#989) - Update steep (#990)
- Let modules have constants under
::Object
(#972)
- Fix mswin build, use
append_cflags
, add Windows 'compile only' CI (#964) - Raise
RBS::SyntaxError
fromparse_record_attributes
(#966) - Toplevel constant must have the lowest precedence (#967)
- Use default value also for
literal_to_type
(#962)
Enumerator
(#931)FalseClass
(#931)Integer
(#914)Module
(#931)NilClass
(#931)Object
(#931)Prime
(#934)TracePoint
(#941)TrueClass
(#931)#to_d
(#936)IO#wait_writable
(#943)
- Add
Resolver::ConstantResolver
andResolver::TypeNameResolver
(#938) - Fix RBS::Locator (#930)
- Trying to preserve more locations (#915)
- Add visibility modifier to method definition json (#923, #928)
- Add manifest.yaml for rbs gem (#921)
- Fix Environment type checking (#929)
- Fix memory violation in C extension (#952)
- Fix warnings in C extension (#954)
- Fix error message to tell gem name when source is not found (#927)
- Fix
bin/sort
for constants (#919) - Use actions/checkout@v3 (#944)
- Added actions ecosystem for dependabot (#946)
- Confirm RDoc is up to date (#945)
- Let
validate_type_alias
run without an error on unknown type (#912)
RBS 2.2 ships with a new syntax to specify the visibility of a method per definition bases.
class Foo
private def hello: () -> void
private attr_accessor world: String
end
It also changes the semantics of self?
method.
It defines both public singleton method and private instance method, which is equivalent to module_function
.
- Add c99 flag for compiling on Ruby 2 (#895)
- Fix incorrect URI reference in
schema/typeParam.json
(#891) - Allow scaffolding below namespace (#894)
- Let
Writer
preserve format (#900) - Reduce memory usage of
RBS::Buffer
(#907) - Do not call
#class
from#hash
to improve performance (#906) - Skip type variable validation if
unchcked
(#909)
- Add
Thread::Backtrace
andThread::Backtrace::Location
test (#896) - Test annotations (#902)
- Remove goodcheck rule for arglists section (#901)
- Remove
CharScanner
due to no longer used (#905)
RBS 2.1 is a release to deliver the types and documents of the new and updated methods of Ruby 3.1.
- Documents imported from Ruby 3.1 (#881)
- Methods/classes updated in Ruby 3.1 (#886)
- io/wait (#865)
- json (#863)
- nkf (#873)
- openssl (#866)
Dir.exists?
,FileTest#exists?
(#884)FileTest
(#880)Gem::Version#<=>
(#869)Process.clock_gettime
(#858)
- Introduce
rbs annotate
command (#881) - Make prototype rb to be aware of prepend (#861)
- Fixes incorrect "Invalid Variance" error when method type variable shadows outer type variable (#889)
RBS 2.0 ships with bounded generics, which improves the expressiveness of the language by adding a new syntax to define constraints on type parameters.
class PrettyPrint[T < _Output]
interface _Output
def <<: (String) -> void
end
attr_reader output: T
def initialize: (T output) -> void
end
This is the motivating example I found in the prettyprint library.
The #initialize
receives a object of type T
and it must have #<<
method.
This is defined with < _Output
syntax in the example.
It means T
has to be compatible with _Output
interface.
PrettyPrint[String]
is okay, but PrettyPrint[Integer]
is a type error.
See the PR for details.
RBS Collection feature is generally available on RBS 2.0. In short, it is Bundler for RBS. You can manage RBSs of standard libraries and third party gems with rbs collection
subcommand.
$ rbs collection init
created: rbs_collection.yaml
# The `install` command set up RBS files and creates `rbs_collection.lock.yaml` file
$ rbs collection install
Installing actionpack:6.0 (actionpack@ce6664cec73)
(...snip...)
Using tsort:0 (/path/to/rbs-2.0.0/stdlib/tsort/0)
It's done! 21 gems' RBSs now installed.
# Now you can use `rbs`, `typeprof` and `steep` commands with the dependencies out of the box!
$ rbs validate
$ typeprof app.rb
$ steep check
RBS 2.0 also introduces manifest.yaml
to declare the dependencies from your gems to standard libraries explicitly.
See the documentation for more information.
This version contains a bug fix, which potentially breaks the compatibility with older versions. The super class names in class definitions are now resolved in outer context. It was an incompatibility with Ruby and this PR fixed the problem.
- Add
manifest.yaml
for collection to specify stdlib dependencies (#808) - Remove experimental warning of
rbs collection
(#855) - Add the utility
#map_type
methods (#841)
RBS 1.8.0 ships with a language feature enhancement, generic type alias. You can define a type alias with type parameters now.
type list[T] = [T, list[T]] | nil # Defines a list of type T
type int_list = list[Integer] # List of Integer
type string_list = list[String] # List of String
You can find the detail in the PR.
- Generic type alias (#823)
Thread#value
(#824)
- Use
untyped
as an expectation of return value ofIO#ready?
in test (#828)
This version replaces RBS::Parser
implementation from pure Ruby code based on Racc to C extension.
It improves the RBS file parsing performance up to 5 times faster. 🚀
- There are some incompatibilities to drop obsolete syntax rules:
super
keyword andany
type are no longer supported. - re2c is used to generate lexical generator.
When you want to change the parser/lexer, change the files under ext/rbs_extension
directory and run rake compile
to compile the extension.
- io/console (#783)
ENV
-- Note that it introduces a dummy::ENVClass
class, which is not defined in Ruby. (#812)Net::HTTPRequest
(#784)#clone
(#811, #813)Kernel#BigDecimal
(#817)Tempfile.new
,Tempfile.create
(#792, #791)
- Replace
RBS::Parser
(#788, #789) - Fix unexpected
CollectionNotAvailable
withoutgems
from git source (#795) - Print deprecation warning (#801)
- Make
Parser::KEYWORDS
a hash (#804) - Use partial clone for
rbs collection
installer (#805) - Respect logger level for test/setup logger (#819, #822)
- Avoid a mixture of
Array#filter
andArray#select
(#820) - Remove leftover documentation about
super
(#807)
- Set
$XDG_CACHE_HOME
during test (#781)
This is a minor release including test fixes.
- Fix stdlib test for
Resolv::Hosts
by removing/etc/hosts
dependency (#779) - Fix bundler related test for test-bundled-gems (#778)
This release includes a preview of rbs collection
commands, which is bundler for RBS.
The command helps you manage RBS files from gem_rbs_collection or other repositories.
This feature is a preview, and any feedback is welcome!
- objspace (#763, #776)
- tempfile (#767, #775)
IO#set_encoding_by_bom
(#106)OpenSSL::PKey::EC#dh_compute_key
(#775)
- Let
bin/annotate-with-rdoc
process nested constants/classes (#766, #768) - Stop printing version mismatch message in CI (#777)
- Update Steep and fix type errors (#770, #774)
- Add dependabot configuration (#771)
- Fix Net_HTTP_test (#759)
This release includes stdlib signature updates.
- digest (#744, #757)
- io-wait (#756, #758)
Ractor
(#755)File::Stat#size?
(#754)$-i
,$0
,$PROGRAM_NAME
(#753)
This release includes feature enhancements including recursive type
definition validation, improved compatibility of global variable names, and various method type updates.
- openssl (#743)
Array
,Enumerator
,Enumerable
,Hash
,FalseClass
,Float
,Hash
,Integer
,Object
,Range
,TrueClass
(#728)Array#[]
(#732)Exception#set_backtrace
(#738)Kernel#Array
(#733)Kernel#spawn
(#748)Kernel#String
(#745, #751)URI::Generic#fragment
(#752)URI::Generic#merge
(#746)
- Add global variables signature (#749)
- Add Recursive type alias definition validation (#719)
- Generate included modules with complete name (#731)
- Fix
rbs-prototype-rb
error when multi assign with const (#740)
This release includes a minor update of resolv
library RBS and a fix of test for ruby/ruby
CI.
- resolv (#726)
This release is to fix a bug introduced by parser update in 1.3.0.
- Fix parser to accept alias names starting with
_
(#723)
This release is to fix a bug introduced by parser update in 1.3.0.
- Fix parser to accept param names starting with
_
(#721)
RBS 1.3.0 includes bug fixes of the parser and class/module definition validations.
- dbm (#718)
- net-http (#686)
- optparse (#693)
- resolv (#697)
- socket (#699)
IO
(#698)Marshal
(#684)Mutex
(#683)Array#shift
(#707)BasicObject#method_missing
(#707, #710)Kernel#caller
(#705)
- Interface names starting with lower case characters are now syntax error (#678, #720)
- Mixins of classes are rejected (#681)
- Generate prototype of
initialize
method with return typevoid
(#685) - Let
prototype runtime
generate class/module declarations in nested syntax (#700) - Fix race condition for multi-thread support (#702)
- Add new doc
docs/rbs_by_example.md
(#694)
This release includes the following minor changes:
- Fix test to run the tests in ruby repository. (#679)
- Remove unnecessary files from the gem package. (#675)
- Suppress unused variable warning (#674)
- Update documents (#672)
RBS 1.2 ships with better support for AST/token locations and Locator
utility class. The AST objects now keep the locations of tokens. The Locator
class is to translate the text position (line and column) to semantic object at the location. The class allows to find if a text position is on the class name of a class declaration.
- Hash (#631, #632, #637, #638, #639, )
- Module (#645)
- Enumerable (#647)
- Array (#648)
- Proc (#649)
- Struct (#650, #668)
- Thread (#651)
- Random (#669)
- Shellwords (#665)
- IO (#659)
- Module self type syntax update (#653)
- rubygem (#630)
Errors are now organized by RBS::BaseError
, RBS::ParsingError
, RBS::LoadingError
, and RBS::DefinitionError
.
The library users can rescue RBS related errors with RBS::BaseError
, parsing errors with RBS::ParsingError
, and other errors with RBS::LoadingError
and RBS::DefinitionErrors
.
Updating a part of environments are supported. Library users can remove declarations read from a set of files, adding new declarations, running name resolution related to the new decls, and deleting DefinitionBuilder
caches related to the changes.
See RBS::Environment#reject
, RBS::Environment#resolve_type_names
, RBS::AncestorGraph
, and RBS::DefinitionBuilder#update
.
RBS::DefinitionBuilder#build_singleton
now returns definitions containing instance
type, which had returned resolved class instance types. This is a breaking change, but we consider it a bug fix because RBS::DefinitionBuilder#build_instance
has returned instance
types and #build_singleton
has returned class
type.
- Allow trailing comma for Record and Tuple types (#606)
- Allow partial update of RBS declarations (#608, #621)
- Let errors have
TypeName
(#611) - Add
Parser::LexerError
(#615) - Performance improvement (#617, #620)
- No substitute
instance
types on#build_singleton
(#619)
- Make racc name customizable by
RACC
environment variable (#602) - Suppress warnings (#624)
- Remove needless
Gem::Version
polyfill (#622)
- Signature Updates
- Rename generic class parameters on re-open (#594)
- Make
refute_send_type
check that method call doesn't match with types in RBS (#588)
- Unbundle
rr
to run test inruby/ruby
repo (#585)
- Set up
#ancestors
and#location
ofRecursiveAncestorError
(#583)
- Signature Updates
- Kernel(#582)
- Signature Updates
- Renew test sample code (#581)
- Add description to
generate:stdlib_test
Rake task (#578) - Declare supported ruby version >= 2.6 (#548)
- Fix module self-type override (#577)
- Fix parser to support all operator symbols (#550)
- Migrate from Minitest to Test::Unit (#556)
- Fix type alias parsing (#565)
- Support end-less method definition in
prototype rb
(#561) - Support method argument forwarding in
prototype rb
(#560)
- Signature updates for
URI
,IO
,File
,Pathname
,Module
, andTime
(#529, #521, #520, #511, #517, #542, #546, #540, #538) rbs prototype runtime
generatesextend
s (#535)rbs prototype runtime
stability improvements (#533, #526)rbs prototype rb
compatibility improvements (#545)- Implement method names escape in
RBS::Writer
(#537) - Improve runtime type checker compatibility (#532, #528, #547)
- Fix
ruby2_keywords
forProc
in Ruby <2.7 (#513) - Better compatibility for record type attribute names (#525, #524)
- Let module self-types be classes (#523)
- Delete
extension
syntax (#543) - Method resolution improvements about
alias
and.new
(#522, #519, #516) - Better message for
DuplicatedMethodDefinitionError
(#539)
- Make the order of RBS load reproducible (#508)
- Signature updates for
TSort
,DBM
,Time
, andHash
(#496, #497, #499, #507) - Add singleton attribute syntax (#502, #506, #505)
- Proc types with blocks (#503)
- Add support for escape sequences in string literal types (#501)
- Fix runtime type checking of blocks with keyword args (#500)
- Fix
EnvironmentWalker#each_type_name
(#494)
- Signature updates for
YAML
,ObjectSpace
, andSingleton
(#408, #477, #482) prototype rb
improvements (#492, #487, #486, #481)- Runtime type checker improvements (#488, #489, #490)
- Update
DependencyWalker
API to receive Node objects instead ofTypeName
(#484) - Assume encoding of RBS files to be UTF-8 (#493)
- Signature updates for
Enumerable
,Hash
, andTSort
(#462, #468, #471, #472, #473, #474) - Parser error handling improvement (#463, #475)
- Hash spread syntax handling improvement with
prototype rb
(#465)
- Signature updates for
Kernel
,PStore
,Enumerable
, andArray
(#450, #443, #438, #437, #433, #432) - Add helper interfaces (#434, #428)
- Change
bool
type semantics (#456) - Support alias in
rbs prototype rb
(#457) - Runtime testing improvements (#455, #447, #444, #431)
- Fix proc type parsing (#451)
- Fix type variable parsing (#442)
- Fix test for CI of ruby/ruby (#412)
- Minor signature update for
pty
- Fix
PTY
stdlib test
This version is to improve Ruby 3 testing compatibility. Nothing changed for users.
- Signature updates for
forwardable
,struct
,set
,URI::Generic
,URI::File
, andBigDecimal
. - Define
.new
methods frominitialize
included from modules #390
- Signature update for
date/datetime
#367 - Add test double support for runtime type checker #380
- Add
rbs test
command for runtime type checking #366 - Fix runtime type checking for record types #365
- Improve EnvironmentLoader API #370
- Allow overloading from super methods #364
- Signature update for
Zlib
- Make "no type checker installed" message a debug print #363
- Print
...
for overloading method definitions #362 - Allow missing method implementation in Ruby code #359
- Runtime testing improvements #356
- Signature updates for
Enumerator
andPTY
- Fix prototype rb/rbi error handling #349
- Runtime test improvements #344, #343
- Add
...
syntax #342
- Add
DefinitionBuilder#one_instance_ancestors
andDefinitionBuilder#one_singleton_ancestors
#341 - Bug fix in ConstantTable #340
- Make
rbs validate
faster #338 - Dedup methods generated by
rbs prototype rb
#334
- Signature update for
Logger
. - Clean
Environment#inspect
. #331 - Module self type syntax update. #329
- Better validation. #328
- Parser performance improvement. #327
- Runtime type checking performance improvements with sampling #323
- Signature updates for
Mutex_m
,IO
, andEnumerable
. - Syntax update. #307
- AST command prints absolute type names with file name filtering. #312
- Improve CLI message. #309
- Signature update for
Fiber
,Encoding
, andEnumerator
. - Fix syntax error for underscore and
!
?
#304 - Improved return type inference in
rbs prototype rb
#303 - Skip anonymous modules/classes in
rbs prototype runtime
#302 - Fix
--require-relative
option inrbs prototype runtime
#299 - Add JSON schema for
rbs ast
#295
- Fix constant resolution again #289
- Fix constant resolution #288
- The first release of RBS gem.
- Version 0.1.0 is the original
rbs
gem and it is different software from RBS.