gem_rbs_collection icon indicating copy to clipboard operation
gem_rbs_collection copied to clipboard

Update RBS for Rack

Open ParadoxV5 opened this issue 3 years ago • 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 the SPEC § The Body, but the RBS restricts it to one or an Array of Rack::Lint or nil.
  • 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.

ParadoxV5 avatar Sep 20 '22 18:09 ParadoxV5

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))

ParadoxV5 avatar Sep 29 '22 23:09 ParadoxV5

Checklist of Classes/Modules (as of #232)

  • [x] [Rack Top-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] MockResponse except
    • [ ] Argument errors of #initialize
  • [ ] Multipart
  • [ ] NullLogger
  • [ ] QueryParser
  • [ ] Recursive
  • [x] RegexpExtensions
  • [ ] Reloader
  • [x] Request except
    • [ ] Return of Helpers#body
    • [ ] Return of Helpers#logger
    • [ ] Return of Helpers#session_options
    • [ ] Return of Helpers#parse_multipart
  • [x] Response
  • [ ] RewindableInput
  • [ ] Runtime
  • [ ] Sendfile
  • [ ] Server
  • [ ] Session
  • [ ] ShowExceptions
  • [ ] ShowStatus
  • [ ] Static
  • [ ] TempfileReaper
  • [ ] URLMap
  • [ ] Utils

ParadoxV5 avatar Oct 13 '22 19:10 ParadoxV5