class RBS::TypeName
TypeName represents name of types in RBS.
TypeNames are one of the three kind, class, alias, and interface. class type names corresponds to Ruby classes and modules. There are no corresponding Ruby value to alias and interface type names.
Attributes
kind
Kind of the type.
The namespace the type name is defined in.
Public Class Methods
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/lib/rbs/type_name.rb, line 9 def initialize(namespace:, name:) @namespace = namespace @name = name @kind = case when name.match?(/\A[A-Z]/) :class when name.match?(/\A[a-z]/) :alias when name.start_with?("_") :interface else # Defaults to :class :class end end
Initializer accepts two keyword args, namespace and name. Note that kind is automatically determined from its name.
If the name starts with capital alphabet, it is class. If the name starts with lower case alphabet, it is alias. If the name starts with an underscore, it is interface.
(String name) → RBS::TypeName
Source
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/lib/rbs/type_name.rb, line 90 def self.parse(string) absolute = string.start_with?("::") *path, name = string.delete_prefix("::").split("::").map(&:to_sym) raise unless name TypeName.new( name: name, namespace: RBS::Namespace.new(path: path, absolute: absolute) ) end
Returns type name with given string representation.
Public Instance Methods
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/lib/rbs/type_name.rb, line 79 def +(other) if other.absolute? other else TypeName.new( namespace: self.to_namespace + other.namespace, name: other.name ) end end
(untyped other) → bool
Source
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/lib/rbs/type_name.rb, line 25 def ==(other) other.is_a?(self.class) && other.namespace == namespace && other.name == name end
() → TypeName
Source
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/lib/rbs/type_name.rb, line 55 def absolute! self.class.new(namespace: namespace.absolute!, name: name) end
() → bool
Source
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/lib/rbs/type_name.rb, line 59 def absolute? namespace.absolute? end
() → bool
Source
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/lib/rbs/type_name.rb, line 51 def alias? kind == :alias end
Returns true when self is an alias type name.
() → bool
Source
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/lib/rbs/type_name.rb, line 47 def class? kind == :class end
Returns true when self is a class type name.
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/lib/rbs/type_name.rb, line 31 def hash namespace.hash ^ name.hash end
() → bool
Source
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/lib/rbs/type_name.rb, line 67 def interface? kind == :interface end
Returns true when self is an interface type name.
() → TypeName
Source
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/lib/rbs/type_name.rb, line 63 def relative! self.class.new(namespace: namespace.relative!, name: name) end
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/lib/rbs/type_name.rb, line 75 def split namespace.path + [name] end
Source
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/lib/rbs/type_name.rb, line 39 def to_json(state = nil) to_s.to_json(state) end
() → Namespace
Source
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/lib/rbs/type_name.rb, line 43 def to_namespace namespace.append(self.name) end
Returns a namespace with same components of self.
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/lib/rbs/type_name.rb, line 35 def to_s "#{namespace.to_s}#{name}" end
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/lib/rbs/type_name.rb, line 71 def with_prefix(namespace) self.class.new(namespace: namespace + self.namespace, name: name) end
Returns a new type name with a namespace appended to given namespace.
TypeName.parse("Hello").with_prefix(Namespace("World")) # => World::Hello TypeName.parse("Foo::Bar").with_prefix(Namespace("::Hello")) # => ::Hello::Foo::Bar TypeName.parse("::A::B").with_prefix(Namespace("C")) # => ::A::B