class Crystal::Macros::MacroId

Overview

A fictitious node representing an identifier like, foo, Bar or something_else.

The parser doesn't create these nodes. Instead, you create them by invoking #id on some nodes. For example, invoking #id on a StringLiteral returns a MacroId for the string's content. Similarly, invoking ID on a SymbolLiteral, Call, Var and Path returns a MacroId for the node's content.

This allows you to treat strings, symbols, variables and calls uniformly. For example:

macro getter(name)
  def {{name.id}}
    @{{name.id}}
  end
end

getter unicorns
getter :unicorns
getter "unicorns"

All of the above macro calls work because we invoked #id, and the generated code looks like this:

def unicorns
  @unicorns
end

If we hadn't used #id, the generated code would have been this:

def unicorns
  @unicorns
end

def :unicorns
  @:unicorns
end

def "unicorns"
  @"unicorns"
end

The last two definitions are invalid and so will give a compile-time error.

Defined in:

compiler/crystal/macros.cr

Instance Method Summary

Instance Method Detail

def +(other : StringLiteral | CharLiteral) : MacroIdSource

Similar to String#+.

def <(other : StringLiteral | MacroId) : BoolLiteralSource

Similar to String#<

def =~(range : RegexLiteral) : BoolLiteralSource

Similar to String#=~.

def >(other : StringLiteral | MacroId) : BoolLiteralSource

Similar to String#>

def [](range : RangeLiteral) : MacroIdSource

Similar to String#[].

def camelcase(*, lower : BoolLiteral = false) : MacroIdSource

Similar to String#camelcase.

def capitalize : MacroIdSource

Similar to String#capitalize.

def chars : ArrayLiteral(CharLiteral)Source

Similar to String#chars.

def chomp : MacroIdSource

Similar to String#chomp.

def count(other : CharLiteral) : NumberLiteralSource

Similar to String#count.

def downcase : MacroIdSource

Similar to String#downcase.

def empty? : BoolLiteralSource

Similar to String#empty?.

def ends_with?(other : StringLiteral | CharLiteral) : BoolLiteralSource

Similar to String#ends_with?.

def gsub(regex : RegexLiteral, replacement : StringLiteral) : MacroIdSource

Similar to String#gsub.

def id : MacroIdSource

Returns a MacroId for this string's contents.

def includes?(search : StringLiteral | CharLiteral) : BoolLiteralSource

Similar to String#includes?.

def lines : ArrayLiteral(StringLiteral)Source

Similar to String#lines.

def size : NumberLiteralSource

Similar to String#size.

def split(node : ASTNode) : ArrayLiteral(StringLiteral)Source

Similar to String#split.

def split : ArrayLiteral(StringLiteral)Source

Similar to String#split.

def starts_with?(other : StringLiteral | CharLiteral) : BoolLiteralSource

Similar to String#starts_with?.

def strip : MacroIdSource

Similar to String#strip.

def titleize : MacroIdSource

Similar to String#titleize.

def to_i(base = 10)Source

Similar to String#to_i.

def tr(from : StringLiteral, to : StringLiteral) : MacroIdSource

Similar to String#tr.

def underscore : MacroIdSource

Similar to String#underscore.

def upcase : MacroIdSource

Similar to String#upcase.

© 2012–2021 Manas Technology Solutions.
Licensed under the Apache License, Version 2.0.
https://crystal-lang.org/api/1.2.1/Crystal/Macros/MacroId.html