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,65 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
|
|
3
|
+
require 'spec_helper'
|
|
4
|
+
|
|
5
|
+
describe Rubocop::Cop::Style::ConstantName do
|
|
6
|
+
subject(:cop) { described_class.new }
|
|
7
|
+
|
|
8
|
+
it 'registers an offence for camel case in const name' do
|
|
9
|
+
inspect_source(cop,
|
|
10
|
+
['TopCase = 5'])
|
|
11
|
+
expect(cop.offences.size).to eq(1)
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
it 'registers offences for camel case in multiple const assignment' do
|
|
15
|
+
inspect_source(cop,
|
|
16
|
+
['TopCase, Test2, TEST_3 = 5, 6, 7'])
|
|
17
|
+
expect(cop.offences.size).to eq(2)
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
it 'registers an offence for snake case in const name' do
|
|
21
|
+
inspect_source(cop,
|
|
22
|
+
['TOP_test = 5'])
|
|
23
|
+
expect(cop.offences.size).to eq(1)
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
it 'allows screaming snake case in const name' do
|
|
27
|
+
inspect_source(cop,
|
|
28
|
+
['TOP_TEST = 5'])
|
|
29
|
+
expect(cop.offences).to be_empty
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
it 'allows screaming snake case in multiple const assignment' do
|
|
33
|
+
inspect_source(cop,
|
|
34
|
+
['TOP_TEST, TEST_2 = 5, 6'])
|
|
35
|
+
expect(cop.offences).to be_empty
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
it 'does not check names if rhs is a method call' do
|
|
39
|
+
inspect_source(cop,
|
|
40
|
+
['AnythingGoes = test'])
|
|
41
|
+
expect(cop.offences).to be_empty
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
it 'does not check names if rhs is a method call with block' do
|
|
45
|
+
inspect_source(cop,
|
|
46
|
+
['AnythingGoes = test do',
|
|
47
|
+
' do_something',
|
|
48
|
+
'end'
|
|
49
|
+
])
|
|
50
|
+
expect(cop.offences).to be_empty
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
it 'does not check if rhs is another constant' do
|
|
54
|
+
inspect_source(cop,
|
|
55
|
+
['Parser::CurrentRuby = Parser::Ruby20'])
|
|
56
|
+
expect(cop.offences).to be_empty
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
it 'checks qualified const names' do
|
|
60
|
+
inspect_source(cop,
|
|
61
|
+
['::AnythingGoes = 30',
|
|
62
|
+
'a::Bar_foo = 10'])
|
|
63
|
+
expect(cop.offences.size).to eq(2)
|
|
64
|
+
end
|
|
65
|
+
end
|
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
|
|
3
|
+
require 'spec_helper'
|
|
4
|
+
|
|
5
|
+
describe Rubocop::Cop::Style::CyclomaticComplexity, :config do
|
|
6
|
+
subject(:cop) { described_class.new(config) }
|
|
7
|
+
|
|
8
|
+
context 'when Max is 1' do
|
|
9
|
+
let(:cop_config) { { 'Max' => 1 } }
|
|
10
|
+
|
|
11
|
+
it 'accepts a method with no decision points' do
|
|
12
|
+
inspect_source(cop, ['def method_name',
|
|
13
|
+
' call_foo',
|
|
14
|
+
'end'])
|
|
15
|
+
expect(cop.offences).to be_empty
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
it 'accepts complex code outside of methods' do
|
|
19
|
+
inspect_source(cop,
|
|
20
|
+
['def method_name',
|
|
21
|
+
' call_foo',
|
|
22
|
+
'end',
|
|
23
|
+
'',
|
|
24
|
+
'if first_condition then',
|
|
25
|
+
' call_foo if second_condition && third_condition',
|
|
26
|
+
' call_bar if fourth_condition || fifth_condition',
|
|
27
|
+
'end'])
|
|
28
|
+
expect(cop.offences).to be_empty
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
it 'registers an offence for an if modifier' do
|
|
32
|
+
inspect_source(cop, ['def self.method_name',
|
|
33
|
+
' call_foo if some_condition',
|
|
34
|
+
'end'])
|
|
35
|
+
expect(cop.messages)
|
|
36
|
+
.to eq(['Cyclomatic complexity for method_name is too high. [2/1]'])
|
|
37
|
+
expect(cop.highlights).to eq(['def'])
|
|
38
|
+
expect(cop.config_to_allow_offences).to eq('Max' => 2)
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
it 'registers an offence for an unless modifier' do
|
|
42
|
+
inspect_source(cop, ['def method_name',
|
|
43
|
+
' call_foo unless some_condition',
|
|
44
|
+
'end'])
|
|
45
|
+
expect(cop.messages)
|
|
46
|
+
.to eq(['Cyclomatic complexity for method_name is too high. [2/1]'])
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
it 'registers an offence for an elsif block' do
|
|
50
|
+
inspect_source(cop, ['def method_name',
|
|
51
|
+
' if first_condition then',
|
|
52
|
+
' call_foo',
|
|
53
|
+
' elsif second_condition then',
|
|
54
|
+
' call_bar',
|
|
55
|
+
' else',
|
|
56
|
+
' call_bam',
|
|
57
|
+
' end',
|
|
58
|
+
'end'])
|
|
59
|
+
expect(cop.messages)
|
|
60
|
+
.to eq(['Cyclomatic complexity for method_name is too high. [3/1]'])
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
it 'registers an offence for a ternary operator' do
|
|
64
|
+
inspect_source(cop, ['def method_name',
|
|
65
|
+
' value = some_condition ? 1 : 2',
|
|
66
|
+
'end'])
|
|
67
|
+
expect(cop.messages)
|
|
68
|
+
.to eq(['Cyclomatic complexity for method_name is too high. [2/1]'])
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
it 'registers an offence for a while block' do
|
|
72
|
+
inspect_source(cop, ['def method_name',
|
|
73
|
+
' while some_condition do',
|
|
74
|
+
' call_foo',
|
|
75
|
+
' end',
|
|
76
|
+
'end'])
|
|
77
|
+
expect(cop.messages)
|
|
78
|
+
.to eq(['Cyclomatic complexity for method_name is too high. [2/1]'])
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
it 'registers an offence for an until block' do
|
|
82
|
+
inspect_source(cop, ['def method_name',
|
|
83
|
+
' until some_condition do',
|
|
84
|
+
' call_foo',
|
|
85
|
+
' end',
|
|
86
|
+
'end'])
|
|
87
|
+
expect(cop.messages)
|
|
88
|
+
.to eq(['Cyclomatic complexity for method_name is too high. [2/1]'])
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
it 'registers an offence for a for block' do
|
|
92
|
+
inspect_source(cop, ['def method_name',
|
|
93
|
+
' for i in 1..2 do',
|
|
94
|
+
' call_method',
|
|
95
|
+
' end',
|
|
96
|
+
'end'])
|
|
97
|
+
expect(cop.messages)
|
|
98
|
+
.to eq(['Cyclomatic complexity for method_name is too high. [2/1]'])
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
it 'registers an offence for a rescue block' do
|
|
102
|
+
inspect_source(cop, ['def method_name',
|
|
103
|
+
' begin',
|
|
104
|
+
' call_foo',
|
|
105
|
+
' rescue Exception',
|
|
106
|
+
' call_bar',
|
|
107
|
+
' end',
|
|
108
|
+
'end'])
|
|
109
|
+
expect(cop.messages)
|
|
110
|
+
.to eq(['Cyclomatic complexity for method_name is too high. [2/1]'])
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
it 'registers an offence for a case/when block' do
|
|
114
|
+
inspect_source(cop, ['def method_name',
|
|
115
|
+
' case value',
|
|
116
|
+
' when 1',
|
|
117
|
+
' call_foo',
|
|
118
|
+
' when 2',
|
|
119
|
+
' call_bar',
|
|
120
|
+
' end',
|
|
121
|
+
'end'])
|
|
122
|
+
expect(cop.messages)
|
|
123
|
+
.to eq(['Cyclomatic complexity for method_name is too high. [3/1]'])
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
it 'registers an offence for &&' do
|
|
127
|
+
inspect_source(cop, ['def method_name',
|
|
128
|
+
' call_foo && call_bar',
|
|
129
|
+
'end'])
|
|
130
|
+
expect(cop.messages)
|
|
131
|
+
.to eq(['Cyclomatic complexity for method_name is too high. [2/1]'])
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
it 'registers an offence for and' do
|
|
135
|
+
inspect_source(cop, ['def method_name',
|
|
136
|
+
' call_foo and call_bar',
|
|
137
|
+
'end'])
|
|
138
|
+
expect(cop.messages)
|
|
139
|
+
.to eq(['Cyclomatic complexity for method_name is too high. [2/1]'])
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
it 'registers an offence for ||' do
|
|
143
|
+
inspect_source(cop, ['def method_name',
|
|
144
|
+
' call_foo || call_bar',
|
|
145
|
+
'end'])
|
|
146
|
+
expect(cop.messages)
|
|
147
|
+
.to eq(['Cyclomatic complexity for method_name is too high. [2/1]'])
|
|
148
|
+
end
|
|
149
|
+
|
|
150
|
+
it 'registers an offence for or' do
|
|
151
|
+
inspect_source(cop, ['def method_name',
|
|
152
|
+
' call_foo or call_bar',
|
|
153
|
+
'end'])
|
|
154
|
+
expect(cop.messages)
|
|
155
|
+
.to eq(['Cyclomatic complexity for method_name is too high. [2/1]'])
|
|
156
|
+
end
|
|
157
|
+
|
|
158
|
+
it 'deals with nested if blocks containing && and ||' do
|
|
159
|
+
inspect_source(cop,
|
|
160
|
+
['def method_name',
|
|
161
|
+
' if first_condition then',
|
|
162
|
+
' call_foo if second_condition && third_condition',
|
|
163
|
+
' call_bar if fourth_condition || fifth_condition',
|
|
164
|
+
' end',
|
|
165
|
+
'end'])
|
|
166
|
+
expect(cop.messages)
|
|
167
|
+
.to eq(['Cyclomatic complexity for method_name is too high. [6/1]'])
|
|
168
|
+
end
|
|
169
|
+
|
|
170
|
+
it 'counts only a single method' do
|
|
171
|
+
inspect_source(cop, ['def method_name_1',
|
|
172
|
+
' call_foo if some_condition',
|
|
173
|
+
'end',
|
|
174
|
+
'',
|
|
175
|
+
'def method_name_2',
|
|
176
|
+
' call_foo if some_condition',
|
|
177
|
+
'end'])
|
|
178
|
+
expect(cop.messages)
|
|
179
|
+
.to eq(['Cyclomatic complexity for method_name_1 is too high. [2/1]',
|
|
180
|
+
'Cyclomatic complexity for method_name_2 is too high. [2/1]'])
|
|
181
|
+
end
|
|
182
|
+
end
|
|
183
|
+
|
|
184
|
+
context 'when Max is 2' do
|
|
185
|
+
let(:cop_config) { { 'Max' => 2 } }
|
|
186
|
+
|
|
187
|
+
it 'counts stupid nested if and else blocks' do
|
|
188
|
+
inspect_source(cop, ['def method_name',
|
|
189
|
+
' if first_condition then',
|
|
190
|
+
' call_foo',
|
|
191
|
+
' else',
|
|
192
|
+
' if second_condition then',
|
|
193
|
+
' call_bar',
|
|
194
|
+
' else',
|
|
195
|
+
' call_bam if third_condition',
|
|
196
|
+
' end',
|
|
197
|
+
' call_baz if fourth_condition',
|
|
198
|
+
' end',
|
|
199
|
+
'end'])
|
|
200
|
+
expect(cop.messages)
|
|
201
|
+
.to eq(['Cyclomatic complexity for method_name is too high. [5/2]'])
|
|
202
|
+
end
|
|
203
|
+
end
|
|
204
|
+
end
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
|
|
3
|
+
require 'spec_helper'
|
|
4
|
+
|
|
5
|
+
describe Rubocop::Cop::Style::DefWithParentheses do
|
|
6
|
+
subject(:cop) { described_class.new }
|
|
7
|
+
|
|
8
|
+
it 'reports an offence for def with empty parens' do
|
|
9
|
+
src = ['def func()',
|
|
10
|
+
'end']
|
|
11
|
+
inspect_source(cop, src)
|
|
12
|
+
expect(cop.offences.size).to eq(1)
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
it 'reports an offence for class def with empty parens' do
|
|
16
|
+
src = ['def Test.func()',
|
|
17
|
+
'end']
|
|
18
|
+
inspect_source(cop, src)
|
|
19
|
+
expect(cop.offences.size).to eq(1)
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
it 'accepts def with arg and parens' do
|
|
23
|
+
src = ['def func(a)',
|
|
24
|
+
'end']
|
|
25
|
+
inspect_source(cop, src)
|
|
26
|
+
expect(cop.offences).to be_empty
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
it 'accepts empty parentheses in one liners' do
|
|
30
|
+
src = ["def to_s() join '/' end"]
|
|
31
|
+
inspect_source(cop, src)
|
|
32
|
+
expect(cop.offences).to be_empty
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
it 'auto-removes unneeded parens' do
|
|
36
|
+
new_source = autocorrect_source(cop, "def test();\nsomething\nend")
|
|
37
|
+
expect(new_source).to eq("def test;\nsomething\nend")
|
|
38
|
+
end
|
|
39
|
+
end
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
|
|
3
|
+
require 'spec_helper'
|
|
4
|
+
|
|
5
|
+
describe Rubocop::Cop::Style::Documentation do
|
|
6
|
+
|
|
7
|
+
subject(:cop) { described_class.new(config) }
|
|
8
|
+
let(:config) do
|
|
9
|
+
Rubocop::Config.new('CommentAnnotation' => {
|
|
10
|
+
'Keywords' => %w(TODO FIXME OPTIMIZE HACK REVIEW)
|
|
11
|
+
})
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
it 'registers an offence for non-empty class' do
|
|
15
|
+
inspect_source(cop,
|
|
16
|
+
['class My_Class',
|
|
17
|
+
' TEST = 20',
|
|
18
|
+
'end'
|
|
19
|
+
])
|
|
20
|
+
expect(cop.offences.size).to eq(1)
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
it 'does not consider comment followed by empty line to be class ' \
|
|
24
|
+
'documentation' do
|
|
25
|
+
inspect_source(cop,
|
|
26
|
+
['# Copyright 2014',
|
|
27
|
+
'# Some company',
|
|
28
|
+
'',
|
|
29
|
+
'class My_Class',
|
|
30
|
+
' TEST = 20',
|
|
31
|
+
'end'
|
|
32
|
+
])
|
|
33
|
+
expect(cop.offences.size).to eq(1)
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
it 'registers an offence for non-namespace' do
|
|
37
|
+
inspect_source(cop,
|
|
38
|
+
['module My_Class',
|
|
39
|
+
' TEST = 20',
|
|
40
|
+
'end'
|
|
41
|
+
])
|
|
42
|
+
expect(cop.offences.size).to eq(1)
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
it 'registers an offence for empty module without documentation' do
|
|
46
|
+
# Because why would you have an empty module? It requires some
|
|
47
|
+
# explanation.
|
|
48
|
+
inspect_source(cop,
|
|
49
|
+
['module Test',
|
|
50
|
+
'end'
|
|
51
|
+
])
|
|
52
|
+
expect(cop.offences.size).to eq(1)
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
it 'accepts non-empty class with documentation' do
|
|
56
|
+
inspect_source(cop,
|
|
57
|
+
['# class comment',
|
|
58
|
+
'class My_Class',
|
|
59
|
+
' TEST = 20',
|
|
60
|
+
'end'
|
|
61
|
+
])
|
|
62
|
+
expect(cop.offences).to be_empty
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
it 'registers an offence for non-empty class with annotation comment' do
|
|
66
|
+
inspect_source(cop,
|
|
67
|
+
['# OPTIMIZE: Make this faster.',
|
|
68
|
+
'class My_Class',
|
|
69
|
+
' TEST = 20',
|
|
70
|
+
'end'
|
|
71
|
+
])
|
|
72
|
+
expect(cop.offences.size).to eq(1)
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
it 'accepts non-empty module with documentation' do
|
|
76
|
+
inspect_source(cop,
|
|
77
|
+
['# class comment',
|
|
78
|
+
'module My_Class',
|
|
79
|
+
' TEST = 20',
|
|
80
|
+
'end'
|
|
81
|
+
])
|
|
82
|
+
expect(cop.offences).to be_empty
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
it 'accepts empty class without documentation' do
|
|
86
|
+
inspect_source(cop,
|
|
87
|
+
['class My_Class',
|
|
88
|
+
'end'
|
|
89
|
+
])
|
|
90
|
+
expect(cop.offences).to be_empty
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
it 'accepts namespace module without documentation' do
|
|
94
|
+
inspect_source(cop,
|
|
95
|
+
['module Test',
|
|
96
|
+
' class A; end',
|
|
97
|
+
' class B; end',
|
|
98
|
+
'end'
|
|
99
|
+
])
|
|
100
|
+
expect(cop.offences).to be_empty
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
it 'accepts namespace class without documentation' do
|
|
104
|
+
inspect_source(cop,
|
|
105
|
+
['class Test',
|
|
106
|
+
' class A; end',
|
|
107
|
+
' class B; end',
|
|
108
|
+
'end'
|
|
109
|
+
])
|
|
110
|
+
expect(cop.offences).to be_empty
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
it 'does not raise an error for an implicit match conditional' do
|
|
114
|
+
expect do
|
|
115
|
+
inspect_source(cop,
|
|
116
|
+
['class Test',
|
|
117
|
+
' if //',
|
|
118
|
+
' end',
|
|
119
|
+
'end'
|
|
120
|
+
])
|
|
121
|
+
end.to_not raise_error
|
|
122
|
+
end
|
|
123
|
+
end
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
|
|
3
|
+
require 'spec_helper'
|
|
4
|
+
|
|
5
|
+
describe Rubocop::Cop::Style::DotPosition, :config do
|
|
6
|
+
subject(:cop) { described_class.new(config) }
|
|
7
|
+
|
|
8
|
+
context 'Leading dots style' do
|
|
9
|
+
let(:cop_config) { { 'Style' => 'leading' } }
|
|
10
|
+
|
|
11
|
+
it 'registers an offence for trailing dot in multi-line call' do
|
|
12
|
+
inspect_source(cop, ['something.',
|
|
13
|
+
' method_name'])
|
|
14
|
+
expect(cop.offences.size).to eq(1)
|
|
15
|
+
expect(cop.highlights).to eq(['.'])
|
|
16
|
+
expect(cop.config_to_allow_offences).to eq('Style' => 'trailing')
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
it 'registers an offence for correct + opposite' do
|
|
20
|
+
inspect_source(cop, ['something',
|
|
21
|
+
' .method_name',
|
|
22
|
+
'something.',
|
|
23
|
+
' method_name'])
|
|
24
|
+
expect(cop.offences.size).to eq(1)
|
|
25
|
+
expect(cop.config_to_allow_offences).to eq('Enabled' => false)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
it 'accepts leading do in multi-line method call' do
|
|
29
|
+
inspect_source(cop, ['something',
|
|
30
|
+
' .method_name'])
|
|
31
|
+
expect(cop.offences).to be_empty
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
it 'does not err on method call with no dots' do
|
|
35
|
+
inspect_source(cop, ['puts something'])
|
|
36
|
+
expect(cop.offences).to be_empty
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
it 'does not err on method call without a method name' do
|
|
40
|
+
inspect_source(cop, ['l.', '(1)'])
|
|
41
|
+
expect(cop.offences.size).to eq(1)
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
it 'does not err on method call on same line' do
|
|
45
|
+
inspect_source(cop, ['something.method_name'])
|
|
46
|
+
expect(cop.offences).to be_empty
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
context 'Trailing dots style' do
|
|
51
|
+
let(:cop_config) { { 'Style' => 'trailing' } }
|
|
52
|
+
|
|
53
|
+
it 'registers an offence for leading dot in multi-line call' do
|
|
54
|
+
inspect_source(cop, ['something',
|
|
55
|
+
' .method_name'])
|
|
56
|
+
expect(cop.messages)
|
|
57
|
+
.to eq(['Place the . on the previous line, together with the method ' \
|
|
58
|
+
'call receiver.'])
|
|
59
|
+
expect(cop.highlights).to eq(['.'])
|
|
60
|
+
expect(cop.config_to_allow_offences).to eq('Style' => 'leading')
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
it 'accepts trailing dot in multi-line method call' do
|
|
64
|
+
inspect_source(cop, ['something.',
|
|
65
|
+
' method_name'])
|
|
66
|
+
expect(cop.offences).to be_empty
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
it 'does not err on method call with no dots' do
|
|
70
|
+
inspect_source(cop, ['puts something'])
|
|
71
|
+
expect(cop.offences).to be_empty
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
it 'does not err on method call without a method name' do
|
|
75
|
+
inspect_source(cop, ['l', '.(1)'])
|
|
76
|
+
expect(cop.offences.size).to eq(1)
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
it 'does not err on method call on same line' do
|
|
80
|
+
inspect_source(cop, ['something.method_name'])
|
|
81
|
+
expect(cop.offences).to be_empty
|
|
82
|
+
end
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
context 'Unknown style' do
|
|
86
|
+
let(:cop_config) { { 'Style' => 'test' } }
|
|
87
|
+
|
|
88
|
+
it 'raises an exception' do
|
|
89
|
+
expect do
|
|
90
|
+
inspect_source(cop, ['something.top'])
|
|
91
|
+
end.to raise_error(RuntimeError)
|
|
92
|
+
end
|
|
93
|
+
end
|
|
94
|
+
end
|