class Crystal::Macros::TypeNode

Overview

Represents a type in the program, like Int32 or String.

Defined in:

compiler/crystal/macros.cr

Instance Method Summary

Instance methods inherited from class Crystal::Macros::ASTNode

!=(other : ASTNode) : BoolLiteral !=, ==(other : ASTNode) : BoolLiteral ==, class_name : StringLiteral class_name, column_number : StringLiteral | NilLiteral column_number, end_column_number : StringLiteral | NilLiteral end_column_number, end_line_number : StringLiteral | NilLiteral end_line_number, filename : StringLiteral | NilLiteral filename, id : MacroId id, line_number : StringLiteral | NilLiteral line_number, raise(message) : NoReturn raise, stringify : StringLiteral stringify

Instance methods inherited from class Reference

==(other : self)
==(other)
==
, dup dup, hash hash, inspect(io : IO) : Nil inspect, object_id : UInt64 object_id, pretty_print(pp) : Nil pretty_print, same?(other : Reference)
same?(other : Nil)
same?
, to_s(io : IO) : Nil to_s

Constructor methods inherited from class Reference

new new

Instance methods inherited from class Object

!=(other) !=, !~(other) !~, ==(other) ==, ===(other : JSON::Any)
===(other : YAML::Any)
===(other)
===
, =~(other) =~, class class, dup dup, hash hash, inspect(io : IO)
inspect
inspect
, itself itself, not_nil! not_nil!, pretty_inspect(width = 79, newline = "\n", indent = 0) : String pretty_inspect, pretty_print(pp : PrettyPrint) : Nil pretty_print, tap(&block) tap, to_json(io : IO)
to_json
to_json
, to_pretty_json(indent : String = " ")
to_pretty_json(io : IO, indent : String = " ")
to_pretty_json
, to_s
to_s(io : IO)
to_s
, to_yaml(io : IO)
to_yaml
to_yaml
, try(&block) try, unsafe_as(type : T.class) forall T unsafe_as

Constructor methods inherited from class Object

from_json(string_or_io, root : String) : self
from_json(string_or_io) : self
from_json
, from_yaml(string_or_io) : self from_yaml

Instance Method Detail

def <(other : TypeNode) : BoolLiteral #

Returns true if other is an ancestor of self.


View source
def <=(other : TypeNode) : BoolLiteral #

Returns true if self is the same as other or if other is an ancestor of self.


View source
def >(other : TypeNode) : BoolLiteral #

Returns true if self is an ancestor of other.


View source
def >=(other : TypeNode) : BoolLiteral #

Returns true if other is the same as self or if self is an ancestor of other.


View source
def [](key : SymbolLiteral | MacroId) : TypeNode | NilLiteral #

Returns the type for the given key in this named tuple type. Gives a compile error if this is not a named tuple type.


View source
def abstract? : BoolLiteral #

Returns true if this type is abstract.


View source
def all_subclasses : Crystal::Macros::ArrayLiteral(TypeNode) #

Returns all subclasses of this type.


View source

Returns all ancestors of this type.


View source
def class : TypeNode #

Returns the class of this type. With this you can, for example, obtain class methods by invoking type.class.methods.


View source
def constant(name : StringLiteral | SymbolLiteral | MacroId) : ASTNode #

Returns a constant defined in this type.

If the constant is a constant (like A = 1), then its value as an ASTNode is returned. If the constant is a type, the type is returned as a TypeNode. Otherwise, NilLiteral is returned.


View source

Returns the constants and types defined by this type.


View source
def has_attribute?(name : StringLiteral | SymbolLiteral) : BoolLiteral #

Returns true if this type has an attribute. For example @[Flags] or @[Packed] (the name you pass to this method is "Flags" or "Packed" in these cases).


View source
def has_constant?(name : StringLiteral | SymbolLiteral) : BoolLiteral #

Returns true if this type has a constant. For example DEFAULT_OPTIONS (the name you pass to this method is "DEFAULT_OPTIONS" or :DEFAULT_OPTIONS in this cases).


View source
def has_method?(name : StringLiteral | SymbolLiteral) : BoolLiteral #

Returns true if this type has a method. For example default_options (the name you pass to this method is "default_options" or :default_options in this cases).


View source
def instance : TypeNode #

Returns the instance type of this type, if it's a class type, or self otherwise. This is the opposite of #class.


View source
def instance_vars : Crystal::Macros::ArrayLiteral(MetaVar) #

Returns the instance variables of this type.


View source

Returns the keys in this named tuple type. Gives a compile error if this is not a named tuple type.


View source

Returns the instance methods defined by this type, without including inherited methods.


View source
def name : MacroId #

Returns the fully qualified name of this type.


View source
def overrides?(type : TypeNode, method : StringLiteral | SymbolLiteral | MacroId) : Bool #

Determines if self overrides any method named method from type type.

class Foo
  def one
    1
  end

  def two
    2
  end
end

class Bar < Foo
  def one
    11
  end
end

{{ Bar.overrides?(Foo, "one") }} # => true
{{ Bar.overrides?(Foo, "two") }} # => false

View source
def size : NumberLiteral #

Returns the number of elements in this tuple type or tuple metaclass type. Gives a compile error if this is not one of those types.


View source

Returns the direct subclasses of this type.


View source
def superclass : TypeNode | NilLiteral #

Returns the direct superclass of this type.


View source

Returns the type variables of the generic type. If the type is not generic, an empty array is returned.


View source
def union? : BoolLiteral #

Returns true if this type is a union type, false otherwise.

See also: #union_types.


View source

Returns the types comforming a union type, if this is a union type. Gives a compile error otherwise.

See also: #union?.


View source