code_clone_detector 0.1.0 → 1.0.1

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
  SHA256:
3
- metadata.gz: 1b6ebc34e7413e220098c2af034535a630238df2876d58cc43e708290d8c7ad2
4
- data.tar.gz: da38cb1aacc115868a434789ca6b31c801f7f0915590b7f78da04b2feabb1fe8
3
+ metadata.gz: b3ad9bbb37d394ff8d6c7889f97bcaeeea88438aa2edd034b531247403b066ae
4
+ data.tar.gz: 010efab64699e544f7f3ae01cd631321225a814f4746dd970ecb4a696987680f
5
5
  SHA512:
6
- metadata.gz: f8d03c360b15fea254151ecbdfd57590a0280ec49ae0ff5bbb12c4629707bdfee9ca78ad01756e9d3199ca58ab2d171e0077af70000aa388666cf5273403b103
7
- data.tar.gz: 8b34b58c742d322b64abebe9c81a6b00cf13220cafa378a0429e0d160aac04c5714cf64816205838ffcbced22e8c93a9e7ad2cff0e8e6afbe32633580601d9b0
6
+ metadata.gz: dc5b19b19e2b553a057cb057f9798914e0ef96c8607067cca8a37d82bef053b8299fe86b56a01bb3996dda122b9bd4f3754fb2fb6d8ba967f1222bfcf618227c
7
+ data.tar.gz: b5111df9e521e4dc3be5ad0de6e1011063b1db375719c5e05bc1396c82a7387f2cab1827ce9bfaa55cca8d882730698e0d15f32d70f8963ad00a61c5f8f2a6a3
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,14 @@
1
- ## [Unreleased]
1
+ # Changelog
2
+
3
+ ## [1.0.1] - 2023-03-07
4
+
5
+ - Fix bug in specifying the array index
6
+
7
+ ## [1.0.0] - 2023-03-07
8
+
9
+ - Add function to detect code clone
2
10
 
3
11
  ## [0.1.0] - 2023-03-04
4
12
 
5
13
  - Initial release
14
+ - 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,102 @@
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[a][1].each do |i|
34
+ array.push([])
35
+ code[b][1].each do |j|
36
+ if i[2] == j[2]
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
+
51
+ array.size.times do |i|
52
+ array[i].size.times do |j|
53
+ next unless array[i - 1][j - 1].nil? || array[i - 1][j - 1].zero?
54
+ next unless array[i][j] == 1
55
+
56
+ maxv = 1
57
+ x = j
58
+ y = i
59
+ while !array[y + 1].nil? && !array[y + 1][x + 1].nil? && array[y + 1][x + 1] == 1
60
+ maxv += 1
61
+ x += 1
62
+ y += 1
63
+ end
64
+ next unless maxv > tmp_max
65
+
66
+ tmp_max = maxv
67
+ tmp_sx = j
68
+ tmp_ex = x
69
+ tmp_sy = i
70
+ tmp_ey = y
71
+ end
72
+ end
73
+
74
+ next unless tmp_max > max
75
+
76
+ max = tmp_max
77
+ sx = tmp_sx
78
+ ex = tmp_ex
79
+ sy = tmp_sy
80
+ ey = tmp_ey
81
+ index1 = a
82
+ index2 = b
83
+ end
84
+ end
85
+
86
+ file_1_name = code[index1][0]
87
+ file1 = code[index1][1]
88
+ file_2_name = code[index2][0]
89
+ file2 = code[index2][1]
90
+ print "#{file_1_name}:"
91
+ print "#{file1[sy][0][0]},#{file1[sy][0][1]} ~ #{file1[ey][0][0]},#{file1[ey][0][1]}\n"
92
+ code[1][1][sy..ey].transpose[2].each do |i|
93
+ print i
94
+ end
95
+
96
+ puts "===============================\n\n"
97
+
98
+ print "#{file_2_name}:"
99
+ print "#{file2[sx][0][0]},#{file2[sx][0][1]} ~ #{file2[ex][0][0]},#{file2[ex][0][1]}\n"
100
+ code[3][1][sx..ex].transpose[2].each do |i|
101
+ print i
102
+ 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.1"
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.1
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