gem_rbs_collection
gem_rbs_collection copied to clipboard
Update RBS for Rack
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.
- [ ] This RBS document demands a good amount of polishing to be successful.
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::Responsealone:
- The attribute
Rack::Response#bodyshould probably follow theSPEC§ The Body, but the RBS restricts it to one or an Array ofRack::Lintornil.- I’ve been working around the above with
Rack::Response.[], whose args are untyped in the RBS.Rack::Response#eachis also missing RBS of&block.
[Significatly modified section starts]
- [ ] Besides filling in the blanks, note that Rack just got a new major version recently (Rack 3). Regarding the leap to Rack 3, a question yet to be answered is if we, as third-party volunteers, should attempt to catch up with Rack’s development (without publishing unusable snapshots) or simply freeze at Rack 2. Keep in Mind that a complete RBS of Rack doesn’t provide a unique convenience (yet) perhaps besides pocke/rbs_rails#174, especially since Rack’s YARDocs and
Rack::Lintalready detail acceptable types (static or duck) equal to or better than a set of RBS could.
I’m going to (partially) improve the RBS through PR. This doesn’t answer my concern with (consistent) maintenance for Rack 3 though. (It’s better not to have an incompetent tool than to accept its hindrance. (not a proverb))
Checklist of Classes/Modules (as of #232)
- [x] [
RackTop-Level] - [ ]
Auth - [ ]
BodyProxy - [x]
Builder - [ ]
Cascade - [ ]
Chunked - [ ]
CommonLogger - [ ]
ConditionalGet - [x]
Config - [ ]
ContentLength - [ ]
ContentType - [ ]
Deflater - [ ]
Directory - [ ]
ETag - [ ]
Events - [ ]
Files - [ ]
ForwardRequest - [ ]
Handler - [ ]
Head - [ ]
Lint - [x]
Lobster - [ ]
Lock - [ ]
Logger - [x]
MediaType - [ ]
MethodOverride - [ ]
Mime - [x]
MockRequest - [x]
MockResponseexcept- [ ] Argument
errorsof#initialize
- [ ] Argument
- [ ]
Multipart - [ ]
NullLogger - [ ]
QueryParser - [ ]
Recursive - [x]
RegexpExtensions - [ ]
Reloader - [x]
Requestexcept- [ ] Return of
Helpers#body - [ ] Return of
Helpers#logger - [ ] Return of
Helpers#session_options - [ ] Return of
Helpers#parse_multipart
- [ ] Return of
- [x]
Response - [ ]
RewindableInput - [ ]
Runtime - [ ]
Sendfile - [ ]
Server - [ ]
Session - [ ]
ShowExceptions - [ ]
ShowStatus - [ ]
Static - [ ]
TempfileReaper - [ ]
URLMap - [ ]
Utils