sabat-rubocop 0.9.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.
- data/.gitignore +50 -0
- data/.rspec +1 -0
- data/.rubocop.yml +7 -0
- data/.travis.yml +7 -0
- data/.yardopts +2 -0
- data/CHANGELOG.md +268 -0
- data/CONTRIBUTING.md +16 -0
- data/Gemfile +7 -0
- data/LICENSE.txt +20 -0
- data/README.md +324 -0
- data/Rakefile +29 -0
- data/bin/rubocop +22 -0
- data/config/default.yml +58 -0
- data/config/disabled.yml +5 -0
- data/config/enabled.yml +403 -0
- data/lib/rubocop.rb +116 -0
- data/lib/rubocop/cli.rb +407 -0
- data/lib/rubocop/config.rb +250 -0
- data/lib/rubocop/config_store.rb +39 -0
- data/lib/rubocop/cop/cop.rb +138 -0
- data/lib/rubocop/cop/lint/assignment_in_condition.rb +54 -0
- data/lib/rubocop/cop/lint/end_alignment.rb +189 -0
- data/lib/rubocop/cop/lint/end_in_method.rb +30 -0
- data/lib/rubocop/cop/lint/ensure_return.rb +22 -0
- data/lib/rubocop/cop/lint/eval.rb +22 -0
- data/lib/rubocop/cop/lint/handle_exceptions.rb +20 -0
- data/lib/rubocop/cop/lint/literal_in_condition.rb +81 -0
- data/lib/rubocop/cop/lint/loop.rb +29 -0
- data/lib/rubocop/cop/lint/rescue_exception.rb +29 -0
- data/lib/rubocop/cop/lint/shadowing_outer_local_variable.rb +34 -0
- data/lib/rubocop/cop/lint/unreachable_code.rb +35 -0
- data/lib/rubocop/cop/lint/unused_local_variable.rb +32 -0
- data/lib/rubocop/cop/lint/void.rb +58 -0
- data/lib/rubocop/cop/offence.rb +136 -0
- data/lib/rubocop/cop/rails/validation.rb +30 -0
- data/lib/rubocop/cop/style/access_control.rb +58 -0
- data/lib/rubocop/cop/style/alias.rb +28 -0
- data/lib/rubocop/cop/style/align_parameters.rb +39 -0
- data/lib/rubocop/cop/style/and_or.rb +45 -0
- data/lib/rubocop/cop/style/ascii_comments.rb +21 -0
- data/lib/rubocop/cop/style/ascii_identifiers.rb +22 -0
- data/lib/rubocop/cop/style/attr.rb +20 -0
- data/lib/rubocop/cop/style/avoid_class_vars.rb +20 -0
- data/lib/rubocop/cop/style/avoid_for.rb +18 -0
- data/lib/rubocop/cop/style/avoid_global_vars.rb +65 -0
- data/lib/rubocop/cop/style/avoid_perl_backrefs.rb +21 -0
- data/lib/rubocop/cop/style/avoid_perlisms.rb +50 -0
- data/lib/rubocop/cop/style/begin_block.rb +18 -0
- data/lib/rubocop/cop/style/block_comments.rb +20 -0
- data/lib/rubocop/cop/style/block_nesting.rb +47 -0
- data/lib/rubocop/cop/style/blocks.rb +27 -0
- data/lib/rubocop/cop/style/case_equality.rb +22 -0
- data/lib/rubocop/cop/style/case_indentation.rb +28 -0
- data/lib/rubocop/cop/style/character_literal.rb +37 -0
- data/lib/rubocop/cop/style/class_and_module_camel_case.rb +33 -0
- data/lib/rubocop/cop/style/class_methods.rb +22 -0
- data/lib/rubocop/cop/style/collection_methods.rb +56 -0
- data/lib/rubocop/cop/style/colon_method_call.rb +29 -0
- data/lib/rubocop/cop/style/constant_name.rb +31 -0
- data/lib/rubocop/cop/style/def_parentheses.rb +70 -0
- data/lib/rubocop/cop/style/documentation.rb +58 -0
- data/lib/rubocop/cop/style/dot_position.rb +25 -0
- data/lib/rubocop/cop/style/empty_line_between_defs.rb +26 -0
- data/lib/rubocop/cop/style/empty_lines.rb +40 -0
- data/lib/rubocop/cop/style/empty_literal.rb +53 -0
- data/lib/rubocop/cop/style/encoding.rb +29 -0
- data/lib/rubocop/cop/style/end_block.rb +18 -0
- data/lib/rubocop/cop/style/end_of_line.rb +23 -0
- data/lib/rubocop/cop/style/favor_join.rb +29 -0
- data/lib/rubocop/cop/style/favor_modifier.rb +118 -0
- data/lib/rubocop/cop/style/favor_sprintf.rb +28 -0
- data/lib/rubocop/cop/style/favor_unless_over_negated_if.rb +54 -0
- data/lib/rubocop/cop/style/hash_syntax.rb +47 -0
- data/lib/rubocop/cop/style/if_then_else.rb +29 -0
- data/lib/rubocop/cop/style/if_with_semicolon.rb +20 -0
- data/lib/rubocop/cop/style/lambda.rb +47 -0
- data/lib/rubocop/cop/style/leading_comment_space.rb +25 -0
- data/lib/rubocop/cop/style/line_continuation.rb +26 -0
- data/lib/rubocop/cop/style/line_length.rb +30 -0
- data/lib/rubocop/cop/style/method_and_variable_snake_case.rb +61 -0
- data/lib/rubocop/cop/style/method_call_parentheses.rb +22 -0
- data/lib/rubocop/cop/style/method_length.rb +57 -0
- data/lib/rubocop/cop/style/multiline_if_then.rb +47 -0
- data/lib/rubocop/cop/style/not.rb +24 -0
- data/lib/rubocop/cop/style/numeric_literals.rb +25 -0
- data/lib/rubocop/cop/style/one_line_conditional.rb +20 -0
- data/lib/rubocop/cop/style/op_method.rb +29 -0
- data/lib/rubocop/cop/style/parameter_lists.rb +42 -0
- data/lib/rubocop/cop/style/parentheses_around_condition.rb +42 -0
- data/lib/rubocop/cop/style/proc.rb +30 -0
- data/lib/rubocop/cop/style/reduce_arguments.rb +34 -0
- data/lib/rubocop/cop/style/regexp_literal.rb +39 -0
- data/lib/rubocop/cop/style/rescue_modifier.rb +55 -0
- data/lib/rubocop/cop/style/semicolon.rb +51 -0
- data/lib/rubocop/cop/style/single_line_methods.rb +48 -0
- data/lib/rubocop/cop/style/space_after_comma_etc.rb +69 -0
- data/lib/rubocop/cop/style/space_after_control_keyword.rb +32 -0
- data/lib/rubocop/cop/style/string_literals.rb +36 -0
- data/lib/rubocop/cop/style/surrounding_space.rb +314 -0
- data/lib/rubocop/cop/style/symbol_array.rb +31 -0
- data/lib/rubocop/cop/style/symbol_name.rb +27 -0
- data/lib/rubocop/cop/style/tab.rb +25 -0
- data/lib/rubocop/cop/style/ternary_operator.rb +49 -0
- data/lib/rubocop/cop/style/trailing_whitespace.rb +24 -0
- data/lib/rubocop/cop/style/trivial_accessors.rb +32 -0
- data/lib/rubocop/cop/style/unless_else.rb +26 -0
- data/lib/rubocop/cop/style/variable_interpolation.rb +32 -0
- data/lib/rubocop/cop/style/when_then.rb +25 -0
- data/lib/rubocop/cop/style/while_until_do.rb +45 -0
- data/lib/rubocop/cop/style/word_array.rb +44 -0
- data/lib/rubocop/cop/util.rb +27 -0
- data/lib/rubocop/cop/variable_inspector.rb +280 -0
- data/lib/rubocop/formatter/base_formatter.rb +119 -0
- data/lib/rubocop/formatter/clang_style_formatter.rb +21 -0
- data/lib/rubocop/formatter/emacs_style_formatter.rb +17 -0
- data/lib/rubocop/formatter/formatter_set.rb +77 -0
- data/lib/rubocop/formatter/json_formatter.rb +76 -0
- data/lib/rubocop/formatter/progress_formatter.rb +63 -0
- data/lib/rubocop/formatter/simple_text_formatter.rb +62 -0
- data/lib/rubocop/version.rb +21 -0
- data/rubocop.gemspec +36 -0
- data/spec/.rubocop.yml +5 -0
- data/spec/project_spec.rb +24 -0
- data/spec/rubocop/cli_spec.rb +906 -0
- data/spec/rubocop/config_spec.rb +470 -0
- data/spec/rubocop/config_store_spec.rb +66 -0
- data/spec/rubocop/cops/cop_spec.rb +38 -0
- data/spec/rubocop/cops/lint/assignment_in_condition_spec.rb +111 -0
- data/spec/rubocop/cops/lint/end_alignment_spec.rb +333 -0
- data/spec/rubocop/cops/lint/end_in_method_spec.rb +35 -0
- data/spec/rubocop/cops/lint/ensure_return_spec.rb +37 -0
- data/spec/rubocop/cops/lint/eval_spec.rb +41 -0
- data/spec/rubocop/cops/lint/handle_exceptions_spec.rb +36 -0
- data/spec/rubocop/cops/lint/literal_in_condition_spec.rb +42 -0
- data/spec/rubocop/cops/lint/loop_spec.rb +33 -0
- data/spec/rubocop/cops/lint/rescue_exception_spec.rb +127 -0
- data/spec/rubocop/cops/lint/shadowing_outer_local_variable_spec.rb +243 -0
- data/spec/rubocop/cops/lint/unreachable_code_spec.rb +69 -0
- data/spec/rubocop/cops/lint/unused_local_variable_spec.rb +497 -0
- data/spec/rubocop/cops/lint/void_spec.rb +63 -0
- data/spec/rubocop/cops/offence_spec.rb +133 -0
- data/spec/rubocop/cops/rails/validation_spec.rb +27 -0
- data/spec/rubocop/cops/style/access_control_spec.rb +142 -0
- data/spec/rubocop/cops/style/alias_spec.rb +47 -0
- data/spec/rubocop/cops/style/align_parameters_spec.rb +199 -0
- data/spec/rubocop/cops/style/and_or_spec.rb +39 -0
- data/spec/rubocop/cops/style/ascii_comments_spec.rb +28 -0
- data/spec/rubocop/cops/style/ascii_identifiers_spec.rb +28 -0
- data/spec/rubocop/cops/style/attr_spec.rb +20 -0
- data/spec/rubocop/cops/style/avoid_class_vars_spec.rb +27 -0
- data/spec/rubocop/cops/style/avoid_for_spec.rb +37 -0
- data/spec/rubocop/cops/style/avoid_global_vars_spec.rb +34 -0
- data/spec/rubocop/cops/style/avoid_perl_backrefs_spec.rb +20 -0
- data/spec/rubocop/cops/style/avoid_perlisms_spec.rb +47 -0
- data/spec/rubocop/cops/style/begin_block_spec.rb +19 -0
- data/spec/rubocop/cops/style/block_comments_spec.rb +27 -0
- data/spec/rubocop/cops/style/block_nesting_spec.rb +159 -0
- data/spec/rubocop/cops/style/blocks_spec.rb +35 -0
- data/spec/rubocop/cops/style/case_equality_spec.rb +18 -0
- data/spec/rubocop/cops/style/case_indentation_spec.rb +88 -0
- data/spec/rubocop/cops/style/character_literal_spec.rb +28 -0
- data/spec/rubocop/cops/style/class_and_module_camel_case_spec.rb +46 -0
- data/spec/rubocop/cops/style/class_methods_spec.rb +51 -0
- data/spec/rubocop/cops/style/collection_methods_spec.rb +41 -0
- data/spec/rubocop/cops/style/colon_method_call_spec.rb +55 -0
- data/spec/rubocop/cops/style/constant_name_spec.rb +56 -0
- data/spec/rubocop/cops/style/def_with_parentheses_spec.rb +40 -0
- data/spec/rubocop/cops/style/def_without_parentheses_spec.rb +34 -0
- data/spec/rubocop/cops/style/documentation_spec.rb +79 -0
- data/spec/rubocop/cops/style/dot_position_spec.rb +30 -0
- data/spec/rubocop/cops/style/empty_line_between_defs_spec.rb +85 -0
- data/spec/rubocop/cops/style/empty_lines_spec.rb +40 -0
- data/spec/rubocop/cops/style/empty_literal_spec.rb +91 -0
- data/spec/rubocop/cops/style/encoding_spec.rb +49 -0
- data/spec/rubocop/cops/style/end_block_spec.rb +19 -0
- data/spec/rubocop/cops/style/end_of_line_spec.rb +25 -0
- data/spec/rubocop/cops/style/favor_join_spec.rb +37 -0
- data/spec/rubocop/cops/style/favor_modifier_spec.rb +160 -0
- data/spec/rubocop/cops/style/favor_sprintf_spec.rb +53 -0
- data/spec/rubocop/cops/style/favor_unless_over_negated_if_spec.rb +64 -0
- data/spec/rubocop/cops/style/favor_until_over_negated_while_spec.rb +47 -0
- data/spec/rubocop/cops/style/hash_syntax_spec.rb +51 -0
- data/spec/rubocop/cops/style/if_with_semicolon_spec.rb +25 -0
- data/spec/rubocop/cops/style/lambda_spec.rb +45 -0
- data/spec/rubocop/cops/style/leading_comment_space_spec.rb +65 -0
- data/spec/rubocop/cops/style/line_continuation_spec.rb +26 -0
- data/spec/rubocop/cops/style/line_length_spec.rb +25 -0
- data/spec/rubocop/cops/style/method_and_variable_snake_case_spec.rb +95 -0
- data/spec/rubocop/cops/style/method_call_parentheses_spec.rb +25 -0
- data/spec/rubocop/cops/style/method_length_spec.rb +151 -0
- data/spec/rubocop/cops/style/multiline_if_then_spec.rb +97 -0
- data/spec/rubocop/cops/style/not_spec.rb +28 -0
- data/spec/rubocop/cops/style/numeric_literals_spec.rb +51 -0
- data/spec/rubocop/cops/style/one_line_conditional_spec.rb +18 -0
- data/spec/rubocop/cops/style/op_method_spec.rb +80 -0
- data/spec/rubocop/cops/style/parameter_lists_spec.rb +49 -0
- data/spec/rubocop/cops/style/parentheses_around_condition_spec.rb +59 -0
- data/spec/rubocop/cops/style/proc_spec.rb +28 -0
- data/spec/rubocop/cops/style/reduce_arguments_spec.rb +59 -0
- data/spec/rubocop/cops/style/regexp_literal_spec.rb +83 -0
- data/spec/rubocop/cops/style/rescue_modifier_spec.rb +122 -0
- data/spec/rubocop/cops/style/semicolon_spec.rb +95 -0
- data/spec/rubocop/cops/style/single_line_methods_spec.rb +54 -0
- data/spec/rubocop/cops/style/space_after_colon_spec.rb +29 -0
- data/spec/rubocop/cops/style/space_after_comma_spec.rb +31 -0
- data/spec/rubocop/cops/style/space_after_control_keyword_spec.rb +69 -0
- data/spec/rubocop/cops/style/space_after_semicolon_spec.rb +24 -0
- data/spec/rubocop/cops/style/space_around_braces_spec.rb +49 -0
- data/spec/rubocop/cops/style/space_around_equals_in_default_parameter_spec.rb +34 -0
- data/spec/rubocop/cops/style/space_around_operators_spec.rb +216 -0
- data/spec/rubocop/cops/style/space_inside_brackets_spec.rb +51 -0
- data/spec/rubocop/cops/style/space_inside_hash_literal_braces_spec.rb +99 -0
- data/spec/rubocop/cops/style/space_inside_parens_spec.rb +33 -0
- data/spec/rubocop/cops/style/string_literals_spec.rb +62 -0
- data/spec/rubocop/cops/style/symbol_array_spec.rb +45 -0
- data/spec/rubocop/cops/style/symbol_name_spec.rb +122 -0
- data/spec/rubocop/cops/style/tab_spec.rb +23 -0
- data/spec/rubocop/cops/style/ternary_operator_spec.rb +42 -0
- data/spec/rubocop/cops/style/trailing_whitespace_spec.rb +29 -0
- data/spec/rubocop/cops/style/trivial_accessors_spec.rb +338 -0
- data/spec/rubocop/cops/style/unless_else_spec.rb +31 -0
- data/spec/rubocop/cops/style/variable_interpolation_spec.rb +53 -0
- data/spec/rubocop/cops/style/when_then_spec.rb +40 -0
- data/spec/rubocop/cops/style/while_until_do_spec.rb +47 -0
- data/spec/rubocop/cops/style/word_array_spec.rb +61 -0
- data/spec/rubocop/cops/variable_inspector_spec.rb +374 -0
- data/spec/rubocop/formatter/base_formatter_spec.rb +190 -0
- data/spec/rubocop/formatter/clang_style_formatter_spec.rb +70 -0
- data/spec/rubocop/formatter/emacs_style_formatter_spec.rb +32 -0
- data/spec/rubocop/formatter/formatter_set_spec.rb +132 -0
- data/spec/rubocop/formatter/json_formatter_spec.rb +142 -0
- data/spec/rubocop/formatter/progress_formatter_spec.rb +196 -0
- data/spec/rubocop/formatter/simple_text_formatter_spec.rb +74 -0
- data/spec/spec_helper.rb +92 -0
- data/spec/support/file_helper.rb +21 -0
- data/spec/support/isolated_environment.rb +27 -0
- data/spec/support/mri_syntax_checker.rb +69 -0
- data/spec/support/shared_examples.rb +33 -0
- metadata +517 -0
@@ -0,0 +1,35 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
module Rubocop
|
6
|
+
module Cop
|
7
|
+
module Lint
|
8
|
+
describe EndInMethod do
|
9
|
+
let(:cop) { EndInMethod.new }
|
10
|
+
|
11
|
+
it 'reports an offence for def with an END inside' do
|
12
|
+
src = ['def test',
|
13
|
+
' END { something }',
|
14
|
+
'end']
|
15
|
+
inspect_source(cop, src)
|
16
|
+
expect(cop.offences.size).to eq(1)
|
17
|
+
end
|
18
|
+
|
19
|
+
it 'reports an offence for defs with an END inside' do
|
20
|
+
src = ['def self.test',
|
21
|
+
' END { something }',
|
22
|
+
'end']
|
23
|
+
inspect_source(cop, src)
|
24
|
+
expect(cop.offences.size).to eq(1)
|
25
|
+
end
|
26
|
+
|
27
|
+
it 'accepts END outside of def(s)' do
|
28
|
+
src = ['END { something }']
|
29
|
+
inspect_source(cop, src)
|
30
|
+
expect(cop.offences).to be_empty
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
module Rubocop
|
6
|
+
module Cop
|
7
|
+
module Lint
|
8
|
+
describe EnsureReturn do
|
9
|
+
let(:er) { EnsureReturn.new }
|
10
|
+
|
11
|
+
it 'registers an offence for return in ensure' do
|
12
|
+
inspect_source(er,
|
13
|
+
['begin',
|
14
|
+
' something',
|
15
|
+
'ensure',
|
16
|
+
' file.close',
|
17
|
+
' return',
|
18
|
+
'end'])
|
19
|
+
expect(er.offences.size).to eq(1)
|
20
|
+
expect(er.offences.map(&:message))
|
21
|
+
.to eq([EnsureReturn::MSG])
|
22
|
+
end
|
23
|
+
|
24
|
+
it 'does not register an offence for return outside ensure' do
|
25
|
+
inspect_source(er,
|
26
|
+
['begin',
|
27
|
+
' something',
|
28
|
+
' return',
|
29
|
+
'ensure',
|
30
|
+
' file.close',
|
31
|
+
'end'])
|
32
|
+
expect(er.offences).to be_empty
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
module Rubocop
|
6
|
+
module Cop
|
7
|
+
module Lint
|
8
|
+
describe Eval do
|
9
|
+
let(:a) { Eval.new }
|
10
|
+
|
11
|
+
it 'registers an offence for eval as function' do
|
12
|
+
inspect_source(a,
|
13
|
+
['eval(something)'])
|
14
|
+
expect(a.offences.size).to eq(1)
|
15
|
+
expect(a.offences.map(&:message))
|
16
|
+
.to eq([Eval::MSG])
|
17
|
+
end
|
18
|
+
|
19
|
+
it 'registers an offence for eval as command' do
|
20
|
+
inspect_source(a,
|
21
|
+
['eval something'])
|
22
|
+
expect(a.offences.size).to eq(1)
|
23
|
+
expect(a.offences.map(&:message))
|
24
|
+
.to eq([Eval::MSG])
|
25
|
+
end
|
26
|
+
|
27
|
+
it 'does not register an offence for eval as variable' do
|
28
|
+
inspect_source(a,
|
29
|
+
['eval = something'])
|
30
|
+
expect(a.offences).to be_empty
|
31
|
+
end
|
32
|
+
|
33
|
+
it 'does not register an offence for eval as method' do
|
34
|
+
inspect_source(a,
|
35
|
+
['something.eval'])
|
36
|
+
expect(a.offences).to be_empty
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
module Rubocop
|
6
|
+
module Cop
|
7
|
+
module Lint
|
8
|
+
describe HandleExceptions do
|
9
|
+
let(:he) { HandleExceptions.new }
|
10
|
+
|
11
|
+
it 'registers an offence for empty rescue block' do
|
12
|
+
inspect_source(he,
|
13
|
+
['begin',
|
14
|
+
' something',
|
15
|
+
'rescue',
|
16
|
+
' #do nothing',
|
17
|
+
'end'])
|
18
|
+
expect(he.offences.size).to eq(1)
|
19
|
+
expect(he.offences.map(&:message))
|
20
|
+
.to eq([HandleExceptions::MSG])
|
21
|
+
end
|
22
|
+
|
23
|
+
it 'does not register an offence for rescue with body' do
|
24
|
+
inspect_source(he,
|
25
|
+
['begin',
|
26
|
+
' something',
|
27
|
+
' return',
|
28
|
+
'rescue',
|
29
|
+
' file.close',
|
30
|
+
'end'])
|
31
|
+
expect(he.offences).to be_empty
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
module Rubocop
|
6
|
+
module Cop
|
7
|
+
module Lint
|
8
|
+
describe LiteralInCondition do
|
9
|
+
let(:cop) { LiteralInCondition.new }
|
10
|
+
|
11
|
+
%w(1 2.0 [1] {}).each do |lit|
|
12
|
+
it "registers an offence for literal #{lit} in condition" do
|
13
|
+
inspect_source(cop,
|
14
|
+
["if x && #{lit}",
|
15
|
+
' top',
|
16
|
+
'end'
|
17
|
+
])
|
18
|
+
expect(cop.offences.size).to eq(1)
|
19
|
+
end
|
20
|
+
|
21
|
+
it "accepts literal #{lit} if it's not an and/or operand" do
|
22
|
+
inspect_source(cop,
|
23
|
+
["if test(#{lit})",
|
24
|
+
' top',
|
25
|
+
'end'
|
26
|
+
])
|
27
|
+
expect(cop.offences).to be_empty
|
28
|
+
end
|
29
|
+
|
30
|
+
it "accepts literal #{lit} in non-toplevel and/or" do
|
31
|
+
inspect_source(cop,
|
32
|
+
["if (a || #{lit}).something",
|
33
|
+
' top',
|
34
|
+
'end'
|
35
|
+
])
|
36
|
+
expect(cop.offences).to be_empty
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
module Rubocop
|
6
|
+
module Cop
|
7
|
+
module Lint
|
8
|
+
describe Loop do
|
9
|
+
let(:loop) { Loop.new }
|
10
|
+
|
11
|
+
it 'registers an offence for begin/end/while' do
|
12
|
+
inspect_source(loop, ['begin something; top; end while test'])
|
13
|
+
expect(loop.offences.size).to eq(1)
|
14
|
+
end
|
15
|
+
|
16
|
+
it 'registers an offence for begin/end/until' do
|
17
|
+
inspect_source(loop, ['begin something; top; end until test'])
|
18
|
+
expect(loop.offences.size).to eq(1)
|
19
|
+
end
|
20
|
+
|
21
|
+
it 'accepts normal while' do
|
22
|
+
inspect_source(loop, ['while test; one; two; end'])
|
23
|
+
expect(loop.offences).to be_empty
|
24
|
+
end
|
25
|
+
|
26
|
+
it 'accepts normal until' do
|
27
|
+
inspect_source(loop, ['until test; one; two; end'])
|
28
|
+
expect(loop.offences).to be_empty
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,127 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
module Rubocop
|
6
|
+
module Cop
|
7
|
+
module Lint
|
8
|
+
describe RescueException do
|
9
|
+
let(:re) { RescueException.new }
|
10
|
+
|
11
|
+
it 'registers an offence for rescue from Exception' do
|
12
|
+
inspect_source(re,
|
13
|
+
['begin',
|
14
|
+
' something',
|
15
|
+
'rescue Exception',
|
16
|
+
' #do nothing',
|
17
|
+
'end'])
|
18
|
+
expect(re.offences.size).to eq(1)
|
19
|
+
expect(re.offences.map(&:message))
|
20
|
+
.to eq([RescueException::MSG])
|
21
|
+
end
|
22
|
+
|
23
|
+
it 'registers an offence for rescue with ::Exception' do
|
24
|
+
inspect_source(re,
|
25
|
+
['begin',
|
26
|
+
' something',
|
27
|
+
'rescue ::Exception',
|
28
|
+
' #do nothing',
|
29
|
+
'end'])
|
30
|
+
expect(re.offences.size).to eq(1)
|
31
|
+
expect(re.offences.map(&:message))
|
32
|
+
.to eq([RescueException::MSG])
|
33
|
+
end
|
34
|
+
|
35
|
+
it 'registers an offence for rescue with StandardError, Exception' do
|
36
|
+
inspect_source(re,
|
37
|
+
['begin',
|
38
|
+
' something',
|
39
|
+
'rescue StandardError, Exception',
|
40
|
+
' #do nothing',
|
41
|
+
'end'])
|
42
|
+
expect(re.offences.size).to eq(1)
|
43
|
+
expect(re.offences.map(&:message))
|
44
|
+
.to eq([RescueException::MSG])
|
45
|
+
end
|
46
|
+
|
47
|
+
it 'registers an offence for rescue with Exception => e' do
|
48
|
+
inspect_source(re,
|
49
|
+
['begin',
|
50
|
+
' something',
|
51
|
+
'rescue Exception => e',
|
52
|
+
' #do nothing',
|
53
|
+
'end'])
|
54
|
+
expect(re.offences.size).to eq(1)
|
55
|
+
expect(re.offences.map(&:message))
|
56
|
+
.to eq([RescueException::MSG])
|
57
|
+
end
|
58
|
+
|
59
|
+
it 'does not register an offence for rescue with no class' do
|
60
|
+
inspect_source(re,
|
61
|
+
['begin',
|
62
|
+
' something',
|
63
|
+
' return',
|
64
|
+
'rescue',
|
65
|
+
' file.close',
|
66
|
+
'end'])
|
67
|
+
expect(re.offences).to be_empty
|
68
|
+
end
|
69
|
+
|
70
|
+
it 'does not register an offence for rescue with no class and => e' do
|
71
|
+
inspect_source(re,
|
72
|
+
['begin',
|
73
|
+
' something',
|
74
|
+
' return',
|
75
|
+
'rescue => e',
|
76
|
+
' file.close',
|
77
|
+
'end'])
|
78
|
+
expect(re.offences).to be_empty
|
79
|
+
end
|
80
|
+
|
81
|
+
it 'does not register an offence for rescue with other class' do
|
82
|
+
inspect_source(re,
|
83
|
+
['begin',
|
84
|
+
' something',
|
85
|
+
' return',
|
86
|
+
'rescue ArgumentError => e',
|
87
|
+
' file.close',
|
88
|
+
'end'])
|
89
|
+
expect(re.offences).to be_empty
|
90
|
+
end
|
91
|
+
|
92
|
+
it 'does not register an offence for rescue with other classes' do
|
93
|
+
inspect_source(re,
|
94
|
+
['begin',
|
95
|
+
' something',
|
96
|
+
' return',
|
97
|
+
'rescue EOFError, ArgumentError => e',
|
98
|
+
' file.close',
|
99
|
+
'end'])
|
100
|
+
expect(re.offences).to be_empty
|
101
|
+
end
|
102
|
+
|
103
|
+
it 'does not register an offence for rescue with a module prefix' do
|
104
|
+
inspect_source(re,
|
105
|
+
['begin',
|
106
|
+
' something',
|
107
|
+
' return',
|
108
|
+
'rescue Test::Exception => e',
|
109
|
+
' file.close',
|
110
|
+
'end'])
|
111
|
+
expect(re.offences).to be_empty
|
112
|
+
end
|
113
|
+
|
114
|
+
it 'does not crash when the splat operator is used in a rescue' do
|
115
|
+
inspect_source(re,
|
116
|
+
['ERRORS = [Exception]',
|
117
|
+
'begin',
|
118
|
+
' a = 3 / 0',
|
119
|
+
'rescue *ERRORS',
|
120
|
+
' puts e',
|
121
|
+
'end'])
|
122
|
+
expect(re.offences).to be_empty
|
123
|
+
end
|
124
|
+
end
|
125
|
+
end
|
126
|
+
end
|
127
|
+
end
|
@@ -0,0 +1,243 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
module Rubocop
|
6
|
+
module Cop
|
7
|
+
module Lint
|
8
|
+
describe ShadowingOuterLocalVariable do
|
9
|
+
subject(:cop) { ShadowingOuterLocalVariable.new }
|
10
|
+
|
11
|
+
context 'when a block argument has same name ' +
|
12
|
+
'as an outer scope variable' do
|
13
|
+
let(:source) do
|
14
|
+
[
|
15
|
+
'def some_method',
|
16
|
+
' foo = 1',
|
17
|
+
' puts foo',
|
18
|
+
' 1.times do |foo|',
|
19
|
+
' end',
|
20
|
+
'end'
|
21
|
+
]
|
22
|
+
end
|
23
|
+
|
24
|
+
it 'registers an offence' do
|
25
|
+
inspect_source(cop, source)
|
26
|
+
expect(cop.offences).to have(1).item
|
27
|
+
expect(cop.offences.first.message)
|
28
|
+
.to include('Shadowing outer local variable - foo')
|
29
|
+
expect(cop.offences.first.line).to eq(4)
|
30
|
+
end
|
31
|
+
|
32
|
+
include_examples 'mimics MRI 2.0'
|
33
|
+
end
|
34
|
+
|
35
|
+
context 'when a splat block argument has same name ' +
|
36
|
+
'as an outer scope variable' do
|
37
|
+
let(:source) do
|
38
|
+
[
|
39
|
+
'def some_method',
|
40
|
+
' foo = 1',
|
41
|
+
' puts foo',
|
42
|
+
' 1.times do |*foo|',
|
43
|
+
' end',
|
44
|
+
'end'
|
45
|
+
]
|
46
|
+
end
|
47
|
+
|
48
|
+
it 'registers an offence' do
|
49
|
+
inspect_source(cop, source)
|
50
|
+
expect(cop.offences).to have(1).item
|
51
|
+
expect(cop.offences.first.message)
|
52
|
+
.to include('Shadowing outer local variable - foo')
|
53
|
+
expect(cop.offences.first.line).to eq(4)
|
54
|
+
end
|
55
|
+
|
56
|
+
include_examples 'mimics MRI 2.0'
|
57
|
+
end
|
58
|
+
|
59
|
+
context 'when a block block argument has same name ' +
|
60
|
+
'as an outer scope variable' do
|
61
|
+
let(:source) do
|
62
|
+
[
|
63
|
+
'def some_method',
|
64
|
+
' foo = 1',
|
65
|
+
' puts foo',
|
66
|
+
' proc_taking_block = proc do |&foo|',
|
67
|
+
' end',
|
68
|
+
' proc_taking_block.call do',
|
69
|
+
' end',
|
70
|
+
'end'
|
71
|
+
]
|
72
|
+
end
|
73
|
+
|
74
|
+
it 'registers an offence' do
|
75
|
+
inspect_source(cop, source)
|
76
|
+
expect(cop.offences).to have(1).item
|
77
|
+
expect(cop.offences.first.message)
|
78
|
+
.to include('Shadowing outer local variable - foo')
|
79
|
+
expect(cop.offences.first.line).to eq(4)
|
80
|
+
end
|
81
|
+
|
82
|
+
include_examples 'mimics MRI 2.0'
|
83
|
+
end
|
84
|
+
|
85
|
+
context 'when a block local variable has same name ' +
|
86
|
+
'as an outer scope variable' do
|
87
|
+
let(:source) do
|
88
|
+
[
|
89
|
+
'def some_method',
|
90
|
+
' foo = 1',
|
91
|
+
' puts foo',
|
92
|
+
' 1.times do |i; foo|',
|
93
|
+
' puts foo',
|
94
|
+
' end',
|
95
|
+
'end'
|
96
|
+
]
|
97
|
+
end
|
98
|
+
|
99
|
+
it 'registers an offence' do
|
100
|
+
inspect_source(cop, source)
|
101
|
+
expect(cop.offences).to have(1).item
|
102
|
+
expect(cop.offences.first.message)
|
103
|
+
.to include('Shadowing outer local variable - foo')
|
104
|
+
expect(cop.offences.first.line).to eq(4)
|
105
|
+
end
|
106
|
+
|
107
|
+
include_examples 'mimics MRI 2.0', 'shadowing'
|
108
|
+
end
|
109
|
+
|
110
|
+
context 'when a block argument has different name ' +
|
111
|
+
'with outer scope variables' do
|
112
|
+
let(:source) do
|
113
|
+
[
|
114
|
+
'def some_method',
|
115
|
+
' foo = 1',
|
116
|
+
' puts foo',
|
117
|
+
' 1.times do |bar|',
|
118
|
+
' end',
|
119
|
+
'end'
|
120
|
+
]
|
121
|
+
end
|
122
|
+
|
123
|
+
include_examples 'accepts'
|
124
|
+
include_examples 'mimics MRI 2.0'
|
125
|
+
end
|
126
|
+
|
127
|
+
context 'when an outer scope variable is reassigned in a block' do
|
128
|
+
let(:source) do
|
129
|
+
[
|
130
|
+
'def some_method',
|
131
|
+
' foo = 1',
|
132
|
+
' puts foo',
|
133
|
+
' 1.times do',
|
134
|
+
' foo = 2',
|
135
|
+
' end',
|
136
|
+
'end'
|
137
|
+
]
|
138
|
+
end
|
139
|
+
|
140
|
+
include_examples 'accepts'
|
141
|
+
include_examples 'mimics MRI 2.0'
|
142
|
+
end
|
143
|
+
|
144
|
+
context 'when an outer scope variable is referenced in a block' do
|
145
|
+
let(:source) do
|
146
|
+
[
|
147
|
+
'def some_method',
|
148
|
+
' foo = 1',
|
149
|
+
' puts foo',
|
150
|
+
' 1.times do',
|
151
|
+
' puts foo',
|
152
|
+
' end',
|
153
|
+
'end'
|
154
|
+
]
|
155
|
+
end
|
156
|
+
|
157
|
+
include_examples 'accepts'
|
158
|
+
include_examples 'mimics MRI 2.0'
|
159
|
+
end
|
160
|
+
|
161
|
+
context 'when multiple block arguments have same name "_"' do
|
162
|
+
let(:source) do
|
163
|
+
[
|
164
|
+
'def some_method',
|
165
|
+
' 1.times do |_, foo, _|',
|
166
|
+
' end',
|
167
|
+
'end'
|
168
|
+
]
|
169
|
+
end
|
170
|
+
|
171
|
+
include_examples 'accepts'
|
172
|
+
include_examples 'mimics MRI 2.0'
|
173
|
+
end
|
174
|
+
|
175
|
+
context 'when multiple block arguments have ' +
|
176
|
+
'a same name starts with "_"' do
|
177
|
+
let(:source) do
|
178
|
+
[
|
179
|
+
'def some_method',
|
180
|
+
' 1.times do |_foo, bar, _foo|',
|
181
|
+
' end',
|
182
|
+
'end'
|
183
|
+
]
|
184
|
+
end
|
185
|
+
|
186
|
+
include_examples 'accepts'
|
187
|
+
include_examples 'mimics MRI 2.0'
|
188
|
+
end
|
189
|
+
|
190
|
+
context 'when a block argument has same name "_" ' +
|
191
|
+
'as outer scope variable "_"' do
|
192
|
+
let(:source) do
|
193
|
+
[
|
194
|
+
'def some_method',
|
195
|
+
' _ = 1',
|
196
|
+
' puts _',
|
197
|
+
' 1.times do |_|',
|
198
|
+
' end',
|
199
|
+
'end'
|
200
|
+
]
|
201
|
+
end
|
202
|
+
|
203
|
+
include_examples 'accepts'
|
204
|
+
include_examples 'mimics MRI 2.0'
|
205
|
+
end
|
206
|
+
|
207
|
+
context 'when a block argument has a same name starts with "_" ' +
|
208
|
+
'as an outer scope variable' do
|
209
|
+
let(:source) do
|
210
|
+
[
|
211
|
+
'def some_method',
|
212
|
+
' _foo = 1',
|
213
|
+
' puts _foo',
|
214
|
+
' 1.times do |_foo|',
|
215
|
+
' end',
|
216
|
+
'end'
|
217
|
+
]
|
218
|
+
end
|
219
|
+
|
220
|
+
include_examples 'accepts'
|
221
|
+
include_examples 'mimics MRI 2.0'
|
222
|
+
end
|
223
|
+
|
224
|
+
context 'when a method argument has same name ' +
|
225
|
+
'as an outer scope variable' do
|
226
|
+
let(:source) do
|
227
|
+
[
|
228
|
+
'class SomeClass',
|
229
|
+
' foo = 1',
|
230
|
+
' puts foo',
|
231
|
+
' def some_method(foo)',
|
232
|
+
' end',
|
233
|
+
'end'
|
234
|
+
]
|
235
|
+
end
|
236
|
+
|
237
|
+
include_examples 'accepts'
|
238
|
+
include_examples 'mimics MRI 2.0'
|
239
|
+
end
|
240
|
+
end
|
241
|
+
end
|
242
|
+
end
|
243
|
+
end
|