/
melbourne.rb
executable file
·52 lines (43 loc) · 1.25 KB
/
melbourne.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
require 'ext/melbourne'
require 'melbourne/parser'
require 'melbourne/processor'
module Melbourne
end
class String
# Creates an AST for a +String+ containing Ruby source code.
#
# @param [String] name+
# the name of the source (this is usuall the name of the file the code was read from); defaults to +(eval)+
# @param [Fixnum] line
# the starting line (if it's not 1 for some reason); defaults to +1+
#
# @example Converting Ruby code in a string to an AST
#
# 'class Test; end'.to_ast # => <AST::Class:0x1017800f8...
#
def to_ast(name = '(eval)', line = 1)
Melbourne::Parser.parse_string(self, name, line)
end
def to_sexp(name="(eval)", line=1)
to_ast(name, line).to_sexp
end
end
class File
# Creates an AST for Ruby source code read from a file.
#
# @param [String] name
# the name of the file to read the source code from.
# @param [Fixnum] line
# the starting line (if it's not 1 for some reason); defaults to +1+
#
# @example Converting Ruby code from a file to an AST
#
# File.to_ast('user.rb') # => <AST::Class:0x1017800f8...
#
def self.to_ast(name, line = 1)
Melbourne::Parser.parse_file(name, line)
end
def self.to_sexp(name, line=1)
to_ast(name, line).to_sexp
end
end