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
@@ -1,95 +1,100 @@
|
|
1
|
-
# encoding: utf-8
|
1
|
+
# encoding: utf-8
|
2
2
|
|
3
3
|
require 'spec_helper'
|
4
4
|
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
expect(s.offences.size).to eq(1)
|
84
|
-
end
|
85
|
-
|
86
|
-
it 'accept semicolons inside strings' do
|
87
|
-
inspect_source(s,
|
88
|
-
['string = ";',
|
89
|
-
'multi-line string"'])
|
90
|
-
expect(s.offences).to be_empty
|
91
|
-
end
|
92
|
-
end
|
93
|
-
end
|
5
|
+
describe Rubocop::Cop::Style::Semicolon, :config do
|
6
|
+
subject(:cop) { described_class.new(config) }
|
7
|
+
let(:cop_config) { { 'AllowAsExpressionSeparator' => false } }
|
8
|
+
|
9
|
+
it 'registers an offence for a single expression' do
|
10
|
+
inspect_source(cop,
|
11
|
+
['puts "this is a test";'])
|
12
|
+
expect(cop.offences.size).to eq(1)
|
13
|
+
end
|
14
|
+
|
15
|
+
it 'registers an offence for several expressions' do
|
16
|
+
inspect_source(cop,
|
17
|
+
['puts "this is a test"; puts "So is this"'])
|
18
|
+
expect(cop.offences.size).to eq(1)
|
19
|
+
end
|
20
|
+
|
21
|
+
it 'registers an offence for one line method with two statements' do
|
22
|
+
inspect_source(cop,
|
23
|
+
['def foo(a) x(1); y(2); z(3); end'])
|
24
|
+
expect(cop.offences.size).to eq(1)
|
25
|
+
end
|
26
|
+
|
27
|
+
it 'accepts semicolon before end if so configured' do
|
28
|
+
inspect_source(cop,
|
29
|
+
['def foo(a) z(3); end'])
|
30
|
+
expect(cop.offences).to be_empty
|
31
|
+
end
|
32
|
+
|
33
|
+
it 'accepts semicolon after params if so configured' do
|
34
|
+
inspect_source(cop,
|
35
|
+
['def foo(a); z(3) end'])
|
36
|
+
expect(cop.offences).to be_empty
|
37
|
+
end
|
38
|
+
|
39
|
+
it 'accepts one line method definitions' do
|
40
|
+
inspect_source(cop,
|
41
|
+
['def foo1; x(3) end',
|
42
|
+
'def initialize(*_); end',
|
43
|
+
'def foo2() x(3); end',
|
44
|
+
'def foo3; x(3); end'])
|
45
|
+
expect(cop.offences).to be_empty
|
46
|
+
end
|
47
|
+
|
48
|
+
it 'accepts one line empty class definitions' do
|
49
|
+
inspect_source(cop,
|
50
|
+
['# Prefer a single-line format for class ...',
|
51
|
+
'class Foo < Exception; end',
|
52
|
+
'',
|
53
|
+
'class Bar; end'])
|
54
|
+
expect(cop.offences).to be_empty
|
55
|
+
end
|
56
|
+
|
57
|
+
it 'accepts one line empty method definitions' do
|
58
|
+
inspect_source(cop,
|
59
|
+
['# One exception to the rule are empty-body methods',
|
60
|
+
'def no_op; end',
|
61
|
+
'',
|
62
|
+
'def foo; end'])
|
63
|
+
expect(cop.offences).to be_empty
|
64
|
+
end
|
65
|
+
|
66
|
+
it 'accepts one line empty module definitions' do
|
67
|
+
inspect_source(cop,
|
68
|
+
['module Foo; end'])
|
69
|
+
expect(cop.offences).to be_empty
|
70
|
+
end
|
71
|
+
|
72
|
+
it 'registers an offence for semicolon at the end no matter what' do
|
73
|
+
inspect_source(cop,
|
74
|
+
['module Foo; end;'])
|
75
|
+
expect(cop.offences.size).to eq(1)
|
76
|
+
end
|
77
|
+
|
78
|
+
it 'accept semicolons inside strings' do
|
79
|
+
inspect_source(cop,
|
80
|
+
['string = ";',
|
81
|
+
'multi-line string"'])
|
82
|
+
expect(cop.offences).to be_empty
|
94
83
|
end
|
84
|
+
|
85
|
+
context 'when AllowAsExpressionSeparator is true' do
|
86
|
+
let(:cop_config) { { 'AllowAsExpressionSeparator' => true } }
|
87
|
+
|
88
|
+
it 'accepts several expressions' do
|
89
|
+
inspect_source(cop,
|
90
|
+
['puts "this is a test"; puts "So is this"'])
|
91
|
+
expect(cop.offences).to be_empty
|
92
|
+
end
|
93
|
+
|
94
|
+
it 'accepts one line method with two statements' do
|
95
|
+
inspect_source(cop,
|
96
|
+
['def foo(a) x(1); y(2); z(3); end'])
|
97
|
+
expect(cop.offences).to be_empty
|
98
|
+
end
|
99
|
+
end
|
95
100
|
end
|
@@ -2,101 +2,254 @@
|
|
2
2
|
|
3
3
|
require 'spec_helper'
|
4
4
|
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
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
|
-
|
5
|
+
describe Rubocop::Cop::Style::SignalException, :config do
|
6
|
+
subject(:cop) { described_class.new(config) }
|
7
|
+
|
8
|
+
context 'when enforced style is `semantic`' do
|
9
|
+
let(:cop_config) { { 'EnforcedStyle' => 'semantic' } }
|
10
|
+
|
11
|
+
it 'registers an offence for raise in begin section' do
|
12
|
+
inspect_source(cop,
|
13
|
+
['begin',
|
14
|
+
' raise',
|
15
|
+
'rescue Exception',
|
16
|
+
' #do nothing',
|
17
|
+
'end'])
|
18
|
+
expect(cop.offences.size).to eq(1)
|
19
|
+
expect(cop.messages)
|
20
|
+
.to eq(['Use `fail` instead of `raise` to signal exceptions.'])
|
21
|
+
end
|
22
|
+
|
23
|
+
it 'registers an offence for raise in def body' do
|
24
|
+
inspect_source(cop,
|
25
|
+
['def test',
|
26
|
+
' raise',
|
27
|
+
'rescue Exception',
|
28
|
+
' #do nothing',
|
29
|
+
'end'])
|
30
|
+
expect(cop.offences.size).to eq(1)
|
31
|
+
expect(cop.messages)
|
32
|
+
.to eq(['Use `fail` instead of `raise` to signal exceptions.'])
|
33
|
+
end
|
34
|
+
|
35
|
+
it 'registers an offence for fail in rescue section' do
|
36
|
+
inspect_source(cop,
|
37
|
+
['begin',
|
38
|
+
' fail',
|
39
|
+
'rescue Exception',
|
40
|
+
' fail',
|
41
|
+
'end'])
|
42
|
+
expect(cop.offences.size).to eq(1)
|
43
|
+
expect(cop.messages)
|
44
|
+
.to eq(['Use `raise` instead of `fail` to rethrow exceptions.'])
|
45
|
+
end
|
46
|
+
|
47
|
+
it 'accepts raise in rescue section' do
|
48
|
+
inspect_source(cop,
|
49
|
+
['begin',
|
50
|
+
' fail',
|
51
|
+
'rescue Exception',
|
52
|
+
' raise RuntimeError',
|
53
|
+
'end'])
|
54
|
+
expect(cop.offences).to be_empty
|
55
|
+
end
|
56
|
+
|
57
|
+
it 'registers an offence for fail in def rescue section' do
|
58
|
+
inspect_source(cop,
|
59
|
+
['def test',
|
60
|
+
' fail',
|
61
|
+
'rescue Exception',
|
62
|
+
' fail',
|
63
|
+
'end'])
|
64
|
+
expect(cop.offences.size).to eq(1)
|
65
|
+
expect(cop.messages)
|
66
|
+
.to eq(['Use `raise` instead of `fail` to rethrow exceptions.'])
|
67
|
+
end
|
68
|
+
|
69
|
+
it 'accepts raise in def rescue section' do
|
70
|
+
inspect_source(cop,
|
71
|
+
['def test',
|
72
|
+
' fail',
|
73
|
+
'rescue Exception',
|
74
|
+
' raise',
|
75
|
+
'end'])
|
76
|
+
expect(cop.offences).to be_empty
|
77
|
+
end
|
78
|
+
|
79
|
+
it 'registers an offence for raise not in a begin/rescue/end' do
|
80
|
+
inspect_source(cop,
|
81
|
+
["case cop_config['EnforcedStyle']",
|
82
|
+
"when 'single_quotes' then true",
|
83
|
+
"when 'double_quotes' then false",
|
84
|
+
"else raise 'Unknown StringLiterals style'",
|
85
|
+
'end'])
|
86
|
+
expect(cop.offences.size).to eq(1)
|
87
|
+
expect(cop.messages)
|
88
|
+
.to eq(['Use `fail` instead of `raise` to signal exceptions.'])
|
89
|
+
end
|
90
|
+
|
91
|
+
it 'registers one offence for each raise' do
|
92
|
+
inspect_source(cop,
|
93
|
+
['cop.stub(:on_def) { raise RuntimeError }',
|
94
|
+
'cop.stub(:on_def) { raise RuntimeError }'])
|
95
|
+
expect(cop.offences.size).to eq(2)
|
96
|
+
expect(cop.messages)
|
97
|
+
.to eq(['Use `fail` instead of `raise` to signal exceptions.'] * 2)
|
98
|
+
end
|
99
|
+
|
100
|
+
it 'is not confused by nested begin/rescue' do
|
101
|
+
inspect_source(cop,
|
102
|
+
['begin',
|
103
|
+
' raise',
|
104
|
+
' begin',
|
105
|
+
' raise',
|
106
|
+
' rescue',
|
107
|
+
' fail',
|
108
|
+
' end',
|
109
|
+
'rescue Exception',
|
110
|
+
' #do nothing',
|
111
|
+
'end'])
|
112
|
+
expect(cop.offences.size).to eq(3)
|
113
|
+
expect(cop.messages)
|
114
|
+
.to eq(['Use `fail` instead of `raise` to signal exceptions.'] * 2 +
|
115
|
+
['Use `raise` instead of `fail` to rethrow exceptions.'])
|
116
|
+
end
|
117
|
+
|
118
|
+
it 'auto-corrects raise to fail when appropriate' do
|
119
|
+
new_source = autocorrect_source(cop,
|
120
|
+
['begin',
|
121
|
+
' raise',
|
122
|
+
'rescue Exception',
|
123
|
+
' raise',
|
124
|
+
'end'])
|
125
|
+
expect(new_source).to eq(['begin',
|
126
|
+
' fail',
|
127
|
+
'rescue Exception',
|
128
|
+
' raise',
|
129
|
+
'end'].join("\n"))
|
130
|
+
end
|
131
|
+
|
132
|
+
it 'auto-corrects fail to raise when appropriate' do
|
133
|
+
new_source = autocorrect_source(cop,
|
134
|
+
['begin',
|
135
|
+
' fail',
|
136
|
+
'rescue Exception',
|
137
|
+
' fail',
|
138
|
+
'end'])
|
139
|
+
expect(new_source).to eq(['begin',
|
140
|
+
' fail',
|
141
|
+
'rescue Exception',
|
142
|
+
' raise',
|
143
|
+
'end'].join("\n"))
|
144
|
+
end
|
145
|
+
end
|
146
|
+
|
147
|
+
context 'when enforced style is `raise`' do
|
148
|
+
let(:cop_config) { { 'EnforcedStyle' => 'only_raise' } }
|
149
|
+
|
150
|
+
it 'registers an offence for fail in begin section' do
|
151
|
+
inspect_source(cop,
|
152
|
+
['begin',
|
153
|
+
' fail',
|
154
|
+
'rescue Exception',
|
155
|
+
' #do nothing',
|
156
|
+
'end'])
|
157
|
+
expect(cop.offences.size).to eq(1)
|
158
|
+
expect(cop.messages)
|
159
|
+
.to eq(['Always use `raise` to signal exceptions.'])
|
160
|
+
end
|
161
|
+
|
162
|
+
it 'registers an offence for fail in def body' do
|
163
|
+
inspect_source(cop,
|
164
|
+
['def test',
|
165
|
+
' fail',
|
166
|
+
'rescue Exception',
|
167
|
+
' #do nothing',
|
168
|
+
'end'])
|
169
|
+
expect(cop.offences.size).to eq(1)
|
170
|
+
expect(cop.messages)
|
171
|
+
.to eq(['Always use `raise` to signal exceptions.'])
|
172
|
+
end
|
173
|
+
|
174
|
+
it 'registers an offence for fail in rescue section' do
|
175
|
+
inspect_source(cop,
|
176
|
+
['begin',
|
177
|
+
' raise',
|
178
|
+
'rescue Exception',
|
179
|
+
' fail',
|
180
|
+
'end'])
|
181
|
+
expect(cop.offences.size).to eq(1)
|
182
|
+
expect(cop.messages)
|
183
|
+
.to eq(['Always use `raise` to signal exceptions.'])
|
184
|
+
end
|
185
|
+
|
186
|
+
it 'auto-corrects fail to raise always' do
|
187
|
+
new_source = autocorrect_source(cop,
|
188
|
+
['begin',
|
189
|
+
' fail',
|
190
|
+
'rescue Exception',
|
191
|
+
' fail',
|
192
|
+
'end'])
|
193
|
+
expect(new_source).to eq(['begin',
|
194
|
+
' raise',
|
195
|
+
'rescue Exception',
|
196
|
+
' raise',
|
197
|
+
'end'].join("\n"))
|
198
|
+
end
|
199
|
+
|
200
|
+
end
|
201
|
+
|
202
|
+
context 'when enforced style is `fail`' do
|
203
|
+
let(:cop_config) { { 'EnforcedStyle' => 'only_fail' } }
|
204
|
+
|
205
|
+
it 'registers an offence for raise in begin section' do
|
206
|
+
inspect_source(cop,
|
207
|
+
['begin',
|
208
|
+
' raise',
|
209
|
+
'rescue Exception',
|
210
|
+
' #do nothing',
|
211
|
+
'end'])
|
212
|
+
expect(cop.offences.size).to eq(1)
|
213
|
+
expect(cop.messages)
|
214
|
+
.to eq(['Always use `fail` to signal exceptions.'])
|
215
|
+
end
|
216
|
+
|
217
|
+
it 'registers an offence for raise in def body' do
|
218
|
+
inspect_source(cop,
|
219
|
+
['def test',
|
220
|
+
' raise',
|
221
|
+
'rescue Exception',
|
222
|
+
' #do nothing',
|
223
|
+
'end'])
|
224
|
+
expect(cop.offences.size).to eq(1)
|
225
|
+
expect(cop.messages)
|
226
|
+
.to eq(['Always use `fail` to signal exceptions.'])
|
227
|
+
end
|
228
|
+
|
229
|
+
it 'registers an offence for raise in rescue section' do
|
230
|
+
inspect_source(cop,
|
231
|
+
['begin',
|
232
|
+
' fail',
|
233
|
+
'rescue Exception',
|
234
|
+
' raise',
|
235
|
+
'end'])
|
236
|
+
expect(cop.offences.size).to eq(1)
|
237
|
+
expect(cop.messages)
|
238
|
+
.to eq(['Always use `fail` to signal exceptions.'])
|
239
|
+
end
|
240
|
+
|
241
|
+
it 'auto-corrects raise to fail always' do
|
242
|
+
new_source = autocorrect_source(cop,
|
243
|
+
['begin',
|
244
|
+
' raise',
|
245
|
+
'rescue Exception',
|
246
|
+
' raise',
|
247
|
+
'end'])
|
248
|
+
expect(new_source).to eq(['begin',
|
249
|
+
' fail',
|
250
|
+
'rescue Exception',
|
251
|
+
' fail',
|
252
|
+
'end'].join("\n"))
|
100
253
|
end
|
101
254
|
end
|
102
255
|
end
|