rubycritic 3.1.0 → 3.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +7 -0
- data/README.md +7 -7
- data/docs/core-metrics.md +3 -3
- data/images/churn-vs-complexity.png +0 -0
- data/images/code.png +0 -0
- data/images/logo.png +0 -0
- data/images/overview.png +0 -0
- data/images/rating.png +0 -0
- data/images/reek.png +0 -0
- data/images/smell-details.png +0 -0
- data/images/smells.png +0 -0
- data/images/whitesmith.png +0 -0
- data/lib/rubycritic/core/analysed_module.rb +1 -1
- data/lib/rubycritic/generators/html/assets/javascripts/application.js +19 -5
- data/lib/rubycritic/generators/html/assets/javascripts/jquery.filtertable.min.js +13 -0
- data/lib/rubycritic/generators/html/assets/stylesheets/application.css +18 -0
- data/lib/rubycritic/generators/html/templates/layouts/application.html.erb +1 -0
- data/lib/rubycritic/generators/html/templates/smelly_line.html.erb +16 -14
- data/lib/rubycritic/source_control_systems/perforce.rb +9 -3
- data/lib/rubycritic/version.rb +1 -1
- data/rubycritic.gemspec +1 -1
- data/test/lib/rubycritic/source_control_systems/perforce_test.rb +10 -0
- metadata +14 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0555c63872e8ba208eed9e2b2ba2e409b6bcc2af
|
4
|
+
data.tar.gz: 4ec5b4de84de9b3f9ab6c864d9cf1056f38c07b8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 652e9d64e4ac113cb346833907e4d05b289f98f236aaa52970b40f9d472b38bf56bcb48fff30fc31d4e4774f28740dbbfafc5950a75c356d6bc3894b0dbf00bc
|
7
|
+
data.tar.gz: 20d381594ebb3ab984e95e0d62b00086ea379f119bbbd63698c51439f8e8b7ce83145b5d9bfba57d1d5c4e2868dee0cea239d5b3ef40d961decae640de9d240f
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,10 @@
|
|
1
|
+
# 3.1.1 / 2016-12-01
|
2
|
+
|
3
|
+
* [FEATURE] Implement search and filter on code and smells view (rohitcy)
|
4
|
+
* [CHANGE] Use Ruby's File instead of `wc` system command (by tejasbubane)
|
5
|
+
* [BUGFIX] Fix code navigation links in the new UI (by rohitcy)
|
6
|
+
* [BUGFIX] Add missing method 'head_reference' for Perforce source control (Rataah)
|
7
|
+
|
1
8
|
# 3.1.0 / 2016-11-23
|
2
9
|
|
3
10
|
* [FEATURE] Support for Perforce source control system (by Loic Gudet)
|
data/README.md
CHANGED
@@ -5,7 +5,7 @@ RubyCritic
|
|
5
5
|
[![Build Status](https://travis-ci.org/whitesmith/rubycritic.svg?branch=master)](https://travis-ci.org/whitesmith/rubycritic)
|
6
6
|
[![Code Climate](https://codeclimate.com/github/whitesmith/rubycritic/badges/gpa.svg)](https://codeclimate.com/github/whitesmith/rubycritic)
|
7
7
|
|
8
|
-
<img src="
|
8
|
+
<img src="/images/logo.png" alt="RubyCritic Icon" align="right" />
|
9
9
|
RubyCritic is a gem that wraps around static analysis gems such as [Reek][1], [Flay][2] and [Flog][3] to provide a quality report of your Ruby code.
|
10
10
|
|
11
11
|
**Table of Contents**
|
@@ -28,15 +28,15 @@ This gem provides features such as:
|
|
28
28
|
|
29
29
|
1. An overview of your project:
|
30
30
|
|
31
|
-
![RubyCritic overview screenshot](
|
31
|
+
![RubyCritic overview screenshot](/images/overview.png)
|
32
32
|
|
33
33
|
2. An index of the project files with their respective number of smells:
|
34
34
|
|
35
|
-
![RubyCritic code index screenshot](
|
35
|
+
![RubyCritic code index screenshot](/images/code.png)
|
36
36
|
|
37
37
|
3. An index of the smells detected:
|
38
38
|
|
39
|
-
![RubyCritic smells index screenshot](
|
39
|
+
![RubyCritic smells index screenshot](/images/smells.png)
|
40
40
|
|
41
41
|
4. When analysing code like the following:
|
42
42
|
|
@@ -52,11 +52,11 @@ This gem provides features such as:
|
|
52
52
|
|
53
53
|
It basically turns something like this:
|
54
54
|
|
55
|
-
![Reek output screenshot](
|
55
|
+
![Reek output screenshot](/images/reek.png)
|
56
56
|
|
57
57
|
Into something like this:
|
58
58
|
|
59
|
-
![RubyCritic file code screenshot](
|
59
|
+
![RubyCritic file code screenshot](/images/smell-details.png)
|
60
60
|
|
61
61
|
5. It uses your source control system (only Git, Mercurial and Perforce
|
62
62
|
are currently supported) to compare your currently uncommitted
|
@@ -215,7 +215,7 @@ The current core team consists of:
|
|
215
215
|
|
216
216
|
## Credits
|
217
217
|
|
218
|
-
![Whitesmith](
|
218
|
+
![Whitesmith](/images/whitesmith.png)
|
219
219
|
|
220
220
|
RubyCritic is maintained and funded by [Whitesmith][9]. Tweet your questions or suggestions to [@Whitesmithco][10].
|
221
221
|
|
data/docs/core-metrics.md
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
RubyCritic wraps around static analysis gems such as [Reek][2], [Flay][3] and [Flog][4] to provide a quality report of your Ruby code.
|
4
4
|
|
5
5
|
Each of these gems are internally wrapped as an **Analyser**, with a collection of **AnalysedModule**s, which give us calculations of key metrics.
|
6
|
-
The most important ones are **churn**, **complexity**, **cost** and **rating**.
|
6
|
+
The most important ones are **churn**, **complexity**, **cost** and **rating**.
|
7
7
|
|
8
8
|
The output of RubyCritic will give you four values to help you judge your code's _odorousness_:
|
9
9
|
|
@@ -40,7 +40,7 @@ Complexity is the output of [Flog][4]. You can [read more about how it works][7]
|
|
40
40
|
|
41
41
|
Both **churn** and **complexity** are presented as a chart:
|
42
42
|
|
43
|
-
![RubyCritic overview screenshot](
|
43
|
+
![RubyCritic overview screenshot](/images/churn-vs-complexity.png)
|
44
44
|
|
45
45
|
Each file is represented by a dot. **The closer they are to the bottom-left corner, the better.**
|
46
46
|
But keep in mind that you cannot reduce churn (well... not unless you re-write your repo's history :neckbeard:), so try to keep the dots as close to the bottom as possible.
|
@@ -54,7 +54,7 @@ Generally `A`'s & `B`'s are good enough, `C`'s serve as a warning and `D`'s & `F
|
|
54
54
|
|
55
55
|
**Rating** is simply [a conversion][5] from the calculated **cost** to a letter.
|
56
56
|
|
57
|
-
![RubyCritic code index screenshot](
|
57
|
+
![RubyCritic code index screenshot](/images/rating.png)
|
58
58
|
|
59
59
|
### Cost
|
60
60
|
|
Binary file
|
data/images/code.png
ADDED
Binary file
|
data/images/logo.png
ADDED
Binary file
|
data/images/overview.png
ADDED
Binary file
|
data/images/rating.png
ADDED
Binary file
|
data/images/reek.png
ADDED
Binary file
|
Binary file
|
data/images/smells.png
ADDED
Binary file
|
Binary file
|
@@ -168,8 +168,6 @@ function getRatingWiseCount(rating){
|
|
168
168
|
return count;
|
169
169
|
};
|
170
170
|
|
171
|
-
emphasizeLineFromFragment();
|
172
|
-
|
173
171
|
function emphasizeLineFromFragment() {
|
174
172
|
emphasizeLine(window.location.hash)
|
175
173
|
}
|
@@ -195,12 +193,11 @@ function emphasizeLine(lineReference) {
|
|
195
193
|
}
|
196
194
|
|
197
195
|
function scrollToTarget(lineReference) {
|
196
|
+
window.location.hash = lineReference;
|
198
197
|
$.scrollTo(lineReference, {
|
199
198
|
duration: 300,
|
200
199
|
easing: "linear",
|
201
|
-
|
202
|
-
window.location.hash = lineReference;
|
203
|
-
}
|
200
|
+
offset: {top: -87}
|
204
201
|
});
|
205
202
|
}
|
206
203
|
|
@@ -251,3 +248,20 @@ $(function(){
|
|
251
248
|
}
|
252
249
|
});
|
253
250
|
});
|
251
|
+
|
252
|
+
function assignIdsToCodeLines(){
|
253
|
+
$($('.linenums')[1]).children().each(function(index){
|
254
|
+
$(this).attr('id', "L" + index)
|
255
|
+
});
|
256
|
+
};
|
257
|
+
|
258
|
+
$(document).ready(function(){
|
259
|
+
assignIdsToCodeLines();
|
260
|
+
emphasizeLineFromFragment();
|
261
|
+
initTableFilters();
|
262
|
+
});
|
263
|
+
|
264
|
+
var initTableFilters = function() {
|
265
|
+
$("#codeTable").filterTable({ignoreColumns: [2], placeholder: 'Filter by Name'});
|
266
|
+
$("#js-index-table").filterTable({ignoreColumns: [2, 3, 4, 5], placeholder: 'Filter by Smell or Location', inputSelector: 'form-control'});
|
267
|
+
}
|
@@ -0,0 +1,13 @@
|
|
1
|
+
/**
|
2
|
+
* jquery.filterTable
|
3
|
+
*
|
4
|
+
* This plugin will add a search filter to tables. When typing in the filter,
|
5
|
+
* any rows that do not contain the filter will be hidden.
|
6
|
+
*
|
7
|
+
* Utilizes bindWithDelay() if available. https://github.com/bgrins/bindWithDelay
|
8
|
+
*
|
9
|
+
* @version v1.5.6
|
10
|
+
* @author Sunny Walker, swalker@hawaii.edu
|
11
|
+
* @license MIT
|
12
|
+
*/
|
13
|
+
!function($){var e=$.fn.jquery.split("."),t=parseFloat(e[0]),n=parseFloat(e[1]);2>t&&8>n?($.expr[":"].filterTableFind=function(e,t,n){return $(e).text().toUpperCase().indexOf(n[3].toUpperCase().replace(/"""/g,'"').replace(/"\\"/g,"\\"))>=0},$.expr[":"].filterTableFindAny=function(e,t,n){var i=n[3].split(/[\s,]/),r=[];return $.each(i,function(e,t){var n=t.replace(/^\s+|\s$/g,"");n&&r.push(n)}),r.length?function(e){var t=!1;return $.each(r,function(n,i){return $(e).text().toUpperCase().indexOf(i.toUpperCase().replace(/"""/g,'"').replace(/"\\"/g,"\\"))>=0?(t=!0,!1):void 0}),t}:!1},$.expr[":"].filterTableFindAll=function(e,t,n){var i=n[3].split(/[\s,]/),r=[];return $.each(i,function(e,t){var n=t.replace(/^\s+|\s$/g,"");n&&r.push(n)}),r.length?function(e){var t=0;return $.each(r,function(n,i){$(e).text().toUpperCase().indexOf(i.toUpperCase().replace(/"""/g,'"').replace(/"\\"/g,"\\"))>=0&&t++}),t===r.length}:!1}):($.expr[":"].filterTableFind=jQuery.expr.createPseudo(function(e){return function(t){return $(t).text().toUpperCase().indexOf(e.toUpperCase().replace(/"""/g,'"').replace(/"\\"/g,"\\"))>=0}}),$.expr[":"].filterTableFindAny=jQuery.expr.createPseudo(function(e){var t=e.split(/[\s,]/),n=[];return $.each(t,function(e,t){var i=t.replace(/^\s+|\s$/g,"");i&&n.push(i)}),n.length?function(e){var t=!1;return $.each(n,function(n,i){return $(e).text().toUpperCase().indexOf(i.toUpperCase().replace(/"""/g,'"').replace(/"\\"/g,"\\"))>=0?(t=!0,!1):void 0}),t}:!1}),$.expr[":"].filterTableFindAll=jQuery.expr.createPseudo(function(e){var t=e.split(/[\s,]/),n=[];return $.each(t,function(e,t){var i=t.replace(/^\s+|\s$/g,"");i&&n.push(i)}),n.length?function(e){var t=0;return $.each(n,function(n,i){$(e).text().toUpperCase().indexOf(i.toUpperCase().replace(/"""/g,'"').replace(/"\\"/g,"\\"))>=0&&t++}),t===n.length}:!1})),$.fn.filterTable=function(e){var t={autofocus:!1,callback:null,containerClass:"filter-table",containerTag:"p",filterExpression:"filterTableFind",hideTFootOnFilter:!1,highlightClass:"alt",ignoreClass:"",ignoreColumns:[],inputSelector:null,inputName:"",inputType:"search",label:"Filter:",minChars:1,minRows:8,placeholder:"search this table",preventReturnKey:!0,quickList:[],quickListClass:"quick",quickListGroupTag:"",quickListTag:"a",visibleClass:"visible"},n=function(e){return e.replace(/&/g,"&").replace(/"/g,""").replace(/</g,"<").replace(/>/g,">")},i=$.extend({},t,e),r=function(e,t){var n=e.find("tbody");if(""===t||t.length<i.minChars)n.find("tr").show().addClass(i.visibleClass),n.find("td").removeClass(i.highlightClass),i.hideTFootOnFilter&&e.find("tfoot").show();else{var r=n.find("td");if(n.find("tr").hide().removeClass(i.visibleClass),r.removeClass(i.highlightClass),i.hideTFootOnFilter&&e.find("tfoot").hide(),i.ignoreColumns.length){var a=[];i.ignoreClass&&(r=r.not("."+i.ignoreClass)),a=r.filter(":"+i.filterExpression+'("'+t+'")'),a.each(function(){var e=$(this),t=e.parent().children().index(e);-1===$.inArray(t,i.ignoreColumns)&&e.addClass(i.highlightClass).closest("tr").show().addClass(i.visibleClass)})}else i.ignoreClass&&(r=r.not("."+i.ignoreClass)),r.filter(":"+i.filterExpression+'("'+t+'")').addClass(i.highlightClass).closest("tr").show().addClass(i.visibleClass)}i.callback&&i.callback(t,e)};return this.each(function(){var e=$(this),t=e.find("tbody"),a=null,l=null,s=null,o=!0;"TABLE"===e[0].nodeName&&t.length>0&&(0===i.minRows||i.minRows>0&&t.find("tr").length>=i.minRows)&&!e.prev().hasClass(i.containerClass)&&(i.inputSelector&&1===$(i.inputSelector).length?(s=$(i.inputSelector),a=s.parent(),o=!1):(a=$("<"+i.containerTag+" />"),""!==i.containerClass&&a.addClass(i.containerClass),a.prepend(i.label+" "),s=$('<input type="'+i.inputType+'" placeholder="'+i.placeholder+'" name="'+i.inputName+'" />'),i.preventReturnKey&&s.on("keydown",function(e){return 13===(e.keyCode||e.which)?(e.preventDefault(),!1):void 0})),i.autofocus&&s.attr("autofocus",!0),$.fn.bindWithDelay?s.bindWithDelay("keyup",function(){r(e,$(this).val())},200):s.bind("keyup",function(){r(e,$(this).val())}),s.bind("click search input paste blur",function(){r(e,$(this).val())}),o&&a.append(s),i.quickList.length>0&&(l=i.quickListGroupTag?$("<"+i.quickListGroupTag+" />"):a,$.each(i.quickList,function(e,t){var r=$("<"+i.quickListTag+' class="'+i.quickListClass+'" />');r.text(n(t)),"A"===r[0].nodeName&&r.attr("href","#"),r.bind("click",function(e){e.preventDefault(),s.val(t).focus().trigger("click")}),l.append(r)}),l!==a&&a.append(l)),o&&e.before(a))})}}(jQuery);
|
@@ -526,3 +526,21 @@ span.metric {
|
|
526
526
|
display: inline-block;
|
527
527
|
margin-left: 20px;
|
528
528
|
}
|
529
|
+
|
530
|
+
.filter-table {
|
531
|
+
text-align: right;
|
532
|
+
}
|
533
|
+
|
534
|
+
.filter-table input {
|
535
|
+
width: 200px;
|
536
|
+
display: inline;
|
537
|
+
height: 34px;
|
538
|
+
padding: 6px 12px;
|
539
|
+
font-size: 14px;
|
540
|
+
line-height: 1.42857143;
|
541
|
+
color: #555;
|
542
|
+
background-color: #fff;
|
543
|
+
background-image: none;
|
544
|
+
border: 1px solid #ccc;
|
545
|
+
border-radius: 4px;
|
546
|
+
}
|
@@ -2,20 +2,22 @@
|
|
2
2
|
|
3
3
|
<div class="nocode errors smells">
|
4
4
|
<% @smells.each do |smell| %>
|
5
|
-
<
|
6
|
-
<div class="
|
7
|
-
<
|
8
|
-
<
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
5
|
+
<li>
|
6
|
+
<div class="description">
|
7
|
+
<div class="heading">
|
8
|
+
<span>
|
9
|
+
<i class="fa fa-warning" aria-hidden"true"=""></i>
|
10
|
+
<a href="<%= smell.doc_url %>" target="_blank"><b><%= smell.type %></b></a>
|
11
|
+
</span>
|
12
|
+
</div>
|
13
|
+
<span><%= "#{smell.context} #{smell.message}" %></span>
|
14
|
+
<% if smell.multiple_locations? %>
|
15
|
+
<span>Locations:</span>
|
16
|
+
<% smell.locations.each_with_index do |location, index| %>
|
17
|
+
<a href="<%= smell_location_path(location) %>" class="js-smell-location"><%= index %></a>
|
18
|
+
<% end %>
|
17
19
|
<% end %>
|
18
|
-
|
19
|
-
</
|
20
|
+
</div>
|
21
|
+
</li>
|
20
22
|
<% end %>
|
21
23
|
</div>
|
@@ -3,7 +3,8 @@ require 'date'
|
|
3
3
|
|
4
4
|
module RubyCritic
|
5
5
|
module SourceControlSystem
|
6
|
-
|
6
|
+
PERFORCE_FSTAT_OPTS = '-F "clientFile=*.rb" -T clientFile,headRev,headTime,headChange,action'.freeze
|
7
|
+
PerforceStats = Struct.new(:filename, :revision, :last_commit, :opened?, :head)
|
7
8
|
|
8
9
|
class Perforce < Base
|
9
10
|
register_system
|
@@ -53,12 +54,16 @@ module RubyCritic
|
|
53
54
|
!perforce_files.values.count(&:opened?).zero?
|
54
55
|
end
|
55
56
|
|
57
|
+
def head_reference
|
58
|
+
perforce_files.values.map(&:head).max_by(&:to_i)
|
59
|
+
end
|
60
|
+
|
56
61
|
def self.build_file_cache
|
57
62
|
# Chun is very slow if files stats are requested one by one
|
58
63
|
# this fill a hash with the result of all ruby file in the current directory (and sub-directories)
|
59
64
|
{}.tap do |file_cache|
|
60
65
|
line_aggregator = []
|
61
|
-
`p4 fstat
|
66
|
+
`p4 fstat #{PERFORCE_FSTAT_OPTS} #{Dir.getwd}...`.each_line do |line|
|
62
67
|
Perforce.compute_line(file_cache, line_aggregator, line)
|
63
68
|
end
|
64
69
|
# handle remaining lines
|
@@ -86,7 +91,8 @@ module RubyCritic
|
|
86
91
|
Perforce.normalized_file_path(perforce_lines['clientFile']),
|
87
92
|
perforce_lines['headRev'],
|
88
93
|
perforce_lines['headTime'],
|
89
|
-
perforce_lines.key?('action')
|
94
|
+
perforce_lines.key?('action'),
|
95
|
+
perforce_lines['headChange']
|
90
96
|
)
|
91
97
|
end
|
92
98
|
|
data/lib/rubycritic/version.rb
CHANGED
data/rubycritic.gemspec
CHANGED
@@ -25,7 +25,7 @@ Gem::Specification.new do |spec|
|
|
25
25
|
spec.add_runtime_dependency 'flay', '~> 2.8'
|
26
26
|
spec.add_runtime_dependency 'flog', '~> 4.4'
|
27
27
|
spec.add_runtime_dependency 'reek', '~> 4.4'
|
28
|
-
spec.add_runtime_dependency 'parser', '2.3.1
|
28
|
+
spec.add_runtime_dependency 'parser', '2.3.3.1'
|
29
29
|
spec.add_runtime_dependency 'ruby_parser', '~> 3.8'
|
30
30
|
spec.add_runtime_dependency 'rainbow'
|
31
31
|
spec.add_runtime_dependency 'launchy', '2.4.3'
|
@@ -110,11 +110,13 @@ Server address: the.server.address.com
|
|
110
110
|
... clientFile /path/to/client/a_ruby_file.rb
|
111
111
|
... headTime 1473075551
|
112
112
|
... headRev 16
|
113
|
+
... headChange 2103503
|
113
114
|
|
114
115
|
... clientFile /path/to/client/second_ruby_file.rb
|
115
116
|
... headTime 1464601668
|
116
117
|
... action opened
|
117
118
|
... headRev 12
|
119
|
+
... headChange 2103504
|
118
120
|
END
|
119
121
|
end
|
120
122
|
|
@@ -128,12 +130,14 @@ Server address: the.server.address.com
|
|
128
130
|
first_file.filename.must_equal '/path/to/client/a_ruby_file.rb'
|
129
131
|
first_file.revision.must_equal '16'
|
130
132
|
first_file.last_commit.must_equal '1473075551'
|
133
|
+
first_file.head.must_equal '2103503'
|
131
134
|
first_file.opened?.must_equal false
|
132
135
|
|
133
136
|
second_file = file_cache['/path/to/client/second_ruby_file.rb']
|
134
137
|
second_file.filename.must_equal '/path/to/client/second_ruby_file.rb'
|
135
138
|
second_file.revision.must_equal '12'
|
136
139
|
second_file.last_commit.must_equal '1464601668'
|
140
|
+
second_file.head.must_equal '2103504'
|
137
141
|
second_file.opened?.must_equal true
|
138
142
|
end
|
139
143
|
end
|
@@ -157,6 +161,12 @@ Server address: the.server.address.com
|
|
157
161
|
RubyCritic::SourceControlSystem::Perforce.stubs(:`).once.returns(p4_stats)
|
158
162
|
@system.revision?.must_equal true
|
159
163
|
end
|
164
|
+
|
165
|
+
it 'retrieves the head reference of the repository' do
|
166
|
+
Dir.stubs(:getwd).returns('/path/to/client')
|
167
|
+
RubyCritic::SourceControlSystem::Perforce.stubs(:`).once.returns(p4_stats)
|
168
|
+
@system.head_reference.must_equal '2103504'
|
169
|
+
end
|
160
170
|
end
|
161
171
|
end
|
162
172
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rubycritic
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.1.
|
4
|
+
version: 3.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Guilherme Simoes
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-12-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: virtus
|
@@ -72,14 +72,14 @@ dependencies:
|
|
72
72
|
requirements:
|
73
73
|
- - '='
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version: 2.3.1
|
75
|
+
version: 2.3.3.1
|
76
76
|
type: :runtime
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
80
|
- - '='
|
81
81
|
- !ruby/object:Gem::Version
|
82
|
-
version: 2.3.1
|
82
|
+
version: 2.3.3.1
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
84
|
name: ruby_parser
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
@@ -265,6 +265,15 @@ files:
|
|
265
265
|
- features/step_definitions/rubycritic_steps.rb
|
266
266
|
- features/step_definitions/sample_file_steps.rb
|
267
267
|
- features/support/env.rb
|
268
|
+
- images/churn-vs-complexity.png
|
269
|
+
- images/code.png
|
270
|
+
- images/logo.png
|
271
|
+
- images/overview.png
|
272
|
+
- images/rating.png
|
273
|
+
- images/reek.png
|
274
|
+
- images/smell-details.png
|
275
|
+
- images/smells.png
|
276
|
+
- images/whitesmith.png
|
268
277
|
- lib/rubycritic.rb
|
269
278
|
- lib/rubycritic/analysers/attributes.rb
|
270
279
|
- lib/rubycritic/analysers/churn.rb
|
@@ -316,6 +325,7 @@ files:
|
|
316
325
|
- lib/rubycritic/generators/html/assets/javascripts/application.js
|
317
326
|
- lib/rubycritic/generators/html/assets/javascripts/bootstrap.min.js
|
318
327
|
- lib/rubycritic/generators/html/assets/javascripts/highcharts.src-4.0.1.js
|
328
|
+
- lib/rubycritic/generators/html/assets/javascripts/jquery.filtertable.min.js
|
319
329
|
- lib/rubycritic/generators/html/assets/javascripts/jquery.min.js
|
320
330
|
- lib/rubycritic/generators/html/assets/javascripts/jquery.scrollTo.min.js
|
321
331
|
- lib/rubycritic/generators/html/assets/javascripts/jquery.tablesorter.js
|