flay 2.8.1 → 2.9.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 4c61c66f88624f0e383065c27b8ef862a267be48
4
- data.tar.gz: 27e83ad70de97992734eaa17b2127cdc9633e42d
3
+ metadata.gz: 28083167bd112a4147a69347db6f5c042a84239d
4
+ data.tar.gz: 4accae6b53cba132a340a5a73b7a6f6af6432e59
5
5
  SHA512:
6
- metadata.gz: 502d131e62a3fc06fda5834b3fbf2e546fbe6bf7de6fa4d5ece51dc878f35878b60a2b5f9405b31d58ca2b728aa03c50fb7e93db64bd6293e8218d084837f427
7
- data.tar.gz: 8e49f697a064fcea5b90ded92d88a33f227d3bb7c3a6a4aabe154174bb939b9afc1a5bf54c252f88c4d99a15d37807a412853cddf1686e052de0c8c7c2dc7235
6
+ metadata.gz: 799ea470eb54add44f91ae4ac3d6675d8669b8a6a2168505a14ab3951b01ec85576bdcdb7b843edf67584bf7c0b866c3da7bfced294190265873a76cadce4fc8
7
+ data.tar.gz: 796f1127245836476b4d5214883cae08cbcb6e895bea2ed86cabdd4840657de85935ecd260cd503e98bf96f44facccb30666edb06d39702524a90057cf083f8d
Binary file
data.tar.gz.sig CHANGED
Binary file
@@ -1,3 +1,9 @@
1
+ === 2.9.0 / 2017-04-13
2
+
3
+ * 1 minor enhancement:
4
+
5
+ * Added Sexp#pure_ruby_hash from flay-persistent and switched structural_hash to it. Faster than ruby's #hash and stable.
6
+
1
7
  === 2.8.1 / 2016-08-24
2
8
 
3
9
  * 1 bug fix:
@@ -13,7 +19,7 @@
13
19
  * 2 bug fixes:
14
20
 
15
21
  * Added dev deps and bundler plugin to make flavorjones happy. (flavorjones)
16
- * Explictly require rake/tasklib in flay_task.rb. (jasonkarns)
22
+ * Explicitly require rake/tasklib in flay_task.rb. (jasonkarns)
17
23
 
18
24
  === 2.7.0 / 2016-01-21
19
25
 
@@ -84,7 +90,7 @@ is. In this case, it severely falls short. I'd jump to 4.0 if I could.
84
90
  * Added Sexp#+.
85
91
  * Added Sexp#code_index to specify where *code starts in some sexps.
86
92
  * Added Sexp#has_code?.
87
- * Added Sexp#initalize_copy to propagate file/line/modified info.
93
+ * Added Sexp#initialize_copy to propagate file/line/modified info.
88
94
  * Added Sexp#modified, #modified=, and #modified?.
89
95
  * Added Sexp#split_at(n). (Something I've wanted in Array for ages).
90
96
  * Added Sexp#split_code.
@@ -16,7 +16,7 @@ class File
16
16
  end
17
17
 
18
18
  class Flay
19
- VERSION = "2.8.1" # :nodoc:
19
+ VERSION = "2.9.0" # :nodoc:
20
20
 
21
21
  class Item < Struct.new(:structural_hash, :name, :bonus, :mass, :locations)
22
22
  alias identical? bonus
@@ -538,7 +538,7 @@ class Sexp
538
538
  # modify the sexp afterwards and expect it to be correct.
539
539
 
540
540
  def structural_hash
541
- @structural_hash ||= self.structure.hash
541
+ @structural_hash ||= pure_ruby_hash
542
542
  end
543
543
 
544
544
  ##
@@ -610,6 +610,56 @@ class Sexp
610
610
  end
611
611
  end
612
612
 
613
+ class Sexp # straight from flay-persistent
614
+ names = %w(alias and arglist args array attrasgn attrset back_ref
615
+ begin block block_pass break call case cdecl class colon2
616
+ colon3 const cvar cvasgn cvdecl defined defn defs dot2
617
+ dot3 dregx dregx_once dstr dsym dxstr ensure evstr false
618
+ flip2 flip3 for gasgn gvar hash iasgn if iter ivar lasgn
619
+ lit lvar masgn match match2 match3 module next nil not
620
+ nth_ref op_asgn op_asgn1 op_asgn2 op_asgn_and op_asgn_or or
621
+ postexe redo resbody rescue retry return sclass self
622
+ splat str super svalue to_ary true undef until valias
623
+ when while xstr yield zsuper kwarg kwsplat safe_call)
624
+
625
+ ##
626
+ # All ruby_parser nodes in an index hash. Used by jenkins algorithm.
627
+
628
+ NODE_NAMES = Hash[names.each_with_index.map {|n, i| [n.to_sym, i] }]
629
+
630
+ NODE_NAMES.default_proc = lambda { |h, k|
631
+ $stderr.puts "ERROR: couldn't find node type #{k} in Sexp::NODE_NAMES."
632
+ h[k] = NODE_NAMES.size
633
+ }
634
+
635
+ MAX_INT32 = 2 ** 32 - 1 # :nodoc:
636
+
637
+ def pure_ruby_hash # :nodoc: see above
638
+ hash = 0
639
+
640
+ n = NODE_NAMES[first]
641
+
642
+ raise "Bad lookup: #{first} in #{sexp.inspect}" unless n
643
+
644
+ hash += n & MAX_INT32
645
+ hash += hash << 10 & MAX_INT32
646
+ hash ^= hash >> 6 & MAX_INT32
647
+
648
+ each do |o|
649
+ next unless Sexp === o
650
+ hash = hash + o.pure_ruby_hash & MAX_INT32
651
+ hash = (hash + (hash << 10)) & MAX_INT32
652
+ hash = (hash ^ (hash >> 6)) & MAX_INT32
653
+ end
654
+
655
+ hash = (hash + (hash << 3)) & MAX_INT32
656
+ hash = (hash ^ (hash >> 11)) & MAX_INT32
657
+ hash = (hash + (hash << 15)) & MAX_INT32
658
+
659
+ hash
660
+ end
661
+ end
662
+
613
663
  class Array # :nodoc:
614
664
 
615
665
  ##
@@ -7,6 +7,9 @@ require "tmpdir"
7
7
  $: << "../../sexp_processor/dev/lib"
8
8
 
9
9
  class TestSexp < Minitest::Test
10
+ 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
+
10
13
  def setup
11
14
  # a(1) { |c| d }
12
15
  @s = s(:iter,
@@ -16,10 +19,7 @@ class TestSexp < Minitest::Test
16
19
  end
17
20
 
18
21
  def test_structural_hash
19
- hash = s(:iter,
20
- s(:call, s(:arglist, s(:lit))),
21
- s(:lasgn),
22
- s(:call, s(:arglist))).hash
22
+ hash = 3336573932
23
23
 
24
24
  assert_equal hash, @s.deep_clone.structural_hash
25
25
  assert_equal hash, @s.structural_hash
@@ -46,13 +46,13 @@ class TestSexp < Minitest::Test
46
46
  s(:call, s(:arglist)))
47
47
 
48
48
  expected = [
49
- s[1] .hash,
50
- s[1][1] .hash,
51
- s[1][1][1].hash,
52
- s[2] .hash,
53
- s[3] .hash,
54
- s[3][1] .hash,
55
- ].sort
49
+ s[1],
50
+ s[1][1],
51
+ s[1][1][1],
52
+ s[2],
53
+ s[3],
54
+ s[3][1],
55
+ ].map(&:structural_hash).sort
56
56
 
57
57
  assert_equal expected, @s.all_structural_subhashes.sort.uniq
58
58
 
@@ -98,7 +98,18 @@ class TestSexp < Minitest::Test
98
98
  end
99
99
  RUBY
100
100
 
101
+ def register_node_types
102
+ # Register these node types to remove warnings in test
103
+ capture_io do
104
+ [:a, :b, :c, :d, :e].each do |s|
105
+ Sexp::NODE_NAMES[s]
106
+ end
107
+ end
108
+ end
109
+
101
110
  def test_prune
111
+ register_node_types
112
+
102
113
  contained = s(:a, s(:b,s(:c)), s(:d,s(:e)))
103
114
  container = s(:d, contained)
104
115
 
@@ -135,6 +146,8 @@ class TestSexp < Minitest::Test
135
146
  end
136
147
 
137
148
  def test_prune_liberal
149
+ register_node_types
150
+
138
151
  contained = s(:a, s(:b,s(:c)), s(:d,s(:e)))
139
152
  container = s(:d, contained)
140
153
 
@@ -209,7 +222,7 @@ class TestSexp < Minitest::Test
209
222
  end
210
223
 
211
224
  def test_report
212
- flay = Flay.new Flay.parse_options %w[--mass=1 -v]
225
+ flay = Flay.new OPTS
213
226
 
214
227
  flay.process_sexp DOG_AND_CAT.deep_clone
215
228
  flay.analyze
@@ -232,7 +245,7 @@ class TestSexp < Minitest::Test
232
245
 
233
246
  def test_report_io
234
247
  out = StringIO.new
235
- flay = Flay.new Flay.parse_options %w[--mass=1 -v]
248
+ flay = Flay.new OPTS
236
249
 
237
250
  flay.process_sexp DOG_AND_CAT.deep_clone
238
251
  flay.analyze
@@ -250,7 +263,7 @@ class TestSexp < Minitest::Test
250
263
  end
251
264
 
252
265
  def test_report_diff
253
- flay = Flay.new Flay.parse_options %w[-d --mass=1 -v]
266
+ flay = Flay.new OPTS.merge(:diff => true)
254
267
 
255
268
  flay.process_sexp DOG_AND_CAT.deep_clone
256
269
  flay.analyze
@@ -287,7 +300,7 @@ class TestSexp < Minitest::Test
287
300
  end
288
301
 
289
302
  def test_report_diff_plugin_converter
290
- flay = Flay.new Flay.parse_options %w[-d --mass=1 -v]
303
+ flay = Flay.new OPTS.merge(:diff => true)
291
304
 
292
305
  flay.process_sexp DOG_AND_CAT.deep_clone
293
306
  flay.analyze
@@ -416,8 +429,7 @@ class TestSexp < Minitest::Test
416
429
  dog_and_cat = ["##\n# I am a dog.\n\ndef x\n return \"Hello\"\nend",
417
430
  "##\n# I\n#\n# am\n# a\n# cat.\n\ndef y\n return \"Hello\"\nend"]
418
431
 
419
- opts = Flay.parse_options
420
- flay = Flay.new opts
432
+ flay = Flay.new DEF_OPTS
421
433
 
422
434
  exp = <<-EOM.gsub(/\d+/, "N").gsub(/^ {6}/, "").chomp
423
435
  ##
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: flay
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.8.1
4
+ version: 2.9.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ryan Davis
@@ -10,9 +10,9 @@ bindir: bin
10
10
  cert_chain:
11
11
  - |
12
12
  -----BEGIN CERTIFICATE-----
13
- MIIDPjCCAiagAwIBAgIBAzANBgkqhkiG9w0BAQUFADBFMRMwEQYDVQQDDApyeWFu
13
+ MIIDijCCAnKgAwIBAgIBATANBgkqhkiG9w0BAQUFADBFMRMwEQYDVQQDDApyeWFu
14
14
  ZC1ydWJ5MRkwFwYKCZImiZPyLGQBGRYJemVuc3BpZGVyMRMwEQYKCZImiZPyLGQB
15
- GRYDY29tMB4XDTE1MDkxOTIwNTEyMloXDTE2MDkxODIwNTEyMlowRTETMBEGA1UE
15
+ GRYDY29tMB4XDTE2MDkyNjAxNTczNVoXDTE3MDkyNjAxNTczNVowRTETMBEGA1UE
16
16
  AwwKcnlhbmQtcnVieTEZMBcGCgmSJomT8ixkARkWCXplbnNwaWRlcjETMBEGCgmS
17
17
  JomT8ixkARkWA2NvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALda
18
18
  b9DCgK+627gPJkB6XfjZ1itoOQvpqH1EXScSaba9/S2VF22VYQbXU1xQXL/WzCkx
@@ -20,129 +20,130 @@ cert_chain:
20
20
  oOvjtt5P8+GSK9zLzxQP0gVLS/D0FmoE44XuDr3iQkVS2ujU5zZL84mMNqNB1znh
21
21
  GiadM9GHRaDiaxuX0cIUBj19T01mVE2iymf9I6bEsiayK/n6QujtyCbTWsAS9Rqt
22
22
  qhtV7HJxNKuPj/JFH0D2cswvzznE/a5FOYO68g+YCuFi5L8wZuuM8zzdwjrWHqSV
23
- gBEfoTEGr7Zii72cx+sCAwEAAaM5MDcwCQYDVR0TBAIwADALBgNVHQ8EBAMCBLAw
24
- HQYDVR0OBBYEFEfFe9md/r/tj/Wmwpy+MI8d9k/hMA0GCSqGSIb3DQEBBQUAA4IB
25
- AQB+Hx8xUgrpZa4P8H8gR8zme5kISwQrG80MbpqJV6/G3/ZicRFhN5sjwu0uHGue
26
- bd9Cymf6oIRwHVarJux2M32T6bL07Hmi07w2QaPc3MnMKB/D46SRZ2JSSGPFRBTc
27
- SilobMRoGs/7B15uGFUEnNrCB/ltMqhwwSx1r++UQPfeySHEV9uqu03E5Vb7J37O
28
- 2Er6PLXHRiYsIycD1LkMi6YnixdITRHmrqJYE2rsjaIfpIehiusVAPHkNf7qbpHq
29
- qx3h45R1CAsObX0SQDIT+rRbQrtKz1GHIZTOFYvEJjUY1XmRTZupD3CJ8Q7sDqSy
30
- NLq5jm1fq6Y9Uolu3RJbmycf
23
+ gBEfoTEGr7Zii72cx+sCAwEAAaOBhDCBgTAJBgNVHRMEAjAAMAsGA1UdDwQEAwIE
24
+ sDAdBgNVHQ4EFgQUR8V72Z3+v+2P9abCnL4wjx32T+EwIwYDVR0RBBwwGoEYcnlh
25
+ bmQtcnVieUB6ZW5zcGlkZXIuY29tMCMGA1UdEgQcMBqBGHJ5YW5kLXJ1YnlAemVu
26
+ c3BpZGVyLmNvbTANBgkqhkiG9w0BAQUFAAOCAQEAIGzgp0aZ2W9+v96ujmBcQHoC
27
+ buy0iU68MVj2VlxMyfr1KPZIh1OyhU4UO4zrkREcH8ML70v9cYHNvOd9oynRHnvC
28
+ l2tj/fD3YJ0AEkJxGrYwRWQmvMfC4bJ02bC1+rVOUIXXKp3+cUmiN4sTniof8VFo
29
+ bo/YYP4c7erpERa+9hrqygg6WQbJlk2YRlH3JXPFjmu869i2dcbR5ZLOAeEy+axH
30
+ E4oJcnPkJAr0rw504JGtlZtONZQblwmRJOIdXzolaE3NRGUzGVOUSptZppAKiavY
31
+ fO6tdKQc/5RfA8oQEkg8hrxA5PQSz4TOFJGLpFvIapEk6tMruQ0bHgkhr9auXg==
31
32
  -----END CERTIFICATE-----
32
- date: 2016-08-24 00:00:00.000000000 Z
33
+ date: 2017-04-14 00:00:00.000000000 Z
33
34
  dependencies:
34
35
  - !ruby/object:Gem::Dependency
35
36
  name: sexp_processor
36
37
  requirement: !ruby/object:Gem::Requirement
37
38
  requirements:
38
- - - ~>
39
+ - - "~>"
39
40
  - !ruby/object:Gem::Version
40
41
  version: '4.0'
41
42
  type: :runtime
42
43
  prerelease: false
43
44
  version_requirements: !ruby/object:Gem::Requirement
44
45
  requirements:
45
- - - ~>
46
+ - - "~>"
46
47
  - !ruby/object:Gem::Version
47
48
  version: '4.0'
48
49
  - !ruby/object:Gem::Dependency
49
50
  name: ruby_parser
50
51
  requirement: !ruby/object:Gem::Requirement
51
52
  requirements:
52
- - - ~>
53
+ - - "~>"
53
54
  - !ruby/object:Gem::Version
54
55
  version: '3.0'
55
56
  type: :runtime
56
57
  prerelease: false
57
58
  version_requirements: !ruby/object:Gem::Requirement
58
59
  requirements:
59
- - - ~>
60
+ - - "~>"
60
61
  - !ruby/object:Gem::Version
61
62
  version: '3.0'
62
63
  - !ruby/object:Gem::Dependency
63
64
  name: erubis
64
65
  requirement: !ruby/object:Gem::Requirement
65
66
  requirements:
66
- - - ~>
67
+ - - "~>"
67
68
  - !ruby/object:Gem::Version
68
69
  version: 2.7.0
69
70
  type: :runtime
70
71
  prerelease: false
71
72
  version_requirements: !ruby/object:Gem::Requirement
72
73
  requirements:
73
- - - ~>
74
+ - - "~>"
74
75
  - !ruby/object:Gem::Version
75
76
  version: 2.7.0
76
77
  - !ruby/object:Gem::Dependency
77
78
  name: path_expander
78
79
  requirement: !ruby/object:Gem::Requirement
79
80
  requirements:
80
- - - ~>
81
+ - - "~>"
81
82
  - !ruby/object:Gem::Version
82
83
  version: '1.0'
83
84
  type: :runtime
84
85
  prerelease: false
85
86
  version_requirements: !ruby/object:Gem::Requirement
86
87
  requirements:
87
- - - ~>
88
+ - - "~>"
88
89
  - !ruby/object:Gem::Version
89
90
  version: '1.0'
90
91
  - !ruby/object:Gem::Dependency
91
- name: rdoc
92
+ name: minitest
92
93
  requirement: !ruby/object:Gem::Requirement
93
94
  requirements:
94
- - - ~>
95
+ - - "~>"
95
96
  - !ruby/object:Gem::Version
96
- version: '4.0'
97
+ version: 5.8.0
97
98
  type: :development
98
99
  prerelease: false
99
100
  version_requirements: !ruby/object:Gem::Requirement
100
101
  requirements:
101
- - - ~>
102
+ - - "~>"
102
103
  - !ruby/object:Gem::Version
103
- version: '4.0'
104
+ version: 5.8.0
104
105
  - !ruby/object:Gem::Dependency
105
- name: minitest
106
+ name: ruby2ruby
106
107
  requirement: !ruby/object:Gem::Requirement
107
108
  requirements:
108
- - - ~>
109
+ - - "~>"
109
110
  - !ruby/object:Gem::Version
110
- version: 5.8.0
111
+ version: 2.2.0
111
112
  type: :development
112
113
  prerelease: false
113
114
  version_requirements: !ruby/object:Gem::Requirement
114
115
  requirements:
115
- - - ~>
116
+ - - "~>"
116
117
  - !ruby/object:Gem::Version
117
- version: 5.8.0
118
+ version: 2.2.0
118
119
  - !ruby/object:Gem::Dependency
119
- name: ruby2ruby
120
+ name: rdoc
120
121
  requirement: !ruby/object:Gem::Requirement
121
122
  requirements:
122
- - - ~>
123
+ - - "~>"
123
124
  - !ruby/object:Gem::Version
124
- version: 2.2.0
125
+ version: '4.0'
125
126
  type: :development
126
127
  prerelease: false
127
128
  version_requirements: !ruby/object:Gem::Requirement
128
129
  requirements:
129
- - - ~>
130
+ - - "~>"
130
131
  - !ruby/object:Gem::Version
131
- version: 2.2.0
132
+ version: '4.0'
132
133
  - !ruby/object:Gem::Dependency
133
134
  name: hoe
134
135
  requirement: !ruby/object:Gem::Requirement
135
136
  requirements:
136
- - - ~>
137
+ - - "~>"
137
138
  - !ruby/object:Gem::Version
138
- version: '3.15'
139
+ version: '3.16'
139
140
  type: :development
140
141
  prerelease: false
141
142
  version_requirements: !ruby/object:Gem::Requirement
142
143
  requirements:
143
- - - ~>
144
+ - - "~>"
144
145
  - !ruby/object:Gem::Version
145
- version: '3.15'
146
+ version: '3.16'
146
147
  description: |-
147
148
  Flay analyzes code for structural similarities. Differences in literal
148
149
  values, variable, class, method names, whitespace, programming style,
@@ -173,23 +174,23 @@ licenses:
173
174
  metadata: {}
174
175
  post_install_message:
175
176
  rdoc_options:
176
- - --main
177
+ - "--main"
177
178
  - README.txt
178
179
  require_paths:
179
180
  - lib
180
181
  required_ruby_version: !ruby/object:Gem::Requirement
181
182
  requirements:
182
- - - '>='
183
+ - - ">="
183
184
  - !ruby/object:Gem::Version
184
185
  version: '0'
185
186
  required_rubygems_version: !ruby/object:Gem::Requirement
186
187
  requirements:
187
- - - '>='
188
+ - - ">="
188
189
  - !ruby/object:Gem::Version
189
190
  version: '0'
190
191
  requirements: []
191
192
  rubyforge_project:
192
- rubygems_version: 2.4.5
193
+ rubygems_version: 2.6.8
193
194
  signing_key:
194
195
  specification_version: 4
195
196
  summary: Flay analyzes code for structural similarities
metadata.gz.sig CHANGED
Binary file