Update RBS for Rack
ParadoxV5 opened this issue · 2 comments
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::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
.
[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::Lint
already 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)
- [
Rack
Top-Level] -
Auth
-
BodyProxy
-
Builder
-
Cascade
-
Chunked
-
CommonLogger
-
ConditionalGet
-
Config
-
ContentLength
-
ContentType
-
Deflater
-
Directory
-
ETag
-
Events
-
Files
-
ForwardRequest
-
Handler
-
Head
-
Lint
-
Lobster
-
Lock
-
Logger
-
MediaType
-
MethodOverride
-
Mime
-
MockRequest
-
MockResponse
except- Argument
errors
of#initialize
- Argument
-
Multipart
-
NullLogger
-
QueryParser
-
Recursive
-
RegexpExtensions
-
Reloader
-
Request
except- Return of
Helpers#body
- Return of
Helpers#logger
- Return of
Helpers#session_options
- Return of
Helpers#parse_multipart
- Return of
-
Response
-
RewindableInput
-
Runtime
-
Sendfile
-
Server
-
Session
-
ShowExceptions
-
ShowStatus
-
Static
-
TempfileReaper
-
URLMap
-
Utils