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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: bf20b3c6aba1b1063bb8485305bf26e942fbd784
4
- data.tar.gz: cdb7f733d4376905de9845a930abd41367e0d561
3
+ metadata.gz: 0555c63872e8ba208eed9e2b2ba2e409b6bcc2af
4
+ data.tar.gz: 4ec5b4de84de9b3f9ab6c864d9cf1056f38c07b8
5
5
  SHA512:
6
- metadata.gz: 893f288ebe082485d63eb7534e322320e139f0daa48d038acb9fe02bd48c76ce26721858e98ddccffd157e0e66babe253d0263968018392b244849ad5e1945c5
7
- data.tar.gz: 05e1a071d9fdfab5b6b7eaed3d13fea7ae45b8f1a848ba005565321d37ba657c676874ff5db8fd6ccc0014345003afbedf72793adad152e5284ebda281b09e35
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="http://i.imgur.com/66HACCD.png" alt="RubyCritic Icon" align="right" />
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](http://i.imgur.com/oiE5O3X.png)
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](http://i.imgur.com/a0GCn48.png)
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](http://i.imgur.com/PvkFEe3.png)
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](http://i.imgur.com/5G2zPIC.png)
55
+ ![Reek output screenshot](/images/reek.png)
56
56
 
57
57
  Into something like this:
58
58
 
59
- ![RubyCritic file code screenshot](http://i.imgur.com/RNzXewk.png)
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](http://i.imgur.com/Si2l3kd.png)
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](http://i.imgur.com/oiE5O3X.png)
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](http://i.imgur.com/a0GCn48.png)
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
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
@@ -32,7 +32,7 @@ module RubyCritic
32
32
  end
33
33
 
34
34
  def line_count
35
- `wc -l "#{path}"`.strip.split(' ')[0].to_i
35
+ File.read(path).each_line.count
36
36
  end
37
37
 
38
38
  def cost
@@ -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
- onAfter: function() {
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,"&amp;").replace(/"/g,"&quot;").replace(/</g,"&lt;").replace(/>/g,"&gt;")},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
+ }
@@ -52,5 +52,6 @@
52
52
  <%= javascript_tag(:'prettify') %>
53
53
  <%= javascript_tag(:'bootstrap.min') %>
54
54
  <%= javascript_tag(:application) %>
55
+ <%= javascript_tag(:'jquery.filtertable.min') %>
55
56
  </body>
56
57
  </html>
@@ -2,20 +2,22 @@
2
2
 
3
3
  <div class="nocode errors smells">
4
4
  <% @smells.each do |smell| %>
5
- <div class="description">
6
- <div class="heading">
7
- <span>
8
- <i class="fa fa-warning" aria-hidden"true"=""></i>
9
- <a href="<%= smell.doc_url %>" target="_blank"><b><%= smell.type %></b></a>
10
- </span>
11
- </div>
12
- <span><%= "#{smell.context} #{smell.message}" %></span>
13
- <% if smell.multiple_locations? %>
14
- <span>Locations:</span>
15
- <% smell.locations.each_with_index do |location, index| %>
16
- <a href="<%= smell_location_path(location) %>" class="js-smell-location"><%= index %></a>
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
- <% end %>
19
- </div>
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
- PerforceStats = Struct.new(:filename, :revision, :last_commit, :opened?)
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 -F "clientFile=*.rb" -T clientFile,headRev,headTime,action #{Dir.getwd}...`.each_line do |line|
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
 
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module RubyCritic
4
- VERSION = '3.1.0'.freeze
4
+ VERSION = '3.1.1'.freeze
5
5
  end
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.4'
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.0
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-23 00:00:00.000000000 Z
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.4
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.4
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