Repository navigation
Support type aliases as module self types and ntersections in module self types - #3256
Open
HoneyryderChuck wants to merge 2 commits into
Open
HoneyryderChuck wants to merge 2 commits into
HoneyryderChuck wants to merge 2 commits into
Conversation
Module self types can now be type aliases (`module Foo : foo`), including
generic and namespaced ones, both in RBS files and in inline
`@rbs module-self:` annotations. The alias is expanded into the class
instance and interface types it's composed of, so an alias to an
intersection is equivalent to listing each component as a self type.
interface _Reader[T]
def read: () -> T
end
module Writer
def write: (String) -> void
end
type io[T] = _Reader[T] & Writer
# Same as `module Buffered : _Reader[String], Writer`
module Buffered : io[String]
end
# @RBS module-self: io[String]
module InlineBuffered
end
Aliases expanding to other types (e.g. unions) raise the new
`InvalidSelfTypeError`, and recursive aliases raise
`RecursiveTypeAliasError`.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Self types can now be separated with `&` in addition to `,`, and an
intersection is equivalent to listing each component as a self type.
module Persistent
end
module Stream
end
# Same as `module GRPC : Persistent, Stream`
module GRPC : Persistent & Stream
end
# Components can be classes, modules, interfaces, or type aliases
module Foo : Persistent & _Each[String] & io[String]
end
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR adds the following changes:
Support type aliases as module self types
Support intersections in module self types