rails_best_practices 1.20.1 → 1.21.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 +4 -4
- data/CHANGELOG.md +5 -0
- data/Gemfile.lock +1 -1
- data/lib/rails_best_practices.rb +1 -0
- data/lib/rails_best_practices/analyzer.rb +2 -2
- data/lib/rails_best_practices/core/runner.rb +20 -1
- data/lib/rails_best_practices/inline_disables.rb +3 -0
- data/lib/rails_best_practices/inline_disables/comment_ripper.rb +19 -0
- data/lib/rails_best_practices/inline_disables/inline_disable.rb +50 -0
- data/lib/rails_best_practices/version.rb +1 -1
- data/spec/rails_best_practices/inline_disables/inline_disable_spec.rb +62 -0
- metadata +7 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e268c4837f5a1da4ac684c78bef59cd06ce20c69cc41ea9478391242897c5d4b
|
4
|
+
data.tar.gz: 3bfc141a02bfcb95f40f938be6d101ab3e0aed55518eb8c42d2a6c5b2effd246
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f3c124054e218a06478ef27973a2fc6aed24eb4bc45fac4eebd3274b61a1fea9650c8d9bd366a06657714d22c5905ba00315a75f787556eab5a6527ad947011b
|
7
|
+
data.tar.gz: 4e0f3e83007b69bbba800ff378caf08adf5e87d8fd8e5d913c55ef35052775697f72c7c038cebaf417f13a29cdf654b2ce25effe570ae5e6fabf6988b4735401
|
data/CHANGELOG.md
CHANGED
data/Gemfile.lock
CHANGED
data/lib/rails_best_practices.rb
CHANGED
@@ -8,6 +8,7 @@ require 'rails_best_practices/analyzer'
|
|
8
8
|
require 'rails_best_practices/lexicals'
|
9
9
|
require 'rails_best_practices/prepares'
|
10
10
|
require 'rails_best_practices/reviews'
|
11
|
+
require 'rails_best_practices/inline_disables'
|
11
12
|
require 'rails_best_practices/option_parser'
|
12
13
|
require 'rails_best_practices/cli'
|
13
14
|
|
@@ -326,8 +326,8 @@ module RailsBestPractices
|
|
326
326
|
|
327
327
|
# analyze source codes.
|
328
328
|
def analyze_source_codes
|
329
|
-
@bar = ProgressBar.create(title: 'Source Code', total: parse_files.size *
|
330
|
-
%w[lexical prepare review].each { |process| send(:process, process) }
|
329
|
+
@bar = ProgressBar.create(title: 'Source Code', total: parse_files.size * 4) if display_bar?
|
330
|
+
%w[lexical prepare review inline_disable].each { |process| send(:process, process) }
|
331
331
|
@bar.finish if display_bar?
|
332
332
|
end
|
333
333
|
|
@@ -65,6 +65,9 @@ module RailsBestPractices
|
|
65
65
|
checkers: @prepares.reject { |checker| checker.is_a? Prepares::GemfilePrepare }
|
66
66
|
)
|
67
67
|
@review_checker ||= CodeAnalyzer::CheckingVisitor::Default.new(checkers: @reviews)
|
68
|
+
|
69
|
+
@inlnie_disable ||= InlineDisables::InlineDisable.new
|
70
|
+
@inline_disable_checker ||= CodeAnalyzer::CheckingVisitor::Plain.new(checkers: [@inlnie_disable])
|
68
71
|
end
|
69
72
|
|
70
73
|
# lexical analysis the file.
|
@@ -106,11 +109,27 @@ module RailsBestPractices
|
|
106
109
|
@review_checker.after_check
|
107
110
|
end
|
108
111
|
|
112
|
+
# disable check by inline comment the file.
|
113
|
+
#
|
114
|
+
# @param [String] filename of the file
|
115
|
+
# @param [String] content of the file
|
116
|
+
def inline_disable(filename, content)
|
117
|
+
content = parse_html_template(filename, content)
|
118
|
+
@inline_disable_checker.check(filename, content)
|
119
|
+
end
|
120
|
+
|
121
|
+
def after_inline_disable
|
122
|
+
@inline_disable_checker.after_check
|
123
|
+
end
|
124
|
+
|
109
125
|
# get all errors from lexicals and reviews.
|
110
126
|
#
|
111
127
|
# @return [Array] all errors from lexicals and reviews
|
112
128
|
def errors
|
113
|
-
@errors ||=
|
129
|
+
@errors ||= begin
|
130
|
+
reported_errors = (@reviews + @lexicals).collect(&:errors).flatten
|
131
|
+
reported_errors.reject { |error| @inlnie_disable.disabled?(error) }
|
132
|
+
end
|
114
133
|
end
|
115
134
|
|
116
135
|
private
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RailsBestPractices
|
4
|
+
module InlineDisables
|
5
|
+
class CommentRipper < Ripper::SexpBuilder
|
6
|
+
attr_reader :comments
|
7
|
+
|
8
|
+
def initialize(*arg)
|
9
|
+
super
|
10
|
+
@comments = []
|
11
|
+
end
|
12
|
+
|
13
|
+
def on_comment(*arg)
|
14
|
+
# [sexp_type, statement, [lineno, column]] = super
|
15
|
+
comments << super
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RailsBestPractices
|
4
|
+
module InlineDisables
|
5
|
+
class InlineDisable < Core::Check
|
6
|
+
interesting_files ALL_FILES
|
7
|
+
url '#'
|
8
|
+
|
9
|
+
def initialize(*args)
|
10
|
+
super
|
11
|
+
@disabled_errors = []
|
12
|
+
end
|
13
|
+
|
14
|
+
def check(filename, content)
|
15
|
+
comments = CommentRipper.new(content).tap(&:parse).comments
|
16
|
+
comments.each do |_sexp_type, statement, (line_number, _column)|
|
17
|
+
add_as_disable_errors(filename, statement, line_number)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def disabled?(error)
|
22
|
+
error_key = [error.filename, error.line_number, error.type.split('::').last].join('-')
|
23
|
+
disabled_error_keys.include?(error_key)
|
24
|
+
end
|
25
|
+
|
26
|
+
private
|
27
|
+
|
28
|
+
def disabled_error_keys
|
29
|
+
@disabled_error_keys ||= Set.new(@disabled_errors.map { |e| [e.filename, e.line_number, e.type].join('-') })
|
30
|
+
end
|
31
|
+
|
32
|
+
def add_as_disable_errors(filename, statement, line_number)
|
33
|
+
match = statement.match(/rails_b(?:est_)?p(?:ractices)?:disable (.*)/)
|
34
|
+
return unless match
|
35
|
+
|
36
|
+
check_names = match[1].split(',')
|
37
|
+
check_names.each do |check_name|
|
38
|
+
add_as_disable_error(filename, check_name.gsub(/Check$/, 'Review'), line_number)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
def add_as_disable_error(filename, check_name, line_number)
|
43
|
+
@disabled_errors <<
|
44
|
+
RailsBestPractices::Core::Error.new(
|
45
|
+
filename: filename, line_number: line_number, message: 'disable by inline comment', type: check_name, url: url
|
46
|
+
)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
@@ -0,0 +1,62 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
module RailsBestPractices
|
6
|
+
module InlineDisables
|
7
|
+
describe InlineDisable do
|
8
|
+
let(:runner) { Core::Runner.new(reviews: Reviews::MoveModelLogicIntoModelReview.new) }
|
9
|
+
|
10
|
+
it 'moves model logic into model' do
|
11
|
+
content = <<-EOF
|
12
|
+
class PostsController < ApplicationController
|
13
|
+
def publish
|
14
|
+
@post = Post.find(params[:id])
|
15
|
+
@post.update_attributes(:is_published, true)
|
16
|
+
@post.approved_by = current_user
|
17
|
+
|
18
|
+
if @post.created_at > Time.now - 7.days
|
19
|
+
@post.popular = 100
|
20
|
+
else
|
21
|
+
@post.popular = 0
|
22
|
+
end
|
23
|
+
|
24
|
+
redirect_to post_url(@post)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
EOF
|
28
|
+
runner.review('app/controllers/posts_controller.rb', content)
|
29
|
+
runner.inline_disable('app/controllers/posts_controller.rb', content)
|
30
|
+
|
31
|
+
expect(runner.errors.size).to eq(1)
|
32
|
+
expect(runner.errors[0].to_s).to eq(
|
33
|
+
'app/controllers/posts_controller.rb:2 - move model logic into model (@post use_count > 4)'
|
34
|
+
)
|
35
|
+
end
|
36
|
+
|
37
|
+
it 'is no error is output' do
|
38
|
+
content = <<-EOF
|
39
|
+
class PostsController < ApplicationController
|
40
|
+
def publish # rails_best_practices:disable MoveModelLogicIntoModelCheck
|
41
|
+
@post = Post.find(params[:id])
|
42
|
+
@post.update_attributes(:is_published, true)
|
43
|
+
@post.approved_by = current_user
|
44
|
+
|
45
|
+
if @post.created_at > Time.now - 7.days
|
46
|
+
@post.popular = 100
|
47
|
+
else
|
48
|
+
@post.popular = 0
|
49
|
+
end
|
50
|
+
|
51
|
+
redirect_to post_url(@post)
|
52
|
+
end
|
53
|
+
end
|
54
|
+
EOF
|
55
|
+
runner.review('app/controllers/posts_controller.rb', content)
|
56
|
+
runner.inline_disable('app/controllers/posts_controller.rb', content)
|
57
|
+
|
58
|
+
expect(runner.errors.size).to eq(0)
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rails_best_practices
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.21.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Richard Huang
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-06-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -235,6 +235,9 @@ files:
|
|
235
235
|
- lib/rails_best_practices/core/routes.rb
|
236
236
|
- lib/rails_best_practices/core/runner.rb
|
237
237
|
- lib/rails_best_practices/core_ext/erubis.rb
|
238
|
+
- lib/rails_best_practices/inline_disables.rb
|
239
|
+
- lib/rails_best_practices/inline_disables/comment_ripper.rb
|
240
|
+
- lib/rails_best_practices/inline_disables/inline_disable.rb
|
238
241
|
- lib/rails_best_practices/lexicals.rb
|
239
242
|
- lib/rails_best_practices/lexicals/long_line_check.rb
|
240
243
|
- lib/rails_best_practices/lexicals/remove_tab_check.rb
|
@@ -314,6 +317,7 @@ files:
|
|
314
317
|
- spec/rails_best_practices/core/routes_spec.rb
|
315
318
|
- spec/rails_best_practices/core/runner_spec.rb
|
316
319
|
- spec/rails_best_practices/core_ext/erubis_spec.rb
|
320
|
+
- spec/rails_best_practices/inline_disables/inline_disable_spec.rb
|
317
321
|
- spec/rails_best_practices/lexicals/long_line_check_spec.rb
|
318
322
|
- spec/rails_best_practices/lexicals/remove_tab_check_spec.rb
|
319
323
|
- spec/rails_best_practices/lexicals/remove_trailing_whitespace_check_spec.rb
|
@@ -424,6 +428,7 @@ test_files:
|
|
424
428
|
- spec/rails_best_practices/core/routes_spec.rb
|
425
429
|
- spec/rails_best_practices/core/runner_spec.rb
|
426
430
|
- spec/rails_best_practices/core_ext/erubis_spec.rb
|
431
|
+
- spec/rails_best_practices/inline_disables/inline_disable_spec.rb
|
427
432
|
- spec/rails_best_practices/lexicals/long_line_check_spec.rb
|
428
433
|
- spec/rails_best_practices/lexicals/remove_tab_check_spec.rb
|
429
434
|
- spec/rails_best_practices/lexicals/remove_trailing_whitespace_check_spec.rb
|