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,69 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
module Rubocop
|
6
|
+
module Cop
|
7
|
+
module Lint
|
8
|
+
describe UnreachableCode do
|
9
|
+
let(:uc) { UnreachableCode.new }
|
10
|
+
|
11
|
+
UnreachableCode::NODE_TYPES.each do |t|
|
12
|
+
it "registers an offence for #{t} before other statements" do
|
13
|
+
inspect_source(uc,
|
14
|
+
['foo = 5',
|
15
|
+
"#{t}",
|
16
|
+
'bar'
|
17
|
+
])
|
18
|
+
expect(uc.offences.size).to eq(1)
|
19
|
+
end
|
20
|
+
|
21
|
+
it "accepts code with conditional #{t}" do
|
22
|
+
inspect_source(uc,
|
23
|
+
['foo = 5',
|
24
|
+
"#{t} if test",
|
25
|
+
'bar'
|
26
|
+
])
|
27
|
+
expect(uc.offences).to be_empty
|
28
|
+
end
|
29
|
+
|
30
|
+
it "accepts #{t} as the final expression" do
|
31
|
+
inspect_source(uc,
|
32
|
+
['foo = 5',
|
33
|
+
"#{t} if test"
|
34
|
+
])
|
35
|
+
expect(uc.offences).to be_empty
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
UnreachableCode::FLOW_COMMANDS.each do |t|
|
40
|
+
it "registers an offence for #{t} before other statements" do
|
41
|
+
inspect_source(uc,
|
42
|
+
['foo = 5',
|
43
|
+
"#{t} something",
|
44
|
+
'bar'
|
45
|
+
])
|
46
|
+
expect(uc.offences.size).to eq(1)
|
47
|
+
end
|
48
|
+
|
49
|
+
it "accepts code with conditional #{t}" do
|
50
|
+
inspect_source(uc,
|
51
|
+
['foo = 5',
|
52
|
+
"#{t} something if test",
|
53
|
+
'bar'
|
54
|
+
])
|
55
|
+
expect(uc.offences).to be_empty
|
56
|
+
end
|
57
|
+
|
58
|
+
it "accepts #{t} as the final expression" do
|
59
|
+
inspect_source(uc,
|
60
|
+
['foo = 5',
|
61
|
+
"#{t} something if test"
|
62
|
+
])
|
63
|
+
expect(uc.offences).to be_empty
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
@@ -0,0 +1,497 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
module Rubocop
|
6
|
+
module Cop
|
7
|
+
module Lint
|
8
|
+
describe UnusedLocalVariable do
|
9
|
+
subject(:cop) { UnusedLocalVariable.new }
|
10
|
+
|
11
|
+
context 'when a variable is assigned and unreferenced in a method' do
|
12
|
+
let(:source) do
|
13
|
+
[
|
14
|
+
'class SomeClass',
|
15
|
+
' foo = 1',
|
16
|
+
' puts foo',
|
17
|
+
' def some_method',
|
18
|
+
' foo = 2',
|
19
|
+
' bar = 3',
|
20
|
+
' puts bar',
|
21
|
+
' end',
|
22
|
+
'end'
|
23
|
+
]
|
24
|
+
end
|
25
|
+
|
26
|
+
it 'registers an offence' do
|
27
|
+
inspect_source(cop, source)
|
28
|
+
expect(cop.offences).to have(1).item
|
29
|
+
expect(cop.offences.first.message)
|
30
|
+
.to include('unused variable - foo')
|
31
|
+
expect(cop.offences.first.line).to eq(5)
|
32
|
+
end
|
33
|
+
|
34
|
+
include_examples 'mimics MRI 2.0'
|
35
|
+
end
|
36
|
+
|
37
|
+
context 'when a variable is assigned and unreferenced ' +
|
38
|
+
'in a singleton method defined with self keyword' do
|
39
|
+
let(:source) do
|
40
|
+
[
|
41
|
+
'class SomeClass',
|
42
|
+
' foo = 1',
|
43
|
+
' puts foo',
|
44
|
+
' def self.some_method',
|
45
|
+
' foo = 2',
|
46
|
+
' bar = 3',
|
47
|
+
' puts bar',
|
48
|
+
' end',
|
49
|
+
'end'
|
50
|
+
]
|
51
|
+
end
|
52
|
+
|
53
|
+
it 'registers an offence' do
|
54
|
+
inspect_source(cop, source)
|
55
|
+
expect(cop.offences).to have(1).item
|
56
|
+
expect(cop.offences.first.message)
|
57
|
+
.to include('unused variable - foo')
|
58
|
+
expect(cop.offences.first.line).to eq(5)
|
59
|
+
end
|
60
|
+
|
61
|
+
include_examples 'mimics MRI 2.0'
|
62
|
+
end
|
63
|
+
|
64
|
+
context 'when a variable is assigned and unreferenced ' +
|
65
|
+
'in a singleton method defined with variable name' do
|
66
|
+
let(:source) do
|
67
|
+
[
|
68
|
+
'1.times do',
|
69
|
+
' foo = 1',
|
70
|
+
' puts foo',
|
71
|
+
' instance = Object.new',
|
72
|
+
' def instance.some_method',
|
73
|
+
' foo = 2',
|
74
|
+
' bar = 3',
|
75
|
+
' puts bar',
|
76
|
+
' end',
|
77
|
+
'end'
|
78
|
+
]
|
79
|
+
end
|
80
|
+
|
81
|
+
it 'registers an offence' do
|
82
|
+
inspect_source(cop, source)
|
83
|
+
expect(cop.offences).to have(1).item
|
84
|
+
expect(cop.offences.first.message)
|
85
|
+
.to include('unused variable - foo')
|
86
|
+
expect(cop.offences.first.line).to eq(6)
|
87
|
+
end
|
88
|
+
|
89
|
+
include_examples 'mimics MRI 2.0'
|
90
|
+
end
|
91
|
+
|
92
|
+
context 'when a variable is assigned and unreferenced in a class' do
|
93
|
+
let(:source) do
|
94
|
+
[
|
95
|
+
'1.times do',
|
96
|
+
' foo = 1',
|
97
|
+
' puts foo',
|
98
|
+
' class SomeClass',
|
99
|
+
' foo = 2',
|
100
|
+
' bar = 3',
|
101
|
+
' puts bar',
|
102
|
+
' end',
|
103
|
+
'end'
|
104
|
+
]
|
105
|
+
end
|
106
|
+
|
107
|
+
it 'registers an offence' do
|
108
|
+
inspect_source(cop, source)
|
109
|
+
expect(cop.offences).to have(1).item
|
110
|
+
expect(cop.offences.first.message)
|
111
|
+
.to include('unused variable - foo')
|
112
|
+
expect(cop.offences.first.line).to eq(5)
|
113
|
+
end
|
114
|
+
|
115
|
+
include_examples 'mimics MRI 2.0'
|
116
|
+
end
|
117
|
+
|
118
|
+
context 'when a variable is assigned and unreferenced ' +
|
119
|
+
'in a singleton class' do
|
120
|
+
let(:source) do
|
121
|
+
[
|
122
|
+
'1.times do',
|
123
|
+
' foo = 1',
|
124
|
+
' puts foo',
|
125
|
+
' instance = Object.new',
|
126
|
+
' class << instance',
|
127
|
+
' foo = 2',
|
128
|
+
' bar = 3',
|
129
|
+
' puts bar',
|
130
|
+
' end',
|
131
|
+
'end'
|
132
|
+
]
|
133
|
+
end
|
134
|
+
|
135
|
+
it 'registers an offence' do
|
136
|
+
inspect_source(cop, source)
|
137
|
+
expect(cop.offences).to have(1).item
|
138
|
+
expect(cop.offences.first.message)
|
139
|
+
.to include('unused variable - foo')
|
140
|
+
expect(cop.offences.first.line).to eq(6)
|
141
|
+
end
|
142
|
+
|
143
|
+
include_examples 'mimics MRI 2.0'
|
144
|
+
end
|
145
|
+
|
146
|
+
context 'when a variable is assigned and unreferenced in a module' do
|
147
|
+
let(:source) do
|
148
|
+
[
|
149
|
+
'1.times do',
|
150
|
+
' foo = 1',
|
151
|
+
' puts foo',
|
152
|
+
' module SomeModule',
|
153
|
+
' foo = 2',
|
154
|
+
' bar = 3',
|
155
|
+
' puts bar',
|
156
|
+
' end',
|
157
|
+
'end'
|
158
|
+
]
|
159
|
+
end
|
160
|
+
|
161
|
+
it 'registers an offence' do
|
162
|
+
inspect_source(cop, source)
|
163
|
+
expect(cop.offences).to have(1).item
|
164
|
+
expect(cop.offences.first.message)
|
165
|
+
.to include('unused variable - foo')
|
166
|
+
expect(cop.offences.first.line).to eq(5)
|
167
|
+
end
|
168
|
+
|
169
|
+
include_examples 'mimics MRI 2.0'
|
170
|
+
end
|
171
|
+
|
172
|
+
context 'when a variable is assigned and unreferenced in top level' do
|
173
|
+
let(:source) do
|
174
|
+
[
|
175
|
+
'foo = 1',
|
176
|
+
'bar = 2',
|
177
|
+
'puts bar'
|
178
|
+
]
|
179
|
+
end
|
180
|
+
|
181
|
+
it 'registers an offence' do
|
182
|
+
inspect_source(cop, source)
|
183
|
+
expect(cop.offences).to have(1).item
|
184
|
+
expect(cop.offences.first.message)
|
185
|
+
.to include('unused variable - foo')
|
186
|
+
expect(cop.offences.first.line).to eq(1)
|
187
|
+
end
|
188
|
+
|
189
|
+
include_examples 'mimics MRI 2.0'
|
190
|
+
end
|
191
|
+
|
192
|
+
context 'when a variable is assigned multiple times ' +
|
193
|
+
'but unreferenced' do
|
194
|
+
let(:source) do
|
195
|
+
[
|
196
|
+
'def some_method',
|
197
|
+
' foo = 1',
|
198
|
+
' bar = 2',
|
199
|
+
' foo = 3',
|
200
|
+
' puts bar',
|
201
|
+
'end'
|
202
|
+
]
|
203
|
+
end
|
204
|
+
|
205
|
+
include_examples 'accepts'
|
206
|
+
include_examples 'mimics MRI 2.0'
|
207
|
+
end
|
208
|
+
|
209
|
+
context 'when an unreferenced variable is reassigned in a block' do
|
210
|
+
let(:source) do
|
211
|
+
[
|
212
|
+
'def some_method',
|
213
|
+
' foo = 1',
|
214
|
+
' 1.times do',
|
215
|
+
' foo = 2',
|
216
|
+
' end',
|
217
|
+
'end'
|
218
|
+
]
|
219
|
+
end
|
220
|
+
|
221
|
+
include_examples 'accepts'
|
222
|
+
include_examples 'mimics MRI 2.0'
|
223
|
+
end
|
224
|
+
|
225
|
+
context 'when a referenced variable in reassigned in a block' do
|
226
|
+
let(:source) do
|
227
|
+
[
|
228
|
+
'def some_method',
|
229
|
+
' foo = 1',
|
230
|
+
' puts foo',
|
231
|
+
' 1.times do',
|
232
|
+
' foo = 2',
|
233
|
+
' end',
|
234
|
+
'end'
|
235
|
+
]
|
236
|
+
end
|
237
|
+
|
238
|
+
include_examples 'accepts'
|
239
|
+
include_examples 'mimics MRI 2.0'
|
240
|
+
end
|
241
|
+
|
242
|
+
context 'when a block local variable is declared but not assigned' do
|
243
|
+
let(:source) do
|
244
|
+
[
|
245
|
+
'1.times do |i; foo|',
|
246
|
+
'end'
|
247
|
+
]
|
248
|
+
end
|
249
|
+
|
250
|
+
it 'registers an offence' do
|
251
|
+
inspect_source(cop, source)
|
252
|
+
expect(cop.offences).to have(1).item
|
253
|
+
expect(cop.offences.first.message)
|
254
|
+
.to include('unused variable - foo')
|
255
|
+
expect(cop.offences.first.line).to eq(1)
|
256
|
+
end
|
257
|
+
|
258
|
+
include_examples 'mimics MRI 2.0'
|
259
|
+
end
|
260
|
+
|
261
|
+
context 'when a block local variable is assigned and unreferenced' do
|
262
|
+
let(:source) do
|
263
|
+
[
|
264
|
+
'1.times do |i; foo|',
|
265
|
+
' foo = 2',
|
266
|
+
'end'
|
267
|
+
]
|
268
|
+
end
|
269
|
+
|
270
|
+
include_examples 'accepts'
|
271
|
+
include_examples 'mimics MRI 2.0'
|
272
|
+
end
|
273
|
+
|
274
|
+
context 'when a variable is assigned in begin ' +
|
275
|
+
'and referenced outside' do
|
276
|
+
let(:source) do
|
277
|
+
[
|
278
|
+
'def some_method',
|
279
|
+
' begin',
|
280
|
+
' foo = 1',
|
281
|
+
' end',
|
282
|
+
' puts foo',
|
283
|
+
'end'
|
284
|
+
]
|
285
|
+
end
|
286
|
+
|
287
|
+
include_examples 'accepts'
|
288
|
+
include_examples 'mimics MRI 2.0'
|
289
|
+
end
|
290
|
+
|
291
|
+
context 'when a variable is shadowed by a block argument ' +
|
292
|
+
'and unreferenced' do
|
293
|
+
let(:source) do
|
294
|
+
[
|
295
|
+
'def some_method',
|
296
|
+
' foo = 1',
|
297
|
+
' 1.times do |foo|',
|
298
|
+
' puts foo',
|
299
|
+
' end',
|
300
|
+
'end'
|
301
|
+
]
|
302
|
+
end
|
303
|
+
|
304
|
+
it 'registers an offence' do
|
305
|
+
inspect_source(cop, source)
|
306
|
+
expect(cop.offences).to have(1).item
|
307
|
+
expect(cop.offences.first.message)
|
308
|
+
.to include('unused variable - foo')
|
309
|
+
expect(cop.offences.first.line).to eq(2)
|
310
|
+
end
|
311
|
+
|
312
|
+
include_examples 'mimics MRI 2.0', 'unused variable'
|
313
|
+
end
|
314
|
+
|
315
|
+
context 'when a variable is not used and the name starts with _' do
|
316
|
+
let(:source) do
|
317
|
+
[
|
318
|
+
'def some_method',
|
319
|
+
' _foo = 1',
|
320
|
+
' bar = 2',
|
321
|
+
' puts bar',
|
322
|
+
'end'
|
323
|
+
]
|
324
|
+
end
|
325
|
+
|
326
|
+
include_examples 'accepts'
|
327
|
+
include_examples 'mimics MRI 2.0'
|
328
|
+
end
|
329
|
+
|
330
|
+
context 'when a method argument is not used' do
|
331
|
+
let(:source) do
|
332
|
+
[
|
333
|
+
'def some_method(arg)',
|
334
|
+
'end'
|
335
|
+
]
|
336
|
+
end
|
337
|
+
|
338
|
+
include_examples 'accepts'
|
339
|
+
include_examples 'mimics MRI 2.0'
|
340
|
+
end
|
341
|
+
|
342
|
+
context 'when an optional method argument is not used' do
|
343
|
+
let(:source) do
|
344
|
+
[
|
345
|
+
'def some_method(arg = nil)',
|
346
|
+
'end'
|
347
|
+
]
|
348
|
+
end
|
349
|
+
|
350
|
+
include_examples 'accepts'
|
351
|
+
include_examples 'mimics MRI 2.0'
|
352
|
+
end
|
353
|
+
|
354
|
+
context 'when a block method argument is not used' do
|
355
|
+
let(:source) do
|
356
|
+
[
|
357
|
+
'def some_method(&block)',
|
358
|
+
'end'
|
359
|
+
]
|
360
|
+
end
|
361
|
+
|
362
|
+
include_examples 'accepts'
|
363
|
+
include_examples 'mimics MRI 2.0'
|
364
|
+
end
|
365
|
+
|
366
|
+
context 'when a splat method argument is not used' do
|
367
|
+
let(:source) do
|
368
|
+
[
|
369
|
+
'def some_method(*args)',
|
370
|
+
'end'
|
371
|
+
]
|
372
|
+
end
|
373
|
+
|
374
|
+
include_examples 'accepts'
|
375
|
+
include_examples 'mimics MRI 2.0'
|
376
|
+
end
|
377
|
+
|
378
|
+
context 'when a optional keyword method argument is not used' do
|
379
|
+
let(:source) do
|
380
|
+
[
|
381
|
+
'def some_method(name: value)',
|
382
|
+
'end'
|
383
|
+
]
|
384
|
+
end
|
385
|
+
|
386
|
+
include_examples 'accepts'
|
387
|
+
include_examples 'mimics MRI 2.0'
|
388
|
+
end
|
389
|
+
|
390
|
+
context 'when a keyword splat method argument is used' do
|
391
|
+
let(:source) do
|
392
|
+
[
|
393
|
+
'def some_method(name: value, **rest_keywords)',
|
394
|
+
' p rest_keywords',
|
395
|
+
'end'
|
396
|
+
]
|
397
|
+
end
|
398
|
+
|
399
|
+
include_examples 'accepts'
|
400
|
+
include_examples 'mimics MRI 2.0'
|
401
|
+
end
|
402
|
+
|
403
|
+
context 'when a keyword splat method argument is not used' do
|
404
|
+
let(:source) do
|
405
|
+
[
|
406
|
+
'def some_method(name: value, **rest_keywords)',
|
407
|
+
'end'
|
408
|
+
]
|
409
|
+
end
|
410
|
+
|
411
|
+
include_examples 'accepts'
|
412
|
+
include_examples 'mimics MRI 2.0'
|
413
|
+
end
|
414
|
+
|
415
|
+
context 'when a block argument is not used' do
|
416
|
+
let(:source) do
|
417
|
+
[
|
418
|
+
'1.times do |i|',
|
419
|
+
'end'
|
420
|
+
]
|
421
|
+
end
|
422
|
+
|
423
|
+
include_examples 'accepts'
|
424
|
+
include_examples 'mimics MRI 2.0'
|
425
|
+
end
|
426
|
+
|
427
|
+
context 'when there is only one AST node and it is unused variable' do
|
428
|
+
let(:source) do
|
429
|
+
[
|
430
|
+
'foo = 1'
|
431
|
+
]
|
432
|
+
end
|
433
|
+
|
434
|
+
it 'registers an offence' do
|
435
|
+
inspect_source(cop, source)
|
436
|
+
expect(cop.offences).to have(1).item
|
437
|
+
expect(cop.offences.first.message)
|
438
|
+
.to include('unused variable - foo')
|
439
|
+
expect(cop.offences.first.line).to eq(1)
|
440
|
+
end
|
441
|
+
|
442
|
+
include_examples 'mimics MRI 2.0'
|
443
|
+
end
|
444
|
+
|
445
|
+
context 'when a variable is assigned ' +
|
446
|
+
'while being passed to a method taking block' do
|
447
|
+
|
448
|
+
context 'and the variable is used' do
|
449
|
+
let(:source) do
|
450
|
+
[
|
451
|
+
'some_method(foo = 1) do',
|
452
|
+
'end',
|
453
|
+
'puts foo'
|
454
|
+
]
|
455
|
+
end
|
456
|
+
|
457
|
+
include_examples 'accepts'
|
458
|
+
include_examples 'mimics MRI 2.0'
|
459
|
+
end
|
460
|
+
|
461
|
+
context 'and the variable is not used' do
|
462
|
+
let(:source) do
|
463
|
+
[
|
464
|
+
'some_method(foo = 1) do',
|
465
|
+
'end'
|
466
|
+
]
|
467
|
+
end
|
468
|
+
|
469
|
+
it 'registers an offence' do
|
470
|
+
inspect_source(cop, source)
|
471
|
+
expect(cop.offences).to have(1).item
|
472
|
+
expect(cop.offences.first.message)
|
473
|
+
.to include('unused variable - foo')
|
474
|
+
expect(cop.offences.first.line).to eq(1)
|
475
|
+
end
|
476
|
+
|
477
|
+
include_examples 'mimics MRI 2.0'
|
478
|
+
end
|
479
|
+
end
|
480
|
+
|
481
|
+
context 'when a variabled is assigned ' +
|
482
|
+
'and passed to a method followed by method taking block' do
|
483
|
+
let(:source) do
|
484
|
+
[
|
485
|
+
"pattern = '*.rb'",
|
486
|
+
'Dir.glob(pattern).map do |path|',
|
487
|
+
'end'
|
488
|
+
]
|
489
|
+
end
|
490
|
+
|
491
|
+
include_examples 'accepts'
|
492
|
+
include_examples 'mimics MRI 2.0'
|
493
|
+
end
|
494
|
+
end
|
495
|
+
end
|
496
|
+
end
|
497
|
+
end
|