clean_ripper 0.0.0
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/lib/clean_ripper.rb +8 -0
- data/lib/clean_sexp_builder.rb +196 -0
- data/test/clean_ripper_test.rb +418 -0
- metadata +49 -0
data/lib/clean_ripper.rb
ADDED
@@ -0,0 +1,196 @@
|
|
1
|
+
|
2
|
+
require 'ripper'
|
3
|
+
|
4
|
+
class Ripper
|
5
|
+
class CleanSexpBuilder < SexpBuilder
|
6
|
+
|
7
|
+
def initialize(source)
|
8
|
+
@source = source.split("\n")
|
9
|
+
super
|
10
|
+
end
|
11
|
+
|
12
|
+
def on_program(*args)
|
13
|
+
[:program] + args.first
|
14
|
+
end
|
15
|
+
|
16
|
+
def on_void_stmt(*args)
|
17
|
+
nil
|
18
|
+
end
|
19
|
+
|
20
|
+
def on_stmts_new(*args)
|
21
|
+
nil
|
22
|
+
end
|
23
|
+
|
24
|
+
def on_mrhs_new(*args)
|
25
|
+
nil
|
26
|
+
end
|
27
|
+
|
28
|
+
def on_stmts_add(*args)
|
29
|
+
args.first ? args.first + [args.last] : [args.last]
|
30
|
+
end
|
31
|
+
|
32
|
+
def on_mrhs_add_star(*args)
|
33
|
+
[:splat, args.last]
|
34
|
+
end
|
35
|
+
|
36
|
+
def on_args_add_star(*args)
|
37
|
+
[:splat, args.last]
|
38
|
+
end
|
39
|
+
|
40
|
+
def on_int(*args)
|
41
|
+
[:lit, eval(args.first)]
|
42
|
+
end
|
43
|
+
|
44
|
+
def on_float(*args)
|
45
|
+
[:lit, eval(args.first)]
|
46
|
+
end
|
47
|
+
|
48
|
+
def on_CHAR(*args)
|
49
|
+
[:lit, eval(args.first)]
|
50
|
+
end
|
51
|
+
|
52
|
+
def on_var_field(*args)
|
53
|
+
var = args.first
|
54
|
+
var[0] = :lvar if var.first == :ident
|
55
|
+
var
|
56
|
+
end
|
57
|
+
|
58
|
+
def on_var_ref(*args)
|
59
|
+
var = args.first
|
60
|
+
var[0] = :ident if var.first == :ident
|
61
|
+
var
|
62
|
+
end
|
63
|
+
|
64
|
+
def on_gvar(*args)
|
65
|
+
[:gvar, args.first.to_sym]
|
66
|
+
end
|
67
|
+
|
68
|
+
def on_cvar(*args)
|
69
|
+
[:cvar, args.first.to_sym]
|
70
|
+
end
|
71
|
+
|
72
|
+
def on_ivar(*args)
|
73
|
+
[:ivar, args.first.to_sym]
|
74
|
+
end
|
75
|
+
|
76
|
+
def on_ident(*args)
|
77
|
+
[:ident, args.first.to_sym]
|
78
|
+
end
|
79
|
+
|
80
|
+
def on_opassign(*args)
|
81
|
+
[:assign, args.first, [:binary, args.first, args[1][1][0..-2].to_sym, args.last]]
|
82
|
+
end
|
83
|
+
|
84
|
+
def on_method_add_arg(*args)
|
85
|
+
[:call, args.first[1][1], (args[1][1] if args[1]), nil]
|
86
|
+
end
|
87
|
+
|
88
|
+
def on_args_add_block(*args)
|
89
|
+
[:block] + args.first
|
90
|
+
end
|
91
|
+
|
92
|
+
def on_args_new(*args)
|
93
|
+
nil
|
94
|
+
end
|
95
|
+
|
96
|
+
def on_args_add(*args)
|
97
|
+
args.first ? args.first + [args.last] : [args.last]
|
98
|
+
end
|
99
|
+
|
100
|
+
def on_method_add_block(*args)
|
101
|
+
brace_block = args[1]
|
102
|
+
brace_block[2].unshift(:block)
|
103
|
+
brace_block[2] = nil if brace_block[2].compact.size == 1
|
104
|
+
args.first[0..2] << brace_block
|
105
|
+
end
|
106
|
+
|
107
|
+
def on_block_var(*args)
|
108
|
+
[:block] + args.first
|
109
|
+
end
|
110
|
+
|
111
|
+
def on_params(*args)
|
112
|
+
params = []
|
113
|
+
args.first.each do |p|
|
114
|
+
p[0] = :lvar if p.first == :ident
|
115
|
+
params << [:param, p, nil]
|
116
|
+
end if args.first
|
117
|
+
args[1].each do |p|
|
118
|
+
p.first[0] = :lvar if p.first.first == :ident
|
119
|
+
p[1] = [p[1]] if Symbol === p[1].first
|
120
|
+
params << [:param, p.first, [:block, *p[1]]]
|
121
|
+
end if args[1]
|
122
|
+
params << args[2] if args[2]
|
123
|
+
params
|
124
|
+
end
|
125
|
+
|
126
|
+
def on_rest_param(*args)
|
127
|
+
args.first[0] = :lvar if args.first.first == :ident
|
128
|
+
[:rest_param, args.first]
|
129
|
+
end
|
130
|
+
|
131
|
+
def on_param_error(*args)
|
132
|
+
args.first
|
133
|
+
end
|
134
|
+
|
135
|
+
def on_paren(*args)
|
136
|
+
l = args.first
|
137
|
+
l.size == 1 ? l.first : [:block] + l
|
138
|
+
end
|
139
|
+
|
140
|
+
def on_kw(*args)
|
141
|
+
[args.first.to_sym]
|
142
|
+
end
|
143
|
+
|
144
|
+
def on_do_block(*args)
|
145
|
+
[:brace_block] + args
|
146
|
+
end
|
147
|
+
|
148
|
+
def on_if_mod(*args)
|
149
|
+
[:if] + args + [nil]
|
150
|
+
end
|
151
|
+
|
152
|
+
def on_if(*args)
|
153
|
+
args[0] = [args.first] if Symbol === args.first.first
|
154
|
+
[:if] << [:block] + args.first << ([:block, *args[1]] if args[1].first) << ([:block, *args[2][1][1..-1]] if args[2])
|
155
|
+
end
|
156
|
+
|
157
|
+
def on_unless(*args)
|
158
|
+
args[0] = [args.first] if Symbol === args.first.first
|
159
|
+
[:if] << [:block] + args.first << ([:block, *args[2][1][1..-1]] if args[2]) << ([:block, *args[1]] if args[1].first)
|
160
|
+
end
|
161
|
+
|
162
|
+
def on_array(*args)
|
163
|
+
el = args.first || []
|
164
|
+
[:array] + ((el.size > 0 and Symbol === el.first) ? [el] : el)
|
165
|
+
end
|
166
|
+
|
167
|
+
def on_string_add(*args)
|
168
|
+
args.first ? args.first + [args.last] : [args.last]
|
169
|
+
end
|
170
|
+
|
171
|
+
def on_qwords_add(*args)
|
172
|
+
args.first ? args.first + [args.last] : [args.last]
|
173
|
+
end
|
174
|
+
|
175
|
+
def on_string_content(*args)
|
176
|
+
nil
|
177
|
+
end
|
178
|
+
|
179
|
+
def on_string_literal(*args)
|
180
|
+
[:string, *(args.first || []).compact]
|
181
|
+
end
|
182
|
+
|
183
|
+
def on_tstring_content(*args)
|
184
|
+
str = "\""+args.first+"\""
|
185
|
+
if @source[lineno-1][column-1, 1] == "'"
|
186
|
+
str[0] = str[-1] = "'"
|
187
|
+
end
|
188
|
+
[:str, eval(str)]
|
189
|
+
end
|
190
|
+
|
191
|
+
def on_string_embexpr(*args)
|
192
|
+
[:block] + args.first if args.first.first
|
193
|
+
end
|
194
|
+
|
195
|
+
end
|
196
|
+
end
|
@@ -0,0 +1,418 @@
|
|
1
|
+
|
2
|
+
require 'test/unit'
|
3
|
+
require '../lib/clean_ripper'
|
4
|
+
|
5
|
+
class CleanRipperTest < Test::Unit::TestCase
|
6
|
+
|
7
|
+
def test_001
|
8
|
+
code = <<-END
|
9
|
+
(12 + 65) * 3
|
10
|
+
END
|
11
|
+
|
12
|
+
# CleanRipper output
|
13
|
+
clean_ripper = [:program,
|
14
|
+
[:binary,
|
15
|
+
[:binary,
|
16
|
+
[:lit, 12],
|
17
|
+
:+,
|
18
|
+
[:lit, 65]
|
19
|
+
],
|
20
|
+
:*,
|
21
|
+
[:lit, 3]
|
22
|
+
]
|
23
|
+
]
|
24
|
+
|
25
|
+
# Ripper output
|
26
|
+
ripper = [:program,
|
27
|
+
[:stmts_add,
|
28
|
+
[:stmts_new],
|
29
|
+
[:binary,
|
30
|
+
[:paren,
|
31
|
+
[:stmts_add,
|
32
|
+
[:stmts_new],
|
33
|
+
[:binary,
|
34
|
+
[:@int, "12", [1, 5]],
|
35
|
+
:+,
|
36
|
+
[:@int, "65", [1, 10]]
|
37
|
+
]
|
38
|
+
]
|
39
|
+
],
|
40
|
+
:*,
|
41
|
+
[:@int, "3", [1, 16]]
|
42
|
+
]
|
43
|
+
]
|
44
|
+
]
|
45
|
+
|
46
|
+
assert_equal(clean_ripper, CleanRipper.parse(code))
|
47
|
+
assert_equal(ripper, Ripper::SexpBuilder.new(code).parse)
|
48
|
+
end
|
49
|
+
def test_002
|
50
|
+
code = <<-END
|
51
|
+
--2
|
52
|
+
END
|
53
|
+
|
54
|
+
# CleanRipper output
|
55
|
+
clean_ripper = [:program,
|
56
|
+
[:unary,
|
57
|
+
:-@,
|
58
|
+
[:unary, :-@, [:lit, 2]]
|
59
|
+
]
|
60
|
+
]
|
61
|
+
|
62
|
+
# Ripper output
|
63
|
+
ripper = [:program,
|
64
|
+
[:stmts_add,
|
65
|
+
[:stmts_new],
|
66
|
+
[:unary,
|
67
|
+
:-@,
|
68
|
+
[:unary,
|
69
|
+
:-@,
|
70
|
+
[:@int, "2", [1, 6]]
|
71
|
+
]
|
72
|
+
]
|
73
|
+
]
|
74
|
+
]
|
75
|
+
|
76
|
+
assert_equal(clean_ripper, CleanRipper.parse(code))
|
77
|
+
assert_equal(ripper, Ripper::SexpBuilder.new(code).parse)
|
78
|
+
end
|
79
|
+
def test_003
|
80
|
+
code = <<-END
|
81
|
+
-2**-3
|
82
|
+
END
|
83
|
+
|
84
|
+
# CleanRipper output
|
85
|
+
clean_ripper = [:program,
|
86
|
+
[:unary,
|
87
|
+
:-@,
|
88
|
+
[:binary,
|
89
|
+
[:lit, 2],
|
90
|
+
:**,
|
91
|
+
[:unary, :-@, [:lit, 3]]
|
92
|
+
]
|
93
|
+
]
|
94
|
+
]
|
95
|
+
|
96
|
+
# Ripper output
|
97
|
+
ripper = [:program,
|
98
|
+
[:stmts_add,
|
99
|
+
[:stmts_new],
|
100
|
+
[:unary,
|
101
|
+
:-@,
|
102
|
+
[:binary,
|
103
|
+
[:@int, "2", [1, 5]],
|
104
|
+
:**,
|
105
|
+
[:unary,
|
106
|
+
:-@,
|
107
|
+
[:@int, "3", [1, 9]]
|
108
|
+
]
|
109
|
+
]
|
110
|
+
]
|
111
|
+
]
|
112
|
+
]
|
113
|
+
|
114
|
+
assert_equal(clean_ripper, CleanRipper.parse(code))
|
115
|
+
assert_equal(ripper, Ripper::SexpBuilder.new(code).parse)
|
116
|
+
end
|
117
|
+
def test_004
|
118
|
+
code = <<-END
|
119
|
+
true ? 2 : 3 ? 4 : 5
|
120
|
+
END
|
121
|
+
|
122
|
+
# CleanRipper output
|
123
|
+
clean_ripper = [:program,
|
124
|
+
[:ifop,
|
125
|
+
[:true],
|
126
|
+
[:lit, 2],
|
127
|
+
[:ifop,
|
128
|
+
[:lit, 3],
|
129
|
+
[:lit, 4],
|
130
|
+
[:lit, 5]
|
131
|
+
]
|
132
|
+
]
|
133
|
+
]
|
134
|
+
|
135
|
+
# Ripper output
|
136
|
+
ripper = [:program,
|
137
|
+
[:stmts_add,
|
138
|
+
[:stmts_new],
|
139
|
+
[:ifop,
|
140
|
+
[:var_ref, [:@kw, "true", [1, 4]]],
|
141
|
+
[:@int, "2", [1, 11]],
|
142
|
+
[:ifop,
|
143
|
+
[:@int, "3", [1, 15]],
|
144
|
+
[:@int, "4", [1, 19]],
|
145
|
+
[:@int, "5", [1, 23]]
|
146
|
+
]
|
147
|
+
]
|
148
|
+
]
|
149
|
+
]
|
150
|
+
|
151
|
+
assert_equal(clean_ripper, CleanRipper.parse(code))
|
152
|
+
assert_equal(ripper, Ripper::SexpBuilder.new(code).parse)
|
153
|
+
end
|
154
|
+
def test_005
|
155
|
+
code = <<-END
|
156
|
+
a = oops rescue 10
|
157
|
+
END
|
158
|
+
|
159
|
+
# CleanRipper output
|
160
|
+
clean_ripper = [:program,
|
161
|
+
[:assign,
|
162
|
+
[:lvar, :a],
|
163
|
+
[:rescue_mod,
|
164
|
+
[:ident, :oops],
|
165
|
+
[:lit, 10]
|
166
|
+
]
|
167
|
+
]
|
168
|
+
]
|
169
|
+
|
170
|
+
# Ripper output
|
171
|
+
ripper = [:program,
|
172
|
+
[:stmts_add,
|
173
|
+
[:stmts_new],
|
174
|
+
[:assign,
|
175
|
+
[:var_field, [:@ident, "a", [1, 4]]],
|
176
|
+
[:rescue_mod,
|
177
|
+
[:var_ref, [:@ident, "oops", [1, 8]]],
|
178
|
+
[:@int, "10", [1, 20]]
|
179
|
+
]
|
180
|
+
]
|
181
|
+
]
|
182
|
+
]
|
183
|
+
|
184
|
+
assert_equal(clean_ripper, CleanRipper.parse(code))
|
185
|
+
assert_equal(ripper, Ripper::SexpBuilder.new(code).parse)
|
186
|
+
end
|
187
|
+
def test_006
|
188
|
+
code = <<-END
|
189
|
+
a = nil
|
190
|
+
b = 1 + 2
|
191
|
+
END
|
192
|
+
|
193
|
+
# CleanRipper output
|
194
|
+
clean_ripper = [:program,
|
195
|
+
[:assign,
|
196
|
+
[:lvar, :a],
|
197
|
+
[:nil]
|
198
|
+
],
|
199
|
+
[:assign,
|
200
|
+
[:lvar, :b],
|
201
|
+
[:binary, [:lit, 1], :+, [:lit, 2]]
|
202
|
+
]
|
203
|
+
]
|
204
|
+
|
205
|
+
# Ripper output
|
206
|
+
ripper = [:program,
|
207
|
+
[:stmts_add,
|
208
|
+
[:stmts_add,
|
209
|
+
[:stmts_new],
|
210
|
+
[:assign,
|
211
|
+
[:var_field, [:@ident, "a", [1, 4]]],
|
212
|
+
[:var_ref, [:@kw, "nil", [1, 8]]]]
|
213
|
+
],
|
214
|
+
[:assign,
|
215
|
+
[:var_field, [:@ident, "b", [2, 4]]],
|
216
|
+
[:binary, [:@int, "1", [2, 8]], :+, [:@int, "2", [2, 12]]]
|
217
|
+
]
|
218
|
+
]
|
219
|
+
]
|
220
|
+
|
221
|
+
assert_equal(clean_ripper, CleanRipper.parse(code))
|
222
|
+
assert_equal(ripper, Ripper::SexpBuilder.new(code).parse)
|
223
|
+
end
|
224
|
+
def test_007
|
225
|
+
code = <<-END
|
226
|
+
a = *()
|
227
|
+
b = *[1, 2, 3]
|
228
|
+
END
|
229
|
+
|
230
|
+
# CleanRipper output
|
231
|
+
clean_ripper = [:program,
|
232
|
+
[:assign,
|
233
|
+
[:lvar, :a],
|
234
|
+
[:splat, nil]
|
235
|
+
],
|
236
|
+
[:assign,
|
237
|
+
[:lvar, :b],
|
238
|
+
[:splat,
|
239
|
+
[:array, [:lit, 1], [:lit, 2], [:lit, 3]]
|
240
|
+
]
|
241
|
+
]
|
242
|
+
]
|
243
|
+
|
244
|
+
# Ripper output
|
245
|
+
ripper = [:program,
|
246
|
+
[:stmts_add,
|
247
|
+
[:stmts_add,
|
248
|
+
[:stmts_new],
|
249
|
+
[:assign,
|
250
|
+
[:var_field, [:@ident, "a", [1, 4]]],
|
251
|
+
[:mrhs_add_star,
|
252
|
+
[:mrhs_new],
|
253
|
+
[:paren,
|
254
|
+
[:stmts_add,
|
255
|
+
[:stmts_new],
|
256
|
+
[:void_stmt]
|
257
|
+
]
|
258
|
+
]
|
259
|
+
]
|
260
|
+
]
|
261
|
+
],
|
262
|
+
[:assign,
|
263
|
+
[:var_field, [:@ident, "b", [2, 4]]],
|
264
|
+
[:mrhs_add_star,
|
265
|
+
[:mrhs_new],
|
266
|
+
[:array,
|
267
|
+
[:args_add,
|
268
|
+
[:args_add,
|
269
|
+
[:args_add,
|
270
|
+
[:args_new],
|
271
|
+
[:@int, "1", [2, 10]]
|
272
|
+
],
|
273
|
+
[:@int, "2", [2, 13]]
|
274
|
+
],
|
275
|
+
[:@int, "3", [2, 16]]
|
276
|
+
]
|
277
|
+
]
|
278
|
+
]
|
279
|
+
]
|
280
|
+
]
|
281
|
+
]
|
282
|
+
|
283
|
+
assert_equal(clean_ripper, CleanRipper.parse(code))
|
284
|
+
assert_equal(ripper, Ripper::SexpBuilder.new(code).parse)
|
285
|
+
end
|
286
|
+
def test_008
|
287
|
+
code = <<-END
|
288
|
+
a = b = 2
|
289
|
+
a += 5
|
290
|
+
END
|
291
|
+
|
292
|
+
# CleanRipper output
|
293
|
+
clean_ripper = [:program,
|
294
|
+
[:assign,
|
295
|
+
[:lvar, :a],
|
296
|
+
[:assign, [:lvar, :b], [:lit, 2]]
|
297
|
+
],
|
298
|
+
[:assign,
|
299
|
+
[:lvar, :a],
|
300
|
+
[:binary, [:lvar, :a], :+, [:lit, 5]]
|
301
|
+
]
|
302
|
+
]
|
303
|
+
|
304
|
+
# Ripper output
|
305
|
+
ripper = [:program,
|
306
|
+
[:stmts_add,
|
307
|
+
[:stmts_add,
|
308
|
+
[:stmts_new],
|
309
|
+
[:assign,
|
310
|
+
[:var_field, [:@ident, "a", [1, 4]]],
|
311
|
+
[:assign,
|
312
|
+
[:var_field, [:@ident, "b", [1, 8]]],
|
313
|
+
[:@int, "2", [1, 12]]
|
314
|
+
]
|
315
|
+
]
|
316
|
+
],
|
317
|
+
[:opassign,
|
318
|
+
[:var_field, [:@ident, "a", [2, 4]]],
|
319
|
+
[:@op, "+=", [2, 6]],
|
320
|
+
[:@int, "5", [2, 9]]
|
321
|
+
]
|
322
|
+
]
|
323
|
+
]
|
324
|
+
|
325
|
+
assert_equal(clean_ripper, CleanRipper.parse(code))
|
326
|
+
assert_equal(ripper, Ripper::SexpBuilder.new(code).parse)
|
327
|
+
end
|
328
|
+
def test_009
|
329
|
+
code = <<-END
|
330
|
+
!!10
|
331
|
+
a || b and c
|
332
|
+
END
|
333
|
+
|
334
|
+
# CleanRipper output
|
335
|
+
clean_ripper = [:program,
|
336
|
+
[:unary,
|
337
|
+
:!,
|
338
|
+
[:unary, :!, [:lit, 10]]
|
339
|
+
],
|
340
|
+
[:binary,
|
341
|
+
[:binary, [:ident, :a], :"||", [:ident, :b]],
|
342
|
+
:and,
|
343
|
+
[:ident, :c]
|
344
|
+
]
|
345
|
+
]
|
346
|
+
|
347
|
+
# Ripper output
|
348
|
+
ripper = [:program,
|
349
|
+
[:stmts_add,
|
350
|
+
[:stmts_add,
|
351
|
+
[:stmts_new],
|
352
|
+
[:unary,
|
353
|
+
:!,
|
354
|
+
[:unary, :!, [:@int, "10", [1, 6]]]
|
355
|
+
]
|
356
|
+
],
|
357
|
+
[:binary,
|
358
|
+
[:binary,
|
359
|
+
[:var_ref, [:@ident, "a", [2, 4]]],
|
360
|
+
:"||",
|
361
|
+
[:var_ref, [:@ident, "b", [2, 9]]]],
|
362
|
+
:and,
|
363
|
+
[:var_ref, [:@ident, "c", [2, 15]]]
|
364
|
+
]
|
365
|
+
]
|
366
|
+
]
|
367
|
+
|
368
|
+
assert_equal(clean_ripper, CleanRipper.parse(code))
|
369
|
+
assert_equal(ripper, Ripper::SexpBuilder.new(code).parse)
|
370
|
+
end
|
371
|
+
def test_010
|
372
|
+
code = <<-END
|
373
|
+
if true
|
374
|
+
true while true or false
|
375
|
+
end
|
376
|
+
END
|
377
|
+
|
378
|
+
# CleanRipper output
|
379
|
+
clean_ripper = [:program,
|
380
|
+
[:if,
|
381
|
+
[:block, [:true]],
|
382
|
+
[:block,
|
383
|
+
[:while_mod,
|
384
|
+
[:binary, [:true], :or, [:false]],
|
385
|
+
[:true]
|
386
|
+
]
|
387
|
+
],
|
388
|
+
nil
|
389
|
+
]
|
390
|
+
]
|
391
|
+
|
392
|
+
# Ripper output
|
393
|
+
ripper = [:program,
|
394
|
+
[:stmts_add,
|
395
|
+
[:stmts_new],
|
396
|
+
[:if,
|
397
|
+
[:var_ref, [:@kw, "true", [1, 7]]],
|
398
|
+
[:stmts_add,
|
399
|
+
[:stmts_new],
|
400
|
+
[:while_mod,
|
401
|
+
[:binary,
|
402
|
+
[:var_ref, [:@kw, "true", [2, 17]]],
|
403
|
+
:or,
|
404
|
+
[:var_ref, [:@kw, "false", [2, 25]]]
|
405
|
+
],
|
406
|
+
[:var_ref, [:@kw, "true", [2, 6]]]
|
407
|
+
]
|
408
|
+
],
|
409
|
+
nil
|
410
|
+
]
|
411
|
+
]
|
412
|
+
]
|
413
|
+
|
414
|
+
assert_equal(clean_ripper, CleanRipper.parse(code))
|
415
|
+
assert_equal(ripper, Ripper::SexpBuilder.new(code).parse)
|
416
|
+
end
|
417
|
+
|
418
|
+
end
|
metadata
ADDED
@@ -0,0 +1,49 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: clean_ripper
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.0
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Guilherme Bernal
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2011-09-10 00:00:00.000000000Z
|
13
|
+
dependencies: []
|
14
|
+
description: Produces a clean output for Ripper, making the output tree usable and
|
15
|
+
redable.
|
16
|
+
email: lb-guilherme@live.com
|
17
|
+
executables: []
|
18
|
+
extensions: []
|
19
|
+
extra_rdoc_files: []
|
20
|
+
files:
|
21
|
+
- lib/clean_ripper.rb
|
22
|
+
- lib/clean_sexp_builder.rb
|
23
|
+
- test/clean_ripper_test.rb
|
24
|
+
homepage: https://github.com/LBg/CleanRipper
|
25
|
+
licenses: []
|
26
|
+
post_install_message:
|
27
|
+
rdoc_options: []
|
28
|
+
require_paths:
|
29
|
+
- lib
|
30
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
31
|
+
none: false
|
32
|
+
requirements:
|
33
|
+
- - ! '>='
|
34
|
+
- !ruby/object:Gem::Version
|
35
|
+
version: '0'
|
36
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
37
|
+
none: false
|
38
|
+
requirements:
|
39
|
+
- - ! '>='
|
40
|
+
- !ruby/object:Gem::Version
|
41
|
+
version: '0'
|
42
|
+
requirements: []
|
43
|
+
rubyforge_project:
|
44
|
+
rubygems_version: 1.8.10
|
45
|
+
signing_key:
|
46
|
+
specification_version: 3
|
47
|
+
summary: Produces a clean output for Ripper.
|
48
|
+
test_files:
|
49
|
+
- test/clean_ripper_test.rb
|