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,105 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
|
|
3
|
+
require 'spec_helper'
|
|
4
|
+
|
|
5
|
+
describe Rubocop::Cop::Style::For, :config do
|
|
6
|
+
subject(:cop) { described_class.new(config) }
|
|
7
|
+
|
|
8
|
+
context 'when each is the enforced style' do
|
|
9
|
+
let(:cop_config) { { 'EnforcedStyle' => 'each' } }
|
|
10
|
+
|
|
11
|
+
it 'registers an offence for for' do
|
|
12
|
+
inspect_source(cop,
|
|
13
|
+
['def func',
|
|
14
|
+
' for n in [1, 2, 3] do',
|
|
15
|
+
' puts n',
|
|
16
|
+
' end',
|
|
17
|
+
'end'])
|
|
18
|
+
expect(cop.messages).to eq(['Prefer *each* over *for*.'])
|
|
19
|
+
expect(cop.highlights).to eq(['for'])
|
|
20
|
+
expect(cop.config_to_allow_offences).to eq('EnforcedStyle' => 'for')
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
it 'registers an offence for opposite + correct style' do
|
|
24
|
+
inspect_source(cop,
|
|
25
|
+
['def func',
|
|
26
|
+
' for n in [1, 2, 3] do',
|
|
27
|
+
' puts n',
|
|
28
|
+
' end',
|
|
29
|
+
' [1, 2, 3].each do |n|',
|
|
30
|
+
' puts n',
|
|
31
|
+
' end',
|
|
32
|
+
'end'])
|
|
33
|
+
expect(cop.messages).to eq(['Prefer *each* over *for*.'])
|
|
34
|
+
expect(cop.config_to_allow_offences).to eq('Enabled' => false)
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
it 'accepts multiline each' do
|
|
38
|
+
inspect_source(cop,
|
|
39
|
+
['def func',
|
|
40
|
+
' [1, 2, 3].each do |n|',
|
|
41
|
+
' puts n',
|
|
42
|
+
' end',
|
|
43
|
+
'end'])
|
|
44
|
+
expect(cop.offences).to be_empty
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
it 'accepts :for' do
|
|
48
|
+
inspect_source(cop, ['[:for, :ala, :bala]'])
|
|
49
|
+
expect(cop.offences).to be_empty
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
it 'accepts def for' do
|
|
53
|
+
inspect_source(cop, ['def for; end'])
|
|
54
|
+
expect(cop.offences).to be_empty
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
context 'when for is the enforced style' do
|
|
59
|
+
let(:cop_config) { { 'EnforcedStyle' => 'for' } }
|
|
60
|
+
|
|
61
|
+
it 'accepts for' do
|
|
62
|
+
inspect_source(cop,
|
|
63
|
+
['def func',
|
|
64
|
+
' for n in [1, 2, 3] do',
|
|
65
|
+
' puts n',
|
|
66
|
+
' end',
|
|
67
|
+
'end'])
|
|
68
|
+
expect(cop.offences).to be_empty
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
it 'registers an offence for multiline each' do
|
|
72
|
+
inspect_source(cop,
|
|
73
|
+
['def func',
|
|
74
|
+
' [1, 2, 3].each do |n|',
|
|
75
|
+
' puts n',
|
|
76
|
+
' end',
|
|
77
|
+
'end'])
|
|
78
|
+
expect(cop.messages).to eq(['Prefer *for* over *each*.'])
|
|
79
|
+
expect(cop.highlights).to eq(['each'])
|
|
80
|
+
expect(cop.config_to_allow_offences).to eq('EnforcedStyle' => 'each')
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
it 'registers an offence for correct + opposite style' do
|
|
84
|
+
inspect_source(cop,
|
|
85
|
+
['def func',
|
|
86
|
+
' for n in [1, 2, 3] do',
|
|
87
|
+
' puts n',
|
|
88
|
+
' end',
|
|
89
|
+
' [1, 2, 3].each do |n|',
|
|
90
|
+
' puts n',
|
|
91
|
+
' end',
|
|
92
|
+
'end'])
|
|
93
|
+
expect(cop.messages).to eq(['Prefer *for* over *each*.'])
|
|
94
|
+
expect(cop.config_to_allow_offences).to eq('Enabled' => false)
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
it 'accepts single line each' do
|
|
98
|
+
inspect_source(cop,
|
|
99
|
+
['def func',
|
|
100
|
+
' [1, 2, 3].each { |n| puts n }',
|
|
101
|
+
'end'])
|
|
102
|
+
expect(cop.offences).to be_empty
|
|
103
|
+
end
|
|
104
|
+
end
|
|
105
|
+
end
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
|
|
3
|
+
require 'spec_helper'
|
|
4
|
+
|
|
5
|
+
describe Rubocop::Cop::Style::GlobalVars, :config do
|
|
6
|
+
cop_config = {
|
|
7
|
+
'AllowedVariables' => ['$allowed']
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
subject(:cop) { described_class.new(config) }
|
|
11
|
+
let(:cop_config) { cop_config }
|
|
12
|
+
|
|
13
|
+
it 'registers an offence for $custom' do
|
|
14
|
+
inspect_source(cop, ['puts $custom'])
|
|
15
|
+
expect(cop.offences.size).to eq(1)
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
it 'allows user whitelisted variables' do
|
|
19
|
+
inspect_source(cop, ['puts $allowed'])
|
|
20
|
+
expect(cop.offences).to be_empty
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
described_class::BUILT_IN_VARS.each do |var|
|
|
24
|
+
it "does not register an offence for built-in variable #{var}" do
|
|
25
|
+
inspect_source(cop, ["puts #{var}"])
|
|
26
|
+
expect(cop.offences).to be_empty
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
it 'does not register an offence for backrefs like $1' do
|
|
31
|
+
inspect_source(cop, ['puts $1'])
|
|
32
|
+
expect(cop.offences).to be_empty
|
|
33
|
+
end
|
|
34
|
+
end
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
|
|
3
|
+
require 'spec_helper'
|
|
4
|
+
|
|
5
|
+
describe Rubocop::Cop::Style::HashMethods do
|
|
6
|
+
subject(:cop) { described_class.new }
|
|
7
|
+
|
|
8
|
+
it 'registers an offence for has_key? with one arg' do
|
|
9
|
+
inspect_source(cop,
|
|
10
|
+
['o.has_key?(o)'])
|
|
11
|
+
expect(cop.offences.size).to eq(1)
|
|
12
|
+
expect(cop.messages)
|
|
13
|
+
.to eq(['has_key? is deprecated in favor of key?.'])
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
it 'accepts has_key? with no args' do
|
|
17
|
+
inspect_source(cop,
|
|
18
|
+
['o.has_key?'])
|
|
19
|
+
expect(cop.offences).to be_empty
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
it 'registers an offence for has_value? with one arg' do
|
|
23
|
+
inspect_source(cop,
|
|
24
|
+
['o.has_value?(o)'])
|
|
25
|
+
expect(cop.offences.size).to eq(1)
|
|
26
|
+
expect(cop.messages)
|
|
27
|
+
.to eq(['has_value? is deprecated in favor of value?.'])
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
it 'accepts has_value? with no args' do
|
|
31
|
+
inspect_source(cop,
|
|
32
|
+
['o.has_value?'])
|
|
33
|
+
expect(cop.offences).to be_empty
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
it 'auto-corrects has_key? with key?' do
|
|
37
|
+
new_source = autocorrect_source(cop, 'hash.has_key?(:test)')
|
|
38
|
+
expect(new_source).to eq('hash.key?(:test)')
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
it 'auto-corrects has_value? with value?' do
|
|
42
|
+
new_source = autocorrect_source(cop, 'hash.has_value?(value)')
|
|
43
|
+
expect(new_source).to eq('hash.value?(value)')
|
|
44
|
+
end
|
|
45
|
+
end
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
|
|
3
|
+
require 'spec_helper'
|
|
4
|
+
|
|
5
|
+
describe Rubocop::Cop::Style::HashSyntax, :config do
|
|
6
|
+
subject(:cop) { described_class.new(config) }
|
|
7
|
+
|
|
8
|
+
context 'configured to enforce ruby19 style' do
|
|
9
|
+
let(:config) do
|
|
10
|
+
Rubocop::Config.new('HashSyntax' => {
|
|
11
|
+
'EnforcedStyle' => 'ruby19',
|
|
12
|
+
'SupportedStyles' => %w(ruby19 hash_rockets)
|
|
13
|
+
},
|
|
14
|
+
'SpaceAroundOperators' => { 'Enabled' => true })
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
it 'registers offence for hash rocket syntax when new is possible' do
|
|
18
|
+
inspect_source(cop, ['x = { :a => 0 }'])
|
|
19
|
+
expect(cop.messages).to eq(['Use the new Ruby 1.9 hash syntax.'])
|
|
20
|
+
expect(cop.config_to_allow_offences)
|
|
21
|
+
.to eq('EnforcedStyle' => 'hash_rockets')
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
it 'registers an offence for mixed syntax when new is possible' do
|
|
25
|
+
inspect_source(cop, ['x = { :a => 0, b: 1 }'])
|
|
26
|
+
expect(cop.messages).to eq(['Use the new Ruby 1.9 hash syntax.'])
|
|
27
|
+
expect(cop.config_to_allow_offences).to eq('Enabled' => false)
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
it 'registers an offence for hash rockets in method calls' do
|
|
31
|
+
inspect_source(cop, ['func(3, :a => 0)'])
|
|
32
|
+
expect(cop.messages).to eq(['Use the new Ruby 1.9 hash syntax.'])
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
it 'accepts hash rockets when keys have different types' do
|
|
36
|
+
inspect_source(cop, ['x = { :a => 0, "b" => 1 }'])
|
|
37
|
+
expect(cop.messages).to be_empty
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
it 'accepts hash rockets when keys have whitespaces in them' do
|
|
41
|
+
inspect_source(cop, ['x = { :"t o" => 0 }'])
|
|
42
|
+
expect(cop.messages).to be_empty
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
it 'accepts hash rockets when keys have special symbols in them' do
|
|
46
|
+
inspect_source(cop, ['x = { :"\tab" => 1 }'])
|
|
47
|
+
expect(cop.messages).to be_empty
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
it 'accepts hash rockets when keys start with a digit' do
|
|
51
|
+
inspect_source(cop, ['x = { :"1" => 1 }'])
|
|
52
|
+
expect(cop.messages).to be_empty
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
it 'registers offence when keys start with an uppercase letter' do
|
|
56
|
+
inspect_source(cop, ['x = { :A => 0 }'])
|
|
57
|
+
expect(cop.messages).to eq(['Use the new Ruby 1.9 hash syntax.'])
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
it 'accepts new syntax in a hash literal' do
|
|
61
|
+
inspect_source(cop, ['x = { a: 0, b: 1 }'])
|
|
62
|
+
expect(cop.messages).to be_empty
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
it 'accepts new syntax in method calls' do
|
|
66
|
+
inspect_source(cop, ['func(3, a: 0)'])
|
|
67
|
+
expect(cop.messages).to be_empty
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
it 'auto-corrects old to new style' do
|
|
71
|
+
new_source = autocorrect_source(cop, '{ :a => 1, :b => 2}')
|
|
72
|
+
expect(new_source).to eq('{ a: 1, b: 2}')
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
it 'does not auto-correct if it interferes with SpaceAroundOperators' do
|
|
76
|
+
new_source = autocorrect_source(cop, '{ :a=>1, :b=>2 }')
|
|
77
|
+
expect(new_source).to eq('{ :a=>1, :b=>2 }')
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
context 'with SpaceAroundOperators disabled' do
|
|
81
|
+
let(:config) do
|
|
82
|
+
Rubocop::Config.new('HashSyntax' => {
|
|
83
|
+
'EnforcedStyle' => 'ruby19',
|
|
84
|
+
'SupportedStyles' => %w(ruby19 hash_rockets)
|
|
85
|
+
},
|
|
86
|
+
'SpaceAroundOperators' => { 'Enabled' => false })
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
it 'auto-corrects even if there is no space around =>' do
|
|
90
|
+
new_source = autocorrect_source(cop, '{ :a=>1, :b=>2 }')
|
|
91
|
+
expect(new_source).to eq('{ a: 1, b: 2 }')
|
|
92
|
+
end
|
|
93
|
+
end
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
context 'configured to enforce hash rockets style' do
|
|
97
|
+
let(:cop_config) { { 'EnforcedStyle' => 'hash_rockets' } }
|
|
98
|
+
|
|
99
|
+
it 'registers offence for Ruby 1.9 style' do
|
|
100
|
+
inspect_source(cop, ['x = { a: 0 }'])
|
|
101
|
+
expect(cop.messages).to eq(['Always use hash rockets in hashes.'])
|
|
102
|
+
expect(cop.config_to_allow_offences).to eq('EnforcedStyle' => 'ruby19')
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
it 'registers an offence for mixed syntax' do
|
|
106
|
+
inspect_source(cop, ['x = { :a => 0, b: 1 }'])
|
|
107
|
+
expect(cop.messages).to eq(['Always use hash rockets in hashes.'])
|
|
108
|
+
expect(cop.config_to_allow_offences).to eq('Enabled' => false)
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
it 'registers an offence for 1.9 style in method calls' do
|
|
112
|
+
inspect_source(cop, ['func(3, a: 0)'])
|
|
113
|
+
expect(cop.messages).to eq(['Always use hash rockets in hashes.'])
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
it 'accepts hash rockets in a hash literal' do
|
|
117
|
+
inspect_source(cop, ['x = { :a => 0, :b => 1 }'])
|
|
118
|
+
expect(cop.messages).to be_empty
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
it 'accepts hash rockets in method calls' do
|
|
122
|
+
inspect_source(cop, ['func(3, :a => 0)'])
|
|
123
|
+
expect(cop.messages).to be_empty
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
it 'auto-corrects new style to hash rockets' do
|
|
127
|
+
new_source = autocorrect_source(cop, '{ a: 1, b: 2}')
|
|
128
|
+
expect(new_source).to eq('{ :a => 1, :b => 2}')
|
|
129
|
+
end
|
|
130
|
+
end
|
|
131
|
+
end
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
|
|
3
|
+
require 'spec_helper'
|
|
4
|
+
|
|
5
|
+
describe Rubocop::Cop::Style::IfUnlessModifier do
|
|
6
|
+
include StatementModifierHelper
|
|
7
|
+
|
|
8
|
+
subject(:cop) { described_class.new(config) }
|
|
9
|
+
let(:config) do
|
|
10
|
+
hash = { 'LineLength' => { 'Max' => 79 } }
|
|
11
|
+
Rubocop::Config.new(hash)
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
it 'registers an offence for multiline if that fits on one line' do
|
|
15
|
+
# This if statement fits exactly on one line if written as a
|
|
16
|
+
# modifier.
|
|
17
|
+
condition = 'a' * 38
|
|
18
|
+
body = 'b' * 35
|
|
19
|
+
expect(" #{body} if #{condition}".length).to eq(79)
|
|
20
|
+
|
|
21
|
+
inspect_source(cop,
|
|
22
|
+
[" if #{condition}",
|
|
23
|
+
" #{body}",
|
|
24
|
+
' end'])
|
|
25
|
+
expect(cop.messages).to eq(
|
|
26
|
+
['Favor modifier if usage when you have a single-line' \
|
|
27
|
+
' body. Another good alternative is the usage of control flow' +
|
|
28
|
+
' &&/||.'])
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
it 'registers an offence for short multiline if near an else etc' do
|
|
32
|
+
inspect_source(cop,
|
|
33
|
+
['if x',
|
|
34
|
+
' y',
|
|
35
|
+
'elsif x1',
|
|
36
|
+
' y1',
|
|
37
|
+
'else',
|
|
38
|
+
' z',
|
|
39
|
+
'end',
|
|
40
|
+
'n = a ? 0 : 1',
|
|
41
|
+
'm = 3 if m0',
|
|
42
|
+
'',
|
|
43
|
+
'if a',
|
|
44
|
+
' b',
|
|
45
|
+
'end'])
|
|
46
|
+
expect(cop.offences.size).to eq(1)
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
it "accepts multiline if that doesn't fit on one line" do
|
|
50
|
+
check_too_long(cop, 'if')
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
it 'accepts multiline if whose body is more than one line' do
|
|
54
|
+
check_short_multiline(cop, 'if')
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
it 'registers an offence for multiline unless that fits on one line' do
|
|
58
|
+
inspect_source(cop, ['unless a',
|
|
59
|
+
' b',
|
|
60
|
+
'end'])
|
|
61
|
+
expect(cop.messages).to eq(
|
|
62
|
+
['Favor modifier unless usage when you have a single-line' \
|
|
63
|
+
' body. Another good alternative is the usage of control flow' +
|
|
64
|
+
' &&/||.'])
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
it 'accepts code with EOL comment since user might want to keep it' do
|
|
68
|
+
inspect_source(cop, ['unless a',
|
|
69
|
+
' b # A comment',
|
|
70
|
+
'end'])
|
|
71
|
+
expect(cop.offences).to be_empty
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
it 'accepts if-else-end' do
|
|
75
|
+
inspect_source(cop,
|
|
76
|
+
['if args.last.is_a? Hash then args.pop else ' \
|
|
77
|
+
'Hash.new end'])
|
|
78
|
+
expect(cop.messages).to be_empty
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
it 'accepts an empty condition' do
|
|
82
|
+
check_empty(cop, 'if')
|
|
83
|
+
check_empty(cop, 'unless')
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
it 'accepts if/elsif' do
|
|
87
|
+
inspect_source(cop, ['if test',
|
|
88
|
+
' something',
|
|
89
|
+
'elsif test2',
|
|
90
|
+
' something_else',
|
|
91
|
+
'end'])
|
|
92
|
+
expect(cop.offences).to be_empty
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
context 'with implicit match conditional' do
|
|
96
|
+
let(:source) do
|
|
97
|
+
[
|
|
98
|
+
" if #{conditional}",
|
|
99
|
+
" #{body}",
|
|
100
|
+
' end'
|
|
101
|
+
]
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
let(:body) { 'b' * 35 }
|
|
105
|
+
|
|
106
|
+
context 'when a multiline if fits on one line' do
|
|
107
|
+
let(:conditional) { "/#{'a' * 36}/" }
|
|
108
|
+
|
|
109
|
+
it 'registers an offence' do
|
|
110
|
+
expect(" #{body} if #{conditional}".length).to eq(79)
|
|
111
|
+
|
|
112
|
+
inspect_source(cop, source)
|
|
113
|
+
expect(cop.offences.size).to eq(1)
|
|
114
|
+
end
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
context "when a multiline if doesn't fit on one line" do
|
|
118
|
+
let(:conditional) { "/#{'a' * 37}/" }
|
|
119
|
+
|
|
120
|
+
it 'accepts' do
|
|
121
|
+
expect(" #{body} if #{conditional}".length).to eq(80)
|
|
122
|
+
|
|
123
|
+
inspect_source(cop, source)
|
|
124
|
+
expect(cop.offences).to be_empty
|
|
125
|
+
end
|
|
126
|
+
end
|
|
127
|
+
end
|
|
128
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
|
|
3
|
+
require 'spec_helper'
|
|
4
|
+
|
|
5
|
+
describe Rubocop::Cop::Style::IfWithSemicolon do
|
|
6
|
+
subject(:cop) { described_class.new }
|
|
7
|
+
|
|
8
|
+
it 'registers an offence for one line if/;/end' do
|
|
9
|
+
inspect_source(cop, ['if cond; run else dont end'])
|
|
10
|
+
expect(cop.messages).to eq(
|
|
11
|
+
['Never use if x; Use the ternary operator instead.'])
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
it 'can handle modifier conditionals' do
|
|
15
|
+
inspect_source(cop, ['class Hash',
|
|
16
|
+
'end if RUBY_VERSION < "1.8.7"'])
|
|
17
|
+
expect(cop.messages).to be_empty
|
|
18
|
+
end
|
|
19
|
+
end
|