rubocop 0.13.1 → 0.14.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/.rubocop.yml +3 -0
- data/CHANGELOG.md +42 -0
- data/README.md +59 -54
- data/config/default.yml +124 -95
- data/config/disabled.yml +4 -0
- data/config/enabled.yml +286 -264
- data/lib/rubocop.rb +10 -3
- data/lib/rubocop/cli.rb +10 -171
- data/lib/rubocop/cop/cop.rb +14 -11
- data/lib/rubocop/cop/lint/debugger.rb +35 -0
- data/lib/rubocop/cop/lint/syntax.rb +34 -0
- data/lib/rubocop/cop/offence.rb +15 -23
- data/lib/rubocop/cop/style/align_array.rb +1 -10
- data/lib/rubocop/cop/style/align_hash.rb +14 -2
- data/lib/rubocop/cop/style/align_parameters.rb +1 -11
- data/lib/rubocop/cop/style/and_or.rb +13 -11
- data/lib/rubocop/cop/style/attr.rb +1 -1
- data/lib/rubocop/cop/style/autocorrect_alignment.rb +31 -6
- data/lib/rubocop/cop/style/blocks.rb +14 -6
- data/lib/rubocop/cop/style/character_literal.rb +1 -1
- data/lib/rubocop/cop/style/class_length.rb +38 -0
- data/lib/rubocop/cop/style/collection_methods.rb +1 -1
- data/lib/rubocop/cop/style/colon_method_call.rb +1 -1
- data/lib/rubocop/cop/style/configurable_naming.rb +47 -0
- data/lib/rubocop/cop/style/def_parentheses.rb +2 -2
- data/lib/rubocop/cop/style/empty_literal.rb +1 -1
- data/lib/rubocop/cop/style/even_odd.rb +7 -3
- data/lib/rubocop/cop/style/hash_methods.rb +1 -1
- data/lib/rubocop/cop/style/hash_syntax.rb +36 -7
- data/lib/rubocop/cop/style/lambda_call.rb +36 -11
- data/lib/rubocop/cop/style/method_call_parentheses.rb +1 -1
- data/lib/rubocop/cop/style/method_called_on_do_end_block.rb +41 -0
- data/lib/rubocop/cop/style/method_length.rb +2 -13
- data/lib/rubocop/cop/style/method_name.rb +42 -0
- data/lib/rubocop/cop/style/numeric_literals.rb +4 -0
- data/lib/rubocop/cop/style/perl_backrefs.rb +1 -1
- data/lib/rubocop/cop/style/raise_args.rb +60 -0
- data/lib/rubocop/cop/style/redundant_exception.rb +32 -0
- data/lib/rubocop/cop/style/redundant_return.rb +14 -5
- data/lib/rubocop/cop/style/redundant_self.rb +1 -1
- data/lib/rubocop/cop/style/semicolon.rb +13 -4
- data/lib/rubocop/cop/style/signal_exception.rb +63 -14
- data/lib/rubocop/cop/style/special_global_vars.rb +1 -1
- data/lib/rubocop/cop/style/string_help.rb +4 -1
- data/lib/rubocop/cop/style/string_literals.rb +34 -11
- data/lib/rubocop/cop/style/surrounding_space.rb +64 -17
- data/lib/rubocop/cop/style/tab.rb +1 -1
- data/lib/rubocop/cop/style/variable_name.rb +44 -0
- data/lib/rubocop/cop/style/when_then.rb +1 -1
- data/lib/rubocop/cop/style/while_until_do.rb +1 -1
- data/lib/rubocop/cop/team.rb +4 -7
- data/lib/rubocop/cop/util.rb +12 -0
- data/lib/rubocop/formatter/clang_style_formatter.rb +1 -1
- data/lib/rubocop/formatter/emacs_style_formatter.rb +5 -2
- data/lib/rubocop/formatter/json_formatter.rb +1 -0
- data/lib/rubocop/formatter/progress_formatter.rb +9 -13
- data/lib/rubocop/formatter/simple_text_formatter.rb +63 -15
- data/lib/rubocop/options.rb +184 -0
- data/lib/rubocop/processed_source.rb +4 -0
- data/lib/rubocop/version.rb +1 -1
- data/rubocop.gemspec +1 -1
- data/spec/rubocop/cli_spec.rb +870 -1001
- data/spec/rubocop/config_spec.rb +13 -13
- data/spec/rubocop/config_store_spec.rb +38 -37
- data/spec/rubocop/cop/commissioner_spec.rb +42 -46
- data/spec/rubocop/cop/cop_spec.rb +72 -77
- data/spec/rubocop/cop/corrector_spec.rb +51 -55
- data/spec/rubocop/cop/lint/assignment_in_condition_spec.rb +100 -106
- data/spec/rubocop/cop/lint/block_alignment_spec.rb +403 -409
- data/spec/rubocop/cop/lint/debugger_spec.rb +39 -0
- data/spec/rubocop/cop/lint/empty_ensure_spec.rb +19 -25
- data/spec/rubocop/cop/lint/end_alignment_spec.rb +50 -56
- data/spec/rubocop/cop/lint/end_in_method_spec.rb +20 -26
- data/spec/rubocop/cop/lint/ensure_return_spec.rb +30 -36
- data/spec/rubocop/cop/lint/eval_spec.rb +25 -31
- data/spec/rubocop/cop/lint/handle_exceptions_spec.rb +22 -28
- data/spec/rubocop/cop/lint/literal_in_condition_spec.rb +51 -57
- data/spec/rubocop/cop/lint/loop_spec.rb +17 -23
- data/spec/rubocop/cop/lint/parentheses_as_grouped_expression_spec.rb +51 -57
- data/spec/rubocop/cop/lint/rescue_exception_spec.rb +105 -111
- data/spec/rubocop/cop/lint/shadowing_outer_local_variable_spec.rb +230 -236
- data/spec/rubocop/cop/lint/syntax_spec.rb +33 -0
- data/spec/rubocop/cop/lint/unreachable_code_spec.rb +51 -57
- data/spec/rubocop/cop/lint/useless_assignment_spec.rb +1544 -1550
- data/spec/rubocop/cop/lint/useless_comparison_spec.rb +21 -27
- data/spec/rubocop/cop/lint/useless_setter_call_spec.rb +119 -125
- data/spec/rubocop/cop/lint/void_spec.rb +50 -56
- data/spec/rubocop/cop/offence_spec.rb +101 -131
- data/spec/rubocop/cop/rails/has_and_belongs_to_many_spec.rb +6 -12
- data/spec/rubocop/cop/rails/read_attribute_spec.rb +6 -12
- data/spec/rubocop/cop/rails/validation_spec.rb +13 -19
- data/spec/rubocop/cop/style/access_control_spec.rb +146 -152
- data/spec/rubocop/cop/style/alias_spec.rb +30 -36
- data/spec/rubocop/cop/style/align_array_spec.rb +57 -56
- data/spec/rubocop/cop/style/align_hash_spec.rb +256 -237
- data/spec/rubocop/cop/style/align_parameters_spec.rb +216 -202
- data/spec/rubocop/cop/style/and_or_spec.rb +51 -55
- data/spec/rubocop/cop/style/ascii_comments_spec.rb +14 -20
- data/spec/rubocop/cop/style/ascii_identifiers_spec.rb +26 -32
- data/spec/rubocop/cop/style/attr_spec.rb +11 -17
- data/spec/rubocop/cop/style/begin_block_spec.rb +6 -12
- data/spec/rubocop/cop/style/block_comments_spec.rb +13 -19
- data/spec/rubocop/cop/style/block_nesting_spec.rb +134 -140
- data/spec/rubocop/cop/style/blocks_spec.rb +81 -84
- data/spec/rubocop/cop/style/case_equality_spec.rb +5 -11
- data/spec/rubocop/cop/style/case_indentation_spec.rb +71 -77
- data/spec/rubocop/cop/style/character_literal_spec.rb +31 -37
- data/spec/rubocop/cop/style/class_and_module_camel_case_spec.rb +31 -37
- data/spec/rubocop/cop/style/class_length_spec.rb +65 -0
- data/spec/rubocop/cop/style/class_methods_spec.rb +35 -41
- data/spec/rubocop/cop/style/class_vars_spec.rb +11 -17
- data/spec/rubocop/cop/style/collection_methods_spec.rb +41 -47
- data/spec/rubocop/cop/style/colon_method_call_spec.rb +45 -51
- data/spec/rubocop/cop/style/comment_annotation_spec.rb +79 -85
- data/spec/rubocop/cop/style/constant_name_spec.rb +45 -51
- data/spec/rubocop/cop/style/def_with_parentheses_spec.rb +28 -34
- data/spec/rubocop/cop/style/def_without_parentheses_spec.rb +23 -29
- data/spec/rubocop/cop/style/documentation_spec.rb +60 -66
- data/spec/rubocop/cop/style/dot_position_spec.rb +50 -56
- data/spec/rubocop/cop/style/empty_line_between_defs_spec.rb +109 -110
- data/spec/rubocop/cop/style/empty_lines_spec.rb +28 -34
- data/spec/rubocop/cop/style/empty_literal_spec.rb +80 -86
- data/spec/rubocop/cop/style/encoding_spec.rb +50 -56
- data/spec/rubocop/cop/style/end_block_spec.rb +6 -12
- data/spec/rubocop/cop/style/end_of_line_spec.rb +13 -19
- data/spec/rubocop/cop/style/even_odd_spec.rb +69 -41
- data/spec/rubocop/cop/style/favor_join_spec.rb +21 -27
- data/spec/rubocop/cop/style/favor_modifier_spec.rb +180 -176
- data/spec/rubocop/cop/style/favor_sprintf_spec.rb +41 -47
- data/spec/rubocop/cop/style/favor_unless_over_negated_if_spec.rb +63 -69
- data/spec/rubocop/cop/style/favor_until_over_negated_while_spec.rb +32 -38
- data/spec/rubocop/cop/style/final_newline_spec.rb +16 -22
- data/spec/rubocop/cop/style/for_spec.rb +18 -24
- data/spec/rubocop/cop/style/global_vars_spec.rb +23 -29
- data/spec/rubocop/cop/style/hash_methods_spec.rb +39 -45
- data/spec/rubocop/cop/style/hash_syntax_spec.rb +93 -65
- data/spec/rubocop/cop/style/if_with_semicolon_spec.rb +11 -17
- data/spec/rubocop/cop/style/indentation_width_spec.rb +377 -383
- data/spec/rubocop/cop/style/lambda_call_spec.rb +40 -22
- data/spec/rubocop/cop/style/lambda_spec.rb +30 -34
- data/spec/rubocop/cop/style/leading_comment_space_spec.rb +44 -50
- data/spec/rubocop/cop/style/line_length_spec.rb +11 -17
- data/spec/rubocop/cop/style/method_call_parentheses_spec.rb +14 -20
- data/spec/rubocop/cop/style/method_called_on_do_end_block_spec.rb +60 -0
- data/spec/rubocop/cop/style/method_length_spec.rb +127 -133
- data/spec/rubocop/cop/style/method_name_spec.rb +103 -0
- data/spec/rubocop/cop/style/module_function_spec.rb +16 -22
- data/spec/rubocop/cop/style/multiline_block_chain_spec.rb +64 -70
- data/spec/rubocop/cop/style/multiline_if_then_spec.rb +74 -80
- data/spec/rubocop/cop/style/nil_comparison_spec.rb +20 -26
- data/spec/rubocop/cop/style/not_spec.rb +13 -19
- data/spec/rubocop/cop/style/numeric_literals_spec.rb +36 -35
- data/spec/rubocop/cop/style/one_line_conditional_spec.rb +5 -11
- data/spec/rubocop/cop/style/op_method_spec.rb +61 -67
- data/spec/rubocop/cop/style/parameter_lists_spec.rb +31 -37
- data/spec/rubocop/cop/style/parentheses_around_condition_spec.rb +62 -68
- data/spec/rubocop/cop/style/perl_backrefs_spec.rb +9 -15
- data/spec/rubocop/cop/style/proc_spec.rb +13 -19
- data/spec/rubocop/cop/style/raise_args_spec.rb +55 -0
- data/spec/rubocop/cop/style/reduce_arguments_spec.rb +49 -55
- data/spec/rubocop/cop/style/redundant_begin_spec.rb +47 -53
- data/spec/rubocop/cop/style/redundant_exception_spec.rb +27 -0
- data/spec/rubocop/cop/style/redundant_return_spec.rb +164 -72
- data/spec/rubocop/cop/style/redundant_self_spec.rb +109 -115
- data/spec/rubocop/cop/style/regexp_literal_spec.rb +57 -63
- data/spec/rubocop/cop/style/rescue_modifier_spec.rb +99 -105
- data/spec/rubocop/cop/style/semicolon_spec.rb +95 -90
- data/spec/rubocop/cop/style/signal_exception_spec.rb +248 -95
- data/spec/rubocop/cop/style/single_line_methods_spec.rb +45 -51
- data/spec/rubocop/cop/style/space_after_colon_spec.rb +14 -20
- data/spec/rubocop/cop/style/space_after_comma_spec.rb +16 -22
- data/spec/rubocop/cop/style/space_after_control_keyword_spec.rb +48 -54
- data/spec/rubocop/cop/style/space_after_method_name_spec.rb +49 -55
- data/spec/rubocop/cop/style/space_after_semicolon_spec.rb +10 -16
- data/spec/rubocop/cop/style/space_around_block_braces_spec.rb +118 -50
- data/spec/rubocop/cop/style/space_around_equals_in_default_parameter_spec.rb +18 -24
- data/spec/rubocop/cop/style/space_around_operators_spec.rb +204 -210
- data/spec/rubocop/cop/style/space_before_modifier_keyword_spec.rb +36 -42
- data/spec/rubocop/cop/style/space_inside_brackets_spec.rb +39 -45
- data/spec/rubocop/cop/style/space_inside_hash_literal_braces_spec.rb +62 -68
- data/spec/rubocop/cop/style/space_inside_parens_spec.rb +18 -24
- data/spec/rubocop/cop/style/special_global_vars_spec.rb +40 -46
- data/spec/rubocop/cop/style/string_literals_spec.rb +148 -70
- data/spec/rubocop/cop/style/symbol_array_spec.rb +28 -34
- data/spec/rubocop/cop/style/symbol_name_spec.rb +132 -138
- data/spec/rubocop/cop/style/tab_spec.rb +9 -15
- data/spec/rubocop/cop/style/ternary_operator_spec.rb +25 -31
- data/spec/rubocop/cop/style/trailing_blank_lines_spec.rb +10 -16
- data/spec/rubocop/cop/style/trailing_whitespace_spec.rb +14 -20
- data/spec/rubocop/cop/style/trivial_accessors_spec.rb +374 -380
- data/spec/rubocop/cop/style/unless_else_spec.rb +17 -23
- data/spec/rubocop/cop/style/variable_interpolation_spec.rb +36 -42
- data/spec/rubocop/cop/style/variable_name_spec.rb +83 -0
- data/spec/rubocop/cop/style/when_then_spec.rb +31 -37
- data/spec/rubocop/cop/style/while_until_do_spec.rb +47 -53
- data/spec/rubocop/cop/style/word_array_spec.rb +49 -55
- data/spec/rubocop/cop/team_spec.rb +125 -127
- data/spec/rubocop/cop/variable_inspector/assignment_spec.rb +176 -180
- data/spec/rubocop/cop/variable_inspector/locatable_spec.rb +580 -586
- data/spec/rubocop/cop/variable_inspector/scope_spec.rb +140 -146
- data/spec/rubocop/cop/variable_inspector/variable_spec.rb +52 -58
- data/spec/rubocop/cop/variable_inspector/variable_table_spec.rb +217 -223
- data/spec/rubocop/cop/variable_inspector_spec.rb +15 -19
- data/spec/rubocop/formatter/clang_style_formatter_spec.rb +35 -36
- data/spec/rubocop/formatter/disabled_config_formatter_spec.rb +2 -2
- data/spec/rubocop/formatter/emacs_style_formatter_spec.rb +24 -1
- data/spec/rubocop/formatter/file_list_formatter_spec.rb +1 -1
- data/spec/rubocop/formatter/formatter_set_spec.rb +3 -3
- data/spec/rubocop/formatter/json_formatter_spec.rb +7 -2
- data/spec/rubocop/formatter/offence_count_formatter_spec.rb +1 -1
- data/spec/rubocop/formatter/progress_formatter_spec.rb +1 -1
- data/spec/rubocop/formatter/simple_text_formatter_spec.rb +55 -6
- data/spec/rubocop/options_spec.rb +233 -0
- data/spec/rubocop/processed_source_spec.rb +85 -42
- data/spec/rubocop/source_parser_spec.rb +108 -110
- data/spec/rubocop/target_finder_spec.rb +125 -127
- data/spec/rubocop/token_spec.rb +15 -17
- metadata +32 -8
- data/lib/rubocop/backports/bsearch.rb +0 -39
- data/lib/rubocop/cop/style/method_and_variable_snake_case.rb +0 -77
- data/spec/rubocop/cop/style/method_and_variable_snake_case_spec.rb +0 -102
@@ -2,22 +2,16 @@
|
|
2
2
|
|
3
3
|
require 'spec_helper'
|
4
4
|
|
5
|
-
|
6
|
-
|
7
|
-
module Style
|
8
|
-
describe Tab do
|
9
|
-
subject(:tab) { Tab.new }
|
5
|
+
describe Rubocop::Cop::Style::Tab do
|
6
|
+
subject(:cop) { described_class.new }
|
10
7
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
8
|
+
it 'registers an offence for a line indented with tab' do
|
9
|
+
inspect_source(cop, ["\tx = 0"])
|
10
|
+
expect(cop.offences.size).to eq(1)
|
11
|
+
end
|
15
12
|
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
13
|
+
it 'accepts a line with tab in a string' do
|
14
|
+
inspect_source(cop, ["(x = \"\t\")"])
|
15
|
+
expect(cop.offences).to be_empty
|
22
16
|
end
|
23
17
|
end
|
@@ -2,41 +2,35 @@
|
|
2
2
|
|
3
3
|
require 'spec_helper'
|
4
4
|
|
5
|
-
|
6
|
-
|
7
|
-
module Style
|
8
|
-
describe MultilineTernaryOperator do
|
9
|
-
subject(:op) { MultilineTernaryOperator.new }
|
5
|
+
describe Rubocop::Cop::Style::MultilineTernaryOperator do
|
6
|
+
subject(:cop) { described_class.new }
|
10
7
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
8
|
+
it 'registers offence for a multiline ternary operator expression' do
|
9
|
+
inspect_source(cop, ['a = cond ?',
|
10
|
+
' b : c'])
|
11
|
+
expect(cop.offences.size).to eq(1)
|
12
|
+
end
|
16
13
|
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
14
|
+
it 'accepts a single line ternary operator expression' do
|
15
|
+
inspect_source(cop, ['a = cond ? b : c'])
|
16
|
+
expect(cop.offences).to be_empty
|
17
|
+
end
|
18
|
+
end
|
22
19
|
|
23
|
-
|
24
|
-
|
20
|
+
describe Rubocop::Cop::Style::NestedTernaryOperator do
|
21
|
+
subject(:cop) { described_class.new }
|
25
22
|
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
23
|
+
it 'registers an offence for a nested ternary operator expression' do
|
24
|
+
inspect_source(cop, ['a ? (b ? b1 : b2) : a2'])
|
25
|
+
expect(cop.offences.size).to eq(1)
|
26
|
+
end
|
30
27
|
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
end
|
39
|
-
end
|
40
|
-
end
|
28
|
+
it 'accepts a non-nested ternary operator within an if' do
|
29
|
+
inspect_source(cop, ['a = if x',
|
30
|
+
' cond ? b : c',
|
31
|
+
'else',
|
32
|
+
' d',
|
33
|
+
'end'])
|
34
|
+
expect(cop.offences).to be_empty
|
41
35
|
end
|
42
36
|
end
|
@@ -2,23 +2,17 @@
|
|
2
2
|
|
3
3
|
require 'spec_helper'
|
4
4
|
|
5
|
-
|
6
|
-
|
7
|
-
module Style
|
8
|
-
describe TrailingBlankLines do
|
9
|
-
subject(:cop) { described_class.new }
|
5
|
+
describe Rubocop::Cop::Style::TrailingBlankLines do
|
6
|
+
subject(:cop) { described_class.new }
|
10
7
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
8
|
+
it 'accepts final newline' do
|
9
|
+
inspect_source(cop, ['x = 0', ''])
|
10
|
+
expect(cop.offences).to be_empty
|
11
|
+
end
|
15
12
|
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
13
|
+
it 'registers an offence for multiple trailing blank lines' do
|
14
|
+
inspect_source(cop, ['x = 0', '', '', '', ''])
|
15
|
+
expect(cop.offences.size).to eq(1)
|
16
|
+
expect(cop.messages).to eq(['3 trailing blank lines detected.'])
|
23
17
|
end
|
24
18
|
end
|
@@ -2,28 +2,22 @@
|
|
2
2
|
|
3
3
|
require 'spec_helper'
|
4
4
|
|
5
|
-
|
6
|
-
|
7
|
-
module Style
|
8
|
-
describe TrailingWhitespace do
|
9
|
-
subject(:cop) { described_class.new }
|
5
|
+
describe Rubocop::Cop::Style::TrailingWhitespace do
|
6
|
+
subject(:cop) { described_class.new }
|
10
7
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
8
|
+
it 'registers an offence for a line ending with space' do
|
9
|
+
source = ['x = 0 ']
|
10
|
+
inspect_source(cop, source)
|
11
|
+
expect(cop.offences.size).to eq(1)
|
12
|
+
end
|
16
13
|
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
14
|
+
it 'registers an offence for a line ending with tab' do
|
15
|
+
inspect_source(cop, ["x = 0\t"])
|
16
|
+
expect(cop.offences.size).to eq(1)
|
17
|
+
end
|
21
18
|
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
19
|
+
it 'accepts a line without trailing whitespace' do
|
20
|
+
inspect_source(cop, ["x = 0\n"])
|
21
|
+
expect(cop.offences).to be_empty
|
28
22
|
end
|
29
23
|
end
|
@@ -2,412 +2,406 @@
|
|
2
2
|
|
3
3
|
require 'spec_helper'
|
4
4
|
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
describe TrivialAccessors, :config do
|
9
|
-
subject(:cop) { described_class.new(config) }
|
10
|
-
let(:cop_config) { {} }
|
5
|
+
describe Rubocop::Cop::Style::TrivialAccessors, :config do
|
6
|
+
subject(:cop) { described_class.new(config) }
|
7
|
+
let(:cop_config) { {} }
|
11
8
|
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
9
|
+
it 'finds trivial reader' do
|
10
|
+
inspect_source(cop,
|
11
|
+
['def foo',
|
12
|
+
' @foo',
|
13
|
+
'end',
|
14
|
+
'',
|
15
|
+
'def Foo',
|
16
|
+
' @Foo',
|
17
|
+
'end'])
|
18
|
+
expect(cop.offences.size).to eq(2)
|
19
|
+
expect(cop.offences
|
20
|
+
.map(&:line).sort).to eq([1, 5])
|
21
|
+
end
|
25
22
|
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
23
|
+
it 'finds trivial reader in a class' do
|
24
|
+
inspect_source(cop,
|
25
|
+
['class TrivialFoo',
|
26
|
+
' def foo',
|
27
|
+
' @foo',
|
28
|
+
' end',
|
29
|
+
' def bar',
|
30
|
+
' !foo',
|
31
|
+
' end',
|
32
|
+
'end'])
|
33
|
+
expect(cop.offences.size).to eq(1)
|
34
|
+
expect(cop.offences
|
35
|
+
.map(&:line).sort).to eq([2])
|
36
|
+
end
|
40
37
|
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
38
|
+
it 'finds trivial reader in a class method' do
|
39
|
+
inspect_source(cop,
|
40
|
+
['class TrivialFoo',
|
41
|
+
' def self.foo',
|
42
|
+
' @foo',
|
43
|
+
' end',
|
44
|
+
' def bar',
|
45
|
+
' !foo',
|
46
|
+
' end',
|
47
|
+
'end'])
|
48
|
+
expect(cop.offences.size).to eq(1)
|
49
|
+
expect(cop.offences
|
50
|
+
.map(&:line).sort).to eq([2])
|
51
|
+
end
|
55
52
|
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
53
|
+
it 'finds trivial reader in a nested class' do
|
54
|
+
inspect_source(cop,
|
55
|
+
['class TrivialFoo',
|
56
|
+
' class Nested',
|
57
|
+
' def foo',
|
58
|
+
' @foo',
|
59
|
+
' end',
|
60
|
+
' end',
|
61
|
+
'end'])
|
62
|
+
expect(cop.offences.size).to eq(1)
|
63
|
+
expect(cop.offences
|
64
|
+
.map(&:line).sort).to eq([3])
|
65
|
+
end
|
69
66
|
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
67
|
+
it 'finds trivial readers in a little less trivial class' do
|
68
|
+
inspect_source(cop,
|
69
|
+
['class TrivialFoo',
|
70
|
+
' def foo',
|
71
|
+
' @foo',
|
72
|
+
' end',
|
73
|
+
' def foo_and_bar',
|
74
|
+
' @foo_bar = @foo + @bar',
|
75
|
+
' end',
|
76
|
+
' def foo_bar',
|
77
|
+
' @foo_bar',
|
78
|
+
' end',
|
79
|
+
' def foo?',
|
80
|
+
' foo.present?',
|
81
|
+
' end',
|
82
|
+
' def bar?',
|
83
|
+
' !bar',
|
84
|
+
' end',
|
85
|
+
' def foobar',
|
86
|
+
' foo? ? foo.value : "bar"',
|
87
|
+
' end',
|
88
|
+
' def bar',
|
89
|
+
' foo.bar',
|
90
|
+
' end',
|
91
|
+
' def foo_required?',
|
92
|
+
' super && !bar_required?',
|
93
|
+
' end',
|
94
|
+
' def self.from_omniauth(auth)',
|
95
|
+
' foobars.each do |f|',
|
96
|
+
' # do stuff',
|
97
|
+
' end',
|
98
|
+
' end',
|
99
|
+
' def regex',
|
100
|
+
' %r{\A#{visit node}\Z}',
|
101
|
+
' end',
|
102
|
+
' def array',
|
103
|
+
' [foo, bar].join',
|
104
|
+
' end',
|
105
|
+
' def string',
|
106
|
+
' "string"',
|
107
|
+
' end',
|
108
|
+
' def class',
|
109
|
+
' Foo.class',
|
110
|
+
' end',
|
111
|
+
' def with_return',
|
112
|
+
' return foo',
|
113
|
+
' end',
|
114
|
+
' def captures',
|
115
|
+
' (length - 1).times.map { |i| self[i + 1] }',
|
116
|
+
' end',
|
117
|
+
' def foo val',
|
118
|
+
' super',
|
119
|
+
' @val',
|
120
|
+
' end',
|
121
|
+
'end'])
|
122
|
+
expect(cop.offences.size).to eq(2)
|
123
|
+
expect(cop.offences
|
124
|
+
.map(&:line).sort).to eq([2, 8])
|
125
|
+
end
|
129
126
|
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
127
|
+
it 'finds trivial reader with braces' do
|
128
|
+
inspect_source(cop,
|
129
|
+
['class Test',
|
130
|
+
' # trivial reader with braces',
|
131
|
+
' def name()',
|
132
|
+
' @name',
|
133
|
+
' end',
|
134
|
+
'end'])
|
135
|
+
expect(cop.offences.size).to eq(1)
|
136
|
+
expect(cop.offences
|
137
|
+
.map(&:line).sort).to eq([3])
|
138
|
+
end
|
142
139
|
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
140
|
+
it 'finds trivial writer without braces' do
|
141
|
+
inspect_source(cop,
|
142
|
+
['class Test',
|
143
|
+
' # trivial writer without braces',
|
144
|
+
' def name= name',
|
145
|
+
' @name = name',
|
146
|
+
' end',
|
147
|
+
'end'])
|
148
|
+
expect(cop.offences.size).to eq(1)
|
149
|
+
expect(cop.offences
|
150
|
+
.map(&:line).sort).to eq([3])
|
151
|
+
end
|
155
152
|
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
153
|
+
it 'does not find trivial writer with function calls' do
|
154
|
+
inspect_source(cop,
|
155
|
+
['class TrivialTest',
|
156
|
+
' def test=(val)',
|
157
|
+
' @test = val',
|
158
|
+
' some_function_call',
|
159
|
+
' or_more_of_them',
|
160
|
+
' end',
|
161
|
+
'end'])
|
162
|
+
expect(cop.offences).to be_empty
|
163
|
+
end
|
167
164
|
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
165
|
+
it 'finds trivials with less peculiar methods' do
|
166
|
+
inspect_source(cop,
|
167
|
+
['class NilStats',
|
168
|
+
'def most_traded_pair',
|
169
|
+
'end',
|
170
|
+
'def win_ratio',
|
171
|
+
'end',
|
172
|
+
'def win_ratio_percentage()',
|
173
|
+
'end',
|
174
|
+
'def pips_won',
|
175
|
+
' 0.0',
|
176
|
+
'end',
|
177
|
+
'def gain_at(date)',
|
178
|
+
' 1',
|
179
|
+
'end',
|
180
|
+
'def gain_percentage',
|
181
|
+
' 0',
|
182
|
+
'end',
|
183
|
+
'def gain_breakdown(options = {})',
|
184
|
+
' []',
|
185
|
+
'end',
|
186
|
+
'def copy_to_all_ratio',
|
187
|
+
' nil',
|
188
|
+
'end',
|
189
|
+
'def trade_population',
|
190
|
+
' {}',
|
191
|
+
'end',
|
192
|
+
'def average_leverage',
|
193
|
+
' 1',
|
194
|
+
'end',
|
195
|
+
'def with_yield',
|
196
|
+
' yield',
|
197
|
+
'rescue Error => e',
|
198
|
+
' #do stuff',
|
199
|
+
'end',
|
200
|
+
'end'])
|
201
|
+
expect(cop.offences).to be_empty
|
202
|
+
end
|
206
203
|
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
204
|
+
it 'finds oneliner trivials' do
|
205
|
+
inspect_source(cop,
|
206
|
+
['class Oneliner',
|
207
|
+
' def foo; @foo; end',
|
208
|
+
' def foo= foo; @foo = foo; end',
|
209
|
+
'end'])
|
210
|
+
expect(cop.offences.size).to eq(2)
|
211
|
+
expect(cop.offences
|
212
|
+
.map(&:line).sort).to eq([2, 3])
|
213
|
+
end
|
217
214
|
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
215
|
+
it 'does not find a trivial reader' do
|
216
|
+
inspect_source(cop,
|
217
|
+
['def bar',
|
218
|
+
' @bar + foo',
|
219
|
+
'end'])
|
220
|
+
expect(cop.offences).to be_empty
|
221
|
+
end
|
225
222
|
|
226
|
-
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
|
223
|
+
it 'finds trivial writer' do
|
224
|
+
inspect_source(cop,
|
225
|
+
['def foo=(val)',
|
226
|
+
' @foo = val',
|
227
|
+
'end'])
|
228
|
+
expect(cop.offences.size).to eq(1)
|
229
|
+
expect(cop.offences
|
230
|
+
.map(&:line).sort).to eq([1])
|
231
|
+
end
|
235
232
|
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
|
257
|
-
|
258
|
-
|
259
|
-
|
260
|
-
|
233
|
+
it 'finds trivial writer in a class' do
|
234
|
+
inspect_source(cop,
|
235
|
+
['class TrivialFoo',
|
236
|
+
' def foo=(val)',
|
237
|
+
' @foo = val',
|
238
|
+
' end',
|
239
|
+
' def void(no_value)',
|
240
|
+
' end',
|
241
|
+
' def inspect(sexp)',
|
242
|
+
' each(:def, sexp) do |item|',
|
243
|
+
' #do stuff',
|
244
|
+
' end',
|
245
|
+
' end',
|
246
|
+
' def if_method(foo)',
|
247
|
+
' if true',
|
248
|
+
' unless false',
|
249
|
+
' #do stuff',
|
250
|
+
' end',
|
251
|
+
' end',
|
252
|
+
' end',
|
253
|
+
'end'])
|
254
|
+
expect(cop.offences.size).to eq(1)
|
255
|
+
expect(cop.offences
|
256
|
+
.map(&:line).sort).to eq([2])
|
257
|
+
end
|
261
258
|
|
262
|
-
|
263
|
-
|
264
|
-
|
265
|
-
|
266
|
-
|
267
|
-
|
268
|
-
|
269
|
-
|
270
|
-
|
271
|
-
|
272
|
-
|
273
|
-
|
274
|
-
|
275
|
-
|
276
|
-
|
277
|
-
|
278
|
-
|
279
|
-
|
280
|
-
|
281
|
-
|
259
|
+
it 'finds trivial accessors in a little less trivial class' do
|
260
|
+
inspect_source(cop,
|
261
|
+
['class TrivialFoo',
|
262
|
+
' def foo',
|
263
|
+
' @foo',
|
264
|
+
' end',
|
265
|
+
' def foo_and_bar',
|
266
|
+
' @foo_bar = @foo + @bar',
|
267
|
+
' end',
|
268
|
+
' def foo_bar',
|
269
|
+
' @foo_bar',
|
270
|
+
' end',
|
271
|
+
' def bar=(bar_value)',
|
272
|
+
' @bar = bar_value',
|
273
|
+
' end',
|
274
|
+
'end'])
|
275
|
+
expect(cop.offences.size).to eq(3)
|
276
|
+
expect(cop.offences
|
277
|
+
.map(&:line).sort).to eq([2, 8, 11])
|
278
|
+
end
|
282
279
|
|
283
|
-
|
284
|
-
|
285
|
-
|
286
|
-
|
287
|
-
|
288
|
-
|
289
|
-
|
280
|
+
it 'does not find a trivial writer' do
|
281
|
+
inspect_source(cop,
|
282
|
+
['def bar=(value)',
|
283
|
+
' @bar = value + 42',
|
284
|
+
'end'])
|
285
|
+
expect(cop.offences).to be_empty
|
286
|
+
end
|
290
287
|
|
291
|
-
|
292
|
-
|
293
|
-
|
294
|
-
|
295
|
-
|
296
|
-
|
297
|
-
|
298
|
-
|
299
|
-
|
300
|
-
|
301
|
-
|
302
|
-
|
303
|
-
|
304
|
-
|
305
|
-
|
306
|
-
|
307
|
-
|
288
|
+
it 'finds trivial writers in a little less trivial class' do
|
289
|
+
inspect_source(cop,
|
290
|
+
['class TrivialFoo',
|
291
|
+
' def foo_bar=(foo, bar)',
|
292
|
+
' @foo_bar = foo + bar',
|
293
|
+
' end',
|
294
|
+
' def universal=(answer=42)',
|
295
|
+
' @universal = answer',
|
296
|
+
' end',
|
297
|
+
' def bar=(bar_value)',
|
298
|
+
' @bar = bar_value',
|
299
|
+
' end',
|
300
|
+
'end'])
|
301
|
+
expect(cop.offences.size).to eq(2)
|
302
|
+
expect(cop.offences
|
303
|
+
.map(&:line).sort).to eq([5, 8])
|
304
|
+
end
|
308
305
|
|
309
|
-
|
310
|
-
|
311
|
-
|
312
|
-
|
313
|
-
|
314
|
-
|
315
|
-
|
316
|
-
|
317
|
-
|
318
|
-
|
319
|
-
|
320
|
-
|
321
|
-
|
322
|
-
|
323
|
-
|
324
|
-
|
325
|
-
|
306
|
+
it 'does not find trivial accessors with method calls' do
|
307
|
+
inspect_source(cop,
|
308
|
+
['class TrivialFoo',
|
309
|
+
' def foo_bar(foo)',
|
310
|
+
' foo_bar = foo + 42',
|
311
|
+
' end',
|
312
|
+
' def foo(value)',
|
313
|
+
' foo = []',
|
314
|
+
' # do stuff',
|
315
|
+
' foo',
|
316
|
+
' end',
|
317
|
+
' def bar',
|
318
|
+
' foo_method',
|
319
|
+
' end',
|
320
|
+
'end'])
|
321
|
+
expect(cop.offences).to be_empty
|
322
|
+
end
|
326
323
|
|
327
|
-
|
328
|
-
|
329
|
-
|
330
|
-
|
331
|
-
|
332
|
-
|
333
|
-
|
334
|
-
|
335
|
-
|
336
|
-
|
337
|
-
|
338
|
-
|
324
|
+
it 'does not find trivial writer with exceptions' do
|
325
|
+
inspect_source(cop,
|
326
|
+
[' def expiration_formatted=(value)',
|
327
|
+
' begin',
|
328
|
+
' @expiration = foo_stuff',
|
329
|
+
' rescue ArgumentError',
|
330
|
+
' @expiration = nil',
|
331
|
+
' end',
|
332
|
+
' self[:expiration] = @expiration',
|
333
|
+
' end'])
|
334
|
+
expect(cop.offences).to be_empty
|
335
|
+
end
|
339
336
|
|
340
|
-
|
341
|
-
|
342
|
-
|
343
|
-
|
344
|
-
|
345
|
-
|
346
|
-
|
337
|
+
it 'accepts an initialize method looking like a writer' do
|
338
|
+
inspect_source(cop,
|
339
|
+
[' def initialize(value)',
|
340
|
+
' @top = value',
|
341
|
+
' end'])
|
342
|
+
expect(cop.offences).to be_empty
|
343
|
+
end
|
347
344
|
|
348
|
-
|
349
|
-
|
345
|
+
context 'exact name match required' do
|
346
|
+
let(:cop_config) { { 'ExactNameMatch' => true } }
|
350
347
|
|
351
|
-
|
352
|
-
|
353
|
-
|
354
|
-
|
355
|
-
|
356
|
-
|
357
|
-
|
358
|
-
|
359
|
-
|
360
|
-
|
361
|
-
|
362
|
-
|
363
|
-
|
348
|
+
it 'finds only 1 trivial reader' do
|
349
|
+
inspect_source(cop,
|
350
|
+
['def foo',
|
351
|
+
' @foo',
|
352
|
+
'end',
|
353
|
+
'',
|
354
|
+
'def bar',
|
355
|
+
' @barr',
|
356
|
+
'end'])
|
357
|
+
expect(cop.offences.size).to eq(1)
|
358
|
+
expect(cop.offences
|
359
|
+
.map(&:line).sort).to eq([1])
|
360
|
+
end
|
364
361
|
|
365
|
-
|
366
|
-
|
367
|
-
|
368
|
-
|
369
|
-
|
370
|
-
|
371
|
-
|
372
|
-
|
373
|
-
|
374
|
-
|
375
|
-
|
376
|
-
|
377
|
-
|
378
|
-
|
362
|
+
it 'finds only 1 trivial writer' do
|
363
|
+
inspect_source(cop,
|
364
|
+
['def foo=(foo)',
|
365
|
+
' @foo = foo',
|
366
|
+
'end',
|
367
|
+
'',
|
368
|
+
'def bar=(bar)',
|
369
|
+
' @barr = bar',
|
370
|
+
'end'])
|
371
|
+
expect(cop.offences.size).to eq(1)
|
372
|
+
expect(cop.offences
|
373
|
+
.map(&:line).sort).to eq([1])
|
374
|
+
end
|
375
|
+
end
|
379
376
|
|
380
|
-
|
381
|
-
|
377
|
+
context 'with predicates allowed' do
|
378
|
+
let(:cop_config) { { 'AllowPredicates' => true } }
|
382
379
|
|
383
|
-
|
384
|
-
|
385
|
-
|
386
|
-
|
387
|
-
|
388
|
-
|
389
|
-
|
390
|
-
|
380
|
+
it 'ignores accessors ending with a question mark' do
|
381
|
+
inspect_source(cop,
|
382
|
+
[' def foo?',
|
383
|
+
' @foo',
|
384
|
+
' end'])
|
385
|
+
expect(cop.offences).to be_empty
|
386
|
+
end
|
387
|
+
end
|
391
388
|
|
392
|
-
|
393
|
-
|
389
|
+
context 'with whitelist defined' do
|
390
|
+
let(:cop_config) { { 'Whitelist' => ['to_foo', 'bar='] } }
|
394
391
|
|
395
|
-
|
396
|
-
|
397
|
-
|
398
|
-
|
399
|
-
|
400
|
-
|
401
|
-
|
402
|
-
|
403
|
-
|
404
|
-
|
405
|
-
|
406
|
-
|
407
|
-
|
408
|
-
end
|
409
|
-
end
|
410
|
-
end
|
392
|
+
it 'ignores accessors in the whitelist' do
|
393
|
+
inspect_source(cop,
|
394
|
+
[' def to_foo',
|
395
|
+
' @foo',
|
396
|
+
' end'])
|
397
|
+
expect(cop.offences).to be_empty
|
398
|
+
end
|
399
|
+
it 'ignores writers in the whitelist' do
|
400
|
+
inspect_source(cop,
|
401
|
+
[' def bar=(bar)',
|
402
|
+
' @bar = bar',
|
403
|
+
' end'])
|
404
|
+
expect(cop.offences).to be_empty
|
411
405
|
end
|
412
406
|
end
|
413
407
|
end
|