code_clone_detector 0.1.0 → 1.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1b6ebc34e7413e220098c2af034535a630238df2876d58cc43e708290d8c7ad2
4
- data.tar.gz: da38cb1aacc115868a434789ca6b31c801f7f0915590b7f78da04b2feabb1fe8
3
+ metadata.gz: cb73e7027d251f842500379f60cb202a1701f3d7f68d3d7d198fb0cc7ed5eb9d
4
+ data.tar.gz: 6f7149b3302e525180ad6ccf39b726f8a53006d4c76de704de49d72c28894e6b
5
5
  SHA512:
6
- metadata.gz: f8d03c360b15fea254151ecbdfd57590a0280ec49ae0ff5bbb12c4629707bdfee9ca78ad01756e9d3199ca58ab2d171e0077af70000aa388666cf5273403b103
7
- data.tar.gz: 8b34b58c742d322b64abebe9c81a6b00cf13220cafa378a0429e0d160aac04c5714cf64816205838ffcbced22e8c93a9e7ad2cff0e8e6afbe32633580601d9b0
6
+ metadata.gz: 16b0d96d934ae327e46c768eadbec033545a3ac4d404f9655edfe2496650f89eeea301edd6a1e9a85bcd6b788b9bc761a48fcf1ddb41ed3c6a937b96af06e71f
7
+ data.tar.gz: 7df5043efe1bd00a89cd37d17dfd90e9467c71b684325e91ffb1dfde23c9de8352f9821a9914c7c120da4ceaa9b09fcbed560eefe2904a7b907c9097c9cc83cd
data/.rubocop.yml CHANGED
@@ -5,9 +5,15 @@ Style/StringLiterals:
5
5
  Enabled: true
6
6
  EnforcedStyle: double_quotes
7
7
 
8
+ Documentation:
9
+ Enabled: false
10
+
8
11
  Style/StringLiteralsInInterpolation:
9
12
  Enabled: true
10
13
  EnforcedStyle: double_quotes
11
14
 
12
15
  Layout/LineLength:
13
16
  Max: 120
17
+
18
+ Metrics/BlockLength:
19
+ Enabled: false
data/CHANGELOG.md CHANGED
@@ -1,5 +1,10 @@
1
- ## [Unreleased]
1
+ # Changelog
2
+
3
+ ## [1.0.0] - 2023-03-07
4
+
5
+ - Add function to detect code clone
2
6
 
3
7
  ## [0.1.0] - 2023-03-04
4
8
 
5
9
  - Initial release
10
+ - Add function that returns hello world
data/README.md CHANGED
@@ -22,8 +22,11 @@ Or install it yourself as:
22
22
 
23
23
  ## Usage
24
24
 
25
- TODO: Write usage instructions here
25
+ Execute as:
26
26
 
27
+ $ bundle exec code_clone_detector
28
+
29
+ You can detect the largest code clone.
27
30
  ## Development
28
31
 
29
32
  After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
@@ -23,7 +23,7 @@ Gem::Specification.new do |spec|
23
23
  `git ls-files -z`.split("\x0").reject { |f| f.match(%r{\A(?:test|spec|features)/}) }
24
24
  end
25
25
  spec.bindir = "exe"
26
- spec.executables = spec.files.grep(%r{\Aexe/}) { |f| File.basename(f) }
26
+ spec.executables = ["code_clone_detector"]
27
27
  spec.require_paths = ["lib"]
28
28
 
29
29
  # Uncomment to register a new dependency of your gem
@@ -0,0 +1,101 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ require "code_clone_detector"
5
+
6
+ require "ripper"
7
+
8
+ code = []
9
+
10
+ Dir.glob("**/*") do |item|
11
+ if item.include?(".rb")
12
+ File.open(item, "r") do |f|
13
+ tmp = f.read
14
+ code.push([item.to_s, Ripper.lex(tmp)])
15
+ end
16
+ end
17
+ end
18
+
19
+ max = 0
20
+ sx = 0
21
+ ex = 0
22
+ sy = 0
23
+ ey = 0
24
+ index1 = 0
25
+ index2 = 0
26
+
27
+ (0..code.size - 2).each do |a|
28
+ (a + 1..code.size - 1).each do |b|
29
+ array = []
30
+
31
+ x = 0
32
+
33
+ code[1][1].each do |i|
34
+ array.push([])
35
+ code[3][1].each do |j|
36
+ if i[1] == j[1]
37
+ array[x].push(1)
38
+ else
39
+ array[x].push(0)
40
+ end
41
+ end
42
+ x += 1
43
+ end
44
+
45
+ tmp_max = 0
46
+ tmp_sx = 0
47
+ tmp_ex = 0
48
+ tmp_sy = 0
49
+ tmp_ey = 0
50
+ array.size.times do |i|
51
+ array[i].size.times do |j|
52
+ next unless array[i - 1][j - 1].nil? || array[i - 1][j - 1].zero?
53
+ next unless array[i][j] == 1
54
+
55
+ maxv = 1
56
+ x = j
57
+ y = i
58
+ while !array[y + 1].nil? && !array[y + 1][x + 1].nil? && array[y + 1][x + 1] == 1
59
+ maxv += 1
60
+ x += 1
61
+ y += 1
62
+ end
63
+ next unless maxv > tmp_max
64
+
65
+ tmp_max = maxv
66
+ tmp_sx = j
67
+ tmp_ex = x
68
+ tmp_sy = i
69
+ tmp_ey = y
70
+ end
71
+ end
72
+
73
+ next unless tmp_max > max
74
+
75
+ max = tmp_max
76
+ sx = tmp_sx
77
+ ex = tmp_ex
78
+ sy = tmp_sy
79
+ ey = tmp_ey
80
+ index1 = a
81
+ index2 = b
82
+ end
83
+ end
84
+
85
+ file_1_name = code[index1][0]
86
+ file1 = code[index1][1]
87
+ file_2_name = code[index2][0]
88
+ file2 = code[index2][1]
89
+ print "#{file_1_name}:"
90
+ print "#{file1[sy][0][0]},#{file1[sy][0][1]} ~ #{file1[ey][0][0]},#{file1[ey][0][1]}\n"
91
+ code[1][1][sy..ey].transpose[2].each do |i|
92
+ print i
93
+ end
94
+
95
+ puts "\n"
96
+
97
+ print "#{file_2_name}:"
98
+ print "#{file2[sx][0][0]},#{file2[sx][0][1]} ~ #{file2[ex][0][0]},#{file2[ex][0][1]}\n"
99
+ code[3][1][sx..ex].transpose[2].each do |i|
100
+ print i
101
+ end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module CodeCloneDetector
2
4
  class Hello
3
5
  def self.hello
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module CodeCloneDetector
4
- VERSION = "0.1.0"
4
+ VERSION = "1.0.0"
5
5
  end
metadata CHANGED
@@ -1,19 +1,20 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: code_clone_detector
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - MK-nn
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-03-05 00:00:00.000000000 Z
11
+ date: 2023-03-07 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description:
14
14
  email:
15
15
  - okuken99@gmail.com
16
- executables: []
16
+ executables:
17
+ - code_clone_detector
17
18
  extensions: []
18
19
  extra_rdoc_files: []
19
20
  files:
@@ -30,6 +31,7 @@ files:
30
31
  - bin/console
31
32
  - bin/setup
32
33
  - code_clone_detector.gemspec
34
+ - exe/code_clone_detector
33
35
  - lib/code_clone_detector.rb
34
36
  - lib/code_clone_detector/hello.rb
35
37
  - lib/code_clone_detector/version.rb