ripper_ruby_parser 1.6.1 → 1.7.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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +8 -0
- data/README.md +4 -23
- data/Rakefile +12 -12
- data/lib/ripper_ruby_parser.rb +2 -2
- data/lib/ripper_ruby_parser/commenting_ripper_parser.rb +9 -9
- data/lib/ripper_ruby_parser/parser.rb +3 -3
- data/lib/ripper_ruby_parser/sexp_handlers.rb +9 -9
- data/lib/ripper_ruby_parser/sexp_handlers/assignment.rb +3 -9
- data/lib/ripper_ruby_parser/sexp_handlers/blocks.rb +19 -24
- data/lib/ripper_ruby_parser/sexp_handlers/literals.rb +14 -18
- data/lib/ripper_ruby_parser/sexp_handlers/methods.rb +3 -3
- data/lib/ripper_ruby_parser/sexp_processor.rb +4 -4
- data/lib/ripper_ruby_parser/unescape.rb +11 -11
- data/lib/ripper_ruby_parser/version.rb +1 -1
- data/test/end_to_end/comments_test.rb +10 -10
- data/test/end_to_end/comparison_test.rb +28 -28
- data/test/end_to_end/lib_comparison_test.rb +6 -6
- data/test/end_to_end/line_numbering_test.rb +10 -10
- data/test/end_to_end/samples_comparison_test.rb +5 -5
- data/test/end_to_end/test_comparison_test.rb +6 -6
- data/test/pt_testcase/pt_test.rb +7 -7
- data/test/ripper_ruby_parser/commenting_ripper_parser_test.rb +163 -169
- data/test/ripper_ruby_parser/parser_test.rb +338 -338
- data/test/ripper_ruby_parser/sexp_handlers/assignment_test.rb +475 -511
- data/test/ripper_ruby_parser/sexp_handlers/blocks_test.rb +582 -564
- data/test/ripper_ruby_parser/sexp_handlers/conditionals_test.rb +469 -469
- data/test/ripper_ruby_parser/sexp_handlers/literals_test.rb +713 -724
- data/test/ripper_ruby_parser/sexp_handlers/loops_test.rb +155 -155
- data/test/ripper_ruby_parser/sexp_handlers/method_calls_test.rb +181 -181
- data/test/ripper_ruby_parser/sexp_handlers/methods_test.rb +337 -352
- data/test/ripper_ruby_parser/sexp_handlers/operators_test.rb +298 -298
- data/test/ripper_ruby_parser/sexp_processor_test.rb +119 -119
- data/test/ripper_ruby_parser/version_test.rb +2 -2
- data/test/samples/lambdas.rb +5 -0
- data/test/samples/misc.rb +3 -0
- data/test/samples/strings.rb +7 -0
- data/test/test_helper.rb +8 -6
- metadata +12 -10
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require File.expand_path(
|
3
|
+
require File.expand_path("../test_helper.rb", File.dirname(__FILE__))
|
4
4
|
|
5
5
|
class TestProcessor < RipperRubyParser::SexpProcessor
|
6
6
|
def process_foo(exp)
|
@@ -24,280 +24,280 @@ describe RipperRubyParser::SexpProcessor do
|
|
24
24
|
TestProcessor.new
|
25
25
|
end
|
26
26
|
|
27
|
-
describe
|
28
|
-
describe
|
29
|
-
it
|
27
|
+
describe "#process" do
|
28
|
+
describe "for a :program sexp" do
|
29
|
+
it "strips off the outer :program node" do
|
30
30
|
sexp = s(:program, s(:stmts, s(:foo)))
|
31
31
|
result = processor.process sexp
|
32
|
-
result.must_equal s(:foo_p)
|
32
|
+
_(result).must_equal s(:foo_p)
|
33
33
|
end
|
34
34
|
|
35
|
-
it
|
35
|
+
it "transforms a multi-statement :program into a :block sexp" do
|
36
36
|
sexp = s(:program, s(:stmts, s(:foo), s(:bar)))
|
37
37
|
result = processor.process sexp
|
38
|
-
result.must_equal s(:block, s(:foo_p), s(:bar_p))
|
38
|
+
_(result).must_equal s(:block, s(:foo_p), s(:bar_p))
|
39
39
|
end
|
40
40
|
end
|
41
41
|
|
42
|
-
describe
|
43
|
-
it
|
42
|
+
describe "for a :string_literal sexp" do
|
43
|
+
it "transforms a simple sexp to :str" do
|
44
44
|
sexp = s(:string_literal,
|
45
45
|
s(:string_content,
|
46
|
-
s(:@tstring_content,
|
46
|
+
s(:@tstring_content, "foo", s(1, 1), '"')))
|
47
47
|
result = processor.process sexp
|
48
|
-
result.must_equal s(:str,
|
48
|
+
_(result).must_equal s(:str, "foo")
|
49
49
|
end
|
50
50
|
end
|
51
51
|
|
52
|
-
describe
|
53
|
-
it
|
54
|
-
sexp = s(:command, s(:@ident,
|
52
|
+
describe "for a :command sexp" do
|
53
|
+
it "transforms a sexp to a :call" do
|
54
|
+
sexp = s(:command, s(:@ident, "foo", s(1, 0)), s(:arglist, s(:foo)))
|
55
55
|
result = processor.process sexp
|
56
|
-
result.must_equal s(:call, nil, :foo, s(:foo_p))
|
56
|
+
_(result).must_equal s(:call, nil, :foo, s(:foo_p))
|
57
57
|
end
|
58
58
|
end
|
59
59
|
|
60
|
-
describe
|
61
|
-
it
|
62
|
-
sexp = s(:var_ref, s(:@ident,
|
60
|
+
describe "for a :var_ref sexp" do
|
61
|
+
it "transforms the sexp to a :lvar sexp" do
|
62
|
+
sexp = s(:var_ref, s(:@ident, "bar", s(1, 4)))
|
63
63
|
result = processor.process sexp
|
64
|
-
result.must_equal s(:lvar, :bar)
|
64
|
+
_(result).must_equal s(:lvar, :bar)
|
65
65
|
end
|
66
66
|
end
|
67
67
|
|
68
|
-
describe
|
69
|
-
it
|
70
|
-
sexp = s(:vcall, s(:@ident,
|
68
|
+
describe "for a :vcall sexp" do
|
69
|
+
it "transforms the sexp to a :call sexp" do
|
70
|
+
sexp = s(:vcall, s(:@ident, "bar", s(1, 4)))
|
71
71
|
result = processor.process sexp
|
72
|
-
result.must_equal s(:call, nil, :bar)
|
72
|
+
_(result).must_equal s(:call, nil, :bar)
|
73
73
|
end
|
74
74
|
end
|
75
75
|
|
76
|
-
describe
|
77
|
-
it
|
76
|
+
describe "for a :module sexp" do
|
77
|
+
it "does not create body elements for an empty definition" do
|
78
78
|
sexp = s(:module,
|
79
|
-
s(:const_ref, s(:@const,
|
79
|
+
s(:const_ref, s(:@const, "Foo", s(1, 13))),
|
80
80
|
s(:bodystmt, s(:stmts, s(:void_stmt, s(2, 3))), nil, nil, nil))
|
81
81
|
result = processor.process sexp
|
82
|
-
result.must_equal s(:module, :Foo)
|
82
|
+
_(result).must_equal s(:module, :Foo)
|
83
83
|
end
|
84
84
|
|
85
|
-
it
|
85
|
+
it "creates a single body element for a definition with one statement" do
|
86
86
|
sexp = s(:module,
|
87
|
-
s(:const_ref, s(:@const,
|
87
|
+
s(:const_ref, s(:@const, "Foo", s(1, 13))),
|
88
88
|
s(:bodystmt, s(:stmts, s(:foo)), nil, nil, nil))
|
89
89
|
result = processor.process sexp
|
90
|
-
result.must_equal s(:module, :Foo, s(:foo_p))
|
90
|
+
_(result).must_equal s(:module, :Foo, s(:foo_p))
|
91
91
|
end
|
92
92
|
|
93
|
-
it
|
93
|
+
it "creates multiple body elements for a definition with more than one statement" do
|
94
94
|
sexp = s(:module,
|
95
|
-
s(:const_ref, s(:@const,
|
95
|
+
s(:const_ref, s(:@const, "Foo", s(1, 13))),
|
96
96
|
s(:bodystmt, s(:stmts, s(:foo), s(:bar)), nil, nil, nil))
|
97
97
|
result = processor.process sexp
|
98
|
-
result.must_equal s(:module, :Foo, s(:foo_p), s(:bar_p))
|
98
|
+
_(result).must_equal s(:module, :Foo, s(:foo_p), s(:bar_p))
|
99
99
|
end
|
100
100
|
end
|
101
101
|
|
102
|
-
describe
|
103
|
-
it
|
102
|
+
describe "for a :class sexp" do
|
103
|
+
it "does not create body eleents for an empty definition" do
|
104
104
|
sexp = s(:class,
|
105
|
-
s(:const_ref, s(:@const,
|
105
|
+
s(:const_ref, s(:@const, "Foo", s(1, 13))), nil,
|
106
106
|
s(:bodystmt, s(:stmts, s(:void_stmt, s(2, 8))), nil, nil, nil))
|
107
107
|
result = processor.process sexp
|
108
|
-
result.must_equal s(:class, :Foo, nil)
|
108
|
+
_(result).must_equal s(:class, :Foo, nil)
|
109
109
|
end
|
110
110
|
|
111
|
-
it
|
111
|
+
it "creates a single body element for a definition with one statement" do
|
112
112
|
sexp = s(:class,
|
113
|
-
s(:const_ref, s(:@const,
|
113
|
+
s(:const_ref, s(:@const, "Foo", s(1, 13))), nil,
|
114
114
|
s(:bodystmt, s(:stmts, s(:foo)), nil, nil, nil))
|
115
115
|
result = processor.process sexp
|
116
|
-
result.must_equal s(:class, :Foo, nil, s(:foo_p))
|
116
|
+
_(result).must_equal s(:class, :Foo, nil, s(:foo_p))
|
117
117
|
end
|
118
118
|
|
119
|
-
it
|
119
|
+
it "creates multiple body elements for a definition with more than one statement" do
|
120
120
|
sexp = s(:class,
|
121
|
-
s(:const_ref, s(:@const,
|
121
|
+
s(:const_ref, s(:@const, "Foo", s(1, 13))), nil,
|
122
122
|
s(:bodystmt, s(:stmts, s(:foo), s(:bar)), nil, nil, nil))
|
123
123
|
result = processor.process sexp
|
124
|
-
result.must_equal s(:class, :Foo, nil, s(:foo_p), s(:bar_p))
|
124
|
+
_(result).must_equal s(:class, :Foo, nil, s(:foo_p), s(:bar_p))
|
125
125
|
end
|
126
126
|
|
127
|
-
it
|
127
|
+
it "passes on the given ancestor" do
|
128
128
|
sexp = s(:class,
|
129
|
-
s(:const_ref, s(:@const,
|
130
|
-
s(:var_ref, s(:@const,
|
129
|
+
s(:const_ref, s(:@const, "Foo", s(1, 13))),
|
130
|
+
s(:var_ref, s(:@const, "Bar", s(1, 12))),
|
131
131
|
s(:bodystmt, s(:stmts, s(:void_stmt, s(2, 7))), nil, nil, nil))
|
132
132
|
result = processor.process sexp
|
133
|
-
result.must_equal s(:class, :Foo, s(:const, :Bar))
|
133
|
+
_(result).must_equal s(:class, :Foo, s(:const, :Bar))
|
134
134
|
end
|
135
135
|
end
|
136
136
|
|
137
|
-
describe
|
138
|
-
it
|
137
|
+
describe "for a :bodystmt sexp" do
|
138
|
+
it "creates a :block sexp when multiple statements are present" do
|
139
139
|
sexp = s(:bodystmt, s(:stmts, s(:foo), s(:bar)), nil, nil, nil)
|
140
140
|
result = processor.process sexp
|
141
|
-
result.must_equal s(:block, s(:foo_p), s(:bar_p))
|
141
|
+
_(result).must_equal s(:block, s(:foo_p), s(:bar_p))
|
142
142
|
end
|
143
143
|
|
144
|
-
it
|
144
|
+
it "removes nested :void_stmt sexps" do
|
145
145
|
sexp = s(:bodystmt, s(:stmts, s(:void_stmt), s(:foo)), nil, nil, nil)
|
146
146
|
result = processor.process sexp
|
147
|
-
result.must_equal s(:foo_p)
|
147
|
+
_(result).must_equal s(:foo_p)
|
148
148
|
end
|
149
149
|
end
|
150
150
|
|
151
|
-
describe
|
152
|
-
it
|
151
|
+
describe "for a :def sexp" do
|
152
|
+
it "transforms the sexp for a basic function definition" do
|
153
153
|
sexp = s(:def,
|
154
|
-
s(:@ident,
|
154
|
+
s(:@ident, "foo", s(1, 4)),
|
155
155
|
s(:params, nil, nil, nil, nil, nil),
|
156
156
|
s(:bodystmt, s(:stmts, s(:void_stmt, s(2, 3))), nil, nil, nil))
|
157
157
|
result = processor.process sexp
|
158
|
-
result.must_equal s(:defn, :foo, s(:args), s(:nil))
|
158
|
+
_(result).must_equal s(:defn, :foo, s(:args), s(:nil))
|
159
159
|
end
|
160
160
|
end
|
161
161
|
|
162
|
-
describe
|
163
|
-
describe
|
164
|
-
it
|
165
|
-
sexp = s(:params, s(s(:@ident,
|
162
|
+
describe "for a :params sexp" do
|
163
|
+
describe "with a normal arguments" do
|
164
|
+
it "creates :lvar sexps" do
|
165
|
+
sexp = s(:params, s(s(:@ident, "bar", s(1, 8))), nil, nil, nil, nil)
|
166
166
|
result = processor.process sexp
|
167
|
-
result.must_equal s(:args, s(:lvar, :bar))
|
167
|
+
_(result).must_equal s(:args, s(:lvar, :bar))
|
168
168
|
end
|
169
169
|
end
|
170
170
|
|
171
|
-
describe
|
172
|
-
it
|
171
|
+
describe "with a ruby 2.4-style doublesplat argument" do
|
172
|
+
it "creates :lvar sexps" do
|
173
173
|
sexp = s(:params,
|
174
174
|
nil, nil, nil, nil, nil,
|
175
|
-
s(:@ident,
|
175
|
+
s(:@ident, "bar", s(1, 8)),
|
176
176
|
nil)
|
177
177
|
result = processor.process sexp
|
178
|
-
result.must_equal s(:args, s(:dsplat, s(:lvar, :bar)))
|
178
|
+
_(result).must_equal s(:args, s(:dsplat, s(:lvar, :bar)))
|
179
179
|
end
|
180
180
|
end
|
181
|
-
describe
|
182
|
-
it
|
181
|
+
describe "with a ruby 2.5-style kwrest argument" do
|
182
|
+
it "creates :lvar sexps" do
|
183
183
|
sexp = s(:params,
|
184
184
|
nil, nil, nil, nil, nil,
|
185
|
-
s(:kwrest_param, s(:@ident,
|
185
|
+
s(:kwrest_param, s(:@ident, "bar", s(1, 8))),
|
186
186
|
nil)
|
187
187
|
result = processor.process sexp
|
188
|
-
result.must_equal s(:args, s(:dsplat, s(:lvar, :bar)))
|
188
|
+
_(result).must_equal s(:args, s(:dsplat, s(:lvar, :bar)))
|
189
189
|
end
|
190
190
|
end
|
191
191
|
end
|
192
192
|
|
193
|
-
describe
|
194
|
-
it
|
193
|
+
describe "for an :assign sexp" do
|
194
|
+
it "creates a :lasgn sexp" do
|
195
195
|
sexp = s(:assign,
|
196
|
-
s(:var_field, s(:@ident,
|
197
|
-
s(:@int,
|
196
|
+
s(:var_field, s(:@ident, "a", s(1, 0))),
|
197
|
+
s(:@int, "1", s(1, 4)))
|
198
198
|
result = processor.process sexp
|
199
|
-
result.must_equal s(:lasgn, :a, s(:lit, 1))
|
199
|
+
_(result).must_equal s(:lasgn, :a, s(:lit, 1))
|
200
200
|
end
|
201
201
|
end
|
202
202
|
|
203
|
-
describe
|
204
|
-
it
|
203
|
+
describe "for a :binary sexp" do
|
204
|
+
it "creates a :call sexp" do
|
205
205
|
sexp = s(:binary, s(:bar), :==, s(:foo))
|
206
206
|
result = processor.process sexp
|
207
|
-
result.must_equal s(:call, s(:bar_p), :==, s(:foo_p))
|
207
|
+
_(result).must_equal s(:call, s(:bar_p), :==, s(:foo_p))
|
208
208
|
end
|
209
209
|
end
|
210
210
|
|
211
|
-
describe
|
212
|
-
it
|
211
|
+
describe "for a :method_add_block sexp" do
|
212
|
+
it "creates an :iter sexp" do
|
213
213
|
sexp = s(:method_add_block,
|
214
|
-
s(:call, s(:foo), :".", s(:@ident,
|
214
|
+
s(:call, s(:foo), :".", s(:@ident, "baz", s(1, 2))),
|
215
215
|
s(:brace_block, nil, s(:stmts, s(:bar))))
|
216
216
|
result = processor.process sexp
|
217
|
-
result.must_equal s(:iter,
|
218
|
-
|
219
|
-
|
217
|
+
_(result).must_equal s(:iter,
|
218
|
+
s(:call, s(:foo_p), :baz), 0,
|
219
|
+
s(:bar_p))
|
220
220
|
end
|
221
221
|
|
222
|
-
describe
|
223
|
-
it
|
222
|
+
describe "with a block parameter" do
|
223
|
+
it "creates an :iter sexp with an :args sexp for the block parameter" do
|
224
224
|
sexp = s(:method_add_block,
|
225
|
-
s(:call, s(:foo), :".", s(:@ident,
|
225
|
+
s(:call, s(:foo), :".", s(:@ident, "baz", s(1, 2))),
|
226
226
|
s(:brace_block,
|
227
227
|
s(:block_var,
|
228
|
-
s(:params, s(s(:@ident,
|
228
|
+
s(:params, s(s(:@ident, "i", s(1, 6))), nil, nil, nil, nil),
|
229
229
|
nil),
|
230
230
|
s(:stmts, s(:bar))))
|
231
231
|
result = processor.process sexp
|
232
|
-
result.must_equal s(:iter,
|
233
|
-
|
234
|
-
|
235
|
-
|
232
|
+
_(result).must_equal s(:iter,
|
233
|
+
s(:call, s(:foo_p), :baz),
|
234
|
+
s(:args, :i),
|
235
|
+
s(:bar_p))
|
236
236
|
end
|
237
237
|
end
|
238
238
|
end
|
239
239
|
|
240
|
-
describe
|
241
|
-
describe
|
242
|
-
it
|
240
|
+
describe "for an :if sexp" do
|
241
|
+
describe "with a single statement in the if body" do
|
242
|
+
it "uses the statement sexp as the body" do
|
243
243
|
sexp = s(:if, s(:foo), s(:stmts, s(:bar)), nil)
|
244
244
|
result = processor.process sexp
|
245
|
-
result.must_equal s(:if, s(:foo_p), s(:bar_p), nil)
|
245
|
+
_(result).must_equal s(:if, s(:foo_p), s(:bar_p), nil)
|
246
246
|
end
|
247
247
|
end
|
248
248
|
|
249
|
-
describe
|
250
|
-
it
|
249
|
+
describe "with multiple statements in the if body" do
|
250
|
+
it "uses a block containing the statement sexps as the body" do
|
251
251
|
sexp = s(:if, s(:foo), s(:stmts, s(:bar), s(:baz)), nil)
|
252
252
|
result = processor.process sexp
|
253
|
-
result.must_equal s(:if, s(:foo_p), s(:block, s(:bar_p), s(:baz_p)), nil)
|
253
|
+
_(result).must_equal s(:if, s(:foo_p), s(:block, s(:bar_p), s(:baz_p)), nil)
|
254
254
|
end
|
255
255
|
end
|
256
256
|
end
|
257
257
|
|
258
|
-
describe
|
259
|
-
it
|
258
|
+
describe "for an :array sexp" do
|
259
|
+
it "pulls up the element sexps" do
|
260
260
|
sexp = s(:array, s(:words, s(:foo), s(:bar), s(:baz)))
|
261
261
|
result = processor.process sexp
|
262
|
-
result.must_equal s(:array, s(:foo_p), s(:bar_p), s(:baz_p))
|
262
|
+
_(result).must_equal s(:array, s(:foo_p), s(:bar_p), s(:baz_p))
|
263
263
|
end
|
264
264
|
end
|
265
265
|
|
266
|
-
describe
|
267
|
-
it
|
266
|
+
describe "for a :const_path_ref sexp" do
|
267
|
+
it "returns a :colon2 sexp" do
|
268
268
|
sexp = s(:const_path_ref,
|
269
|
-
s(:var_ref, s(:@const,
|
270
|
-
s(:@const,
|
269
|
+
s(:var_ref, s(:@const, "Foo", s(1, 0))),
|
270
|
+
s(:@const, "Bar", s(1, 5)))
|
271
271
|
result = processor.process sexp
|
272
|
-
result.must_equal s(:colon2, s(:const, :Foo), :Bar)
|
272
|
+
_(result).must_equal s(:colon2, s(:const, :Foo), :Bar)
|
273
273
|
end
|
274
274
|
end
|
275
275
|
|
276
|
-
describe
|
277
|
-
it
|
276
|
+
describe "for a :when sexp" do
|
277
|
+
it "turns nested :when clauses into a list" do
|
278
278
|
sexp = s(:when, s(:args, s(:foo)), s(:stmts, s(:bar)),
|
279
279
|
s(:when, s(:args, s(:foo)), s(:stmts, s(:bar)),
|
280
280
|
s(:when, s(:args, s(:foo)), s(:stmts, s(:bar)), nil)))
|
281
281
|
result = processor.process sexp
|
282
|
-
result.must_equal s(s(:when, s(:array, s(:foo_p)), s(:bar_p)),
|
283
|
-
|
284
|
-
|
285
|
-
|
282
|
+
_(result).must_equal s(s(:when, s(:array, s(:foo_p)), s(:bar_p)),
|
283
|
+
s(:when, s(:array, s(:foo_p)), s(:bar_p)),
|
284
|
+
s(:when, s(:array, s(:foo_p)), s(:bar_p)),
|
285
|
+
nil)
|
286
286
|
end
|
287
287
|
end
|
288
288
|
end
|
289
289
|
|
290
|
-
describe
|
291
|
-
it
|
292
|
-
sexp = s(:lvar,
|
290
|
+
describe "#extract_node_symbol" do
|
291
|
+
it "processes an lvar sexp to a bare symbol" do
|
292
|
+
sexp = s(:lvar, "foo")
|
293
293
|
result = processor.send :extract_node_symbol, sexp
|
294
|
-
result.must_equal :foo
|
294
|
+
_(result).must_equal :foo
|
295
295
|
end
|
296
296
|
|
297
|
-
it
|
298
|
-
sexp = s(:const,
|
297
|
+
it "processes a const sexp to a bare symbol" do
|
298
|
+
sexp = s(:const, "Foo")
|
299
299
|
result = processor.send :extract_node_symbol, sexp
|
300
|
-
result.must_equal :Foo
|
300
|
+
_(result).must_equal :Foo
|
301
301
|
end
|
302
302
|
end
|
303
303
|
end
|
data/test/samples/misc.rb
CHANGED
data/test/samples/strings.rb
CHANGED
data/test/test_helper.rb
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require
|
3
|
+
require "simplecov"
|
4
4
|
SimpleCov.start do
|
5
|
-
add_filter
|
5
|
+
add_filter "/test/"
|
6
6
|
end
|
7
7
|
|
8
|
-
require
|
8
|
+
require "minitest/autorun"
|
9
9
|
|
10
|
-
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__),
|
10
|
+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), "..", "lib"))
|
11
11
|
|
12
|
-
require
|
12
|
+
require "ripper_ruby_parser"
|
13
13
|
|
14
14
|
module MiniTest
|
15
15
|
class Spec
|
@@ -40,7 +40,9 @@ module MiniTest
|
|
40
40
|
end
|
41
41
|
|
42
42
|
def fix_lines(exp)
|
43
|
-
|
43
|
+
if exp.sexp_type == :lit && exp.line == exp[1]
|
44
|
+
return s(:lit, :__LINE__).line(exp.line)
|
45
|
+
end
|
44
46
|
|
45
47
|
exp.sexp_body = exp.sexp_body.map do |sub_exp|
|
46
48
|
if sub_exp.is_a? Sexp
|