Skip to content

Commit ee74fe9

Browse files
committed
Merge branch 'release/0.3.0'
2 parents f5c8c7a + fa5f2f5 commit ee74fe9

10 files changed

Lines changed: 185 additions & 222 deletions

File tree

code_breaker.gemspec

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,7 @@ Gem::Specification.new do |spec|
2727
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
2828
spec.require_paths = ['lib']
2929

30-
spec.add_dependency 'parser', '~> 2.2'
31-
spec.add_dependency 'activesupport', '~> 4'
30+
spec.add_dependency 'parser', '~> 2.3'
3231

3332
spec.add_development_dependency 'bundler', '~> 1.10'
3433
spec.add_development_dependency 'rake', '~> 10.0'

lib/code_breaker/parsable/assignments.rb

Lines changed: 37 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -1,63 +1,58 @@
1-
require 'active_support/concern'
2-
31
module CodeBreaker
42
module Parsable
53
module Assignments
6-
extend ActiveSupport::Concern
74
include Parsable::Node
85

9-
included do
10-
# local variable assignment
11-
alias_method :parse_lvasgn_node, :parse_as_hash
6+
# local variable assignment
7+
alias_method :parse_lvasgn_node, :parse_as_hash
128

13-
# instance variable assignment
14-
alias_method :parse_ivasgn_node, :parse_as_hash
9+
# instance variable assignment
10+
alias_method :parse_ivasgn_node, :parse_as_hash
1511

16-
# class variable assignment
17-
alias_method :parse_cvasgn_node, :parse_as_hash
12+
# class variable assignment
13+
alias_method :parse_cvasgn_node, :parse_as_hash
1814

19-
# global variable assignment
20-
alias_method :parse_gvasgn_node, :parse_as_hash
15+
# global variable assignment
16+
alias_method :parse_gvasgn_node, :parse_as_hash
2117

22-
# operation assignment
23-
alias_method :parse_op_asgn_node, :parse_as_hash
18+
# operation assignment
19+
alias_method :parse_op_asgn_node, :parse_as_hash
2420

25-
# or assignment
26-
alias_method :parse_or_asgn_node, :parse_as_hash
21+
# or assignment
22+
alias_method :parse_or_asgn_node, :parse_as_hash
2723

28-
# and assignment
29-
alias_method :parse_and_asgn_node, :parse_as_hash
24+
# and assignment
25+
alias_method :parse_and_asgn_node, :parse_as_hash
3026

31-
# multiple assignment
32-
def parse_masgn_node(node)
33-
lhs, rhs = parse_children(node)
34-
values = multiple_assignment_values(lhs, rhs)
27+
# multiple assignment
28+
def parse_masgn_node(node)
29+
lhs, rhs = parse_children(node)
30+
values = multiple_assignment_values(lhs, rhs)
3531

36-
{ node.type => { lhs => values } }
37-
end
32+
{ node.type => { lhs => values } }
33+
end
3834

39-
# multiple left hand side
40-
def parse_mlhs_node(node)
41-
parse_children(node).map(&:values).flatten
42-
end
35+
# multiple left hand side
36+
def parse_mlhs_node(node)
37+
parse_children(node).map(&:values).flatten
38+
end
4339

44-
# constant assignment
45-
def parse_casgn_node(node)
46-
name = node.children[1]
47-
children = node.children[2]
48-
value = children.nil? ? name : [name, parse(node.children[2])]
40+
# constant assignment
41+
def parse_casgn_node(node)
42+
name = node.children[1]
43+
children = node.children[2]
44+
value = children.nil? ? name : [name, parse(node.children[2])]
4945

50-
{ node.type => value }
51-
end
46+
{ node.type => value }
47+
end
5248

53-
private
49+
private
5450

55-
def multiple_assignment_values(lhs, rhs)
56-
if rhs.is_a?(Hash) && rhs.key?(:array)
57-
rhs[:array]
58-
else
59-
[rhs] + (1...lhs.count).map { NilClass }
60-
end
51+
def multiple_assignment_values(lhs, rhs)
52+
if rhs.is_a?(Hash) && rhs.key?(:array)
53+
rhs[:array]
54+
else
55+
[rhs] + (1...lhs.count).map { NilClass }
6156
end
6257
end
6358
end
Lines changed: 42 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -1,69 +1,64 @@
1-
require 'active_support/concern'
2-
31
module CodeBreaker
42
module Parsable
53
module DataTypes
6-
extend ActiveSupport::Concern
74
include Parsable::Node
85

9-
included do
10-
def parse_nil_node(node)
11-
NilClass
12-
end
6+
def parse_nil_node(node)
7+
NilClass
8+
end
139

14-
def parse_true_node(node)
15-
TrueClass
16-
end
10+
def parse_true_node(node)
11+
TrueClass
12+
end
1713

18-
def parse_false_node(node)
19-
FalseClass
20-
end
14+
def parse_false_node(node)
15+
FalseClass
16+
end
2117

22-
def parse_str_node(node)
23-
String
24-
end
18+
def parse_str_node(node)
19+
String
20+
end
2521

26-
# interpolated executed string
27-
def parse_xstr_node(node)
28-
{ node.type => parse_children(node).first }
29-
end
22+
# interpolated executed string
23+
def parse_xstr_node(node)
24+
{ node.type => parse_children(node).first }
25+
end
3026

31-
# interpolated string
32-
def parse_dstr_node(node)
33-
values = parse_as_hash(node)[node.type].map do |value|
34-
if value.is_a?(Array)
35-
value.flatten(1)
36-
else
37-
value
38-
end
27+
# interpolated string
28+
def parse_dstr_node(node)
29+
values = parse_as_hash(node)[node.type].map do |value|
30+
if value.is_a?(Array)
31+
value.flatten(1)
32+
else
33+
value
3934
end
40-
41-
{ node.type => values }
4235
end
4336

44-
def parse_sym_node(node)
45-
Symbol
46-
end
37+
{ node.type => values }
38+
end
4739

48-
def parse_float_node(node)
49-
Float
50-
end
40+
def parse_sym_node(node)
41+
Symbol
42+
end
5143

52-
def parse_regexp_node(node)
53-
Regexp
54-
end
44+
def parse_float_node(node)
45+
Float
46+
end
5547

56-
def parse_int_node(node)
57-
node.children[0].class
58-
end
48+
def parse_regexp_node(node)
49+
Regexp
50+
end
5951

60-
def parse_pair_node(node)
61-
{ parse(node.children[0]) => parse(node.children[1]) }
62-
end
52+
def parse_int_node(node)
53+
node.children[0].class
54+
end
6355

64-
alias_method :parse_hash_node, :parse_as_hash
65-
alias_method :parse_array_node, :parse_as_hash
56+
def parse_pair_node(node)
57+
{ parse(node.children[0]) => parse(node.children[1]) }
6658
end
59+
60+
alias_method :parse_hash_node, :parse_as_hash
61+
alias_method :parse_array_node, :parse_as_hash
6762
end
6863
end
6964
end

lib/code_breaker/parsable/keywords.rb

Lines changed: 65 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -1,99 +1,94 @@
1-
require 'active_support/concern'
2-
31
module CodeBreaker
42
module Parsable
53
module Keywords
6-
extend ActiveSupport::Concern
74
include Parsable::Node
85

9-
included do
10-
alias_method :parse_or_node, :parse_as_hash
11-
alias_method :parse_and_node, :parse_as_hash
12-
alias_method :parse_def_node, :parse_as_hash
13-
alias_method :parse_yield_node, :parse_as_hash
14-
alias_method :parse_rescue_node, :parse_as_hash
15-
alias_method :parse_resbody_node, :parse_as_hash
6+
alias_method :parse_or_node, :parse_as_hash
7+
alias_method :parse_and_node, :parse_as_hash
8+
alias_method :parse_def_node, :parse_as_hash
9+
alias_method :parse_yield_node, :parse_as_hash
10+
alias_method :parse_rescue_node, :parse_as_hash
11+
alias_method :parse_resbody_node, :parse_as_hash
1612

17-
alias_method :parse_break_node, :parse_as_node_type
18-
alias_method :parse_next_node, :parse_as_node_type
19-
alias_method :parse_retry_node, :parse_as_node_type
20-
alias_method :parse_self_node, :parse_as_node_type
13+
alias_method :parse_break_node, :parse_as_node_type
14+
alias_method :parse_next_node, :parse_as_node_type
15+
alias_method :parse_retry_node, :parse_as_node_type
16+
alias_method :parse_self_node, :parse_as_node_type
2117

22-
def parse_loop_node(node)
23-
condition = node.children[0]
24-
body = node.children[1]
18+
def parse_loop_node(node)
19+
condition = node.children[0]
20+
body = node.children[1]
2521

26-
{ node.type => parse(condition), do: parse(body) }
27-
end
22+
{ node.type => parse(condition), do: parse(body) }
23+
end
2824

29-
alias_method :parse_while_node, :parse_loop_node
30-
alias_method :parse_until_node, :parse_loop_node
25+
alias_method :parse_while_node, :parse_loop_node
26+
alias_method :parse_until_node, :parse_loop_node
3127

32-
def parse_for_node(node)
33-
variable = node.children[0]
34-
range = node.children[1]
35-
body = node.children[2]
28+
def parse_for_node(node)
29+
variable = node.children[0]
30+
range = node.children[1]
31+
body = node.children[2]
3632

37-
{ node.type => parse(variable), in: parse(range), do: parse(body) }
38-
end
33+
{ node.type => parse(variable), in: parse(range), do: parse(body) }
34+
end
3935

40-
def parse_if_node(node)
41-
condition = node.children[0]
42-
if_body = node.children[1]
43-
else_body = node.children[2]
36+
def parse_if_node(node)
37+
condition = node.children[0]
38+
if_body = node.children[1]
39+
else_body = node.children[2]
4440

45-
clause = { node.type => parse(condition), then: parse(if_body) }
46-
clause[:else] = parse(else_body) if else_body
41+
clause = { node.type => parse(condition), then: parse(if_body) }
42+
clause[:else] = parse(else_body) if else_body
4743

48-
clause
49-
end
44+
clause
45+
end
5046

51-
def parse_module_node(node)
52-
name = parse(node.children[0])
53-
body = node.children[1].nil? ? nil : parse(node.children[1])
54-
value = body ? [name, body] : [name]
47+
def parse_module_node(node)
48+
name = parse(node.children[0])
49+
body = node.children[1].nil? ? nil : parse(node.children[1])
50+
value = body ? [name, body] : [name]
5551

56-
{ node.type => value }
57-
end
52+
{ node.type => value }
53+
end
5854

59-
def parse_return_node(node)
60-
children = parse_children(node)
61-
values = children.length == 1 ? children[0] : children
55+
def parse_return_node(node)
56+
children = parse_children(node)
57+
values = children.length == 1 ? children[0] : children
6258

63-
{ node.type => values }
64-
end
59+
{ node.type => values }
60+
end
6561

66-
def parse_kwbegin_node(node)
67-
rescue_given = node.children.first.type == :rescue
62+
def parse_kwbegin_node(node)
63+
rescue_given = node.children.first.type == :rescue
6864

69-
if rescue_given
70-
rescue_part = parse(node.children.first)[:rescue]
65+
if rescue_given
66+
rescue_part = parse(node.children.first)[:rescue]
7167

72-
{
73-
begin: rescue_part.first,
74-
rescue: rescue_part.last[:resbody].first
75-
}
76-
else
77-
{ begin: parse(node.children.last) }
78-
end
68+
{
69+
begin: rescue_part.first,
70+
rescue: rescue_part.last[:resbody].first
71+
}
72+
else
73+
{ begin: parse(node.children.last) }
7974
end
75+
end
8076

81-
def parse_case_node(node)
82-
case_part = parse(node.children.first)
83-
when_parts = node.children[1...-1].map { |child| parse(child) }
84-
else_part = parse(node.children.last)
77+
def parse_case_node(node)
78+
case_part = parse(node.children.first)
79+
when_parts = node.children[1...-1].map { |child| parse(child) }
80+
else_part = parse(node.children.last)
8581

86-
statement = { case: when_parts.unshift(case_part) }
87-
statement[:case] << { else: else_part } if else_part
88-
statement
89-
end
82+
statement = { case: when_parts.unshift(case_part) }
83+
statement[:case] << { else: else_part } if else_part
84+
statement
85+
end
9086

91-
def parse_when_node(node)
92-
when_part = parse(node.children[0])
93-
then_part = parse(node.children[1])
87+
def parse_when_node(node)
88+
when_part = parse(node.children[0])
89+
then_part = parse(node.children[1])
9490

95-
{ when: when_part, then: then_part }
96-
end
91+
{ when: when_part, then: then_part }
9792
end
9893
end
9994
end

0 commit comments

Comments
 (0)