whatbug 0.0.2 → 0.0.3

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.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/bin/whatbug +39 -1
  3. metadata +1 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 6291b4ad75ed3a0cd9a6b3e97e76b15dfb863823
4
- data.tar.gz: e6d217e66bf3f62b2224090c4360b219a3693741
3
+ metadata.gz: ad92b7c1cf0bcf10aec822181217ca9e5c0443ba
4
+ data.tar.gz: 2dca5eaa1876b7739c9a87ae7dbc3a5140096137
5
5
  SHA512:
6
- metadata.gz: cc7cd9d0add3f6189d8a1c7eaac271b1aac2c8ddc803051a143e25f05a54a0d497c5013b85b016d721c799baa8188105fc9fb021ccd783f0b8af4e5817445c37
7
- data.tar.gz: cf4521d3c8a9a65d7d0aef6b4343d2fa63d988471a59c47bedf6fbd42b63d28d45f95c982bab77d0ffcccf5c0afb193d522201a90de68085bfd3102c8113f965
6
+ metadata.gz: b807596c8076d7cf1792a12a186497f6092201f8dd099f9355f7a930a16b0aa6fd96aff8c065355a6296dd3cdd96bb8ee4534759c58ca7141333ab80de3e7612
7
+ data.tar.gz: 16a9c84381c3991d7d7516a2c3ba67d0c377bbb1c8d9e1ae22321270286c91ac12300bd353d020aa1a56888da62c8de5c275b929396d6a4ff312e52350341bb5
data/bin/whatbug CHANGED
@@ -76,8 +76,31 @@ def map_code(file, func, line, cutoff)
76
76
  end
77
77
  end
78
78
 
79
- def render(traced_functions)
79
+ def score(traced_functions)
80
80
  traced_functions
81
+ .flat_map { |file, funcs| funcs.values.flatten }
82
+ .reduce({experts: {}, suspects: {}, depth: 0}) do |acc, line|
83
+ author = line[:blame][:author]
84
+ acc[:experts][author] ||= 0
85
+ acc[:experts][author] += 1
86
+
87
+ if line[:changed]
88
+ acc[:suspects][author] ||= 0
89
+ acc[:suspects][author] += 1
90
+ end
91
+
92
+ if line[:in_trace]
93
+ acc[:depth] += 1
94
+ acc[:suspects][author] ||= 0
95
+ acc[:suspects][author] += 3.0 / acc[:depth]
96
+ end
97
+ acc
98
+ end
99
+ end
100
+
101
+ def render(traced_functions)
102
+ score = score(traced_functions)
103
+ trace = traced_functions
81
104
  .reduce([]) do |acc, (file_name, funcs)|
82
105
  funcs.each do |func_name, func|
83
106
  trace_line = func.detect { |l| l[:in_trace] }
@@ -93,6 +116,21 @@ def render(traced_functions)
93
116
  end
94
117
  acc
95
118
  end
119
+
120
+ experts = score[:experts]
121
+ .sort_by { |name, score| score }
122
+ .reverse
123
+ .map { |name, score| "#{name} (#{score.round(1)})" }
124
+
125
+ suspects = score[:suspects]
126
+ .sort_by { |name, score| score }
127
+ .reverse
128
+ .map { |name, score| "#{name} (#{score.round(1)})" }
129
+
130
+ [
131
+ "Experts: #{experts.join(", ")}",
132
+ "Suspects: #{suspects.join(", ")}"
133
+ ] + trace
96
134
  end
97
135
 
98
136
  def main(error_id, cutoff)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: whatbug
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brian Yahn