---input--- # Examples taken from http://crystal-lang.org/docs/ # Copyright 2012-2018 Manas Technology Solutions. # Updated on May 17th, 2018 by @faustinoaq. require "http/server" server = HTTP::Server.new(8080) do |context| context.response.content_type = "text/plain" context.response.print "Hello world! The time is #{Time.now}" end puts "Listening on http://0.0.0.0:8080" server.listen module HTTP class RequestHandler end end alias NumericValue = Float32 | Float64 | Int32 | Int64 enum Time::DayOfWeek end class Greeting class_property global_greeting = "Hello world" @@default_greeting = "Hello world" def initialize(@custom_greeting = nil) end def print_greeting greeting = @custom_greeting || @@default_greeting puts greeting end end LUCKY_NUMBERS = [3, 7, 11] DOCUMENTATION_URL = "http://crystal-lang.org/docs" module Scorecard class Parser def parse(score_text) begin score_text.scan(SCORE_PATTERN) do |match| handle_match(match) end rescue err : ParseError # handle error ... end end end end module Money CURRENCIES = { "EUR" => 1.0, "ARS" => 10.55, "USD" => 1.12, "JPY" => 134.15, } class Amount getter :currency, :value def initialize(@currency, @value) end end class CurrencyConversion def initialize(@amount, @target_currency) end def amount # implement conversion ... end end end i = 0 while i < 10 proc = ->(x : Int32) do spawn do puts(x) end end proc.call(i) i += 1 end Fiber.yield # A buffered channel of capacity 2 channel = Channel(Int32).new(2) spawn do channel.send(1) channel.send(2) channel.send(3) end 3.times do |i| puts channel.receive end class MyDictionary(K, V) end MyBox.new(1) # :: MyBox(Int32) MyBox.new("hello") # :: MyBox(String) module Moo(T) def t T end end class Foo(U) include Moo(U) def initialize(@value : U) end end foo = Foo.new(1) foo.t # Int32 class Parent(T) end class Int32Child < Parent(Int32) end class GenericChild(T) < Parent(T) end class Person end a = 1 ptr = pointerof(a) ptr[100_000] = 2 # undefined behaviour, probably a segmentation fault alias Int32OrString = Int32 | String alias Int32OrNil = Int32? alias Int32OrNil_ = Int32 | ::Nil alias Int32Ptr = Int32* alias Int32Ptr_ = Pointer(Int32) alias Int32_8 = Int32[8] alias Int32_8_ = StaticArray(Int32, 8) alias Int32StringTuple = {Int32, String} alias Int32StringTuple_ = Tuple(Int32, String) alias Int32ToString = Int32 -> String alias Int32ToString_ = Proc(Int32, String) alias ProcThatReturnsInt32 = -> Int32 alias Int32AndCharToString = Int32, Char -> String alias ComplexProc = (Int32 -> Int32) -> String def foo(x : Int32) "instance" end def foo(x : Int32.class) "class" end foo 1 # "instance" foo Int32 # "class" class Parent end class Child1 < Parent end class Child2 < Parent end ary = [] of Parent.class ary << Child1 ary << Child2 # Same as not specifying a restriction, not very useful def foo(x : _) end # A bit more useful: any two arguments Proc that returns an Int32: def foo(x : _, _ -> Int32) end # alias SameAsInt32 = typeof(2) # alias Int32OrString_ = typeof(1, "a") class Person def initialize(name) @name = name @age = 0 end def name @name end def age @age end end john = Person.new "John" peter = Person.new "Peter" john.name # => "John" john.age # => 0 peter.name # => "Peter" class Person def self.new(name) instance = Person.allocate instance.initialize(name) instance end end if a.is_a?(String) # here a is a String end if b.is_a?(Number) # here b is a Number end a = some_condition ? 1 : "hello" # a : Int32 | String if a.is_a?(Number) # a : Int32 else # a : String end if a.is_a?(String) && b.is_a?(Number) # here a is a String and b is a Number end a.+(b) struct Vector2 getter x, y def initialize(@x, @y) end def +(other) Vector2.new(x + other.x, y + other.y) end end v1 = Vector2.new(1, 2) v2 = Vector2.new(3, 4) v1 + v2 # => Vector2(@x=4, @y=6) struct Vector2 def - Vector2.new(-x, -y) end end v1 = Vector2.new(1, 2) -v1 # => Vector2(@x=-1, @y=-2) class MyArray def [](index) # ... end def [](index1, index2, index3) # ... end def []=(index, value) # ... end end array = MyArray.new array[1] # invokes the first method array[1, 2, 3] # invokes the second method array[1] = 2 # invokes the third method array.[](1) # invokes the first method array.[](1, 2, 3) # invokes the second method array.[]=(1, 2) # invokes the third method raise "OH NO!" raise Exception.new("Some error") class MyException < Exception end begin raise MyException.new("OH NO!") rescue ex : MyException puts "Rescued MyException: #{ex.message}" end begin # ... rescue ex : MyException | MyOtherException # only MyException or MyOtherException rescue # any other kind of exception ensure puts "Cleanup..." end def some_method something_dangerous rescue # execute if an exception is raised end array = [1, 2, 3] array[4] # raises because of IndexError array[4]? # returns nil because of index out of bounds def some_proc(&block : Int32 -> Int32) block end x = 0 proc = ->(i : Int32) { x += i } proc = some_proc(&proc) proc.call(1) # => 1 proc.call(10) # => 11 x # => 11 def add(x, y) x + y end adder = ->add(Int32, Int32) adder.call(1, 2) # => 3 module Curses class Window end end Curses::Window.new module ItemsSize def size items.size end end class Items include ItemsSize def items [1, 2, 3] end end items = Items.new items.size # => 3 module Base64 extend self def encode64(string) # ... end def decode64(string) # ... end end Base64.encode64 "hello" # => "aGVsbG8=" if some_condition a = 1 else a = "hello" end a_as_int = a.as(Int32) a_as_int.abs # works, compiler knows that a_as_int is Int32 ptr = Pointer(Int32).malloc(1) ptr.as(Int8*) # :: Pointer(Int8) array = [1, 2, 3] # object_id returns the address of an object in memory, # so we create a pointer with that address ptr = Pointer(Void).new(array.object_id) # Now we cast that pointer to the same type, and # we should get the same value array2 = ptr.as(Array(Int32)) array2.same?(array) # => true a = 1 b = a.as(Int32 | Float64) b # :: Int32 | Float64 ary = [1, 2, 3] # We want to create an array 1, 2, 3 of Int32 | Float64 ary2 = ary.map { |x| x.as(Int32 | Float64) } ary2 # :: Array(Int32 | Float64) ary2 << 1.5 # OK class Person def initialize(@name) end def name @name end end a = [] of Person x = a.map { |f| f.name } # Error: can't infer block return type a = [] of Person x = a.map { |f| f.name.as(String) } # OK Person.new "John" a = [] of Person x = a.map { |f| f.name } # OK loop do do_something break if some_condition end class Point def initialize(@x, @y) end end Point.new 1, 2 # 2 x Int32 = 2 x 4 = 8 instance_sizeof(Point) # => 12 a = 1 while a < 5 a += 1 if a == 3 next end puts a end # The above prints the numbers 2, 4 and 5 lib C # In C: double cos(double x) fun cos(value : Float64) : Float64 fun getch : Int32 fun srand(seed : UInt32) fun exit(status : Int32) : NoReturn fun printf(format : UInt8*, ...) : Int32 end C.cos(1.5) # => 0.0707372 C.srand(1_u32) a = 1 b = 2 C.printf "%d + %d = %d\n", a, b, a + b lib LibSDL fun init = SDL_Init(flags : UInt32) : Int32 end lib LLVMIntrinsics fun ceil_f32 = "llvm.ceil.f32"(value : Float32) : Float32 end lib MyLib fun my_fun(some_size : LibC::SizeT) end @[Link("pcre")] lib LibPCRE end lib C {% if flag?(:x86_64) %} alias SizeT = UInt64 {% else %} alias SizeT = UInt32 {% end %} fun memcmp(p1 : Void*, p2 : Void*, size : C::SizeT) : Int32 end lib X enum SomeEnum Ten = 10 Twenty = 10 * 2 ThirtyTwo = 1 << 5 end end lib X enum SomeEnum A = 1_u32 end end X::SomeEnum::Zero # => 0_i8 X::SomeEnum::Two # => 2_i8 lib X fun callback(f : Int32 -> Int32) end f = ->(x : Int32) { x + 1 } X.callback(f) X.callback ->(x) { x + 1 } X.callback nil lib LibFoo fun store_callback(callback : ->) fun execute_callback end LibFoo.store_callback ->{ raise "OH NO!" } LibFoo.execute_callback lib LibFoo fun store_callback(callback : ->) @[Raises] fun execute_callback end @[Link("pcre")] lib PCRE INFO_CAPTURECOUNT = 2 end PCRE::INFO_CAPTURECOUNT # => 2 lib U # In C: # # union IntOrFloat { # int some_int; # double some_float; # }; union IntOrFloat some_int : Int32 some_float : Float64 end end value = U::IntOrFloat.new value = uninitialized U::IntOrFlaot value.some_int # => some garbage value value = U::IntOrFloat.new value.some_int = 1 value.some_int # => 1 value.some_float # => 4.94066e-324 def change_it(value) value.some_int = 1 end value = U::IntOrFloat.new change_it value value.some_int # => 0 lib C # In C: # # struct TimeZone { # int minutes_west; # int dst_time; # }; struct TimeZone minutes_west : Int32 dst_time : Int32 end end lib C # This is a forward declaration struct Node end struct Node node : Node* end end tz = C::TimeZone.new tz = uninitialized C::TimeZone tz.minutes_west # => some garbage value tz = C::TimeZone.new tz.minutes_west = 1 tz.minutes_west # => 1 tz = C::TimeZone.new minutes_west: 1, dst_time: 2 tz.minutes_west # => 1 tz.dst_time # => 2 def change_it(tz) tz.minutes_west = 1 end tz = C::TimeZone.new change_it tz tz.minutes_west # => 0 lib C $errno : Int32 end C.errno # => some value C.errno = 0 C.errno # => 0 lib C @[ThreadLocal] $errno : Int32 end lib C fun waitpid(pid : Int32, status_ptr : Int32*, options : Int32) : Int32 end status_ptr = uninitialized Int32 C.waitpid(pid, pointerof(status_ptr), options) C.waitpid(pid, out status_ptr, options) lib X type CInt = Int32 end {% if flag?(:x86_64) %} # some specific code for 64 bits platforms {% else %} # some specific code for non-64 bits platforms {% end %} {% if flag?(:linux) && flag?(:x86_64) %} # some specific code for linux 64 bits {% end %} lib C {% if flag?(:linux) && flag?(:x86_64) %} struct SomeStruct some_field : Int32 end {% else %} struct SomeStruct some_field : Int64 end {% end %} end # Assigns to a local variable local = 1 # Assigns to a global property class Global class_property global1 = 1 class_getter global2 = 2 class_setter global3 = 3 # Fails on nil class_property! global4 = 4 class_getter! global5 = 5 class_setter! global6 = 6 end class Testing # Assigns to an instance variable @instance = 2 # Assigns to a class variable @@class = 3 end local += 1 # same as: local = local + 1 # The above is valid with these operators: # +, -, *, /, %, |, &, ^, **, <<, >> local ||= 1 # same as: local || (local = 1) local &&= 1 # same as: local && (local = 1) # A setter person.name=("John") # The above can be written as: person.name = "John" # An indexed assignment objects.[]=(2, 3) # The above can be written as: objects[2] = 3 # Not assignment-related, but also syntax sugar: objects.[](2, 3) # The above can be written as: objects[2, 3] person.age += 1 # same as: person.age = person.age + 1 person.name ||= "John" # same as: person.name || (person.name = "John") person.name &&= "John" # same as: person.name && (person.name = "John") objects[1] += 2 # same as: objects[1] = objects[1] + 2 objects[1] ||= 2 # same as: objects[1]? || (objects[1] = 2) objects[1] &&= 2 # same as: objects[1]? && (objects[1] = 2) alias PInt32 = Pointer(Int32) ptr = PInt32.malloc(1) # : Pointer(Int32) alias RecArray = Array(Int32) | Array(RecArray) ary = [] of RecArray ary.push [1, 2, 3] ary.push ary ary # => [[1, 2, 3], [...]] module Json alias Type = Nil | Bool | Int64 | Float64 | String | Array(Type) | Hash(String, Type) end a = 1 if a > 0 a = 10 end a # => 10 b = 1 if b > 2 b = 10 else b = 20 end b # => 20 if some_condition do_something elsif some_other_condition do_something_else else do_that end a = 1 if some_condition a = "hello" else a = true end # a : String | Bool b = 1 if some_condition b = "hello" end # b : Int32 | String if some_condition c = 1 else c = "hello" end # c : Int32 | String if some_condition d = 1 end # d : Int32 | Nil a = 1 if some_condition a = "hello" # a : String a.size end # a : String | Int32 if some_condition e = 1 else e = "hello" # e : String return end # e : Int32 enum Color : UInt8 Red # 0 Green # 1 Blue = 5 # overwritten to 5 Yellow # 6 (5 + 1) def red? self == Color::Red end end Color::Red.value # :: UInt8 @[Flags] enum IOMode Read # 1 Write # 2 Async # 4 end IOMode::None.value # => 0 IOMode::All.value # => 7 puts(Color::Red) # prints "Red" puts(IOMode::Write | IOMode::Async) # prints "Write, Async" puts Color.new(1) # => prints "Green" puts Color.new(10) # => prints "10" Color::Red.red? # => true Color::Blue.red? # => false def paint(color : Color) case color when Color::Red # ... else # Unusual, but still can happen raise "unknown color: #{color}" end end paint Color::Red def paint(color : Symbol) case color when :red # ... else raise "unknown color: #{color}" end end paint :red name = "Crystal" age = 1 flower = "Tulip" # At this point 'flower' is a String flower = 1 # At this point 'flower' is an Int32 class Foo def finalize # Invoked when Foo is garbage-collected puts "Bye bye from #{self}!" end end # Prints "Bye bye ...!" for ever loop do Foo.new end # Defines a method in the program def add(x, y) x + y end # Invokes the add method in the program add(1, 2) # => 3 def even?(num) if num % 2 == 0 return true end return false end def add(x, y) x + y end class Foo def bar # invokes the program's add method add(1, 2) # invokes Foo's baz method baz(1, 2) end def baz(x, y) x * y end end def baz(x, y) x + y end class Foo def bar baz(4, 2) # => 2 ::baz(4, 2) # => 6 end def baz(x, y) x - y end end x = 1 def add(y) x + y # error: undefined local variable or method 'x' end add(2) add 1, 2 # same as add(1, 2) class Counter @@instances = 0 def initialize @@instances += 1 end def self.instances @@instances end end Counter.instances # => 0 Counter.new Counter.new Counter.new Counter.instances # => 3 class Counter def self.increment @@instances += 1 end end Counter.increment # Error: undefined method '+' for Nil class Parent @@counter = 0 end class Child < Parent def self.counter @@counter end end Child.counter # => nil unless some_condition then_expression else else_expression end # Can also be written as a suffix close_door unless door_closed? a = 1 b = typeof(a) # => Int32 typeof(1, "a", 'a') # => (Int32 | String | Char) hash = {} of Int32 => String another_hash = typeof(hash).new # :: Hash(Int32, String) class Array def self.elem_type(typ) if typ.is_a?(Array) elem_type(typ.first) else typ end end end nest = [1, ["b", [:c, ['d']]]] flat = Array(typeof(Array.elem_type(nest))).new typeof(nest) # => Array(Int32 | Array(String | Array(Symbol | Array(Char)))) typeof(flat) # => Array(String | Int32 | Symbol | Char) a = 2 if some_condition x = 0 proc = ->{ x += 1; x } proc.call # => 1 proc.call # => 2 x # => 2 def counter x = 0 ->{ x += 1; x } end proc = counter proc.call # => 1 proc.call # => 2 def foo yield end x = 1 foo do x = "hello" end x # : Int32 | String x = 1 foo do x = "hello" end x # : Int32 | String x = 'a' x # : Char def capture(&block) block end x = 1 capture { x = "hello" } x = 'a' x # : Int32 | String | Char def capture(&block) block end x = 1 ->{ x = "hello" } x = 'a' x # : Int32 | String | Char abstract class Animal # Makes this animal talk abstract def talk end class Dog < Animal def talk "Woof!" end end class Cat < Animal def talk "Miau" end end class Person getter pet def initialize(@name, @pet) end end john = Person.new "John", Dog.new peter = Person.new "Peter", Cat.new john.pet.talk # => "Woof!" a = 1 > 2 ? 3 : 4 # The above is the same as: a = if 1 > 2 3 else 4 end def some_method : String "hello" end PI = 3.14 module Earth RADIUS = 6_371_000 end PI # => 3.14 Earth::RADIUS # => 6_371_000 TEN = begin a = 0 while a < 10 a += 1 end a end TEN # => 10 class Person getter name def initialize(@name) @age = 0 end end john = Person.new "John" john.name # => "John" john.name.size # => 4 one = Person.new 1 one.name # => 1 one.name + 2 # => 3 john = Person.new "John" one = Person.new 1 john = Person.new "John" one = Person.new 1 # Error: undefined method 'size' for Int32 john.name.size # Error: no overload matches 'String#+' with types Int32 john.name + 3 john = Person.new "John" john.name.size one = Person.new 1 class Person getter name def initialize(@name) @age = 0 end def address @address end def address=(@address) end end john = Person.new "John" john.address = "Argentina" # Error: undefined method 'size' for Nil john.address.size class Person @age = 0 def initialize(@name) end end class Person @age : Int32 def initialize(@name) @age = 0 end end a = if 2 > 1 3 else 4 end a # => 3 if 1 > 2 else 3 end def twice(&block) yield yield end twice() do puts "Hello!" end twice do puts "Hello!" end twice { puts "Hello!" } def twice yield 1 yield 2 end twice do |i| puts "Got #{i}" end twice { |i| puts "Got #{i}" } def many yield 1, 2, 3 end many do |x, y, z| puts x + y + z end # Output: 6 def many yield 1, 2, 3 end many do |x, y| puts x + y end # Output: 3 def twice yield yield end twice do |i| puts i.inspect end def some yield 1, 'a' yield true, "hello" yield 2 end some do |first, second| # first is Int32 | Bool # second is Char | String | Nil end method do |argument| argument.some_method end method(&.some_method) method &.some_method(arg1, arg2) method &.+(2) method &.[index] def twice v1 = yield 1 puts v1 v2 = yield 2 puts v2 end twice do |i| i + 1 end ary = [1, 2, 3] ary.map { |x| x + 1 } # => [2, 3, 4] ary.select { |x| x % 2 == 1 } # => [1, 3] def transform(value) yield value end transform(1) { |x| x + 1 } # => 2 def thrice puts "Before 1" yield 1 puts "Before 2" yield 2 puts "Before 3" yield 3 puts "After 3" end thrice do |i| if i == 2 break end end def twice yield 1 yield 2 end twice { |i| i + 1 } # => 3 twice { |i| break "hello" } # => "hello" value = twice do |i| if i == 1 break "hello" end i + 1 end value # :: Int32 | String values = twice { break 1, 2 } values # => {1, 2} value = twice { break } value # => nil def twice yield 1 yield 2 end twice do |i| if i == 1 puts "Skipping 1" next end puts "Got #{i}" end def twice v1 = yield 1 puts v1 v2 = yield 2 puts v2 end twice do |i| if i == 1 next 10 end i + 1 end # Output # 10 # 3 class Foo def one 1 end def yield_with_self with self yield end def yield_normally yield end end def one "one" end Foo.new.yield_with_self { one } # => 1 Foo.new.yield_normally { one } # => "one" def twice yield 1 yield 2 end twice do |i| puts "Got: #{i}" end i = 1 puts "Got: #{i}" i = 2 puts "Got: #{i}" 3.times do |i| puts i end struct Int def times i = 0 while i < self yield i i += 1 end end end i = 0 while i < 3 puts i i += 1 end class Person def initialize(@name) end def greet puts "Hi, I'm #{@name}" end end class Employee < Person end employee = Employee.new "John" employee.greet # "Hi, I'm John" class Person def initialize(@name) end end class Employee < Person def initialize(@name, @company_name) end end Employee.new "John", "Acme" # OK Employee.new "Peter" # Error: wrong number of arguments # for 'Employee:Class#new' (1 for 2) class Person def greet(msg) puts "Hi, #{msg}" end end class Employee < Person def greet(msg) puts "Hello, #{msg}" end end p = Person.new p.greet "everyone" # "Hi, everyone" e = Employee.new e.greet "everyone" # "Hello, everyone" class Person def greet(msg) puts "Hi, #{msg}" end end class Employee < Person def greet(msg : Int32) puts "Hi, this is a number: #{msg}" end end e = Employee.new e.greet "everyone" # "Hi, everyone" e.greet 1 # "Hi, this is a number: 1" class Person def greet(msg) puts "Hello, " # {msg}" end end class Employee < Person def greet(msg) super # Same as: super(msg) super("another message") end end def int_to_int(&block : Int32 -> Int32) block end proc = int_to_int { |x| x + 1 } proc.call(1) # => 2 class Model def on_save(&block) @on_save_callback = block end def save if callback = @on_save_callback callback.call end end end model = Model.new model.on_save { puts "Saved!" } model.save # prints "Saved!" def some_proc(&block : Int32 ->) block end proc = some_proc { |x| x + 1 } proc.call(1) # void def some_proc(&block : Int32 -> _) block end proc = some_proc { |x| x + 1 } proc.call(1) # 2 proc = some_proc { |x| x.to_s } proc.call(1) # "1" macro update_x x = 1 end x = 0 update_x x # => 1 macro dont_update_x %x = 1 puts %x end x = 0 dont_update_x # outputs 1 x # => 0 macro fresh_vars_sample(*names) # First declare vars {% for name, index in names %} print "Declaring: ", "%name{index}", '\n' %name{index} = {{index}} {% end %} # Then print them {% for name, index in names %} print "%name{index}: ", %name{index}, '\n' {% end %} end fresh_vars_sample a, b, c # Sample output: # Declaring: __temp_255 # Declaring: __temp_256 # Declaring: __temp_257 # __temp_255: 0 # __temp_256: 1 # __temp_257: 2 class Object macro instance_vars_names def instance_vars_names : Array(String) {{ @type.instance_vars.map &.name.stringify }} end end end class Person def initialize(@name, @age) end end person = Person.new "John", 30 person.instance_vars_names # => ["name", "age"] class Object macro has_instance_var?(name) def has_instance_var?(name) : Bool # We cannot access name inside the macro expansion here, # instead we need to use the macro language to construct an array # and do the inclusion check at runtime. {{ @type.instance_vars.map &.name.stringify }}.includes? name end end end person = Person.new "John", 30 person.has_instance_var?("name") # => true person.has_instance_var?("birthday") # => false class Parent macro inherited def {{@type.name.downcase.id}} 1 end end end class Child < Parent end Child.new.child # => 1 macro method_missing(name, args, block) print "Got ", {{name.id.stringify}}, " with ", {{args.size}}, " arguments", '\n' end foo # Prints: Got foo with 0 arguments bar 'a', 'b' # Prints: Got bar with 2 arguments sizeof(Int32) # => 4 sizeof(Int64) # => 8 # On a 64 bits machine sizeof(Pointer(Int32)) # => 8 sizeof(String) # => 8 a = 1 sizeof(typeof(a)) # => 4 class Foo macro emphasize(value) "***#{ {{value}} }***" end def yield_with_self with self yield end end Foo.new.yield_with_self { emphasize(10) } # => "***10***" # This generates: # # def :foo # 1 # end define_method :foo, 1 macro define_method(name, content) def {{name.id}} {{content}} end end # This correctly generates: # # def foo # 1 # end define_method :foo, 1 macro define_method(name, content) def {{name}} {% if content == 1 %} "one" {% else %} {{content}} {% end %} end end define_method foo, 1 define_method bar, 2 foo # => one bar # => 2 {% if env("TEST") %} puts "We are in test mode" {% end %} macro define_dummy_methods(names) {% for name, index in names %} def {{name.id}} {{index}} end {% end %} end define_dummy_methods [foo, bar, baz] foo # => 0 bar # => 1 baz # => 2 macro define_dummy_methods(hash) {% for key, value in hash %} def {{key.id}} {{value}} end {% end %} end define_dummy_methods({foo: 10, bar: 20}) foo # => 10 bar # => 20 {% for name, index in ["foo", "bar", "baz"] %} def {{name.id}} {{index}} end {% end %} foo # => 0 bar # => 1 baz # => 2 macro define_dummy_methods(*names) {% for name, index in names %} def {{name.id}} {{index}} end {% end %} end define_dummy_methods foo, bar, baz foo # => 0 bar # => 1 baz # => 2 macro println(*values) print {{*values}}, '\n' end println 1, 2, 3 # outputs 123\n VALUES = [1, 2, 3] {% for value in VALUES %} puts {{value}} {% end %} until some_condition do_this end # The above is the same as: while !some_condition do_this end a = some_condition ? nil : 3 # a is Int32 or Nil if a # Since the only way to get here is if a is truthy, # a can't be nil. So here a is Int32. a.abs end if a = some_expression # here a is not nil end if a && b # here both a and b are guaranteed not to be Nil end if @a # here @a can be nil end # First option: assign it to a variable if a = @a # here a can't be nil end # Second option: use `Object#try` found in the standard library @a.try do |a| # here a can't be nil end if method # first call to a method that can return Int32 or Nil # here we know that the first call did not return Nil method # second call can still return Int32 or Nil end class Person def become_older(by = 1) @age += by end end john = Person.new "John" john.age # => 0 john.become_older john.age # => 1 john.become_older 2 john.age # => 3 john.become_older by: 5 def some_method(x, y = 1, z = 2, w = 3) # do something... end some_method 10 # x = 10, y = 1, z = 2, w = 3 some_method 10, z: 10 # x = 10, y = 1, z = 10, w = 3 some_method 10, w: 1, y: 2, z: 3 # x = 10, y = 2, z = 3, w = 1 case exp when value1, value2 do_something when value3 do_something_else else do_another_thing end case var when String # var : String do_something when Int32 # var : Int32 do_something_else else # here var is neither a String nor an Int32 do_another_thing end case num when .even? do_something when .odd? do_something_else end case when cond1, cond2 do_something when cond3 do_something_else end a = 1 a.responds_to?(:abs) # => true a.responds_to?(:size) # => false foo_or_bar = /foo|bar/ heeello = /h(e+)llo/ integer = /\d+/ r = /foo/imx slash = /\// r = %r(regex with slash: /) "hello world" "\"" # double quote "\\" # backslash "\e" # escape "\f" # form feed "\n" # newline "\r" # carriage return "\t" # tab "\v" # vertical tab "\101" # == "A" "\123" # == "S" "\12" # == "\n" "\1" # string with one character with code point 1 "\u0041" # == "A" "\u{41}" # == "A" "\u{1F52E}" "hello world" # same as "hello\n world" "hello " \ "world, " \ "no newlines" # same as "hello world, no newlines" "hello \ world, \ no newlines" # same as "hello world, no newlines" %(hello ("world")) # => "hello (\"world\")" %[hello ["world"]] # => "hello [\"world\"]" %{hello {"world"}} # => "hello {\"world\"}" %> # => "hello <\"world\">" %|hello "world"| # => "hello \"world\"" <<-XML XML # Same as "Hello\n world" <<-STRING Hello world STRING # Same as " Hello\n world" <<-STRING Hello world STRING a = 1 b = 2 "sum = #{a + b}" # "sum = 3" 1.0 # Float64 1.0_f32 # Float32 1_f32 # Float32 1e10 # Float64 1.5e10 # Float64 1.5e-7 # Float64 +1.3 # Float64 -0.5 # Float64 1_000_000.111_111 # better than 1000000.111111 'a' 'z' '0' '_' "あ" '\'' # single quote '\\' # backslash '\e' # escape '\f' # form feed '\n' # newline '\r' # carriage return '\t' # tab '\v' # vertical tab "\101" # == 'A' "\123" # == 'S' "\12" # == '\n' "\1" # code point 1 '\u0041' # == 'A' '\u{41}' # == 'A' '\u{1F52E}' {1 => 2, 3 => 4} # Hash(Int32, Int32) {1 => 2, 'a' => 3} # Hash(Int32 | Char, Int32) {} of Int32 => Int32 # same as Hash(Int32, Int32).new {key1: 'a', key2: 'b'} # Hash(Symbol, Char) {"key1": 'a', "key2": 'b'} # Hash(String, Char) MyType{"foo" => "bar"} tmp = MyType.new tmp["foo"] = "bar" tmp tmp = MyType(typeof("foo"), typeof("bar")).new tmp["foo"] = "bar" tmp MyType(String, String){"foo" => "bar"} :hello :good_bye # With spaces and symbols :"symbol with spaces" # Ending with question and exclamation marks :question? :exclamation! # For the operators :+ :- :* :/ :== :< :<= :> :>= :! :!= :=~ :!~ :& :| :^ :~ :** :>> :<< :% :[] :[]? :[]= :<=> :=== x..y # an inclusive range, in mathematics: [x, y] x...y # an exclusive range, in mathematics: [x, y) # A proc without arguments ->{ 1 } # Proc(Int32) # A proc with one argument ->(x : Int32) { x.to_s } # Proc(Int32, String) # A proc with two arguments: ->(x : Int32, y : Int32) { x + y } # Proc(Int32, Int32, Int32) Proc(Int32, String).new { |x| x.to_s } # Proc(Int32, String) proc = ->(x : Int32, y : Int32) { x + y } proc.call(1, 2) # => 3 def one 1 end proc = ->one proc.call # => 1 def plus_one(x) x + 1 end proc = ->plus_one(Int32) proc.call(41) # => 42 str = "hello" proc = ->str.count(Char) proc.call('e') # => 1 proc.call('l') # => 2 tuple = {1, "hello", 'x'} # Tuple(Int32, String, Char) tuple[0] # => 1 (Int32) tuple[1] # => "hello" (String) tuple[2] # => 'x' (Char) [1, 2, 3] # Array(Int32) [1, "hello", 'x'] # Array(Int32 | String | Char) [] of Int32 # same as Array(Int32).new %w(one two three) # ["one", "two", "three"] %i(one two three) # [:one, :two, :three] MyType{1, 2, 3} tmp = MyType.new tmp << 1 tmp << 2 tmp << 3 tmp tmp = MyType(typeof(1, 2, 3)).new tmp << 1 tmp << 2 tmp << 3 tmp MyType(Int32 | String){1, 2, "foo"} nil 1 # Int32 1_i8 # Int8 1_i16 # Int16 1_i32 # Int32 1_i64 # Int64 1_u8 # UInt8 1_u16 # UInt16 1_u32 # UInt32 1_u64 # UInt64 +10 # Int32 -20 # Int32 2147483648 # Int64 9223372036854775808 # UInt64 1_000_000 # better than 1000000 0b1101 # == 13 0o123 # == 83 0xFE012D # == 16646445 0xfe012d # == 16646445 true # A Bool that is true false # A Bool that is false a = 1 ptr = pointerof(a) ptr.value = 2 a # => 2 class Point def initialize(@x, @y) end def x @x end def x_ptr pointerof(@x) end end point = Point.new 1, 2 ptr = point.x_ptr ptr.value = 10 point.x # => 10 def add(x : Number, y : Number) x + y end # Ok add 1, 2 # Ok # Error: no overload matches 'add' with types Bool, Bool add true, false def add(x, y) x + y end add true, false # A class that has a + method but isn't a Number class Six def +(other) 6 + other end end # add method without type restrictions def add(x, y) x + y end # OK add Six.new, 10 # add method with type restrictions def restricted_add(x : Number, y : Number) x + y end # Error: no overload matches 'restricted_add' with types Six, Int32 restricted_add Six.new, 10 class Person def ==(other : self) other.name == name end def ==(other) false end end john = Person.new "John" another_john = Person.new "John" peter = Person.new "Peter" john == another_john # => true john == peter # => false (names differ) john == 1 # => false (because 1 is not a Person) class Person def self.compare(p1 : self, p2 : self) p1.name == p2.name end end john = Person.new "John" peter = Person.new "Peter" Person.compare(john, peter) # OK def foo(x : Int32) end foo 1 # OK foo "hello" # Error def foo(x : Int32.class) end foo Int32 # OK foo String # Error def foo(x : Int32.class) puts "Got Int32" end def foo(x : String.class) puts "Got String" end foo Int32 # prints "Got Int32" foo String # prints "Got String" def foo(*args : Int32) end def foo(*args : String) end foo 1, 2, 3 # OK, invokes first overload foo "a", "b", "c" # OK, invokes second overload foo 1, 2, "hello" # Error foo() # Error def foo # This is the empty-tuple case end def foo(x : T) T end foo(1) # => Int32 foo("hello") # => String def foo(x : Array(T)) T end foo([1, 2]) # => Int32 foo([1, "a"]) # => (Int32 | String) def foo(x : T.class) Array(T) end foo(Int32) # => Array(Int32) foo(String) # => Array(String) class Person # Increases age by one def become_older @age += 1 end # Increases age by the given number of years def become_older(years : Int32) @age += years end # Increases age by the given number of years, as a String def become_older(years : String) @age += years.to_i end # Yields the current age of this person and increases # its age by the value returned by the block def become_older @age += yield @age end end person = Person.new "John" person.become_older person.age # => 1 person.become_older 5 person.age # => 6 person.become_older "12" person.age # => 18 person.become_older do |current_age| current_age < 20 ? 10 : 30 end person.age # => 28 a = 1 a.is_a?(Int32) # => true a.is_a?(String) # => false a.is_a?(Number) # => true a.is_a?(Int32 | String) # => true # One for each thread @[ThreadLocal] values = [] of Int32 @[AlwaysInline] def foo 1 end @[NoInline] def foo 1 end lib LibFoo @[CallConvention("X86_StdCall")] fun foo : Int32 end def sum(*elements) total = 0 elements.each do |value| total += value end total end # elements is Tuple(Int32, Int32, Int32, Float64) sum 1, 2, 3, 4.5 if a.responds_to?(:abs) # here a's type will be reduced to those responding to the 'abs' method end a = some_condition ? 1 : "hello" # a : Int32 | String if a.responds_to?(:abs) # here a will be Int32, since Int32#abs exists but String#abs doesn't else # here a will be String end if (a = @a).responds_to?(:abs) # here a is guaranteed to respond to `abs` end def capture(&block) block end def invoke(&block) block.call end proc = capture { puts "Hello" } invoke(&proc) # prints "Hello" def capture(&block) block end def twice yield yield end proc = capture { puts "Hello" } twice &proc twice &->{ puts "Hello" } def say_hello puts "Hello" end twice &->say_hello def foo yield 1 end def wrap_foo puts "Before foo" foo do |x| yield x end puts "After foo" end wrap_foo do |i| puts i end def foo yield 1 end def wrap_foo(&block : Int32 -> _) puts "Before foo" foo(&block) puts "After foo" end wrap_foo do |i| puts i end foo_forward do |i| break # error end a = 2 while (a += 1) < 20 if a == 10 # goes to 'puts a' break end end puts a # => 10 class Person private def say(message) puts message end def say_hello say "hello" # OK, no receiver self.say "hello" # Error, self is a receiver other = Person.new "Other" other.say "hello" # Error, other is a receiver end end class Employee < Person def say_bye say "bye" # OK end end module Namespace class Foo protected def foo puts "Hello" end end class Bar def bar # Works, because Foo and Bar are under Namespace Foo.new.foo end end end Namespace::Bar.new.bar class Person protected def self.say(message) puts message end def say_hello Person.say "hello" end end buffer = uninitialized UInt8[256] foo = rand(5) > 1 ? 1 : nil foo.not_nil!.to_i ---tokens--- '# Examples taken from http://crystal-lang.org/docs/' Comment.Single '\n' Text '# Copyright 2012-2018 Manas Technology Solutions.' Comment.Single '\n' Text '# Updated on May 17th, 2018 by @faustinoaq.' Comment.Single '\n\n' Text 'require' Keyword ' ' Text '"' Literal.String.Double 'http/server' Literal.String.Double '"' Literal.String.Double '\n\n' Text 'server' Name ' ' Text '=' Operator ' ' Text 'HTTP' Name '::' Operator 'Server' Name '.' Operator 'new' Name '(' Punctuation '8080' Literal.Number.Integer ')' Punctuation ' ' Text 'do' Keyword ' ' Text '|' Operator 'context' Name '|' Operator '\n ' Text 'context' Name '.' Operator 'response' Name '.' Operator 'content_type' Name ' ' Text '=' Operator ' ' Text '"' Literal.String.Double 'text/plain' Literal.String.Double '"' Literal.String.Double '\n ' Text 'context' Name '.' Operator 'response' Name '.' Operator 'print' Name ' ' Text '"' Literal.String.Double 'Hello world! The time is ' Literal.String.Double '#{' Literal.String.Interpol 'Time' Name '.' Operator 'now' Name '}' Literal.String.Interpol '"' Literal.String.Double '\n' Text 'end' Keyword '\n\n' Text 'puts' Name.Builtin ' ' Text '"' Literal.String.Double 'Listening on http://0.0.0.0:8080' Literal.String.Double '"' Literal.String.Double '\n' Text 'server' Name '.' Operator 'listen' Name '\n\n' Text 'module' Keyword ' ' Text 'HTTP' Name.Namespace '\n ' Text 'class' Keyword ' ' Text 'RequestHandler' Name.Class '\n ' Text 'end' Keyword '\n' Text 'end' Keyword '\n\n' Text 'alias' Keyword ' ' Text 'NumericValue' Name.Class ' ' Text '=' Operator ' ' Text 'Float32' Name ' ' Text '|' Operator ' ' Text 'Float64' Name ' ' Text '|' Operator ' ' Text 'Int32' Name ' ' Text '|' Operator ' ' Text 'Int64' Name '\n\n' Text 'enum' Keyword ' ' Text 'Time::' Name.Namespace 'DayOfWeek' Name.Class '\n' Text 'end' Keyword '\n\n' Text 'class' Keyword ' ' Text 'Greeting' Name.Class '\n ' Text 'class_property' Name.Builtin.Pseudo ' ' Text 'global_greeting' Name ' ' Text '=' Operator ' ' Text '"' Literal.String.Double 'Hello world' Literal.String.Double '"' Literal.String.Double '\n\n ' Text '@@default_greeting' Name.Variable.Class ' ' Text '=' Operator ' ' Text '"' Literal.String.Double 'Hello world' Literal.String.Double '"' Literal.String.Double '\n\n ' Text 'def' Keyword ' ' Text 'initialize' Name.Function '(' Punctuation '@custom_greeting' Name.Variable.Instance ' ' Text '=' Operator ' ' Text 'nil' Keyword.Constant ')' Punctuation '\n ' Text 'end' Keyword '\n\n ' Text 'def' Keyword ' ' Text 'print_greeting' Name.Function '\n ' Text 'greeting' Name ' ' Text '=' Operator ' ' Text '@custom_greeting' Name.Variable.Instance ' ' Text '||' Operator ' ' Text '@@default_greeting' Name.Variable.Class '\n ' Text 'puts' Name.Builtin ' ' Text 'greeting' Name '\n ' Text 'end' Keyword '\n' Text 'end' Keyword '\n\n' Text 'LUCKY_NUMBERS' Name.Constant ' ' Text '=' Operator ' ' Text '[' Operator '3' Literal.Number.Integer ',' Punctuation ' ' Text '7' Literal.Number.Integer ',' Punctuation ' ' Text '11' Literal.Number.Integer ']' Operator '\n' Text 'DOCUMENTATION_URL' Name.Constant ' ' Text '=' Operator ' ' Text '"' Literal.String.Double 'http://crystal-lang.org/docs' Literal.String.Double '"' Literal.String.Double '\n\n' Text 'module' Keyword ' ' Text 'Scorecard' Name.Namespace '\n ' Text 'class' Keyword ' ' Text 'Parser' Name.Class '\n ' Text 'def' Keyword ' ' Text 'parse' Name.Function '(' Punctuation 'score_text' Name ')' Punctuation '\n ' Text 'begin' Keyword '\n ' Text 'score_text' Name '.' Operator 'scan' Name '(' Punctuation 'SCORE_PATTERN' Name.Constant ')' Punctuation ' ' Text 'do' Keyword ' ' Text '|' Operator 'match' Name '|' Operator '\n ' Text 'handle_match' Name '(' Punctuation 'match' Name ')' Punctuation '\n ' Text 'end' Keyword '\n ' Text 'rescue' Keyword ' ' Text 'err' Name ' ' Text ':' Punctuation ' ' Text 'ParseError' Name '\n ' Text '# handle error ...' Comment.Single '\n ' Text 'end' Keyword '\n ' Text 'end' Keyword '\n ' Text 'end' Keyword '\n' Text 'end' Keyword '\n\n' Text 'module' Keyword ' ' Text 'Money' Name.Namespace '\n ' Text 'CURRENCIES' Name.Constant ' ' Text '=' Operator ' ' Text '{' Punctuation '\n ' Text '"' Literal.String.Double 'EUR' Literal.String.Double '"' Literal.String.Double ' ' Text '=' Operator '>' Operator ' ' Text '1.0' Literal.Number.Float ',' Punctuation '\n ' Text '"' Literal.String.Double 'ARS' Literal.String.Double '"' Literal.String.Double ' ' Text '=' Operator '>' Operator ' ' Text '10.55' Literal.Number.Float ',' Punctuation '\n ' Text '"' Literal.String.Double 'USD' Literal.String.Double '"' Literal.String.Double ' ' Text '=' Operator '>' Operator ' ' Text '1.12' Literal.Number.Float ',' Punctuation '\n ' Text '"' Literal.String.Double 'JPY' Literal.String.Double '"' Literal.String.Double ' ' Text '=' Operator '>' Operator ' ' Text '134.15' Literal.Number.Float ',' Punctuation '\n ' Text '}' Punctuation '\n\n ' Text 'class' Keyword ' ' Text 'Amount' Name.Class '\n ' Text 'getter' Name.Builtin.Pseudo ' ' Text ':currency' Literal.String.Symbol ',' Punctuation ' ' Text ':value' Literal.String.Symbol '\n\n ' Text 'def' Keyword ' ' Text 'initialize' Name.Function '(' Punctuation '@currency' Name.Variable.Instance ',' Punctuation ' ' Text '@value' Name.Variable.Instance ')' Punctuation '\n ' Text 'end' Keyword '\n ' Text 'end' Keyword '\n\n ' Text 'class' Keyword ' ' Text 'CurrencyConversion' Name.Class '\n ' Text 'def' Keyword ' ' Text 'initialize' Name.Function '(' Punctuation '@amount' Name.Variable.Instance ',' Punctuation ' ' Text '@target_currency' Name.Variable.Instance ')' Punctuation '\n ' Text 'end' Keyword '\n\n ' Text 'def' Keyword ' ' Text 'amount' Name.Function '\n ' Text '# implement conversion ...' Comment.Single '\n ' Text 'end' Keyword '\n ' Text 'end' Keyword '\n' Text 'end' Keyword '\n\n' Text 'i' Name ' ' Text '=' Operator ' ' Text '0' Literal.Number.Integer '\n' Text 'while' Keyword ' ' Text 'i' Name ' ' Text '<' Operator ' ' Text '10' Literal.Number.Integer '\n ' Text 'proc' Name ' ' Text '=' Operator ' ' Text '-' Operator '>' Operator '(' Punctuation 'x' Name ' ' Text ':' Punctuation ' ' Text 'Int32' Name ')' Punctuation ' ' Text 'do' Keyword '\n ' Text 'spawn' Name.Builtin.Pseudo ' ' Text 'do' Keyword '\n ' Text 'puts' Name.Builtin '(' Punctuation 'x' Name ')' Punctuation '\n ' Text 'end' Keyword '\n ' Text 'end' Keyword '\n ' Text 'proc' Name '.' Operator 'call' Name '(' Punctuation 'i' Name ')' Punctuation '\n ' Text 'i' Name ' ' Text '+=' Operator ' ' Text '1' Literal.Number.Integer '\n' Text 'end' Keyword '\n\n' Text 'Fiber' Name '.' Operator 'yield' Name '\n\n' Text '# A buffered channel of capacity 2' Comment.Single '\n' Text 'channel' Name ' ' Text '=' Operator ' ' Text 'Channel' Name '(' Punctuation 'Int32' Name ')' Punctuation '.' Operator 'new' Name '(' Punctuation '2' Literal.Number.Integer ')' Punctuation '\n\n' Text 'spawn' Name.Builtin.Pseudo ' ' Text 'do' Keyword '\n ' Text 'channel' Name '.' Operator 'send' Name '(' Punctuation '1' Literal.Number.Integer ')' Punctuation '\n ' Text 'channel' Name '.' Operator 'send' Name '(' Punctuation '2' Literal.Number.Integer ')' Punctuation '\n ' Text 'channel' Name '.' Operator 'send' Name '(' Punctuation '3' Literal.Number.Integer ')' Punctuation '\n' Text 'end' Keyword '\n\n' Text '3' Literal.Number.Integer '.' Operator 'times' Name ' ' Text 'do' Keyword ' ' Text '|' Operator 'i' Name '|' Operator '\n ' Text 'puts' Name.Builtin ' ' Text 'channel' Name '.' Operator 'receive' Name '\n' Text 'end' Keyword '\n\n' Text 'class' Keyword ' ' Text 'MyDictionary' Name.Class '(' Punctuation 'K' Name ',' Punctuation ' ' Text 'V' Name ')' Punctuation '\n' Text 'end' Keyword '\n\n' Text 'MyBox' Name '.' Operator 'new' Name '(' Punctuation '1' Literal.Number.Integer ')' Punctuation ' ' Text '# :: MyBox(Int32)' Comment.Single '\n' Text 'MyBox' Name '.' Operator 'new' Name '(' Punctuation '"' Literal.String.Double 'hello' Literal.String.Double '"' Literal.String.Double ')' Punctuation ' ' Text '# :: MyBox(String)' Comment.Single '\n\n' Text 'module' Keyword ' ' Text 'Moo' Name.Namespace '(' Punctuation 'T' Name ')' Punctuation '\n ' Text 'def' Keyword ' ' Text 't' Name.Function '\n ' Text 'T' Name '\n ' Text 'end' Keyword '\n' Text 'end' Keyword '\n\n' Text 'class' Keyword ' ' Text 'Foo' Name.Class '(' Punctuation 'U' Name.Class ')' Punctuation '\n ' Text 'include' Keyword ' ' Text 'Moo' Name '(' Punctuation 'U' Name ')' Punctuation '\n\n ' Text 'def' Keyword ' ' Text 'initialize' Name.Function '(' Punctuation '@value' Name.Variable.Instance ' ' Text ':' Punctuation ' ' Text 'U' Name ')' Punctuation '\n ' Text 'end' Keyword '\n' Text 'end' Keyword '\n\n' Text 'foo' Name ' ' Text '=' Operator ' ' Text 'Foo' Name '.' Operator 'new' Name '(' Punctuation '1' Literal.Number.Integer ')' Punctuation '\n' Text 'foo' Name '.' Operator 't' Name ' ' Text '# Int32' Comment.Single '\n\n' Text 'class' Keyword ' ' Text 'Parent' Name.Class '(' Punctuation 'T' Name.Class ')' Punctuation '\n' Text 'end' Keyword '\n\n' Text 'class' Keyword ' ' Text 'Int32Child' Name.Class ' ' Text '<' Operator ' ' Text 'Parent' Name '(' Punctuation 'Int32' Name ')' Punctuation '\n' Text 'end' Keyword '\n\n' Text 'class' Keyword ' ' Text 'GenericChild' Name.Class '(' Punctuation 'T' Name.Class ')' Punctuation ' ' Text '<' Operator ' ' Text 'Parent' Name '(' Punctuation 'T' Name ')' Punctuation '\n' Text 'end' Keyword '\n\n' Text 'class' Keyword ' ' Text 'Person' Name.Class '\n' Text 'end' Keyword '\n\n' Text 'a' Name ' ' Text '=' Operator ' ' Text '1' Literal.Number.Integer '\n' Text 'ptr' Name ' ' Text '=' Operator ' ' Text 'pointerof' Keyword.Pseudo '(' Punctuation 'a' Name ')' Punctuation '\n' Text 'ptr' Name '[' Operator '100_000' Literal.Number.Integer ']' Operator ' ' Text '=' Operator ' ' Text '2' Literal.Number.Integer ' ' Text '# undefined behaviour, probably a segmentation fault' Comment.Single '\n\n' Text 'alias' Keyword ' ' Text 'Int32OrString' Name.Class ' ' Text '=' Operator ' ' Text 'Int32' Name ' ' Text '|' Operator ' ' Text 'String' Name '\n\n' Text 'alias' Keyword ' ' Text 'Int32OrNil' Name.Class ' ' Text '=' Operator ' ' Text 'Int32?' Name '\n\n' Text 'alias' Keyword ' ' Text 'Int32OrNil_' Name.Class ' ' Text '=' Operator ' ' Text 'Int32' Name ' ' Text '|' Operator ' ' Text '::' Operator 'Nil' Name '\n\n' Text 'alias' Keyword ' ' Text 'Int32Ptr' Name.Class ' ' Text '=' Operator ' ' Text 'Int32' Name '*' Operator '\n\n' Text 'alias' Keyword ' ' Text 'Int32Ptr_' Name.Class ' ' Text '=' Operator ' ' Text 'Pointer' Name '(' Punctuation 'Int32' Name ')' Punctuation '\n\n' Text 'alias' Keyword ' ' Text 'Int32_8' Name.Class ' ' Text '=' Operator ' ' Text 'Int32' Name '[' Operator '8' Literal.Number.Integer ']' Operator '\n\n' Text 'alias' Keyword ' ' Text 'Int32_8_' Name.Class ' ' Text '=' Operator ' ' Text 'StaticArray' Name '(' Punctuation 'Int32' Name ',' Punctuation ' ' Text '8' Literal.Number.Integer ')' Punctuation '\n\n' Text 'alias' Keyword ' ' Text 'Int32StringTuple' Name.Class ' ' Text '=' Operator ' ' Text '{' Punctuation 'Int32' Name ',' Punctuation ' ' Text 'String' Name '}' Punctuation '\n\n' Text 'alias' Keyword ' ' Text 'Int32StringTuple_' Name.Class ' ' Text '=' Operator ' ' Text 'Tuple' Name '(' Punctuation 'Int32' Name ',' Punctuation ' ' Text 'String' Name ')' Punctuation '\n\n' Text 'alias' Keyword ' ' Text 'Int32ToString' Name.Class ' ' Text '=' Operator ' ' Text 'Int32' Name ' ' Text '-' Operator '>' Operator ' ' Text 'String' Name '\n\n' Text 'alias' Keyword ' ' Text 'Int32ToString_' Name.Class ' ' Text '=' Operator ' ' Text 'Proc' Name '(' Punctuation 'Int32' Name ',' Punctuation ' ' Text 'String' Name ')' Punctuation '\n\n' Text 'alias' Keyword ' ' Text 'ProcThatReturnsInt32' Name.Class ' ' Text '=' Operator ' ' Text '-' Operator '>' Operator ' ' Text 'Int32' Name '\n\n' Text 'alias' Keyword ' ' Text 'Int32AndCharToString' Name.Class ' ' Text '=' Operator ' ' Text 'Int32' Name ',' Punctuation ' ' Text 'Char' Name ' ' Text '-' Operator '>' Operator ' ' Text 'String' Name '\n\n' Text 'alias' Keyword ' ' Text 'ComplexProc' Name.Class ' ' Text '=' Operator ' ' Text '(' Punctuation 'Int32' Name ' ' Text '-' Operator '>' Operator ' ' Text 'Int32' Name ')' Punctuation ' ' Text '-' Operator '>' Operator ' ' Text 'String' Name '\n\n' Text 'def' Keyword ' ' Text 'foo' Name.Function '(' Punctuation 'x' Name ' ' Text ':' Punctuation ' ' Text 'Int32' Name ')' Punctuation '\n ' Text '"' Literal.String.Double 'instance' Literal.String.Double '"' Literal.String.Double '\n' Text 'end' Keyword '\n\n' Text 'def' Keyword ' ' Text 'foo' Name.Function '(' Punctuation 'x' Name ' ' Text ':' Punctuation ' ' Text 'Int32' Name '.' Operator 'class' Name ')' Punctuation '\n ' Text '"' Literal.String.Double 'class' Literal.String.Double '"' Literal.String.Double '\n' Text 'end' Keyword '\n\n' Text 'foo' Name ' ' Text '1' Literal.Number.Integer ' ' Text '# "instance"' Comment.Single '\n' Text 'foo' Name ' ' Text 'Int32' Name ' ' Text '# "class"' Comment.Single '\n\n' Text 'class' Keyword ' ' Text 'Parent' Name.Class '\n' Text 'end' Keyword '\n\n' Text 'class' Keyword ' ' Text 'Child1' Name.Class ' ' Text '<' Operator ' ' Text 'Parent' Name '\n' Text 'end' Keyword '\n\n' Text 'class' Keyword ' ' Text 'Child2' Name.Class ' ' Text '<' Operator ' ' Text 'Parent' Name '\n' Text 'end' Keyword '\n\n' Text 'ary' Name ' ' Text '=' Operator ' ' Text '[' Operator ']' Operator ' ' Text 'of' Keyword ' ' Text 'Parent' Name '.' Operator 'class' Name '\n' Text 'ary' Name ' ' Text '<<' Operator ' ' Text 'Child1' Name '\n' Text 'ary' Name ' ' Text '<<' Operator ' ' Text 'Child2' Name '\n\n' Text '# Same as not specifying a restriction, not very useful' Comment.Single '\n' Text 'def' Keyword ' ' Text 'foo' Name.Function '(' Punctuation 'x' Name ' ' Text ':' Punctuation ' ' Text '_' Name ')' Punctuation '\n' Text 'end' Keyword '\n\n' Text '# A bit more useful: any two arguments Proc that returns an Int32:' Comment.Single '\n' Text 'def' Keyword ' ' Text 'foo' Name.Function '(' Punctuation 'x' Name ' ' Text ':' Punctuation ' ' Text '_' Name ',' Punctuation ' ' Text '_' Name ' ' Text '-' Operator '>' Operator ' ' Text 'Int32' Name ')' Punctuation '\n' Text 'end' Keyword '\n\n' Text '# alias SameAsInt32 = typeof(2)' Comment.Single '\n' Text '# alias Int32OrString_ = typeof(1, "a")' Comment.Single '\n\n' Text 'class' Keyword ' ' Text 'Person' Name.Class '\n ' Text 'def' Keyword ' ' Text 'initialize' Name.Function '(' Punctuation 'name' Name ')' Punctuation '\n ' Text '@name' Name.Variable.Instance ' ' Text '=' Operator ' ' Text 'name' Name '\n ' Text '@age' Name.Variable.Instance ' ' Text '=' Operator ' ' Text '0' Literal.Number.Integer '\n ' Text 'end' Keyword '\n\n ' Text 'def' Keyword ' ' Text 'name' Name.Function '\n ' Text '@name' Name.Variable.Instance '\n ' Text 'end' Keyword '\n\n ' Text 'def' Keyword ' ' Text 'age' Name.Function '\n ' Text '@age' Name.Variable.Instance '\n ' Text 'end' Keyword '\n' Text 'end' Keyword '\n\n' Text 'john' Name ' ' Text '=' Operator ' ' Text 'Person' Name '.' Operator 'new' Name ' ' Text '"' Literal.String.Double 'John' Literal.String.Double '"' Literal.String.Double '\n' Text 'peter' Name ' ' Text '=' Operator ' ' Text 'Person' Name '.' Operator 'new' Name ' ' Text '"' Literal.String.Double 'Peter' Literal.String.Double '"' Literal.String.Double '\n\n' Text 'john' Name '.' Operator 'name' Name ' ' Text '# => "John"' Comment.Single '\n' Text 'john' Name '.' Operator 'age' Name ' ' Text '# => 0' Comment.Single '\n\n' Text 'peter' Name '.' Operator 'name' Name ' ' Text '# => "Peter"' Comment.Single '\n\n' Text 'class' Keyword ' ' Text 'Person' Name.Class '\n ' Text 'def' Keyword ' ' Text 'self' Name.Class '.' Operator 'new' Name.Function '(' Punctuation 'name' Name ')' Punctuation '\n ' Text 'instance' Name ' ' Text '=' Operator ' ' Text 'Person' Name '.' Operator 'allocate' Name '\n ' Text 'instance' Name '.' Operator 'initialize' Name '(' Punctuation 'name' Name ')' Punctuation '\n ' Text 'instance' Name '\n ' Text 'end' Keyword '\n' Text 'end' Keyword '\n\n' Text 'if' Keyword ' ' Text 'a' Name '.is_a?' Keyword.Pseudo '(' Punctuation 'String' Name ')' Punctuation '\n ' Text '# here a is a String' Comment.Single '\n' Text 'end' Keyword '\n\n' Text 'if' Keyword ' ' Text 'b' Name '.is_a?' Keyword.Pseudo '(' Punctuation 'Number' Name ')' Punctuation '\n ' Text '# here b is a Number' Comment.Single '\n' Text 'end' Keyword '\n\n' Text 'a' Name ' ' Text '=' Operator ' ' Text 'some_condition' Name ' ' Text '?' Punctuation ' ' Text '1' Literal.Number.Integer ' ' Text ':' Punctuation ' ' Text '"' Literal.String.Double 'hello' Literal.String.Double '"' Literal.String.Double '\n' Text '# a : Int32 | String' Comment.Single '\n\n' Text 'if' Keyword ' ' Text 'a' Name '.is_a?' Keyword.Pseudo '(' Punctuation 'Number' Name ')' Punctuation '\n ' Text '# a : Int32' Comment.Single '\n' Text 'else' Keyword '\n ' Text '# a : String' Comment.Single '\n' Text 'end' Keyword '\n\n' Text 'if' Keyword ' ' Text 'a' Name '.is_a?' Keyword.Pseudo '(' Punctuation 'String' Name ')' Punctuation ' ' Text '&&' Operator ' ' Text 'b' Name '.is_a?' Keyword.Pseudo '(' Punctuation 'Number' Name ')' Punctuation '\n ' Text '# here a is a String and b is a Number' Comment.Single '\n' Text 'end' Keyword '\n\n' Text 'a' Name '.' Operator '+' Name.Operator '(' Punctuation 'b' Name ')' Punctuation '\n\n' Text 'struct' Keyword ' ' Text 'Vector2' Name.Class '\n ' Text 'getter' Name.Builtin.Pseudo ' ' Text 'x' Name ',' Punctuation ' ' Text 'y' Name '\n\n ' Text 'def' Keyword ' ' Text 'initialize' Name.Function '(' Punctuation '@x' Name.Variable.Instance ',' Punctuation ' ' Text '@y' Name.Variable.Instance ')' Punctuation '\n ' Text 'end' Keyword '\n\n ' Text 'def' Keyword ' ' Text '+' Name.Function '(' Punctuation 'other' Name ')' Punctuation '\n ' Text 'Vector2' Name '.' Operator 'new' Name '(' Punctuation 'x' Name ' ' Text '+' Operator ' ' Text 'other' Name '.' Operator 'x' Name ',' Punctuation ' ' Text 'y' Name ' ' Text '+' Operator ' ' Text 'other' Name '.' Operator 'y' Name ')' Punctuation '\n ' Text 'end' Keyword '\n' Text 'end' Keyword '\n\n' Text 'v1' Name ' ' Text '=' Operator ' ' Text 'Vector2' Name '.' Operator 'new' Name '(' Punctuation '1' Literal.Number.Integer ',' Punctuation ' ' Text '2' Literal.Number.Integer ')' Punctuation '\n' Text 'v2' Name ' ' Text '=' Operator ' ' Text 'Vector2' Name '.' Operator 'new' Name '(' Punctuation '3' Literal.Number.Integer ',' Punctuation ' ' Text '4' Literal.Number.Integer ')' Punctuation '\n' Text 'v1' Name ' ' Text '+' Operator ' ' Text 'v2' Name ' ' Text '# => Vector2(@x=4, @y=6)' Comment.Single '\n\n' Text 'struct' Keyword ' ' Text 'Vector2' Name.Class '\n ' Text 'def' Keyword ' ' Text '-' Name.Function '\n ' Text 'Vector2' Name '.' Operator 'new' Name '(' Punctuation '-' Operator 'x' Name ',' Punctuation ' ' Text '-' Operator 'y' Name ')' Punctuation '\n ' Text 'end' Keyword '\n' Text 'end' Keyword '\n\n' Text 'v1' Name ' ' Text '=' Operator ' ' Text 'Vector2' Name '.' Operator 'new' Name '(' Punctuation '1' Literal.Number.Integer ',' Punctuation ' ' Text '2' Literal.Number.Integer ')' Punctuation '\n' Text '-' Operator 'v1' Name ' ' Text '# => Vector2(@x=-1, @y=-2)' Comment.Single '\n\n' Text 'class' Keyword ' ' Text 'MyArray' Name.Class '\n ' Text 'def' Keyword ' ' Text '[]' Name.Function '(' Punctuation 'index' Name ')' Punctuation '\n ' Text '# ...' Comment.Single '\n ' Text 'end' Keyword '\n\n ' Text 'def' Keyword ' ' Text '[]' Name.Function '(' Punctuation 'index1' Name ',' Punctuation ' ' Text 'index2' Name ',' Punctuation ' ' Text 'index3' Name ')' Punctuation '\n ' Text '# ...' Comment.Single '\n ' Text 'end' Keyword '\n\n ' Text 'def' Keyword ' ' Text '[]=' Name.Function '(' Punctuation 'index' Name ',' Punctuation ' ' Text 'value' Name ')' Punctuation '\n ' Text '# ...' Comment.Single '\n ' Text 'end' Keyword '\n' Text 'end' Keyword '\n\n' Text 'array' Name ' ' Text '=' Operator ' ' Text 'MyArray' Name '.' Operator 'new' Name '\n\n' Text 'array' Name '[' Operator '1' Literal.Number.Integer ']' Operator ' ' Text '# invokes the first method' Comment.Single '\n' Text 'array' Name '[' Operator '1' Literal.Number.Integer ',' Punctuation ' ' Text '2' Literal.Number.Integer ',' Punctuation ' ' Text '3' Literal.Number.Integer ']' Operator ' ' Text '# invokes the second method' Comment.Single '\n' Text 'array' Name '[' Operator '1' Literal.Number.Integer ']' Operator ' ' Text '=' Operator ' ' Text '2' Literal.Number.Integer ' ' Text '# invokes the third method' Comment.Single '\n\n' Text 'array' Name '.' Operator '[]' Name.Operator '(' Punctuation '1' Literal.Number.Integer ')' Punctuation ' ' Text '# invokes the first method' Comment.Single '\n' Text 'array' Name '.' Operator '[]' Name.Operator '(' Punctuation '1' Literal.Number.Integer ',' Punctuation ' ' Text '2' Literal.Number.Integer ',' Punctuation ' ' Text '3' Literal.Number.Integer ')' Punctuation ' ' Text '# invokes the second method' Comment.Single '\n' Text 'array' Name '.' Operator '[]=' Name.Operator '(' Punctuation '1' Literal.Number.Integer ',' Punctuation ' ' Text '2' Literal.Number.Integer ')' Punctuation ' ' Text '# invokes the third method' Comment.Single '\n\n' Text 'raise' Name.Builtin ' ' Text '"' Literal.String.Double 'OH NO!' Literal.String.Double '"' Literal.String.Double '\n' Text 'raise' Name.Builtin ' ' Text 'Exception' Name '.' Operator 'new' Name '(' Punctuation '"' Literal.String.Double 'Some error' Literal.String.Double '"' Literal.String.Double ')' Punctuation '\n\n' Text 'class' Keyword ' ' Text 'MyException' Name.Class ' ' Text '<' Operator ' ' Text 'Exception' Name '\n' Text 'end' Keyword '\n\n' Text 'begin' Keyword '\n ' Text 'raise' Name.Builtin ' ' Text 'MyException' Name '.' Operator 'new' Name '(' Punctuation '"' Literal.String.Double 'OH NO!' Literal.String.Double '"' Literal.String.Double ')' Punctuation '\n' Text 'rescue' Keyword ' ' Text 'ex' Name ' ' Text ':' Punctuation ' ' Text 'MyException' Name '\n ' Text 'puts' Name.Builtin ' ' Text '"' Literal.String.Double 'Rescued MyException: ' Literal.String.Double '#{' Literal.String.Interpol 'ex' Name '.' Operator 'message' Name '}' Literal.String.Interpol '"' Literal.String.Double '\n' Text 'end' Keyword '\n\n' Text 'begin' Keyword '\n ' Text '# ...' Comment.Single '\n' Text 'rescue' Keyword ' ' Text 'ex' Name ' ' Text ':' Punctuation ' ' Text 'MyException' Name ' ' Text '|' Operator ' ' Text 'MyOtherException' Name '\n ' Text '# only MyException or MyOtherException' Comment.Single '\n' Text 'rescue' Keyword '\n ' Text '# any other kind of exception' Comment.Single '\n' Text 'ensure' Keyword '\n ' Text 'puts' Name.Builtin ' ' Text '"' Literal.String.Double 'Cleanup...' Literal.String.Double '"' Literal.String.Double '\n' Text 'end' Keyword '\n\n' Text 'def' Keyword ' ' Text 'some_method' Name.Function '\n ' Text 'something_dangerous' Name '\n' Text 'rescue' Keyword '\n ' Text '# execute if an exception is raised' Comment.Single '\n' Text 'end' Keyword '\n\n' Text 'array' Name ' ' Text '=' Operator ' ' Text '[' Operator '1' Literal.Number.Integer ',' Punctuation ' ' Text '2' Literal.Number.Integer ',' Punctuation ' ' Text '3' Literal.Number.Integer ']' Operator '\n' Text 'array' Name '[' Operator '4' Literal.Number.Integer ']' Operator ' ' Text '# raises because of IndexError' Comment.Single '\n' Text 'array' Name '[' Operator '4' Literal.Number.Integer ']?' Operator ' ' Text '# returns nil because of index out of bounds' Comment.Single '\n\n' Text 'def' Keyword ' ' Text 'some_proc' Name.Function '(' Punctuation '&' Operator 'block' Name ' ' Text ':' Punctuation ' ' Text 'Int32' Name ' ' Text '-' Operator '>' Operator ' ' Text 'Int32' Name ')' Punctuation '\n ' Text 'block' Name '\n' Text 'end' Keyword '\n\n' Text 'x' Name ' ' Text '=' Operator ' ' Text '0' Literal.Number.Integer '\n' Text 'proc' Name ' ' Text '=' Operator ' ' Text '-' Operator '>' Operator '(' Punctuation 'i' Name ' ' Text ':' Punctuation ' ' Text 'Int32' Name ')' Punctuation ' ' Text '{' Punctuation ' ' Text 'x' Name ' ' Text '+=' Operator ' ' Text 'i' Name ' ' Text '}' Punctuation '\n' Text 'proc' Name ' ' Text '=' Operator ' ' Text 'some_proc' Name '(' Punctuation '&' Operator 'proc' Name ')' Punctuation '\n' Text 'proc' Name '.' Operator 'call' Name '(' Punctuation '1' Literal.Number.Integer ')' Punctuation ' ' Text '# => 1' Comment.Single '\n' Text 'proc' Name '.' Operator 'call' Name '(' Punctuation '10' Literal.Number.Integer ')' Punctuation ' ' Text '# => 11' Comment.Single '\n' Text 'x' Name ' ' Text '# => 11' Comment.Single '\n\n' Text 'def' Keyword ' ' Text 'add' Name.Function '(' Punctuation 'x' Name ',' Punctuation ' ' Text 'y' Name ')' Punctuation '\n ' Text 'x' Name ' ' Text '+' Operator ' ' Text 'y' Name '\n' Text 'end' Keyword '\n\n' Text 'adder' Name ' ' Text '=' Operator ' ' Text '-' Operator '>' Operator 'add' Name '(' Punctuation 'Int32' Name ',' Punctuation ' ' Text 'Int32' Name ')' Punctuation '\n' Text 'adder' Name '.' Operator 'call' Name '(' Punctuation '1' Literal.Number.Integer ',' Punctuation ' ' Text '2' Literal.Number.Integer ')' Punctuation ' ' Text '# => 3' Comment.Single '\n\n' Text 'module' Keyword ' ' Text 'Curses' Name.Namespace '\n ' Text 'class' Keyword ' ' Text 'Window' Name.Class '\n ' Text 'end' Keyword '\n' Text 'end' Keyword '\n\n' Text 'Curses' Name '::' Operator 'Window' Name '.' Operator 'new' Name '\n\n' Text 'module' Keyword ' ' Text 'ItemsSize' Name.Namespace '\n ' Text 'def' Keyword ' ' Text 'size' Name.Function '\n ' Text 'items' Name '.' Operator 'size' Name '\n ' Text 'end' Keyword '\n' Text 'end' Keyword '\n\n' Text 'class' Keyword ' ' Text 'Items' Name.Class '\n ' Text 'include' Keyword ' ' Text 'ItemsSize' Name '\n\n ' Text 'def' Keyword ' ' Text 'items' Name.Function '\n ' Text '[' Operator '1' Literal.Number.Integer ',' Punctuation ' ' Text '2' Literal.Number.Integer ',' Punctuation ' ' Text '3' Literal.Number.Integer ']' Operator '\n ' Text 'end' Keyword '\n' Text 'end' Keyword '\n\n' Text 'items' Name ' ' Text '=' Operator ' ' Text 'Items' Name '.' Operator 'new' Name '\n' Text 'items' Name '.' Operator 'size' Name ' ' Text '# => 3' Comment.Single '\n\n' Text 'module' Keyword ' ' Text 'Base64' Name.Namespace '\n ' Text 'extend' Keyword ' ' Text 'self' Keyword '\n\n ' Text 'def' Keyword ' ' Text 'encode64' Name.Function '(' Punctuation 'string' Name ')' Punctuation '\n ' Text '# ...' Comment.Single '\n ' Text 'end' Keyword '\n\n ' Text 'def' Keyword ' ' Text 'decode64' Name.Function '(' Punctuation 'string' Name ')' Punctuation '\n ' Text '# ...' Comment.Single '\n ' Text 'end' Keyword '\n' Text 'end' Keyword '\n\n' Text 'Base64' Name '.' Operator 'encode64' Name ' ' Text '"' Literal.String.Double 'hello' Literal.String.Double '"' Literal.String.Double ' ' Text '# => "aGVsbG8="' Comment.Single '\n\n' Text 'if' Keyword ' ' Text 'some_condition' Name '\n ' Text 'a' Name ' ' Text '=' Operator ' ' Text '1' Literal.Number.Integer '\n' Text 'else' Keyword '\n ' Text 'a' Name ' ' Text '=' Operator ' ' Text '"' Literal.String.Double 'hello' Literal.String.Double '"' Literal.String.Double '\n' Text 'end' Keyword '\n\n' Text 'a_as_int' Name ' ' Text '=' Operator ' ' Text 'a' Name '.as' Keyword.Pseudo '(' Punctuation 'Int32' Name ')' Punctuation '\n' Text 'a_as_int' Name '.' Operator 'abs' Name ' ' Text '# works, compiler knows that a_as_int is Int32' Comment.Single '\n\n' Text 'ptr' Name ' ' Text '=' Operator ' ' Text 'Pointer' Name '(' Punctuation 'Int32' Name ')' Punctuation '.' Operator 'malloc' Name '(' Punctuation '1' Literal.Number.Integer ')' Punctuation '\n' Text 'ptr' Name '.as' Keyword.Pseudo '(' Punctuation 'Int8' Name '*' Operator ')' Punctuation ' ' Text '# :: Pointer(Int8)' Comment.Single '\n\n' Text 'array' Name ' ' Text '=' Operator ' ' Text '[' Operator '1' Literal.Number.Integer ',' Punctuation ' ' Text '2' Literal.Number.Integer ',' Punctuation ' ' Text '3' Literal.Number.Integer ']' Operator '\n\n' Text '# object_id returns the address of an object in memory,' Comment.Single '\n' Text '# so we create a pointer with that address' Comment.Single '\n' Text 'ptr' Name ' ' Text '=' Operator ' ' Text 'Pointer' Name '(' Punctuation 'Void' Name ')' Punctuation '.' Operator 'new' Name '(' Punctuation 'array' Name '.' Operator 'object_id' Name ')' Punctuation '\n\n' Text '# Now we cast that pointer to the same type, and' Comment.Single '\n' Text '# we should get the same value' Comment.Single '\n' Text 'array2' Name ' ' Text '=' Operator ' ' Text 'ptr' Name '.as' Keyword.Pseudo '(' Punctuation 'Array' Name '(' Punctuation 'Int32' Name ')' Punctuation ')' Punctuation '\n' Text 'array2' Name '.' Operator 'same?' Name '(' Punctuation 'array' Name ')' Punctuation ' ' Text '# => true' Comment.Single '\n\n' Text 'a' Name ' ' Text '=' Operator ' ' Text '1' Literal.Number.Integer '\n' Text 'b' Name ' ' Text '=' Operator ' ' Text 'a' Name '.as' Keyword.Pseudo '(' Punctuation 'Int32' Name ' ' Text '|' Operator ' ' Text 'Float64' Name ')' Punctuation '\n' Text 'b' Name ' ' Text '# :: Int32 | Float64' Comment.Single '\n\n' Text 'ary' Name ' ' Text '=' Operator ' ' Text '[' Operator '1' Literal.Number.Integer ',' Punctuation ' ' Text '2' Literal.Number.Integer ',' Punctuation ' ' Text '3' Literal.Number.Integer ']' Operator '\n\n' Text '# We want to create an array 1, 2, 3 of Int32 | Float64' Comment.Single '\n' Text 'ary2' Name ' ' Text '=' Operator ' ' Text 'ary' Name '.' Operator 'map' Name ' ' Text '{' Punctuation ' ' Text '|' Operator 'x' Name '|' Operator ' ' Text 'x' Name '.as' Keyword.Pseudo '(' Punctuation 'Int32' Name ' ' Text '|' Operator ' ' Text 'Float64' Name ')' Punctuation ' ' Text '}' Punctuation '\n\n' Text 'ary2' Name ' ' Text '# :: Array(Int32 | Float64)' Comment.Single '\n' Text 'ary2' Name ' ' Text '<<' Operator ' ' Text '1.5' Literal.Number.Float ' ' Text '# OK' Comment.Single '\n\n' Text 'class' Keyword ' ' Text 'Person' Name.Class '\n ' Text 'def' Keyword ' ' Text 'initialize' Name.Function '(' Punctuation '@name' Name.Variable.Instance ')' Punctuation '\n ' Text 'end' Keyword '\n\n ' Text 'def' Keyword ' ' Text 'name' Name.Function '\n ' Text '@name' Name.Variable.Instance '\n ' Text 'end' Keyword '\n' Text 'end' Keyword '\n\n' Text 'a' Name ' ' Text '=' Operator ' ' Text '[' Operator ']' Operator ' ' Text 'of' Keyword ' ' Text 'Person' Name '\n' Text 'x' Name ' ' Text '=' Operator ' ' Text 'a' Name '.' Operator 'map' Name ' ' Text '{' Punctuation ' ' Text '|' Operator 'f' Name '|' Operator ' ' Text 'f' Name '.' Operator 'name' Name ' ' Text '}' Punctuation ' ' Text "# Error: can't infer block return type" Comment.Single '\n\n' Text 'a' Name ' ' Text '=' Operator ' ' Text '[' Operator ']' Operator ' ' Text 'of' Keyword ' ' Text 'Person' Name '\n' Text 'x' Name ' ' Text '=' Operator ' ' Text 'a' Name '.' Operator 'map' Name ' ' Text '{' Punctuation ' ' Text '|' Operator 'f' Name '|' Operator ' ' Text 'f' Name '.' Operator 'name' Name '.as' Keyword.Pseudo '(' Punctuation 'String' Name ')' Punctuation ' ' Text '}' Punctuation ' ' Text '# OK' Comment.Single '\n\n' Text 'Person' Name '.' Operator 'new' Name ' ' Text '"' Literal.String.Double 'John' Literal.String.Double '"' Literal.String.Double '\n\n' Text 'a' Name ' ' Text '=' Operator ' ' Text '[' Operator ']' Operator ' ' Text 'of' Keyword ' ' Text 'Person' Name '\n' Text 'x' Name ' ' Text '=' Operator ' ' Text 'a' Name '.' Operator 'map' Name ' ' Text '{' Punctuation ' ' Text '|' Operator 'f' Name '|' Operator ' ' Text 'f' Name '.' Operator 'name' Name ' ' Text '}' Punctuation ' ' Text '# OK' Comment.Single '\n\n' Text 'loop' Name.Builtin ' ' Text 'do' Keyword '\n ' Text 'do_something' Name '\n ' Text 'break' Keyword ' ' Text 'if' Keyword ' ' Text 'some_condition' Name '\n' Text 'end' Keyword '\n\n' Text 'class' Keyword ' ' Text 'Point' Name.Class '\n ' Text 'def' Keyword ' ' Text 'initialize' Name.Function '(' Punctuation '@x' Name.Variable.Instance ',' Punctuation ' ' Text '@y' Name.Variable.Instance ')' Punctuation '\n ' Text 'end' Keyword '\n' Text 'end' Keyword '\n\n' Text 'Point' Name '.' Operator 'new' Name ' ' Text '1' Literal.Number.Integer ',' Punctuation ' ' Text '2' Literal.Number.Integer '\n\n' Text '# 2 x Int32 = 2 x 4 = 8' Comment.Single '\n' Text 'instance_sizeof' Keyword.Pseudo '(' Punctuation 'Point' Name ')' Punctuation ' ' Text '# => 12' Comment.Single '\n\n' Text 'a' Name ' ' Text '=' Operator ' ' Text '1' Literal.Number.Integer '\n' Text 'while' Keyword ' ' Text 'a' Name ' ' Text '<' Operator ' ' Text '5' Literal.Number.Integer '\n ' Text 'a' Name ' ' Text '+=' Operator ' ' Text '1' Literal.Number.Integer '\n ' Text 'if' Keyword ' ' Text 'a' Name ' ' Text '==' Operator ' ' Text '3' Literal.Number.Integer '\n ' Text 'next' Keyword '\n ' Text 'end' Keyword '\n ' Text 'puts' Name.Builtin ' ' Text 'a' Name '\n' Text 'end' Keyword '\n\n' Text '# The above prints the numbers 2, 4 and 5' Comment.Single '\n\n' Text 'lib' Keyword ' ' Text 'C' Name.Namespace '\n ' Text '# In C: double cos(double x)' Comment.Single '\n ' Text 'fun' Keyword ' ' Text 'cos' Name.Function '(' Punctuation 'value' Name ' ' Text ':' Punctuation ' ' Text 'Float64' Name ')' Punctuation ' ' Text ':' Punctuation ' ' Text 'Float64' Name '\n\n ' Text 'fun' Keyword ' ' Text 'getch' Name.Function ' ' Text ':' Punctuation ' ' Text 'Int32' Name '\n\n ' Text 'fun' Keyword ' ' Text 'srand' Name.Function '(' Punctuation 'seed' Name ' ' Text ':' Punctuation ' ' Text 'UInt32' Name ')' Punctuation '\n\n ' Text 'fun' Keyword ' ' Text 'exit' Name.Function '(' Punctuation 'status' Name ' ' Text ':' Punctuation ' ' Text 'Int32' Name ')' Punctuation ' ' Text ':' Punctuation ' ' Text 'NoReturn' Name '\n\n ' Text 'fun' Keyword ' ' Text 'printf' Name.Function '(' Punctuation 'format' Name ' ' Text ':' Punctuation ' ' Text 'UInt8' Name '*' Operator ',' Punctuation ' ' Text '...' Operator ')' Punctuation ' ' Text ':' Punctuation ' ' Text 'Int32' Name '\n' Text 'end' Keyword '\n\n' Text 'C' Name '.' Operator 'cos' Name '(' Punctuation '1.5' Literal.Number.Float ')' Punctuation ' ' Text '# => 0.0707372' Comment.Single '\n' Text 'C' Name '.' Operator 'srand' Name '(' Punctuation '1_u32' Literal.Number.Integer ')' Punctuation '\n\n' Text 'a' Name ' ' Text '=' Operator ' ' Text '1' Literal.Number.Integer '\n' Text 'b' Name ' ' Text '=' Operator ' ' Text '2' Literal.Number.Integer '\n' Text 'C' Name '.' Operator 'printf' Name ' ' Text '"' Literal.String.Double '%d + %d = %d' Literal.String.Double '\\n' Literal.String.Escape '"' Literal.String.Double ',' Punctuation ' ' Text 'a' Name ',' Punctuation ' ' Text 'b' Name ',' Punctuation ' ' Text 'a' Name ' ' Text '+' Operator ' ' Text 'b' Name '\n\n' Text 'lib' Keyword ' ' Text 'LibSDL' Name.Namespace '\n ' Text 'fun' Keyword ' ' Text 'init' Name.Function ' ' Text '=' Operator ' ' Text 'SDL_Init' Name '(' Punctuation 'flags' Name ' ' Text ':' Punctuation ' ' Text 'UInt32' Name ')' Punctuation ' ' Text ':' Punctuation ' ' Text 'Int32' Name '\n' Text 'end' Keyword '\n\n' Text 'lib' Keyword ' ' Text 'LLVMIntrinsics' Name.Namespace '\n ' Text 'fun' Keyword ' ' Text 'ceil_f32' Name.Function ' ' Text '=' Operator ' ' Text '"' Literal.String.Double 'llvm.ceil.f32' Literal.String.Double '"' Literal.String.Double '(' Punctuation 'value' Name ' ' Text ':' Punctuation ' ' Text 'Float32' Name ')' Punctuation ' ' Text ':' Punctuation ' ' Text 'Float32' Name '\n' Text 'end' Keyword '\n\n' Text 'lib' Keyword ' ' Text 'MyLib' Name.Namespace '\n ' Text 'fun' Keyword ' ' Text 'my_fun' Name.Function '(' Punctuation 'some_size' Name ' ' Text ':' Punctuation ' ' Text 'LibC' Name '::' Operator 'SizeT' Name ')' Punctuation '\n' Text 'end' Keyword '\n\n' Text '@[' Operator 'Link' Name.Decorator '(' Punctuation '"' Literal.String.Double 'pcre' Literal.String.Double '"' Literal.String.Double ')' Punctuation ']' Operator '\n' Text 'lib' Keyword ' ' Text 'LibPCRE' Name.Namespace '\n' Text 'end' Keyword '\n\n' Text 'lib' Keyword ' ' Text 'C' Name.Namespace '\n ' Text '{%' Literal.String.Interpol ' ' Text 'if' Keyword ' ' Text 'flag?' Name '(' Punctuation ':x86_64' Literal.String.Symbol ')' Punctuation ' ' Text '%}' Literal.String.Interpol '\n ' Text 'alias' Keyword ' ' Text 'SizeT' Name.Class ' ' Text '=' Operator ' ' Text 'UInt64' Name '\n ' Text '{%' Literal.String.Interpol ' ' Text 'else' Keyword ' ' Text '%}' Literal.String.Interpol '\n ' Text 'alias' Keyword ' ' Text 'SizeT' Name.Class ' ' Text '=' Operator ' ' Text 'UInt32' Name '\n ' Text '{%' Literal.String.Interpol ' ' Text 'end' Keyword ' ' Text '%}' Literal.String.Interpol '\n\n ' Text 'fun' Keyword ' ' Text 'memcmp' Name.Function '(' Punctuation 'p1' Name ' ' Text ':' Punctuation ' ' Text 'Void' Name '*' Operator ',' Punctuation ' ' Text 'p2' Name ' ' Text ':' Punctuation ' ' Text 'Void' Name '*' Operator ',' Punctuation ' ' Text 'size' Name ' ' Text ':' Punctuation ' ' Text 'C' Name '::' Operator 'SizeT' Name ')' Punctuation ' ' Text ':' Punctuation ' ' Text 'Int32' Name '\n' Text 'end' Keyword '\n\n' Text 'lib' Keyword ' ' Text 'X' Name.Namespace '\n ' Text 'enum' Keyword ' ' Text 'SomeEnum' Name.Class '\n ' Text 'Ten' Name ' ' Text '=' Operator ' ' Text '10' Literal.Number.Integer '\n ' Text 'Twenty' Name ' ' Text '=' Operator ' ' Text '10' Literal.Number.Integer ' ' Text '*' Operator ' ' Text '2' Literal.Number.Integer '\n ' Text 'ThirtyTwo' Name ' ' Text '=' Operator ' ' Text '1' Literal.Number.Integer ' ' Text '<<' Operator ' ' Text '5' Literal.Number.Integer '\n ' Text 'end' Keyword '\n' Text 'end' Keyword '\n\n' Text 'lib' Keyword ' ' Text 'X' Name.Namespace '\n ' Text 'enum' Keyword ' ' Text 'SomeEnum' Name.Class '\n ' Text 'A' Name ' ' Text '=' Operator ' ' Text '1_u32' Literal.Number.Integer '\n ' Text 'end' Keyword '\n' Text 'end' Keyword '\n\n' Text 'X' Name '::' Operator 'SomeEnum' Name '::' Operator 'Zero' Name ' ' Text '# => 0_i8' Comment.Single '\n' Text 'X' Name '::' Operator 'SomeEnum' Name '::' Operator 'Two' Name ' ' Text '# => 2_i8' Comment.Single '\n\n' Text 'lib' Keyword ' ' Text 'X' Name.Namespace '\n ' Text 'fun' Keyword ' ' Text 'callback' Name.Function '(' Punctuation 'f' Name ' ' Text ':' Punctuation ' ' Text 'Int32' Name ' ' Text '-' Operator '>' Operator ' ' Text 'Int32' Name ')' Punctuation '\n' Text 'end' Keyword '\n\n' Text 'f' Name ' ' Text '=' Operator ' ' Text '-' Operator '>' Operator '(' Punctuation 'x' Name ' ' Text ':' Punctuation ' ' Text 'Int32' Name ')' Punctuation ' ' Text '{' Punctuation ' ' Text 'x' Name ' ' Text '+' Operator ' ' Text '1' Literal.Number.Integer ' ' Text '}' Punctuation '\n' Text 'X' Name '.' Operator 'callback' Name '(' Punctuation 'f' Name ')' Punctuation '\n\n' Text 'X' Name '.' Operator 'callback' Name ' ' Text '-' Operator '>' Operator '(' Punctuation 'x' Name ')' Punctuation ' ' Text '{' Punctuation ' ' Text 'x' Name ' ' Text '+' Operator ' ' Text '1' Literal.Number.Integer ' ' Text '}' Punctuation '\n\n' Text 'X' Name '.' Operator 'callback' Name ' ' Text 'nil' Keyword.Constant '\n\n' Text 'lib' Keyword ' ' Text 'LibFoo' Name.Namespace '\n ' Text 'fun' Keyword ' ' Text 'store_callback' Name.Function '(' Punctuation 'callback' Name ' ' Text ':' Punctuation ' ' Text '-' Operator '>' Operator ')' Punctuation '\n ' Text 'fun' Keyword ' ' Text 'execute_callback' Name.Function '\n' Text 'end' Keyword '\n\n' Text 'LibFoo' Name '.' Operator 'store_callback' Name ' ' Text '-' Operator '>' Operator '{' Punctuation ' ' Text 'raise' Name.Builtin ' ' Text '"' Literal.String.Double 'OH NO!' Literal.String.Double '"' Literal.String.Double ' ' Text '}' Punctuation '\n' Text 'LibFoo' Name '.' Operator 'execute_callback' Name '\n\n' Text 'lib' Keyword ' ' Text 'LibFoo' Name.Namespace '\n ' Text 'fun' Keyword ' ' Text 'store_callback' Name.Function '(' Punctuation 'callback' Name ' ' Text ':' Punctuation ' ' Text '-' Operator '>' Operator ')' Punctuation '\n\n ' Text '@[' Operator 'Raises' Name.Decorator ']' Operator '\n ' Text 'fun' Keyword ' ' Text 'execute_callback' Name.Function '\n' Text 'end' Keyword '\n\n' Text '@[' Operator 'Link' Name.Decorator '(' Punctuation '"' Literal.String.Double 'pcre' Literal.String.Double '"' Literal.String.Double ')' Punctuation ']' Operator '\n' Text 'lib' Keyword ' ' Text 'PCRE' Name.Namespace '\n ' Text 'INFO_CAPTURECOUNT' Name.Constant ' ' Text '=' Operator ' ' Text '2' Literal.Number.Integer '\n' Text 'end' Keyword '\n\n' Text 'PCRE' Name '::' Operator 'INFO_CAPTURECOUNT' Name.Constant ' ' Text '# => 2' Comment.Single '\n\n' Text 'lib' Keyword ' ' Text 'U' Name.Namespace '\n ' Text '# In C:' Comment.Single '\n ' Text '#' Comment.Single '\n ' Text '# union IntOrFloat {' Comment.Single '\n ' Text '# int some_int;' Comment.Single '\n ' Text '# double some_float;' Comment.Single '\n ' Text '# };' Comment.Single '\n ' Text 'union' Keyword ' ' Text 'IntOrFloat' Name.Class '\n ' Text 'some_int' Name ' ' Text ':' Punctuation ' ' Text 'Int32' Name '\n ' Text 'some_float' Name ' ' Text ':' Punctuation ' ' Text 'Float64' Name '\n ' Text 'end' Keyword '\n' Text 'end' Keyword '\n\n' Text 'value' Name ' ' Text '=' Operator ' ' Text 'U' Name '::' Operator 'IntOrFloat' Name '.' Operator 'new' Name '\n\n' Text 'value' Name ' ' Text '=' Operator ' ' Text 'uninitialized' Keyword.Pseudo ' ' Text 'U' Name '::' Operator 'IntOrFlaot' Name '\n' Text 'value' Name '.' Operator 'some_int' Name ' ' Text '# => some garbage value' Comment.Single '\n\n' Text 'value' Name ' ' Text '=' Operator ' ' Text 'U' Name '::' Operator 'IntOrFloat' Name '.' Operator 'new' Name '\n' Text 'value' Name '.' Operator 'some_int' Name ' ' Text '=' Operator ' ' Text '1' Literal.Number.Integer '\n' Text 'value' Name '.' Operator 'some_int' Name ' ' Text '# => 1' Comment.Single '\n' Text 'value' Name '.' Operator 'some_float' Name ' ' Text '# => 4.94066e-324' Comment.Single '\n\n' Text 'def' Keyword ' ' Text 'change_it' Name.Function '(' Punctuation 'value' Name ')' Punctuation '\n ' Text 'value' Name '.' Operator 'some_int' Name ' ' Text '=' Operator ' ' Text '1' Literal.Number.Integer '\n' Text 'end' Keyword '\n\n' Text 'value' Name ' ' Text '=' Operator ' ' Text 'U' Name '::' Operator 'IntOrFloat' Name '.' Operator 'new' Name '\n' Text 'change_it' Name ' ' Text 'value' Name '\n' Text 'value' Name '.' Operator 'some_int' Name ' ' Text '# => 0' Comment.Single '\n\n' Text 'lib' Keyword ' ' Text 'C' Name.Namespace '\n ' Text '# In C:' Comment.Single '\n ' Text '#' Comment.Single '\n ' Text '# struct TimeZone {' Comment.Single '\n ' Text '# int minutes_west;' Comment.Single '\n ' Text '# int dst_time;' Comment.Single '\n ' Text '# };' Comment.Single '\n ' Text 'struct' Keyword ' ' Text 'TimeZone' Name.Class '\n ' Text 'minutes_west' Name ' ' Text ':' Punctuation ' ' Text 'Int32' Name '\n ' Text 'dst_time' Name ' ' Text ':' Punctuation ' ' Text 'Int32' Name '\n ' Text 'end' Keyword '\n' Text 'end' Keyword '\n\n' Text 'lib' Keyword ' ' Text 'C' Name.Namespace '\n ' Text '# This is a forward declaration' Comment.Single '\n ' Text 'struct' Keyword ' ' Text 'Node' Name.Class '\n ' Text 'end' Keyword '\n\n ' Text 'struct' Keyword ' ' Text 'Node' Name.Class '\n ' Text 'node' Name ' ' Text ':' Punctuation ' ' Text 'Node' Name '*' Operator '\n ' Text 'end' Keyword '\n' Text 'end' Keyword '\n\n' Text 'tz' Name ' ' Text '=' Operator ' ' Text 'C' Name '::' Operator 'TimeZone' Name '.' Operator 'new' Name '\n\n' Text 'tz' Name ' ' Text '=' Operator ' ' Text 'uninitialized' Keyword.Pseudo ' ' Text 'C' Name '::' Operator 'TimeZone' Name '\n' Text 'tz' Name '.' Operator 'minutes_west' Name ' ' Text '# => some garbage value' Comment.Single '\n\n' Text 'tz' Name ' ' Text '=' Operator ' ' Text 'C' Name '::' Operator 'TimeZone' Name '.' Operator 'new' Name '\n' Text 'tz' Name '.' Operator 'minutes_west' Name ' ' Text '=' Operator ' ' Text '1' Literal.Number.Integer '\n' Text 'tz' Name '.' Operator 'minutes_west' Name ' ' Text '# => 1' Comment.Single '\n\n' Text 'tz' Name ' ' Text '=' Operator ' ' Text 'C' Name '::' Operator 'TimeZone' Name '.' Operator 'new' Name ' ' Text 'minutes_west' Literal.String.Symbol ':' Punctuation ' ' Text '1' Literal.Number.Integer ',' Punctuation ' ' Text 'dst_time' Literal.String.Symbol ':' Punctuation ' ' Text '2' Literal.Number.Integer '\n' Text 'tz' Name '.' Operator 'minutes_west' Name ' ' Text '# => 1' Comment.Single '\n' Text 'tz' Name '.' Operator 'dst_time' Name ' ' Text '# => 2' Comment.Single '\n\n' Text 'def' Keyword ' ' Text 'change_it' Name.Function '(' Punctuation 'tz' Name ')' Punctuation '\n ' Text 'tz' Name '.' Operator 'minutes_west' Name ' ' Text '=' Operator ' ' Text '1' Literal.Number.Integer '\n' Text 'end' Keyword '\n\n' Text 'tz' Name ' ' Text '=' Operator ' ' Text 'C' Name '::' Operator 'TimeZone' Name '.' Operator 'new' Name '\n' Text 'change_it' Name ' ' Text 'tz' Name '\n' Text 'tz' Name '.' Operator 'minutes_west' Name ' ' Text '# => 0' Comment.Single '\n\n' Text 'lib' Keyword ' ' Text 'C' Name.Namespace '\n ' Text '$errno' Name.Variable.Global ' ' Text ':' Punctuation ' ' Text 'Int32' Name '\n' Text 'end' Keyword '\n\n' Text 'C' Name '.' Operator 'errno' Name ' ' Text '# => some value' Comment.Single '\n' Text 'C' Name '.' Operator 'errno' Name ' ' Text '=' Operator ' ' Text '0' Literal.Number.Integer '\n' Text 'C' Name '.' Operator 'errno' Name ' ' Text '# => 0' Comment.Single '\n\n' Text 'lib' Keyword ' ' Text 'C' Name.Namespace '\n ' Text '@[' Operator 'ThreadLocal' Name.Decorator ']' Operator '\n ' Text '$errno' Name.Variable.Global ' ' Text ':' Punctuation ' ' Text 'Int32' Name '\n' Text 'end' Keyword '\n\n' Text 'lib' Keyword ' ' Text 'C' Name.Namespace '\n ' Text 'fun' Keyword ' ' Text 'waitpid' Name.Function '(' Punctuation 'pid' Name ' ' Text ':' Punctuation ' ' Text 'Int32' Name ',' Punctuation ' ' Text 'status_ptr' Name ' ' Text ':' Punctuation ' ' Text 'Int32' Name '*' Operator ',' Punctuation ' ' Text 'options' Name ' ' Text ':' Punctuation ' ' Text 'Int32' Name ')' Punctuation ' ' Text ':' Punctuation ' ' Text 'Int32' Name '\n' Text 'end' Keyword '\n\n' Text 'status_ptr' Name ' ' Text '=' Operator ' ' Text 'uninitialized' Keyword.Pseudo ' ' Text 'Int32' Name '\n\n' Text 'C' Name '.' Operator 'waitpid' Name '(' Punctuation 'pid' Name ',' Punctuation ' ' Text 'pointerof' Keyword.Pseudo '(' Punctuation 'status_ptr' Name ')' Punctuation ',' Punctuation ' ' Text 'options' Name ')' Punctuation '\n\n' Text 'C' Name '.' Operator 'waitpid' Name '(' Punctuation 'pid' Name ',' Punctuation ' ' Text 'out' Keyword.Pseudo ' ' Text 'status_ptr' Name ',' Punctuation ' ' Text 'options' Name ')' Punctuation '\n\n' Text 'lib' Keyword ' ' Text 'X' Name.Namespace '\n ' Text 'type' Keyword ' ' Text 'CInt' Name.Class ' ' Text '=' Operator ' ' Text 'Int32' Name '\n' Text 'end' Keyword '\n\n' Text '{%' Literal.String.Interpol ' ' Text 'if' Keyword ' ' Text 'flag?' Name '(' Punctuation ':x86_64' Literal.String.Symbol ')' Punctuation ' ' Text '%}' Literal.String.Interpol '\n ' Text '# some specific code for 64 bits platforms' Comment.Single '\n' Text '{%' Literal.String.Interpol ' ' Text 'else' Keyword ' ' Text '%}' Literal.String.Interpol '\n ' Text '# some specific code for non-64 bits platforms' Comment.Single '\n' Text '{%' Literal.String.Interpol ' ' Text 'end' Keyword ' ' Text '%}' Literal.String.Interpol '\n\n' Text '{%' Literal.String.Interpol ' ' Text 'if' Keyword ' ' Text 'flag?' Name '(' Punctuation ':linux' Literal.String.Symbol ')' Punctuation ' ' Text '&&' Operator ' ' Text 'flag?' Name '(' Punctuation ':x86_64' Literal.String.Symbol ')' Punctuation ' ' Text '%}' Literal.String.Interpol '\n ' Text '# some specific code for linux 64 bits' Comment.Single '\n' Text '{%' Literal.String.Interpol ' ' Text 'end' Keyword ' ' Text '%}' Literal.String.Interpol '\n\n' Text 'lib' Keyword ' ' Text 'C' Name.Namespace '\n ' Text '{%' Literal.String.Interpol ' ' Text 'if' Keyword ' ' Text 'flag?' Name '(' Punctuation ':linux' Literal.String.Symbol ')' Punctuation ' ' Text '&&' Operator ' ' Text 'flag?' Name '(' Punctuation ':x86_64' Literal.String.Symbol ')' Punctuation ' ' Text '%}' Literal.String.Interpol '\n ' Text 'struct' Keyword ' ' Text 'SomeStruct' Name.Class '\n ' Text 'some_field' Name ' ' Text ':' Punctuation ' ' Text 'Int32' Name '\n ' Text 'end' Keyword '\n ' Text '{%' Literal.String.Interpol ' ' Text 'else' Keyword ' ' Text '%}' Literal.String.Interpol '\n ' Text 'struct' Keyword ' ' Text 'SomeStruct' Name.Class '\n ' Text 'some_field' Name ' ' Text ':' Punctuation ' ' Text 'Int64' Name '\n ' Text 'end' Keyword '\n ' Text '{%' Literal.String.Interpol ' ' Text 'end' Keyword ' ' Text '%}' Literal.String.Interpol '\n' Text 'end' Keyword '\n\n' Text '# Assigns to a local variable' Comment.Single '\n' Text 'local' Name ' ' Text '=' Operator ' ' Text '1' Literal.Number.Integer '\n\n' Text '# Assigns to a global property' Comment.Single '\n' Text 'class' Keyword ' ' Text 'Global' Name.Class '\n ' Text 'class_property' Name.Builtin.Pseudo ' ' Text 'global1' Name ' ' Text '=' Operator ' ' Text '1' Literal.Number.Integer '\n ' Text 'class_getter' Name.Builtin.Pseudo ' ' Text 'global2' Name ' ' Text '=' Operator ' ' Text '2' Literal.Number.Integer '\n ' Text 'class_setter' Name.Builtin.Pseudo ' ' Text 'global3' Name ' ' Text '=' Operator ' ' Text '3' Literal.Number.Integer '\n\n ' Text '# Fails on nil' Comment.Single '\n ' Text 'class_property!' Name.Builtin.Pseudo ' ' Text 'global4' Name ' ' Text '=' Operator ' ' Text '4' Literal.Number.Integer '\n ' Text 'class_getter!' Name.Builtin.Pseudo ' ' Text 'global5' Name ' ' Text '=' Operator ' ' Text '5' Literal.Number.Integer '\n ' Text 'class_setter' Name.Builtin.Pseudo '!' Operator ' ' Text 'global6' Name ' ' Text '=' Operator ' ' Text '6' Literal.Number.Integer '\n' Text 'end' Keyword '\n\n' Text 'class' Keyword ' ' Text 'Testing' Name.Class '\n ' Text '# Assigns to an instance variable' Comment.Single '\n ' Text '@instance' Name.Variable.Instance ' ' Text '=' Operator ' ' Text '2' Literal.Number.Integer '\n\n ' Text '# Assigns to a class variable' Comment.Single '\n ' Text '@@class' Name.Variable.Class ' ' Text '=' Operator ' ' Text '3' Literal.Number.Integer '\n' Text 'end' Keyword '\n\n' Text 'local' Name ' ' Text '+=' Operator ' ' Text '1' Literal.Number.Integer ' ' Text '# same as: local = local + 1' Comment.Single '\n\n' Text '# The above is valid with these operators:' Comment.Single '\n' Text '# +, -, *, /, %, |, &, ^, **, <<, >>' Comment.Single '\n\n' Text 'local' Name ' ' Text '||' Operator '=' Operator ' ' Text '1' Literal.Number.Integer ' ' Text '# same as: local || (local = 1)' Comment.Single '\n' Text 'local' Name ' ' Text '&&' Operator '=' Operator ' ' Text '1' Literal.Number.Integer ' ' Text '# same as: local && (local = 1)' Comment.Single '\n\n' Text '# A setter' Comment.Single '\n' Text 'person' Name '.' Operator 'name' Name '=' Operator '(' Punctuation '"' Literal.String.Double 'John' Literal.String.Double '"' Literal.String.Double ')' Punctuation '\n\n' Text '# The above can be written as:' Comment.Single '\n' Text 'person' Name '.' Operator 'name' Name ' ' Text '=' Operator ' ' Text '"' Literal.String.Double 'John' Literal.String.Double '"' Literal.String.Double '\n\n' Text '# An indexed assignment' Comment.Single '\n' Text 'objects' Name '.' Operator '[]=' Name.Operator '(' Punctuation '2' Literal.Number.Integer ',' Punctuation ' ' Text '3' Literal.Number.Integer ')' Punctuation '\n\n' Text '# The above can be written as:' Comment.Single '\n' Text 'objects' Name '[' Operator '2' Literal.Number.Integer ']' Operator ' ' Text '=' Operator ' ' Text '3' Literal.Number.Integer '\n\n' Text '# Not assignment-related, but also syntax sugar:' Comment.Single '\n' Text 'objects' Name '.' Operator '[]' Name.Operator '(' Punctuation '2' Literal.Number.Integer ',' Punctuation ' ' Text '3' Literal.Number.Integer ')' Punctuation '\n\n' Text '# The above can be written as:' Comment.Single '\n' Text 'objects' Name '[' Operator '2' Literal.Number.Integer ',' Punctuation ' ' Text '3' Literal.Number.Integer ']' Operator '\n\n' Text 'person' Name '.' Operator 'age' Name ' ' Text '+=' Operator ' ' Text '1' Literal.Number.Integer ' ' Text '# same as: person.age = person.age + 1' Comment.Single '\n\n' Text 'person' Name '.' Operator 'name' Name ' ' Text '||' Operator '=' Operator ' ' Text '"' Literal.String.Double 'John' Literal.String.Double '"' Literal.String.Double ' ' Text '# same as: person.name || (person.name = "John")' Comment.Single '\n' Text 'person' Name '.' Operator 'name' Name ' ' Text '&&' Operator '=' Operator ' ' Text '"' Literal.String.Double 'John' Literal.String.Double '"' Literal.String.Double ' ' Text '# same as: person.name && (person.name = "John")' Comment.Single '\n\n' Text 'objects' Name '[' Operator '1' Literal.Number.Integer ']' Operator ' ' Text '+=' Operator ' ' Text '2' Literal.Number.Integer ' ' Text '# same as: objects[1] = objects[1] + 2' Comment.Single '\n\n' Text 'objects' Name '[' Operator '1' Literal.Number.Integer ']' Operator ' ' Text '||' Operator '=' Operator ' ' Text '2' Literal.Number.Integer ' ' Text '# same as: objects[1]? || (objects[1] = 2)' Comment.Single '\n' Text 'objects' Name '[' Operator '1' Literal.Number.Integer ']' Operator ' ' Text '&&' Operator '=' Operator ' ' Text '2' Literal.Number.Integer ' ' Text '# same as: objects[1]? && (objects[1] = 2)' Comment.Single '\n\n' Text 'alias' Keyword ' ' Text 'PInt32' Name.Class ' ' Text '=' Operator ' ' Text 'Pointer' Name '(' Punctuation 'Int32' Name ')' Punctuation '\n\n' Text 'ptr' Name ' ' Text '=' Operator ' ' Text 'PInt32' Name '.' Operator 'malloc' Name '(' Punctuation '1' Literal.Number.Integer ')' Punctuation ' ' Text '# : Pointer(Int32)' Comment.Single '\n\n' Text 'alias' Keyword ' ' Text 'RecArray' Name.Class ' ' Text '=' Operator ' ' Text 'Array' Name '(' Punctuation 'Int32' Name ')' Punctuation ' ' Text '|' Operator ' ' Text 'Array' Name '(' Punctuation 'RecArray' Name ')' Punctuation '\n\n' Text 'ary' Name ' ' Text '=' Operator ' ' Text '[' Operator ']' Operator ' ' Text 'of' Keyword ' ' Text 'RecArray' Name '\n' Text 'ary' Name '.' Operator 'push' Name ' ' Text '[' Operator '1' Literal.Number.Integer ',' Punctuation ' ' Text '2' Literal.Number.Integer ',' Punctuation ' ' Text '3' Literal.Number.Integer ']' Operator '\n' Text 'ary' Name '.' Operator 'push' Name ' ' Text 'ary' Name '\n' Text 'ary' Name ' ' Text '# => [[1, 2, 3], [...]]' Comment.Single '\n\n' Text 'module' Keyword ' ' Text 'Json' Name.Namespace '\n ' Text 'alias' Keyword ' ' Text 'Type' Name.Class ' ' Text '=' Operator ' ' Text 'Nil' Name ' ' Text '|' Operator '\n ' Text 'Bool' Name ' ' Text '|' Operator '\n ' Text 'Int64' Name ' ' Text '|' Operator '\n ' Text 'Float64' Name ' ' Text '|' Operator '\n ' Text 'String' Name ' ' Text '|' Operator '\n ' Text 'Array' Name '(' Punctuation 'Type' Name ')' Punctuation ' ' Text '|' Operator '\n ' Text 'Hash' Name '(' Punctuation 'String' Name ',' Punctuation ' ' Text 'Type' Name ')' Punctuation '\n' Text 'end' Keyword '\n\n' Text 'a' Name ' ' Text '=' Operator ' ' Text '1' Literal.Number.Integer '\n' Text 'if' Keyword ' ' Text 'a' Name ' ' Text '>' Operator ' ' Text '0' Literal.Number.Integer '\n ' Text 'a' Name ' ' Text '=' Operator ' ' Text '10' Literal.Number.Integer '\n' Text 'end' Keyword '\n' Text 'a' Name ' ' Text '# => 10' Comment.Single '\n\n' Text 'b' Name ' ' Text '=' Operator ' ' Text '1' Literal.Number.Integer '\n' Text 'if' Keyword ' ' Text 'b' Name ' ' Text '>' Operator ' ' Text '2' Literal.Number.Integer '\n ' Text 'b' Name ' ' Text '=' Operator ' ' Text '10' Literal.Number.Integer '\n' Text 'else' Keyword '\n ' Text 'b' Name ' ' Text '=' Operator ' ' Text '20' Literal.Number.Integer '\n' Text 'end' Keyword '\n' Text 'b' Name ' ' Text '# => 20' Comment.Single '\n\n' Text 'if' Keyword ' ' Text 'some_condition' Name '\n ' Text 'do_something' Name '\n' Text 'elsif' Keyword ' ' Text 'some_other_condition' Name '\n ' Text 'do_something_else' Name '\n' Text 'else' Keyword '\n ' Text 'do_that' Name '\n' Text 'end' Keyword '\n\n' Text 'a' Name ' ' Text '=' Operator ' ' Text '1' Literal.Number.Integer '\n' Text 'if' Keyword ' ' Text 'some_condition' Name '\n ' Text 'a' Name ' ' Text '=' Operator ' ' Text '"' Literal.String.Double 'hello' Literal.String.Double '"' Literal.String.Double '\n' Text 'else' Keyword '\n ' Text 'a' Name ' ' Text '=' Operator ' ' Text 'true' Keyword.Constant '\n' Text 'end' Keyword '\n' Text '# a : String | Bool' Comment.Single '\n\n' Text 'b' Name ' ' Text '=' Operator ' ' Text '1' Literal.Number.Integer '\n' Text 'if' Keyword ' ' Text 'some_condition' Name '\n ' Text 'b' Name ' ' Text '=' Operator ' ' Text '"' Literal.String.Double 'hello' Literal.String.Double '"' Literal.String.Double '\n' Text 'end' Keyword '\n' Text '# b : Int32 | String' Comment.Single '\n\n' Text 'if' Keyword ' ' Text 'some_condition' Name '\n ' Text 'c' Name ' ' Text '=' Operator ' ' Text '1' Literal.Number.Integer '\n' Text 'else' Keyword '\n ' Text 'c' Name ' ' Text '=' Operator ' ' Text '"' Literal.String.Double 'hello' Literal.String.Double '"' Literal.String.Double '\n' Text 'end' Keyword '\n' Text '# c : Int32 | String' Comment.Single '\n\n' Text 'if' Keyword ' ' Text 'some_condition' Name '\n ' Text 'd' Name ' ' Text '=' Operator ' ' Text '1' Literal.Number.Integer '\n' Text 'end' Keyword '\n' Text '# d : Int32 | Nil' Comment.Single '\n\n' Text 'a' Name ' ' Text '=' Operator ' ' Text '1' Literal.Number.Integer '\n' Text 'if' Keyword ' ' Text 'some_condition' Name '\n ' Text 'a' Name ' ' Text '=' Operator ' ' Text '"' Literal.String.Double 'hello' Literal.String.Double '"' Literal.String.Double '\n ' Text '# a : String' Comment.Single '\n ' Text 'a' Name '.' Operator 'size' Name '\n' Text 'end' Keyword '\n' Text '# a : String | Int32' Comment.Single '\n\n' Text 'if' Keyword ' ' Text 'some_condition' Name '\n ' Text 'e' Name ' ' Text '=' Operator ' ' Text '1' Literal.Number.Integer '\n' Text 'else' Keyword '\n ' Text 'e' Name ' ' Text '=' Operator ' ' Text '"' Literal.String.Double 'hello' Literal.String.Double '"' Literal.String.Double '\n ' Text '# e : String' Comment.Single '\n ' Text 'return' Keyword '\n' Text 'end' Keyword '\n' Text '# e : Int32' Comment.Single '\n\n' Text 'enum' Keyword ' ' Text 'Color' Name.Class ' ' Text ':' Punctuation ' ' Text 'UInt8' Name '\n ' Text 'Red' Name ' ' Text '# 0' Comment.Single '\n ' Text 'Green' Name ' ' Text '# 1' Comment.Single '\n ' Text 'Blue' Name ' ' Text '=' Operator ' ' Text '5' Literal.Number.Integer ' ' Text '# overwritten to 5' Comment.Single '\n ' Text 'Yellow' Name ' ' Text '# 6 (5 + 1)' Comment.Single '\n\n ' Text 'def' Keyword ' ' Text 'red?' Name.Function '\n ' Text 'self' Keyword ' ' Text '==' Operator ' ' Text 'Color' Name '::' Operator 'Red' Name '\n ' Text 'end' Keyword '\n' Text 'end' Keyword '\n\n' Text 'Color' Name '::' Operator 'Red' Name '.' Operator 'value' Name ' ' Text '# :: UInt8' Comment.Single '\n\n' Text '@[' Operator 'Flags' Name.Decorator ']' Operator '\n' Text 'enum' Keyword ' ' Text 'IOMode' Name.Class '\n ' Text 'Read' Name ' ' Text '# 1' Comment.Single '\n ' Text 'Write' Name ' ' Text '# 2' Comment.Single '\n ' Text 'Async' Name ' ' Text '# 4' Comment.Single '\n' Text 'end' Keyword '\n\n' Text 'IOMode' Name '::' Operator 'None' Name '.' Operator 'value' Name ' ' Text '# => 0' Comment.Single '\n' Text 'IOMode' Name '::' Operator 'All' Name '.' Operator 'value' Name ' ' Text '# => 7' Comment.Single '\n\n' Text 'puts' Name.Builtin '(' Punctuation 'Color' Name '::' Operator 'Red' Name ')' Punctuation ' ' Text '# prints "Red"' Comment.Single '\n' Text 'puts' Name.Builtin '(' Punctuation 'IOMode' Name '::' Operator 'Write' Name ' ' Text '|' Operator ' ' Text 'IOMode' Name '::' Operator 'Async' Name ')' Punctuation ' ' Text '# prints "Write, Async"' Comment.Single '\n\n' Text 'puts' Name.Builtin ' ' Text 'Color' Name '.' Operator 'new' Name '(' Punctuation '1' Literal.Number.Integer ')' Punctuation ' ' Text '# => prints "Green"' Comment.Single '\n\n' Text 'puts' Name.Builtin ' ' Text 'Color' Name '.' Operator 'new' Name '(' Punctuation '10' Literal.Number.Integer ')' Punctuation ' ' Text '# => prints "10"' Comment.Single '\n\n' Text 'Color' Name '::' Operator 'Red' Name '.' Operator 'red?' Name ' ' Text '# => true' Comment.Single '\n' Text 'Color' Name '::' Operator 'Blue' Name '.' Operator 'red?' Name ' ' Text '# => false' Comment.Single '\n\n' Text 'def' Keyword ' ' Text 'paint' Name.Function '(' Punctuation 'color' Name ' ' Text ':' Punctuation ' ' Text 'Color' Name ')' Punctuation '\n ' Text 'case' Keyword ' ' Text 'color' Name '\n ' Text 'when' Keyword ' ' Text 'Color' Name '::' Operator 'Red' Name '\n ' Text '# ...' Comment.Single '\n ' Text 'else' Keyword '\n ' Text '# Unusual, but still can happen' Comment.Single '\n ' Text 'raise' Name.Builtin ' ' Text '"' Literal.String.Double 'unknown color: ' Literal.String.Double '#{' Literal.String.Interpol 'color' Name '}' Literal.String.Interpol '"' Literal.String.Double '\n ' Text 'end' Keyword '\n' Text 'end' Keyword '\n\n' Text 'paint' Name ' ' Text 'Color' Name '::' Operator 'Red' Name '\n\n' Text 'def' Keyword ' ' Text 'paint' Name.Function '(' Punctuation 'color' Name ' ' Text ':' Punctuation ' ' Text 'Symbol' Name ')' Punctuation '\n ' Text 'case' Keyword ' ' Text 'color' Name '\n ' Text 'when' Keyword ' ' Text ':red' Literal.String.Symbol '\n ' Text '# ...' Comment.Single '\n ' Text 'else' Keyword '\n ' Text 'raise' Name.Builtin ' ' Text '"' Literal.String.Double 'unknown color: ' Literal.String.Double '#{' Literal.String.Interpol 'color' Name '}' Literal.String.Interpol '"' Literal.String.Double '\n ' Text 'end' Keyword '\n' Text 'end' Keyword '\n\n' Text 'paint' Name ' ' Text ':red' Literal.String.Symbol '\n\n' Text 'name' Name ' ' Text '=' Operator ' ' Text '"' Literal.String.Double 'Crystal' Literal.String.Double '"' Literal.String.Double '\n' Text 'age' Name ' ' Text '=' Operator ' ' Text '1' Literal.Number.Integer '\n\n' Text 'flower' Name ' ' Text '=' Operator ' ' Text '"' Literal.String.Double 'Tulip' Literal.String.Double '"' Literal.String.Double '\n' Text "# At this point 'flower' is a String" Comment.Single '\n\n' Text 'flower' Name ' ' Text '=' Operator ' ' Text '1' Literal.Number.Integer '\n\n' Text "# At this point 'flower' is an Int32" Comment.Single '\n\n' Text 'class' Keyword ' ' Text 'Foo' Name.Class '\n ' Text 'def' Keyword ' ' Text 'finalize' Name.Function '\n ' Text '# Invoked when Foo is garbage-collected' Comment.Single '\n ' Text 'puts' Name.Builtin ' ' Text '"' Literal.String.Double 'Bye bye from ' Literal.String.Double '#{' Literal.String.Interpol 'self' Keyword '}' Literal.String.Interpol '!' Literal.String.Double '"' Literal.String.Double '\n ' Text 'end' Keyword '\n' Text 'end' Keyword '\n\n' Text '# Prints "Bye bye ...!" for ever' Comment.Single '\n' Text 'loop' Name.Builtin ' ' Text 'do' Keyword '\n ' Text 'Foo' Name '.' Operator 'new' Name '\n' Text 'end' Keyword '\n\n' Text '# Defines a method in the program' Comment.Single '\n' Text 'def' Keyword ' ' Text 'add' Name.Function '(' Punctuation 'x' Name ',' Punctuation ' ' Text 'y' Name ')' Punctuation '\n ' Text 'x' Name ' ' Text '+' Operator ' ' Text 'y' Name '\n' Text 'end' Keyword '\n\n' Text '# Invokes the add method in the program' Comment.Single '\n' Text 'add' Name '(' Punctuation '1' Literal.Number.Integer ',' Punctuation ' ' Text '2' Literal.Number.Integer ')' Punctuation ' ' Text '# => 3' Comment.Single '\n\n' Text 'def' Keyword ' ' Text 'even?' Name.Function '(' Punctuation 'num' Name ')' Punctuation '\n ' Text 'if' Keyword ' ' Text 'num' Name ' ' Text '%' Operator ' ' Text '2' Literal.Number.Integer ' ' Text '==' Operator ' ' Text '0' Literal.Number.Integer '\n ' Text 'return' Keyword ' ' Text 'true' Keyword.Constant '\n ' Text 'end' Keyword '\n\n ' Text 'return' Keyword ' ' Text 'false' Keyword.Constant '\n' Text 'end' Keyword '\n\n' Text 'def' Keyword ' ' Text 'add' Name.Function '(' Punctuation 'x' Name ',' Punctuation ' ' Text 'y' Name ')' Punctuation '\n ' Text 'x' Name ' ' Text '+' Operator ' ' Text 'y' Name '\n' Text 'end' Keyword '\n\n' Text 'class' Keyword ' ' Text 'Foo' Name.Class '\n ' Text 'def' Keyword ' ' Text 'bar' Name.Function '\n ' Text "# invokes the program's add method" Comment.Single '\n ' Text 'add' Name '(' Punctuation '1' Literal.Number.Integer ',' Punctuation ' ' Text '2' Literal.Number.Integer ')' Punctuation '\n\n ' Text "# invokes Foo's baz method" Comment.Single '\n ' Text 'baz' Name '(' Punctuation '1' Literal.Number.Integer ',' Punctuation ' ' Text '2' Literal.Number.Integer ')' Punctuation '\n ' Text 'end' Keyword '\n\n ' Text 'def' Keyword ' ' Text 'baz' Name.Function '(' Punctuation 'x' Name ',' Punctuation ' ' Text 'y' Name ')' Punctuation '\n ' Text 'x' Name ' ' Text '*' Operator ' ' Text 'y' Name '\n ' Text 'end' Keyword '\n' Text 'end' Keyword '\n\n' Text 'def' Keyword ' ' Text 'baz' Name.Function '(' Punctuation 'x' Name ',' Punctuation ' ' Text 'y' Name ')' Punctuation '\n ' Text 'x' Name ' ' Text '+' Operator ' ' Text 'y' Name '\n' Text 'end' Keyword '\n\n' Text 'class' Keyword ' ' Text 'Foo' Name.Class '\n ' Text 'def' Keyword ' ' Text 'bar' Name.Function '\n ' Text 'baz' Name '(' Punctuation '4' Literal.Number.Integer ',' Punctuation ' ' Text '2' Literal.Number.Integer ')' Punctuation ' ' Text '# => 2' Comment.Single '\n ' Text '::' Operator 'baz' Name '(' Punctuation '4' Literal.Number.Integer ',' Punctuation ' ' Text '2' Literal.Number.Integer ')' Punctuation ' ' Text '# => 6' Comment.Single '\n ' Text 'end' Keyword '\n\n ' Text 'def' Keyword ' ' Text 'baz' Name.Function '(' Punctuation 'x' Name ',' Punctuation ' ' Text 'y' Name ')' Punctuation '\n ' Text 'x' Name ' ' Text '-' Operator ' ' Text 'y' Name '\n ' Text 'end' Keyword '\n' Text 'end' Keyword '\n\n' Text 'x' Name ' ' Text '=' Operator ' ' Text '1' Literal.Number.Integer '\n\n' Text 'def' Keyword ' ' Text 'add' Name.Function '(' Punctuation 'y' Name ')' Punctuation '\n ' Text 'x' Name ' ' Text '+' Operator ' ' Text 'y' Name ' ' Text "# error: undefined local variable or method 'x'" Comment.Single '\n' Text 'end' Keyword '\n\n' Text 'add' Name '(' Punctuation '2' Literal.Number.Integer ')' Punctuation '\n\n' Text 'add' Name ' ' Text '1' Literal.Number.Integer ',' Punctuation ' ' Text '2' Literal.Number.Integer ' ' Text '# same as add(1, 2)' Comment.Single '\n\n' Text 'class' Keyword ' ' Text 'Counter' Name.Class '\n ' Text '@@instances' Name.Variable.Class ' ' Text '=' Operator ' ' Text '0' Literal.Number.Integer '\n\n ' Text 'def' Keyword ' ' Text 'initialize' Name.Function '\n ' Text '@@instances' Name.Variable.Class ' ' Text '+=' Operator ' ' Text '1' Literal.Number.Integer '\n ' Text 'end' Keyword '\n\n ' Text 'def' Keyword ' ' Text 'self' Name.Class '.' Operator 'instances' Name.Function '\n ' Text '@@instances' Name.Variable.Class '\n ' Text 'end' Keyword '\n' Text 'end' Keyword '\n\n' Text 'Counter' Name '.' Operator 'instances' Name ' ' Text '# => 0' Comment.Single '\n' Text 'Counter' Name '.' Operator 'new' Name '\n' Text 'Counter' Name '.' Operator 'new' Name '\n' Text 'Counter' Name '.' Operator 'new' Name '\n' Text 'Counter' Name '.' Operator 'instances' Name ' ' Text '# => 3' Comment.Single '\n\n' Text 'class' Keyword ' ' Text 'Counter' Name.Class '\n ' Text 'def' Keyword ' ' Text 'self' Name.Class '.' Operator 'increment' Name.Function '\n ' Text '@@instances' Name.Variable.Class ' ' Text '+=' Operator ' ' Text '1' Literal.Number.Integer '\n ' Text 'end' Keyword '\n' Text 'end' Keyword '\n\n' Text 'Counter' Name '.' Operator 'increment' Name ' ' Text "# Error: undefined method '+' for Nil" Comment.Single '\n\n' Text 'class' Keyword ' ' Text 'Parent' Name.Class '\n ' Text '@@counter' Name.Variable.Class ' ' Text '=' Operator ' ' Text '0' Literal.Number.Integer '\n' Text 'end' Keyword '\n\n' Text 'class' Keyword ' ' Text 'Child' Name.Class ' ' Text '<' Operator ' ' Text 'Parent' Name '\n ' Text 'def' Keyword ' ' Text 'self' Name.Class '.' Operator 'counter' Name.Function '\n ' Text '@@counter' Name.Variable.Class '\n ' Text 'end' Keyword '\n' Text 'end' Keyword '\n\n' Text 'Child' Name '.' Operator 'counter' Name ' ' Text '# => nil' Comment.Single '\n\n' Text 'unless' Keyword ' ' Text 'some_condition' Name '\n ' Text 'then_expression' Name '\n' Text 'else' Keyword '\n ' Text 'else_expression' Name '\n' Text 'end' Keyword '\n\n' Text '# Can also be written as a suffix' Comment.Single '\n' Text 'close_door' Name ' ' Text 'unless' Keyword ' ' Text 'door_closed?' Name '\n\n' Text 'a' Name ' ' Text '=' Operator ' ' Text '1' Literal.Number.Integer '\n' Text 'b' Name ' ' Text '=' Operator ' ' Text 'typeof' Keyword.Pseudo '(' Punctuation 'a' Name ')' Punctuation ' ' Text '# => Int32' Comment.Single '\n\n' Text 'typeof' Keyword.Pseudo '(' Punctuation '1' Literal.Number.Integer ',' Punctuation ' ' Text '"' Literal.String.Double 'a' Literal.String.Double '"' Literal.String.Double ',' Punctuation ' ' Text "'a'" Literal.String.Char ')' Punctuation ' ' Text '# => (Int32 | String | Char)' Comment.Single '\n\n' Text 'hash' Name ' ' Text '=' Operator ' ' Text '{' Punctuation '}' Punctuation ' ' Text 'of' Keyword ' ' Text 'Int32' Name ' ' Text '=' Operator '>' Operator ' ' Text 'String' Name '\n' Text 'another_hash' Name ' ' Text '=' Operator ' ' Text 'typeof' Keyword.Pseudo '(' Punctuation 'hash' Name ')' Punctuation '.' Operator 'new' Name ' ' Text '# :: Hash(Int32, String)' Comment.Single '\n\n' Text 'class' Keyword ' ' Text 'Array' Name.Class '\n ' Text 'def' Keyword ' ' Text 'self' Name.Class '.' Operator 'elem_type' Name.Function '(' Punctuation 'typ' Name ')' Punctuation '\n ' Text 'if' Keyword ' ' Text 'typ' Name '.is_a?' Keyword.Pseudo '(' Punctuation 'Array' Name ')' Punctuation '\n ' Text 'elem_type' Name '(' Punctuation 'typ' Name '.' Operator 'first' Name ')' Punctuation '\n ' Text 'else' Keyword '\n ' Text 'typ' Name '\n ' Text 'end' Keyword '\n ' Text 'end' Keyword '\n' Text 'end' Keyword '\n\n' Text 'nest' Name ' ' Text '=' Operator ' ' Text '[' Operator '1' Literal.Number.Integer ',' Punctuation ' ' Text '[' Operator '"' Literal.String.Double 'b' Literal.String.Double '"' Literal.String.Double ',' Punctuation ' ' Text '[' Operator ':c' Literal.String.Symbol ',' Punctuation ' ' Text '[' Operator "'d'" Literal.String.Char ']' Operator ']' Operator ']' Operator ']' Operator '\n' Text 'flat' Name ' ' Text '=' Operator ' ' Text 'Array' Name '(' Punctuation 'typeof' Keyword.Pseudo '(' Punctuation 'Array' Name '.' Operator 'elem_type' Name '(' Punctuation 'nest' Name ')' Punctuation ')' Punctuation ')' Punctuation '.' Operator 'new' Name '\n' Text 'typeof' Keyword.Pseudo '(' Punctuation 'nest' Name ')' Punctuation ' ' Text '# => Array(Int32 | Array(String | Array(Symbol | Array(Char))))' Comment.Single '\n' Text 'typeof' Keyword.Pseudo '(' Punctuation 'flat' Name ')' Punctuation ' ' Text '# => Array(String | Int32 | Symbol | Char)' Comment.Single '\n\n' Text 'a' Name ' ' Text '=' Operator ' ' Text '2' Literal.Number.Integer ' ' Text 'if' Keyword ' ' Text 'some_condition' Name '\n\n' Text 'x' Name ' ' Text '=' Operator ' ' Text '0' Literal.Number.Integer '\n' Text 'proc' Name ' ' Text '=' Operator ' ' Text '-' Operator '>' Operator '{' Punctuation ' ' Text 'x' Name ' ' Text '+=' Operator ' ' Text '1' Literal.Number.Integer ';' Punctuation ' ' Text 'x' Name ' ' Text '}' Punctuation '\n' Text 'proc' Name '.' Operator 'call' Name ' ' Text '# => 1' Comment.Single '\n' Text 'proc' Name '.' Operator 'call' Name ' ' Text '# => 2' Comment.Single '\n' Text 'x' Name ' ' Text '# => 2' Comment.Single '\n\n' Text 'def' Keyword ' ' Text 'counter' Name.Function '\n ' Text 'x' Name ' ' Text '=' Operator ' ' Text '0' Literal.Number.Integer '\n ' Text '-' Operator '>' Operator '{' Punctuation ' ' Text 'x' Name ' ' Text '+=' Operator ' ' Text '1' Literal.Number.Integer ';' Punctuation ' ' Text 'x' Name ' ' Text '}' Punctuation '\n' Text 'end' Keyword '\n\n' Text 'proc' Name ' ' Text '=' Operator ' ' Text 'counter' Name '\n' Text 'proc' Name '.' Operator 'call' Name ' ' Text '# => 1' Comment.Single '\n' Text 'proc' Name '.' Operator 'call' Name ' ' Text '# => 2' Comment.Single '\n\n' Text 'def' Keyword ' ' Text 'foo' Name.Function '\n ' Text 'yield' Keyword '\n' Text 'end' Keyword '\n\n' Text 'x' Name ' ' Text '=' Operator ' ' Text '1' Literal.Number.Integer '\n' Text 'foo' Name ' ' Text 'do' Keyword '\n ' Text 'x' Name ' ' Text '=' Operator ' ' Text '"' Literal.String.Double 'hello' Literal.String.Double '"' Literal.String.Double '\n' Text 'end' Keyword '\n' Text 'x' Name ' ' Text '# : Int32 | String' Comment.Single '\n\n' Text 'x' Name ' ' Text '=' Operator ' ' Text '1' Literal.Number.Integer '\n' Text 'foo' Name ' ' Text 'do' Keyword '\n ' Text 'x' Name ' ' Text '=' Operator ' ' Text '"' Literal.String.Double 'hello' Literal.String.Double '"' Literal.String.Double '\n' Text 'end' Keyword '\n' Text 'x' Name ' ' Text '# : Int32 | String' Comment.Single '\n\n' Text 'x' Name ' ' Text '=' Operator ' ' Text "'a'" Literal.String.Char '\n' Text 'x' Name ' ' Text '# : Char' Comment.Single '\n\n' Text 'def' Keyword ' ' Text 'capture' Name.Function '(' Punctuation '&' Operator 'block' Name ')' Punctuation '\n ' Text 'block' Name '\n' Text 'end' Keyword '\n\n' Text 'x' Name ' ' Text '=' Operator ' ' Text '1' Literal.Number.Integer '\n' Text 'capture' Name ' ' Text '{' Punctuation ' ' Text 'x' Name ' ' Text '=' Operator ' ' Text '"' Literal.String.Double 'hello' Literal.String.Double '"' Literal.String.Double ' ' Text '}' Punctuation '\n\n' Text 'x' Name ' ' Text '=' Operator ' ' Text "'a'" Literal.String.Char '\n' Text 'x' Name ' ' Text '# : Int32 | String | Char' Comment.Single '\n\n' Text 'def' Keyword ' ' Text 'capture' Name.Function '(' Punctuation '&' Operator 'block' Name ')' Punctuation '\n ' Text 'block' Name '\n' Text 'end' Keyword '\n\n' Text 'x' Name ' ' Text '=' Operator ' ' Text '1' Literal.Number.Integer '\n' Text '-' Operator '>' Operator '{' Punctuation ' ' Text 'x' Name ' ' Text '=' Operator ' ' Text '"' Literal.String.Double 'hello' Literal.String.Double '"' Literal.String.Double ' ' Text '}' Punctuation '\n\n' Text 'x' Name ' ' Text '=' Operator ' ' Text "'a'" Literal.String.Char '\n' Text 'x' Name ' ' Text '# : Int32 | String | Char' Comment.Single '\n\n' Text 'abstract' Keyword ' ' Text 'class' Keyword ' ' Text 'Animal' Name.Class '\n ' Text '# Makes this animal talk' Comment.Single '\n ' Text 'abstract' Keyword ' ' Text 'def' Keyword ' ' Text 'talk' Name.Function '\n' Text 'end' Keyword '\n\n' Text 'class' Keyword ' ' Text 'Dog' Name.Class ' ' Text '<' Operator ' ' Text 'Animal' Name '\n ' Text 'def' Keyword ' ' Text 'talk' Name.Function '\n ' Text '"' Literal.String.Double 'Woof!' Literal.String.Double '"' Literal.String.Double '\n ' Text 'end' Keyword '\n' Text 'end' Keyword '\n\n' Text 'class' Keyword ' ' Text 'Cat' Name.Class ' ' Text '<' Operator ' ' Text 'Animal' Name '\n ' Text 'def' Keyword ' ' Text 'talk' Name.Function '\n ' Text '"' Literal.String.Double 'Miau' Literal.String.Double '"' Literal.String.Double '\n ' Text 'end' Keyword '\n' Text 'end' Keyword '\n\n' Text 'class' Keyword ' ' Text 'Person' Name.Class '\n ' Text 'getter' Name.Builtin.Pseudo ' ' Text 'pet' Name '\n\n ' Text 'def' Keyword ' ' Text 'initialize' Name.Function '(' Punctuation '@name' Name.Variable.Instance ',' Punctuation ' ' Text '@pet' Name.Variable.Instance ')' Punctuation '\n ' Text 'end' Keyword '\n' Text 'end' Keyword '\n\n' Text 'john' Name ' ' Text '=' Operator ' ' Text 'Person' Name '.' Operator 'new' Name ' ' Text '"' Literal.String.Double 'John' Literal.String.Double '"' Literal.String.Double ',' Punctuation ' ' Text 'Dog' Name '.' Operator 'new' Name '\n' Text 'peter' Name ' ' Text '=' Operator ' ' Text 'Person' Name '.' Operator 'new' Name ' ' Text '"' Literal.String.Double 'Peter' Literal.String.Double '"' Literal.String.Double ',' Punctuation ' ' Text 'Cat' Name '.' Operator 'new' Name '\n\n' Text 'john' Name '.' Operator 'pet' Name '.' Operator 'talk' Name ' ' Text '# => "Woof!"' Comment.Single '\n\n' Text 'a' Name ' ' Text '=' Operator ' ' Text '1' Literal.Number.Integer ' ' Text '>' Operator ' ' Text '2' Literal.Number.Integer ' ' Text '?' Operator ' ' Text '3' Literal.Number.Integer ' ' Text ':' Punctuation ' ' Text '4' Literal.Number.Integer '\n\n' Text '# The above is the same as:' Comment.Single '\n' Text 'a' Name ' ' Text '=' Operator ' ' Text 'if' Keyword ' ' Text '1' Literal.Number.Integer ' ' Text '>' Operator ' ' Text '2' Literal.Number.Integer '\n ' Text '3' Literal.Number.Integer '\n ' Text 'else' Keyword '\n ' Text '4' Literal.Number.Integer '\n ' Text 'end' Keyword '\n\n' Text 'def' Keyword ' ' Text 'some_method' Name.Function ' ' Text ':' Punctuation ' ' Text 'String' Name '\n ' Text '"' Literal.String.Double 'hello' Literal.String.Double '"' Literal.String.Double '\n' Text 'end' Keyword '\n\n' Text 'PI' Name.Constant ' ' Text '=' Operator ' ' Text '3.14' Literal.Number.Float '\n\n' Text 'module' Keyword ' ' Text 'Earth' Name.Namespace '\n ' Text 'RADIUS' Name.Constant ' ' Text '=' Operator ' ' Text '6_371_000' Literal.Number.Integer '\n' Text 'end' Keyword '\n\n' Text 'PI' Name.Constant ' ' Text '# => 3.14' Comment.Single '\n' Text 'Earth' Name '::' Operator 'RADIUS' Name.Constant ' ' Text '# => 6_371_000' Comment.Single '\n\n' Text 'TEN' Name.Constant ' ' Text '=' Operator ' ' Text 'begin' Keyword '\n ' Text 'a' Name ' ' Text '=' Operator ' ' Text '0' Literal.Number.Integer '\n ' Text 'while' Keyword ' ' Text 'a' Name ' ' Text '<' Operator ' ' Text '10' Literal.Number.Integer '\n ' Text 'a' Name ' ' Text '+=' Operator ' ' Text '1' Literal.Number.Integer '\n ' Text 'end' Keyword '\n ' Text 'a' Name '\n' Text 'end' Keyword '\n\n' Text 'TEN' Name.Constant ' ' Text '# => 10' Comment.Single '\n\n' Text 'class' Keyword ' ' Text 'Person' Name.Class '\n ' Text 'getter' Name.Builtin.Pseudo ' ' Text 'name' Name '\n\n ' Text 'def' Keyword ' ' Text 'initialize' Name.Function '(' Punctuation '@name' Name.Variable.Instance ')' Punctuation '\n ' Text '@age' Name.Variable.Instance ' ' Text '=' Operator ' ' Text '0' Literal.Number.Integer '\n ' Text 'end' Keyword '\n' Text 'end' Keyword '\n\n' Text 'john' Name ' ' Text '=' Operator ' ' Text 'Person' Name '.' Operator 'new' Name ' ' Text '"' Literal.String.Double 'John' Literal.String.Double '"' Literal.String.Double '\n' Text 'john' Name '.' Operator 'name' Name ' ' Text '# => "John"' Comment.Single '\n' Text 'john' Name '.' Operator 'name' Name '.' Operator 'size' Name ' ' Text '# => 4' Comment.Single '\n\n' Text 'one' Name ' ' Text '=' Operator ' ' Text 'Person' Name '.' Operator 'new' Name ' ' Text '1' Literal.Number.Integer '\n' Text 'one' Name '.' Operator 'name' Name ' ' Text '# => 1' Comment.Single '\n' Text 'one' Name '.' Operator 'name' Name ' ' Text '+' Operator ' ' Text '2' Literal.Number.Integer ' ' Text '# => 3' Comment.Single '\n\n' Text 'john' Name ' ' Text '=' Operator ' ' Text 'Person' Name '.' Operator 'new' Name ' ' Text '"' Literal.String.Double 'John' Literal.String.Double '"' Literal.String.Double '\n' Text 'one' Name ' ' Text '=' Operator ' ' Text 'Person' Name '.' Operator 'new' Name ' ' Text '1' Literal.Number.Integer '\n\n' Text 'john' Name ' ' Text '=' Operator ' ' Text 'Person' Name '.' Operator 'new' Name ' ' Text '"' Literal.String.Double 'John' Literal.String.Double '"' Literal.String.Double '\n' Text 'one' Name ' ' Text '=' Operator ' ' Text 'Person' Name '.' Operator 'new' Name ' ' Text '1' Literal.Number.Integer '\n\n' Text "# Error: undefined method 'size' for Int32" Comment.Single '\n' Text 'john' Name '.' Operator 'name' Name '.' Operator 'size' Name '\n\n' Text "# Error: no overload matches 'String#+' with types Int32" Comment.Single '\n' Text 'john' Name '.' Operator 'name' Name ' ' Text '+' Operator ' ' Text '3' Literal.Number.Integer '\n\n' Text 'john' Name ' ' Text '=' Operator ' ' Text 'Person' Name '.' Operator 'new' Name ' ' Text '"' Literal.String.Double 'John' Literal.String.Double '"' Literal.String.Double '\n' Text 'john' Name '.' Operator 'name' Name '.' Operator 'size' Name '\n' Text 'one' Name ' ' Text '=' Operator ' ' Text 'Person' Name '.' Operator 'new' Name ' ' Text '1' Literal.Number.Integer '\n\n' Text 'class' Keyword ' ' Text 'Person' Name.Class '\n ' Text 'getter' Name.Builtin.Pseudo ' ' Text 'name' Name '\n\n ' Text 'def' Keyword ' ' Text 'initialize' Name.Function '(' Punctuation '@name' Name.Variable.Instance ')' Punctuation '\n ' Text '@age' Name.Variable.Instance ' ' Text '=' Operator ' ' Text '0' Literal.Number.Integer '\n ' Text 'end' Keyword '\n\n ' Text 'def' Keyword ' ' Text 'address' Name.Function '\n ' Text '@address' Name.Variable.Instance '\n ' Text 'end' Keyword '\n\n ' Text 'def' Keyword ' ' Text 'address' Name.Function '=' Operator '(' Punctuation '@address' Name.Variable.Instance ')' Punctuation '\n ' Text 'end' Keyword '\n' Text 'end' Keyword '\n\n' Text 'john' Name ' ' Text '=' Operator ' ' Text 'Person' Name '.' Operator 'new' Name ' ' Text '"' Literal.String.Double 'John' Literal.String.Double '"' Literal.String.Double '\n' Text 'john' Name '.' Operator 'address' Name ' ' Text '=' Operator ' ' Text '"' Literal.String.Double 'Argentina' Literal.String.Double '"' Literal.String.Double '\n\n' Text "# Error: undefined method 'size' for Nil" Comment.Single '\n' Text 'john' Name '.' Operator 'address' Name '.' Operator 'size' Name '\n\n' Text 'class' Keyword ' ' Text 'Person' Name.Class '\n ' Text '@age' Name.Variable.Instance ' ' Text '=' Operator ' ' Text '0' Literal.Number.Integer '\n\n ' Text 'def' Keyword ' ' Text 'initialize' Name.Function '(' Punctuation '@name' Name.Variable.Instance ')' Punctuation '\n ' Text 'end' Keyword '\n' Text 'end' Keyword '\n\n' Text 'class' Keyword ' ' Text 'Person' Name.Class '\n ' Text '@age' Name.Variable.Instance ' ' Text ':' Punctuation ' ' Text 'Int32' Name '\n\n ' Text 'def' Keyword ' ' Text 'initialize' Name.Function '(' Punctuation '@name' Name.Variable.Instance ')' Punctuation '\n ' Text '@age' Name.Variable.Instance ' ' Text '=' Operator ' ' Text '0' Literal.Number.Integer '\n ' Text 'end' Keyword '\n' Text 'end' Keyword '\n\n' Text 'a' Name ' ' Text '=' Operator ' ' Text 'if' Keyword ' ' Text '2' Literal.Number.Integer ' ' Text '>' Operator ' ' Text '1' Literal.Number.Integer '\n ' Text '3' Literal.Number.Integer '\n ' Text 'else' Keyword '\n ' Text '4' Literal.Number.Integer '\n ' Text 'end' Keyword '\n' Text 'a' Name ' ' Text '# => 3' Comment.Single '\n\n' Text 'if' Keyword ' ' Text '1' Literal.Number.Integer ' ' Text '>' Operator ' ' Text '2' Literal.Number.Integer '\n' Text 'else' Keyword '\n ' Text '3' Literal.Number.Integer '\n' Text 'end' Keyword '\n\n' Text 'def' Keyword ' ' Text 'twice' Name.Function '(' Punctuation '&' Operator 'block' Name ')' Punctuation '\n ' Text 'yield' Keyword '\n ' Text 'yield' Keyword '\n' Text 'end' Keyword '\n\n' Text 'twice' Name '(' Punctuation ')' Punctuation ' ' Text 'do' Keyword '\n ' Text 'puts' Name.Builtin ' ' Text '"' Literal.String.Double 'Hello!' Literal.String.Double '"' Literal.String.Double '\n' Text 'end' Keyword '\n\n' Text 'twice' Name ' ' Text 'do' Keyword '\n ' Text 'puts' Name.Builtin ' ' Text '"' Literal.String.Double 'Hello!' Literal.String.Double '"' Literal.String.Double '\n' Text 'end' Keyword '\n\n' Text 'twice' Name ' ' Text '{' Punctuation ' ' Text 'puts' Name.Builtin ' ' Text '"' Literal.String.Double 'Hello!' Literal.String.Double '"' Literal.String.Double ' ' Text '}' Punctuation '\n\n' Text 'def' Keyword ' ' Text 'twice' Name.Function '\n ' Text 'yield' Keyword ' ' Text '1' Literal.Number.Integer '\n ' Text 'yield' Keyword ' ' Text '2' Literal.Number.Integer '\n' Text 'end' Keyword '\n\n' Text 'twice' Name ' ' Text 'do' Keyword ' ' Text '|' Operator 'i' Name '|' Operator '\n ' Text 'puts' Name.Builtin ' ' Text '"' Literal.String.Double 'Got ' Literal.String.Double '#{' Literal.String.Interpol 'i' Name '}' Literal.String.Interpol '"' Literal.String.Double '\n' Text 'end' Keyword '\n\n' Text 'twice' Name ' ' Text '{' Punctuation ' ' Text '|' Operator 'i' Name '|' Operator ' ' Text 'puts' Name.Builtin ' ' Text '"' Literal.String.Double 'Got ' Literal.String.Double '#{' Literal.String.Interpol 'i' Name '}' Literal.String.Interpol '"' Literal.String.Double ' ' Text '}' Punctuation '\n\n' Text 'def' Keyword ' ' Text 'many' Name.Function '\n ' Text 'yield' Keyword ' ' Text '1' Literal.Number.Integer ',' Punctuation ' ' Text '2' Literal.Number.Integer ',' Punctuation ' ' Text '3' Literal.Number.Integer '\n' Text 'end' Keyword '\n\n' Text 'many' Name ' ' Text 'do' Keyword ' ' Text '|' Operator 'x' Name ',' Punctuation ' ' Text 'y' Name ',' Punctuation ' ' Text 'z' Name '|' Operator '\n ' Text 'puts' Name.Builtin ' ' Text 'x' Name ' ' Text '+' Operator ' ' Text 'y' Name ' ' Text '+' Operator ' ' Text 'z' Name '\n' Text 'end' Keyword '\n\n' Text '# Output: 6' Comment.Single '\n\n' Text 'def' Keyword ' ' Text 'many' Name.Function '\n ' Text 'yield' Keyword ' ' Text '1' Literal.Number.Integer ',' Punctuation ' ' Text '2' Literal.Number.Integer ',' Punctuation ' ' Text '3' Literal.Number.Integer '\n' Text 'end' Keyword '\n\n' Text 'many' Name ' ' Text 'do' Keyword ' ' Text '|' Operator 'x' Name ',' Punctuation ' ' Text 'y' Name '|' Operator '\n ' Text 'puts' Name.Builtin ' ' Text 'x' Name ' ' Text '+' Operator ' ' Text 'y' Name '\n' Text 'end' Keyword '\n\n' Text '# Output: 3' Comment.Single '\n\n' Text 'def' Keyword ' ' Text 'twice' Name.Function '\n ' Text 'yield' Keyword '\n ' Text 'yield' Keyword '\n' Text 'end' Keyword '\n\n' Text 'twice' Name ' ' Text 'do' Keyword ' ' Text '|' Operator 'i' Name '|' Operator '\n ' Text 'puts' Name.Builtin ' ' Text 'i' Name '.' Operator 'inspect' Name '\n' Text 'end' Keyword '\n\n' Text 'def' Keyword ' ' Text 'some' Name.Function '\n ' Text 'yield' Keyword ' ' Text '1' Literal.Number.Integer ',' Punctuation ' ' Text "'a'" Literal.String.Char '\n ' Text 'yield' Keyword ' ' Text 'true' Keyword.Constant ',' Punctuation ' ' Text '"' Literal.String.Double 'hello' Literal.String.Double '"' Literal.String.Double '\n ' Text 'yield' Keyword ' ' Text '2' Literal.Number.Integer '\n' Text 'end' Keyword '\n\n' Text 'some' Name ' ' Text 'do' Keyword ' ' Text '|' Operator 'first' Name ',' Punctuation ' ' Text 'second' Name '|' Operator '\n ' Text '# first is Int32 | Bool' Comment.Single '\n ' Text '# second is Char | String | Nil' Comment.Single '\n' Text 'end' Keyword '\n\n' Text 'method' Name ' ' Text 'do' Keyword ' ' Text '|' Operator 'argument' Name '|' Operator '\n ' Text 'argument' Name '.' Operator 'some_method' Name '\n' Text 'end' Keyword '\n\n' Text 'method' Name '(' Punctuation '&' Operator '.' Operator 'some_method' Name ')' Punctuation '\n\n' Text 'method' Name ' ' Text '&' Operator '.' Operator 'some_method' Name '(' Punctuation 'arg1' Name ',' Punctuation ' ' Text 'arg2' Name ')' Punctuation '\n\n' Text 'method' Name ' ' Text '&' Operator '.' Operator '+' Name.Operator '(' Punctuation '2' Literal.Number.Integer ')' Punctuation '\n' Text 'method' Name ' ' Text '&' Operator '.' Operator '[' Name 'index' Name ']' Operator '\n\n' Text 'def' Keyword ' ' Text 'twice' Name.Function '\n ' Text 'v1' Name ' ' Text '=' Operator ' ' Text 'yield' Keyword ' ' Text '1' Literal.Number.Integer '\n ' Text 'puts' Name.Builtin ' ' Text 'v1' Name '\n\n ' Text 'v2' Name ' ' Text '=' Operator ' ' Text 'yield' Keyword ' ' Text '2' Literal.Number.Integer '\n ' Text 'puts' Name.Builtin ' ' Text 'v2' Name '\n' Text 'end' Keyword '\n\n' Text 'twice' Name ' ' Text 'do' Keyword ' ' Text '|' Operator 'i' Name '|' Operator '\n ' Text 'i' Name ' ' Text '+' Operator ' ' Text '1' Literal.Number.Integer '\n' Text 'end' Keyword '\n\n' Text 'ary' Name ' ' Text '=' Operator ' ' Text '[' Operator '1' Literal.Number.Integer ',' Punctuation ' ' Text '2' Literal.Number.Integer ',' Punctuation ' ' Text '3' Literal.Number.Integer ']' Operator '\n' Text 'ary' Name '.' Operator 'map' Name ' ' Text '{' Punctuation ' ' Text '|' Operator 'x' Name '|' Operator ' ' Text 'x' Name ' ' Text '+' Operator ' ' Text '1' Literal.Number.Integer ' ' Text '}' Punctuation ' ' Text '# => [2, 3, 4]' Comment.Single '\n' Text 'ary' Name '.' Operator 'select' Name ' ' Text '{' Punctuation ' ' Text '|' Operator 'x' Name '|' Operator ' ' Text 'x' Name ' ' Text '%' Operator ' ' Text '2' Literal.Number.Integer ' ' Text '==' Operator ' ' Text '1' Literal.Number.Integer ' ' Text '}' Punctuation ' ' Text '# => [1, 3]' Comment.Single '\n\n' Text 'def' Keyword ' ' Text 'transform' Name.Function '(' Punctuation 'value' Name ')' Punctuation '\n ' Text 'yield' Keyword ' ' Text 'value' Name '\n' Text 'end' Keyword '\n\n' Text 'transform' Name '(' Punctuation '1' Literal.Number.Integer ')' Punctuation ' ' Text '{' Punctuation ' ' Text '|' Operator 'x' Name '|' Operator ' ' Text 'x' Name ' ' Text '+' Operator ' ' Text '1' Literal.Number.Integer ' ' Text '}' Punctuation ' ' Text '# => 2' Comment.Single '\n\n' Text 'def' Keyword ' ' Text 'thrice' Name.Function '\n ' Text 'puts' Name.Builtin ' ' Text '"' Literal.String.Double 'Before 1' Literal.String.Double '"' Literal.String.Double '\n ' Text 'yield' Keyword ' ' Text '1' Literal.Number.Integer '\n ' Text 'puts' Name.Builtin ' ' Text '"' Literal.String.Double 'Before 2' Literal.String.Double '"' Literal.String.Double '\n ' Text 'yield' Keyword ' ' Text '2' Literal.Number.Integer '\n ' Text 'puts' Name.Builtin ' ' Text '"' Literal.String.Double 'Before 3' Literal.String.Double '"' Literal.String.Double '\n ' Text 'yield' Keyword ' ' Text '3' Literal.Number.Integer '\n ' Text 'puts' Name.Builtin ' ' Text '"' Literal.String.Double 'After 3' Literal.String.Double '"' Literal.String.Double '\n' Text 'end' Keyword '\n\n' Text 'thrice' Name ' ' Text 'do' Keyword ' ' Text '|' Operator 'i' Name '|' Operator '\n ' Text 'if' Keyword ' ' Text 'i' Name ' ' Text '==' Operator ' ' Text '2' Literal.Number.Integer '\n ' Text 'break' Keyword '\n ' Text 'end' Keyword '\n' Text 'end' Keyword '\n\n' Text 'def' Keyword ' ' Text 'twice' Name.Function '\n ' Text 'yield' Keyword ' ' Text '1' Literal.Number.Integer '\n ' Text 'yield' Keyword ' ' Text '2' Literal.Number.Integer '\n' Text 'end' Keyword '\n\n' Text 'twice' Name ' ' Text '{' Punctuation ' ' Text '|' Operator 'i' Name '|' Operator ' ' Text 'i' Name ' ' Text '+' Operator ' ' Text '1' Literal.Number.Integer ' ' Text '}' Punctuation ' ' Text '# => 3' Comment.Single '\n' Text 'twice' Name ' ' Text '{' Punctuation ' ' Text '|' Operator 'i' Name '|' Operator ' ' Text 'break' Keyword ' ' Text '"' Literal.String.Double 'hello' Literal.String.Double '"' Literal.String.Double ' ' Text '}' Punctuation ' ' Text '# => "hello"' Comment.Single '\n\n' Text 'value' Name ' ' Text '=' Operator ' ' Text 'twice' Name ' ' Text 'do' Keyword ' ' Text '|' Operator 'i' Name '|' Operator '\n ' Text 'if' Keyword ' ' Text 'i' Name ' ' Text '==' Operator ' ' Text '1' Literal.Number.Integer '\n ' Text 'break' Keyword ' ' Text '"' Literal.String.Double 'hello' Literal.String.Double '"' Literal.String.Double '\n ' Text 'end' Keyword '\n ' Text 'i' Name ' ' Text '+' Operator ' ' Text '1' Literal.Number.Integer '\n' Text 'end' Keyword '\n' Text 'value' Name ' ' Text '# :: Int32 | String' Comment.Single '\n\n' Text 'values' Name ' ' Text '=' Operator ' ' Text 'twice' Name ' ' Text '{' Punctuation ' ' Text 'break' Keyword ' ' Text '1' Literal.Number.Integer ',' Punctuation ' ' Text '2' Literal.Number.Integer ' ' Text '}' Punctuation '\n' Text 'values' Name ' ' Text '# => {1, 2}' Comment.Single '\n\n' Text 'value' Name ' ' Text '=' Operator ' ' Text 'twice' Name ' ' Text '{' Punctuation ' ' Text 'break' Keyword ' ' Text '}' Punctuation '\n' Text 'value' Name ' ' Text '# => nil' Comment.Single '\n\n' Text 'def' Keyword ' ' Text 'twice' Name.Function '\n ' Text 'yield' Keyword ' ' Text '1' Literal.Number.Integer '\n ' Text 'yield' Keyword ' ' Text '2' Literal.Number.Integer '\n' Text 'end' Keyword '\n\n' Text 'twice' Name ' ' Text 'do' Keyword ' ' Text '|' Operator 'i' Name '|' Operator '\n ' Text 'if' Keyword ' ' Text 'i' Name ' ' Text '==' Operator ' ' Text '1' Literal.Number.Integer '\n ' Text 'puts' Name.Builtin ' ' Text '"' Literal.String.Double 'Skipping 1' Literal.String.Double '"' Literal.String.Double '\n ' Text 'next' Keyword '\n ' Text 'end' Keyword '\n\n ' Text 'puts' Name.Builtin ' ' Text '"' Literal.String.Double 'Got ' Literal.String.Double '#{' Literal.String.Interpol 'i' Name '}' Literal.String.Interpol '"' Literal.String.Double '\n' Text 'end' Keyword '\n\n' Text 'def' Keyword ' ' Text 'twice' Name.Function '\n ' Text 'v1' Name ' ' Text '=' Operator ' ' Text 'yield' Keyword ' ' Text '1' Literal.Number.Integer '\n ' Text 'puts' Name.Builtin ' ' Text 'v1' Name '\n\n ' Text 'v2' Name ' ' Text '=' Operator ' ' Text 'yield' Keyword ' ' Text '2' Literal.Number.Integer '\n ' Text 'puts' Name.Builtin ' ' Text 'v2' Name '\n' Text 'end' Keyword '\n\n' Text 'twice' Name ' ' Text 'do' Keyword ' ' Text '|' Operator 'i' Name '|' Operator '\n ' Text 'if' Keyword ' ' Text 'i' Name ' ' Text '==' Operator ' ' Text '1' Literal.Number.Integer '\n ' Text 'next' Keyword ' ' Text '10' Literal.Number.Integer '\n ' Text 'end' Keyword '\n\n ' Text 'i' Name ' ' Text '+' Operator ' ' Text '1' Literal.Number.Integer '\n' Text 'end' Keyword '\n\n' Text '# Output' Comment.Single '\n' Text '# 10' Comment.Single '\n' Text '# 3' Comment.Single '\n\n' Text 'class' Keyword ' ' Text 'Foo' Name.Class '\n ' Text 'def' Keyword ' ' Text 'one' Name.Function '\n ' Text '1' Literal.Number.Integer '\n ' Text 'end' Keyword '\n\n ' Text 'def' Keyword ' ' Text 'yield_with_self' Name.Function '\n ' Text 'with' Keyword ' ' Text 'self' Keyword ' ' Text 'yield' Keyword '\n ' Text 'end' Keyword '\n\n ' Text 'def' Keyword ' ' Text 'yield_normally' Name.Function '\n ' Text 'yield' Keyword '\n ' Text 'end' Keyword '\n' Text 'end' Keyword '\n\n' Text 'def' Keyword ' ' Text 'one' Name.Function '\n ' Text '"' Literal.String.Double 'one' Literal.String.Double '"' Literal.String.Double '\n' Text 'end' Keyword '\n\n' Text 'Foo' Name '.' Operator 'new' Name '.' Operator 'yield_with_self' Name ' ' Text '{' Punctuation ' ' Text 'one' Name ' ' Text '}' Punctuation ' ' Text '# => 1' Comment.Single '\n' Text 'Foo' Name '.' Operator 'new' Name '.' Operator 'yield_normally' Name ' ' Text '{' Punctuation ' ' Text 'one' Name ' ' Text '}' Punctuation ' ' Text '# => "one"' Comment.Single '\n\n' Text 'def' Keyword ' ' Text 'twice' Name.Function '\n ' Text 'yield' Keyword ' ' Text '1' Literal.Number.Integer '\n ' Text 'yield' Keyword ' ' Text '2' Literal.Number.Integer '\n' Text 'end' Keyword '\n\n' Text 'twice' Name ' ' Text 'do' Keyword ' ' Text '|' Operator 'i' Name '|' Operator '\n ' Text 'puts' Name.Builtin ' ' Text '"' Literal.String.Double 'Got: ' Literal.String.Double '#{' Literal.String.Interpol 'i' Name '}' Literal.String.Interpol '"' Literal.String.Double '\n' Text 'end' Keyword '\n\n' Text 'i' Name ' ' Text '=' Operator ' ' Text '1' Literal.Number.Integer '\n' Text 'puts' Name.Builtin ' ' Text '"' Literal.String.Double 'Got: ' Literal.String.Double '#{' Literal.String.Interpol 'i' Name '}' Literal.String.Interpol '"' Literal.String.Double '\n' Text 'i' Name ' ' Text '=' Operator ' ' Text '2' Literal.Number.Integer '\n' Text 'puts' Name.Builtin ' ' Text '"' Literal.String.Double 'Got: ' Literal.String.Double '#{' Literal.String.Interpol 'i' Name '}' Literal.String.Interpol '"' Literal.String.Double '\n\n' Text '3' Literal.Number.Integer '.' Operator 'times' Name ' ' Text 'do' Keyword ' ' Text '|' Operator 'i' Name '|' Operator '\n ' Text 'puts' Name.Builtin ' ' Text 'i' Name '\n' Text 'end' Keyword '\n\n' Text 'struct' Keyword ' ' Text 'Int' Name.Class '\n ' Text 'def' Keyword ' ' Text 'times' Name.Function '\n ' Text 'i' Name ' ' Text '=' Operator ' ' Text '0' Literal.Number.Integer '\n ' Text 'while' Keyword ' ' Text 'i' Name ' ' Text '<' Operator ' ' Text 'self' Keyword '\n ' Text 'yield' Keyword ' ' Text 'i' Name '\n ' Text 'i' Name ' ' Text '+=' Operator ' ' Text '1' Literal.Number.Integer '\n ' Text 'end' Keyword '\n ' Text 'end' Keyword '\n' Text 'end' Keyword '\n\n' Text 'i' Name ' ' Text '=' Operator ' ' Text '0' Literal.Number.Integer '\n' Text 'while' Keyword ' ' Text 'i' Name ' ' Text '<' Operator ' ' Text '3' Literal.Number.Integer '\n ' Text 'puts' Name.Builtin ' ' Text 'i' Name '\n ' Text 'i' Name ' ' Text '+=' Operator ' ' Text '1' Literal.Number.Integer '\n' Text 'end' Keyword '\n\n' Text 'class' Keyword ' ' Text 'Person' Name.Class '\n ' Text 'def' Keyword ' ' Text 'initialize' Name.Function '(' Punctuation '@name' Name.Variable.Instance ')' Punctuation '\n ' Text 'end' Keyword '\n\n ' Text 'def' Keyword ' ' Text 'greet' Name.Function '\n ' Text 'puts' Name.Builtin ' ' Text '"' Literal.String.Double "Hi, I'm " Literal.String.Double '#{' Literal.String.Interpol '@name' Name.Variable.Instance '}' Literal.String.Interpol '"' Literal.String.Double '\n ' Text 'end' Keyword '\n' Text 'end' Keyword '\n\n' Text 'class' Keyword ' ' Text 'Employee' Name.Class ' ' Text '<' Operator ' ' Text 'Person' Name '\n' Text 'end' Keyword '\n\n' Text 'employee' Name ' ' Text '=' Operator ' ' Text 'Employee' Name '.' Operator 'new' Name ' ' Text '"' Literal.String.Double 'John' Literal.String.Double '"' Literal.String.Double '\n' Text 'employee' Name '.' Operator 'greet' Name ' ' Text '# "Hi, I\'m John"' Comment.Single '\n\n' Text 'class' Keyword ' ' Text 'Person' Name.Class '\n ' Text 'def' Keyword ' ' Text 'initialize' Name.Function '(' Punctuation '@name' Name.Variable.Instance ')' Punctuation '\n ' Text 'end' Keyword '\n' Text 'end' Keyword '\n\n' Text 'class' Keyword ' ' Text 'Employee' Name.Class ' ' Text '<' Operator ' ' Text 'Person' Name '\n ' Text 'def' Keyword ' ' Text 'initialize' Name.Function '(' Punctuation '@name' Name.Variable.Instance ',' Punctuation ' ' Text '@company_name' Name.Variable.Instance ')' Punctuation '\n ' Text 'end' Keyword '\n' Text 'end' Keyword '\n\n' Text 'Employee' Name '.' Operator 'new' Name ' ' Text '"' Literal.String.Double 'John' Literal.String.Double '"' Literal.String.Double ',' Punctuation ' ' Text '"' Literal.String.Double 'Acme' Literal.String.Double '"' Literal.String.Double ' ' Text '# OK' Comment.Single '\n' Text 'Employee' Name '.' Operator 'new' Name ' ' Text '"' Literal.String.Double 'Peter' Literal.String.Double '"' Literal.String.Double ' ' Text '# Error: wrong number of arguments' Comment.Single '\n' Text "# for 'Employee:Class#new' (1 for 2)" Comment.Single '\n\n' Text 'class' Keyword ' ' Text 'Person' Name.Class '\n ' Text 'def' Keyword ' ' Text 'greet' Name.Function '(' Punctuation 'msg' Name ')' Punctuation '\n ' Text 'puts' Name.Builtin ' ' Text '"' Literal.String.Double 'Hi, ' Literal.String.Double '#{' Literal.String.Interpol 'msg' Name '}' Literal.String.Interpol '"' Literal.String.Double '\n ' Text 'end' Keyword '\n' Text 'end' Keyword '\n\n' Text 'class' Keyword ' ' Text 'Employee' Name.Class ' ' Text '<' Operator ' ' Text 'Person' Name '\n ' Text 'def' Keyword ' ' Text 'greet' Name.Function '(' Punctuation 'msg' Name ')' Punctuation '\n ' Text 'puts' Name.Builtin ' ' Text '"' Literal.String.Double 'Hello, ' Literal.String.Double '#{' Literal.String.Interpol 'msg' Name '}' Literal.String.Interpol '"' Literal.String.Double '\n ' Text 'end' Keyword '\n' Text 'end' Keyword '\n\n' Text 'p' Name.Builtin ' ' Text '=' Operator ' ' Text 'Person' Name '.' Operator 'new' Name '\n' Text 'p' Name.Builtin '.' Operator 'greet' Name ' ' Text '"' Literal.String.Double 'everyone' Literal.String.Double '"' Literal.String.Double ' ' Text '# "Hi, everyone"' Comment.Single '\n\n' Text 'e' Name ' ' Text '=' Operator ' ' Text 'Employee' Name '.' Operator 'new' Name '\n' Text 'e' Name '.' Operator 'greet' Name ' ' Text '"' Literal.String.Double 'everyone' Literal.String.Double '"' Literal.String.Double ' ' Text '# "Hello, everyone"' Comment.Single '\n\n' Text 'class' Keyword ' ' Text 'Person' Name.Class '\n ' Text 'def' Keyword ' ' Text 'greet' Name.Function '(' Punctuation 'msg' Name ')' Punctuation '\n ' Text 'puts' Name.Builtin ' ' Text '"' Literal.String.Double 'Hi, ' Literal.String.Double '#{' Literal.String.Interpol 'msg' Name '}' Literal.String.Interpol '"' Literal.String.Double '\n ' Text 'end' Keyword '\n' Text 'end' Keyword '\n\n' Text 'class' Keyword ' ' Text 'Employee' Name.Class ' ' Text '<' Operator ' ' Text 'Person' Name '\n ' Text 'def' Keyword ' ' Text 'greet' Name.Function '(' Punctuation 'msg' Name ' ' Text ':' Punctuation ' ' Text 'Int32' Name ')' Punctuation '\n ' Text 'puts' Name.Builtin ' ' Text '"' Literal.String.Double 'Hi, this is a number: ' Literal.String.Double '#{' Literal.String.Interpol 'msg' Name '}' Literal.String.Interpol '"' Literal.String.Double '\n ' Text 'end' Keyword '\n' Text 'end' Keyword '\n\n' Text 'e' Name ' ' Text '=' Operator ' ' Text 'Employee' Name '.' Operator 'new' Name '\n' Text 'e' Name '.' Operator 'greet' Name ' ' Text '"' Literal.String.Double 'everyone' Literal.String.Double '"' Literal.String.Double ' ' Text '# "Hi, everyone"' Comment.Single '\n\n' Text 'e' Name '.' Operator 'greet' Name ' ' Text '1' Literal.Number.Integer ' ' Text '# "Hi, this is a number: 1"' Comment.Single '\n\n' Text 'class' Keyword ' ' Text 'Person' Name.Class '\n ' Text 'def' Keyword ' ' Text 'greet' Name.Function '(' Punctuation 'msg' Name ')' Punctuation '\n ' Text 'puts' Name.Builtin ' ' Text '"' Literal.String.Double 'Hello, ' Literal.String.Double '"' Literal.String.Double ' ' Text '# {msg}"' Comment.Single '\n ' Text 'end' Keyword '\n' Text 'end' Keyword '\n\n' Text 'class' Keyword ' ' Text 'Employee' Name.Class ' ' Text '<' Operator ' ' Text 'Person' Name '\n ' Text 'def' Keyword ' ' Text 'greet' Name.Function '(' Punctuation 'msg' Name ')' Punctuation '\n ' Text 'super' Keyword ' ' Text '# Same as: super(msg)' Comment.Single '\n ' Text 'super' Keyword '(' Punctuation '"' Literal.String.Double 'another message' Literal.String.Double '"' Literal.String.Double ')' Punctuation '\n ' Text 'end' Keyword '\n' Text 'end' Keyword '\n\n' Text 'def' Keyword ' ' Text 'int_to_int' Name.Function '(' Punctuation '&' Operator 'block' Name ' ' Text ':' Punctuation ' ' Text 'Int32' Name ' ' Text '-' Operator '>' Operator ' ' Text 'Int32' Name ')' Punctuation '\n ' Text 'block' Name '\n' Text 'end' Keyword '\n\n' Text 'proc' Name ' ' Text '=' Operator ' ' Text 'int_to_int' Name ' ' Text '{' Punctuation ' ' Text '|' Operator 'x' Name '|' Operator ' ' Text 'x' Name ' ' Text '+' Operator ' ' Text '1' Literal.Number.Integer ' ' Text '}' Punctuation '\n' Text 'proc' Name '.' Operator 'call' Name '(' Punctuation '1' Literal.Number.Integer ')' Punctuation ' ' Text '# => 2' Comment.Single '\n\n' Text 'class' Keyword ' ' Text 'Model' Name.Class '\n ' Text 'def' Keyword ' ' Text 'on_save' Name.Function '(' Punctuation '&' Operator 'block' Name ')' Punctuation '\n ' Text '@on_save_callback' Name.Variable.Instance ' ' Text '=' Operator ' ' Text 'block' Name '\n ' Text 'end' Keyword '\n\n ' Text 'def' Keyword ' ' Text 'save' Name.Function '\n ' Text 'if' Keyword ' ' Text 'callback' Name ' ' Text '=' Operator ' ' Text '@on_save_callback' Name.Variable.Instance '\n ' Text 'callback' Name '.' Operator 'call' Name '\n ' Text 'end' Keyword '\n ' Text 'end' Keyword '\n' Text 'end' Keyword '\n\n' Text 'model' Name ' ' Text '=' Operator ' ' Text 'Model' Name '.' Operator 'new' Name '\n' Text 'model' Name '.' Operator 'on_save' Name ' ' Text '{' Punctuation ' ' Text 'puts' Name.Builtin ' ' Text '"' Literal.String.Double 'Saved!' Literal.String.Double '"' Literal.String.Double ' ' Text '}' Punctuation '\n' Text 'model' Name '.' Operator 'save' Name ' ' Text '# prints "Saved!"' Comment.Single '\n\n' Text 'def' Keyword ' ' Text 'some_proc' Name.Function '(' Punctuation '&' Operator 'block' Name ' ' Text ':' Punctuation ' ' Text 'Int32' Name ' ' Text '-' Operator '>' Operator ')' Punctuation '\n ' Text 'block' Name '\n' Text 'end' Keyword '\n\n' Text 'proc' Name ' ' Text '=' Operator ' ' Text 'some_proc' Name ' ' Text '{' Punctuation ' ' Text '|' Operator 'x' Name '|' Operator ' ' Text 'x' Name ' ' Text '+' Operator ' ' Text '1' Literal.Number.Integer ' ' Text '}' Punctuation '\n' Text 'proc' Name '.' Operator 'call' Name '(' Punctuation '1' Literal.Number.Integer ')' Punctuation ' ' Text '# void' Comment.Single '\n\n' Text 'def' Keyword ' ' Text 'some_proc' Name.Function '(' Punctuation '&' Operator 'block' Name ' ' Text ':' Punctuation ' ' Text 'Int32' Name ' ' Text '-' Operator '>' Operator ' ' Text '_' Name ')' Punctuation '\n ' Text 'block' Name '\n' Text 'end' Keyword '\n\n' Text 'proc' Name ' ' Text '=' Operator ' ' Text 'some_proc' Name ' ' Text '{' Punctuation ' ' Text '|' Operator 'x' Name '|' Operator ' ' Text 'x' Name ' ' Text '+' Operator ' ' Text '1' Literal.Number.Integer ' ' Text '}' Punctuation '\n' Text 'proc' Name '.' Operator 'call' Name '(' Punctuation '1' Literal.Number.Integer ')' Punctuation ' ' Text '# 2' Comment.Single '\n\n' Text 'proc' Name ' ' Text '=' Operator ' ' Text 'some_proc' Name ' ' Text '{' Punctuation ' ' Text '|' Operator 'x' Name '|' Operator ' ' Text 'x' Name '.' Operator 'to_s' Name ' ' Text '}' Punctuation '\n' Text 'proc' Name '.' Operator 'call' Name '(' Punctuation '1' Literal.Number.Integer ')' Punctuation ' ' Text '# "1"' Comment.Single '\n\n' Text 'macro' Keyword ' ' Text 'update_x' Name.Function '\n ' Text 'x' Name ' ' Text '=' Operator ' ' Text '1' Literal.Number.Integer '\n' Text 'end' Keyword '\n\n' Text 'x' Name ' ' Text '=' Operator ' ' Text '0' Literal.Number.Integer '\n' Text 'update_x' Name '\n' Text 'x' Name ' ' Text '# => 1' Comment.Single '\n\n' Text 'macro' Keyword ' ' Text 'dont_update_x' Name.Function '\n ' Text '%' Operator 'x' Name ' ' Text '=' Operator ' ' Text '1' Literal.Number.Integer '\n ' Text 'puts' Name.Builtin ' ' Text '%' Operator 'x' Name '\n' Text 'end' Keyword '\n\n' Text 'x' Name ' ' Text '=' Operator ' ' Text '0' Literal.Number.Integer '\n' Text 'dont_update_x' Name ' ' Text '# outputs 1' Comment.Single '\n' Text 'x' Name ' ' Text '# => 0' Comment.Single '\n\n' Text 'macro' Keyword ' ' Text 'fresh_vars_sample' Name.Function '(' Punctuation '*' Operator 'names' Name ')' Punctuation '\n ' Text '# First declare vars' Comment.Single '\n ' Text '{%' Literal.String.Interpol ' ' Text 'for' Keyword ' ' Text 'name' Name ',' Punctuation ' ' Text 'index' Name ' ' Text 'in' Keyword ' ' Text 'names' Name ' ' Text '%}' Literal.String.Interpol '\n ' Text 'print' Name.Builtin ' ' Text '"' Literal.String.Double 'Declaring: ' Literal.String.Double '"' Literal.String.Double ',' Punctuation ' ' Text '"' Literal.String.Double '%name{index}' Literal.String.Double '"' Literal.String.Double ',' Punctuation ' ' Text "'\\n'" Literal.String.Char '\n ' Text '%' Operator 'name' Name '{' Punctuation 'index' Name '}' Punctuation ' ' Text '=' Operator ' ' Text '{{' Literal.String.Interpol 'index' Name '}}' Literal.String.Interpol '\n ' Text '{%' Literal.String.Interpol ' ' Text 'end' Keyword ' ' Text '%}' Literal.String.Interpol '\n\n ' Text '# Then print them' Comment.Single '\n ' Text '{%' Literal.String.Interpol ' ' Text 'for' Keyword ' ' Text 'name' Name ',' Punctuation ' ' Text 'index' Name ' ' Text 'in' Keyword ' ' Text 'names' Name ' ' Text '%}' Literal.String.Interpol '\n ' Text 'print' Name.Builtin ' ' Text '"' Literal.String.Double '%name{index}: ' Literal.String.Double '"' Literal.String.Double ',' Punctuation ' ' Text '%' Operator 'name' Name '{' Punctuation 'index' Name '}' Punctuation ',' Punctuation ' ' Text "'\\n'" Literal.String.Char '\n ' Text '{%' Literal.String.Interpol ' ' Text 'end' Keyword ' ' Text '%}' Literal.String.Interpol '\n' Text 'end' Keyword '\n\n' Text 'fresh_vars_sample' Name ' ' Text 'a' Name ',' Punctuation ' ' Text 'b' Name ',' Punctuation ' ' Text 'c' Name '\n\n' Text '# Sample output:' Comment.Single '\n' Text '# Declaring: __temp_255' Comment.Single '\n' Text '# Declaring: __temp_256' Comment.Single '\n' Text '# Declaring: __temp_257' Comment.Single '\n' Text '# __temp_255: 0' Comment.Single '\n' Text '# __temp_256: 1' Comment.Single '\n' Text '# __temp_257: 2' Comment.Single '\n\n' Text 'class' Keyword ' ' Text 'Object' Name.Class '\n ' Text 'macro' Keyword ' ' Text 'instance_vars_names' Name.Function '\n ' Text 'def' Keyword ' ' Text 'instance_vars_names' Name.Function ' ' Text ':' Punctuation ' ' Text 'Array' Name '(' Punctuation 'String' Name ')' Punctuation '\n ' Text '{{' Literal.String.Interpol ' ' Text '@type' Name.Variable.Instance '.' Operator 'instance_vars' Name '.' Operator 'map' Name ' ' Text '&' Operator '.' Operator 'name' Name '.' Operator 'stringify' Name ' ' Text '}}' Literal.String.Interpol '\n ' Text 'end' Keyword '\n ' Text 'end' Keyword '\n' Text 'end' Keyword '\n\n' Text 'class' Keyword ' ' Text 'Person' Name.Class '\n ' Text 'def' Keyword ' ' Text 'initialize' Name.Function '(' Punctuation '@name' Name.Variable.Instance ',' Punctuation ' ' Text '@age' Name.Variable.Instance ')' Punctuation '\n ' Text 'end' Keyword '\n' Text 'end' Keyword '\n\n' Text 'person' Name ' ' Text '=' Operator ' ' Text 'Person' Name '.' Operator 'new' Name ' ' Text '"' Literal.String.Double 'John' Literal.String.Double '"' Literal.String.Double ',' Punctuation ' ' Text '30' Literal.Number.Integer '\n' Text 'person' Name '.' Operator 'instance_vars_names' Name ' ' Text '# => ["name", "age"]' Comment.Single '\n\n' Text 'class' Keyword ' ' Text 'Object' Name.Class '\n ' Text 'macro' Keyword ' ' Text 'has_instance_var?' Name.Function '(' Punctuation 'name' Name ')' Punctuation '\n ' Text 'def' Keyword ' ' Text 'has_instance_var?' Name.Function '(' Punctuation 'name' Name ')' Punctuation ' ' Text ':' Punctuation ' ' Text 'Bool' Name '\n ' Text '# We cannot access name inside the macro expansion here,' Comment.Single '\n ' Text '# instead we need to use the macro language to construct an array' Comment.Single '\n ' Text '# and do the inclusion check at runtime.' Comment.Single '\n ' Text '{{' Literal.String.Interpol ' ' Text '@type' Name.Variable.Instance '.' Operator 'instance_vars' Name '.' Operator 'map' Name ' ' Text '&' Operator '.' Operator 'name' Name '.' Operator 'stringify' Name ' ' Text '}}' Literal.String.Interpol '.' Operator 'includes?' Name ' ' Text 'name' Name '\n ' Text 'end' Keyword '\n ' Text 'end' Keyword '\n' Text 'end' Keyword '\n\n' Text 'person' Name ' ' Text '=' Operator ' ' Text 'Person' Name '.' Operator 'new' Name ' ' Text '"' Literal.String.Double 'John' Literal.String.Double '"' Literal.String.Double ',' Punctuation ' ' Text '30' Literal.Number.Integer '\n' Text 'person' Name '.' Operator 'has_instance_var?' Name '(' Punctuation '"' Literal.String.Double 'name' Literal.String.Double '"' Literal.String.Double ')' Punctuation ' ' Text '# => true' Comment.Single '\n' Text 'person' Name '.' Operator 'has_instance_var?' Name '(' Punctuation '"' Literal.String.Double 'birthday' Literal.String.Double '"' Literal.String.Double ')' Punctuation ' ' Text '# => false' Comment.Single '\n\n' Text 'class' Keyword ' ' Text 'Parent' Name.Class '\n ' Text 'macro' Keyword ' ' Text 'inherited' Name.Function '\n ' Text 'def' Keyword ' ' Text '{{' Literal.String.Interpol '@type' Name.Variable.Instance '.' Operator 'name' Name '.' Operator 'downcase' Name '.' Operator 'id' Name '}}' Literal.String.Interpol '\n ' Text '1' Literal.Number.Integer '\n ' Text 'end' Keyword '\n ' Text 'end' Keyword '\n' Text 'end' Keyword '\n\n' Text 'class' Keyword ' ' Text 'Child' Name.Class ' ' Text '<' Operator ' ' Text 'Parent' Name '\n' Text 'end' Keyword '\n\n' Text 'Child' Name '.' Operator 'new' Name '.' Operator 'child' Name ' ' Text '# => 1' Comment.Single '\n\n' Text 'macro' Keyword ' ' Text 'method_missing' Name.Function '(' Punctuation 'name' Name ',' Punctuation ' ' Text 'args' Name ',' Punctuation ' ' Text 'block' Name ')' Punctuation '\n ' Text 'print' Name.Builtin ' ' Text '"' Literal.String.Double 'Got ' Literal.String.Double '"' Literal.String.Double ',' Punctuation ' ' Text '{{' Literal.String.Interpol 'name' Name '.' Operator 'id' Name '.' Operator 'stringify' Name '}}' Literal.String.Interpol ',' Punctuation ' ' Text '"' Literal.String.Double ' with ' Literal.String.Double '"' Literal.String.Double ',' Punctuation ' ' Text '{{' Literal.String.Interpol 'args' Name '.' Operator 'size' Name '}}' Literal.String.Interpol ',' Punctuation ' ' Text '"' Literal.String.Double ' arguments' Literal.String.Double '"' Literal.String.Double ',' Punctuation ' ' Text "'\\n'" Literal.String.Char '\n' Text 'end' Keyword '\n\n' Text 'foo' Name ' ' Text '# Prints: Got foo with 0 arguments' Comment.Single '\n' Text 'bar' Name ' ' Text "'a'" Literal.String.Char ',' Punctuation ' ' Text "'b'" Literal.String.Char ' ' Text '# Prints: Got bar with 2 arguments' Comment.Single '\n\n' Text 'sizeof' Keyword.Pseudo '(' Punctuation 'Int32' Name ')' Punctuation ' ' Text '# => 4' Comment.Single '\n' Text 'sizeof' Keyword.Pseudo '(' Punctuation 'Int64' Name ')' Punctuation ' ' Text '# => 8' Comment.Single '\n\n' Text '# On a 64 bits machine' Comment.Single '\n' Text 'sizeof' Keyword.Pseudo '(' Punctuation 'Pointer' Name '(' Punctuation 'Int32' Name ')' Punctuation ')' Punctuation ' ' Text '# => 8' Comment.Single '\n' Text 'sizeof' Keyword.Pseudo '(' Punctuation 'String' Name ')' Punctuation ' ' Text '# => 8' Comment.Single '\n\n' Text 'a' Name ' ' Text '=' Operator ' ' Text '1' Literal.Number.Integer '\n' Text 'sizeof' Keyword.Pseudo '(' Punctuation 'typeof' Keyword.Pseudo '(' Punctuation 'a' Name ')' Punctuation ')' Punctuation ' ' Text '# => 4' Comment.Single '\n\n' Text 'class' Keyword ' ' Text 'Foo' Name.Class '\n ' Text 'macro' Keyword ' ' Text 'emphasize' Name.Function '(' Punctuation 'value' Name ')' Punctuation '\n ' Text '"' Literal.String.Double '***' Literal.String.Double '#{' Literal.String.Interpol ' ' Text '{' Literal.String.Interpol '{' Literal.String.Interpol 'value' Name '}' Literal.String.Interpol '}' Literal.String.Interpol ' ' Text '}' Literal.String.Interpol '***' Literal.String.Double '"' Literal.String.Double '\n ' Text 'end' Keyword '\n\n ' Text 'def' Keyword ' ' Text 'yield_with_self' Name.Function '\n ' Text 'with' Keyword ' ' Text 'self' Keyword ' ' Text 'yield' Keyword '\n ' Text 'end' Keyword '\n' Text 'end' Keyword '\n\n' Text 'Foo' Name '.' Operator 'new' Name '.' Operator 'yield_with_self' Name ' ' Text '{' Punctuation ' ' Text 'emphasize' Name '(' Punctuation '10' Literal.Number.Integer ')' Punctuation ' ' Text '}' Punctuation ' ' Text '# => "***10***"' Comment.Single '\n\n' Text '# This generates:' Comment.Single '\n' Text '#' Comment.Single '\n' Text '# def :foo' Comment.Single '\n' Text '# 1' Comment.Single '\n' Text '# end' Comment.Single '\n' Text 'define_method' Name ' ' Text ':foo' Literal.String.Symbol ',' Punctuation ' ' Text '1' Literal.Number.Integer '\n\n' Text 'macro' Keyword ' ' Text 'define_method' Name.Function '(' Punctuation 'name' Name ',' Punctuation ' ' Text 'content' Name ')' Punctuation '\n ' Text 'def' Keyword ' ' Text '{{' Literal.String.Interpol 'name' Name '.' Operator 'id' Name '}}' Literal.String.Interpol '\n ' Text '{{' Literal.String.Interpol 'content' Name '}}' Literal.String.Interpol '\n ' Text 'end' Keyword '\n' Text 'end' Keyword '\n\n' Text '# This correctly generates:' Comment.Single '\n' Text '#' Comment.Single '\n' Text '# def foo' Comment.Single '\n' Text '# 1' Comment.Single '\n' Text '# end' Comment.Single '\n' Text 'define_method' Name ' ' Text ':foo' Literal.String.Symbol ',' Punctuation ' ' Text '1' Literal.Number.Integer '\n\n' Text 'macro' Keyword ' ' Text 'define_method' Name.Function '(' Punctuation 'name' Name ',' Punctuation ' ' Text 'content' Name ')' Punctuation '\n ' Text 'def' Keyword ' ' Text '{{' Literal.String.Interpol 'name' Name '}}' Literal.String.Interpol '\n ' Text '{%' Literal.String.Interpol ' ' Text 'if' Keyword ' ' Text 'content' Name ' ' Text '==' Operator ' ' Text '1' Literal.Number.Integer ' ' Text '%}' Literal.String.Interpol '\n ' Text '"' Literal.String.Double 'one' Literal.String.Double '"' Literal.String.Double '\n ' Text '{%' Literal.String.Interpol ' ' Text 'else' Keyword ' ' Text '%}' Literal.String.Interpol '\n ' Text '{{' Literal.String.Interpol 'content' Name '}}' Literal.String.Interpol '\n ' Text '{%' Literal.String.Interpol ' ' Text 'end' Keyword ' ' Text '%}' Literal.String.Interpol '\n ' Text 'end' Keyword '\n' Text 'end' Keyword '\n\n' Text 'define_method' Name ' ' Text 'foo' Name ',' Punctuation ' ' Text '1' Literal.Number.Integer '\n' Text 'define_method' Name ' ' Text 'bar' Name ',' Punctuation ' ' Text '2' Literal.Number.Integer '\n\n' Text 'foo' Name ' ' Text '# => one' Comment.Single '\n' Text 'bar' Name ' ' Text '# => 2' Comment.Single '\n\n' Text '{%' Literal.String.Interpol ' ' Text 'if' Keyword ' ' Text 'env' Name '(' Punctuation '"' Literal.String.Double 'TEST' Literal.String.Double '"' Literal.String.Double ')' Punctuation ' ' Text '%}' Literal.String.Interpol '\n ' Text 'puts' Name.Builtin ' ' Text '"' Literal.String.Double 'We are in test mode' Literal.String.Double '"' Literal.String.Double '\n' Text '{%' Literal.String.Interpol ' ' Text 'end' Keyword ' ' Text '%}' Literal.String.Interpol '\n\n' Text 'macro' Keyword ' ' Text 'define_dummy_methods' Name.Function '(' Punctuation 'names' Name ')' Punctuation '\n ' Text '{%' Literal.String.Interpol ' ' Text 'for' Keyword ' ' Text 'name' Name ',' Punctuation ' ' Text 'index' Name ' ' Text 'in' Keyword ' ' Text 'names' Name ' ' Text '%}' Literal.String.Interpol '\n ' Text 'def' Keyword ' ' Text '{{' Literal.String.Interpol 'name' Name '.' Operator 'id' Name '}}' Literal.String.Interpol '\n ' Text '{{' Literal.String.Interpol 'index' Name '}}' Literal.String.Interpol '\n ' Text 'end' Keyword '\n ' Text '{%' Literal.String.Interpol ' ' Text 'end' Keyword ' ' Text '%}' Literal.String.Interpol '\n' Text 'end' Keyword '\n\n' Text 'define_dummy_methods' Name ' ' Text '[' Operator 'foo' Name ',' Punctuation ' ' Text 'bar' Name ',' Punctuation ' ' Text 'baz' Name ']' Operator '\n\n' Text 'foo' Name ' ' Text '# => 0' Comment.Single '\n' Text 'bar' Name ' ' Text '# => 1' Comment.Single '\n' Text 'baz' Name ' ' Text '# => 2' Comment.Single '\n\n' Text 'macro' Keyword ' ' Text 'define_dummy_methods' Name.Function '(' Punctuation 'hash' Name ')' Punctuation '\n ' Text '{%' Literal.String.Interpol ' ' Text 'for' Keyword ' ' Text 'key' Name ',' Punctuation ' ' Text 'value' Name ' ' Text 'in' Keyword ' ' Text 'hash' Name ' ' Text '%}' Literal.String.Interpol '\n ' Text 'def' Keyword ' ' Text '{{' Literal.String.Interpol 'key' Name '.' Operator 'id' Name '}}' Literal.String.Interpol '\n ' Text '{{' Literal.String.Interpol 'value' Name '}}' Literal.String.Interpol '\n ' Text 'end' Keyword '\n ' Text '{%' Literal.String.Interpol ' ' Text 'end' Keyword ' ' Text '%}' Literal.String.Interpol '\n' Text 'end' Keyword '\n\n' Text 'define_dummy_methods' Name '(' Punctuation '{' Punctuation 'foo' Literal.String.Symbol ':' Punctuation ' ' Text '10' Literal.Number.Integer ',' Punctuation ' ' Text 'bar' Literal.String.Symbol ':' Punctuation ' ' Text '20' Literal.Number.Integer '}' Punctuation ')' Punctuation '\n' Text 'foo' Name ' ' Text '# => 10' Comment.Single '\n' Text 'bar' Name ' ' Text '# => 20' Comment.Single '\n\n' Text '{%' Literal.String.Interpol ' ' Text 'for' Keyword ' ' Text 'name' Name ',' Punctuation ' ' Text 'index' Name ' ' Text 'in' Keyword ' ' Text '[' Operator '"' Literal.String.Double 'foo' Literal.String.Double '"' Literal.String.Double ',' Punctuation ' ' Text '"' Literal.String.Double 'bar' Literal.String.Double '"' Literal.String.Double ',' Punctuation ' ' Text '"' Literal.String.Double 'baz' Literal.String.Double '"' Literal.String.Double ']' Operator ' ' Text '%}' Literal.String.Interpol '\n ' Text 'def' Keyword ' ' Text '{{' Literal.String.Interpol 'name' Name '.' Operator 'id' Name '}}' Literal.String.Interpol '\n ' Text '{{' Literal.String.Interpol 'index' Name '}}' Literal.String.Interpol '\n ' Text 'end' Keyword '\n' Text '{%' Literal.String.Interpol ' ' Text 'end' Keyword ' ' Text '%}' Literal.String.Interpol '\n\n' Text 'foo' Name ' ' Text '# => 0' Comment.Single '\n' Text 'bar' Name ' ' Text '# => 1' Comment.Single '\n' Text 'baz' Name ' ' Text '# => 2' Comment.Single '\n\n' Text 'macro' Keyword ' ' Text 'define_dummy_methods' Name.Function '(' Punctuation '*' Operator 'names' Name ')' Punctuation '\n ' Text '{%' Literal.String.Interpol ' ' Text 'for' Keyword ' ' Text 'name' Name ',' Punctuation ' ' Text 'index' Name ' ' Text 'in' Keyword ' ' Text 'names' Name ' ' Text '%}' Literal.String.Interpol '\n ' Text 'def' Keyword ' ' Text '{{' Literal.String.Interpol 'name' Name '.' Operator 'id' Name '}}' Literal.String.Interpol '\n ' Text '{{' Literal.String.Interpol 'index' Name '}}' Literal.String.Interpol '\n ' Text 'end' Keyword '\n ' Text '{%' Literal.String.Interpol ' ' Text 'end' Keyword ' ' Text '%}' Literal.String.Interpol '\n' Text 'end' Keyword '\n\n' Text 'define_dummy_methods' Name ' ' Text 'foo' Name ',' Punctuation ' ' Text 'bar' Name ',' Punctuation ' ' Text 'baz' Name '\n\n' Text 'foo' Name ' ' Text '# => 0' Comment.Single '\n' Text 'bar' Name ' ' Text '# => 1' Comment.Single '\n' Text 'baz' Name ' ' Text '# => 2' Comment.Single '\n\n' Text 'macro' Keyword ' ' Text 'println' Name.Function '(' Punctuation '*' Operator 'values' Name ')' Punctuation '\n ' Text 'print' Name.Builtin ' ' Text '{{' Literal.String.Interpol '*' Operator 'values' Name '}}' Literal.String.Interpol ',' Punctuation ' ' Text "'\\n'" Literal.String.Char '\n' Text 'end' Keyword '\n\n' Text 'println' Name ' ' Text '1' Literal.Number.Integer ',' Punctuation ' ' Text '2' Literal.Number.Integer ',' Punctuation ' ' Text '3' Literal.Number.Integer ' ' Text '# outputs 123\\n' Comment.Single '\n\n' Text 'VALUES' Name.Constant ' ' Text '=' Operator ' ' Text '[' Operator '1' Literal.Number.Integer ',' Punctuation ' ' Text '2' Literal.Number.Integer ',' Punctuation ' ' Text '3' Literal.Number.Integer ']' Operator '\n\n' Text '{%' Literal.String.Interpol ' ' Text 'for' Keyword ' ' Text 'value' Name ' ' Text 'in' Keyword ' ' Text 'VALUES' Name.Constant ' ' Text '%}' Literal.String.Interpol '\n ' Text 'puts' Name.Builtin ' ' Text '{{' Literal.String.Interpol 'value' Name '}}' Literal.String.Interpol '\n' Text '{%' Literal.String.Interpol ' ' Text 'end' Keyword ' ' Text '%}' Literal.String.Interpol '\n\n' Text 'until' Keyword ' ' Text 'some_condition' Name '\n ' Text 'do_this' Name '\n' Text 'end' Keyword '\n\n' Text '# The above is the same as:' Comment.Single '\n' Text 'while' Keyword ' ' Text '!' Operator 'some_condition' Name '\n ' Text 'do_this' Name '\n' Text 'end' Keyword '\n\n' Text 'a' Name ' ' Text '=' Operator ' ' Text 'some_condition' Name ' ' Text '?' Punctuation ' ' Text 'nil' Keyword.Constant ' ' Text ':' Punctuation ' ' Text '3' Literal.Number.Integer '\n' Text '# a is Int32 or Nil' Comment.Single '\n\n' Text 'if' Keyword ' ' Text 'a' Name '\n ' Text '# Since the only way to get here is if a is truthy,' Comment.Single '\n ' Text "# a can't be nil. So here a is Int32." Comment.Single '\n ' Text 'a' Name '.' Operator 'abs' Name '\n' Text 'end' Keyword '\n\n' Text 'if' Keyword ' ' Text 'a' Name ' ' Text '=' Operator ' ' Text 'some_expression' Name '\n ' Text '# here a is not nil' Comment.Single '\n' Text 'end' Keyword '\n\n' Text 'if' Keyword ' ' Text 'a' Name ' ' Text '&&' Operator ' ' Text 'b' Name '\n ' Text '# here both a and b are guaranteed not to be Nil' Comment.Single '\n' Text 'end' Keyword '\n\n' Text 'if' Keyword ' ' Text '@a' Name.Variable.Instance '\n ' Text '# here @a can be nil' Comment.Single '\n' Text 'end' Keyword '\n\n' Text '# First option: assign it to a variable' Comment.Single '\n' Text 'if' Keyword ' ' Text 'a' Name ' ' Text '=' Operator ' ' Text '@a' Name.Variable.Instance '\n ' Text "# here a can't be nil" Comment.Single '\n' Text 'end' Keyword '\n\n' Text '# Second option: use `Object#try` found in the standard library' Comment.Single '\n' Text '@a' Name.Variable.Instance '.' Operator 'try' Name ' ' Text 'do' Keyword ' ' Text '|' Operator 'a' Name '|' Operator '\n ' Text "# here a can't be nil" Comment.Single '\n' Text 'end' Keyword '\n\n' Text 'if' Keyword ' ' Text 'method' Name ' ' Text '# first call to a method that can return Int32 or Nil' Comment.Single '\n ' Text '# here we know that the first call did not return Nil' Comment.Single '\n ' Text 'method' Name ' ' Text '# second call can still return Int32 or Nil' Comment.Single '\n' Text 'end' Keyword '\n\n' Text 'class' Keyword ' ' Text 'Person' Name.Class '\n ' Text 'def' Keyword ' ' Text 'become_older' Name.Function '(' Punctuation 'by' Name ' ' Text '=' Operator ' ' Text '1' Literal.Number.Integer ')' Punctuation '\n ' Text '@age' Name.Variable.Instance ' ' Text '+=' Operator ' ' Text 'by' Name '\n ' Text 'end' Keyword '\n' Text 'end' Keyword '\n\n' Text 'john' Name ' ' Text '=' Operator ' ' Text 'Person' Name '.' Operator 'new' Name ' ' Text '"' Literal.String.Double 'John' Literal.String.Double '"' Literal.String.Double '\n' Text 'john' Name '.' Operator 'age' Name ' ' Text '# => 0' Comment.Single '\n\n' Text 'john' Name '.' Operator 'become_older' Name '\n' Text 'john' Name '.' Operator 'age' Name ' ' Text '# => 1' Comment.Single '\n\n' Text 'john' Name '.' Operator 'become_older' Name ' ' Text '2' Literal.Number.Integer '\n' Text 'john' Name '.' Operator 'age' Name ' ' Text '# => 3' Comment.Single '\n\n' Text 'john' Name '.' Operator 'become_older' Name ' ' Text 'by' Literal.String.Symbol ':' Punctuation ' ' Text '5' Literal.Number.Integer '\n\n' Text 'def' Keyword ' ' Text 'some_method' Name.Function '(' Punctuation 'x' Name ',' Punctuation ' ' Text 'y' Name ' ' Text '=' Operator ' ' Text '1' Literal.Number.Integer ',' Punctuation ' ' Text 'z' Name ' ' Text '=' Operator ' ' Text '2' Literal.Number.Integer ',' Punctuation ' ' Text 'w' Name ' ' Text '=' Operator ' ' Text '3' Literal.Number.Integer ')' Punctuation '\n ' Text '# do something...' Comment.Single '\n' Text 'end' Keyword '\n\n' Text 'some_method' Name ' ' Text '10' Literal.Number.Integer ' ' Text '# x = 10, y = 1, z = 2, w = 3' Comment.Single '\n' Text 'some_method' Name ' ' Text '10' Literal.Number.Integer ',' Punctuation ' ' Text 'z' Literal.String.Symbol ':' Punctuation ' ' Text '10' Literal.Number.Integer ' ' Text '# x = 10, y = 1, z = 10, w = 3' Comment.Single '\n' Text 'some_method' Name ' ' Text '10' Literal.Number.Integer ',' Punctuation ' ' Text 'w' Literal.String.Symbol ':' Punctuation ' ' Text '1' Literal.Number.Integer ',' Punctuation ' ' Text 'y' Literal.String.Symbol ':' Punctuation ' ' Text '2' Literal.Number.Integer ',' Punctuation ' ' Text 'z' Literal.String.Symbol ':' Punctuation ' ' Text '3' Literal.Number.Integer ' ' Text '# x = 10, y = 2, z = 3, w = 1' Comment.Single '\n\n' Text 'case' Keyword ' ' Text 'exp' Name '\n' Text 'when' Keyword ' ' Text 'value1' Name ',' Punctuation ' ' Text 'value2' Name '\n ' Text 'do_something' Name '\n' Text 'when' Keyword ' ' Text 'value3' Name '\n ' Text 'do_something_else' Name '\n' Text 'else' Keyword '\n ' Text 'do_another_thing' Name '\n' Text 'end' Keyword '\n\n' Text 'case' Keyword ' ' Text 'var' Name '\n' Text 'when' Keyword ' ' Text 'String' Name '\n ' Text '# var : String' Comment.Single '\n ' Text 'do_something' Name '\n' Text 'when' Keyword ' ' Text 'Int32' Name '\n ' Text '# var : Int32' Comment.Single '\n ' Text 'do_something_else' Name '\n' Text 'else' Keyword '\n ' Text '# here var is neither a String nor an Int32' Comment.Single '\n ' Text 'do_another_thing' Name '\n' Text 'end' Keyword '\n\n' Text 'case' Keyword ' ' Text 'num' Name '\n' Text 'when' Keyword ' ' Text '.' Operator 'even?' Name '\n ' Text 'do_something' Name '\n' Text 'when' Keyword ' ' Text '.' Operator 'odd?' Name '\n ' Text 'do_something_else' Name '\n' Text 'end' Keyword '\n\n' Text 'case' Keyword '\n' Text 'when' Keyword ' ' Text 'cond1' Name ',' Punctuation ' ' Text 'cond2' Name '\n ' Text 'do_something' Name '\n' Text 'when' Keyword ' ' Text 'cond3' Name '\n ' Text 'do_something_else' Name '\n' Text 'end' Keyword '\n\n' Text 'a' Name ' ' Text '=' Operator ' ' Text '1' Literal.Number.Integer '\n' Text 'a' Name '.responds_to?' Keyword.Pseudo '(' Punctuation ':abs' Literal.String.Symbol ')' Punctuation ' ' Text '# => true' Comment.Single '\n' Text 'a' Name '.responds_to?' Keyword.Pseudo '(' Punctuation ':size' Literal.String.Symbol ')' Punctuation ' ' Text '# => false' Comment.Single '\n\n' Text 'foo_or_bar' Name ' ' Text '=' Operator ' ' Text '/' Literal.String.Regex 'foo|bar' Literal.String.Regex '/' Literal.String.Regex '\n' Text 'heeello' Name ' ' Text '=' Operator ' ' Text '/' Literal.String.Regex 'h(e+)llo' Literal.String.Regex '/' Literal.String.Regex '\n' Text 'integer' Name ' ' Text '=' Operator ' ' Text '/' Literal.String.Regex '\\' Literal.String.Regex 'd+' Literal.String.Regex '/' Literal.String.Regex '\n\n' Text 'r' Name ' ' Text '=' Operator ' ' Text '/' Literal.String.Regex 'foo' Literal.String.Regex '/imx' Literal.String.Regex '\n\n' Text 'slash' Name ' ' Text '=' Operator ' ' Text '/' Literal.String.Regex '\\/' Literal.String.Regex '/' Literal.String.Regex '\n\n' Text 'r' Name ' ' Text '=' Operator ' ' Text '%r(' Literal.String.Regex 'regex with slash: /' Literal.String.Regex ')' Literal.String.Regex '\n\n' Text '"' Literal.String.Double 'hello world' Literal.String.Double '"' Literal.String.Double '\n\n' Text '"' Literal.String.Double '\\"' Literal.String.Escape '"' Literal.String.Double ' ' Text '# double quote' Comment.Single '\n' Text '"' Literal.String.Double '\\\\' Literal.String.Escape '"' Literal.String.Double ' ' Text '# backslash' Comment.Single '\n' Text '"' Literal.String.Double '\\e' Literal.String.Escape '"' Literal.String.Double ' ' Text '# escape' Comment.Single '\n' Text '"' Literal.String.Double '\\f' Literal.String.Escape '"' Literal.String.Double ' ' Text '# form feed' Comment.Single '\n' Text '"' Literal.String.Double '\\n' Literal.String.Escape '"' Literal.String.Double ' ' Text '# newline' Comment.Single '\n' Text '"' Literal.String.Double '\\r' Literal.String.Escape '"' Literal.String.Double ' ' Text '# carriage return' Comment.Single '\n' Text '"' Literal.String.Double '\\t' Literal.String.Escape '"' Literal.String.Double ' ' Text '# tab' Comment.Single '\n' Text '"' Literal.String.Double '\\v' Literal.String.Escape '"' Literal.String.Double ' ' Text '# vertical tab' Comment.Single '\n\n' Text '"' Literal.String.Double '\\101' Literal.String.Escape '"' Literal.String.Double ' ' Text '# == "A"' Comment.Single '\n' Text '"' Literal.String.Double '\\123' Literal.String.Escape '"' Literal.String.Double ' ' Text '# == "S"' Comment.Single '\n' Text '"' Literal.String.Double '\\12' Literal.String.Escape '"' Literal.String.Double ' ' Text '# == "\\n"' Comment.Single '\n' Text '"' Literal.String.Double '\\1' Literal.String.Escape '"' Literal.String.Double ' ' Text '# string with one character with code point 1' Comment.Single '\n\n' Text '"' Literal.String.Double '\\u0041' Literal.String.Escape '"' Literal.String.Double ' ' Text '# == "A"' Comment.Single '\n\n' Text '"' Literal.String.Double '\\u{41}' Literal.String.Escape '"' Literal.String.Double ' ' Text '# == "A"' Comment.Single '\n' Text '"' Literal.String.Double '\\u{1F52E}' Literal.String.Escape '"' Literal.String.Double '\n\n' Text '"' Literal.String.Double 'hello\n world' Literal.String.Double '"' Literal.String.Double ' ' Text '# same as "hello\\n world"' Comment.Single '\n\n' Text '"' Literal.String.Double 'hello ' Literal.String.Double '"' Literal.String.Double ' ' Text '\\' Punctuation '\n' Text '"' Literal.String.Double 'world, ' Literal.String.Double '"' Literal.String.Double ' ' Text '\\' Punctuation '\n' Text '"' Literal.String.Double 'no newlines' Literal.String.Double '"' Literal.String.Double ' ' Text '# same as "hello world, no newlines"' Comment.Single '\n\n' Text '"' Literal.String.Double 'hello ' Literal.String.Double '\\' Literal.String.Double '\n world, ' Literal.String.Double '\\' Literal.String.Double '\n no newlines' Literal.String.Double '"' Literal.String.Double ' ' Text '# same as "hello world, no newlines"' Comment.Single '\n\n' Text '%(' Literal.String.Other 'hello ' Literal.String.Other '(' Literal.String.Other '"world"' Literal.String.Other ')' Literal.String.Other ')' Literal.String.Other ' ' Text '# => "hello (\\"world\\")"' Comment.Single '\n' Text '%[' Literal.String.Other 'hello ' Literal.String.Other '[' Literal.String.Other '"world"' Literal.String.Other ']' Literal.String.Other ']' Literal.String.Other ' ' Text '# => "hello [\\"world\\"]"' Comment.Single '\n' Text '%{' Literal.String.Other 'hello ' Literal.String.Other '{' Literal.String.Other '"world"' Literal.String.Other '}' Literal.String.Other '}' Literal.String.Other ' ' Text '# => "hello {\\"world\\"}"' Comment.Single '\n' Text '%<' Literal.String.Other 'hello ' Literal.String.Other '<' Literal.String.Other '"world"' Literal.String.Other '>' Literal.String.Other '>' Literal.String.Other ' ' Text '# => "hello <\\"world\\">"' Comment.Single '\n' Text '%|' Literal.String.Other 'hello "world"' Literal.String.Other '|' Literal.String.Other ' ' Text '# => "hello \\"world\\""' Comment.Single '\n\n' Text '<<-' Operator '' Literal.String.Heredoc 'XML' Literal.String.Delimiter '' Literal.String.Heredoc '\n' Text '\n' Literal.String.Heredoc ' \n' Literal.String.Heredoc '\n' Literal.String.Heredoc 'XML\n' Literal.String.Delimiter '\n' Text '# Same as "Hello\\n world"' Comment.Single '\n' Text '<<-' Operator '' Literal.String.Heredoc 'STRING' Literal.String.Delimiter '' Literal.String.Heredoc '\n' Text ' Hello\n' Literal.String.Heredoc ' world\n' Literal.String.Heredoc ' STRING\n' Literal.String.Delimiter '\n' Text '# Same as " Hello\\n world"' Comment.Single '\n' Text '<<-' Operator '' Literal.String.Heredoc 'STRING' Literal.String.Delimiter '' Literal.String.Heredoc '\n' Text ' Hello\n' Literal.String.Heredoc ' world\n' Literal.String.Heredoc ' STRING\n' Literal.String.Delimiter '\n' Text 'a' Name ' ' Text '=' Operator ' ' Text '1' Literal.Number.Integer '\n' Text 'b' Name ' ' Text '=' Operator ' ' Text '2' Literal.Number.Integer '\n' Text '"' Literal.String.Double 'sum = ' Literal.String.Double '#{' Literal.String.Interpol 'a' Name ' ' Text '+' Operator ' ' Text 'b' Name '}' Literal.String.Interpol '"' Literal.String.Double ' ' Text '# "sum = 3"' Comment.Single '\n\n' Text '1.0' Literal.Number.Float ' ' Text '# Float64' Comment.Single '\n' Text '1.0_f32' Literal.Number.Float ' ' Text '# Float32' Comment.Single '\n' Text '1_f32' Literal.Number.Float ' ' Text '# Float32' Comment.Single '\n\n' Text '1e10' Literal.Number.Float ' ' Text '# Float64' Comment.Single '\n' Text '1.5e10' Literal.Number.Float ' ' Text '# Float64' Comment.Single '\n' Text '1.5e-7' Literal.Number.Float ' ' Text '# Float64' Comment.Single '\n\n' Text '+' Operator '1.3' Literal.Number.Float ' ' Text '# Float64' Comment.Single '\n' Text '-' Operator '0.5' Literal.Number.Float ' ' Text '# Float64' Comment.Single '\n\n' Text '1_000_000.111_111' Literal.Number.Float ' ' Text '# better than 1000000.111111' Comment.Single '\n\n' Text "'a'" Literal.String.Char '\n' Text "'z'" Literal.String.Char '\n' Text "'0'" Literal.String.Char '\n' Text "'_'" Literal.String.Char '\n' Text '"' Literal.String.Double 'ã\x81‚' Literal.String.Double '"' Literal.String.Double '\n\n' Text "'\\''" Literal.String.Char ' ' Text '# single quote' Comment.Single '\n' Text "'\\\\'" Literal.String.Char ' ' Text '# backslash' Comment.Single '\n' Text "'\\e'" Literal.String.Char ' ' Text '# escape' Comment.Single '\n' Text "'\\f'" Literal.String.Char ' ' Text '# form feed' Comment.Single '\n' Text "'\\n'" Literal.String.Char ' ' Text '# newline' Comment.Single '\n' Text "'\\r'" Literal.String.Char ' ' Text '# carriage return' Comment.Single '\n' Text "'\\t'" Literal.String.Char ' ' Text '# tab' Comment.Single '\n' Text "'\\v'" Literal.String.Char ' ' Text '# vertical tab' Comment.Single '\n\n' Text '"' Literal.String.Double '\\101' Literal.String.Escape '"' Literal.String.Double ' ' Text "# == 'A'" Comment.Single '\n' Text '"' Literal.String.Double '\\123' Literal.String.Escape '"' Literal.String.Double ' ' Text "# == 'S'" Comment.Single '\n' Text '"' Literal.String.Double '\\12' Literal.String.Escape '"' Literal.String.Double ' ' Text "# == '\\n'" Comment.Single '\n' Text '"' Literal.String.Double '\\1' Literal.String.Escape '"' Literal.String.Double ' ' Text '# code point 1' Comment.Single '\n\n' Text "'\\u0041'" Literal.String.Char ' ' Text "# == 'A'" Comment.Single '\n\n' Text "'\\u{41}'" Literal.String.Char ' ' Text "# == 'A'" Comment.Single '\n' Text "'\\u{1F52E}'" Literal.String.Char '\n\n' Text '{' Punctuation '1' Literal.Number.Integer ' ' Text '=' Operator '>' Operator ' ' Text '2' Literal.Number.Integer ',' Punctuation ' ' Text '3' Literal.Number.Integer ' ' Text '=' Operator '>' Operator ' ' Text '4' Literal.Number.Integer '}' Punctuation ' ' Text '# Hash(Int32, Int32)' Comment.Single '\n' Text '{' Punctuation '1' Literal.Number.Integer ' ' Text '=' Operator '>' Operator ' ' Text '2' Literal.Number.Integer ',' Punctuation ' ' Text "'a'" Literal.String.Char ' ' Text '=' Operator '>' Operator ' ' Text '3' Literal.Number.Integer '}' Punctuation ' ' Text '# Hash(Int32 | Char, Int32)' Comment.Single '\n\n' Text '{' Punctuation '}' Punctuation ' ' Text 'of' Keyword ' ' Text 'Int32' Name ' ' Text '=' Operator '>' Operator ' ' Text 'Int32' Name ' ' Text '# same as Hash(Int32, Int32).new' Comment.Single '\n\n' Text '{' Punctuation 'key1' Literal.String.Symbol ':' Punctuation ' ' Text "'a'" Literal.String.Char ',' Punctuation ' ' Text 'key2' Literal.String.Symbol ':' Punctuation ' ' Text "'b'" Literal.String.Char '}' Punctuation ' ' Text '# Hash(Symbol, Char)' Comment.Single '\n\n' Text '{' Punctuation '"' Literal.String.Double 'key1' Literal.String.Double '"' Literal.String.Double ':' Punctuation ' ' Text "'a'" Literal.String.Char ',' Punctuation ' ' Text '"' Literal.String.Double 'key2' Literal.String.Double '"' Literal.String.Double ':' Punctuation ' ' Text "'b'" Literal.String.Char '}' Punctuation ' ' Text '# Hash(String, Char)' Comment.Single '\n\n' Text 'MyType' Name '{' Punctuation '"' Literal.String.Double 'foo' Literal.String.Double '"' Literal.String.Double ' ' Text '=' Operator '>' Operator ' ' Text '"' Literal.String.Double 'bar' Literal.String.Double '"' Literal.String.Double '}' Punctuation '\n\n' Text 'tmp' Name ' ' Text '=' Operator ' ' Text 'MyType' Name '.' Operator 'new' Name '\n' Text 'tmp' Name '[' Operator '"' Literal.String.Double 'foo' Literal.String.Double '"' Literal.String.Double ']' Operator ' ' Text '=' Operator ' ' Text '"' Literal.String.Double 'bar' Literal.String.Double '"' Literal.String.Double '\n' Text 'tmp' Name '\n\n' Text 'tmp' Name ' ' Text '=' Operator ' ' Text 'MyType' Name '(' Punctuation 'typeof' Keyword.Pseudo '(' Punctuation '"' Literal.String.Double 'foo' Literal.String.Double '"' Literal.String.Double ')' Punctuation ',' Punctuation ' ' Text 'typeof' Keyword.Pseudo '(' Punctuation '"' Literal.String.Double 'bar' Literal.String.Double '"' Literal.String.Double ')' Punctuation ')' Punctuation '.' Operator 'new' Name '\n' Text 'tmp' Name '[' Operator '"' Literal.String.Double 'foo' Literal.String.Double '"' Literal.String.Double ']' Operator ' ' Text '=' Operator ' ' Text '"' Literal.String.Double 'bar' Literal.String.Double '"' Literal.String.Double '\n' Text 'tmp' Name '\n\n' Text 'MyType' Name '(' Punctuation 'String' Name ',' Punctuation ' ' Text 'String' Name ')' Punctuation '{' Punctuation '"' Literal.String.Double 'foo' Literal.String.Double '"' Literal.String.Double ' ' Text '=' Operator '>' Operator ' ' Text '"' Literal.String.Double 'bar' Literal.String.Double '"' Literal.String.Double '}' Punctuation '\n\n' Text ':hello' Literal.String.Symbol '\n' Text ':good_bye' Literal.String.Symbol '\n\n' Text '# With spaces and symbols' Comment.Single '\n' Text ':"' Literal.String.Symbol 'symbol with spaces' Literal.String.Symbol '"' Literal.String.Symbol '\n\n' Text '# Ending with question and exclamation marks' Comment.Single '\n' Text ':question?' Literal.String.Symbol '\n' Text ':exclamation!' Literal.String.Symbol '\n\n' Text '# For the operators' Comment.Single '\n' Text ':+' Literal.String.Symbol '\n' Text ':-' Literal.String.Symbol '\n' Text ':*' Literal.String.Symbol '\n' Text ':/' Literal.String.Symbol '\n' Text ':==' Literal.String.Symbol '\n' Text ':<' Literal.String.Symbol '\n' Text ':<=' Literal.String.Symbol '\n' Text ':>' Literal.String.Symbol '\n' Text ':>=' Literal.String.Symbol '\n' Text ':!' Literal.String.Symbol '\n' Text ':!=' Literal.String.Symbol '\n' Text ':=~' Literal.String.Symbol '\n' Text ':!~' Literal.String.Symbol '\n' Text ':&' Literal.String.Symbol '\n' Text ':|' Literal.String.Symbol '\n' Text ':^' Literal.String.Symbol '\n' Text ':~' Literal.String.Symbol '\n' Text ':**' Literal.String.Symbol '\n' Text ':>>' Literal.String.Symbol '\n' Text ':<<' Literal.String.Symbol '\n' Text ':%' Literal.String.Symbol '\n' Text ':[]' Literal.String.Symbol '\n' Text ':[]?' Literal.String.Symbol '\n' Text ':[]=' Literal.String.Symbol '\n' Text ':<=>' Literal.String.Symbol '\n' Text ':===' Literal.String.Symbol '\n\n' Text 'x' Name '..' Operator 'y' Name ' ' Text '# an inclusive range, in mathematics: [x, y]' Comment.Single '\n' Text 'x' Name '...' Operator 'y' Name ' ' Text '# an exclusive range, in mathematics: [x, y)' Comment.Single '\n\n' Text '# A proc without arguments' Comment.Single '\n' Text '-' Operator '>' Operator '{' Punctuation ' ' Text '1' Literal.Number.Integer ' ' Text '}' Punctuation ' ' Text '# Proc(Int32)' Comment.Single '\n\n' Text '# A proc with one argument' Comment.Single '\n' Text '-' Operator '>' Operator '(' Punctuation 'x' Name ' ' Text ':' Punctuation ' ' Text 'Int32' Name ')' Punctuation ' ' Text '{' Punctuation ' ' Text 'x' Name '.' Operator 'to_s' Name ' ' Text '}' Punctuation ' ' Text '# Proc(Int32, String)' Comment.Single '\n\n' Text '# A proc with two arguments:' Comment.Single '\n' Text '-' Operator '>' Operator '(' Punctuation 'x' Name ' ' Text ':' Punctuation ' ' Text 'Int32' Name ',' Punctuation ' ' Text 'y' Name ' ' Text ':' Punctuation ' ' Text 'Int32' Name ')' Punctuation ' ' Text '{' Punctuation ' ' Text 'x' Name ' ' Text '+' Operator ' ' Text 'y' Name ' ' Text '}' Punctuation ' ' Text '# Proc(Int32, Int32, Int32)' Comment.Single '\n\n' Text 'Proc' Name '(' Punctuation 'Int32' Name ',' Punctuation ' ' Text 'String' Name ')' Punctuation '.' Operator 'new' Name ' ' Text '{' Punctuation ' ' Text '|' Operator 'x' Name '|' Operator ' ' Text 'x' Name '.' Operator 'to_s' Name ' ' Text '}' Punctuation ' ' Text '# Proc(Int32, String)' Comment.Single '\n\n' Text 'proc' Name ' ' Text '=' Operator ' ' Text '-' Operator '>' Operator '(' Punctuation 'x' Name ' ' Text ':' Punctuation ' ' Text 'Int32' Name ',' Punctuation ' ' Text 'y' Name ' ' Text ':' Punctuation ' ' Text 'Int32' Name ')' Punctuation ' ' Text '{' Punctuation ' ' Text 'x' Name ' ' Text '+' Operator ' ' Text 'y' Name ' ' Text '}' Punctuation '\n' Text 'proc' Name '.' Operator 'call' Name '(' Punctuation '1' Literal.Number.Integer ',' Punctuation ' ' Text '2' Literal.Number.Integer ')' Punctuation ' ' Text '# => 3' Comment.Single '\n\n' Text 'def' Keyword ' ' Text 'one' Name.Function '\n ' Text '1' Literal.Number.Integer '\n' Text 'end' Keyword '\n\n' Text 'proc' Name ' ' Text '=' Operator ' ' Text '-' Operator '>' Operator 'one' Name '\n' Text 'proc' Name '.' Operator 'call' Name ' ' Text '# => 1' Comment.Single '\n\n' Text 'def' Keyword ' ' Text 'plus_one' Name.Function '(' Punctuation 'x' Name ')' Punctuation '\n ' Text 'x' Name ' ' Text '+' Operator ' ' Text '1' Literal.Number.Integer '\n' Text 'end' Keyword '\n\n' Text 'proc' Name ' ' Text '=' Operator ' ' Text '-' Operator '>' Operator 'plus_one' Name '(' Punctuation 'Int32' Name ')' Punctuation '\n' Text 'proc' Name '.' Operator 'call' Name '(' Punctuation '41' Literal.Number.Integer ')' Punctuation ' ' Text '# => 42' Comment.Single '\n\n' Text 'str' Name ' ' Text '=' Operator ' ' Text '"' Literal.String.Double 'hello' Literal.String.Double '"' Literal.String.Double '\n' Text 'proc' Name ' ' Text '=' Operator ' ' Text '-' Operator '>' Operator 'str' Name '.' Operator 'count' Name '(' Punctuation 'Char' Name ')' Punctuation '\n' Text 'proc' Name '.' Operator 'call' Name '(' Punctuation "'e'" Literal.String.Char ')' Punctuation ' ' Text '# => 1' Comment.Single '\n' Text 'proc' Name '.' Operator 'call' Name '(' Punctuation "'l'" Literal.String.Char ')' Punctuation ' ' Text '# => 2' Comment.Single '\n\n' Text 'tuple' Name ' ' Text '=' Operator ' ' Text '{' Punctuation '1' Literal.Number.Integer ',' Punctuation ' ' Text '"' Literal.String.Double 'hello' Literal.String.Double '"' Literal.String.Double ',' Punctuation ' ' Text "'x'" Literal.String.Char '}' Punctuation ' ' Text '# Tuple(Int32, String, Char)' Comment.Single '\n' Text 'tuple' Name '[' Operator '0' Literal.Number.Integer ']' Operator ' ' Text '# => 1 (Int32)' Comment.Single '\n' Text 'tuple' Name '[' Operator '1' Literal.Number.Integer ']' Operator ' ' Text '# => "hello" (String)' Comment.Single '\n' Text 'tuple' Name '[' Operator '2' Literal.Number.Integer ']' Operator ' ' Text "# => 'x' (Char)" Comment.Single '\n\n' Text '[' Operator '1' Literal.Number.Integer ',' Punctuation ' ' Text '2' Literal.Number.Integer ',' Punctuation ' ' Text '3' Literal.Number.Integer ']' Operator ' ' Text '# Array(Int32)' Comment.Single '\n' Text '[' Operator '1' Literal.Number.Integer ',' Punctuation ' ' Text '"' Literal.String.Double 'hello' Literal.String.Double '"' Literal.String.Double ',' Punctuation ' ' Text "'x'" Literal.String.Char ']' Operator ' ' Text '# Array(Int32 | String | Char)' Comment.Single '\n\n' Text '[' Operator ']' Operator ' ' Text 'of' Keyword ' ' Text 'Int32' Name ' ' Text '# same as Array(Int32).new' Comment.Single '\n\n' Text '%w(' Literal.String.Other 'one two three' Literal.String.Other ')' Literal.String.Other ' ' Text '# ["one", "two", "three"]' Comment.Single '\n\n' Text '%i(' Literal.String.Other 'one two three' Literal.String.Other ')' Literal.String.Other ' ' Text '# [:one, :two, :three]' Comment.Single '\n\n' Text 'MyType' Name '{' Punctuation '1' Literal.Number.Integer ',' Punctuation ' ' Text '2' Literal.Number.Integer ',' Punctuation ' ' Text '3' Literal.Number.Integer '}' Punctuation '\n\n' Text 'tmp' Name ' ' Text '=' Operator ' ' Text 'MyType' Name '.' Operator 'new' Name '\n' Text 'tmp' Name ' ' Text '<<' Operator ' ' Text '1' Literal.Number.Integer '\n' Text 'tmp' Name ' ' Text '<<' Operator ' ' Text '2' Literal.Number.Integer '\n' Text 'tmp' Name ' ' Text '<<' Operator ' ' Text '3' Literal.Number.Integer '\n' Text 'tmp' Name '\n\n' Text 'tmp' Name ' ' Text '=' Operator ' ' Text 'MyType' Name '(' Punctuation 'typeof' Keyword.Pseudo '(' Punctuation '1' Literal.Number.Integer ',' Punctuation ' ' Text '2' Literal.Number.Integer ',' Punctuation ' ' Text '3' Literal.Number.Integer ')' Punctuation ')' Punctuation '.' Operator 'new' Name '\n' Text 'tmp' Name ' ' Text '<<' Operator ' ' Text '1' Literal.Number.Integer '\n' Text 'tmp' Name ' ' Text '<<' Operator ' ' Text '2' Literal.Number.Integer '\n' Text 'tmp' Name ' ' Text '<<' Operator ' ' Text '3' Literal.Number.Integer '\n' Text 'tmp' Name '\n\n' Text 'MyType' Name '(' Punctuation 'Int32' Name ' ' Text '|' Operator ' ' Text 'String' Name ')' Punctuation '{' Punctuation '1' Literal.Number.Integer ',' Punctuation ' ' Text '2' Literal.Number.Integer ',' Punctuation ' ' Text '"' Literal.String.Double 'foo' Literal.String.Double '"' Literal.String.Double '}' Punctuation '\n\n' Text 'nil' Keyword.Constant '\n\n' Text '1' Literal.Number.Integer ' ' Text '# Int32' Comment.Single '\n\n' Text '1_i8' Literal.Number.Integer ' ' Text '# Int8' Comment.Single '\n' Text '1_i16' Literal.Number.Integer ' ' Text '# Int16' Comment.Single '\n' Text '1_i32' Literal.Number.Integer ' ' Text '# Int32' Comment.Single '\n' Text '1_i64' Literal.Number.Integer ' ' Text '# Int64' Comment.Single '\n\n' Text '1_u8' Literal.Number.Integer ' ' Text '# UInt8' Comment.Single '\n' Text '1_u16' Literal.Number.Integer ' ' Text '# UInt16' Comment.Single '\n' Text '1_u32' Literal.Number.Integer ' ' Text '# UInt32' Comment.Single '\n' Text '1_u64' Literal.Number.Integer ' ' Text '# UInt64' Comment.Single '\n\n' Text '+' Operator '10' Literal.Number.Integer ' ' Text '# Int32' Comment.Single '\n' Text '-' Operator '20' Literal.Number.Integer ' ' Text '# Int32' Comment.Single '\n\n' Text '2147483648' Literal.Number.Integer ' ' Text '# Int64' Comment.Single '\n' Text '9223372036854775808' Literal.Number.Integer ' ' Text '# UInt64' Comment.Single '\n\n' Text '1_000_000' Literal.Number.Integer ' ' Text '# better than 1000000' Comment.Single '\n\n' Text '0b1101' Literal.Number.Bin ' ' Text '# == 13' Comment.Single '\n\n' Text '0o123' Literal.Number.Oct ' ' Text '# == 83' Comment.Single '\n\n' Text '0xFE012D' Literal.Number.Hex ' ' Text '# == 16646445' Comment.Single '\n' Text '0xfe012d' Literal.Number.Hex ' ' Text '# == 16646445' Comment.Single '\n\n' Text 'true' Keyword.Constant ' ' Text '# A Bool that is true' Comment.Single '\n' Text 'false' Keyword.Constant ' ' Text '# A Bool that is false' Comment.Single '\n\n' Text 'a' Name ' ' Text '=' Operator ' ' Text '1' Literal.Number.Integer '\n\n' Text 'ptr' Name ' ' Text '=' Operator ' ' Text 'pointerof' Keyword.Pseudo '(' Punctuation 'a' Name ')' Punctuation '\n' Text 'ptr' Name '.' Operator 'value' Name ' ' Text '=' Operator ' ' Text '2' Literal.Number.Integer '\n\n' Text 'a' Name ' ' Text '# => 2' Comment.Single '\n\n' Text 'class' Keyword ' ' Text 'Point' Name.Class '\n ' Text 'def' Keyword ' ' Text 'initialize' Name.Function '(' Punctuation '@x' Name.Variable.Instance ',' Punctuation ' ' Text '@y' Name.Variable.Instance ')' Punctuation '\n ' Text 'end' Keyword '\n\n ' Text 'def' Keyword ' ' Text 'x' Name.Function '\n ' Text '@x' Name.Variable.Instance '\n ' Text 'end' Keyword '\n\n ' Text 'def' Keyword ' ' Text 'x_ptr' Name.Function '\n ' Text 'pointerof' Keyword.Pseudo '(' Punctuation '@x' Name.Variable.Instance ')' Punctuation '\n ' Text 'end' Keyword '\n' Text 'end' Keyword '\n\n' Text 'point' Name ' ' Text '=' Operator ' ' Text 'Point' Name '.' Operator 'new' Name ' ' Text '1' Literal.Number.Integer ',' Punctuation ' ' Text '2' Literal.Number.Integer '\n\n' Text 'ptr' Name ' ' Text '=' Operator ' ' Text 'point' Name '.' Operator 'x_ptr' Name '\n' Text 'ptr' Name '.' Operator 'value' Name ' ' Text '=' Operator ' ' Text '10' Literal.Number.Integer '\n\n' Text 'point' Name '.' Operator 'x' Name ' ' Text '# => 10' Comment.Single '\n\n' Text 'def' Keyword ' ' Text 'add' Name.Function '(' Punctuation 'x' Name ' ' Text ':' Punctuation ' ' Text 'Number' Name ',' Punctuation ' ' Text 'y' Name ' ' Text ':' Punctuation ' ' Text 'Number' Name ')' Punctuation '\n ' Text 'x' Name ' ' Text '+' Operator ' ' Text 'y' Name '\n' Text 'end' Keyword '\n\n' Text '# Ok' Comment.Single '\n' Text 'add' Name ' ' Text '1' Literal.Number.Integer ',' Punctuation ' ' Text '2' Literal.Number.Integer ' ' Text '# Ok' Comment.Single '\n\n' Text "# Error: no overload matches 'add' with types Bool, Bool" Comment.Single '\n' Text 'add' Name ' ' Text 'true' Keyword.Constant ',' Punctuation ' ' Text 'false' Keyword.Constant '\n\n' Text 'def' Keyword ' ' Text 'add' Name.Function '(' Punctuation 'x' Name ',' Punctuation ' ' Text 'y' Name ')' Punctuation '\n ' Text 'x' Name ' ' Text '+' Operator ' ' Text 'y' Name '\n' Text 'end' Keyword '\n\n' Text 'add' Name ' ' Text 'true' Keyword.Constant ',' Punctuation ' ' Text 'false' Keyword.Constant '\n\n' Text "# A class that has a + method but isn't a Number" Comment.Single '\n' Text 'class' Keyword ' ' Text 'Six' Name.Class '\n ' Text 'def' Keyword ' ' Text '+' Name.Function '(' Punctuation 'other' Name ')' Punctuation '\n ' Text '6' Literal.Number.Integer ' ' Text '+' Operator ' ' Text 'other' Name '\n ' Text 'end' Keyword '\n' Text 'end' Keyword '\n\n' Text '# add method without type restrictions' Comment.Single '\n' Text 'def' Keyword ' ' Text 'add' Name.Function '(' Punctuation 'x' Name ',' Punctuation ' ' Text 'y' Name ')' Punctuation '\n ' Text 'x' Name ' ' Text '+' Operator ' ' Text 'y' Name '\n' Text 'end' Keyword '\n\n' Text '# OK' Comment.Single '\n' Text 'add' Name ' ' Text 'Six' Name '.' Operator 'new' Name ',' Punctuation ' ' Text '10' Literal.Number.Integer '\n\n' Text '# add method with type restrictions' Comment.Single '\n' Text 'def' Keyword ' ' Text 'restricted_add' Name.Function '(' Punctuation 'x' Name ' ' Text ':' Punctuation ' ' Text 'Number' Name ',' Punctuation ' ' Text 'y' Name ' ' Text ':' Punctuation ' ' Text 'Number' Name ')' Punctuation '\n ' Text 'x' Name ' ' Text '+' Operator ' ' Text 'y' Name '\n' Text 'end' Keyword '\n\n' Text "# Error: no overload matches 'restricted_add' with types Six, Int32" Comment.Single '\n' Text 'restricted_add' Name ' ' Text 'Six' Name '.' Operator 'new' Name ',' Punctuation ' ' Text '10' Literal.Number.Integer '\n\n' Text 'class' Keyword ' ' Text 'Person' Name.Class '\n ' Text 'def' Keyword ' ' Text '==' Name.Function '(' Punctuation 'other' Name ' ' Text ':' Punctuation ' ' Text 'self' Keyword ')' Punctuation '\n ' Text 'other' Name '.' Operator 'name' Name ' ' Text '==' Operator ' ' Text 'name' Name '\n ' Text 'end' Keyword '\n\n ' Text 'def' Keyword ' ' Text '==' Name.Function '(' Punctuation 'other' Name ')' Punctuation '\n ' Text 'false' Keyword.Constant '\n ' Text 'end' Keyword '\n' Text 'end' Keyword '\n\n' Text 'john' Name ' ' Text '=' Operator ' ' Text 'Person' Name '.' Operator 'new' Name ' ' Text '"' Literal.String.Double 'John' Literal.String.Double '"' Literal.String.Double '\n' Text 'another_john' Name ' ' Text '=' Operator ' ' Text 'Person' Name '.' Operator 'new' Name ' ' Text '"' Literal.String.Double 'John' Literal.String.Double '"' Literal.String.Double '\n' Text 'peter' Name ' ' Text '=' Operator ' ' Text 'Person' Name '.' Operator 'new' Name ' ' Text '"' Literal.String.Double 'Peter' Literal.String.Double '"' Literal.String.Double '\n\n' Text 'john' Name ' ' Text '==' Operator ' ' Text 'another_john' Name ' ' Text '# => true' Comment.Single '\n' Text 'john' Name ' ' Text '==' Operator ' ' Text 'peter' Name ' ' Text '# => false (names differ)' Comment.Single '\n' Text 'john' Name ' ' Text '==' Operator ' ' Text '1' Literal.Number.Integer ' ' Text '# => false (because 1 is not a Person)' Comment.Single '\n\n' Text 'class' Keyword ' ' Text 'Person' Name.Class '\n ' Text 'def' Keyword ' ' Text 'self' Name.Class '.' Operator 'compare' Name.Function '(' Punctuation 'p1' Name ' ' Text ':' Punctuation ' ' Text 'self' Keyword ',' Punctuation ' ' Text 'p2' Name ' ' Text ':' Punctuation ' ' Text 'self' Keyword ')' Punctuation '\n ' Text 'p1' Name '.' Operator 'name' Name ' ' Text '==' Operator ' ' Text 'p2' Name '.' Operator 'name' Name '\n ' Text 'end' Keyword '\n' Text 'end' Keyword '\n\n' Text 'john' Name ' ' Text '=' Operator ' ' Text 'Person' Name '.' Operator 'new' Name ' ' Text '"' Literal.String.Double 'John' Literal.String.Double '"' Literal.String.Double '\n' Text 'peter' Name ' ' Text '=' Operator ' ' Text 'Person' Name '.' Operator 'new' Name ' ' Text '"' Literal.String.Double 'Peter' Literal.String.Double '"' Literal.String.Double '\n\n' Text 'Person' Name '.' Operator 'compare' Name '(' Punctuation 'john' Name ',' Punctuation ' ' Text 'peter' Name ')' Punctuation ' ' Text '# OK' Comment.Single '\n\n' Text 'def' Keyword ' ' Text 'foo' Name.Function '(' Punctuation 'x' Name ' ' Text ':' Punctuation ' ' Text 'Int32' Name ')' Punctuation '\n' Text 'end' Keyword '\n\n' Text 'foo' Name ' ' Text '1' Literal.Number.Integer ' ' Text '# OK' Comment.Single '\n' Text 'foo' Name ' ' Text '"' Literal.String.Double 'hello' Literal.String.Double '"' Literal.String.Double ' ' Text '# Error' Comment.Single '\n\n' Text 'def' Keyword ' ' Text 'foo' Name.Function '(' Punctuation 'x' Name ' ' Text ':' Punctuation ' ' Text 'Int32' Name '.' Operator 'class' Name ')' Punctuation '\n' Text 'end' Keyword '\n\n' Text 'foo' Name ' ' Text 'Int32' Name ' ' Text '# OK' Comment.Single '\n' Text 'foo' Name ' ' Text 'String' Name ' ' Text '# Error' Comment.Single '\n\n' Text 'def' Keyword ' ' Text 'foo' Name.Function '(' Punctuation 'x' Name ' ' Text ':' Punctuation ' ' Text 'Int32' Name '.' Operator 'class' Name ')' Punctuation '\n ' Text 'puts' Name.Builtin ' ' Text '"' Literal.String.Double 'Got Int32' Literal.String.Double '"' Literal.String.Double '\n' Text 'end' Keyword '\n\n' Text 'def' Keyword ' ' Text 'foo' Name.Function '(' Punctuation 'x' Name ' ' Text ':' Punctuation ' ' Text 'String' Name '.' Operator 'class' Name ')' Punctuation '\n ' Text 'puts' Name.Builtin ' ' Text '"' Literal.String.Double 'Got String' Literal.String.Double '"' Literal.String.Double '\n' Text 'end' Keyword '\n\n' Text 'foo' Name ' ' Text 'Int32' Name ' ' Text '# prints "Got Int32"' Comment.Single '\n' Text 'foo' Name ' ' Text 'String' Name ' ' Text '# prints "Got String"' Comment.Single '\n\n' Text 'def' Keyword ' ' Text 'foo' Name.Function '(' Punctuation '*' Operator 'args' Name ' ' Text ':' Punctuation ' ' Text 'Int32' Name ')' Punctuation '\n' Text 'end' Keyword '\n\n' Text 'def' Keyword ' ' Text 'foo' Name.Function '(' Punctuation '*' Operator 'args' Name ' ' Text ':' Punctuation ' ' Text 'String' Name ')' Punctuation '\n' Text 'end' Keyword '\n\n' Text 'foo' Name ' ' Text '1' Literal.Number.Integer ',' Punctuation ' ' Text '2' Literal.Number.Integer ',' Punctuation ' ' Text '3' Literal.Number.Integer ' ' Text '# OK, invokes first overload' Comment.Single '\n' Text 'foo' Name ' ' Text '"' Literal.String.Double 'a' Literal.String.Double '"' Literal.String.Double ',' Punctuation ' ' Text '"' Literal.String.Double 'b' Literal.String.Double '"' Literal.String.Double ',' Punctuation ' ' Text '"' Literal.String.Double 'c' Literal.String.Double '"' Literal.String.Double ' ' Text '# OK, invokes second overload' Comment.Single '\n' Text 'foo' Name ' ' Text '1' Literal.Number.Integer ',' Punctuation ' ' Text '2' Literal.Number.Integer ',' Punctuation ' ' Text '"' Literal.String.Double 'hello' Literal.String.Double '"' Literal.String.Double ' ' Text '# Error' Comment.Single '\n' Text 'foo' Name '(' Punctuation ')' Punctuation ' ' Text '# Error' Comment.Single '\n\n' Text 'def' Keyword ' ' Text 'foo' Name.Function '\n ' Text '# This is the empty-tuple case' Comment.Single '\n' Text 'end' Keyword '\n\n' Text 'def' Keyword ' ' Text 'foo' Name.Function '(' Punctuation 'x' Name ' ' Text ':' Punctuation ' ' Text 'T' Name ')' Punctuation '\n ' Text 'T' Name '\n' Text 'end' Keyword '\n\n' Text 'foo' Name '(' Punctuation '1' Literal.Number.Integer ')' Punctuation ' ' Text '# => Int32' Comment.Single '\n' Text 'foo' Name '(' Punctuation '"' Literal.String.Double 'hello' Literal.String.Double '"' Literal.String.Double ')' Punctuation ' ' Text '# => String' Comment.Single '\n\n' Text 'def' Keyword ' ' Text 'foo' Name.Function '(' Punctuation 'x' Name ' ' Text ':' Punctuation ' ' Text 'Array' Name '(' Punctuation 'T' Name ')' Punctuation ')' Punctuation '\n ' Text 'T' Name '\n' Text 'end' Keyword '\n\n' Text 'foo' Name '(' Punctuation '[' Operator '1' Literal.Number.Integer ',' Punctuation ' ' Text '2' Literal.Number.Integer ']' Operator ')' Punctuation ' ' Text '# => Int32' Comment.Single '\n' Text 'foo' Name '(' Punctuation '[' Operator '1' Literal.Number.Integer ',' Punctuation ' ' Text '"' Literal.String.Double 'a' Literal.String.Double '"' Literal.String.Double ']' Operator ')' Punctuation ' ' Text '# => (Int32 | String)' Comment.Single '\n\n' Text 'def' Keyword ' ' Text 'foo' Name.Function '(' Punctuation 'x' Name ' ' Text ':' Punctuation ' ' Text 'T' Name '.' Operator 'class' Name ')' Punctuation '\n ' Text 'Array' Name '(' Punctuation 'T' Name ')' Punctuation '\n' Text 'end' Keyword '\n\n' Text 'foo' Name '(' Punctuation 'Int32' Name ')' Punctuation ' ' Text '# => Array(Int32)' Comment.Single '\n' Text 'foo' Name '(' Punctuation 'String' Name ')' Punctuation ' ' Text '# => Array(String)' Comment.Single '\n\n' Text 'class' Keyword ' ' Text 'Person' Name.Class '\n ' Text '# Increases age by one' Comment.Single '\n ' Text 'def' Keyword ' ' Text 'become_older' Name.Function '\n ' Text '@age' Name.Variable.Instance ' ' Text '+=' Operator ' ' Text '1' Literal.Number.Integer '\n ' Text 'end' Keyword '\n\n ' Text '# Increases age by the given number of years' Comment.Single '\n ' Text 'def' Keyword ' ' Text 'become_older' Name.Function '(' Punctuation 'years' Name ' ' Text ':' Punctuation ' ' Text 'Int32' Name ')' Punctuation '\n ' Text '@age' Name.Variable.Instance ' ' Text '+=' Operator ' ' Text 'years' Name '\n ' Text 'end' Keyword '\n\n ' Text '# Increases age by the given number of years, as a String' Comment.Single '\n ' Text 'def' Keyword ' ' Text 'become_older' Name.Function '(' Punctuation 'years' Name ' ' Text ':' Punctuation ' ' Text 'String' Name ')' Punctuation '\n ' Text '@age' Name.Variable.Instance ' ' Text '+=' Operator ' ' Text 'years' Name '.' Operator 'to_i' Name '\n ' Text 'end' Keyword '\n\n ' Text '# Yields the current age of this person and increases' Comment.Single '\n ' Text '# its age by the value returned by the block' Comment.Single '\n ' Text 'def' Keyword ' ' Text 'become_older' Name.Function '\n ' Text '@age' Name.Variable.Instance ' ' Text '+=' Operator ' ' Text 'yield' Keyword ' ' Text '@age' Name.Variable.Instance '\n ' Text 'end' Keyword '\n' Text 'end' Keyword '\n\n' Text 'person' Name ' ' Text '=' Operator ' ' Text 'Person' Name '.' Operator 'new' Name ' ' Text '"' Literal.String.Double 'John' Literal.String.Double '"' Literal.String.Double '\n\n' Text 'person' Name '.' Operator 'become_older' Name '\n' Text 'person' Name '.' Operator 'age' Name ' ' Text '# => 1' Comment.Single '\n\n' Text 'person' Name '.' Operator 'become_older' Name ' ' Text '5' Literal.Number.Integer '\n' Text 'person' Name '.' Operator 'age' Name ' ' Text '# => 6' Comment.Single '\n\n' Text 'person' Name '.' Operator 'become_older' Name ' ' Text '"' Literal.String.Double '12' Literal.String.Double '"' Literal.String.Double '\n' Text 'person' Name '.' Operator 'age' Name ' ' Text '# => 18' Comment.Single '\n\n' Text 'person' Name '.' Operator 'become_older' Name ' ' Text 'do' Keyword ' ' Text '|' Operator 'current_age' Name '|' Operator '\n ' Text 'current_age' Name ' ' Text '<' Operator ' ' Text '20' Literal.Number.Integer ' ' Text '?' Operator ' ' Text '10' Literal.Number.Integer ' ' Text ':' Punctuation ' ' Text '30' Literal.Number.Integer '\n' Text 'end' Keyword '\n' Text 'person' Name '.' Operator 'age' Name ' ' Text '# => 28' Comment.Single '\n\n' Text 'a' Name ' ' Text '=' Operator ' ' Text '1' Literal.Number.Integer '\n' Text 'a' Name '.is_a?' Keyword.Pseudo '(' Punctuation 'Int32' Name ')' Punctuation ' ' Text '# => true' Comment.Single '\n' Text 'a' Name '.is_a?' Keyword.Pseudo '(' Punctuation 'String' Name ')' Punctuation ' ' Text '# => false' Comment.Single '\n' Text 'a' Name '.is_a?' Keyword.Pseudo '(' Punctuation 'Number' Name ')' Punctuation ' ' Text '# => true' Comment.Single '\n' Text 'a' Name '.is_a?' Keyword.Pseudo '(' Punctuation 'Int32' Name ' ' Text '|' Operator ' ' Text 'String' Name ')' Punctuation ' ' Text '# => true' Comment.Single '\n\n' Text '# One for each thread' Comment.Single '\n' Text '@[' Operator 'ThreadLocal' Name.Decorator ']' Operator '\n' Text 'values' Name ' ' Text '=' Operator ' ' Text '[' Operator ']' Operator ' ' Text 'of' Keyword ' ' Text 'Int32' Name '\n\n' Text '@[' Operator 'AlwaysInline' Name.Decorator ']' Operator '\n' Text 'def' Keyword ' ' Text 'foo' Name.Function '\n ' Text '1' Literal.Number.Integer '\n' Text 'end' Keyword '\n\n' Text '@[' Operator 'NoInline' Name.Decorator ']' Operator '\n' Text 'def' Keyword ' ' Text 'foo' Name.Function '\n ' Text '1' Literal.Number.Integer '\n' Text 'end' Keyword '\n\n' Text 'lib' Keyword ' ' Text 'LibFoo' Name.Namespace '\n ' Text '@[' Operator 'CallConvention' Name.Decorator '(' Punctuation '"' Literal.String.Double 'X86_StdCall' Literal.String.Double '"' Literal.String.Double ')' Punctuation ']' Operator '\n ' Text 'fun' Keyword ' ' Text 'foo' Name.Function ' ' Text ':' Punctuation ' ' Text 'Int32' Name '\n' Text 'end' Keyword '\n\n' Text 'def' Keyword ' ' Text 'sum' Name.Function '(' Punctuation '*' Operator 'elements' Name ')' Punctuation '\n ' Text 'total' Name ' ' Text '=' Operator ' ' Text '0' Literal.Number.Integer '\n ' Text 'elements' Name '.' Operator 'each' Name ' ' Text 'do' Keyword ' ' Text '|' Operator 'value' Name '|' Operator '\n ' Text 'total' Name ' ' Text '+=' Operator ' ' Text 'value' Name '\n ' Text 'end' Keyword '\n ' Text 'total' Name '\n' Text 'end' Keyword '\n\n' Text '# elements is Tuple(Int32, Int32, Int32, Float64)' Comment.Single '\n' Text 'sum' Name ' ' Text '1' Literal.Number.Integer ',' Punctuation ' ' Text '2' Literal.Number.Integer ',' Punctuation ' ' Text '3' Literal.Number.Integer ',' Punctuation ' ' Text '4.5' Literal.Number.Float '\n\n' Text 'if' Keyword ' ' Text 'a' Name '.responds_to?' Keyword.Pseudo '(' Punctuation ':abs' Literal.String.Symbol ')' Punctuation '\n ' Text "# here a's type will be reduced to those responding to the 'abs' method" Comment.Single '\n' Text 'end' Keyword '\n\n' Text 'a' Name ' ' Text '=' Operator ' ' Text 'some_condition' Name ' ' Text '?' Punctuation ' ' Text '1' Literal.Number.Integer ' ' Text ':' Punctuation ' ' Text '"' Literal.String.Double 'hello' Literal.String.Double '"' Literal.String.Double '\n' Text '# a : Int32 | String' Comment.Single '\n\n' Text 'if' Keyword ' ' Text 'a' Name '.responds_to?' Keyword.Pseudo '(' Punctuation ':abs' Literal.String.Symbol ')' Punctuation '\n ' Text "# here a will be Int32, since Int32#abs exists but String#abs doesn't" Comment.Single '\n' Text 'else' Keyword '\n ' Text '# here a will be String' Comment.Single '\n' Text 'end' Keyword '\n\n' Text 'if' Keyword ' ' Text '(' Punctuation 'a' Name ' ' Text '=' Operator ' ' Text '@a' Name.Variable.Instance ')' Punctuation '.responds_to?' Keyword.Pseudo '(' Punctuation ':abs' Literal.String.Symbol ')' Punctuation '\n ' Text '# here a is guaranteed to respond to `abs`' Comment.Single '\n' Text 'end' Keyword '\n\n' Text 'def' Keyword ' ' Text 'capture' Name.Function '(' Punctuation '&' Operator 'block' Name ')' Punctuation '\n ' Text 'block' Name '\n' Text 'end' Keyword '\n\n' Text 'def' Keyword ' ' Text 'invoke' Name.Function '(' Punctuation '&' Operator 'block' Name ')' Punctuation '\n ' Text 'block' Name '.' Operator 'call' Name '\n' Text 'end' Keyword '\n\n' Text 'proc' Name ' ' Text '=' Operator ' ' Text 'capture' Name ' ' Text '{' Punctuation ' ' Text 'puts' Name.Builtin ' ' Text '"' Literal.String.Double 'Hello' Literal.String.Double '"' Literal.String.Double ' ' Text '}' Punctuation '\n' Text 'invoke' Name '(' Punctuation '&' Operator 'proc' Name ')' Punctuation ' ' Text '# prints "Hello"' Comment.Single '\n\n' Text 'def' Keyword ' ' Text 'capture' Name.Function '(' Punctuation '&' Operator 'block' Name ')' Punctuation '\n ' Text 'block' Name '\n' Text 'end' Keyword '\n\n' Text 'def' Keyword ' ' Text 'twice' Name.Function '\n ' Text 'yield' Keyword '\n ' Text 'yield' Keyword '\n' Text 'end' Keyword '\n\n' Text 'proc' Name ' ' Text '=' Operator ' ' Text 'capture' Name ' ' Text '{' Punctuation ' ' Text 'puts' Name.Builtin ' ' Text '"' Literal.String.Double 'Hello' Literal.String.Double '"' Literal.String.Double ' ' Text '}' Punctuation '\n' Text 'twice' Name ' ' Text '&' Operator 'proc' Name '\n\n' Text 'twice' Name ' ' Text '&' Operator '-' Operator '>' Operator '{' Punctuation ' ' Text 'puts' Name.Builtin ' ' Text '"' Literal.String.Double 'Hello' Literal.String.Double '"' Literal.String.Double ' ' Text '}' Punctuation '\n\n' Text 'def' Keyword ' ' Text 'say_hello' Name.Function '\n ' Text 'puts' Name.Builtin ' ' Text '"' Literal.String.Double 'Hello' Literal.String.Double '"' Literal.String.Double '\n' Text 'end' Keyword '\n\n' Text 'twice' Name ' ' Text '&' Operator '-' Operator '>' Operator 'say_hello' Name '\n\n' Text 'def' Keyword ' ' Text 'foo' Name.Function '\n ' Text 'yield' Keyword ' ' Text '1' Literal.Number.Integer '\n' Text 'end' Keyword '\n\n' Text 'def' Keyword ' ' Text 'wrap_foo' Name.Function '\n ' Text 'puts' Name.Builtin ' ' Text '"' Literal.String.Double 'Before foo' Literal.String.Double '"' Literal.String.Double '\n ' Text 'foo' Name ' ' Text 'do' Keyword ' ' Text '|' Operator 'x' Name '|' Operator '\n ' Text 'yield' Keyword ' ' Text 'x' Name '\n ' Text 'end' Keyword '\n ' Text 'puts' Name.Builtin ' ' Text '"' Literal.String.Double 'After foo' Literal.String.Double '"' Literal.String.Double '\n' Text 'end' Keyword '\n\n' Text 'wrap_foo' Name ' ' Text 'do' Keyword ' ' Text '|' Operator 'i' Name '|' Operator '\n ' Text 'puts' Name.Builtin ' ' Text 'i' Name '\n' Text 'end' Keyword '\n\n' Text 'def' Keyword ' ' Text 'foo' Name.Function '\n ' Text 'yield' Keyword ' ' Text '1' Literal.Number.Integer '\n' Text 'end' Keyword '\n\n' Text 'def' Keyword ' ' Text 'wrap_foo' Name.Function '(' Punctuation '&' Operator 'block' Name ' ' Text ':' Punctuation ' ' Text 'Int32' Name ' ' Text '-' Operator '>' Operator ' ' Text '_' Name ')' Punctuation '\n ' Text 'puts' Name.Builtin ' ' Text '"' Literal.String.Double 'Before foo' Literal.String.Double '"' Literal.String.Double '\n ' Text 'foo' Name '(' Punctuation '&' Operator 'block' Name ')' Punctuation '\n ' Text 'puts' Name.Builtin ' ' Text '"' Literal.String.Double 'After foo' Literal.String.Double '"' Literal.String.Double '\n' Text 'end' Keyword '\n\n' Text 'wrap_foo' Name ' ' Text 'do' Keyword ' ' Text '|' Operator 'i' Name '|' Operator '\n ' Text 'puts' Name.Builtin ' ' Text 'i' Name '\n' Text 'end' Keyword '\n\n' Text 'foo_forward' Name ' ' Text 'do' Keyword ' ' Text '|' Operator 'i' Name '|' Operator '\n ' Text 'break' Keyword ' ' Text '# error' Comment.Single '\n' Text 'end' Keyword '\n\n' Text 'a' Name ' ' Text '=' Operator ' ' Text '2' Literal.Number.Integer '\n' Text 'while' Keyword ' ' Text '(' Punctuation 'a' Name ' ' Text '+=' Operator ' ' Text '1' Literal.Number.Integer ')' Punctuation ' ' Text '<' Operator ' ' Text '20' Literal.Number.Integer '\n ' Text 'if' Keyword ' ' Text 'a' Name ' ' Text '==' Operator ' ' Text '10' Literal.Number.Integer '\n ' Text "# goes to 'puts a'" Comment.Single '\n ' Text 'break' Keyword '\n ' Text 'end' Keyword '\n' Text 'end' Keyword '\n' Text 'puts' Name.Builtin ' ' Text 'a' Name ' ' Text '# => 10' Comment.Single '\n\n' Text 'class' Keyword ' ' Text 'Person' Name.Class '\n ' Text 'private' Keyword ' ' Text 'def' Keyword ' ' Text 'say' Name.Function '(' Punctuation 'message' Name ')' Punctuation '\n ' Text 'puts' Name.Builtin ' ' Text 'message' Name '\n ' Text 'end' Keyword '\n\n ' Text 'def' Keyword ' ' Text 'say_hello' Name.Function '\n ' Text 'say' Name ' ' Text '"' Literal.String.Double 'hello' Literal.String.Double '"' Literal.String.Double ' ' Text '# OK, no receiver' Comment.Single '\n ' Text 'self' Keyword '.' Operator 'say' Name ' ' Text '"' Literal.String.Double 'hello' Literal.String.Double '"' Literal.String.Double ' ' Text '# Error, self is a receiver' Comment.Single '\n\n ' Text 'other' Name ' ' Text '=' Operator ' ' Text 'Person' Name '.' Operator 'new' Name ' ' Text '"' Literal.String.Double 'Other' Literal.String.Double '"' Literal.String.Double '\n ' Text 'other' Name '.' Operator 'say' Name ' ' Text '"' Literal.String.Double 'hello' Literal.String.Double '"' Literal.String.Double ' ' Text '# Error, other is a receiver' Comment.Single '\n ' Text 'end' Keyword '\n' Text 'end' Keyword '\n\n' Text 'class' Keyword ' ' Text 'Employee' Name.Class ' ' Text '<' Operator ' ' Text 'Person' Name '\n ' Text 'def' Keyword ' ' Text 'say_bye' Name.Function '\n ' Text 'say' Name ' ' Text '"' Literal.String.Double 'bye' Literal.String.Double '"' Literal.String.Double ' ' Text '# OK' Comment.Single '\n ' Text 'end' Keyword '\n' Text 'end' Keyword '\n\n' Text 'module' Keyword ' ' Text 'Namespace' Name.Namespace '\n ' Text 'class' Keyword ' ' Text 'Foo' Name.Class '\n ' Text 'protected' Keyword ' ' Text 'def' Keyword ' ' Text 'foo' Name.Function '\n ' Text 'puts' Name.Builtin ' ' Text '"' Literal.String.Double 'Hello' Literal.String.Double '"' Literal.String.Double '\n ' Text 'end' Keyword '\n ' Text 'end' Keyword '\n\n ' Text 'class' Keyword ' ' Text 'Bar' Name.Class '\n ' Text 'def' Keyword ' ' Text 'bar' Name.Function '\n ' Text '# Works, because Foo and Bar are under Namespace' Comment.Single '\n ' Text 'Foo' Name '.' Operator 'new' Name '.' Operator 'foo' Name '\n ' Text 'end' Keyword '\n ' Text 'end' Keyword '\n' Text 'end' Keyword '\n\n' Text 'Namespace' Name '::' Operator 'Bar' Name '.' Operator 'new' Name '.' Operator 'bar' Name '\n\n' Text 'class' Keyword ' ' Text 'Person' Name.Class '\n ' Text 'protected' Keyword ' ' Text 'def' Keyword ' ' Text 'self' Name.Class '.' Operator 'say' Name.Function '(' Punctuation 'message' Name ')' Punctuation '\n ' Text 'puts' Name.Builtin ' ' Text 'message' Name '\n ' Text 'end' Keyword '\n\n ' Text 'def' Keyword ' ' Text 'say_hello' Name.Function '\n ' Text 'Person' Name '.' Operator 'say' Name ' ' Text '"' Literal.String.Double 'hello' Literal.String.Double '"' Literal.String.Double '\n ' Text 'end' Keyword '\n' Text 'end' Keyword '\n\n' Text 'buffer' Name ' ' Text '=' Operator ' ' Text 'uninitialized' Keyword.Pseudo ' ' Text 'UInt8' Name '[' Operator '256' Literal.Number.Integer ']' Operator '\n\n' Text 'foo' Name ' ' Text '=' Operator ' ' Text 'rand' Name.Builtin '(' Punctuation '5' Literal.Number.Integer ')' Punctuation ' ' Text '>' Operator ' ' Text '1' Literal.Number.Integer ' ' Text '?' Operator ' ' Text '1' Literal.Number.Integer ' ' Text ':' Punctuation ' ' Text 'nil' Keyword.Constant '\n\n' Text 'foo' Name '.' Operator 'not_nil!' Name '.' Operator 'to_i' Name '\n' Text