ruby / gem_rbs_collection Goto Github PK
View Code? Open in Web Editor NEWA collection of RBS for gems.
License: MIT License
A collection of RBS for gems.
License: MIT License
How to define default_timezone
?
ActiveRecord::Base.default_timezone = :local
this gets an error below;
Type `singleton(::ActiveRecord::Base)` does not have method `default_timezone=`(Ruby::NoMethod)
みんなさんこんにちは。
アレクサンダーです。
日本語RBSを勉強してる。
I installed rbs
, rbs collection
, added activemodel
to rbs_collection.yaml
Then, I created type for controller concern module like this:
module EventScoped
extend ActiveSupport::Concern
...
def respond_with_errors: (ActiveModel::Errors errors) -> void
...
end
However I'm getting error:
app/controllers/concerns/event_scoped.rbs:12:28: [error] Cannot find type `ActiveModel::Errors`
│ Diagnostic ID: RBS::UnknownTypeName
│
└ def respond_with_errors: (ActiveModel::Errors errors) -> void
~~~~~~~~~~~~~~~~~~~
I see ActiveModel::Errors
defined in activemodel/6.0/activemodel-generated.rbs
But do not understand why steep
do not see this definition.
Could you please help me make it work?
I submodule included these as suggested in the README.md
, but I'm getting a bunch of errors that I didn't expect.
My project uses ActiveSupport 6.1.3.2
target :lib do
repo_path "vendor/rbs/gem_rbs_collection/gems"
signature "sig"
check "lib" # Directory name
ignore "lib/main.rb"
ignore "vendor/**/*.rb"
library "set"
library "time"
library "json"
library "redis"
library "activesupport"
end
bundle exec steep check
# Type checking files:
.................F....................................................................
vendor/rbs/gem_rbs_collection/gems/activesupport/6.0.3.2/activesupport-generated.rbs:1786:4: [error] Cannot find type `Monitor`
│ Diagnostic ID: RBS::UnknownTypeName
│
└ class LoadInterlockAwareMonitor < Monitor
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
vendor/rbs/gem_rbs_collection/gems/activesupport/6.0.3.2/activesupport-generated.rbs:1805:6: [error] Cannot find type `MonitorMixin`
│ Diagnostic ID: RBS::UnknownTypeName
│
└ include MonitorMixin
~~~~~~~~~~~~~~~~~~~~
vendor/rbs/gem_rbs_collection/gems/activesupport/6.0.3.2/activesupport-generated.rbs:7133:4: [error] Cannot find type `Singleton`
│ Diagnostic ID: RBS::UnknownTypeName
│
└ include Singleton
~~~~~~~~~~~~~~~~~
vendor/rbs/gem_rbs_collection/gems/activesupport/6.0.3.2/activesupport-generated.rbs:8888:8: [error] Cannot find type `::Logger::Severity`
│ Diagnostic ID: RBS::UnknownTypeName
│
└ include ::Logger::Severity
~~~~~~~~~~~~~~~~~~~~~~~~~~
vendor/rbs/gem_rbs_collection/gems/activesupport/6.0.3.2/activesupport-generated.rbs:9016:2: [error] Cannot find type `::Logger`
│ Diagnostic ID: RBS::UnknownTypeName
│
└ class Logger < ::Logger
~~~~~~~~~~~~~~~~~~~~~~~
vendor/rbs/gem_rbs_collection/gems/activesupport/6.0.3.2/activesupport-generated.rbs:9031:4: [error] Cannot find type `::Logger::Formatter`
│ Diagnostic ID: RBS::UnknownTypeName
│
└ class SimpleFormatter < ::Logger::Formatter
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
vendor/rbs/gem_rbs_collection/gems/activesupport/6.0.3.2/activesupport-generated.rbs:9697:6: [error] Cannot find type `Mutex_m`
│ Diagnostic ID: RBS::UnknownTypeName
│
└ include Mutex_m
~~~~~~~~~~~~~~~
Detected 7 problems from 1 file
When calling the #render
method from a helper in a Rails app, for example:
module ApplicationHelper
def render_partial(name, options)
render(partial: name, **options)
end
end
the current type definitions throw an error when validating in Steep due to an incorrect signature:
rbs:
module ApplicationHelper : ActionView::Helpers
def render_partial: (String name, Hash[Symbol, untyped] options) -> String
end
steep output:
[error] The method cannot be called without a block
│ Diagnostic ID: Ruby::RequiredBlockMissing
│
└ render(
~~~~~~
This specific one comes from ActionView::Helpers::RenderingHelper#render
, which is defined on https://github.com/ruby/gem_rbs_collection/blob/main/gems/actionview/6.0/actionview-generated.rbs#L6603
def render: (?::Hash[untyped, untyped] options, ?::Hash[untyped, untyped] locals) { () -> untyped } -> untyped
The patch to fix it is to make the block optional, ie ?{ () -> untyped }
I'm happy to make a PR to address, but not sure if you would prefer to update the generated files or the patch.
I propose adding an initializer for gem RBS. It generates the boilerplate of gem RBS under gems/
directory. It makes contributions easier (and I really want it!).
For example, I imagine an interactive command.
$ bin/new_gem GEM_NAME
Gem version you want to add (MAJOR.MINOR is recommended. e.g. 4.2):
> 4.2
GitHub Repository (default: skip adding git submodule):
> https://github.com/USER/REPO.git
# Create directory gems/GEM_NAME/4.2
# Create file gems/GEM_NAME/4.2/GEM_NAME.rbs
# Create directory gems/GEM_NAME/4.2/_test/
# Create file gems/GEM_NAME/4.2/_test/Steepfile
# Runs `git submodule add https://github.com/USER/REPO.git gems/GEM_NAME/4.2/_src
# Print a message for the next steps, such as "Generate a prototype with rbs prototype or typeprof command!" etc
gem's RBS often requires manifest.yaml
, but there is no easy way to verify the correctness of this file.
We can use rbs collection install
to install dependent RBSs and run rbs validate
. However, this method is laborious.
It is easy to check the format of YAML.
I think it is possible to check if it is the name of stdlib from rbs.
When we run rbs validate
and steep check
and steep stats
in _scripts/test
, we load manifest.yaml and add it to the dependencies.
This should cause the test to fail if missing.
This check is difficult .......
bin/check-manifest-yaml.rb
and check the structure of the yaml file, etc.bin/init_new_gem
and existing test code.
bin/check-manifest-yaml.rb
in _scripts/test
manifest.yaml
when rbs validate
in _scripts/test
.manifest.yaml
in Steepfile
Hello,
Trying to set this up here on a project using ActiveRecord.
class Event < ActiveRecord::Base
end
with the following type definition
class Event < ActiveRecord::Base
attr_accessor email: String
end
if I try to use
Event.find_by(id: 1)
I get the following error message
Type `singleton(::Event)` does not have method `find_by`
My Steepfile is as follows
target :app do
signature 'app/**/*.rbs'
check 'main.rb'
check 'app'
repo_path 'vendor/rbs/gem_rbs_collection/gems'
ignore "vendor/**/*.rb"
library 'pathname'
library 'logger'
library 'mutex_m'
library 'date'
library 'monitor'
library 'singleton'
library 'tsort'
library 'activesupport'
library 'actionpack'
library 'activejob'
library 'activemodel'
library 'actionview'
library 'activerecord'
library 'railties'
end
activerecord/6.1/activerecord-generated.rbs
and activerecord/6.1/activerecord.rbs
are symlinks, so they're cannot be installed on windows.
On windows, symlinks aren't resolved, so the rbs are just file of ../6.0/activerecord-generated.rbs
(or ../6.0/activerecord.rbs
).
(Maybe I should post the issue to ruby/rbs?)
I found the following inconsistencies in the aws SDK signatures, which are done via a generator:
Those parameters can also be a string (it seems that Aws::S3::Types::body
and the same variant in SQS should have been handling that instead, when defined as. ::IO | String
).
send_message
receives two hashes as parameters, "params" and "options". The RBS signature uses kwargs and mixes parameters from each. Ideally it should be using RBS records for each (although it's probably not possible because of this).
Potentially more are?
Gemfile
source "https://rubygems.org"
gem "dotenv", "2.7.6"
gem "activesupport", "7.0.0"
gem "sinatra", "2.1.0"
gem "sinatra-activerecord", "2.0.25"
rbs validates
gets error when I use
gem "sinatra-activerecord", "2.0.25"
command
bundle
rbs collection init
rbs collection install
rbs validate
error
Validating class/module definition: `::ActiveRecord::Generators::ApplicationRecordGenerator`...
/Users/fumi/.rbenv/versions/3.1.0/lib/ruby/gems/3.1.0/gems/rbs-2.0.0/lib/rbs/errors.rb:149:in `check!': .gem_rbs_collection/activerecord/6.1/activerecord-generated.rbs:24958:4...24965:7: Could not find super class: ::Rails::Generators::Base (RBS::NoSuperclassFoundError)
from /Users/fumi/.rbenv/versions/3.1.0/lib/ruby/gems/3.1.0/gems/rbs-2.0.0/lib/rbs/definition_builder/ancestor_builder.rb:211:in `one_instance_ancestors'
from /Users/fumi/.rbenv/versions/3.1.0/lib/ruby/gems/3.1.0/gems/rbs-2.0.0/lib/rbs/definition_builder/ancestor_builder.rb:397:in `instance_ancestors'
from /Users/fumi/.rbenv/versions/3.1.0/lib/ruby/gems/3.1.0/gems/rbs-2.0.0/lib/rbs/definition_builder.rb:142:in `block in build_instance'
from /Users/fumi/.rbenv/versions/3.1.0/lib/ruby/gems/3.1.0/gems/rbs-2.0.0/lib/rbs/definition_builder.rb:794:in `try_cache'
from /Users/fumi/.rbenv/versions/3.1.0/lib/ruby/gems/3.1.0/gems/rbs-2.0.0/lib/rbs/definition_builder.rb:136:in `build_instance'
from /Users/fumi/.rbenv/versions/3.1.0/lib/ruby/gems/3.1.0/gems/rbs-2.0.0/lib/rbs/cli.rb:435:in `block in run_validate'
from /Users/fumi/.rbenv/versions/3.1.0/lib/ruby/gems/3.1.0/gems/rbs-2.0.0/lib/rbs/cli.rb:433:in `each'
from /Users/fumi/.rbenv/versions/3.1.0/lib/ruby/gems/3.1.0/gems/rbs-2.0.0/lib/rbs/cli.rb:433:in `run_validate'
from /Users/fumi/.rbenv/versions/3.1.0/lib/ruby/gems/3.1.0/gems/rbs-2.0.0/lib/rbs/cli.rb:125:in `run'
from /Users/fumi/.rbenv/versions/3.1.0/lib/ruby/gems/3.1.0/gems/rbs-2.0.0/exe/rbs:7:in `<top (required)>'
from /Users/fumi/.rbenv/versions/3.1.0/bin/rbs:25:in `load'
from /Users/fumi/.rbenv/versions/3.1.0/bin/rbs:25:in `<main>'
num = 1000.to_s(:delimited)
This line gets error below;
::Hash[::Symbol, ::String]
Cannot find compatible overloading of method `to_s` of type `::Integer`
Method types:
def to_s: () -> ::String
| (2) -> ::String
| (3) -> ::String
| (4) -> ::String
| (5) -> ::String
| (6) -> ::String
| (7) -> ::String
| (8) -> ::String
| (9) -> ::String
| (10) -> ::String
| (11) -> ::String
| (12) -> ::String
| (13) -> ::String
| (14) -> ::String
| (15) -> ::String
| (16) -> ::String
| (17) -> ::String
| (18) -> ::String
| (19) -> ::String
| (20) -> ::String
| (21) -> ::String
| (22) -> ::String
| (23) -> ::String
| (24) -> ::String
| (25) -> ::String
| (26) -> ::String
| (27) -> ::String
| (28) -> ::String
| (29) -> ::String
| (30) -> ::String
| (31) -> ::String
| (32) -> ::String
| (33) -> ::String
| (34) -> ::String
| (35) -> ::String
| (36) -> ::String
| (::int) -> ::String(Ruby::UnresolvedOverloading)
After updating to RBS 1.3.1, I see the following syntax errors from the generated actionpack signatures when running steep check
. Output below:
bundle exec steep check
# Type checking files:
#<RBS::Parser::SyntaxError: parse error on value: #<RBS::Parser::LocatedValue:0x00007f8bd14dd5f0 @location=#<RBS::Location:5240 @buffer=/Users/john/Documents/GitHub/repo/gem_rbs/gems/actionpack/6.0/actionpack-generated.rbs, @pos=210321...210335, source='_cache_control', start_line=5751, start_column=10>, @value="_cache_control"> (tUNDERSCOREIDENT)>
parser.y:1757:in `on_error'
(eval):3:in `_racc_do_parse_c'
(eval):3:in `do_parse'
parser.y:1458:in `parse_signature'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/rbs-1.3.1/lib/rbs/environment_loader.rb:127:in `block (2 levels) in each_decl'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/rbs-1.3.1/lib/rbs/environment_loader.rb:97:in `each_file'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/rbs-1.3.1/lib/rbs/environment_loader.rb:110:in `block in each_file'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/rbs-1.3.1/lib/rbs/environment_loader.rb:109:in `each'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/rbs-1.3.1/lib/rbs/environment_loader.rb:109:in `each_file'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/rbs-1.3.1/lib/rbs/environment_loader.rb:121:in `block in each_decl'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/rbs-1.3.1/lib/rbs/environment_loader.rb:84:in `block in each_dir'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/rbs-1.3.1/lib/rbs/environment_loader.rb:75:in `each'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/rbs-1.3.1/lib/rbs/environment_loader.rb:75:in `each_dir'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/rbs-1.3.1/lib/rbs/environment_loader.rb:118:in `each_decl'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/rbs-1.3.1/lib/rbs/environment_loader.rb:62:in `load'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/rbs-1.3.1/lib/rbs/environment.rb:129:in `block in from_loader'
<internal:kernel>:90:in `tap'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/rbs-1.3.1/lib/rbs/environment.rb:128:in `from_loader'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/steep-0.44.1/lib/steep/services/signature_service.rb:70:in `load_from'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/steep-0.44.1/lib/steep/services/type_check_service.rb:95:in `block in initialize'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/steep-0.44.1/lib/steep/services/type_check_service.rb:93:in `each'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/steep-0.44.1/lib/steep/services/type_check_service.rb:93:in `with_object'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/steep-0.44.1/lib/steep/services/type_check_service.rb:93:in `initialize'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/steep-0.44.1/lib/steep/server/type_check_worker.rb:46:in `new'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/steep-0.44.1/lib/steep/server/type_check_worker.rb:46:in `initialize'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/steep-0.44.1/lib/steep/drivers/worker.rb:33:in `new'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/steep-0.44.1/lib/steep/drivers/worker.rb:33:in `block in run'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/activesupport-6.1.4/lib/active_support/tagged_logging.rb:99:in `block in tagged'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/activesupport-6.1.4/lib/active_support/tagged_logging.rb:37:in `tagged'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/activesupport-6.1.4/lib/active_support/tagged_logging.rb:99:in `tagged'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/steep-0.44.1/lib/steep/drivers/worker.rb:24:in `run'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/steep-0.44.1/lib/steep/cli.rb:213:in `process_worker'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/steep-0.44.1/lib/steep/cli.rb:52:in `run'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/steep-0.44.1/exe/steep:11:in `<top (required)>'
/Users/john/.rbenv/versions/3.0.2/bin/steep:23:in `load'
/Users/john/.rbenv/versions/3.0.2/bin/steep:23:in `<main>'
#<RBS::Parser::SyntaxError: parse error on value: #<RBS::Parser::LocatedValue:0x00007faa04404a10 @location=#<RBS::Location:5240 @buffer=/Users/john/Documents/GitHub/repo/gem_rbs/gems/actionpack/6.0/actionpack-generated.rbs, @pos=210321...210335, source='_cache_control', start_line=5751, start_column=10>, @value="_cache_control"> (tUNDERSCOREIDENT)>
parser.y:1757:in `on_error'
(eval):3:in `_racc_do_parse_c'
(eval):3:in `do_parse'
parser.y:1458:in `parse_signature'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/rbs-1.3.1/lib/rbs/environment_loader.rb:127:in `block (2 levels) in each_decl'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/rbs-1.3.1/lib/rbs/environment_loader.rb:97:in `each_file'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/rbs-1.3.1/lib/rbs/environment_loader.rb:110:in `block in each_file'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/rbs-1.3.1/lib/rbs/environment_loader.rb:109:in `each'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/rbs-1.3.1/lib/rbs/environment_loader.rb:109:in `each_file'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/rbs-1.3.1/lib/rbs/environment_loader.rb:121:in `block in each_decl'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/rbs-1.3.1/lib/rbs/environment_loader.rb:84:in `block in each_dir'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/rbs-1.3.1/lib/rbs/environment_loader.rb:75:in `each'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/rbs-1.3.1/lib/rbs/environment_loader.rb:75:in `each_dir'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/rbs-1.3.1/lib/rbs/environment_loader.rb:118:in `each_decl'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/rbs-1.3.1/lib/rbs/environment_loader.rb:62:in `load'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/rbs-1.3.1/lib/rbs/environment.rb:129:in `block in from_loader'
<internal:kernel>:90:in `tap'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/rbs-1.3.1/lib/rbs/environment.rb:128:in `from_loader'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/steep-0.44.1/lib/steep/services/signature_service.rb:70:in `load_from'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/steep-0.44.1/lib/steep/services/type_check_service.rb:95:in `block in initialize'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/steep-0.44.1/lib/steep/services/type_check_service.rb:93:in `each'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/steep-0.44.1/lib/steep/services/type_check_service.rb:93:in `with_object'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/steep-0.44.1/lib/steep/services/type_check_service.rb:93:in `initialize'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/steep-0.44.1/lib/steep/server/type_check_worker.rb:46:in `new'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/steep-0.44.1/lib/steep/server/type_check_worker.rb:46:in `initialize'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/steep-0.44.1/lib/steep/drivers/worker.rb:33:in `new'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/steep-0.44.1/lib/steep/drivers/worker.rb:33:in `block in run'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/activesupport-6.1.4/lib/active_support/tagged_logging.rb:99:in `block in tagged'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/activesupport-6.1.4/lib/active_support/tagged_logging.rb:37:in `tagged'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/activesupport-6.1.4/lib/active_support/tagged_logging.rb:99:in `tagged'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/steep-0.44.1/lib/steep/drivers/worker.rb:24:in `run'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/steep-0.44.1/lib/steep/cli.rb:213:in `process_worker'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/steep-0.44.1/lib/steep/cli.rb:52:in `run'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/steep-0.44.1/exe/steep:11:in `<top (required)>'
/Users/john/.rbenv/versions/3.0.2/bin/steep:23:in `load'
/Users/john/.rbenv/versions/3.0.2/bin/steep:23:in `<main>'
#<RBS::Parser::SyntaxError: parse error on value: #<RBS::Parser::LocatedValue:0x00007f8ecb38ddd8 @location=#<RBS::Location:5240 @buffer=/Users/john/Documents/GitHub/repo/gem_rbs/gems/actionpack/6.0/actionpack-generated.rbs, @pos=210321...210335, source='_cache_control', start_line=5751, start_column=10>, @value="_cache_control"> (tUNDERSCOREIDENT)>
parser.y:1757:in `on_error'
(eval):3:in `_racc_do_parse_c'
(eval):3:in `do_parse'
parser.y:1458:in `parse_signature'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/rbs-1.3.1/lib/rbs/environment_loader.rb:127:in `block (2 levels) in each_decl'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/rbs-1.3.1/lib/rbs/environment_loader.rb:97:in `each_file'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/rbs-1.3.1/lib/rbs/environment_loader.rb:110:in `block in each_file'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/rbs-1.3.1/lib/rbs/environment_loader.rb:109:in `each'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/rbs-1.3.1/lib/rbs/environment_loader.rb:109:in `each_file'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/rbs-1.3.1/lib/rbs/environment_loader.rb:121:in `block in each_decl'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/rbs-1.3.1/lib/rbs/environment_loader.rb:84:in `block in each_dir'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/rbs-1.3.1/lib/rbs/environment_loader.rb:75:in `each'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/rbs-1.3.1/lib/rbs/environment_loader.rb:75:in `each_dir'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/rbs-1.3.1/lib/rbs/environment_loader.rb:118:in `each_decl'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/rbs-1.3.1/lib/rbs/environment_loader.rb:62:in `load'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/rbs-1.3.1/lib/rbs/environment.rb:129:in `block in from_loader'
<internal:kernel>:90:in `tap'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/rbs-1.3.1/lib/rbs/environment.rb:128:in `from_loader'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/steep-0.44.1/lib/steep/services/signature_service.rb:70:in `load_from'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/steep-0.44.1/lib/steep/services/type_check_service.rb:95:in `block in initialize'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/steep-0.44.1/lib/steep/services/type_check_service.rb:93:in `each'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/steep-0.44.1/lib/steep/services/type_check_service.rb:93:in `with_object'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/steep-0.44.1/lib/steep/services/type_check_service.rb:93:in `initialize'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/steep-0.44.1/lib/steep/server/type_check_worker.rb:46:in `new'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/steep-0.44.1/lib/steep/server/type_check_worker.rb:46:in `initialize'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/steep-0.44.1/lib/steep/drivers/worker.rb:33:in `new'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/steep-0.44.1/lib/steep/drivers/worker.rb:33:in `block in run'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/activesupport-6.1.4/lib/active_support/tagged_logging.rb:99:in `block in tagged'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/activesupport-6.1.4/lib/active_support/tagged_logging.rb:37:in `tagged'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/activesupport-6.1.4/lib/active_support/tagged_logging.rb:99:in `tagged'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/steep-0.44.1/lib/steep/drivers/worker.rb:24:in `run'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/steep-0.44.1/lib/steep/cli.rb:213:in `process_worker'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/steep-0.44.1/lib/steep/cli.rb:52:in `run'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/steep-0.44.1/exe/steep:11:in `<top (required)>'
/Users/john/.rbenv/versions/3.0.2/bin/steep:23:in `load'
/Users/john/.rbenv/versions/3.0.2/bin/steep:23:in `<main>'
#<RBS::Parser::SyntaxError: parse error on value: #<RBS::Parser::LocatedValue:0x00007fd0904039f0 @location=#<RBS::Location:5240 @buffer=/Users/john/Documents/GitHub/repo/gem_rbs/gems/actionpack/6.0/actionpack-generated.rbs, @pos=210321...210335, source='_cache_control', start_line=5751, start_column=10>, @value="_cache_control"> (tUNDERSCOREIDENT)>
parser.y:1757:in `on_error'
(eval):3:in `_racc_do_parse_c'
(eval):3:in `do_parse'
parser.y:1458:in `parse_signature'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/rbs-1.3.1/lib/rbs/environment_loader.rb:127:in `block (2 levels) in each_decl'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/rbs-1.3.1/lib/rbs/environment_loader.rb:97:in `each_file'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/rbs-1.3.1/lib/rbs/environment_loader.rb:110:in `block in each_file'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/rbs-1.3.1/lib/rbs/environment_loader.rb:109:in `each'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/rbs-1.3.1/lib/rbs/environment_loader.rb:109:in `each_file'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/rbs-1.3.1/lib/rbs/environment_loader.rb:121:in `block in each_decl'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/rbs-1.3.1/lib/rbs/environment_loader.rb:84:in `block in each_dir'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/rbs-1.3.1/lib/rbs/environment_loader.rb:75:in `each'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/rbs-1.3.1/lib/rbs/environment_loader.rb:75:in `each_dir'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/rbs-1.3.1/lib/rbs/environment_loader.rb:118:in `each_decl'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/rbs-1.3.1/lib/rbs/environment_loader.rb:62:in `load'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/rbs-1.3.1/lib/rbs/environment.rb:129:in `block in from_loader'
<internal:kernel>:90:in `tap'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/rbs-1.3.1/lib/rbs/environment.rb:128:in `from_loader'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/steep-0.44.1/lib/steep/services/signature_service.rb:70:in `load_from'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/steep-0.44.1/lib/steep/services/type_check_service.rb:95:in `block in initialize'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/steep-0.44.1/lib/steep/services/type_check_service.rb:93:in `each'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/steep-0.44.1/lib/steep/services/type_check_service.rb:93:in `with_object'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/steep-0.44.1/lib/steep/services/type_check_service.rb:93:in `initialize'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/steep-0.44.1/lib/steep/server/type_check_worker.rb:46:in `new'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/steep-0.44.1/lib/steep/server/type_check_worker.rb:46:in `initialize'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/steep-0.44.1/lib/steep/drivers/worker.rb:33:in `new'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/steep-0.44.1/lib/steep/drivers/worker.rb:33:in `block in run'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/activesupport-6.1.4/lib/active_support/tagged_logging.rb:99:in `block in tagged'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/activesupport-6.1.4/lib/active_support/tagged_logging.rb:37:in `tagged'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/activesupport-6.1.4/lib/active_support/tagged_logging.rb:99:in `tagged'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/steep-0.44.1/lib/steep/drivers/worker.rb:24:in `run'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/steep-0.44.1/lib/steep/cli.rb:213:in `process_worker'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/steep-0.44.1/lib/steep/cli.rb:52:in `run'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/steep-0.44.1/exe/steep:11:in `<top (required)>'
/Users/john/.rbenv/versions/3.0.2/bin/steep:23:in `load'
/Users/john/.rbenv/versions/3.0.2/bin/steep:23:in `<main>'
#<RBS::Parser::SyntaxError: parse error on value: #<RBS::Parser::LocatedValue:0x00007fdd271113c0 @location=#<RBS::Location:5240 @buffer=/Users/john/Documents/GitHub/repo/gem_rbs/gems/actionpack/6.0/actionpack-generated.rbs, @pos=210321...210335, source='_cache_control', start_line=5751, start_column=10>, @value="_cache_control"> (tUNDERSCOREIDENT)>
parser.y:1757:in `on_error'
(eval):3:in `_racc_do_parse_c'
(eval):3:in `do_parse'
parser.y:1458:in `parse_signature'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/rbs-1.3.1/lib/rbs/environment_loader.rb:127:in `block (2 levels) in each_decl'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/rbs-1.3.1/lib/rbs/environment_loader.rb:97:in `each_file'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/rbs-1.3.1/lib/rbs/environment_loader.rb:110:in `block in each_file'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/rbs-1.3.1/lib/rbs/environment_loader.rb:109:in `each'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/rbs-1.3.1/lib/rbs/environment_loader.rb:109:in `each_file'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/rbs-1.3.1/lib/rbs/environment_loader.rb:121:in `block in each_decl'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/rbs-1.3.1/lib/rbs/environment_loader.rb:84:in `block in each_dir'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/rbs-1.3.1/lib/rbs/environment_loader.rb:75:in `each'
#<RBS::Parser::SyntaxError: parse error on value: #<RBS::Parser::LocatedValue:0x00007fc0c5264d90 @location=#<RBS::Location:5240 @buffer=/Users/john/Documents/GitHub/repo/gem_rbs/gems/actionpack/6.0/actionpack-generated.rbs, @pos=210321...210335, source='_cache_control', start_line=5751, start_column=10>, @value="_cache_control"> (tUNDERSCOREIDENT)>
#<RBS::Parser::SyntaxError: parse error on value: #<RBS::Parser::LocatedValue:0x00007f88c52efa18 @location=#<RBS::Location:5240 @buffer=/Users/john/Documents/GitHub/repo/gem_rbs/gems/actionpack/6.0/actionpack-generated.rbs, @pos=210321...210335, source='_cache_control', start_line=5751, start_column=10>, @value="_cache_control"> (tUNDERSCOREIDENT)>
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/rbs-1.3.1/lib/rbs/environment_loader.rb:75:in `each_dir'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/rbs-1.3.1/lib/rbs/environment_loader.rb:118:in `each_decl'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/rbs-1.3.1/lib/rbs/environment_loader.rb:62:in `load'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/rbs-1.3.1/lib/rbs/environment.rb:129:in `block in from_loader'
<internal:kernel>:90:in `tap'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/rbs-1.3.1/lib/rbs/environment.rb:128:in `from_loader'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/steep-0.44.1/lib/steep/services/signature_service.rb:70:in `load_from'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/steep-0.44.1/lib/steep/services/type_check_service.rb:95:in `block in initialize'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/steep-0.44.1/lib/steep/services/type_check_service.rb:93:in `each'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/steep-0.44.1/lib/steep/services/type_check_service.rb:93:in `with_object'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/steep-0.44.1/lib/steep/services/type_check_service.rb:93:in `initialize'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/steep-0.44.1/lib/steep/server/type_check_worker.rb:46:in `new'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/steep-0.44.1/lib/steep/server/type_check_worker.rb:46:in `initialize'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/steep-0.44.1/lib/steep/drivers/worker.rb:33:in `new'
parser.y:1757:in `on_error'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/steep-0.44.1/lib/steep/drivers/worker.rb:33:in `block in run'
parser.y:1757:in `on_error'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/activesupport-6.1.4/lib/active_support/tagged_logging.rb:99:in `block in tagged'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/activesupport-6.1.4/lib/active_support/tagged_logging.rb:37:in `tagged'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/activesupport-6.1.4/lib/active_support/tagged_logging.rb:99:in `tagged'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/steep-0.44.1/lib/steep/drivers/worker.rb:24:in `run'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/steep-0.44.1/lib/steep/cli.rb:213:in `process_worker'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/steep-0.44.1/lib/steep/cli.rb:52:in `run'
(eval):3:in `_racc_do_parse_c'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/steep-0.44.1/exe/steep:11:in `<top (required)>'
/Users/john/.rbenv/versions/3.0.2/bin/steep:23:in `load'
/Users/john/.rbenv/versions/3.0.2/bin/steep:23:in `<main>'
(eval):3:in `do_parse'
parser.y:1458:in `parse_signature'
(eval):3:in `_racc_do_parse_c'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/rbs-1.3.1/lib/rbs/environment_loader.rb:127:in `block (2 levels) in each_decl'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/rbs-1.3.1/lib/rbs/environment_loader.rb:97:in `each_file'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/rbs-1.3.1/lib/rbs/environment_loader.rb:110:in `block in each_file'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/rbs-1.3.1/lib/rbs/environment_loader.rb:109:in `each'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/rbs-1.3.1/lib/rbs/environment_loader.rb:109:in `each_file'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/rbs-1.3.1/lib/rbs/environment_loader.rb:121:in `block in each_decl'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/rbs-1.3.1/lib/rbs/environment_loader.rb:84:in `block in each_dir'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/rbs-1.3.1/lib/rbs/environment_loader.rb:75:in `each'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/rbs-1.3.1/lib/rbs/environment_loader.rb:75:in `each_dir'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/rbs-1.3.1/lib/rbs/environment_loader.rb:118:in `each_decl'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/rbs-1.3.1/lib/rbs/environment_loader.rb:62:in `load'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/rbs-1.3.1/lib/rbs/environment.rb:129:in `block in from_loader'
<internal:kernel>:90:in `tap'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/rbs-1.3.1/lib/rbs/environment.rb:128:in `from_loader'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/steep-0.44.1/lib/steep/services/signature_service.rb:70:in `load_from'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/steep-0.44.1/lib/steep/services/type_check_service.rb:95:in `block in initialize'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/steep-0.44.1/lib/steep/services/type_check_service.rb:93:in `each'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/steep-0.44.1/lib/steep/services/type_check_service.rb:93:in `with_object'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/steep-0.44.1/lib/steep/services/type_check_service.rb:93:in `initialize'
(eval):3:in `do_parse'
parser.y:1458:in `parse_signature'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/rbs-1.3.1/lib/rbs/environment_loader.rb:127:in `block (2 levels) in each_decl'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/rbs-1.3.1/lib/rbs/environment_loader.rb:97:in `each_file'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/rbs-1.3.1/lib/rbs/environment_loader.rb:110:in `block in each_file'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/rbs-1.3.1/lib/rbs/environment_loader.rb:109:in `each'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/rbs-1.3.1/lib/rbs/environment_loader.rb:109:in `each_file'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/rbs-1.3.1/lib/rbs/environment_loader.rb:121:in `block in each_decl'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/rbs-1.3.1/lib/rbs/environment_loader.rb:84:in `block in each_dir'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/steep-0.44.1/lib/steep/server/type_check_worker.rb:46:in `new'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/steep-0.44.1/lib/steep/server/type_check_worker.rb:46:in `initialize'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/steep-0.44.1/lib/steep/drivers/worker.rb:33:in `new'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/steep-0.44.1/lib/steep/drivers/worker.rb:33:in `block in run'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/activesupport-6.1.4/lib/active_support/tagged_logging.rb:99:in `block in tagged'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/activesupport-6.1.4/lib/active_support/tagged_logging.rb:37:in `tagged'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/activesupport-6.1.4/lib/active_support/tagged_logging.rb:99:in `tagged'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/steep-0.44.1/lib/steep/drivers/worker.rb:24:in `run'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/steep-0.44.1/lib/steep/cli.rb:213:in `process_worker'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/steep-0.44.1/lib/steep/cli.rb:52:in `run'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/steep-0.44.1/exe/steep:11:in `<top (required)>'
/Users/john/.rbenv/versions/3.0.2/bin/steep:23:in `load'
/Users/john/.rbenv/versions/3.0.2/bin/steep:23:in `<main>'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/rbs-1.3.1/lib/rbs/environment_loader.rb:75:in `each'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/rbs-1.3.1/lib/rbs/environment_loader.rb:75:in `each_dir'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/rbs-1.3.1/lib/rbs/environment_loader.rb:118:in `each_decl'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/rbs-1.3.1/lib/rbs/environment_loader.rb:62:in `load'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/rbs-1.3.1/lib/rbs/environment.rb:129:in `block in from_loader'
<internal:kernel>:90:in `tap'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/rbs-1.3.1/lib/rbs/environment.rb:128:in `from_loader'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/steep-0.44.1/lib/steep/services/signature_service.rb:70:in `load_from'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/steep-0.44.1/lib/steep/services/type_check_service.rb:95:in `block in initialize'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/steep-0.44.1/lib/steep/services/type_check_service.rb:93:in `each'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/steep-0.44.1/lib/steep/services/type_check_service.rb:93:in `with_object'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/steep-0.44.1/lib/steep/services/type_check_service.rb:93:in `initialize'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/steep-0.44.1/lib/steep/server/type_check_worker.rb:46:in `new'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/steep-0.44.1/lib/steep/server/type_check_worker.rb:46:in `initialize'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/steep-0.44.1/lib/steep/drivers/worker.rb:33:in `new'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/steep-0.44.1/lib/steep/drivers/worker.rb:33:in `block in run'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/activesupport-6.1.4/lib/active_support/tagged_logging.rb:99:in `block in tagged'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/activesupport-6.1.4/lib/active_support/tagged_logging.rb:37:in `tagged'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/activesupport-6.1.4/lib/active_support/tagged_logging.rb:99:in `tagged'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/steep-0.44.1/lib/steep/drivers/worker.rb:24:in `run'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/steep-0.44.1/lib/steep/cli.rb:213:in `process_worker'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/steep-0.44.1/lib/steep/cli.rb:52:in `run'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/steep-0.44.1/exe/steep:11:in `<top (required)>'
/Users/john/.rbenv/versions/3.0.2/bin/steep:23:in `load'
/Users/john/.rbenv/versions/3.0.2/bin/steep:23:in `<main>'
#<RBS::Parser::SyntaxError: parse error on value: #<RBS::Parser::LocatedValue:0x00007ffd93295908 @location=#<RBS::Location:5240 @buffer=/Users/john/Documents/GitHub/repo/gem_rbs/gems/actionpack/6.0/actionpack-generated.rbs, @pos=210321...210335, source='_cache_control', start_line=5751, start_column=10>, @value="_cache_control"> (tUNDERSCOREIDENT)>
parser.y:1757:in `on_error'
(eval):3:in `_racc_do_parse_c'
(eval):3:in `do_parse'
parser.y:1458:in `parse_signature'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/rbs-1.3.1/lib/rbs/environment_loader.rb:127:in `block (2 levels) in each_decl'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/rbs-1.3.1/lib/rbs/environment_loader.rb:97:in `each_file'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/rbs-1.3.1/lib/rbs/environment_loader.rb:110:in `block in each_file'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/rbs-1.3.1/lib/rbs/environment_loader.rb:109:in `each'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/rbs-1.3.1/lib/rbs/environment_loader.rb:109:in `each_file'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/rbs-1.3.1/lib/rbs/environment_loader.rb:121:in `block in each_decl'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/rbs-1.3.1/lib/rbs/environment_loader.rb:84:in `block in each_dir'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/rbs-1.3.1/lib/rbs/environment_loader.rb:75:in `each'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/rbs-1.3.1/lib/rbs/environment_loader.rb:75:in `each_dir'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/rbs-1.3.1/lib/rbs/environment_loader.rb:118:in `each_decl'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/rbs-1.3.1/lib/rbs/environment_loader.rb:62:in `load'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/rbs-1.3.1/lib/rbs/environment.rb:129:in `block in from_loader'
<internal:kernel>:90:in `tap'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/rbs-1.3.1/lib/rbs/environment.rb:128:in `from_loader'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/steep-0.44.1/lib/steep/services/signature_service.rb:70:in `load_from'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/steep-0.44.1/lib/steep/services/type_check_service.rb:95:in `block in initialize'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/steep-0.44.1/lib/steep/services/type_check_service.rb:93:in `each'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/steep-0.44.1/lib/steep/services/type_check_service.rb:93:in `with_object'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/steep-0.44.1/lib/steep/services/type_check_service.rb:93:in `initialize'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/steep-0.44.1/lib/steep/server/type_check_worker.rb:46:in `new'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/steep-0.44.1/lib/steep/server/type_check_worker.rb:46:in `initialize'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/steep-0.44.1/lib/steep/drivers/worker.rb:33:in `new'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/steep-0.44.1/lib/steep/drivers/worker.rb:33:in `block in run'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/activesupport-6.1.4/lib/active_support/tagged_logging.rb:99:in `block in tagged'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/activesupport-6.1.4/lib/active_support/tagged_logging.rb:37:in `tagged'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/activesupport-6.1.4/lib/active_support/tagged_logging.rb:99:in `tagged'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/steep-0.44.1/lib/steep/drivers/worker.rb:24:in `run'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/steep-0.44.1/lib/steep/cli.rb:213:in `process_worker'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/steep-0.44.1/lib/steep/cli.rb:52:in `run'
/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/steep-0.44.1/exe/steep:11:in `<top (required)>'
/Users/john/.rbenv/versions/3.0.2/bin/steep:23:in `load'
/Users/john/.rbenv/versions/3.0.2/bin/steep:23:in `<main>'
^C/Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/language_server-protocol-3.16.0.1/lib/language_server/protocol/transport/io/reader.rb:17:in `getc': Interrupt
from /Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/language_server-protocol-3.16.0.1/lib/language_server/protocol/transport/io/reader.rb:17:in `read'
from /Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/steep-0.44.1/lib/steep/drivers/utils/driver_helper.rb:43:in `wait_for_message'
from /Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/steep-0.44.1/lib/steep/drivers/utils/driver_helper.rb:29:in `wait_for_response_id'
from /Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/steep-0.44.1/lib/steep/drivers/check.rb:61:in `run'
from /Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/steep-0.44.1/lib/steep/cli.rb:107:in `process_check'
from /Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/steep-0.44.1/lib/steep/cli.rb:52:in `run'
from /Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/steep-0.44.1/exe/steep:11:in `<top (required)>'
from /Users/john/.rbenv/versions/3.0.2/bin/steep:23:in `load'
from /Users/john/.rbenv/versions/3.0.2/bin/steep:23:in `<top (required)>'
from /Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/bundler-2.2.22/lib/bundler/cli/exec.rb:63:in `load'
from /Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/bundler-2.2.22/lib/bundler/cli/exec.rb:63:in `kernel_load'
from /Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/bundler-2.2.22/lib/bundler/cli/exec.rb:28:in `run'
from /Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/bundler-2.2.22/lib/bundler/cli.rb:474:in `exec'
from /Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/bundler-2.2.22/lib/bundler/vendor/thor/lib/thor/command.rb:27:in `run'
from /Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/bundler-2.2.22/lib/bundler/vendor/thor/lib/thor/invocation.rb:127:in `invoke_command'
from /Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/bundler-2.2.22/lib/bundler/vendor/thor/lib/thor.rb:392:in `dispatch'
from /Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/bundler-2.2.22/lib/bundler/cli.rb:30:in `dispatch'
from /Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/bundler-2.2.22/lib/bundler/vendor/thor/lib/thor/base.rb:485:in `start'
from /Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/bundler-2.2.22/lib/bundler/cli.rb:24:in `start'
from /Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/bundler-2.2.22/exe/bundle:49:in `block in <top (required)>'
from /Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/bundler-2.2.22/lib/bundler/friendly_errors.rb:128:in `with_friendly_errors'
from /Users/john/.rbenv/versions/3.0.2/lib/ruby/gems/3.0.0/gems/bundler-2.2.22/exe/bundle:37:in `<top (required)>'
from /Users/john/.rbenv/versions/3.0.2/bin/bundle:23:in `load'
from /Users/john/.rbenv/versions/3.0.2/bin/bundle:23:in `<main>'
When creating a new ActiveRecord model through an association, for example:
class Post < ActiveRecord::Base
has_many comments
end
class Comment < ActiveRecord::Base
belongs_to :post
end
post = Post.new
comment = post.comments.new
the current type definitions throw an error when validating in Steep due to an incorrect signature:
[error] The method cannot be called without a block
│ Diagnostic ID: Ruby::RequiredBlockMissing
│
└ @comment = post.comments.new
~~~
This specific one comes from ActiveRecord::Associations::CollectionProxy#new(build)
, which is defined on https://github.com/ruby/gem_rbs_collection/blob/main/gems/activerecord/6.0/activerecord-generated.rbs#L1156-L1158
def build: (?::Hash[untyped, untyped] attributes) { () -> untyped } -> untyped
alias new build
The patch to fix it is to make the block optional, ie ?{ () -> untyped }
There is another method definition under ActiveRecord::AssociationRelation
that likely also needs to be updated: https://github.com/ruby/gem_rbs_collection/blob/main/gems/activerecord/6.0/activerecord-generated.rbs#L259-L261
I'm happy to make a PR to address, but not sure if you would prefer to update the generated files or the patch.
Hi, there.
When I read README, I spent time to know what the most recommended way to use gem_rbs_collection
is.
For example, the README describes the easiest way is to use the git submodule
command, but I understand the most recommended way is to use the rbs collection
command today, as this @pocke's article explains.
And, since the current README doesn't refer to TypeProf, I feel a bit unhelpful for TypeProf users.
So, I suggest:
gem_rbs_collection
with rbs collection
first
rbs collection
docrbs collection
(standard)git submodule
What do you think about the suggestion? Welcome to any feedback!
I could also rewrite the README if you would hope.
Thanks.
I am currently tinkering with Rack and RBS, using this collection for Rack’s RBS. Unfortunately, it is quite lacklustre. It looks like it was partially prepared by @mame and TypeProf through #36 and never touched since.
I’ve inquired about Rack’s opinion on developing RBS themselves through rack/rack#1967. In summary, their consensus is that RBS’s benefits aren’t significant enough to justify the labour of coercing Rack’s duck types to RBS’s static typing. In that discussion, I highlighted: [Update: #232 covers this blockquote]
However, it has possible mistakes and undocumented fields. Examples from
Rack::Response
alone:
- The attribute
Rack::Response#body
should probably follow theSPEC
§ The Body, but the RBS restricts it to one or an Array ofRack::Lint
ornil
.- I’ve been working around the above with
Rack::Response.[]
, whose args are untyped in the RBS.Rack::Response#each
is also missing RBS of&block
.
Rack::Lint
already detail acceptable types (static or duck) equal to or better than a set of RBS could.I've just installed rbs
with rbs collection
in a new project, where I'm using steep
and capping activesupport
to ~> 6.0
due to a recent rails 7 bug with steep. After installing, I run rbs validate
and I get the following error:
Validating class/module definition: `::Thread::SizedQueue`...
Validating class/module definition: `::ThreadGroup`...
Validating class/module definition: `::Time`...
bundler: failed to load command: rbs (/home/.bundle/ruby/3.0.0/bin/rbs)
/home/.bundle/ruby/3.0.0/gems/rbs-1.8.1/lib/rbs/definition_builder.rb:567:in `block in define_methods': .gem_rbs_collection/activesupport/6.0/activesupport-generated.rbs:6167:2...6167:25: Unknown method alias name: xmlschema => rfc3339 (::
Time) (RBS::UnknownMethodAliasError)
from /home/.bundle/ruby/3.0.0/gems/rbs-1.8.1/lib/rbs/definition_builder/method_builder.rb:50:in `block in each'
from /home/.rubies/ruby-3.0.1/lib/ruby/3.0.0/tsort.rb:350:in `block (2 levels) in each_strongly_connected_component'
....
The rbs update creates a conflict with gem_rbs_collection.
The error message :
::Hash#except has duplicated definitions
I had to comment the two definitions (except and except!) to remove the conflict but it is just a workaround.
# gem_rbs_collection/gems/activesupport/6.0.3.2/activesupport-generated.rbs
# line 3327
class Hash[unchecked out K, unchecked out V]
# Returns a hash that includes everything except given keys.
# hash = { a: true, b: false, c: nil }
# hash.except(:c) # => { a: true, b: false }
# hash.except(:a, :b) # => { c: nil }
# hash # => { a: true, b: false, c: nil }
#
# This is useful for limiting a set of parameters to everything but a few known toggles:
# @person.update(params[:person].except(:admin))
def except: (*untyped keys) -> untyped
# Removes the given keys from hash and returns it.
# hash = { a: true, b: false, c: nil }
# hash.except!(:c) # => { a: true, b: false }
# hash # => { a: true, b: false }
def except!: (*untyped keys) -> untyped
end
Should I open an issue on rbs too ?
Thanks
When including ActiveStorage in a Steepfile, the following error occurs:
gem_rbs/gems/activestorage/6.1/app/models/active_storage/blob.rbs:166:42: [error] Cannot find type `Tempfile`
│ Diagnostic ID: RBS::UnknownTypeName
│
└ def open: (?tmpdir: untyped? tmpdir) { (Tempfile) -> untyped } -> untyped
Line in question:
Method Definition from rails:
https://github.com/rails/rails/blob/d38ff07a39c98f5db2b15ca3a51acee48c972205/activestorage/app/models/active_storage/blob.rb#L275-L278
It seems the signature should be updated to:
def open: (?tmpdir: untyped? tmpdir) { (untyped) -> untyped } -> untyped
There is a problem with current gem_rbs_collection
when trying to use Steep in an application that uses ActiveRecord::Type::Value
.
If I create a class that extends the class with class Foo < ActiveRecord::Type::Value
, I get the following error.
[error] Cannot find type `ActiveRecord::Type::Value`
│ Diagnostic ID: RBS::UnknownTypeName
But when I try to add ActiveRecord::Type::Value
to my rbs files, I get the following error.
[error] Declaration of `::ActiveRecord::Type::Value` is duplicated
│ Diagnostic ID: RBS::DuplicatedDeclaration
I guess this is because the current ActiveRecord::Type::Value
is defined as an untyped constant.
I think we should not define as a constant and make it a class definition. What do you think?
I'm using aws-sdk-ssm
and would love to have types for that - I've seen there's a generator but I don't see how it correlates with the handful of aws-sdk
gems that are in this repo? i.e. I don't see anywhere a list that has just the clients that are currently here, but then this repo doesn't already have every aws client.
What's the process for generating the types for new clients?
https://aws.amazon.com/jp/blogs/developer/announcing-rbs-support-for-aws-sdk-for-ruby-v3/
All aws-sdk-ruby related gems now include RBS.
Therefore, the gem_rbs_collection side seems to be no longer needed.
How do we deal with this?
The RBS on the gem_rbs_collection side is not compatible with the RBS on the gem side.
Using aws-sdk-core on gem_rbs_collection side and aws-sdk-xray on gem side will cause problems when reading RBS.
This line works
Time.now - 1.days
but RBS catches this as type error below;
[error] Cannot find compatible overloading of method `-` of type `::Time`
│ Method types:
│ def -: (::Time) -> ::Float
│ | (::Numeric) -> ::Time
│
│ Diagnostic ID: Ruby::UnresolvedOverloading
│
└ datetime: (Time.now - 1.days).beginning_of_day..(Time.now - day.days).end_of_day
rbs test
rbs test
command, Open3.capture3
executes the filename as a command, due to which a Permission denied error
is thrown.Open3.capture3
, which throws permission denied error.In the file httparty.rbs
, the method parsed_response
is inaccurately documented to return a string. However, upon examining the source code, it's clear that the parsed_response
method's return type is determined by the Content-Type header of the HTTP response. The potential return types include:
nil
(if the HTTP response has no body),String
,Array[Array[untyped]]
, orHash
.It's important to note that users have the ability to override the parser, as illustrated in the code documentation. This flexibility allows for a variety of user-defined return types, making this a potentially common scenario. Given this recommended usage of the API, it would be wise to change the return type of 'parsed_response' to 'Object'.
Hello!
I am interested in adding types for webrick, nats and grpc to this repository
If you think that this is a good idea, please, write me and I will start working on a PR with webrick types to demonstrate how it would look like.
I tried to use gem_rbs_collection w/ this code,
then UnexpectedError happened on Retryable steep check in this code
If I did Retryable configuration w/
Retryable.configure do |config|
config.sleep = 1
end
Retryable.retryable do
results = FizzBuzz.run(Date.today.day)
puts results
end
it worked.
Do you have any idea to avoid this Diagnostic ID: Ruby::UnexpectedError?
After updating to the latest RBS/Steep versions (2.6.0 and 1.0.1 respectively), we are getting the following error after running steep check
:
.gem_rbs_collection/activesupport/6.0/activesupport-generated.rbs:6115:2: [error] Non-overloading method definition of `to_time` in `::Time` cannot be duplicated
│ Diagnostic ID: RBS::DuplicatedMethodDefinition
│
└ def to_time: () -> untyped
~~~~~~~~~~~~~~~~~~~~~~~~~~
see:
gem_rbs_collection/gems/activesupport/6.0/activesupport-generated.rbs
Lines 6110 to 6116 in cd6db41
This was added in RBS 2.6.0 at ruby/rbs#1033 by @ksss, but the type definitions here have not been updated for ActiveSupport
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.