class

Crystal::Macros::TypeNode

Inherits Crystal::Macros::ASTNode

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

Instance methods

<(other : TypeNode) : BoolLiteral

Returns true if other is an ancestor of self.

Source
<=(other : TypeNode) : BoolLiteral

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

Source
>(other : TypeNode) : BoolLiteral

Returns true if self is an ancestor of other.

Source
>=(other : TypeNode) : BoolLiteral

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

Source
[](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.

Source
abstract?

Returns true if self is abstract, otherwise false.

module One; end

abstract struct Two; end

class Three; end

abstract class Four; end

{{One.abstract?}}   # => false
{{Two.abstract?}}   # => true
{{Three.abstract?}} # => false
{{Four.abstract?}}  # => true
Source
all_methods

Returns the instance methods defined by this type, including those inherited from ancestors and base types (Reference, Value, and Object).

Source
all_subclasses

Returns all subclasses of this type.

Source
ancestors

Returns all ancestors of this type.

Source
annotation(type : TypeNode) : Annotation | NilLiteral

Returns the last Annotation with the given type attached to this type or NilLiteral if there are none.

Source
annotations(type : TypeNode) : ArrayLiteral(Annotation)

Returns an array of annotations with the given type attached to this type, or an empty ArrayLiteral if there are none.

Source
annotations

Returns an array of all annotations attached to this type, or an empty ArrayLiteral if there are none.

Source
class

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

Source
class?

Returns true if self is a class, otherwise false.

module One; end

class Two; end

struct Three; end

{{One.class?}}   # => false
{{Two.class?}}   # => true
{{Three.class?}} # => false
Source
class_vars

Returns the class variables of this type.

Source
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.

Source
constants

Returns the constants and types defined by this type.

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

Source
has_inner_pointers?

Returns whether self contains any inner pointers.

Primitive types, except Void, are expected to not contain inner pointers. Proc and Pointer contain inner pointers. Unions, structs and collection types (tuples, static arrays) have inner pointers if any of their contained types has inner pointers. All other types, including classes, are expected to contain inner pointers.

Types that do not have inner pointers may opt to use atomic allocations, i.e. GC.malloc_atomic rather than GC.malloc. The compiler ensures that, for any type T:

  • Pointer(T).malloc is atomic if and only if T has no inner pointers;
  • T.allocate is atomic if and only if T is a reference type and ReferenceStorage(T) has no inner pointers. NOTE: Like #instance_vars this method must be called from within a method. The result may be incorrect when used in top-level code.
Source
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).

Source
includers

Returns all the types self is directly included in.

Source
instance

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

Source
instance_vars

Returns the instance variables of this type. Can only be called from within methods (not top-level code), otherwise will return an empty list.

Source
keys

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

Source
methods

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

Source
module?

Returns true if self is a module, otherwise false.

module One; end

class Two; end

struct Three; end

{{One.module?}}   # => true
{{Two.module?}}   # => false
{{Three.module?}} # => false
Source
name(*, generic_args : BoolLiteral = true) : MacroId

Returns the fully qualified name of this type. Optionally without generic_args if self is a generic type; see #type_vars.

class Foo(T); end

module Bar::Baz; end

{{Bar::Baz.name}}                 # => Bar::Baz
{{Foo.name}}                      # => Foo(T)
{{Foo.name(generic_args: false)}} # => Foo
Source
nilable?

Returns true if nil is an instance of self, otherwise false.

{{String.nilable?}}                   # => false
{{String?.nilable?}}                  # => true
{{Union(String, Bool, Nil).nilable?}} # => true
{{NoReturn.nilable?}}                 # => false
{{Value.nilable?}}                    # => true
Source
overrides?(type : TypeNode, method : StringLiteral | SymbolLiteral | MacroId) : BoolLiteral

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
Source
private?

Return true if self is private and false otherwise.

Source
public?

Return true if self is public and false otherwise.

Source
resolve

Returns self. This method exists so you can safely call resolve on a node and resolve it to a type, even if it's a type already.

Source
resolve?

Returns self. This method exists so you can safely call resolve on a node and resolve it to a type, even if it's a type already.

Source
size

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.

Source
struct?

Returns true if self is a struct, otherwise false.

module One; end

class Two; end

struct Three; end

{{One.struct?}}   # => false
{{Two.struct?}}   # => false
{{Three.struct?}} # => true
Source
subclasses

Returns the direct subclasses of this type.

Source
superclass

Returns the direct superclass of this type.

Source
type_vars

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

Source
union?

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

See also: #union_types.

{{String.union?}}              # => false
{{String?.union?}}             # => true
{{Union(String, Bool).union?}} # => true
Source
union_types

Returns the types forming a union type, if this is a union type. Otherwise returns this single type inside an array literal (so you can safely call union_types on any type and treat all types uniformly).

See also: #union?.

Source
visibility

Returns visibility of self as :public or :private?

Source