rubocop 0.63.0 → 0.63.1
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 +5 -5
- data/README.md +1 -1
- data/lib/rubocop/cop/correctors/percent_literal_corrector.rb +1 -1
- data/lib/rubocop/cop/layout/closing_parenthesis_indentation.rb +1 -0
- data/lib/rubocop/cop/lint/disjunctive_assignment_in_constructor.rb +4 -3
- data/lib/rubocop/cop/rails/relative_date_constant.rb +40 -36
- data/lib/rubocop/cop/style/copyright.rb +1 -1
- data/lib/rubocop/rspec/cop_helper.rb +2 -0
- data/lib/rubocop/rspec/expect_offense.rb +43 -2
- data/lib/rubocop/version.rb +1 -1
- metadata +3 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 403ba108281ac77da6c733ad24b88350e4b4a3055ad36b6059d7784cbf4df56e
|
4
|
+
data.tar.gz: 86ebf007930c2de6e2f5eddbd0a6fba6e99ce9a7645f6407fdd4554a4e3c632c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 65c260a9df4e731b52ed42e5412d100e71199d5b75e6dac98adaf097020b351019c3fabedd99f2c34465d414eba0439680aeb7799ece4321c63918b4ac2e46e9
|
7
|
+
data.tar.gz: 5bfe411917f9d371b3ce33464297b5aa7840959dccf1275553545601af6b5228a7e770e3993663b98d5880f91f18dfdb94cf55cfa697af923e63c3b9fb3bcd8f
|
data/README.md
CHANGED
@@ -53,7 +53,7 @@ haven't reached version 1.0 yet). To prevent an unwanted RuboCop update you
|
|
53
53
|
might want to use a conservative version locking in your `Gemfile`:
|
54
54
|
|
55
55
|
```rb
|
56
|
-
gem 'rubocop', '~> 0.63.
|
56
|
+
gem 'rubocop', '~> 0.63.1', require: false
|
57
57
|
```
|
58
58
|
|
59
59
|
## Quickstart
|
@@ -94,7 +94,7 @@ module RuboCop
|
|
94
94
|
begin_line_num = previous_line_num - base_line_num + 1
|
95
95
|
end_line_num = node.first_line - base_line_num + 1
|
96
96
|
lines = source_in_lines[begin_line_num...end_line_num]
|
97
|
-
"\n
|
97
|
+
"\n#{(lines.join("\n").split(node.source).first || '')}"
|
98
98
|
end
|
99
99
|
|
100
100
|
def fix_escaped_content(word_node, escape, delimiters)
|
@@ -133,6 +133,7 @@ module RuboCop
|
|
133
133
|
# Although there are multiple choices for a correct column,
|
134
134
|
# select the first one of candidates to determine a specification.
|
135
135
|
correct_column = candidates.first
|
136
|
+
@column_delta = correct_column - right_paren.column
|
136
137
|
add_offense(right_paren,
|
137
138
|
location: right_paren,
|
138
139
|
message: message(correct_column,
|
@@ -34,12 +34,13 @@ module RuboCop
|
|
34
34
|
def check(node)
|
35
35
|
return unless node.method_name == :initialize
|
36
36
|
|
37
|
-
check_body(node)
|
37
|
+
check_body(node.body)
|
38
38
|
end
|
39
39
|
|
40
40
|
# @param [DefNode] node a constructor definition
|
41
|
-
def check_body(
|
42
|
-
|
41
|
+
def check_body(body)
|
42
|
+
return if body.nil?
|
43
|
+
|
43
44
|
case body.type
|
44
45
|
when :begin
|
45
46
|
check_body_lines(body.child_nodes)
|
@@ -19,18 +19,15 @@ module RuboCop
|
|
19
19
|
# end
|
20
20
|
# end
|
21
21
|
class RelativeDateConstant < Cop
|
22
|
+
include RangeHelp
|
23
|
+
|
22
24
|
MSG = 'Do not assign %<method_name>s to constants as it ' \
|
23
25
|
'will be evaluated only once.'.freeze
|
24
26
|
|
25
|
-
RELATIVE_DATE_METHODS = %i[ago from_now since until].freeze
|
26
|
-
|
27
27
|
def on_casgn(node)
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
return unless rhs
|
32
|
-
|
33
|
-
check_node(rhs)
|
28
|
+
relative_date_assignment?(node) do |method_name|
|
29
|
+
add_offense(node, message: format(MSG, method_name: method_name))
|
30
|
+
end
|
34
31
|
end
|
35
32
|
|
36
33
|
def on_masgn(node)
|
@@ -39,20 +36,29 @@ module RuboCop
|
|
39
36
|
return unless rhs && rhs.array_type?
|
40
37
|
|
41
38
|
lhs.children.zip(rhs.children).each do |(name, value)|
|
42
|
-
|
39
|
+
next unless name.casgn_type?
|
40
|
+
|
41
|
+
relative_date?(value) do |method_name|
|
42
|
+
add_offense(node,
|
43
|
+
location: range_between(name.loc.expression.begin_pos,
|
44
|
+
value.loc.expression.end_pos),
|
45
|
+
message: format(MSG, method_name: method_name))
|
46
|
+
end
|
43
47
|
end
|
44
48
|
end
|
45
49
|
|
46
50
|
def on_or_asgn(node)
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
check_node(rhs)
|
51
|
+
relative_date_or_assignment?(node) do |method_name|
|
52
|
+
add_offense(node, message: format(MSG, method_name: method_name))
|
53
|
+
end
|
52
54
|
end
|
53
55
|
|
54
56
|
def autocorrect(node)
|
55
|
-
|
57
|
+
return unless node.casgn_type?
|
58
|
+
|
59
|
+
scope, const_name, value = *node
|
60
|
+
return unless scope.nil?
|
61
|
+
|
56
62
|
indent = ' ' * node.loc.column
|
57
63
|
new_code = ["def self.#{const_name.downcase}",
|
58
64
|
"#{indent}#{value.source}",
|
@@ -62,27 +68,25 @@ module RuboCop
|
|
62
68
|
|
63
69
|
private
|
64
70
|
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
!node.arguments?
|
85
|
-
end
|
71
|
+
def_node_matcher :relative_date_assignment?, <<-PATTERN
|
72
|
+
{
|
73
|
+
(casgn _ _ (send _ ${:since :from_now :after :ago :until :before}))
|
74
|
+
(casgn _ _ ({erange irange} _ (send _ ${:since :from_now :after :ago :until :before})))
|
75
|
+
(casgn _ _ ({erange irange} (send _ ${:since :from_now :after :ago :until :before}) _))
|
76
|
+
}
|
77
|
+
PATTERN
|
78
|
+
|
79
|
+
def_node_matcher :relative_date_or_assignment?, <<-PATTERN
|
80
|
+
(:or_asgn (casgn _ _) (send _ ${:since :from_now :after :ago :until :before}))
|
81
|
+
PATTERN
|
82
|
+
|
83
|
+
def_node_matcher :relative_date?, <<-PATTERN
|
84
|
+
{
|
85
|
+
({erange irange} _ (send _ ${:since :from_now :after :ago :until :before}))
|
86
|
+
({erange irange} (send _ ${:since :from_now :after :ago :until :before}) _)
|
87
|
+
(send _ ${:since :from_now :after :ago :until :before})
|
88
|
+
}
|
89
|
+
PATTERN
|
86
90
|
end
|
87
91
|
end
|
88
92
|
end
|
@@ -20,7 +20,7 @@ module RuboCop
|
|
20
20
|
|
21
21
|
MSG = 'Include a copyright notice matching /%<notice>s/ before ' \
|
22
22
|
'any code.'.freeze
|
23
|
-
AUTOCORRECT_EMPTY_WARNING = 'An AutocorrectNotice must be defined in' \
|
23
|
+
AUTOCORRECT_EMPTY_WARNING = 'An AutocorrectNotice must be defined in ' \
|
24
24
|
'your RuboCop config'.freeze
|
25
25
|
|
26
26
|
def investigate(processed_source)
|
@@ -38,6 +38,8 @@ module CopHelper
|
|
38
38
|
end
|
39
39
|
|
40
40
|
def autocorrect_source(source, file = nil)
|
41
|
+
RuboCop::Formatter::DisabledConfigFormatter.config_to_allow_offenses = {}
|
42
|
+
RuboCop::Formatter::DisabledConfigFormatter.detected_styles = {}
|
41
43
|
cop.instance_variable_get(:@options)[:auto_correct] = true
|
42
44
|
processed_source = parse_source(source, file)
|
43
45
|
_investigate(cop, processed_source)
|
@@ -38,24 +38,65 @@ module RuboCop
|
|
38
38
|
# 'Avoid chaining a method call on a do...end block.'
|
39
39
|
# )
|
40
40
|
#
|
41
|
+
# Auto-correction can be tested using `expect_correction` after
|
42
|
+
# `expect_offense`.
|
43
|
+
#
|
44
|
+
# @example `expect_offense` and `expect_correction`
|
45
|
+
#
|
46
|
+
# expect_offense(<<-RUBY.strip_indent)
|
47
|
+
# x % 2 == 0
|
48
|
+
# ^^^^^^^^^^ Replace with `Integer#even?`.
|
49
|
+
# RUBY
|
50
|
+
#
|
51
|
+
# expect_correction(<<-RUBY.strip_indent)
|
52
|
+
# x.even?
|
53
|
+
# RUBY
|
54
|
+
#
|
41
55
|
# If you do not want to specify an offense then use the
|
42
56
|
# companion method `expect_no_offenses`. This method is a much
|
43
57
|
# simpler assertion since it just inspects the source and checks
|
44
58
|
# that there were no offenses. The `expect_offense` method has
|
45
59
|
# to do more work by parsing out lines that contain carets.
|
46
60
|
module ExpectOffense
|
61
|
+
# rubocop:disable Metrics/AbcSize, Metrics/MethodLength
|
47
62
|
def expect_offense(source, file = nil)
|
63
|
+
RuboCop::Formatter::DisabledConfigFormatter
|
64
|
+
.config_to_allow_offenses = {}
|
65
|
+
RuboCop::Formatter::DisabledConfigFormatter.detected_styles = {}
|
66
|
+
cop.instance_variable_get(:@options)[:auto_correct] = true
|
67
|
+
|
48
68
|
expected_annotations = AnnotatedSource.parse(source)
|
49
69
|
|
50
70
|
if expected_annotations.plain_source == source
|
51
|
-
raise 'Use expect_no_offenses to assert that no offenses are found'
|
71
|
+
raise 'Use `expect_no_offenses` to assert that no offenses are found'
|
72
|
+
end
|
73
|
+
|
74
|
+
@processed_source = parse_source(expected_annotations.plain_source,
|
75
|
+
file)
|
76
|
+
|
77
|
+
unless @processed_source.valid_syntax?
|
78
|
+
raise 'Error parsing example code'
|
52
79
|
end
|
53
80
|
|
54
|
-
|
81
|
+
_investigate(cop, @processed_source)
|
55
82
|
actual_annotations =
|
56
83
|
expected_annotations.with_offense_annotations(cop.offenses)
|
84
|
+
|
57
85
|
expect(actual_annotations.to_s).to eq(expected_annotations.to_s)
|
58
86
|
end
|
87
|
+
# rubocop:enable Metrics/AbcSize, Metrics/MethodLength
|
88
|
+
|
89
|
+
def expect_correction(correction)
|
90
|
+
unless @processed_source
|
91
|
+
raise '`expect_correction` must follow `expect_offense`'
|
92
|
+
end
|
93
|
+
|
94
|
+
corrector =
|
95
|
+
RuboCop::Cop::Corrector.new(@processed_source.buffer, cop.corrections)
|
96
|
+
new_source = corrector.rewrite
|
97
|
+
|
98
|
+
expect(new_source).to eq(correction)
|
99
|
+
end
|
59
100
|
|
60
101
|
def expect_no_offenses(source, file = nil)
|
61
102
|
inspect_source(source, file)
|
data/lib/rubocop/version.rb
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
module RuboCop
|
4
4
|
# This module holds the RuboCop version information.
|
5
5
|
module Version
|
6
|
-
STRING = '0.63.
|
6
|
+
STRING = '0.63.1'.freeze
|
7
7
|
|
8
8
|
MSG = '%<version>s (using Parser %<parser_version>s, running on ' \
|
9
9
|
'%<ruby_engine>s %<ruby_version>s %<ruby_platform>s)'.freeze
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rubocop
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.63.
|
4
|
+
version: 0.63.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Bozhidar Batsov
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: exe
|
12
12
|
cert_chain: []
|
13
|
-
date: 2019-01-
|
13
|
+
date: 2019-01-22 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: jaro_winkler
|
@@ -830,8 +830,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
830
830
|
- !ruby/object:Gem::Version
|
831
831
|
version: '0'
|
832
832
|
requirements: []
|
833
|
-
|
834
|
-
rubygems_version: 2.6.11
|
833
|
+
rubygems_version: 3.0.1
|
835
834
|
signing_key:
|
836
835
|
specification_version: 4
|
837
836
|
summary: Automatic Ruby code style checking tool.
|