bat/tests/syntax-tests/highlighted/Crystal/test.cr

118 lines
19 KiB
Crystal
Raw Normal View History

2020-10-07 04:14:42 +02:00
# An example file to test Crystal syntax highlighting in bat
my_var : Nil = nil
my_var_also : Int32 = 42
my_other_var = 4.0
another_float = 4.0_f32
another_float_2 = 4e10
another_float_3 = -0.5
big_one = 1_000_000.111_111e-4
ternary = 1 > 2 : 3 ? 4
my_symbol = :ThisOne?
my_other_symbol = :No_That_One!
plus = :+
minus = :-
my_string : String = "this string right here, with an interpolated value of #{my_var_also}"
my_array : Array(Int32) = [1,2,3,4]
my_tuple : Tuple(Int32, Int32, Int32, Int32) = {1,2,3,4}
my_named_tuple : NamedTuple(one: Int32, two: Int32) = {"one": 1, "two": 2}
my_hash : Hash(String, Int32) = {"one" => 1, "two" => 2}
my_proc : Proc(Int32, Int32) = ->(x : Int32){ x * x}
my_other_proc : Proc(String) = ->{ "Wow, neat!" }
puts my_string
puts(my_string)

enum Colors
 Red
 Green
 Blue
end

class Greeter
 @instance_field = Colors::Red
 @@class_field = Colors::Green

 def initialize(@name = "world")
 end

 def greet 
 puts "Hello, #{@name}"
 end

 def render_greeting : String
 "Hello, #{@name}"
 end

 def with_greeting
 yield render_greeting
 end

 def is_color_default?
 @instance_field == @@class_field
 end

 def self.greet_static(name : String) : Unit
 puts "Hello, #{name}"
 end
end

greeter = Greeter.new("bat")
greeter.with_greeting do |greeting|
 puts greeting
end

puts <<-EOF
 this is a heredoc and it has a value in it of #{greeter.render_greeting}!
EOF

# This is a command:
`echo yay!`
$?.success?

my_color = Colors::Red

puts 
 case my_color
 when Colors::Red, .red?
 "Red"
 when Colors::Green, .green?
 "Green"
 when Colors::Blue, .blue?
 "Blue"
 else
 "I dunno, man. Chartreuse? Maroon?"
 end

class MyGenericClass(T)
 def initialize(@wrapped_value : T)
 end

 def get
 return @wrapped_value
 end
end


def do_stuff_with_range(r : Range(Int|String))
 return if r.empty?
 return unless !(r.empty?)
 r.each do |item|
 if /e/.match(item.to_s)
 puts "#{item} contains the letter e!"
 elsif item.to_s.empty?
 break
 else
 next # this is unnecessary, but whatever
 end
 end
end


macro print_range(range)
 {% for i in range %}
 puts {{i.id}}
 {% end %}
end

print_range(1..3)
print_range(1...3)