ripper2ruby 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/MIT-LICENSE +20 -0
- data/README.markdown +10 -0
- data/lib/core_ext/array/flush.rb +5 -0
- data/lib/core_ext/hash/delete_at.rb +5 -0
- data/lib/core_ext/object/meta_class.rb +5 -0
- data/lib/core_ext/object/try.rb +12 -0
- data/lib/erb/stripper.rb +48 -0
- data/lib/highlighters/ansi.rb +29 -0
- data/lib/ripper/event_log.rb +45 -0
- data/lib/ripper/ruby_builder.rb +168 -0
- data/lib/ripper/ruby_builder/buffer.rb +34 -0
- data/lib/ripper/ruby_builder/events/args.rb +40 -0
- data/lib/ripper/ruby_builder/events/array.rb +71 -0
- data/lib/ripper/ruby_builder/events/assignment.rb +55 -0
- data/lib/ripper/ruby_builder/events/block.rb +80 -0
- data/lib/ripper/ruby_builder/events/call.rb +123 -0
- data/lib/ripper/ruby_builder/events/case.rb +17 -0
- data/lib/ripper/ruby_builder/events/const.rb +47 -0
- data/lib/ripper/ruby_builder/events/for.rb +13 -0
- data/lib/ripper/ruby_builder/events/hash.rb +24 -0
- data/lib/ripper/ruby_builder/events/identifier.rb +41 -0
- data/lib/ripper/ruby_builder/events/if.rb +37 -0
- data/lib/ripper/ruby_builder/events/lexer.rb +159 -0
- data/lib/ripper/ruby_builder/events/literal.rb +47 -0
- data/lib/ripper/ruby_builder/events/method.rb +21 -0
- data/lib/ripper/ruby_builder/events/operator.rb +23 -0
- data/lib/ripper/ruby_builder/events/statements.rb +50 -0
- data/lib/ripper/ruby_builder/events/string.rb +117 -0
- data/lib/ripper/ruby_builder/events/symbol.rb +22 -0
- data/lib/ripper/ruby_builder/events/while.rb +27 -0
- data/lib/ripper/ruby_builder/queue.rb +33 -0
- data/lib/ripper/ruby_builder/stack.rb +125 -0
- data/lib/ripper/ruby_builder/token.rb +91 -0
- data/lib/ripper2ruby.rb +1 -0
- data/lib/ruby.rb +28 -0
- data/lib/ruby/aggregate.rb +71 -0
- data/lib/ruby/alternation/args.rb +25 -0
- data/lib/ruby/alternation/hash.rb +25 -0
- data/lib/ruby/alternation/list.rb +19 -0
- data/lib/ruby/args.rb +36 -0
- data/lib/ruby/array.rb +27 -0
- data/lib/ruby/assignment.rb +32 -0
- data/lib/ruby/assoc.rb +17 -0
- data/lib/ruby/block.rb +42 -0
- data/lib/ruby/call.rb +34 -0
- data/lib/ruby/case.rb +30 -0
- data/lib/ruby/const.rb +49 -0
- data/lib/ruby/for.rb +18 -0
- data/lib/ruby/hash.rb +14 -0
- data/lib/ruby/if.rb +35 -0
- data/lib/ruby/list.rb +40 -0
- data/lib/ruby/literal.rb +45 -0
- data/lib/ruby/method.rb +19 -0
- data/lib/ruby/node.rb +47 -0
- data/lib/ruby/node/composite.rb +68 -0
- data/lib/ruby/node/conversions.rb +66 -0
- data/lib/ruby/node/position.rb +35 -0
- data/lib/ruby/node/source.rb +29 -0
- data/lib/ruby/node/text.rb +121 -0
- data/lib/ruby/node/traversal.rb +82 -0
- data/lib/ruby/operator.rb +49 -0
- data/lib/ruby/params.rb +41 -0
- data/lib/ruby/statements.rb +45 -0
- data/lib/ruby/string.rb +40 -0
- data/lib/ruby/symbol.rb +27 -0
- data/lib/ruby/token.rb +51 -0
- data/lib/ruby/while.rb +32 -0
- data/test/all.rb +3 -0
- data/test/builder/stack_test.rb +67 -0
- data/test/builder/text_test.rb +118 -0
- data/test/context_test.rb +54 -0
- data/test/erb_stripper_test.rb +29 -0
- data/test/fixtures/all.rb.src +150 -0
- data/test/fixtures/source_1.rb +16 -0
- data/test/fixtures/source_2.rb +1 -0
- data/test/fixtures/stuff.rb +371 -0
- data/test/fixtures/template.html.erb +22 -0
- data/test/fixtures/tmp.rb +6 -0
- data/test/lib_test.rb +92 -0
- data/test/lib_test_helper.rb +103 -0
- data/test/libs.txt +227 -0
- data/test/nodes/args_test.rb +100 -0
- data/test/nodes/array_test.rb +141 -0
- data/test/nodes/assignment_test.rb +49 -0
- data/test/nodes/block_test.rb +125 -0
- data/test/nodes/call_test.rb +229 -0
- data/test/nodes/case_test.rb +68 -0
- data/test/nodes/comments_test.rb +25 -0
- data/test/nodes/const_test.rb +46 -0
- data/test/nodes/conversions_test.rb +9 -0
- data/test/nodes/for_test.rb +34 -0
- data/test/nodes/hash_test.rb +71 -0
- data/test/nodes/heredoc_test.rb +202 -0
- data/test/nodes/identifier_test.rb +51 -0
- data/test/nodes/if_test.rb +100 -0
- data/test/nodes/literals_test.rb +63 -0
- data/test/nodes/method_test.rb +92 -0
- data/test/nodes/namespaces_test.rb +65 -0
- data/test/nodes/node_test.rb +74 -0
- data/test/nodes/nodes_test.rb +23 -0
- data/test/nodes/operator_test.rb +241 -0
- data/test/nodes/separators_test.rb +97 -0
- data/test/nodes/statements_test.rb +70 -0
- data/test/nodes/string_test.rb +92 -0
- data/test/nodes/symbol_test.rb +57 -0
- data/test/nodes/unless_test.rb +42 -0
- data/test/nodes/until_test.rb +61 -0
- data/test/nodes/while_test.rb +71 -0
- data/test/test_helper.rb +51 -0
- data/test/traversal_test.rb +53 -0
- metadata +163 -0
data/lib/ruby/args.rb
ADDED
@@ -0,0 +1,36 @@
|
|
1
|
+
require 'ruby/aggregate'
|
2
|
+
require 'ruby/list'
|
3
|
+
require 'ruby/alternation/args'
|
4
|
+
|
5
|
+
module Ruby
|
6
|
+
class ArgsList < DelimitedList
|
7
|
+
include Alternation::ArgsList
|
8
|
+
|
9
|
+
def initialize(args = nil, ldelim = nil, rdelim = nil)
|
10
|
+
args = Array(args).map { |arg| arg.is_a?(Ruby::Arg) ? arg : Ruby::Arg.new(arg) }
|
11
|
+
super
|
12
|
+
end
|
13
|
+
|
14
|
+
def <<(arg)
|
15
|
+
arg = Ruby::Arg.new(arg) unless arg.is_a?(Ruby::Arg)
|
16
|
+
super
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
class Arg < DelimitedAggregate
|
21
|
+
child_accessor :arg
|
22
|
+
|
23
|
+
def initialize(arg, ldelim = nil)
|
24
|
+
self.arg = arg
|
25
|
+
super(ldelim)
|
26
|
+
end
|
27
|
+
|
28
|
+
def nodes
|
29
|
+
[ldelim, arg].compact
|
30
|
+
end
|
31
|
+
|
32
|
+
def method_missing(method, *args, &block)
|
33
|
+
arg.respond_to?(method) ? arg.send(method, *args, &block) : super
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
data/lib/ruby/array.rb
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'ruby/list'
|
2
|
+
|
3
|
+
module Ruby
|
4
|
+
class Array < DelimitedList
|
5
|
+
def value
|
6
|
+
elements.map { |element| element.value }
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
class Range < Aggregate
|
11
|
+
child_accessor :left, :operator, :right
|
12
|
+
|
13
|
+
def initialize(left, operator, right)
|
14
|
+
self.left = left
|
15
|
+
self.operator = operator
|
16
|
+
self.right = right
|
17
|
+
end
|
18
|
+
|
19
|
+
def value
|
20
|
+
operator.token == '..' ? (left.value..right.value) : (left.value...right.value)
|
21
|
+
end
|
22
|
+
|
23
|
+
def nodes
|
24
|
+
[left, operator, right]
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require 'ruby/node'
|
2
|
+
|
3
|
+
module Ruby
|
4
|
+
class Assignment < Aggregate
|
5
|
+
child_accessor :left, :right, :operator
|
6
|
+
|
7
|
+
def initialize(left, right, operator)
|
8
|
+
self.left = left
|
9
|
+
self.right = right
|
10
|
+
self.operator = operator
|
11
|
+
end
|
12
|
+
|
13
|
+
def nodes
|
14
|
+
[left, operator, right].compact
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
class MultiAssignment < DelimitedList
|
19
|
+
attr_accessor :kind
|
20
|
+
child_accessor :splat
|
21
|
+
|
22
|
+
def initialize(kind, elements = [], ldelim = nil, rdelim = nil, splat = nil)
|
23
|
+
self.kind = kind
|
24
|
+
self.splat = splat
|
25
|
+
super(elements, ldelim, rdelim)
|
26
|
+
end
|
27
|
+
|
28
|
+
def nodes
|
29
|
+
[ldelim, splat, elements, rdelim].flatten.compact
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
data/lib/ruby/assoc.rb
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'ruby/node'
|
2
|
+
|
3
|
+
module Ruby
|
4
|
+
class Assoc < Aggregate
|
5
|
+
child_accessor :key, :value, :operator
|
6
|
+
|
7
|
+
def initialize(key, value, operator)
|
8
|
+
self.key = key
|
9
|
+
self.value = value
|
10
|
+
self.operator = operator
|
11
|
+
end
|
12
|
+
|
13
|
+
def nodes
|
14
|
+
[key, operator, value].compact
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
data/lib/ruby/block.rb
ADDED
@@ -0,0 +1,42 @@
|
|
1
|
+
require 'ruby/statements'
|
2
|
+
|
3
|
+
module Ruby
|
4
|
+
class Block < Statements
|
5
|
+
child_accessor :params
|
6
|
+
|
7
|
+
def initialize(statements, params = nil, ldelim = nil, rdelim = nil)
|
8
|
+
self.params = params
|
9
|
+
super(statements, ldelim, rdelim)
|
10
|
+
end
|
11
|
+
|
12
|
+
def nodes
|
13
|
+
[ldelim, params, elements, rdelim].flatten.compact
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
class NamedBlock < Block
|
18
|
+
child_accessor :identifier
|
19
|
+
|
20
|
+
def initialize(identifier, statements, params = nil, ldelim = nil, rdelim = nil)
|
21
|
+
self.identifier = identifier
|
22
|
+
super(statements, params, ldelim, rdelim)
|
23
|
+
end
|
24
|
+
|
25
|
+
def nodes
|
26
|
+
[identifier, super].flatten.compact
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
class ChainedBlock < NamedBlock
|
31
|
+
child_accessor :blocks
|
32
|
+
|
33
|
+
def initialize(identifier, blocks, statements, params = nil, ldelim = nil, rdelim = nil)
|
34
|
+
self.blocks = Array(blocks) || []
|
35
|
+
super(identifier, statements, params, ldelim, rdelim)
|
36
|
+
end
|
37
|
+
|
38
|
+
def nodes
|
39
|
+
[identifier, params, ldelim, elements, blocks, rdelim].flatten.compact
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
data/lib/ruby/call.rb
ADDED
@@ -0,0 +1,34 @@
|
|
1
|
+
require 'ruby/args'
|
2
|
+
|
3
|
+
module Ruby
|
4
|
+
class Call < Aggregate
|
5
|
+
child_accessor :identifier, :separator, :target, :arguments, :block
|
6
|
+
|
7
|
+
def initialize(target, separator, identifier, arguments = nil, block = nil)
|
8
|
+
self.target = target
|
9
|
+
self.separator = separator
|
10
|
+
self.identifier = identifier
|
11
|
+
self.arguments = arguments
|
12
|
+
self.block = block
|
13
|
+
end
|
14
|
+
|
15
|
+
def token
|
16
|
+
identifier.token
|
17
|
+
end
|
18
|
+
|
19
|
+
def nodes
|
20
|
+
[target, separator, identifier, arguments, block].flatten.compact
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
class Alias < Call
|
25
|
+
def initialize(identifier, arguments)
|
26
|
+
self.identifier = identifier
|
27
|
+
self.arguments = arguments
|
28
|
+
end
|
29
|
+
|
30
|
+
def nodes
|
31
|
+
[identifier, arguments].flatten
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
data/lib/ruby/case.rb
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
require 'ruby/node'
|
2
|
+
|
3
|
+
module Ruby
|
4
|
+
class Case < NamedAggregate
|
5
|
+
child_accessor :expression, :block
|
6
|
+
|
7
|
+
def initialize(identifier, expression, block, rdelim)
|
8
|
+
self.expression = expression
|
9
|
+
self.block = block
|
10
|
+
super(identifier, nil, rdelim)
|
11
|
+
end
|
12
|
+
|
13
|
+
def nodes
|
14
|
+
[identifier, expression, block, rdelim].compact
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
class When < ChainedBlock
|
19
|
+
child_accessor :expression
|
20
|
+
|
21
|
+
def initialize(identifier, expression, statements, ldelim = nil, block = nil)
|
22
|
+
self.expression = expression
|
23
|
+
super(identifier, [block], statements, nil, ldelim)
|
24
|
+
end
|
25
|
+
|
26
|
+
def nodes
|
27
|
+
[identifier, expression, ldelim, elements, blocks, rdelim].flatten.compact
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
data/lib/ruby/const.rb
ADDED
@@ -0,0 +1,49 @@
|
|
1
|
+
require 'ruby/aggregate'
|
2
|
+
|
3
|
+
module Ruby
|
4
|
+
class Const < DelimitedAggregate
|
5
|
+
child_accessor :identifier, :namespace
|
6
|
+
|
7
|
+
def initialize(token = nil, position = nil, prolog = nil, ldelim = nil)
|
8
|
+
self.identifier = Ruby::Identifier.new(token, position, prolog)
|
9
|
+
super(ldelim)
|
10
|
+
end
|
11
|
+
|
12
|
+
def position(*)
|
13
|
+
super
|
14
|
+
end
|
15
|
+
|
16
|
+
def nodes
|
17
|
+
[namespace, ldelim, identifier].compact
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
class Module < DelimitedAggregate
|
22
|
+
child_accessor :const, :body
|
23
|
+
|
24
|
+
def initialize(const, body, ldelim, rdelim)
|
25
|
+
self.const = const
|
26
|
+
self.body = body
|
27
|
+
super(ldelim, rdelim)
|
28
|
+
end
|
29
|
+
|
30
|
+
def nodes
|
31
|
+
[ldelim, const, body, rdelim].compact
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
class Class < NamedAggregate
|
36
|
+
child_accessor :operator, :super_class, :body
|
37
|
+
|
38
|
+
def initialize(const, operator, super_class, body, ldelim, rdelim)
|
39
|
+
self.operator = operator
|
40
|
+
self.super_class = super_class
|
41
|
+
self.body = body
|
42
|
+
super(const, ldelim, rdelim)
|
43
|
+
end
|
44
|
+
|
45
|
+
def nodes
|
46
|
+
[ldelim, identifier, operator, super_class, body, rdelim].compact
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
data/lib/ruby/for.rb
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'ruby/statements'
|
2
|
+
|
3
|
+
module Ruby
|
4
|
+
class For < NamedBlock
|
5
|
+
child_accessor :variable, :operator, :range
|
6
|
+
|
7
|
+
def initialize(identifier, variable, operator, range, statements, ldelim = nil, rdelim = nil)
|
8
|
+
self.variable = variable
|
9
|
+
self.operator = operator
|
10
|
+
self.range = range
|
11
|
+
super(identifier, statements, nil, ldelim, rdelim)
|
12
|
+
end
|
13
|
+
|
14
|
+
def nodes
|
15
|
+
[identifier, variable, operator, range, ldelim, elements, rdelim].flatten.compact
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
data/lib/ruby/hash.rb
ADDED
data/lib/ruby/if.rb
ADDED
@@ -0,0 +1,35 @@
|
|
1
|
+
require 'ruby/node'
|
2
|
+
|
3
|
+
module Ruby
|
4
|
+
class If < ChainedBlock
|
5
|
+
child_accessor :expression, :else_block
|
6
|
+
|
7
|
+
def initialize(identifier, expression, statements = nil, ldelim = nil, rdelim = nil, else_block = nil)
|
8
|
+
self.expression = expression
|
9
|
+
super(identifier, [else_block], statements, nil, ldelim, rdelim)
|
10
|
+
end
|
11
|
+
|
12
|
+
def nodes
|
13
|
+
[identifier, expression, ldelim, elements, blocks, rdelim].flatten.compact
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
class Unless < If; end
|
18
|
+
class Else < NamedBlock; end
|
19
|
+
|
20
|
+
class IfMod < NamedBlock
|
21
|
+
child_accessor :expression
|
22
|
+
|
23
|
+
def initialize(identifier, expression, statements)
|
24
|
+
self.expression = expression
|
25
|
+
super(identifier, statements)
|
26
|
+
end
|
27
|
+
|
28
|
+
def nodes
|
29
|
+
[elements, identifier, expression].flatten.compact
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
class UnlessMod < IfMod; end
|
34
|
+
class RescueMod < IfMod; end
|
35
|
+
end
|
data/lib/ruby/list.rb
ADDED
@@ -0,0 +1,40 @@
|
|
1
|
+
require 'ruby/node'
|
2
|
+
require 'ruby/alternation/list'
|
3
|
+
|
4
|
+
module Ruby
|
5
|
+
class List < Aggregate
|
6
|
+
include Conversions::List
|
7
|
+
include Alternation::List
|
8
|
+
|
9
|
+
child_accessor :elements
|
10
|
+
|
11
|
+
def initialize(elements = nil)
|
12
|
+
self.elements = Array(elements)
|
13
|
+
end
|
14
|
+
|
15
|
+
def nodes
|
16
|
+
elements
|
17
|
+
end
|
18
|
+
|
19
|
+
def method_missing(method, *args, &block)
|
20
|
+
elements.respond_to?(method) ? elements.send(method, *args, &block) : super
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
class DelimitedList < List
|
25
|
+
child_accessor :ldelim, :rdelim
|
26
|
+
|
27
|
+
def initialize(elements = nil, ldelim = nil, rdelim = nil)
|
28
|
+
self.ldelim = ldelim
|
29
|
+
self.rdelim = rdelim
|
30
|
+
super(elements)
|
31
|
+
end
|
32
|
+
|
33
|
+
def nodes
|
34
|
+
([ldelim] + super + [rdelim]).flatten.compact
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
class Prolog < List
|
39
|
+
end
|
40
|
+
end
|
data/lib/ruby/literal.rb
ADDED
@@ -0,0 +1,45 @@
|
|
1
|
+
require 'ruby/token'
|
2
|
+
|
3
|
+
module Ruby
|
4
|
+
class Nil < Token
|
5
|
+
def value
|
6
|
+
nil
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
class True < Token
|
11
|
+
def value
|
12
|
+
true
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
class False < Token
|
17
|
+
def value
|
18
|
+
false
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
class Integer < Token
|
23
|
+
def value
|
24
|
+
token.to_i
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
class Float < Token
|
29
|
+
def value
|
30
|
+
token.to_f
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
class Char < Token
|
35
|
+
def value
|
36
|
+
token[1]
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
class Label < Token
|
41
|
+
def value
|
42
|
+
token.gsub(':').to_sym
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
data/lib/ruby/method.rb
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'ruby/node'
|
2
|
+
|
3
|
+
module Ruby
|
4
|
+
class Method < NamedAggregate
|
5
|
+
child_accessor :target, :separator, :params, :block # TODO rename block to body
|
6
|
+
|
7
|
+
def initialize(target, separator, identifier, params, block, ldelim, rdelim)
|
8
|
+
self.target = target
|
9
|
+
self.separator = separator
|
10
|
+
self.params = params
|
11
|
+
self.block = block
|
12
|
+
super(identifier, ldelim, rdelim)
|
13
|
+
end
|
14
|
+
|
15
|
+
def nodes
|
16
|
+
[ldelim, target, separator, identifier, params, block, rdelim].compact
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|