Crystal::Macros::TypeNode
Inherits Crystal::Macros::ASTNode
Represents a type in the program, like Int32 or String.
Instance methods
Returns true if self is the same as other or if
other is an ancestor of self.
Returns true if other is the same as self or if
self is an ancestor of other.
Returns the type for the given key in this named tuple type. Gives a compile error if this is not a named tuple type.
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
Returns the instance methods defined by this type, including those inherited from ancestors and base types (Reference, Value, and Object).
Returns the last Annotation with the given type
attached to this type or NilLiteral if there are none.
Returns an array of annotations with the given type
attached to this type, or an empty ArrayLiteral if there are none.
Returns an array of all annotations attached to this
type, or an empty ArrayLiteral if there are none.
Returns the class of this type. With this you can, for example, obtain class
methods by invoking type.class.methods.
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
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.
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).
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).mallocis atomic if and only ifThas no inner pointers;T.allocateis atomic if and only ifTis a reference type andReferenceStorage(T)has no inner pointers. NOTE: Like#instance_varsthis method must be called from within a method. The result may be incorrect when used in top-level code.
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).
Returns the instance type of this type, if it's a class type,
or self otherwise. This is the opposite of #class.
Returns the instance variables of this type. Can only be called from within methods (not top-level code), otherwise will return an empty list.
Returns the keys in this named tuple type. Gives a compile error if this is not a named tuple type.
Returns the instance methods defined by this type, without including inherited methods.
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
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
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
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
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.
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.
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.
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
Returns the type variables of the generic type. If the type is not generic, an empty array is returned.
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
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?.