rubocop-vendor 0.2.0 → 0.6.0

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: 5072a6d34dc157a8067353787c18de1f0d29391bcd444200db28663b207a69ba
4
- data.tar.gz: 13f6b9f89c3f88aff7933d52d3f62eaa52e6ced21a90a25add5321a20083ea96
3
+ metadata.gz: 69207722d1f85c15ec43d9206abb228f4051f9bf5bb6df6891975427ffbcee57
4
+ data.tar.gz: 37d1f7a6075504487894018da7f7adb11d70c7e9d774f7a659c9a20f372e93d5
5
5
  SHA512:
6
- metadata.gz: 5850e36f8d60e097beffbea26dd32453a3201ec49447dbec1e033eb200f99b54af2ebdc63557ed45e6741a09d0413c346134717b6b786f27a9dec22e22843ee1
7
- data.tar.gz: f38f8b445d42bd1eef44dfd270a9a3c89d8093e9572de51acb0bbe1cfaba50bfa57444eda0b3aadd11fc1047e79d46ef2b43be5d4dc4b923d54230411029cf6d
6
+ metadata.gz: 7d4bb0376770d8be587725522cacf89ee448d4476d2f92a05656c9847d6169935076cefed131de3e2aad36107fb94893cd4197d88e034358cb68584f27e63284
7
+ data.tar.gz: e0e48ef333ed5842e26ba7a8b0e3fa4326f35cd240df0d44685dd6e650ad1714daaf0388e72a5ed6ac4f39d10b59623c3eb69462977e47993cefb2c93ad2365a
data/README.md CHANGED
@@ -59,7 +59,7 @@ In your `.rubocop.yml`, you may treat the Vendor cops just like any other
59
59
  cop. For example:
60
60
 
61
61
  ```yaml
62
- Vednor/RollbarLogger:
62
+ Vendor/RollbarLogger:
63
63
  Exclude:
64
64
  - lib/example.rb
65
65
  ```
@@ -0,0 +1,68 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RuboCop
4
+ module Cop
5
+ module Vendor
6
+ # This cop checks for Rollbar calls outside `rescue` blocks.
7
+ #
8
+ # The main reason for this suggestion is that Rollbar should not be used
9
+ # as a logger given it has a quota that is often multiple times smaller
10
+ # than the log quota. By reporting errors outside rescue blocks
11
+ # the developer is most likely in control of the exceptional flow and
12
+ # won't need a stack trace.
13
+ #
14
+ # @example
15
+ # # bad
16
+ # Rollbar.error("Unable to sync account")
17
+ #
18
+ # # good
19
+ # begin
20
+ # 1 / 0
21
+ # rescue StandardError => exception
22
+ # Rollbar.error(exception, "Unable to sync account")
23
+ # end
24
+ #
25
+ # # good
26
+ # class ApplicationController < ActionController::Base
27
+ # rescue_from InvalidRecord do |e|
28
+ # Rollbar.error(e)
29
+ # end
30
+ # end
31
+ #
32
+ class RollbarInsideRescue < Cop
33
+ MSG = 'Only call Rollbar when handling errors inside a `rescue` block.'
34
+
35
+ # @!method rollbar?(node)
36
+ def_node_matcher :rollbar?, <<-PATTERN
37
+ (send
38
+ (const nil? :Rollbar) {:log :debug :info :warning :error :critical} ...)
39
+ PATTERN
40
+
41
+ # @!method active_support_rescuable_block?(node)
42
+ def_node_matcher :active_support_rescuable_block?, <<-PATTERN
43
+ (block
44
+ (send nil? :rescue_from ...) ...)
45
+ PATTERN
46
+
47
+ def on_send(node)
48
+ return unless rollbar?(node)
49
+ return if in_rescue_block?(node)
50
+
51
+ add_offense(node, location: node.children[0].loc.expression)
52
+ end
53
+
54
+ def in_rescue_block?(node)
55
+ current_node = node
56
+
57
+ while (current_node = current_node.parent)
58
+ return true if current_node.rescue_type?
59
+ return true if active_support_rescuable_block?(current_node)
60
+
61
+ break if current_node.def_type?
62
+ break if current_node.class_type?
63
+ end
64
+ end
65
+ end
66
+ end
67
+ end
68
+ end
@@ -19,6 +19,7 @@ module RuboCop
19
19
  class RollbarInterpolation < Cop
20
20
  MSG = 'Send extra fields as hash parameter instead of interpolated message.'
21
21
 
22
+ # @!method bad_method?(node)
22
23
  def_node_matcher :bad_method?, <<-PATTERN
23
24
  (send
24
25
  (const nil? :Rollbar) {:error :critical}
@@ -16,25 +16,42 @@ module RuboCop
16
16
  # Rollbar.info('Stale message')
17
17
  #
18
18
  class RollbarLog < Cop
19
+ include RangeHelp
20
+
19
21
  MSG = 'Use `Rollbar.%<method>s` instead of `Rollbar.log`.'
20
22
 
23
+ # @!method bad_method?(node)
21
24
  def_node_matcher :bad_method?, <<-PATTERN
22
25
  (send
23
26
  (const nil? :Rollbar) :log
24
- $({str sym} _) ...)
27
+ ({str sym} _) ...)
25
28
  PATTERN
26
29
 
27
30
  def on_send(node)
28
- level = bad_method?(node)
29
- return unless level
31
+ return unless bad_method?(node)
32
+
33
+ add_offense(node, location: offending_range(node))
34
+ end
30
35
 
31
- add_offense(level)
36
+ def autocorrect(node)
37
+ range = offending_range(node)
38
+ replacement = "#{node.children[2].value}#{range.source.include?('(') ? '(' : ' '}"
39
+ lambda do |corrector|
40
+ corrector.replace(range, replacement)
41
+ end
32
42
  end
33
43
 
34
44
  private
35
45
 
46
+ def offending_range(node)
47
+ range_between(
48
+ node.children[0].loc.last_column + 1,
49
+ node.children[3].loc.column
50
+ )
51
+ end
52
+
36
53
  def message(node)
37
- format(MSG, method: node.value)
54
+ format(MSG, method: node.children[2].value)
38
55
  end
39
56
  end
40
57
  end
@@ -20,20 +20,20 @@ module RuboCop
20
20
  class RollbarLogger < Cop
21
21
  MSG = 'Use `Rails.logger` for `debug`, `info` or `warning` calls.'
22
22
 
23
+ # @!method bad_method?(node)
23
24
  def_node_matcher :bad_method?, <<-PATTERN
24
- (send $(const nil? :Rollbar) {:debug :info :warning} ...)
25
+ (send (const nil? :Rollbar) {:debug :info :warning} {str hash})
25
26
  PATTERN
26
27
 
27
28
  def on_send(node)
28
- rollbar_call = bad_method?(node)
29
- return unless rollbar_call
29
+ return unless bad_method?(node)
30
30
 
31
- add_offense(rollbar_call)
31
+ add_offense(node, location: node.children[0].loc.expression)
32
32
  end
33
33
 
34
34
  def autocorrect(node)
35
35
  lambda do |corrector|
36
- corrector.replace(node.loc.expression, 'Rails.logger')
36
+ corrector.replace(node.children[0].loc.expression, 'Rails.logger')
37
37
  end
38
38
  end
39
39
  end
@@ -24,6 +24,7 @@ module RuboCop
24
24
 
25
25
  MSG = 'Send exception as first parameter when calling `error` or `critical`.'
26
26
 
27
+ # @!method bad_method?(node)
27
28
  def_node_matcher :bad_method?, <<-PATTERN
28
29
  (send
29
30
  (const nil? :Rollbar) {:error :critical}
@@ -3,6 +3,7 @@
3
3
  module RuboCop
4
4
  end
5
5
 
6
+ require_relative 'vendor/rollbar_inside_rescue'
6
7
  require_relative 'vendor/rollbar_interpolation'
7
8
  require_relative 'vendor/rollbar_log'
8
9
  require_relative 'vendor/rollbar_logger'
@@ -3,7 +3,7 @@
3
3
  module RuboCop
4
4
  module Vendor
5
5
  module Version
6
- STRING = '0.2.0'
6
+ STRING = '0.6.0'
7
7
  end
8
8
  end
9
9
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rubocop-vendor
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Danilo Cabello
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2019-04-24 00:00:00.000000000 Z
13
+ date: 2021-03-10 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rubocop
@@ -26,6 +26,34 @@ dependencies:
26
26
  - - ">="
27
27
  - !ruby/object:Gem::Version
28
28
  version: 0.53.0
29
+ - !ruby/object:Gem::Dependency
30
+ name: git
31
+ requirement: !ruby/object:Gem::Requirement
32
+ requirements:
33
+ - - ">="
34
+ - !ruby/object:Gem::Version
35
+ version: '0'
36
+ type: :development
37
+ prerelease: false
38
+ version_requirements: !ruby/object:Gem::Requirement
39
+ requirements:
40
+ - - ">="
41
+ - !ruby/object:Gem::Version
42
+ version: '0'
43
+ - !ruby/object:Gem::Dependency
44
+ name: keepachangelog
45
+ requirement: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - ">="
48
+ - !ruby/object:Gem::Version
49
+ version: '0'
50
+ type: :development
51
+ prerelease: false
52
+ version_requirements: !ruby/object:Gem::Requirement
53
+ requirements:
54
+ - - ">="
55
+ - !ruby/object:Gem::Version
56
+ version: '0'
29
57
  - !ruby/object:Gem::Dependency
30
58
  name: simplecov
31
59
  requirement: !ruby/object:Gem::Requirement
@@ -54,6 +82,7 @@ files:
54
82
  - README.md
55
83
  - config/default.yml
56
84
  - lib/rubocop-vendor.rb
85
+ - lib/rubocop/cop/vendor/rollbar_inside_rescue.rb
57
86
  - lib/rubocop/cop/vendor/rollbar_interpolation.rb
58
87
  - lib/rubocop/cop/vendor/rollbar_log.rb
59
88
  - lib/rubocop/cop/vendor/rollbar_logger.rb