# Comments
not_comment # comment
=begin
comment
=end
  =begin
  not_comment
  =end
# Strings
'string'
"string"
%q(string)
%q[string]
%q{string}
%q<string>
%q|string|
%Q(string)
%Q[string]
%Q{string}
%Q<string>
%Q|string|
foo('string', 'string')
"unsupported\"string"
# Heredocs
if true
  DOC = foo(<<-DOC)
heredoc
  xxx
    xxx
  DOC
  # ^heredoc ends here
DOC
end
if true
  DOC = foo(<<DOC)
heredoc
  xxx
    xxx
  DOC
DOC
# ^heredoc ends here
end
# Symbols
:symbol
:'long symbol'
:"long symbol"
# Regular Expressions
/regex/xxx
%r(regex)xxx
%r[regex]xxx
%r{regex}xxx
%r<regex>xxx
%r|regex|xxx
foo(/regex/xxx, /regex/xxx)
@path.sub(/^#{@root}/, '')
/unsupported\/regex/
# Classes
class Test < Object
  attr_accessor :z
end
x = Test.method(1, 2)
x = Test::method(1, 2)
x = Test::CONSTANT
# Methods
def method(x, y)
  z = 3
end
def self.method(x, y)
  z = 3
end
# Sigils
$stderr.puts 3
@@foo = 3
@foo = 3
# Data Structures
[:value]
['value']
{:key=>'value'}
{:key => 'value'}
{'key' => 'value'}
{key: 'value'}
foo(:key => 'value')
foo(key: 'value')
# Classes, modules, etc.
module Foo
  CONSTANT = 'An \'escaped\' string'
  class Bar
    def self.something
    begin
      1 + 1
    rescue StandardError => e
      puts "Whoa buddy!"
    end
    class << self
      def something
        1 + 1
      end
    end
    def something
    end
  end
end
class MyClass < ::Foo::Bar
end
foo(::Foo::Bar.something)