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,81 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
|
|
3
|
+
require 'spec_helper'
|
|
4
|
+
|
|
5
|
+
describe Rubocop::Cop::Style::AccessorMethodName do
|
|
6
|
+
subject(:cop) { described_class.new }
|
|
7
|
+
|
|
8
|
+
it 'registers an offence for method get_... with no args' do
|
|
9
|
+
inspect_source(cop, ['def get_attr',
|
|
10
|
+
' # ...',
|
|
11
|
+
'end'])
|
|
12
|
+
expect(cop.offences.size).to eq(1)
|
|
13
|
+
expect(cop.highlights).to eq(['get_attr'])
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
it 'registers an offence for singleton method get_... with no args' do
|
|
17
|
+
inspect_source(cop, ['def self.get_attr',
|
|
18
|
+
' # ...',
|
|
19
|
+
'end'])
|
|
20
|
+
expect(cop.offences.size).to eq(1)
|
|
21
|
+
expect(cop.highlights).to eq(['get_attr'])
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
it 'accepts method get_something with args' do
|
|
25
|
+
inspect_source(cop, ['def get_something(arg)',
|
|
26
|
+
' # ...',
|
|
27
|
+
'end'])
|
|
28
|
+
expect(cop.offences).to be_empty
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
it 'accepts singleton method get_something with args' do
|
|
32
|
+
inspect_source(cop, ['def self.get_something(arg)',
|
|
33
|
+
' # ...',
|
|
34
|
+
'end'])
|
|
35
|
+
expect(cop.offences).to be_empty
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
it 'registers an offence for method set_something with one arg' do
|
|
39
|
+
inspect_source(cop, ['def set_attr(arg)',
|
|
40
|
+
' # ...',
|
|
41
|
+
'end'])
|
|
42
|
+
expect(cop.offences.size).to eq(1)
|
|
43
|
+
expect(cop.highlights).to eq(['set_attr'])
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
it 'registers an offence for singleton method set_... with one args' do
|
|
47
|
+
inspect_source(cop, ['def self.set_attr(arg)',
|
|
48
|
+
' # ...',
|
|
49
|
+
'end'])
|
|
50
|
+
expect(cop.offences.size).to eq(1)
|
|
51
|
+
expect(cop.highlights).to eq(['set_attr'])
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
it 'accepts method set_something with no args' do
|
|
55
|
+
inspect_source(cop, ['def set_something',
|
|
56
|
+
' # ...',
|
|
57
|
+
'end'])
|
|
58
|
+
expect(cop.offences).to be_empty
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
it 'accepts singleton method set_something with no args' do
|
|
62
|
+
inspect_source(cop, ['def self.set_something',
|
|
63
|
+
' # ...',
|
|
64
|
+
'end'])
|
|
65
|
+
expect(cop.offences).to be_empty
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
it 'accepts method set_something with two args' do
|
|
69
|
+
inspect_source(cop, ['def set_something(arg1, arg2)',
|
|
70
|
+
' # ...',
|
|
71
|
+
'end'])
|
|
72
|
+
expect(cop.offences).to be_empty
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
it 'accepts singleton method set_something with two args' do
|
|
76
|
+
inspect_source(cop, ['def self.get_something(arg1, arg2)',
|
|
77
|
+
' # ...',
|
|
78
|
+
'end'])
|
|
79
|
+
expect(cop.offences).to be_empty
|
|
80
|
+
end
|
|
81
|
+
end
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
|
|
3
|
+
require 'spec_helper'
|
|
4
|
+
|
|
5
|
+
describe Rubocop::Cop::Style::Alias do
|
|
6
|
+
subject(:cop) { described_class.new }
|
|
7
|
+
|
|
8
|
+
it 'registers an offence for alias with symbol args' do
|
|
9
|
+
inspect_source(cop,
|
|
10
|
+
['alias :ala :bala'])
|
|
11
|
+
expect(cop.offences.size).to eq(1)
|
|
12
|
+
expect(cop.messages)
|
|
13
|
+
.to eq(['Use alias_method instead of alias.'])
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
it 'autocorrects alias with symbol args' do
|
|
17
|
+
corrected = autocorrect_source(cop, ['alias :ala :bala'])
|
|
18
|
+
expect(corrected).to eq 'alias_method :ala, :bala'
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
it 'registers an offence for alias with bareword args' do
|
|
22
|
+
inspect_source(cop,
|
|
23
|
+
['alias ala bala'])
|
|
24
|
+
expect(cop.offences.size).to eq(1)
|
|
25
|
+
expect(cop.messages)
|
|
26
|
+
.to eq(['Use alias_method instead of alias.'])
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
it 'autocorrects alias with bareword args' do
|
|
30
|
+
corrected = autocorrect_source(cop, ['alias ala bala'])
|
|
31
|
+
expect(corrected).to eq 'alias_method :ala, :bala'
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
it 'does not register an offence for alias_method' do
|
|
35
|
+
inspect_source(cop,
|
|
36
|
+
['alias_method :ala, :bala'])
|
|
37
|
+
expect(cop.offences).to be_empty
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
it 'does not register an offence for :alias' do
|
|
41
|
+
inspect_source(cop,
|
|
42
|
+
['[:alias, :ala, :bala]'])
|
|
43
|
+
expect(cop.offences).to be_empty
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
it 'does not register an offence for alias with gvars' do
|
|
47
|
+
inspect_source(cop,
|
|
48
|
+
['alias $ala $bala'])
|
|
49
|
+
expect(cop.offences).to be_empty
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
it 'accepts alias in an instance_exec block' do
|
|
53
|
+
inspect_source(cop,
|
|
54
|
+
['cli.instance_exec do',
|
|
55
|
+
' alias :old_trap_interrupt :trap_interrupt',
|
|
56
|
+
'end'])
|
|
57
|
+
expect(cop.offences).to be_empty
|
|
58
|
+
end
|
|
59
|
+
end
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
|
|
3
|
+
require 'spec_helper'
|
|
4
|
+
|
|
5
|
+
describe Rubocop::Cop::Style::AlignArray do
|
|
6
|
+
subject(:cop) { described_class.new }
|
|
7
|
+
|
|
8
|
+
it 'registers an offence for misaligned array elements' do
|
|
9
|
+
inspect_source(cop, ['array = [',
|
|
10
|
+
' a,',
|
|
11
|
+
' b,',
|
|
12
|
+
' c,',
|
|
13
|
+
' d',
|
|
14
|
+
']'])
|
|
15
|
+
expect(cop.messages).to eq(['Align the elements of an array ' \
|
|
16
|
+
'literal if they span more than ' +
|
|
17
|
+
'one line.'] * 2)
|
|
18
|
+
expect(cop.highlights).to eq(%w(b d))
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
it 'accepts aligned array keys' do
|
|
22
|
+
inspect_source(cop, ['array = [',
|
|
23
|
+
' a,',
|
|
24
|
+
' b,',
|
|
25
|
+
' c,',
|
|
26
|
+
' d',
|
|
27
|
+
']'])
|
|
28
|
+
expect(cop.offences).to be_empty
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
it 'accepts single line array' do
|
|
32
|
+
inspect_source(cop, 'array = [ a, b ]')
|
|
33
|
+
expect(cop.offences).to be_empty
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
it 'accepts several elements per line' do
|
|
37
|
+
inspect_source(cop, ['array = [ a, b,',
|
|
38
|
+
' c, d ]'])
|
|
39
|
+
expect(cop.offences).to be_empty
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
it 'auto-corrects alignment' do
|
|
43
|
+
new_source = autocorrect_source(cop, ['array = [',
|
|
44
|
+
' a,',
|
|
45
|
+
' b,',
|
|
46
|
+
' c,',
|
|
47
|
+
' d',
|
|
48
|
+
']'])
|
|
49
|
+
expect(new_source).to eq(['array = [',
|
|
50
|
+
' a,',
|
|
51
|
+
' b,',
|
|
52
|
+
' c,',
|
|
53
|
+
' d',
|
|
54
|
+
']'].join("\n"))
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
it 'auto-corrects array within array' do
|
|
58
|
+
original_source = ['[:l1,',
|
|
59
|
+
' [:l2,',
|
|
60
|
+
' [:l3,',
|
|
61
|
+
' [:l4]]]]']
|
|
62
|
+
new_source = autocorrect_source(cop, original_source)
|
|
63
|
+
expect(new_source).to eq(['[:l1,',
|
|
64
|
+
' [:l2,',
|
|
65
|
+
' [:l3,',
|
|
66
|
+
' [:l4]]]]'].join("\n"))
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
it 'auto-corrects only elements that begin a line' do
|
|
70
|
+
original_source = ['array = [:bar, {',
|
|
71
|
+
' whiz: 2, bang: 3 }, option: 3]']
|
|
72
|
+
new_source = autocorrect_source(cop, original_source)
|
|
73
|
+
expect(new_source).to eq(original_source.join("\n"))
|
|
74
|
+
end
|
|
75
|
+
end
|
|
@@ -0,0 +1,310 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
|
|
3
|
+
require 'spec_helper'
|
|
4
|
+
|
|
5
|
+
describe Rubocop::Cop::Style::AlignHash, :config do
|
|
6
|
+
shared_examples 'not on separate lines' do
|
|
7
|
+
it 'accepts single line hash' do
|
|
8
|
+
inspect_source(cop, 'func(a: 0, bb: 1)')
|
|
9
|
+
expect(cop.offences).to be_empty
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
it 'accepts several pairs per line' do
|
|
13
|
+
inspect_source(cop, ['func(a: 1, bb: 2,',
|
|
14
|
+
' ccc: 3, dddd: 4)'])
|
|
15
|
+
expect(cop.offences).to be_empty
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
subject(:cop) { described_class.new(config) }
|
|
20
|
+
let(:cop_config) do
|
|
21
|
+
{
|
|
22
|
+
'EnforcedHashRocketStyle' => 'key',
|
|
23
|
+
'EnforcedColonStyle' => 'key'
|
|
24
|
+
}
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
context 'with default configuration' do
|
|
28
|
+
it 'registers an offence for misaligned hash keys' do
|
|
29
|
+
inspect_source(cop, ['hash1 = {',
|
|
30
|
+
' a: 0,',
|
|
31
|
+
' bb: 1',
|
|
32
|
+
'}',
|
|
33
|
+
'hash2 = {',
|
|
34
|
+
" 'ccc' => 2,",
|
|
35
|
+
" 'dddd' => 2",
|
|
36
|
+
'}'])
|
|
37
|
+
expect(cop.messages).to eq(['Align the elements of a hash ' \
|
|
38
|
+
'literal if they span more than ' +
|
|
39
|
+
'one line.'] * 2)
|
|
40
|
+
expect(cop.highlights).to eq(['bb: 1',
|
|
41
|
+
"'dddd' => 2"])
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
it 'accepts aligned hash keys' do
|
|
45
|
+
inspect_source(cop, ['hash1 = {',
|
|
46
|
+
' a: 0,',
|
|
47
|
+
' bb: 1,',
|
|
48
|
+
'}',
|
|
49
|
+
'hash2 = {',
|
|
50
|
+
" 'ccc' => 2,",
|
|
51
|
+
" 'dddd' => 2",
|
|
52
|
+
'}'])
|
|
53
|
+
expect(cop.offences).to be_empty
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
it 'registers an offence for separator alignment' do
|
|
57
|
+
inspect_source(cop, ['hash = {',
|
|
58
|
+
" 'a' => 0,",
|
|
59
|
+
" 'bbb' => 1",
|
|
60
|
+
'}'])
|
|
61
|
+
expect(cop.offences.size).to eq(1)
|
|
62
|
+
expect(cop.highlights).to eq(["'bbb' => 1"])
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
context 'with braceless hash as last argument' do
|
|
66
|
+
it 'registers an offence for misaligned hash keys' do
|
|
67
|
+
inspect_source(cop, ['func(a: 0,',
|
|
68
|
+
' b: 1)'])
|
|
69
|
+
expect(cop.offences.size).to eq(1)
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
it 'registers an offence for right alignment of keys' do
|
|
73
|
+
inspect_source(cop, ['func(a: 0,',
|
|
74
|
+
' bbb: 1)'])
|
|
75
|
+
expect(cop.offences.size).to eq(1)
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
it 'accepts aligned hash keys' do
|
|
79
|
+
inspect_source(cop, ['func(a: 0,',
|
|
80
|
+
' b: 1)'])
|
|
81
|
+
expect(cop.offences).to be_empty
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
it 'accepts an empty hash' do
|
|
85
|
+
inspect_source(cop, 'h = {}')
|
|
86
|
+
expect(cop.offences).to be_empty
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
it 'auto-corrects alignment' do
|
|
91
|
+
new_source = autocorrect_source(cop, ['hash1 = { a: 0,',
|
|
92
|
+
' bb: 1,',
|
|
93
|
+
' ccc: 2 }',
|
|
94
|
+
'hash2 = { :a => 0,',
|
|
95
|
+
' :bb => 1,',
|
|
96
|
+
' :ccc =>2 }'
|
|
97
|
+
])
|
|
98
|
+
expect(new_source).to eq(['hash1 = { a: 0,',
|
|
99
|
+
' bb: 1,',
|
|
100
|
+
' ccc: 2 }',
|
|
101
|
+
'hash2 = { :a => 0,',
|
|
102
|
+
' :bb => 1,',
|
|
103
|
+
# Separator and value are not corrected
|
|
104
|
+
# in 'key' mode.
|
|
105
|
+
' :ccc =>2 }'].join("\n"))
|
|
106
|
+
end
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
include_examples 'not on separate lines'
|
|
110
|
+
|
|
111
|
+
context 'with table alignment configuration' do
|
|
112
|
+
let(:cop_config) do
|
|
113
|
+
{
|
|
114
|
+
'EnforcedHashRocketStyle' => 'table',
|
|
115
|
+
'EnforcedColonStyle' => 'table'
|
|
116
|
+
}
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
include_examples 'not on separate lines'
|
|
120
|
+
|
|
121
|
+
it 'accepts aligned hash keys' do
|
|
122
|
+
inspect_source(cop, ['hash1 = {',
|
|
123
|
+
" 'a' => 0,",
|
|
124
|
+
" 'bbb' => 1",
|
|
125
|
+
'}',
|
|
126
|
+
'hash2 = {',
|
|
127
|
+
' a: 0,',
|
|
128
|
+
' bbb: 1',
|
|
129
|
+
'}'
|
|
130
|
+
])
|
|
131
|
+
expect(cop.offences).to be_empty
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
it 'accepts an empty hash' do
|
|
135
|
+
inspect_source(cop, 'h = {}')
|
|
136
|
+
expect(cop.offences).to be_empty
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
it 'accepts a multiline array of single line hashes' do
|
|
140
|
+
inspect_source(cop, ['def self.scenarios_order',
|
|
141
|
+
' [',
|
|
142
|
+
' { before: %w( l k ) },',
|
|
143
|
+
' { ending: %w( m l ) },',
|
|
144
|
+
' { starting: %w( m n ) },',
|
|
145
|
+
' { after: %w( n o ) }',
|
|
146
|
+
' ]',
|
|
147
|
+
' end'])
|
|
148
|
+
expect(cop.offences).to be_empty
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
it 'registers an offence for misaligned hash values' do
|
|
152
|
+
inspect_source(cop, ['hash1 = {',
|
|
153
|
+
" 'a' => 0,",
|
|
154
|
+
" 'bbb' => 1",
|
|
155
|
+
'}',
|
|
156
|
+
'hash2 = {',
|
|
157
|
+
' a: 0,',
|
|
158
|
+
' bbb:1',
|
|
159
|
+
'}'
|
|
160
|
+
])
|
|
161
|
+
expect(cop.highlights).to eq(["'a' => 0",
|
|
162
|
+
'bbb:1'])
|
|
163
|
+
end
|
|
164
|
+
|
|
165
|
+
it 'registers an offence for misaligned hash rockets' do
|
|
166
|
+
inspect_source(cop, ['hash = {',
|
|
167
|
+
" 'a' => 0,",
|
|
168
|
+
" 'bbb' => 1",
|
|
169
|
+
'}'])
|
|
170
|
+
expect(cop.offences.size).to eq(1)
|
|
171
|
+
end
|
|
172
|
+
|
|
173
|
+
it 'auto-corrects alignment' do
|
|
174
|
+
new_source = autocorrect_source(cop, ['hash1 = { a: 0,',
|
|
175
|
+
' bb: 1,',
|
|
176
|
+
' ccc: 2 }',
|
|
177
|
+
"hash2 = { 'a' => 0,",
|
|
178
|
+
" 'bb' => 1,",
|
|
179
|
+
" 'ccc' =>2 }"])
|
|
180
|
+
expect(new_source).to eq(['hash1 = { a: 0,',
|
|
181
|
+
' bb: 1,',
|
|
182
|
+
' ccc: 2 }',
|
|
183
|
+
"hash2 = { 'a' => 0,",
|
|
184
|
+
" 'bb' => 1,",
|
|
185
|
+
" 'ccc' => 2 }"].join("\n"))
|
|
186
|
+
end
|
|
187
|
+
end
|
|
188
|
+
|
|
189
|
+
context 'with table+separator alignment configuration' do
|
|
190
|
+
let(:cop_config) do
|
|
191
|
+
{
|
|
192
|
+
'EnforcedHashRocketStyle' => 'table',
|
|
193
|
+
'EnforcedColonStyle' => 'separator'
|
|
194
|
+
}
|
|
195
|
+
end
|
|
196
|
+
|
|
197
|
+
it 'accepts a single method argument entry with colon' do
|
|
198
|
+
inspect_source(cop, ['merge(parent: nil)'])
|
|
199
|
+
expect(cop.offences).to be_empty
|
|
200
|
+
end
|
|
201
|
+
end
|
|
202
|
+
|
|
203
|
+
context 'with invalid configuration' do
|
|
204
|
+
let(:cop_config) do
|
|
205
|
+
{
|
|
206
|
+
'EnforcedHashRocketStyle' => 'junk',
|
|
207
|
+
'EnforcedColonStyle' => 'junk'
|
|
208
|
+
}
|
|
209
|
+
end
|
|
210
|
+
it 'fails' do
|
|
211
|
+
src = ['hash = {',
|
|
212
|
+
' a: 0,',
|
|
213
|
+
' bb: 1',
|
|
214
|
+
'}']
|
|
215
|
+
expect { inspect_source(cop, src) }.to raise_error(RuntimeError)
|
|
216
|
+
end
|
|
217
|
+
end
|
|
218
|
+
|
|
219
|
+
context 'with separator alignment configuration' do
|
|
220
|
+
let(:cop_config) do
|
|
221
|
+
{
|
|
222
|
+
'EnforcedHashRocketStyle' => 'separator',
|
|
223
|
+
'EnforcedColonStyle' => 'separator'
|
|
224
|
+
}
|
|
225
|
+
end
|
|
226
|
+
|
|
227
|
+
it 'accepts aligned hash keys' do
|
|
228
|
+
inspect_source(cop, ['hash1 = {',
|
|
229
|
+
' a: 0,',
|
|
230
|
+
' bbb: 1',
|
|
231
|
+
'}',
|
|
232
|
+
'hash2 = {',
|
|
233
|
+
" 'a' => 0,",
|
|
234
|
+
" 'bbb' => 1",
|
|
235
|
+
'}'])
|
|
236
|
+
expect(cop.offences).to be_empty
|
|
237
|
+
end
|
|
238
|
+
|
|
239
|
+
it 'accepts an empty hash' do
|
|
240
|
+
inspect_source(cop, 'h = {}')
|
|
241
|
+
expect(cop.offences).to be_empty
|
|
242
|
+
end
|
|
243
|
+
|
|
244
|
+
it 'registers an offence for misaligned hash values' do
|
|
245
|
+
inspect_source(cop, ['hash = {',
|
|
246
|
+
" 'a' => 0,",
|
|
247
|
+
" 'bbb' => 1",
|
|
248
|
+
'}'])
|
|
249
|
+
expect(cop.offences.size).to eq(1)
|
|
250
|
+
end
|
|
251
|
+
|
|
252
|
+
it 'registers an offence for misaligned hash rockets' do
|
|
253
|
+
inspect_source(cop, ['hash = {',
|
|
254
|
+
" 'a' => 0,",
|
|
255
|
+
" 'bbb' => 1",
|
|
256
|
+
'}'])
|
|
257
|
+
expect(cop.offences.size).to eq(1)
|
|
258
|
+
end
|
|
259
|
+
|
|
260
|
+
include_examples 'not on separate lines'
|
|
261
|
+
|
|
262
|
+
it 'auto-corrects alignment' do
|
|
263
|
+
new_source = autocorrect_source(cop, ['hash1 = { a: 0,',
|
|
264
|
+
' bb: 1,',
|
|
265
|
+
' ccc: 2 }',
|
|
266
|
+
'hash2 = { a => 0,',
|
|
267
|
+
' bb => 1,',
|
|
268
|
+
' ccc =>2 }'])
|
|
269
|
+
expect(new_source).to eq(['hash1 = { a: 0,',
|
|
270
|
+
' bb: 1,',
|
|
271
|
+
' ccc: 2 }',
|
|
272
|
+
'hash2 = { a => 0,',
|
|
273
|
+
' bb => 1,',
|
|
274
|
+
' ccc => 2 }'].join("\n"))
|
|
275
|
+
end
|
|
276
|
+
end
|
|
277
|
+
|
|
278
|
+
context 'with different settings for => and :' do
|
|
279
|
+
let(:cop_config) do
|
|
280
|
+
{
|
|
281
|
+
'EnforcedHashRocketStyle' => 'key',
|
|
282
|
+
'EnforcedColonStyle' => 'separator'
|
|
283
|
+
}
|
|
284
|
+
end
|
|
285
|
+
|
|
286
|
+
it 'registers offences for misaligned entries' do
|
|
287
|
+
inspect_source(cop, ['hash1 = {',
|
|
288
|
+
' a: 0,',
|
|
289
|
+
' bbb: 1',
|
|
290
|
+
'}',
|
|
291
|
+
'hash2 = {',
|
|
292
|
+
" 'a' => 0,",
|
|
293
|
+
" 'bbb' => 1",
|
|
294
|
+
'}'])
|
|
295
|
+
expect(cop.highlights).to eq(['bbb: 1', "'bbb' => 1"])
|
|
296
|
+
end
|
|
297
|
+
|
|
298
|
+
it 'accepts aligned entries' do
|
|
299
|
+
inspect_source(cop, ['hash1 = {',
|
|
300
|
+
' a: 0,',
|
|
301
|
+
' bbb: 1',
|
|
302
|
+
'}',
|
|
303
|
+
'hash2 = {',
|
|
304
|
+
" 'a' => 0,",
|
|
305
|
+
" 'bbb' => 1",
|
|
306
|
+
'}'])
|
|
307
|
+
expect(cop.offences).to be_empty
|
|
308
|
+
end
|
|
309
|
+
end
|
|
310
|
+
end
|