bat/tests/syntax-tests/source/Crystal/test.cr
2020-10-07 07:40:15 +02:00

117 lines
2.2 KiB
Crystal

# 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)