ridecharge-rubocop 0.0.1
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.
- checksums.yaml +7 -0
- data/.gitignore +22 -0
- data/.rspec +1 -0
- data/.travis.yml +14 -0
- data/CHANGELOG.md +0 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +35 -0
- data/Rakefile +22 -0
- data/bin/ridecharge-rubocop +49 -0
- data/config/0default.yml +8 -0
- data/config/fleet-magic-todo.yml +380 -0
- data/config/rc-todo.yml +190 -0
- data/config/ridecharge-rubocop_todo.yml +73 -0
- data/config/rubocop/default.yml +308 -0
- data/config/rubocop/disabled.yml +9 -0
- data/config/rubocop/enabled.yml +648 -0
- data/config/standard-todo.yml +24 -0
- data/config/tabs.yml +15 -0
- data/config/vehicle-todo.yml +195 -0
- data/lib/ridecharge/rubocop.rb +2 -0
- data/lib/ridecharge/rubocop/version.rb +5 -0
- data/lib/rubocop/config_loader_monkeypatch.rb +117 -0
- data/lib/rubocop/ridecharge.rb +1 -0
- data/ridecharge-rubocop.gemspec +25 -0
- data/spec/isolated_environment_spec.rb +24 -0
- data/spec/project_spec.rb +118 -0
- data/spec/rubocop/cli_spec.rb +1385 -0
- data/spec/rubocop/config_loader_spec.rb +328 -0
- data/spec/rubocop/config_spec.rb +179 -0
- data/spec/rubocop/config_store_spec.rb +53 -0
- data/spec/rubocop/cop/commissioner_spec.rb +83 -0
- data/spec/rubocop/cop/cop_spec.rb +114 -0
- data/spec/rubocop/cop/corrector_spec.rb +59 -0
- data/spec/rubocop/cop/lint/ambiguous_operator_spec.rb +113 -0
- data/spec/rubocop/cop/lint/ambiguous_regexp_literal_spec.rb +35 -0
- data/spec/rubocop/cop/lint/assignment_in_condition_spec.rb +107 -0
- data/spec/rubocop/cop/lint/block_alignment_spec.rb +411 -0
- data/spec/rubocop/cop/lint/condition_position_spec.rb +49 -0
- data/spec/rubocop/cop/lint/debugger_spec.rb +39 -0
- data/spec/rubocop/cop/lint/else_layout_spec.rb +65 -0
- data/spec/rubocop/cop/lint/empty_ensure_spec.rb +27 -0
- data/spec/rubocop/cop/lint/end_alignment_spec.rb +136 -0
- data/spec/rubocop/cop/lint/end_in_method_spec.rb +29 -0
- data/spec/rubocop/cop/lint/ensure_return_spec.rb +39 -0
- data/spec/rubocop/cop/lint/eval_spec.rb +35 -0
- data/spec/rubocop/cop/lint/handle_exceptions_spec.rb +30 -0
- data/spec/rubocop/cop/lint/invalid_character_literal_spec.rb +33 -0
- data/spec/rubocop/cop/lint/literal_in_condition_spec.rb +63 -0
- data/spec/rubocop/cop/lint/loop_spec.rb +27 -0
- data/spec/rubocop/cop/lint/parentheses_as_grouped_expression_spec.rb +57 -0
- data/spec/rubocop/cop/lint/require_parentheses_spec.rb +82 -0
- data/spec/rubocop/cop/lint/rescue_exception_spec.rb +131 -0
- data/spec/rubocop/cop/lint/shadowing_outer_local_variable_spec.rb +237 -0
- data/spec/rubocop/cop/lint/syntax_spec.rb +34 -0
- data/spec/rubocop/cop/lint/unreachable_code_spec.rb +63 -0
- data/spec/rubocop/cop/lint/useless_assignment_spec.rb +1570 -0
- data/spec/rubocop/cop/lint/useless_comparison_spec.rb +30 -0
- data/spec/rubocop/cop/lint/useless_else_without_rescue_spec.rb +48 -0
- data/spec/rubocop/cop/lint/useless_setter_call_spec.rb +149 -0
- data/spec/rubocop/cop/lint/void_spec.rb +57 -0
- data/spec/rubocop/cop/offence_spec.rb +133 -0
- data/spec/rubocop/cop/rails/default_scope_spec.rb +37 -0
- data/spec/rubocop/cop/rails/has_and_belongs_to_many_spec.rb +13 -0
- data/spec/rubocop/cop/rails/output_spec.rb +41 -0
- data/spec/rubocop/cop/rails/read_attribute_spec.rb +13 -0
- data/spec/rubocop/cop/rails/validation_spec.rb +21 -0
- data/spec/rubocop/cop/style/access_modifier_indentation_spec.rb +361 -0
- data/spec/rubocop/cop/style/accessor_method_name_spec.rb +81 -0
- data/spec/rubocop/cop/style/alias_spec.rb +59 -0
- data/spec/rubocop/cop/style/align_array_spec.rb +75 -0
- data/spec/rubocop/cop/style/align_hash_spec.rb +310 -0
- data/spec/rubocop/cop/style/align_parameters_spec.rb +222 -0
- data/spec/rubocop/cop/style/and_or_spec.rb +57 -0
- data/spec/rubocop/cop/style/ascii_comments_spec.rb +22 -0
- data/spec/rubocop/cop/style/ascii_identifiers_spec.rb +36 -0
- data/spec/rubocop/cop/style/attr_spec.rb +19 -0
- data/spec/rubocop/cop/style/begin_block_spec.rb +13 -0
- data/spec/rubocop/cop/style/block_comments_spec.rb +21 -0
- data/spec/rubocop/cop/style/block_nesting_spec.rb +156 -0
- data/spec/rubocop/cop/style/blocks_spec.rb +99 -0
- data/spec/rubocop/cop/style/braces_around_hash_parameters_spec.rb +284 -0
- data/spec/rubocop/cop/style/case_equality_spec.rb +12 -0
- data/spec/rubocop/cop/style/case_indentation_spec.rb +289 -0
- data/spec/rubocop/cop/style/character_literal_spec.rb +37 -0
- data/spec/rubocop/cop/style/class_and_module_camel_case_spec.rb +40 -0
- data/spec/rubocop/cop/style/class_length_spec.rb +131 -0
- data/spec/rubocop/cop/style/class_methods_spec.rb +45 -0
- data/spec/rubocop/cop/style/class_vars_spec.rb +19 -0
- data/spec/rubocop/cop/style/collection_methods_spec.rb +48 -0
- data/spec/rubocop/cop/style/colon_method_call_spec.rb +60 -0
- data/spec/rubocop/cop/style/comment_annotation_spec.rb +86 -0
- data/spec/rubocop/cop/style/constant_name_spec.rb +65 -0
- data/spec/rubocop/cop/style/cyclomatic_complexity_spec.rb +204 -0
- data/spec/rubocop/cop/style/def_with_parentheses_spec.rb +39 -0
- data/spec/rubocop/cop/style/documentation_spec.rb +123 -0
- data/spec/rubocop/cop/style/dot_position_spec.rb +94 -0
- data/spec/rubocop/cop/style/empty_line_between_defs_spec.rb +127 -0
- data/spec/rubocop/cop/style/empty_lines_around_access_modifier_spec.rb +56 -0
- data/spec/rubocop/cop/style/empty_lines_around_body_spec.rb +131 -0
- data/spec/rubocop/cop/style/empty_lines_spec.rb +40 -0
- data/spec/rubocop/cop/style/empty_literal_spec.rb +100 -0
- data/spec/rubocop/cop/style/encoding_spec.rb +56 -0
- data/spec/rubocop/cop/style/end_block_spec.rb +13 -0
- data/spec/rubocop/cop/style/end_of_line_spec.rb +47 -0
- data/spec/rubocop/cop/style/even_odd_spec.rb +75 -0
- data/spec/rubocop/cop/style/favor_join_spec.rb +31 -0
- data/spec/rubocop/cop/style/favor_sprintf_spec.rb +47 -0
- data/spec/rubocop/cop/style/favor_unless_over_negated_if_spec.rb +76 -0
- data/spec/rubocop/cop/style/favor_until_over_negated_while_spec.rb +41 -0
- data/spec/rubocop/cop/style/final_newline_spec.rb +30 -0
- data/spec/rubocop/cop/style/flip_flop_spec.rb +23 -0
- data/spec/rubocop/cop/style/for_spec.rb +105 -0
- data/spec/rubocop/cop/style/global_vars_spec.rb +34 -0
- data/spec/rubocop/cop/style/hash_methods_spec.rb +45 -0
- data/spec/rubocop/cop/style/hash_syntax_spec.rb +131 -0
- data/spec/rubocop/cop/style/if_unless_modifier_spec.rb +128 -0
- data/spec/rubocop/cop/style/if_with_semicolon_spec.rb +19 -0
- data/spec/rubocop/cop/style/indentation_consistency_spec.rb +490 -0
- data/spec/rubocop/cop/style/indentation_width_spec.rb +470 -0
- data/spec/rubocop/cop/style/lambda_call_spec.rb +65 -0
- data/spec/rubocop/cop/style/lambda_spec.rb +41 -0
- data/spec/rubocop/cop/style/leading_comment_space_spec.rb +64 -0
- data/spec/rubocop/cop/style/line_end_concatenation_spec.rb +34 -0
- data/spec/rubocop/cop/style/line_length_spec.rb +20 -0
- data/spec/rubocop/cop/style/method_call_parentheses_spec.rb +59 -0
- data/spec/rubocop/cop/style/method_called_on_do_end_block_spec.rb +60 -0
- data/spec/rubocop/cop/style/method_def_parentheses_spec.rb +106 -0
- data/spec/rubocop/cop/style/method_length_spec.rb +147 -0
- data/spec/rubocop/cop/style/method_name_spec.rb +125 -0
- data/spec/rubocop/cop/style/module_function_spec.rb +24 -0
- data/spec/rubocop/cop/style/multiline_block_chain_spec.rb +78 -0
- data/spec/rubocop/cop/style/multiline_if_then_spec.rb +107 -0
- data/spec/rubocop/cop/style/multiline_ternary_operator_spec.rb +18 -0
- data/spec/rubocop/cop/style/nested_ternary_operator_spec.rb +21 -0
- data/spec/rubocop/cop/style/nil_comparison_spec.rb +30 -0
- data/spec/rubocop/cop/style/not_spec.rb +22 -0
- data/spec/rubocop/cop/style/numeric_literals_spec.rb +64 -0
- data/spec/rubocop/cop/style/one_line_conditional_spec.rb +13 -0
- data/spec/rubocop/cop/style/op_method_spec.rb +74 -0
- data/spec/rubocop/cop/style/parameter_lists_spec.rb +44 -0
- data/spec/rubocop/cop/style/parentheses_around_condition_spec.rb +122 -0
- data/spec/rubocop/cop/style/perl_backrefs_spec.rb +17 -0
- data/spec/rubocop/cop/style/predicate_name_spec.rb +25 -0
- data/spec/rubocop/cop/style/proc_spec.rb +27 -0
- data/spec/rubocop/cop/style/raise_args_spec.rb +82 -0
- data/spec/rubocop/cop/style/redundant_begin_spec.rb +57 -0
- data/spec/rubocop/cop/style/redundant_exception_spec.rb +27 -0
- data/spec/rubocop/cop/style/redundant_return_spec.rb +171 -0
- data/spec/rubocop/cop/style/redundant_self_spec.rb +142 -0
- data/spec/rubocop/cop/style/regexp_literal_spec.rb +83 -0
- data/spec/rubocop/cop/style/rescue_modifier_spec.rb +116 -0
- data/spec/rubocop/cop/style/semicolon_spec.rb +100 -0
- data/spec/rubocop/cop/style/signal_exception_spec.rb +266 -0
- data/spec/rubocop/cop/style/single_line_block_params_spec.rb +68 -0
- data/spec/rubocop/cop/style/single_line_methods_spec.rb +52 -0
- data/spec/rubocop/cop/style/space_after_colon_spec.rb +38 -0
- data/spec/rubocop/cop/style/space_after_comma_spec.rb +30 -0
- data/spec/rubocop/cop/style/space_after_control_keyword_spec.rb +84 -0
- data/spec/rubocop/cop/style/space_after_method_name_spec.rb +70 -0
- data/spec/rubocop/cop/style/space_after_not_spec.rb +22 -0
- data/spec/rubocop/cop/style/space_after_semicolon_spec.rb +23 -0
- data/spec/rubocop/cop/style/space_around_block_braces_spec.rb +283 -0
- data/spec/rubocop/cop/style/space_around_equals_in_parameter_default_spec.rb +33 -0
- data/spec/rubocop/cop/style/space_around_operators_spec.rb +325 -0
- data/spec/rubocop/cop/style/space_before_modifier_keyword_spec.rb +70 -0
- data/spec/rubocop/cop/style/space_inside_brackets_spec.rb +52 -0
- data/spec/rubocop/cop/style/space_inside_hash_literal_braces_spec.rb +138 -0
- data/spec/rubocop/cop/style/space_inside_parens_spec.rb +34 -0
- data/spec/rubocop/cop/style/special_global_vars_spec.rb +56 -0
- data/spec/rubocop/cop/style/string_literals_spec.rb +212 -0
- data/spec/rubocop/cop/style/symbol_array_spec.rb +37 -0
- data/spec/rubocop/cop/style/tab_spec.rb +17 -0
- data/spec/rubocop/cop/style/trailing_blank_lines_spec.rb +43 -0
- data/spec/rubocop/cop/style/trailing_comma_spec.rb +230 -0
- data/spec/rubocop/cop/style/trailing_whitespace_spec.rb +30 -0
- data/spec/rubocop/cop/style/trivial_accessors_spec.rb +415 -0
- data/spec/rubocop/cop/style/unless_else_spec.rb +25 -0
- data/spec/rubocop/cop/style/variable_interpolation_spec.rb +47 -0
- data/spec/rubocop/cop/style/variable_name_spec.rb +107 -0
- data/spec/rubocop/cop/style/when_then_spec.rb +41 -0
- data/spec/rubocop/cop/style/while_until_do_spec.rb +53 -0
- data/spec/rubocop/cop/style/while_until_modifier_spec.rb +75 -0
- data/spec/rubocop/cop/style/word_array_spec.rb +97 -0
- data/spec/rubocop/cop/team_spec.rb +156 -0
- data/spec/rubocop/cop/util_spec.rb +49 -0
- data/spec/rubocop/cop/variable_inspector/assignment_spec.rb +213 -0
- data/spec/rubocop/cop/variable_inspector/locatable_spec.rb +734 -0
- data/spec/rubocop/cop/variable_inspector/scope_spec.rb +184 -0
- data/spec/rubocop/cop/variable_inspector/variable_spec.rb +73 -0
- data/spec/rubocop/cop/variable_inspector/variable_table_spec.rb +269 -0
- data/spec/rubocop/cop/variable_inspector_spec.rb +29 -0
- data/spec/rubocop/file_inspector_spec.rb +78 -0
- data/spec/rubocop/formatter/base_formatter_spec.rb +191 -0
- data/spec/rubocop/formatter/clang_style_formatter_spec.rb +114 -0
- data/spec/rubocop/formatter/colorizable_spec.rb +107 -0
- data/spec/rubocop/formatter/disabled_config_formatter_spec.rb +50 -0
- data/spec/rubocop/formatter/emacs_style_formatter_spec.rb +62 -0
- data/spec/rubocop/formatter/file_list_formatter_spec.rb +33 -0
- data/spec/rubocop/formatter/formatter_set_spec.rb +132 -0
- data/spec/rubocop/formatter/json_formatter_spec.rb +148 -0
- data/spec/rubocop/formatter/offence_count_formatter_spec.rb +52 -0
- data/spec/rubocop/formatter/progress_formatter_spec.rb +182 -0
- data/spec/rubocop/formatter/simple_text_formatter_spec.rb +123 -0
- data/spec/rubocop/options_spec.rb +145 -0
- data/spec/rubocop/path_util_spec.rb +42 -0
- data/spec/rubocop/processed_source_spec.rb +114 -0
- data/spec/rubocop/source_parser_spec.rb +139 -0
- data/spec/rubocop/target_finder_spec.rb +180 -0
- data/spec/rubocop/token_spec.rb +25 -0
- data/spec/spec_helper.rb +136 -0
- data/spec/support/ast_helper.rb +15 -0
- data/spec/support/file_helper.rb +21 -0
- data/spec/support/isolated_environment.rb +34 -0
- data/spec/support/mri_syntax_checker.rb +73 -0
- data/spec/support/shared_context.rb +22 -0
- data/spec/support/shared_examples.rb +33 -0
- data/spec/support/statement_modifier_helper.rb +41 -0
- metadata +511 -0
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
|
|
3
|
+
require 'spec_helper'
|
|
4
|
+
|
|
5
|
+
describe Rubocop::Cop::Style::RegexpLiteral, :config do
|
|
6
|
+
subject(:cop) { described_class.new(config) }
|
|
7
|
+
let(:cop_config) { { 'MaxSlashes' => 1 } }
|
|
8
|
+
|
|
9
|
+
context 'when a regexp uses // delimiters' do
|
|
10
|
+
context 'when MaxSlashes is 1' do
|
|
11
|
+
it 'registers an offence for two slashes in regexp' do
|
|
12
|
+
inspect_source(cop, ['x =~ /home\/\//',
|
|
13
|
+
'y =~ /etc\/top\//'])
|
|
14
|
+
expect(cop.messages)
|
|
15
|
+
.to eq(['Use %r for regular expressions matching more ' \
|
|
16
|
+
"than 1 '/' character."] * 2)
|
|
17
|
+
expect(cop.config_to_allow_offences).to eq('MaxSlashes' => 2)
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
it 'accepts zero or one slash in regexp' do
|
|
21
|
+
inspect_source(cop, ['x =~ /\/home/',
|
|
22
|
+
'y =~ /\//',
|
|
23
|
+
'w =~ /\//m',
|
|
24
|
+
'z =~ /a/'])
|
|
25
|
+
expect(cop.offences).to be_empty
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
context 'when MaxSlashes is 0' do
|
|
30
|
+
let(:cop_config) { { 'MaxSlashes' => 0 } }
|
|
31
|
+
|
|
32
|
+
it 'registers an offence for one slash in regexp' do
|
|
33
|
+
inspect_source(cop, ['x =~ /home\//'])
|
|
34
|
+
expect(cop.messages)
|
|
35
|
+
.to eq(['Use %r for regular expressions matching more ' \
|
|
36
|
+
"than 0 '/' characters."])
|
|
37
|
+
expect(cop.config_to_allow_offences).to eq('MaxSlashes' => 1)
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
it 'accepts zero slashes in regexp' do
|
|
41
|
+
inspect_source(cop, ['z =~ /a/'])
|
|
42
|
+
expect(cop.offences).to be_empty
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
it 'registers an offence for zero slashes in regexp' do
|
|
46
|
+
inspect_source(cop, ['y =~ %r(etc)'])
|
|
47
|
+
expect(cop.messages)
|
|
48
|
+
.to eq(['Use %r only for regular expressions matching more ' \
|
|
49
|
+
"than 0 '/' characters."])
|
|
50
|
+
expect(cop.config_to_allow_offences).to eq('MaxSlashes' => 1)
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
it 'accepts regexp with one slash' do
|
|
54
|
+
inspect_source(cop, ['x =~ %r(/home)'])
|
|
55
|
+
expect(cop.offences).to be_empty
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
it 'ignores slashes do not belong regexp' do
|
|
60
|
+
inspect_source(cop, ['x =~ /\s{#{x[/\s+/].length}}/'])
|
|
61
|
+
expect(cop.offences).to be_empty
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
context 'when a regexp uses %r delimiters' do
|
|
66
|
+
context 'when MaxSlashes is 1' do
|
|
67
|
+
it 'registers an offence for zero or one slash in regexp' do
|
|
68
|
+
inspect_source(cop, ['x =~ %r(/home)',
|
|
69
|
+
'y =~ %r(etc)'])
|
|
70
|
+
expect(cop.messages)
|
|
71
|
+
.to eq(['Use %r only for regular expressions matching more ' \
|
|
72
|
+
"than 1 '/' character."] * 2)
|
|
73
|
+
expect(cop.config_to_allow_offences).to eq('MaxSlashes' => 2)
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
it 'accepts regexp with two or more slashes' do
|
|
77
|
+
inspect_source(cop, ['x =~ %r(/home/)',
|
|
78
|
+
'y =~ %r(/////)'])
|
|
79
|
+
expect(cop.offences).to be_empty
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
end
|
|
83
|
+
end
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
|
|
3
|
+
require 'spec_helper'
|
|
4
|
+
|
|
5
|
+
describe Rubocop::Cop::Style::RescueModifier do
|
|
6
|
+
subject(:cop) { described_class.new }
|
|
7
|
+
|
|
8
|
+
it 'registers an offence for modifier rescue' do
|
|
9
|
+
inspect_source(cop,
|
|
10
|
+
['method rescue handle'])
|
|
11
|
+
expect(cop.offences.size).to eq(1)
|
|
12
|
+
expect(cop.messages)
|
|
13
|
+
.to eq(['Avoid using rescue in its modifier form.'])
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
it 'handles more complex expression with modifier rescue' do
|
|
17
|
+
inspect_source(cop,
|
|
18
|
+
['method1 or method2 rescue handle'])
|
|
19
|
+
expect(cop.offences.size).to eq(1)
|
|
20
|
+
expect(cop.messages)
|
|
21
|
+
.to eq(['Avoid using rescue in its modifier form.'])
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
it 'handles modifier rescue in normal rescue' do
|
|
25
|
+
inspect_source(cop,
|
|
26
|
+
['begin',
|
|
27
|
+
' test rescue modifier_handle',
|
|
28
|
+
'rescue',
|
|
29
|
+
' normal_handle',
|
|
30
|
+
'end'])
|
|
31
|
+
expect(cop.offences.size).to eq(1)
|
|
32
|
+
expect(cop.offences.first.line).to eq(2)
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
it 'does not register an offence for normal rescue' do
|
|
36
|
+
inspect_source(cop,
|
|
37
|
+
['begin',
|
|
38
|
+
' test',
|
|
39
|
+
'rescue',
|
|
40
|
+
' handle',
|
|
41
|
+
'end'])
|
|
42
|
+
expect(cop.offences).to be_empty
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
it 'does not register an offence for normal rescue with ensure' do
|
|
46
|
+
inspect_source(cop,
|
|
47
|
+
['begin',
|
|
48
|
+
' test',
|
|
49
|
+
'rescue',
|
|
50
|
+
' handle',
|
|
51
|
+
'ensure',
|
|
52
|
+
' cleanup',
|
|
53
|
+
'end'])
|
|
54
|
+
expect(cop.offences).to be_empty
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
it 'does not register an offence for nested normal rescue' do
|
|
58
|
+
inspect_source(cop,
|
|
59
|
+
['begin',
|
|
60
|
+
' begin',
|
|
61
|
+
' test',
|
|
62
|
+
' rescue',
|
|
63
|
+
' handle_inner',
|
|
64
|
+
' end',
|
|
65
|
+
'rescue',
|
|
66
|
+
' handle_outer',
|
|
67
|
+
'end'])
|
|
68
|
+
expect(cop.offences).to be_empty
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
context 'when an instance method has implicit begin' do
|
|
72
|
+
it 'accepts normal rescue' do
|
|
73
|
+
inspect_source(cop,
|
|
74
|
+
['def some_method',
|
|
75
|
+
' test',
|
|
76
|
+
'rescue',
|
|
77
|
+
' handle',
|
|
78
|
+
'end'])
|
|
79
|
+
expect(cop.offences).to be_empty
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
it 'handles modifier rescue in body of implicit begin' do
|
|
83
|
+
inspect_source(cop,
|
|
84
|
+
['def some_method',
|
|
85
|
+
' test rescue modifier_handle',
|
|
86
|
+
'rescue',
|
|
87
|
+
' normal_handle',
|
|
88
|
+
'end'])
|
|
89
|
+
expect(cop.offences.size).to eq(1)
|
|
90
|
+
expect(cop.offences.first.line).to eq(2)
|
|
91
|
+
end
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
context 'when a singleton method has implicit begin' do
|
|
95
|
+
it 'accepts normal rescue' do
|
|
96
|
+
inspect_source(cop,
|
|
97
|
+
['def self.some_method',
|
|
98
|
+
' test',
|
|
99
|
+
'rescue',
|
|
100
|
+
' handle',
|
|
101
|
+
'end'])
|
|
102
|
+
expect(cop.offences).to be_empty
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
it 'handles modifier rescue in body of implicit begin' do
|
|
106
|
+
inspect_source(cop,
|
|
107
|
+
['def self.some_method',
|
|
108
|
+
' test rescue modifier_handle',
|
|
109
|
+
'rescue',
|
|
110
|
+
' normal_handle',
|
|
111
|
+
'end'])
|
|
112
|
+
expect(cop.offences.size).to eq(1)
|
|
113
|
+
expect(cop.offences.first.line).to eq(2)
|
|
114
|
+
end
|
|
115
|
+
end
|
|
116
|
+
end
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
|
|
3
|
+
require 'spec_helper'
|
|
4
|
+
|
|
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
|
|
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
|
|
100
|
+
end
|
|
@@ -0,0 +1,266 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
|
|
3
|
+
require 'spec_helper'
|
|
4
|
+
|
|
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 'registers only offence for one raise that should be fail' do
|
|
70
|
+
# This is a special case that has caused double reporting.
|
|
71
|
+
inspect_source(cop,
|
|
72
|
+
['map do',
|
|
73
|
+
" raise 'I'",
|
|
74
|
+
'end.flatten.compact'])
|
|
75
|
+
expect(cop.offences.size).to eq(1)
|
|
76
|
+
expect(cop.messages)
|
|
77
|
+
.to eq(['Use `fail` instead of `raise` to signal exceptions.'])
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
it 'accepts raise in def rescue section' do
|
|
81
|
+
inspect_source(cop,
|
|
82
|
+
['def test',
|
|
83
|
+
' fail',
|
|
84
|
+
'rescue Exception',
|
|
85
|
+
' raise',
|
|
86
|
+
'end'])
|
|
87
|
+
expect(cop.offences).to be_empty
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
it 'registers an offence for raise not in a begin/rescue/end' do
|
|
91
|
+
inspect_source(cop,
|
|
92
|
+
["case cop_config['EnforcedStyle']",
|
|
93
|
+
"when 'single_quotes' then true",
|
|
94
|
+
"when 'double_quotes' then false",
|
|
95
|
+
"else raise 'Unknown StringLiterals style'",
|
|
96
|
+
'end'])
|
|
97
|
+
expect(cop.offences.size).to eq(1)
|
|
98
|
+
expect(cop.messages)
|
|
99
|
+
.to eq(['Use `fail` instead of `raise` to signal exceptions.'])
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
it 'registers one offence for each raise' do
|
|
103
|
+
inspect_source(cop,
|
|
104
|
+
['cop.stub(:on_def) { raise RuntimeError }',
|
|
105
|
+
'cop.stub(:on_def) { raise RuntimeError }'])
|
|
106
|
+
expect(cop.offences.size).to eq(2)
|
|
107
|
+
expect(cop.messages)
|
|
108
|
+
.to eq(['Use `fail` instead of `raise` to signal exceptions.'] * 2)
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
it 'is not confused by nested begin/rescue' do
|
|
112
|
+
inspect_source(cop,
|
|
113
|
+
['begin',
|
|
114
|
+
' raise',
|
|
115
|
+
' begin',
|
|
116
|
+
' raise',
|
|
117
|
+
' rescue',
|
|
118
|
+
' fail',
|
|
119
|
+
' end',
|
|
120
|
+
'rescue Exception',
|
|
121
|
+
' #do nothing',
|
|
122
|
+
'end'])
|
|
123
|
+
expect(cop.offences.size).to eq(3)
|
|
124
|
+
expect(cop.messages)
|
|
125
|
+
.to eq(['Use `fail` instead of `raise` to signal exceptions.'] * 2 +
|
|
126
|
+
['Use `raise` instead of `fail` to rethrow exceptions.'])
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
it 'auto-corrects raise to fail when appropriate' do
|
|
130
|
+
new_source = autocorrect_source(cop,
|
|
131
|
+
['begin',
|
|
132
|
+
' raise',
|
|
133
|
+
'rescue Exception',
|
|
134
|
+
' raise',
|
|
135
|
+
'end'])
|
|
136
|
+
expect(new_source).to eq(['begin',
|
|
137
|
+
' fail',
|
|
138
|
+
'rescue Exception',
|
|
139
|
+
' raise',
|
|
140
|
+
'end'].join("\n"))
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
it 'auto-corrects fail to raise when appropriate' do
|
|
144
|
+
new_source = autocorrect_source(cop,
|
|
145
|
+
['begin',
|
|
146
|
+
' fail',
|
|
147
|
+
'rescue Exception',
|
|
148
|
+
' fail',
|
|
149
|
+
'end'])
|
|
150
|
+
expect(new_source).to eq(['begin',
|
|
151
|
+
' fail',
|
|
152
|
+
'rescue Exception',
|
|
153
|
+
' raise',
|
|
154
|
+
'end'].join("\n"))
|
|
155
|
+
end
|
|
156
|
+
end
|
|
157
|
+
|
|
158
|
+
context 'when enforced style is `raise`' do
|
|
159
|
+
let(:cop_config) { { 'EnforcedStyle' => 'only_raise' } }
|
|
160
|
+
|
|
161
|
+
it 'registers an offence for fail in begin section' do
|
|
162
|
+
inspect_source(cop,
|
|
163
|
+
['begin',
|
|
164
|
+
' fail',
|
|
165
|
+
'rescue Exception',
|
|
166
|
+
' #do nothing',
|
|
167
|
+
'end'])
|
|
168
|
+
expect(cop.offences.size).to eq(1)
|
|
169
|
+
expect(cop.messages)
|
|
170
|
+
.to eq(['Always use `raise` to signal exceptions.'])
|
|
171
|
+
end
|
|
172
|
+
|
|
173
|
+
it 'registers an offence for fail in def body' do
|
|
174
|
+
inspect_source(cop,
|
|
175
|
+
['def test',
|
|
176
|
+
' fail',
|
|
177
|
+
'rescue Exception',
|
|
178
|
+
' #do nothing',
|
|
179
|
+
'end'])
|
|
180
|
+
expect(cop.offences.size).to eq(1)
|
|
181
|
+
expect(cop.messages)
|
|
182
|
+
.to eq(['Always use `raise` to signal exceptions.'])
|
|
183
|
+
end
|
|
184
|
+
|
|
185
|
+
it 'registers an offence for fail in rescue section' do
|
|
186
|
+
inspect_source(cop,
|
|
187
|
+
['begin',
|
|
188
|
+
' raise',
|
|
189
|
+
'rescue Exception',
|
|
190
|
+
' fail',
|
|
191
|
+
'end'])
|
|
192
|
+
expect(cop.offences.size).to eq(1)
|
|
193
|
+
expect(cop.messages)
|
|
194
|
+
.to eq(['Always use `raise` to signal exceptions.'])
|
|
195
|
+
end
|
|
196
|
+
|
|
197
|
+
it 'auto-corrects fail to raise always' do
|
|
198
|
+
new_source = autocorrect_source(cop,
|
|
199
|
+
['begin',
|
|
200
|
+
' fail',
|
|
201
|
+
'rescue Exception',
|
|
202
|
+
' fail',
|
|
203
|
+
'end'])
|
|
204
|
+
expect(new_source).to eq(['begin',
|
|
205
|
+
' raise',
|
|
206
|
+
'rescue Exception',
|
|
207
|
+
' raise',
|
|
208
|
+
'end'].join("\n"))
|
|
209
|
+
end
|
|
210
|
+
|
|
211
|
+
end
|
|
212
|
+
|
|
213
|
+
context 'when enforced style is `fail`' do
|
|
214
|
+
let(:cop_config) { { 'EnforcedStyle' => 'only_fail' } }
|
|
215
|
+
|
|
216
|
+
it 'registers an offence for raise in begin section' do
|
|
217
|
+
inspect_source(cop,
|
|
218
|
+
['begin',
|
|
219
|
+
' raise',
|
|
220
|
+
'rescue Exception',
|
|
221
|
+
' #do nothing',
|
|
222
|
+
'end'])
|
|
223
|
+
expect(cop.offences.size).to eq(1)
|
|
224
|
+
expect(cop.messages)
|
|
225
|
+
.to eq(['Always use `fail` to signal exceptions.'])
|
|
226
|
+
end
|
|
227
|
+
|
|
228
|
+
it 'registers an offence for raise in def body' do
|
|
229
|
+
inspect_source(cop,
|
|
230
|
+
['def test',
|
|
231
|
+
' raise',
|
|
232
|
+
'rescue Exception',
|
|
233
|
+
' #do nothing',
|
|
234
|
+
'end'])
|
|
235
|
+
expect(cop.offences.size).to eq(1)
|
|
236
|
+
expect(cop.messages)
|
|
237
|
+
.to eq(['Always use `fail` to signal exceptions.'])
|
|
238
|
+
end
|
|
239
|
+
|
|
240
|
+
it 'registers an offence for raise in rescue section' do
|
|
241
|
+
inspect_source(cop,
|
|
242
|
+
['begin',
|
|
243
|
+
' fail',
|
|
244
|
+
'rescue Exception',
|
|
245
|
+
' raise',
|
|
246
|
+
'end'])
|
|
247
|
+
expect(cop.offences.size).to eq(1)
|
|
248
|
+
expect(cop.messages)
|
|
249
|
+
.to eq(['Always use `fail` to signal exceptions.'])
|
|
250
|
+
end
|
|
251
|
+
|
|
252
|
+
it 'auto-corrects raise to fail always' do
|
|
253
|
+
new_source = autocorrect_source(cop,
|
|
254
|
+
['begin',
|
|
255
|
+
' raise',
|
|
256
|
+
'rescue Exception',
|
|
257
|
+
' raise',
|
|
258
|
+
'end'])
|
|
259
|
+
expect(new_source).to eq(['begin',
|
|
260
|
+
' fail',
|
|
261
|
+
'rescue Exception',
|
|
262
|
+
' fail',
|
|
263
|
+
'end'].join("\n"))
|
|
264
|
+
end
|
|
265
|
+
end
|
|
266
|
+
end
|