flay 2.13.3 → 2.14.4
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
- checksums.yaml.gz.sig +0 -0
- data/History.rdoc +35 -0
- data/Rakefile +5 -6
- data/lib/flay.rb +16 -12
- data/lib/flay_erb.rb +2 -1
- data/test/test_flay.rb +116 -28
- data.tar.gz.sig +0 -0
- metadata +51 -31
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: be4e30464c63609fc7e169633d341a4479794effbeab1cddae17ec61b7aa99c1
|
|
4
|
+
data.tar.gz: a5d0d7e99cba3df3c022c8524d215509f2fc7ccbec9c547332ef4a67d7473aaf
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 2686fd16226e533a3c6689025c14839ac7f446c12d572ab74799ad5db0a1c57fdf6d7674eb496e71ed3fbfcad3cc61b656db5bf7dde46fbfbb695babfcdbece5
|
|
7
|
+
data.tar.gz: 535c3aa7a9db9a4b98d1610e9c26dfea88a2afdc0782c030558e935f13f12442ec886df01c29afe723d70f44840a416b99f059947ee9e43a1a7f534e96c26293
|
checksums.yaml.gz.sig
CHANGED
|
Binary file
|
data/History.rdoc
CHANGED
|
@@ -1,3 +1,38 @@
|
|
|
1
|
+
=== 2.14.4 / 2026-04-14
|
|
2
|
+
|
|
3
|
+
* 2 bug fixes:
|
|
4
|
+
|
|
5
|
+
* Fix Sexp#[] to return empty sexp if indicies run off the end. (slbug)
|
|
6
|
+
* Loosened dependency on ruby2ruby to catch up and drop ruby_parser.
|
|
7
|
+
|
|
8
|
+
=== 2.14.3 / 2026-03-23
|
|
9
|
+
|
|
10
|
+
* 2 bug fixes:
|
|
11
|
+
|
|
12
|
+
* Fix Sexp#[] to return a Sexp to ensure process_fuzzy can sort sub-sexps.
|
|
13
|
+
* Make Sexp#[] return a single element if integer is used.
|
|
14
|
+
|
|
15
|
+
=== 2.14.2 / 2026-01-06
|
|
16
|
+
|
|
17
|
+
* 1 bug fix:
|
|
18
|
+
|
|
19
|
+
* Namespace NotRubyParser to avoid problems with bundler's horrid eager loading. (nateberkopec)
|
|
20
|
+
|
|
21
|
+
=== 2.14.1 / 2025-12-20
|
|
22
|
+
|
|
23
|
+
* 3 bug fixes:
|
|
24
|
+
|
|
25
|
+
* Bumped dependency to prism to get some upstreamed fixes.
|
|
26
|
+
* Loosened the minitest dependency to include MT6.
|
|
27
|
+
* Removed local copy of the upstreamed fixes.
|
|
28
|
+
|
|
29
|
+
=== 2.14.0 / 2025-12-11
|
|
30
|
+
|
|
31
|
+
* 2 minor enhancements:
|
|
32
|
+
|
|
33
|
+
* Bumped path_expander to 2.0.0.
|
|
34
|
+
* Switched to prism for ruby parsing. Use --legacy for RubyParser.
|
|
35
|
+
|
|
1
36
|
=== 2.13.3 / 2024-05-21
|
|
2
37
|
|
|
3
38
|
* 2 bug fixes:
|
data/Rakefile
CHANGED
|
@@ -4,14 +4,13 @@ require "rubygems"
|
|
|
4
4
|
require "hoe"
|
|
5
5
|
|
|
6
6
|
Hoe::add_include_dirs("../../sexp_processor/dev/lib",
|
|
7
|
-
"../../ruby_parser/dev/lib",
|
|
8
7
|
"../../ruby2ruby/dev/lib",
|
|
9
8
|
"../../ZenTest/dev/lib",
|
|
10
9
|
"../../path_expander/dev/lib",
|
|
11
10
|
"lib")
|
|
12
11
|
|
|
13
12
|
Hoe.plugin :seattlerb
|
|
14
|
-
Hoe.plugin :
|
|
13
|
+
Hoe.plugin :isolate_binaries
|
|
15
14
|
Hoe.plugin :rdoc
|
|
16
15
|
Hoe.plugin :bundler
|
|
17
16
|
|
|
@@ -20,12 +19,12 @@ Hoe.spec "flay" do
|
|
|
20
19
|
license "MIT"
|
|
21
20
|
|
|
22
21
|
dependency "sexp_processor", "~> 4.0"
|
|
23
|
-
dependency "
|
|
22
|
+
dependency "prism", "~> 1.7"
|
|
24
23
|
dependency "erubi", "~> 1.10"
|
|
25
|
-
dependency "path_expander", "~>
|
|
24
|
+
dependency "path_expander", "~> 2.0"
|
|
26
25
|
|
|
27
|
-
dependency "minitest", "
|
|
28
|
-
dependency "ruby2ruby", "~> 2.2
|
|
26
|
+
dependency "minitest", "> 5.8", :dev
|
|
27
|
+
dependency "ruby2ruby", "~> 2.2", :dev
|
|
29
28
|
|
|
30
29
|
self.flay_threshold = 250
|
|
31
30
|
end
|
data/lib/flay.rb
CHANGED
|
@@ -2,13 +2,16 @@
|
|
|
2
2
|
|
|
3
3
|
require "optparse"
|
|
4
4
|
require "sexp_processor"
|
|
5
|
-
require "ruby_parser"
|
|
6
5
|
require "path_expander"
|
|
7
6
|
require "timeout"
|
|
8
7
|
require "zlib"
|
|
8
|
+
require "prism"
|
|
9
|
+
require "prism/translation/ruby_parser"
|
|
9
10
|
|
|
10
11
|
class Flay
|
|
11
|
-
VERSION = "2.
|
|
12
|
+
VERSION = "2.14.4" # :nodoc:
|
|
13
|
+
|
|
14
|
+
NotRubyParser = Class.new Prism::Translation::RubyParser # compatibility layer :nodoc:
|
|
12
15
|
|
|
13
16
|
class Item < Struct.new(:structural_hash, :name, :bonus, :mass, :locations)
|
|
14
17
|
alias identical? bonus
|
|
@@ -45,6 +48,7 @@ class Flay
|
|
|
45
48
|
:fuzzy => false,
|
|
46
49
|
:only => nil,
|
|
47
50
|
:filters => [],
|
|
51
|
+
:parser => NotRubyParser,
|
|
48
52
|
}
|
|
49
53
|
end
|
|
50
54
|
|
|
@@ -106,6 +110,11 @@ class Flay
|
|
|
106
110
|
options[:timeout] = t.to_i
|
|
107
111
|
end
|
|
108
112
|
|
|
113
|
+
opts.on("-t", "--legacy", "Use RubyParser to parse.") do
|
|
114
|
+
require "ruby_parser"
|
|
115
|
+
options[:parser] = RubyParser
|
|
116
|
+
end
|
|
117
|
+
|
|
109
118
|
extensions = ["rb"] + Flay.load_plugins
|
|
110
119
|
|
|
111
120
|
opts.separator ""
|
|
@@ -266,7 +275,8 @@ class Flay
|
|
|
266
275
|
|
|
267
276
|
def process_rb file
|
|
268
277
|
begin
|
|
269
|
-
|
|
278
|
+
parser = option[:parser].new
|
|
279
|
+
parser.process(File.binread(file), file, option[:timeout])
|
|
270
280
|
rescue Timeout::Error
|
|
271
281
|
warn "TIMEOUT parsing #{file}. Skipping."
|
|
272
282
|
end
|
|
@@ -445,7 +455,7 @@ class Flay
|
|
|
445
455
|
end
|
|
446
456
|
|
|
447
457
|
def collapse_and_label ary # :nodoc:
|
|
448
|
-
ary
|
|
458
|
+
ary.first.zip(*ary.drop(1)).map { |lines|
|
|
449
459
|
if lines.uniq.size == 1 then
|
|
450
460
|
" #{lines.first}"
|
|
451
461
|
else
|
|
@@ -574,14 +584,8 @@ class Sexp
|
|
|
574
584
|
alias :[] :[] # needed for STRICT_SEXP
|
|
575
585
|
|
|
576
586
|
def [] a # :nodoc:
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
if Sexp === s then
|
|
580
|
-
s.file = self.file
|
|
581
|
-
s.line = self.line
|
|
582
|
-
s.modified = self.modified
|
|
583
|
-
end
|
|
584
|
-
s
|
|
587
|
+
return super if Integer === a
|
|
588
|
+
self.new._concat super || []
|
|
585
589
|
end
|
|
586
590
|
|
|
587
591
|
def + o # :nodoc:
|
data/lib/flay_erb.rb
CHANGED
data/test/test_flay.rb
CHANGED
|
@@ -4,11 +4,8 @@ require "minitest/autorun"
|
|
|
4
4
|
require "flay"
|
|
5
5
|
require "tmpdir"
|
|
6
6
|
|
|
7
|
-
$: << "../../sexp_processor/dev/lib"
|
|
8
|
-
|
|
9
7
|
class TestSexp < Minitest::Test
|
|
10
8
|
OPTS = Flay.parse_options %w[--mass=1 -v]
|
|
11
|
-
DEF_OPTS = {:diff=>false, :mass=>16, :summary=>false, :verbose=>false, :number=>true, :timeout=>10, :liberal=>false, :fuzzy=>false, :only=>nil}
|
|
12
9
|
|
|
13
10
|
def setup
|
|
14
11
|
# a(1) { |c| d }
|
|
@@ -65,7 +62,9 @@ class TestSexp < Minitest::Test
|
|
|
65
62
|
assert_equal expected, x.sort.uniq
|
|
66
63
|
end
|
|
67
64
|
|
|
68
|
-
|
|
65
|
+
NotRubyParser = Flay::NotRubyParser
|
|
66
|
+
|
|
67
|
+
DOG_AND_CAT = NotRubyParser.new.process <<~RUBY
|
|
69
68
|
##
|
|
70
69
|
# I am a dog.
|
|
71
70
|
|
|
@@ -88,7 +87,7 @@ class TestSexp < Minitest::Test
|
|
|
88
87
|
end
|
|
89
88
|
RUBY
|
|
90
89
|
|
|
91
|
-
ROUND =
|
|
90
|
+
ROUND = NotRubyParser.new.process <<~RUBY
|
|
92
91
|
def x(n)
|
|
93
92
|
if n % 2 == 0
|
|
94
93
|
return n
|
|
@@ -106,7 +105,7 @@ class TestSexp < Minitest::Test
|
|
|
106
105
|
flay.process_sexp s(:outer,contained)
|
|
107
106
|
2.times { flay.process_sexp s(:outer,container) }
|
|
108
107
|
|
|
109
|
-
exp = eval
|
|
108
|
+
exp = eval <<~EOM # just to prevent emacs from reindenting it
|
|
110
109
|
[
|
|
111
110
|
[ s(:a, s(:b, s(:c)), s(:d, s(:e))),
|
|
112
111
|
s(:a, s(:b, s(:c)), s(:d, s(:e))),
|
|
@@ -142,7 +141,7 @@ class TestSexp < Minitest::Test
|
|
|
142
141
|
flay.process_sexp s(:outer,contained)
|
|
143
142
|
2.times { flay.process_sexp s(:outer,container) }
|
|
144
143
|
|
|
145
|
-
exp = eval
|
|
144
|
+
exp = eval <<~EOM # just to prevent emacs from reindenting it
|
|
146
145
|
[
|
|
147
146
|
[ s(:a, s(:b, s(:c)), s(:d, s(:e))),
|
|
148
147
|
s(:a, s(:b, s(:c)), s(:d, s(:e))),
|
|
@@ -218,7 +217,7 @@ class TestSexp < Minitest::Test
|
|
|
218
217
|
flay.report
|
|
219
218
|
end
|
|
220
219
|
|
|
221
|
-
exp =
|
|
220
|
+
exp = <<~END
|
|
222
221
|
Total score (lower is better) = 16
|
|
223
222
|
|
|
224
223
|
1) Similar code found in :class (mass = 16)
|
|
@@ -227,7 +226,94 @@ class TestSexp < Minitest::Test
|
|
|
227
226
|
END
|
|
228
227
|
|
|
229
228
|
assert_equal "", err
|
|
230
|
-
assert_equal exp, out.gsub(/\d+/, "N")
|
|
229
|
+
assert_equal exp.gsub(/\d+/, "N"), out.gsub(/\d+/, "N")
|
|
230
|
+
end
|
|
231
|
+
|
|
232
|
+
def test_sexp_idx
|
|
233
|
+
# sexp = NotRubyParser.new.parse "def x(n); n + 1; end"
|
|
234
|
+
sexp = s(:defn, :x, s(:args, :n),
|
|
235
|
+
s(:call, s(:lvar, :n), :+, s(:lit, 1)))
|
|
236
|
+
|
|
237
|
+
assert_equal :defn, sexp[0]
|
|
238
|
+
assert_equal s(:defn), sexp[0..0]
|
|
239
|
+
assert_equal s(:defn, :x), sexp[0..1]
|
|
240
|
+
end
|
|
241
|
+
|
|
242
|
+
def test_sexp_idx__off
|
|
243
|
+
# sexp = NotRubyParser.new.parse "->(something) { something.to_s }"
|
|
244
|
+
sexp = s(:iter,
|
|
245
|
+
s(:lambda),
|
|
246
|
+
s(:args, :something),
|
|
247
|
+
s(:call, s(:lvar, :something), :to_s))
|
|
248
|
+
|
|
249
|
+
# def arguments_element
|
|
250
|
+
# call_element.sexp_body(3) || []
|
|
251
|
+
call_element = sexp[1] # s(:lambda) = this is just wrong
|
|
252
|
+
|
|
253
|
+
assert_equal s(), call_element[3..-1]
|
|
254
|
+
assert_equal s(), call_element.sexp_body(3)
|
|
255
|
+
end
|
|
256
|
+
|
|
257
|
+
def test__fuzzy__split_at
|
|
258
|
+
# def x(n); n + 1; end
|
|
259
|
+
sexp = s(:defn, :x, s(:args, :n), s(:call, s(:lvar, :n), :+, s(:lit, 1)))
|
|
260
|
+
# sexp = NotRubyParser.new.parse "def x(n); n + 1; end"
|
|
261
|
+
|
|
262
|
+
a, b = sexp.split_at 2
|
|
263
|
+
|
|
264
|
+
assert_equal s(:defn, :x, s(:args, :n)), a
|
|
265
|
+
assert_equal s(s(:call, s(:lvar, :n), :+, s(:lit, 1))), b
|
|
266
|
+
end
|
|
267
|
+
|
|
268
|
+
def test__fuzzy__split_code
|
|
269
|
+
# def x(n); n + 1; end
|
|
270
|
+
sexp = s(:defn, :x, s(:args, :n), s(:call, s(:lvar, :n), :+, s(:lit, 1)))
|
|
271
|
+
# sexp = NotRubyParser.new.parse "def x(n); n + 1; end"
|
|
272
|
+
|
|
273
|
+
a, b = sexp.split_code
|
|
274
|
+
|
|
275
|
+
assert_equal s(:defn, :x, s(:args, :n)), a
|
|
276
|
+
assert_equal s(s(:call, s(:lvar, :n), :+, s(:lit, 1))), b
|
|
277
|
+
end
|
|
278
|
+
|
|
279
|
+
FUZZY_CODE = NotRubyParser.new.process <<-RUBY
|
|
280
|
+
def a
|
|
281
|
+
f1; f2; f3; f4; f5; f6
|
|
282
|
+
end
|
|
283
|
+
|
|
284
|
+
def b
|
|
285
|
+
f2; f3; f4; f5; f6
|
|
286
|
+
end
|
|
287
|
+
|
|
288
|
+
def c
|
|
289
|
+
f2; f3; f4; f5; f6; f7
|
|
290
|
+
end
|
|
291
|
+
RUBY
|
|
292
|
+
|
|
293
|
+
def test_report__fuzzy
|
|
294
|
+
flay = Flay.new OPTS.merge(fuzzy: 1, mass: 5)
|
|
295
|
+
|
|
296
|
+
flay.process_sexp FUZZY_CODE.deep_clone
|
|
297
|
+
|
|
298
|
+
out, err = capture_io do
|
|
299
|
+
flay.report
|
|
300
|
+
end
|
|
301
|
+
|
|
302
|
+
exp = <<~END
|
|
303
|
+
Total score (lower is better) = 37
|
|
304
|
+
|
|
305
|
+
1) Similar code found in :defn (mass = 21)
|
|
306
|
+
(string):1 (FUZZY)
|
|
307
|
+
(string):5
|
|
308
|
+
(string):9 (FUZZY)
|
|
309
|
+
|
|
310
|
+
2) Similar code found in :defn (mass = 16)
|
|
311
|
+
(string):1
|
|
312
|
+
(string):9
|
|
313
|
+
END
|
|
314
|
+
|
|
315
|
+
assert_equal "", err
|
|
316
|
+
assert_equal exp.gsub(/\d+/, "N"), out.gsub(/\d+/, "N")
|
|
231
317
|
end
|
|
232
318
|
|
|
233
319
|
def test_report_io
|
|
@@ -238,7 +324,7 @@ class TestSexp < Minitest::Test
|
|
|
238
324
|
flay.analyze
|
|
239
325
|
flay.report out
|
|
240
326
|
|
|
241
|
-
exp =
|
|
327
|
+
exp = <<~END
|
|
242
328
|
Total score (lower is better) = 16
|
|
243
329
|
|
|
244
330
|
1) Similar code found in :class (mass = 16)
|
|
@@ -246,7 +332,7 @@ class TestSexp < Minitest::Test
|
|
|
246
332
|
(string):6
|
|
247
333
|
END
|
|
248
334
|
|
|
249
|
-
assert_equal exp, out.string.gsub(/\d+/, "N")
|
|
335
|
+
assert_equal exp.gsub(/\d+/, "N"), out.string.gsub(/\d+/, "N")
|
|
250
336
|
end
|
|
251
337
|
|
|
252
338
|
def test_report_diff
|
|
@@ -259,7 +345,7 @@ class TestSexp < Minitest::Test
|
|
|
259
345
|
flay.report
|
|
260
346
|
end
|
|
261
347
|
|
|
262
|
-
exp =
|
|
348
|
+
exp = <<~END.gsub(/_NL_/, "")
|
|
263
349
|
Total score (lower is better) = 16
|
|
264
350
|
|
|
265
351
|
1) Similar code found in :class (mass = 16)
|
|
@@ -272,7 +358,7 @@ class TestSexp < Minitest::Test
|
|
|
272
358
|
B: # am
|
|
273
359
|
B: # a
|
|
274
360
|
B: # cat.
|
|
275
|
-
|
|
361
|
+
_NL_
|
|
276
362
|
A: class Dog
|
|
277
363
|
B: class Cat
|
|
278
364
|
A: def x
|
|
@@ -283,7 +369,7 @@ class TestSexp < Minitest::Test
|
|
|
283
369
|
END
|
|
284
370
|
|
|
285
371
|
assert_equal "", err
|
|
286
|
-
assert_equal exp
|
|
372
|
+
assert_equal exp.gsub(/\d+/, "N"), out.gsub(/\d+/, "N")
|
|
287
373
|
end
|
|
288
374
|
|
|
289
375
|
def test_report_diff_plugin_converter
|
|
@@ -301,7 +387,7 @@ class TestSexp < Minitest::Test
|
|
|
301
387
|
|
|
302
388
|
Flay.send(:remove_method, :sexp_to_)
|
|
303
389
|
|
|
304
|
-
exp =
|
|
390
|
+
exp = <<~END
|
|
305
391
|
Total score (lower is better) = 16
|
|
306
392
|
|
|
307
393
|
1) Similar code found in :class (mass = 16)
|
|
@@ -313,7 +399,7 @@ class TestSexp < Minitest::Test
|
|
|
313
399
|
END
|
|
314
400
|
|
|
315
401
|
assert_equal "", err
|
|
316
|
-
assert_equal exp
|
|
402
|
+
assert_equal exp.gsub(/\d+/, "N"), out.gsub(/\d+/, "N")
|
|
317
403
|
end
|
|
318
404
|
|
|
319
405
|
def test_n_way_diff
|
|
@@ -322,7 +408,7 @@ class TestSexp < Minitest::Test
|
|
|
322
408
|
|
|
323
409
|
flay = Flay.new
|
|
324
410
|
|
|
325
|
-
exp =
|
|
411
|
+
exp = <<~EOM.chomp
|
|
326
412
|
##
|
|
327
413
|
A: # I am a dog.
|
|
328
414
|
B: # I
|
|
@@ -349,7 +435,7 @@ class TestSexp < Minitest::Test
|
|
|
349
435
|
|
|
350
436
|
flay = Flay.new
|
|
351
437
|
|
|
352
|
-
exp =
|
|
438
|
+
exp = <<~EOM.gsub(/\d+/, "N").chomp
|
|
353
439
|
A: class Dog
|
|
354
440
|
B: class Cat
|
|
355
441
|
A: def x
|
|
@@ -359,7 +445,7 @@ class TestSexp < Minitest::Test
|
|
|
359
445
|
end
|
|
360
446
|
EOM
|
|
361
447
|
|
|
362
|
-
assert_equal exp, flay.n_way_diff(*dog_and_cat)
|
|
448
|
+
assert_equal exp, flay.n_way_diff(*dog_and_cat)
|
|
363
449
|
end
|
|
364
450
|
|
|
365
451
|
def test_split_and_group
|
|
@@ -393,10 +479,12 @@ class TestSexp < Minitest::Test
|
|
|
393
479
|
def test_collapse_and_label
|
|
394
480
|
flay = Flay.new
|
|
395
481
|
|
|
396
|
-
a = %w(a b c).map { |s| s.group = "A"; s }
|
|
397
|
-
b = %w(d b f).map { |s| s.group = "B"; s }
|
|
482
|
+
a = %w(a b c).map(&:dup).map { |s| s.group = "A"; s }
|
|
483
|
+
b = %w(d b f).map(&:dup).map { |s| s.group = "B"; s }
|
|
398
484
|
|
|
399
|
-
exp = [["A: a", "B: d"],
|
|
485
|
+
exp = [["A: a", "B: d"],
|
|
486
|
+
" b",
|
|
487
|
+
["A: c", "B: f"]]
|
|
400
488
|
|
|
401
489
|
assert_equal exp, flay.collapse_and_label([a, b])
|
|
402
490
|
end
|
|
@@ -404,8 +492,8 @@ class TestSexp < Minitest::Test
|
|
|
404
492
|
def test_collapse_and_label_same
|
|
405
493
|
flay = Flay.new
|
|
406
494
|
|
|
407
|
-
a = %w(a b c).map { |s| s.group = "A"; s }
|
|
408
|
-
b = %w(a b c).map { |s| s.group = "B"; s }
|
|
495
|
+
a = %w(a b c).map(&:dup).map { |s| s.group = "A"; s }
|
|
496
|
+
b = %w(a b c).map(&:dup).map { |s| s.group = "B"; s }
|
|
409
497
|
|
|
410
498
|
exp = [" a", " b", " c"]
|
|
411
499
|
|
|
@@ -416,9 +504,9 @@ class TestSexp < Minitest::Test
|
|
|
416
504
|
dog_and_cat = ["##\n# I am a dog.\n\ndef x\n return \"Hello\"\nend",
|
|
417
505
|
"##\n# I\n#\n# am\n# a\n# cat.\n\ndef y\n return \"Hello\"\nend"]
|
|
418
506
|
|
|
419
|
-
flay = Flay.new
|
|
507
|
+
flay = Flay.new Flay.default_options
|
|
420
508
|
|
|
421
|
-
exp =
|
|
509
|
+
exp = <<~EOM.gsub(/\d+/, "N").gsub(/_NL_/, "").chomp
|
|
422
510
|
##
|
|
423
511
|
A: # I am a dog.
|
|
424
512
|
B: # I
|
|
@@ -426,14 +514,14 @@ class TestSexp < Minitest::Test
|
|
|
426
514
|
B: # am
|
|
427
515
|
B: # a
|
|
428
516
|
B: # cat.
|
|
429
|
-
|
|
517
|
+
_NL_
|
|
430
518
|
A: def x
|
|
431
519
|
B: def y
|
|
432
520
|
return \"Hello\"
|
|
433
521
|
end
|
|
434
522
|
EOM
|
|
435
523
|
|
|
436
|
-
assert_equal exp, flay.n_way_diff(*dog_and_cat)
|
|
524
|
+
assert_equal exp, flay.n_way_diff(*dog_and_cat)
|
|
437
525
|
end
|
|
438
526
|
|
|
439
527
|
attr_accessor :flay
|
data.tar.gz.sig
CHANGED
|
Binary file
|
metadata
CHANGED
|
@@ -1,18 +1,17 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: flay
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 2.
|
|
4
|
+
version: 2.14.4
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Ryan Davis
|
|
8
|
-
autorequire:
|
|
9
8
|
bindir: bin
|
|
10
9
|
cert_chain:
|
|
11
10
|
- |
|
|
12
11
|
-----BEGIN CERTIFICATE-----
|
|
13
|
-
|
|
12
|
+
MIIDPjCCAiagAwIBAgIBCjANBgkqhkiG9w0BAQsFADBFMRMwEQYDVQQDDApyeWFu
|
|
14
13
|
ZC1ydWJ5MRkwFwYKCZImiZPyLGQBGRYJemVuc3BpZGVyMRMwEQYKCZImiZPyLGQB
|
|
15
|
-
|
|
14
|
+
GRYDY29tMB4XDTI2MDEwNzAxMDkxNFoXDTI3MDEwNzAxMDkxNFowRTETMBEGA1UE
|
|
16
15
|
AwwKcnlhbmQtcnVieTEZMBcGCgmSJomT8ixkARkWCXplbnNwaWRlcjETMBEGCgmS
|
|
17
16
|
JomT8ixkARkWA2NvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALda
|
|
18
17
|
b9DCgK+627gPJkB6XfjZ1itoOQvpqH1EXScSaba9/S2VF22VYQbXU1xQXL/WzCkx
|
|
@@ -22,14 +21,14 @@ cert_chain:
|
|
|
22
21
|
qhtV7HJxNKuPj/JFH0D2cswvzznE/a5FOYO68g+YCuFi5L8wZuuM8zzdwjrWHqSV
|
|
23
22
|
gBEfoTEGr7Zii72cx+sCAwEAAaM5MDcwCQYDVR0TBAIwADALBgNVHQ8EBAMCBLAw
|
|
24
23
|
HQYDVR0OBBYEFEfFe9md/r/tj/Wmwpy+MI8d9k/hMA0GCSqGSIb3DQEBCwUAA4IB
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
24
|
+
AQA/X8/PKTTc/IkYQEUL6XWtfK8fAfbuLJzmLcz6f2ZWrtBvPsYvqRuwI1bWUtil
|
|
25
|
+
2ibJEfIuSIHX6BsUTX18+hlaIussf6EWq/YkE7e2BKmgQE42vSOZMce0kCEAPbx0
|
|
26
|
+
rQtqonfWTHQ8UbQ7GqCL3gDQ0QDD2B+HUlb4uaCZ2icxqa/eOtxMvHC2tj+h0xKY
|
|
27
|
+
xL84ipM5kr0bHGf9/MRZJWcw51urueNycBXu1Xh+pEN8qBmYsFRR4SIODLClybAO
|
|
28
|
+
6cbm2PyPQgKNiqE4H+IQrDVHd9bJs1XgLElk3qoaJBWXc/5fy0J1imYb25UqmiHG
|
|
29
|
+
snGe1hrppvBRdcyEzvhfIPjI
|
|
31
30
|
-----END CERTIFICATE-----
|
|
32
|
-
date:
|
|
31
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
|
33
32
|
dependencies:
|
|
34
33
|
- !ruby/object:Gem::Dependency
|
|
35
34
|
name: sexp_processor
|
|
@@ -46,19 +45,19 @@ dependencies:
|
|
|
46
45
|
- !ruby/object:Gem::Version
|
|
47
46
|
version: '4.0'
|
|
48
47
|
- !ruby/object:Gem::Dependency
|
|
49
|
-
name:
|
|
48
|
+
name: prism
|
|
50
49
|
requirement: !ruby/object:Gem::Requirement
|
|
51
50
|
requirements:
|
|
52
51
|
- - "~>"
|
|
53
52
|
- !ruby/object:Gem::Version
|
|
54
|
-
version: '
|
|
53
|
+
version: '1.7'
|
|
55
54
|
type: :runtime
|
|
56
55
|
prerelease: false
|
|
57
56
|
version_requirements: !ruby/object:Gem::Requirement
|
|
58
57
|
requirements:
|
|
59
58
|
- - "~>"
|
|
60
59
|
- !ruby/object:Gem::Version
|
|
61
|
-
version: '
|
|
60
|
+
version: '1.7'
|
|
62
61
|
- !ruby/object:Gem::Dependency
|
|
63
62
|
name: erubi
|
|
64
63
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -79,80 +78,102 @@ dependencies:
|
|
|
79
78
|
requirements:
|
|
80
79
|
- - "~>"
|
|
81
80
|
- !ruby/object:Gem::Version
|
|
82
|
-
version: '
|
|
81
|
+
version: '2.0'
|
|
83
82
|
type: :runtime
|
|
84
83
|
prerelease: false
|
|
85
84
|
version_requirements: !ruby/object:Gem::Requirement
|
|
86
85
|
requirements:
|
|
87
86
|
- - "~>"
|
|
88
87
|
- !ruby/object:Gem::Version
|
|
89
|
-
version: '
|
|
88
|
+
version: '2.0'
|
|
90
89
|
- !ruby/object:Gem::Dependency
|
|
91
90
|
name: minitest
|
|
92
91
|
requirement: !ruby/object:Gem::Requirement
|
|
93
92
|
requirements:
|
|
94
|
-
- - "
|
|
93
|
+
- - ">"
|
|
95
94
|
- !ruby/object:Gem::Version
|
|
96
|
-
version: 5.8
|
|
95
|
+
version: '5.8'
|
|
97
96
|
type: :development
|
|
98
97
|
prerelease: false
|
|
99
98
|
version_requirements: !ruby/object:Gem::Requirement
|
|
100
99
|
requirements:
|
|
101
|
-
- - "
|
|
100
|
+
- - ">"
|
|
102
101
|
- !ruby/object:Gem::Version
|
|
103
|
-
version: 5.8
|
|
102
|
+
version: '5.8'
|
|
104
103
|
- !ruby/object:Gem::Dependency
|
|
105
104
|
name: ruby2ruby
|
|
106
105
|
requirement: !ruby/object:Gem::Requirement
|
|
107
106
|
requirements:
|
|
108
107
|
- - "~>"
|
|
109
108
|
- !ruby/object:Gem::Version
|
|
110
|
-
version: 2.2
|
|
109
|
+
version: '2.2'
|
|
111
110
|
type: :development
|
|
112
111
|
prerelease: false
|
|
113
112
|
version_requirements: !ruby/object:Gem::Requirement
|
|
114
113
|
requirements:
|
|
115
114
|
- - "~>"
|
|
116
115
|
- !ruby/object:Gem::Version
|
|
117
|
-
version: 2.2
|
|
116
|
+
version: '2.2'
|
|
118
117
|
- !ruby/object:Gem::Dependency
|
|
119
118
|
name: rdoc
|
|
120
119
|
requirement: !ruby/object:Gem::Requirement
|
|
121
120
|
requirements:
|
|
122
121
|
- - ">="
|
|
123
122
|
- !ruby/object:Gem::Version
|
|
124
|
-
version: '
|
|
123
|
+
version: '6.0'
|
|
125
124
|
- - "<"
|
|
126
125
|
- !ruby/object:Gem::Version
|
|
127
|
-
version: '
|
|
126
|
+
version: '8'
|
|
128
127
|
type: :development
|
|
129
128
|
prerelease: false
|
|
130
129
|
version_requirements: !ruby/object:Gem::Requirement
|
|
131
130
|
requirements:
|
|
132
131
|
- - ">="
|
|
133
132
|
- !ruby/object:Gem::Version
|
|
134
|
-
version: '
|
|
133
|
+
version: '6.0'
|
|
135
134
|
- - "<"
|
|
136
135
|
- !ruby/object:Gem::Version
|
|
137
|
-
version: '
|
|
136
|
+
version: '8'
|
|
138
137
|
- !ruby/object:Gem::Dependency
|
|
139
138
|
name: hoe
|
|
140
139
|
requirement: !ruby/object:Gem::Requirement
|
|
141
140
|
requirements:
|
|
142
141
|
- - "~>"
|
|
143
142
|
- !ruby/object:Gem::Version
|
|
144
|
-
version: '4.
|
|
143
|
+
version: '4.6'
|
|
145
144
|
type: :development
|
|
146
145
|
prerelease: false
|
|
147
146
|
version_requirements: !ruby/object:Gem::Requirement
|
|
148
147
|
requirements:
|
|
149
148
|
- - "~>"
|
|
150
149
|
- !ruby/object:Gem::Version
|
|
151
|
-
version: '4.
|
|
150
|
+
version: '4.6'
|
|
152
151
|
description: |-
|
|
153
152
|
Flay analyzes code for structural similarities. Differences in literal
|
|
154
153
|
values, variable, class, method names, whitespace, programming style,
|
|
155
154
|
braces vs do/end, etc are all ignored. Making this totally rad.
|
|
155
|
+
|
|
156
|
+
== Features/Problems:
|
|
157
|
+
|
|
158
|
+
* Reports differences at any level of code.
|
|
159
|
+
* Adds a score multiplier to identical nodes.
|
|
160
|
+
* Differences in literal values, variable, class, and method names are ignored.
|
|
161
|
+
* Differences in whitespace, programming style, braces vs do/end, etc are ignored.
|
|
162
|
+
* Works across files.
|
|
163
|
+
* Add the flay-persistent plugin to work across large/many projects.
|
|
164
|
+
* Run --diff to see an N-way diff of the code.
|
|
165
|
+
* Provides conservative (default) and --liberal pruning options.
|
|
166
|
+
* Provides --fuzzy duplication detection.
|
|
167
|
+
* Language independent: Plugin system allows other languages to be flayed.
|
|
168
|
+
* Ships with .rb and .erb.
|
|
169
|
+
* javascript and others will be available separately.
|
|
170
|
+
* Includes FlayTask for Rakefiles.
|
|
171
|
+
* Uses path_expander, so you can use:
|
|
172
|
+
* dir_arg -- expand a directory automatically
|
|
173
|
+
* @file_of_args -- persist arguments in a file
|
|
174
|
+
* -path_to_subtract -- ignore intersecting subsets of files/directories
|
|
175
|
+
* Skips files matched via patterns in .flayignore (subset format of .gitignore).
|
|
176
|
+
* Totally rad.
|
|
156
177
|
email:
|
|
157
178
|
- ryand-ruby@zenspider.com
|
|
158
179
|
executables:
|
|
@@ -179,7 +200,7 @@ licenses:
|
|
|
179
200
|
metadata:
|
|
180
201
|
homepage_uri: http://ruby.sadi.st/
|
|
181
202
|
source_code_uri: https://github.com/seattlerb/flay
|
|
182
|
-
|
|
203
|
+
documentation_uri: http://docs.seattlerb.org/flay/
|
|
183
204
|
rdoc_options:
|
|
184
205
|
- "--main"
|
|
185
206
|
- README.rdoc
|
|
@@ -196,8 +217,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
196
217
|
- !ruby/object:Gem::Version
|
|
197
218
|
version: '0'
|
|
198
219
|
requirements: []
|
|
199
|
-
rubygems_version: 3.
|
|
200
|
-
signing_key:
|
|
220
|
+
rubygems_version: 3.7.2
|
|
201
221
|
specification_version: 4
|
|
202
222
|
summary: Flay analyzes code for structural similarities
|
|
203
223
|
test_files: []
|
metadata.gz.sig
CHANGED
|
Binary file
|