21
RBS introduced manifest.yaml
RBS introduced manifest.yaml
RBS v2.0.0, for Ruby 3.1, has been released!
RBS v2 contains many my patches. I recently work for rbs collection
feature especially. In short, rbs collection
is "Bundler" for RBS. It installs, updates and loads gems' RBSs for rbs
, steep
and typeprof
commands.
In this article, I describe a feature of rbs collection
, it is manifest.yaml
.
manifest.yaml
is a file to describe standard libraries dependencies for RBS.
rbs collection
detects the dependencies from Gemfile.lock
.
For example, if your Gemfile
has an entry, gem 'rails'
, rbs collection
finds dependencies gems, such as activesupport
, railties
, nokogiri
and so on, from Gemfile.lock
. Then it installs RBSs from ruby/gem_rbs_collection repository.
It almost works well, but it has a problem. Gemfile.lock
doesn't have standard libraries entries often.
For example, rails
gem depends on pathname
stdlib, but the dependency doesn't appear in Gemfile.lock
. So rbs collection
couldn't find pathname dependency from Gemfile.lock
, then the user sees Could not find Pathname (RBS::NoTypeFoundError)
.
manifest.yaml
solves this problem.
manifest.yaml
is a file to describe standard libraries dependencies for RBS.
The following is the manifest.yaml
of activesupport gem.
dependencies:
- name: monitor
- name: date
- name: singleton
- name: logger
- name: mutex_m
- name: time
- name: pathname
It's simple. If Gemfile.lock
has activesupport
entry, rbs collection
finds the stdlib dependencies from the manifest.yaml
.
If you are an application developer, you don't need to write manifest.yaml
. You can add a dependency entry to rbs_collection.yaml
if your application depends on standard library.
If you are a gem author and the gem contains RBS in sig/
directory, you can put sig/manifest.yaml
.
If you'd like to contribute ruby/gem_rbs_collection, you can put gems/GEM_NAME/VERSION/manifest.yaml
. Follow the activesupport example.
Currently rbs collection
resolves stdlib dependencies, but rbs -r LIB
option doesn't resolve them unfortunately.
For instance, logger depends on monitor, but rbs -r logger
doesn't load monitor.
I'll work to fix this problem soon.
By the way, I'll change my job next year to focus on developing RBS. I'll work for both Rails apps and RBS as my job to make RBS production-ready for real Rails applications!
21