rubocop 0.19.1 → 0.20.0
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of rubocop might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/.travis.yml +4 -0
- data/CHANGELOG.md +60 -1
- data/CONTRIBUTING.md +2 -1
- data/README.md +9 -7
- data/config/default.yml +3 -3
- data/config/disabled.yml +4 -0
- data/config/enabled.yml +45 -21
- data/lib/rubocop.rb +30 -9
- data/lib/rubocop/cli.rb +1 -1
- data/lib/rubocop/comment_config.rb +4 -2
- data/lib/rubocop/config.rb +16 -22
- data/lib/rubocop/config_loader.rb +29 -26
- data/lib/rubocop/cop/commissioner.rb +1 -1
- data/lib/rubocop/cop/cop.rb +6 -6
- data/lib/rubocop/cop/lint/assignment_in_condition.rb +1 -1
- data/lib/rubocop/cop/lint/condition_position.rb +1 -1
- data/lib/rubocop/cop/lint/debugger.rb +1 -1
- data/lib/rubocop/cop/lint/deprecated_class_methods.rb +9 -7
- data/lib/rubocop/cop/lint/else_layout.rb +1 -1
- data/lib/rubocop/cop/lint/empty_ensure.rb +1 -1
- data/lib/rubocop/cop/lint/empty_interpolation.rb +22 -0
- data/lib/rubocop/cop/lint/end_in_method.rb +1 -1
- data/lib/rubocop/cop/lint/ensure_return.rb +1 -1
- data/lib/rubocop/cop/lint/eval.rb +1 -1
- data/lib/rubocop/cop/lint/literal_in_condition.rb +2 -2
- data/lib/rubocop/cop/lint/literal_in_interpolation.rb +9 -0
- data/lib/rubocop/cop/lint/loop.rb +2 -2
- data/lib/rubocop/cop/lint/require_parentheses.rb +0 -4
- data/lib/rubocop/cop/lint/rescue_exception.rb +1 -1
- data/lib/rubocop/cop/lint/shadowing_outer_local_variable.rb +1 -1
- data/lib/rubocop/cop/lint/space_before_first_arg.rb +36 -0
- data/lib/rubocop/cop/lint/string_conversion_in_interpolation.rb +14 -2
- data/lib/rubocop/cop/lint/useless_access_modifier.rb +57 -0
- data/lib/rubocop/cop/lint/useless_setter_call.rb +1 -1
- data/lib/rubocop/cop/lint/void.rb +3 -3
- data/lib/rubocop/cop/mixin/space_after_punctuation.rb +1 -1
- data/lib/rubocop/cop/offense.rb +3 -21
- data/lib/rubocop/cop/rails/action_filter.rb +1 -1
- data/lib/rubocop/cop/rails/default_scope.rb +1 -1
- data/lib/rubocop/cop/rails/has_and_belongs_to_many.rb +1 -1
- data/lib/rubocop/cop/rails/read_write_attribute.rb +43 -0
- data/lib/rubocop/cop/rails/scope_args.rb +1 -1
- data/lib/rubocop/cop/rails/validation.rb +1 -1
- data/lib/rubocop/cop/severity.rb +76 -0
- data/lib/rubocop/cop/style/access_modifier_indentation.rb +1 -1
- data/lib/rubocop/cop/style/accessor_method_name.rb +2 -2
- data/lib/rubocop/cop/style/alias.rb +1 -1
- data/lib/rubocop/cop/style/align_hash.rb +1 -1
- data/lib/rubocop/cop/style/and_or.rb +1 -1
- data/lib/rubocop/cop/style/{favor_join.rb → array_join.rb} +2 -2
- data/lib/rubocop/cop/style/begin_block.rb +1 -1
- data/lib/rubocop/cop/style/block_nesting.rb +12 -8
- data/lib/rubocop/cop/style/braces_around_hash_parameters.rb +1 -1
- data/lib/rubocop/cop/style/case_equality.rb +1 -1
- data/lib/rubocop/cop/style/case_indentation.rb +5 -5
- data/lib/rubocop/cop/style/class_methods.rb +19 -3
- data/lib/rubocop/cop/style/class_vars.rb +1 -1
- data/lib/rubocop/cop/style/collection_methods.rb +17 -7
- data/lib/rubocop/cop/style/colon_method_call.rb +1 -1
- data/lib/rubocop/cop/style/{def_parentheses.rb → def_with_parentheses.rb} +0 -0
- data/lib/rubocop/cop/style/{hash_methods.rb → deprecated_hash_methods.rb} +5 -4
- data/lib/rubocop/cop/style/double_negation.rb +1 -1
- data/lib/rubocop/cop/style/empty_lines_around_access_modifier.rb +1 -1
- data/lib/rubocop/cop/style/end_block.rb +1 -1
- data/lib/rubocop/cop/style/even_odd.rb +2 -2
- data/lib/rubocop/cop/style/file_name.rb +1 -1
- data/lib/rubocop/cop/style/for.rb +2 -2
- data/lib/rubocop/cop/style/format_string.rb +1 -1
- data/lib/rubocop/cop/style/guard_clause.rb +69 -0
- data/lib/rubocop/cop/style/hash_syntax.rb +6 -10
- data/lib/rubocop/cop/style/if_unless_modifier.rb +2 -2
- data/lib/rubocop/cop/style/lambda.rb +2 -2
- data/lib/rubocop/cop/style/line_end_concatenation.rb +16 -9
- data/lib/rubocop/cop/style/multiline_if_then.rb +1 -1
- data/lib/rubocop/cop/style/multiline_ternary_operator.rb +2 -2
- data/lib/rubocop/cop/style/negated_if.rb +37 -0
- data/lib/rubocop/cop/style/negated_while.rb +33 -0
- data/lib/rubocop/cop/style/nested_ternary_operator.rb +1 -1
- data/lib/rubocop/cop/style/nil_comparison.rb +14 -10
- data/lib/rubocop/cop/style/non_nil_check.rb +70 -0
- data/lib/rubocop/cop/style/not.rb +25 -1
- data/lib/rubocop/cop/style/numeric_literals.rb +1 -1
- data/lib/rubocop/cop/style/op_method.rb +4 -4
- data/lib/rubocop/cop/style/parentheses_around_condition.rb +1 -1
- data/lib/rubocop/cop/style/predicate_name.rb +1 -1
- data/lib/rubocop/cop/style/proc.rb +1 -1
- data/lib/rubocop/cop/style/raise_args.rb +3 -2
- data/lib/rubocop/cop/style/rescue_modifier.rb +1 -1
- data/lib/rubocop/cop/style/self_assignment.rb +2 -2
- data/lib/rubocop/cop/style/signal_exception.rb +6 -3
- data/lib/rubocop/cop/style/single_line_block_params.rb +1 -1
- data/lib/rubocop/cop/style/single_line_methods.rb +6 -5
- data/lib/rubocop/cop/style/single_space_before_first_arg.rb +41 -0
- data/lib/rubocop/cop/style/space_around_operators.rb +1 -2
- data/lib/rubocop/cop/style/special_global_vars.rb +8 -8
- data/lib/rubocop/cop/style/trailing_comma.rb +1 -1
- data/lib/rubocop/cop/style/trivial_accessors.rb +1 -1
- data/lib/rubocop/cop/style/unless_else.rb +1 -1
- data/lib/rubocop/cop/style/variable_interpolation.rb +10 -5
- data/lib/rubocop/cop/style/when_then.rb +1 -1
- data/lib/rubocop/cop/style/while_until_modifier.rb +1 -1
- data/lib/rubocop/cop/style/word_array.rb +1 -1
- data/lib/rubocop/cop/team.rb +12 -13
- data/lib/rubocop/cop/util.rb +4 -0
- data/lib/rubocop/cop/variable_inspector/locatable.rb +1 -1
- data/lib/rubocop/cop/variable_inspector/variable_table.rb +1 -1
- data/lib/rubocop/file_inspector.rb +46 -10
- data/lib/rubocop/formatter/disabled_config_formatter.rb +1 -1
- data/lib/rubocop/formatter/disabled_lines_formatter.rb +56 -0
- data/lib/rubocop/formatter/emacs_style_formatter.rb +1 -1
- data/lib/rubocop/formatter/formatter_set.rb +2 -1
- data/lib/rubocop/formatter/fuubar_style_formatter.rb +2 -4
- data/lib/rubocop/formatter/json_formatter.rb +3 -7
- data/lib/rubocop/formatter/progress_formatter.rb +1 -3
- data/lib/rubocop/formatter/simple_text_formatter.rb +7 -3
- data/lib/rubocop/options.rb +29 -10
- data/lib/rubocop/path_util.rb +2 -1
- data/lib/rubocop/processed_source.rb +8 -0
- data/lib/rubocop/target_finder.rb +33 -12
- data/lib/rubocop/version.rb +1 -1
- data/relnotes/v0.20.0.md +69 -0
- data/rubocop-todo.yml +2 -2
- data/spec/rubocop/cli_spec.rb +269 -94
- data/spec/rubocop/config_loader_spec.rb +14 -14
- data/spec/rubocop/config_spec.rb +8 -8
- data/spec/rubocop/cop/lint/deprecated_class_methods_spec.rb +11 -6
- data/spec/rubocop/cop/lint/empty_interpolation_spec.rb +18 -0
- data/spec/rubocop/cop/lint/eval_spec.rb +2 -4
- data/spec/rubocop/cop/lint/literal_in_interpolation_spec.rb +10 -0
- data/spec/rubocop/cop/lint/rescue_exception_spec.rb +0 -8
- data/spec/rubocop/cop/lint/shadowing_outer_local_variable_spec.rb +4 -4
- data/spec/rubocop/cop/lint/space_before_first_arg_spec.rb +48 -0
- data/spec/rubocop/cop/lint/string_conversion_in_interpolation_spec.rb +10 -0
- data/spec/rubocop/cop/lint/useless_access_modifier_spec.rb +154 -0
- data/spec/rubocop/cop/offense_spec.rb +1 -1
- data/spec/rubocop/cop/rails/read_write_attribute_spec.rb +19 -0
- data/spec/rubocop/cop/severity_spec.rb +113 -0
- data/spec/rubocop/cop/style/access_modifier_indentation_spec.rb +10 -10
- data/spec/rubocop/cop/style/alias_spec.rb +2 -2
- data/spec/rubocop/cop/style/and_or_spec.rb +2 -2
- data/spec/rubocop/cop/style/{favor_join_spec.rb → array_join_spec.rb} +1 -3
- data/spec/rubocop/cop/style/block_nesting_spec.rb +4 -4
- data/spec/rubocop/cop/style/case_equality_spec.rb +1 -0
- data/spec/rubocop/cop/style/case_indentation_spec.rb +12 -9
- data/spec/rubocop/cop/style/class_methods_spec.rb +23 -0
- data/spec/rubocop/cop/style/collection_methods_spec.rb +2 -2
- data/spec/rubocop/cop/style/{hash_methods_spec.rb → deprecated_hash_methods_spec.rb} +3 -3
- data/spec/rubocop/cop/style/empty_lines_around_access_modifier_spec.rb +2 -2
- data/spec/rubocop/cop/style/even_odd_spec.rb +8 -8
- data/spec/rubocop/cop/style/file_name_spec.rb +55 -42
- data/spec/rubocop/cop/style/for_spec.rb +4 -4
- data/spec/rubocop/cop/style/format_string_spec.rb +10 -10
- data/spec/rubocop/cop/style/guard_clause_spec.rb +77 -0
- data/spec/rubocop/cop/style/hash_syntax_spec.rb +4 -2
- data/spec/rubocop/cop/style/if_unless_modifier_spec.rb +4 -4
- data/spec/rubocop/cop/style/lambda_spec.rb +2 -2
- data/spec/rubocop/cop/style/line_end_concatenation_spec.rb +21 -0
- data/spec/rubocop/cop/style/multiline_if_then_spec.rb +1 -1
- data/spec/rubocop/cop/style/{favor_unless_over_negated_if_spec.rb → negated_if_spec.rb} +8 -3
- data/spec/rubocop/cop/style/{favor_until_over_negated_while_spec.rb → negated_while_spec.rb} +8 -3
- data/spec/rubocop/cop/style/nil_comparison_spec.rb +7 -13
- data/spec/rubocop/cop/style/non_nil_check_spec.rb +35 -0
- data/spec/rubocop/cop/style/not_spec.rb +11 -0
- data/spec/rubocop/cop/style/numeric_literals_spec.rb +0 -2
- data/spec/rubocop/cop/style/op_method_spec.rb +10 -2
- data/spec/rubocop/cop/style/parentheses_around_condition_spec.rb +2 -2
- data/spec/rubocop/cop/style/predicate_name_spec.rb +2 -1
- data/spec/rubocop/cop/style/raise_args_spec.rb +5 -0
- data/spec/rubocop/cop/style/rescue_modifier_spec.rb +2 -2
- data/spec/rubocop/cop/style/self_assignment_spec.rb +4 -4
- data/spec/rubocop/cop/style/signal_exception_spec.rb +24 -0
- data/spec/rubocop/cop/style/single_line_block_params_spec.rb +2 -0
- data/spec/rubocop/cop/style/single_space_before_first_arg_spec.rb +63 -0
- data/spec/rubocop/cop/style/special_global_vars_spec.rb +6 -5
- data/spec/rubocop/cop/style/trivial_accessors_spec.rb +6 -3
- data/spec/rubocop/cop/style/unless_else_spec.rb +2 -4
- data/spec/rubocop/cop/style/variable_interpolation_spec.rb +15 -6
- data/spec/rubocop/cop/style/when_then_spec.rb +3 -4
- data/spec/rubocop/cop/team_spec.rb +4 -18
- data/spec/rubocop/file_inspector_spec.rb +4 -0
- data/spec/rubocop/formatter/disabled_config_formatter_spec.rb +1 -1
- data/spec/rubocop/formatter/disabled_lines_formatter_spec.rb +69 -0
- data/spec/rubocop/options_spec.rb +5 -0
- data/spec/rubocop/target_finder_spec.rb +42 -11
- data/spec/support/shared_context.rb +1 -1
- data/spec/support/statement_modifier_helper.rb +1 -1
- metadata +75 -50
- data/lib/rubocop/cop/rails/read_attribute.rb +0 -28
- data/lib/rubocop/cop/style/favor_unless_over_negated_if.rb +0 -24
- data/lib/rubocop/cop/style/favor_until_over_negated_while.rb +0 -20
- data/spec/rubocop/cop/rails/read_attribute_spec.rb +0 -13
@@ -85,18 +85,18 @@ describe Rubocop::ConfigLoader do
|
|
85
85
|
before do
|
86
86
|
create_file('.rubocop.yml',
|
87
87
|
['AllCops:',
|
88
|
-
'
|
88
|
+
' Exclude:',
|
89
89
|
' - vendor/**'
|
90
90
|
])
|
91
91
|
|
92
92
|
create_file(file_path,
|
93
93
|
['AllCops:',
|
94
|
-
'
|
94
|
+
' Exclude: []'
|
95
95
|
])
|
96
96
|
end
|
97
97
|
|
98
|
-
it 'gets AllCops/
|
99
|
-
excludes = configuration_from_file['AllCops']['
|
98
|
+
it 'gets AllCops/Exclude from the highest directory level' do
|
99
|
+
excludes = configuration_from_file['AllCops']['Exclude']
|
100
100
|
expect(excludes).to eq([File.expand_path('vendor/**')])
|
101
101
|
end
|
102
102
|
end
|
@@ -107,7 +107,7 @@ describe Rubocop::ConfigLoader do
|
|
107
107
|
before do
|
108
108
|
create_file('.rubocop.yml',
|
109
109
|
['AllCops:',
|
110
|
-
'
|
110
|
+
' Exclude:',
|
111
111
|
' - vendor/**',
|
112
112
|
' - !ruby/regexp /[A-Z]/'
|
113
113
|
])
|
@@ -115,8 +115,8 @@ describe Rubocop::ConfigLoader do
|
|
115
115
|
create_file(file_path, ['inherit_from: ../.rubocop.yml'])
|
116
116
|
end
|
117
117
|
|
118
|
-
it 'gets an absolute AllCops/
|
119
|
-
excludes = configuration_from_file['AllCops']['
|
118
|
+
it 'gets an absolute AllCops/Exclude' do
|
119
|
+
excludes = configuration_from_file['AllCops']['Exclude']
|
120
120
|
expect(excludes).to eq([File.expand_path('vendor/**'), /[A-Z]/])
|
121
121
|
end
|
122
122
|
end
|
@@ -141,7 +141,7 @@ describe Rubocop::ConfigLoader do
|
|
141
141
|
before do
|
142
142
|
create_file('src/.rubocop.yml',
|
143
143
|
['AllCops:',
|
144
|
-
'
|
144
|
+
' Exclude:',
|
145
145
|
' - vendor/**'
|
146
146
|
])
|
147
147
|
|
@@ -149,7 +149,7 @@ describe Rubocop::ConfigLoader do
|
|
149
149
|
end
|
150
150
|
|
151
151
|
it 'gets an absolute AllCops/Exclude' do
|
152
|
-
excludes = configuration_from_file['AllCops']['
|
152
|
+
excludes = configuration_from_file['AllCops']['Exclude']
|
153
153
|
expect(excludes).to eq([File.expand_path('src/vendor/**')])
|
154
154
|
end
|
155
155
|
end
|
@@ -266,19 +266,19 @@ describe Rubocop::ConfigLoader do
|
|
266
266
|
let(:base) do
|
267
267
|
{
|
268
268
|
'AllCops' => {
|
269
|
-
'
|
270
|
-
'
|
269
|
+
'Include' => ['**/*.gemspec', '**/Rakefile'],
|
270
|
+
'Exclude' => []
|
271
271
|
}
|
272
272
|
}
|
273
273
|
end
|
274
274
|
let(:derived) do
|
275
|
-
{ 'AllCops' => { '
|
275
|
+
{ 'AllCops' => { 'Exclude' => ['example.rb', 'exclude_*'] } }
|
276
276
|
end
|
277
277
|
|
278
278
|
it 'returns a recursive merge of its two arguments' do
|
279
279
|
expect(merge).to eq('AllCops' => {
|
280
|
-
'
|
281
|
-
'
|
280
|
+
'Include' => ['**/*.gemspec', '**/Rakefile'],
|
281
|
+
'Exclude' => ['example.rb', 'exclude_*']
|
282
282
|
})
|
283
283
|
end
|
284
284
|
end
|
data/spec/rubocop/config_spec.rb
CHANGED
@@ -78,7 +78,7 @@ describe Rubocop::Config do
|
|
78
78
|
let(:hash) do
|
79
79
|
{
|
80
80
|
'AllCops' => {
|
81
|
-
'
|
81
|
+
'Include' => ['Gemfile', 'config/unicorn.rb.example']
|
82
82
|
}
|
83
83
|
}
|
84
84
|
end
|
@@ -104,7 +104,7 @@ describe Rubocop::Config do
|
|
104
104
|
let(:hash) do
|
105
105
|
{
|
106
106
|
'AllCops' => {
|
107
|
-
'
|
107
|
+
'Exclude' => ['/home/foo/project/log/*']
|
108
108
|
}
|
109
109
|
}
|
110
110
|
end
|
@@ -135,16 +135,16 @@ describe Rubocop::Config do
|
|
135
135
|
let(:hash) { {} }
|
136
136
|
let(:loaded_path) { 'example/.rubocop.yml' }
|
137
137
|
|
138
|
-
context 'when config file has AllCops =>
|
138
|
+
context 'when config file has AllCops => Include key' do
|
139
139
|
let(:hash) do
|
140
140
|
{
|
141
141
|
'AllCops' => {
|
142
|
-
'
|
142
|
+
'Include' => ['Gemfile', 'config/unicorn.rb.example']
|
143
143
|
}
|
144
144
|
}
|
145
145
|
end
|
146
146
|
|
147
|
-
it 'returns the
|
147
|
+
it 'returns the Include value' do
|
148
148
|
expect(patterns_to_include).to eq([
|
149
149
|
'Gemfile',
|
150
150
|
'config/unicorn.rb.example'
|
@@ -162,16 +162,16 @@ describe Rubocop::Config do
|
|
162
162
|
let(:hash) { {} }
|
163
163
|
let(:loaded_path) { 'example/.rubocop.yml' }
|
164
164
|
|
165
|
-
context 'when config file has AllCops =>
|
165
|
+
context 'when config file has AllCops => Exclude key' do
|
166
166
|
let(:hash) do
|
167
167
|
{
|
168
168
|
'AllCops' => {
|
169
|
-
'
|
169
|
+
'Exclude' => ['log/*']
|
170
170
|
}
|
171
171
|
}
|
172
172
|
end
|
173
173
|
|
174
|
-
it 'returns the
|
174
|
+
it 'returns the Exclude value' do
|
175
175
|
expect(patterns_to_exclude).to eq(['log/*'])
|
176
176
|
end
|
177
177
|
end
|
@@ -6,19 +6,24 @@ describe Rubocop::Cop::Lint::DeprecatedClassMethods do
|
|
6
6
|
subject(:cop) { described_class.new }
|
7
7
|
|
8
8
|
it 'registers an offense for File.exists?' do
|
9
|
-
inspect_source(cop,
|
10
|
-
['File.exists?(o)'])
|
9
|
+
inspect_source(cop, 'File.exists?(o)')
|
11
10
|
expect(cop.offenses.size).to eq(1)
|
12
11
|
expect(cop.messages)
|
13
|
-
.to eq(['File.exists
|
12
|
+
.to eq(['`File.exists?` is deprecated in favor of `File.exist?`.'])
|
13
|
+
end
|
14
|
+
|
15
|
+
it 'registers an offense for ::File.exists?' do
|
16
|
+
inspect_source(cop, '::File.exists?(o)')
|
17
|
+
expect(cop.offenses.size).to eq(1)
|
18
|
+
expect(cop.messages)
|
19
|
+
.to eq(['`File.exists?` is deprecated in favor of `File.exist?`.'])
|
14
20
|
end
|
15
21
|
|
16
22
|
it 'registers an offense for Dir.exists?' do
|
17
|
-
inspect_source(cop,
|
18
|
-
['Dir.exists?(o)'])
|
23
|
+
inspect_source(cop, 'Dir.exists?(o)')
|
19
24
|
expect(cop.offenses.size).to eq(1)
|
20
25
|
expect(cop.messages)
|
21
|
-
.to eq(['Dir.exists
|
26
|
+
.to eq(['`Dir.exists?` is deprecated in favor of `Dir.exist?`.'])
|
22
27
|
end
|
23
28
|
|
24
29
|
it 'auto-corrects File.exists? with File.exist?' do
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
describe Rubocop::Cop::Lint::EmptyInterpolation do
|
6
|
+
subject(:cop) { described_class.new }
|
7
|
+
|
8
|
+
it 'registers an offense for #{} in interpolation' do
|
9
|
+
inspect_source(cop, ['"this is the #{}"'])
|
10
|
+
expect(cop.offenses.size).to eq(1)
|
11
|
+
expect(cop.highlights).to eq(['#{}'])
|
12
|
+
end
|
13
|
+
|
14
|
+
it 'accepts non-empty interpolation' do
|
15
|
+
inspect_source(cop, '"this is #{top} silly"')
|
16
|
+
expect(cop.offenses).to be_empty
|
17
|
+
end
|
18
|
+
end
|
@@ -9,16 +9,14 @@ describe Rubocop::Cop::Lint::Eval do
|
|
9
9
|
inspect_source(cop,
|
10
10
|
['eval(something)'])
|
11
11
|
expect(cop.offenses.size).to eq(1)
|
12
|
-
expect(cop.
|
13
|
-
.to eq(['The use of eval is a serious security risk.'])
|
12
|
+
expect(cop.highlights) .to eq(['eval'])
|
14
13
|
end
|
15
14
|
|
16
15
|
it 'registers an offense for eval as command' do
|
17
16
|
inspect_source(cop,
|
18
17
|
['eval something'])
|
19
18
|
expect(cop.offenses.size).to eq(1)
|
20
|
-
expect(cop.
|
21
|
-
.to eq(['The use of eval is a serious security risk.'])
|
19
|
+
expect(cop.highlights) .to eq(['eval'])
|
22
20
|
end
|
23
21
|
|
24
22
|
it 'does not register an offense for eval as variable' do
|
@@ -18,4 +18,14 @@ describe Rubocop::Cop::Lint::LiteralInInterpolation do
|
|
18
18
|
expect(cop.offenses.size).to eq(1)
|
19
19
|
end
|
20
20
|
end
|
21
|
+
|
22
|
+
it 'accepts empty interpolation' do
|
23
|
+
inspect_source(cop, '"this is #{} silly"')
|
24
|
+
expect(cop.offenses).to be_empty
|
25
|
+
end
|
26
|
+
|
27
|
+
it 'accepts strings like __FILE__' do
|
28
|
+
inspect_source(cop, '"this is #{__FILE__} silly"')
|
29
|
+
expect(cop.offenses).to be_empty
|
30
|
+
end
|
21
31
|
end
|
@@ -13,8 +13,6 @@ describe Rubocop::Cop::Lint::RescueException do
|
|
13
13
|
' #do nothing',
|
14
14
|
'end'])
|
15
15
|
expect(cop.offenses.size).to eq(1)
|
16
|
-
expect(cop.messages)
|
17
|
-
.to eq(['Avoid rescuing the Exception class.'])
|
18
16
|
end
|
19
17
|
|
20
18
|
it 'registers an offense for rescue with ::Exception' do
|
@@ -25,8 +23,6 @@ describe Rubocop::Cop::Lint::RescueException do
|
|
25
23
|
' #do nothing',
|
26
24
|
'end'])
|
27
25
|
expect(cop.offenses.size).to eq(1)
|
28
|
-
expect(cop.messages)
|
29
|
-
.to eq(['Avoid rescuing the Exception class.'])
|
30
26
|
end
|
31
27
|
|
32
28
|
it 'registers an offense for rescue with StandardError, Exception' do
|
@@ -37,8 +33,6 @@ describe Rubocop::Cop::Lint::RescueException do
|
|
37
33
|
' #do nothing',
|
38
34
|
'end'])
|
39
35
|
expect(cop.offenses.size).to eq(1)
|
40
|
-
expect(cop.messages)
|
41
|
-
.to eq(['Avoid rescuing the Exception class.'])
|
42
36
|
end
|
43
37
|
|
44
38
|
it 'registers an offense for rescue with Exception => e' do
|
@@ -49,8 +43,6 @@ describe Rubocop::Cop::Lint::RescueException do
|
|
49
43
|
' #do nothing',
|
50
44
|
'end'])
|
51
45
|
expect(cop.offenses.size).to eq(1)
|
52
|
-
expect(cop.messages)
|
53
|
-
.to eq(['Avoid rescuing the Exception class.'])
|
54
46
|
end
|
55
47
|
|
56
48
|
it 'does not register an offense for rescue with no class' do
|
@@ -22,7 +22,7 @@ describe Rubocop::Cop::Lint::ShadowingOuterLocalVariable do
|
|
22
22
|
inspect_source(cop, source)
|
23
23
|
expect(cop.offenses.size).to eq(1)
|
24
24
|
expect(cop.offenses.first.message)
|
25
|
-
.to include('Shadowing outer local variable - foo')
|
25
|
+
.to include('Shadowing outer local variable - `foo`')
|
26
26
|
expect(cop.offenses.first.line).to eq(4)
|
27
27
|
end
|
28
28
|
|
@@ -46,7 +46,7 @@ describe Rubocop::Cop::Lint::ShadowingOuterLocalVariable do
|
|
46
46
|
inspect_source(cop, source)
|
47
47
|
expect(cop.offenses.size).to eq(1)
|
48
48
|
expect(cop.offenses.first.message)
|
49
|
-
.to include('Shadowing outer local variable - foo')
|
49
|
+
.to include('Shadowing outer local variable - `foo`')
|
50
50
|
expect(cop.offenses.first.line).to eq(4)
|
51
51
|
end
|
52
52
|
|
@@ -72,7 +72,7 @@ describe Rubocop::Cop::Lint::ShadowingOuterLocalVariable do
|
|
72
72
|
inspect_source(cop, source)
|
73
73
|
expect(cop.offenses.size).to eq(1)
|
74
74
|
expect(cop.offenses.first.message)
|
75
|
-
.to include('Shadowing outer local variable - foo')
|
75
|
+
.to include('Shadowing outer local variable - `foo`')
|
76
76
|
expect(cop.offenses.first.line).to eq(4)
|
77
77
|
end
|
78
78
|
|
@@ -97,7 +97,7 @@ describe Rubocop::Cop::Lint::ShadowingOuterLocalVariable do
|
|
97
97
|
inspect_source(cop, source)
|
98
98
|
expect(cop.offenses.size).to eq(1)
|
99
99
|
expect(cop.offenses.first.message)
|
100
|
-
.to include('Shadowing outer local variable - foo')
|
100
|
+
.to include('Shadowing outer local variable - `foo`')
|
101
101
|
expect(cop.offenses.first.line).to eq(4)
|
102
102
|
end
|
103
103
|
|
@@ -0,0 +1,48 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
describe Rubocop::Cop::Lint::SpaceBeforeFirstArg do
|
6
|
+
subject(:cop) { described_class.new }
|
7
|
+
|
8
|
+
context 'for method calls without parentheses' do
|
9
|
+
it 'registers an offense for method call with no space before the ' \
|
10
|
+
'first arg' do
|
11
|
+
inspect_source(cop, ['something?x',
|
12
|
+
'a.something!y, z'])
|
13
|
+
expect(cop.messages)
|
14
|
+
.to eq(['Put space between the method name and the first ' \
|
15
|
+
'argument.'] * 2)
|
16
|
+
expect(cop.highlights).to eq(%w(x y))
|
17
|
+
end
|
18
|
+
|
19
|
+
it 'accepts a method call with space before the first arg' do
|
20
|
+
inspect_source(cop, ['something? x',
|
21
|
+
'a.something! y, z'])
|
22
|
+
expect(cop.offenses).to be_empty
|
23
|
+
end
|
24
|
+
|
25
|
+
it 'accepts square brackets operator' do
|
26
|
+
inspect_source(cop, ['something[:x]'])
|
27
|
+
expect(cop.offenses).to be_empty
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
context 'for method calls with parentheses' do
|
32
|
+
it 'accepts a method call without space' do
|
33
|
+
inspect_source(cop, ['something?(x)',
|
34
|
+
'a.something(y, z)'])
|
35
|
+
expect(cop.offenses).to be_empty
|
36
|
+
end
|
37
|
+
|
38
|
+
it 'accepts a method call with space after the left parenthesis' do
|
39
|
+
inspect_source(cop, ['something?( x )'])
|
40
|
+
expect(cop.offenses).to be_empty
|
41
|
+
end
|
42
|
+
|
43
|
+
it 'accepts setter call' do
|
44
|
+
inspect_source(cop, ['self.class.controller_path=(path)'])
|
45
|
+
expect(cop.offenses).to be_empty
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
@@ -24,4 +24,14 @@ describe Rubocop::Cop::Lint::StringConversionInInterpolation do
|
|
24
24
|
inspect_source(cop, '"this is the #{result}"')
|
25
25
|
expect(cop.offenses).to be_empty
|
26
26
|
end
|
27
|
+
|
28
|
+
it 'does not explode on empty interpolation' do
|
29
|
+
inspect_source(cop, '"this is #{} silly"')
|
30
|
+
expect(cop.offenses).to be_empty
|
31
|
+
end
|
32
|
+
|
33
|
+
it 'autocorrects by removing the redundant to_s' do
|
34
|
+
corrected = autocorrect_source(cop, ['"some #{something.to_s}"'])
|
35
|
+
expect(corrected).to eq '"some #{something}"'
|
36
|
+
end
|
27
37
|
end
|
@@ -0,0 +1,154 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
describe Rubocop::Cop::Lint::UselessAccessModifier do
|
6
|
+
subject(:cop) { described_class.new }
|
7
|
+
|
8
|
+
context 'when an access modifier has no effect' do
|
9
|
+
let(:source) do
|
10
|
+
[
|
11
|
+
'class SomeClass',
|
12
|
+
' def some_method',
|
13
|
+
' puts 10',
|
14
|
+
' end',
|
15
|
+
' private',
|
16
|
+
' def self.some_method',
|
17
|
+
' puts 10',
|
18
|
+
' end',
|
19
|
+
'end'
|
20
|
+
]
|
21
|
+
end
|
22
|
+
|
23
|
+
it 'registers an offense' do
|
24
|
+
inspect_source(cop, source)
|
25
|
+
expect(cop.offenses.size).to eq(1)
|
26
|
+
expect(cop.offenses.first.message)
|
27
|
+
.to eq('Useless `private` access modifier.')
|
28
|
+
expect(cop.offenses.first.line).to eq(5)
|
29
|
+
expect(cop.highlights).to eq(['private'])
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
context 'when an access modifier has no methods' do
|
34
|
+
let(:source) do
|
35
|
+
[
|
36
|
+
'class SomeClass',
|
37
|
+
' protected',
|
38
|
+
'end'
|
39
|
+
]
|
40
|
+
end
|
41
|
+
|
42
|
+
it 'registers an offense' do
|
43
|
+
inspect_source(cop, source)
|
44
|
+
expect(cop.offenses.size).to eq(1)
|
45
|
+
expect(cop.offenses.first.message)
|
46
|
+
.to eq('Useless `protected` access modifier.')
|
47
|
+
expect(cop.offenses.first.line).to eq(2)
|
48
|
+
expect(cop.highlights).to eq(['protected'])
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
context 'when consecutive access modifiers' do
|
53
|
+
let(:source) do
|
54
|
+
[
|
55
|
+
'class SomeClass',
|
56
|
+
' private',
|
57
|
+
' private',
|
58
|
+
' def some_method',
|
59
|
+
' puts 10',
|
60
|
+
' end',
|
61
|
+
' def some_other_method',
|
62
|
+
' puts 10',
|
63
|
+
' end',
|
64
|
+
'end'
|
65
|
+
]
|
66
|
+
end
|
67
|
+
|
68
|
+
it 'registers an offense' do
|
69
|
+
inspect_source(cop, source)
|
70
|
+
expect(cop.offenses.size).to eq(1)
|
71
|
+
expect(cop.offenses.first.message)
|
72
|
+
.to eq('Useless `private` access modifier.')
|
73
|
+
expect(cop.offenses.first.line).to eq(2)
|
74
|
+
expect(cop.highlights).to eq(['private'])
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
context 'when passing method as symbol' do
|
79
|
+
let(:source) do
|
80
|
+
[
|
81
|
+
'class SomeClass',
|
82
|
+
' def some_method',
|
83
|
+
' puts 10',
|
84
|
+
' end',
|
85
|
+
' private :some_method',
|
86
|
+
'end'
|
87
|
+
]
|
88
|
+
end
|
89
|
+
|
90
|
+
it 'does not register an offense' do
|
91
|
+
inspect_source(cop, source)
|
92
|
+
expect(cop.offenses.size).to eq(0)
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
context 'when class is empty save modifier' do
|
97
|
+
let(:source) do
|
98
|
+
[
|
99
|
+
'class SomeClass',
|
100
|
+
' private',
|
101
|
+
'end'
|
102
|
+
]
|
103
|
+
end
|
104
|
+
|
105
|
+
it 'registers an offense' do
|
106
|
+
inspect_source(cop, source)
|
107
|
+
expect(cop.offenses.size).to eq(1)
|
108
|
+
expect(cop.offenses.first.message)
|
109
|
+
.to eq('Useless `private` access modifier.')
|
110
|
+
expect(cop.offenses.first.line).to eq(2)
|
111
|
+
expect(cop.highlights).to eq(['private'])
|
112
|
+
end
|
113
|
+
end
|
114
|
+
|
115
|
+
context 'when multiple class definitions in file but only one has offense' do
|
116
|
+
let(:source) do
|
117
|
+
[
|
118
|
+
'class SomeClass',
|
119
|
+
' private',
|
120
|
+
'end',
|
121
|
+
'class SomeOtherClass',
|
122
|
+
'end'
|
123
|
+
]
|
124
|
+
end
|
125
|
+
|
126
|
+
it 'registers an offense' do
|
127
|
+
inspect_source(cop, source)
|
128
|
+
expect(cop.offenses.size).to eq(1)
|
129
|
+
expect(cop.offenses.first.message)
|
130
|
+
.to eq('Useless `private` access modifier.')
|
131
|
+
expect(cop.offenses.first.line).to eq(2)
|
132
|
+
expect(cop.highlights).to eq(['private'])
|
133
|
+
end
|
134
|
+
end
|
135
|
+
|
136
|
+
if RUBY_ENGINE == 'ruby' && RUBY_VERSION.start_with?('2.1')
|
137
|
+
context 'ruby 2.1 style modifiers' do
|
138
|
+
let(:source) do
|
139
|
+
[
|
140
|
+
'class SomeClass',
|
141
|
+
' private def some_method',
|
142
|
+
' puts 10',
|
143
|
+
' end',
|
144
|
+
'end'
|
145
|
+
]
|
146
|
+
end
|
147
|
+
|
148
|
+
it 'does not register an offense' do
|
149
|
+
inspect_source(cop, source)
|
150
|
+
expect(cop.offenses.size).to eq(0)
|
151
|
+
end
|
152
|
+
end
|
153
|
+
end
|
154
|
+
end
|