record union breaks type information
Open
Nobody has claimed this yet.
- Dominant language
- Ruby
- Stars
- 2.2k
- Forks
- 256
- Avg merge
- 6d 17h
- Merged PRs (30d)
- 37
Description
# RBS
# type simple = { flags: Integer }
a1 = { flags: 1 } #: simple
a1[:flags] #=> steep will correctly identify this as an integer
# type not_so_simple = simple & { id: String }
a2 = {id: "abc", flags: 2 }#: not_so_simple
a2[:flags] #=> steep will think this is either a String or an Integer. this is the bug!
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start by reproducing the RBS example in the issue, focusing on the intersection type simple & { id: String } and hash access for flags. Trace the type-checking path that handles the union or intersection and verify that a2[:flags] is inferred as Integer rather than String or Integer.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- ruby
- Domain
- tooling
- Issue type
- Bug
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 55/100