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,328 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
|
|
3
|
+
require 'spec_helper'
|
|
4
|
+
|
|
5
|
+
describe Rubocop::ConfigLoader do
|
|
6
|
+
include FileHelper
|
|
7
|
+
|
|
8
|
+
let(:default_config) { Rubocop::ConfigLoader.default_configuration }
|
|
9
|
+
|
|
10
|
+
describe '.configuration_file_for', :isolated_environment do
|
|
11
|
+
subject(:configuration_file_for) do
|
|
12
|
+
described_class.configuration_file_for(dir_path)
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
context 'when no config file exists in ancestor directories' do
|
|
16
|
+
let(:dir_path) { 'dir' }
|
|
17
|
+
before { create_file('dir/example.rb', '') }
|
|
18
|
+
|
|
19
|
+
context 'but a config file exists in home directory' do
|
|
20
|
+
before { create_file('~/.rubocop.yml', '') }
|
|
21
|
+
|
|
22
|
+
it 'returns the path to the file in home directory' do
|
|
23
|
+
expect(configuration_file_for).to end_with('home/.rubocop.yml')
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
context 'and no config file exists in home directory' do
|
|
28
|
+
it 'falls back to the provided default file' do
|
|
29
|
+
expect(configuration_file_for).to end_with('config/default.yml')
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
context 'when a config file exists in the parent directory' do
|
|
35
|
+
let(:dir_path) { 'dir' }
|
|
36
|
+
|
|
37
|
+
before do
|
|
38
|
+
create_file('dir/example.rb', '')
|
|
39
|
+
create_file('.rubocop.yml', '')
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
it 'returns the path to that configuration file' do
|
|
43
|
+
expect(configuration_file_for).to end_with('work/.rubocop.yml')
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
context 'when multiple config files exist in ancestor directories' do
|
|
48
|
+
let(:dir_path) { 'dir' }
|
|
49
|
+
|
|
50
|
+
before do
|
|
51
|
+
create_file('dir/example.rb', '')
|
|
52
|
+
create_file('dir/.rubocop.yml', '')
|
|
53
|
+
create_file('.rubocop.yml', '')
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
it 'prefers closer config file' do
|
|
57
|
+
expect(configuration_file_for).to end_with('dir/.rubocop.yml')
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
describe '.configuration_from_file', :isolated_environment do
|
|
63
|
+
subject(:configuration_from_file) do
|
|
64
|
+
described_class.configuration_from_file(file_path)
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
context 'with any config file' do
|
|
68
|
+
let(:file_path) { '.rubocop.yml' }
|
|
69
|
+
|
|
70
|
+
before do
|
|
71
|
+
create_file(file_path, ['Encoding:',
|
|
72
|
+
' Enabled: false'])
|
|
73
|
+
end
|
|
74
|
+
it 'returns a configuration inheriting from default.yml' do
|
|
75
|
+
config = default_config['Encoding'].dup
|
|
76
|
+
config['Enabled'] = false
|
|
77
|
+
expect(configuration_from_file)
|
|
78
|
+
.to eql(default_config.merge('Encoding' => config))
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
context 'when multiple config files exist in ancestor directories' do
|
|
83
|
+
let(:file_path) { 'dir/.rubocop.yml' }
|
|
84
|
+
|
|
85
|
+
before do
|
|
86
|
+
create_file('.rubocop.yml',
|
|
87
|
+
['AllCops:',
|
|
88
|
+
' Excludes:',
|
|
89
|
+
' - vendor/**'
|
|
90
|
+
])
|
|
91
|
+
|
|
92
|
+
create_file(file_path,
|
|
93
|
+
['AllCops:',
|
|
94
|
+
' Excludes: []'
|
|
95
|
+
])
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
it 'gets AllCops/Excludes from the highest directory level' do
|
|
99
|
+
excludes = configuration_from_file['AllCops']['Excludes']
|
|
100
|
+
expect(excludes).to eq([File.expand_path('vendor/**')])
|
|
101
|
+
end
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
context 'when a file inherits from a parent file' do
|
|
105
|
+
let(:file_path) { 'dir/.rubocop.yml' }
|
|
106
|
+
|
|
107
|
+
before do
|
|
108
|
+
create_file('.rubocop.yml',
|
|
109
|
+
['AllCops:',
|
|
110
|
+
' Excludes:',
|
|
111
|
+
' - vendor/**',
|
|
112
|
+
' - !ruby/regexp /[A-Z]/'
|
|
113
|
+
])
|
|
114
|
+
|
|
115
|
+
create_file(file_path, ['inherit_from: ../.rubocop.yml'])
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
it 'gets an absolute AllCops/Excludes' do
|
|
119
|
+
excludes = configuration_from_file['AllCops']['Excludes']
|
|
120
|
+
expect(excludes).to eq([File.expand_path('vendor/**'), /[A-Z]/])
|
|
121
|
+
end
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
context 'when a file inherits from an empty parent file' do
|
|
125
|
+
let(:file_path) { 'dir/.rubocop.yml' }
|
|
126
|
+
|
|
127
|
+
before do
|
|
128
|
+
create_file('.rubocop.yml', [''])
|
|
129
|
+
|
|
130
|
+
create_file(file_path, ['inherit_from: ../.rubocop.yml'])
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
it 'does not fail to load' do
|
|
134
|
+
expect { configuration_from_file }.not_to raise_error
|
|
135
|
+
end
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
context 'when a file inherits from a sibling file' do
|
|
139
|
+
let(:file_path) { 'dir/.rubocop.yml' }
|
|
140
|
+
|
|
141
|
+
before do
|
|
142
|
+
create_file('src/.rubocop.yml',
|
|
143
|
+
['AllCops:',
|
|
144
|
+
' Excludes:',
|
|
145
|
+
' - vendor/**'
|
|
146
|
+
])
|
|
147
|
+
|
|
148
|
+
create_file(file_path, ['inherit_from: ../src/.rubocop.yml'])
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
it 'gets an absolute AllCops/Exclude' do
|
|
152
|
+
excludes = configuration_from_file['AllCops']['Excludes']
|
|
153
|
+
expect(excludes).to eq([File.expand_path('src/vendor/**')])
|
|
154
|
+
end
|
|
155
|
+
end
|
|
156
|
+
|
|
157
|
+
context 'when a file inherits from a parent and grandparent file' do
|
|
158
|
+
let(:file_path) { 'dir/subdir/.rubocop.yml' }
|
|
159
|
+
|
|
160
|
+
before do
|
|
161
|
+
create_file('dir/subdir/example.rb', '')
|
|
162
|
+
|
|
163
|
+
create_file('.rubocop.yml',
|
|
164
|
+
['LineLength:',
|
|
165
|
+
' Enabled: false',
|
|
166
|
+
' Max: 77'])
|
|
167
|
+
|
|
168
|
+
create_file('dir/.rubocop.yml',
|
|
169
|
+
['inherit_from: ../.rubocop.yml',
|
|
170
|
+
'',
|
|
171
|
+
'MethodLength:',
|
|
172
|
+
' Enabled: true',
|
|
173
|
+
' CountComments: false',
|
|
174
|
+
' Max: 10'
|
|
175
|
+
])
|
|
176
|
+
|
|
177
|
+
create_file(file_path,
|
|
178
|
+
['inherit_from: ../.rubocop.yml',
|
|
179
|
+
'',
|
|
180
|
+
'LineLength:',
|
|
181
|
+
' Enabled: true',
|
|
182
|
+
'',
|
|
183
|
+
'MethodLength:',
|
|
184
|
+
' Max: 5'
|
|
185
|
+
])
|
|
186
|
+
end
|
|
187
|
+
|
|
188
|
+
it 'returns the ancestor configuration plus local overrides' do
|
|
189
|
+
config = default_config
|
|
190
|
+
.merge('LineLength' => {
|
|
191
|
+
'Description' =>
|
|
192
|
+
default_config['LineLength']['Description'],
|
|
193
|
+
'Enabled' => true,
|
|
194
|
+
'Max' => 77
|
|
195
|
+
},
|
|
196
|
+
'MethodLength' => {
|
|
197
|
+
'Description' =>
|
|
198
|
+
default_config['MethodLength']['Description'],
|
|
199
|
+
'Enabled' => true,
|
|
200
|
+
'CountComments' => false,
|
|
201
|
+
'Max' => 5
|
|
202
|
+
})
|
|
203
|
+
expect(configuration_from_file).to eq(config)
|
|
204
|
+
end
|
|
205
|
+
end
|
|
206
|
+
|
|
207
|
+
context 'when a file inherits from two configurations' do
|
|
208
|
+
let(:file_path) { '.rubocop.yml' }
|
|
209
|
+
|
|
210
|
+
before do
|
|
211
|
+
create_file('example.rb', '')
|
|
212
|
+
|
|
213
|
+
create_file('normal.yml',
|
|
214
|
+
['MethodLength:',
|
|
215
|
+
' Enabled: false',
|
|
216
|
+
' CountComments: true',
|
|
217
|
+
' Max: 79'])
|
|
218
|
+
|
|
219
|
+
create_file('special.yml',
|
|
220
|
+
['MethodLength:',
|
|
221
|
+
' Enabled: false',
|
|
222
|
+
' Max: 200'])
|
|
223
|
+
|
|
224
|
+
create_file(file_path,
|
|
225
|
+
['inherit_from:',
|
|
226
|
+
' - normal.yml',
|
|
227
|
+
' - special.yml',
|
|
228
|
+
'',
|
|
229
|
+
'MethodLength:',
|
|
230
|
+
' Enabled: true'
|
|
231
|
+
])
|
|
232
|
+
end
|
|
233
|
+
|
|
234
|
+
it 'returns values from the last one when possible' do
|
|
235
|
+
expected = { 'Enabled' => true, # overridden in .rubocop.yml
|
|
236
|
+
'CountComments' => true, # only defined in normal.yml
|
|
237
|
+
'Max' => 200 } # special.yml takes precedence
|
|
238
|
+
expect(configuration_from_file['MethodLength'].to_set)
|
|
239
|
+
.to be_superset(expected.to_set)
|
|
240
|
+
end
|
|
241
|
+
end
|
|
242
|
+
end
|
|
243
|
+
|
|
244
|
+
describe '.load_file', :isolated_environment do
|
|
245
|
+
subject(:load_file) do
|
|
246
|
+
described_class.load_file(configuration_path)
|
|
247
|
+
end
|
|
248
|
+
|
|
249
|
+
let(:configuration_path) { '.rubocop.yml' }
|
|
250
|
+
|
|
251
|
+
it 'returns a configuration loaded from the passed path' do
|
|
252
|
+
create_file(configuration_path, [
|
|
253
|
+
'Encoding:',
|
|
254
|
+
' Enabled: true'
|
|
255
|
+
])
|
|
256
|
+
configuration = load_file
|
|
257
|
+
expect(configuration['Encoding']).to eq(
|
|
258
|
+
'Enabled' => true
|
|
259
|
+
)
|
|
260
|
+
end
|
|
261
|
+
end
|
|
262
|
+
|
|
263
|
+
describe '.merge' do
|
|
264
|
+
subject(:merge) { described_class.merge(base, derived) }
|
|
265
|
+
|
|
266
|
+
let(:base) do
|
|
267
|
+
{
|
|
268
|
+
'AllCops' => {
|
|
269
|
+
'Includes' => ['**/*.gemspec', '**/Rakefile'],
|
|
270
|
+
'Excludes' => []
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
end
|
|
274
|
+
let(:derived) do
|
|
275
|
+
{ 'AllCops' => { 'Excludes' => ['example.rb', 'exclude_*'] } }
|
|
276
|
+
end
|
|
277
|
+
|
|
278
|
+
it 'returns a recursive merge of its two arguments' do
|
|
279
|
+
expect(merge).to eq('AllCops' => {
|
|
280
|
+
'Includes' => ['**/*.gemspec', '**/Rakefile'],
|
|
281
|
+
'Excludes' => ['example.rb', 'exclude_*']
|
|
282
|
+
})
|
|
283
|
+
end
|
|
284
|
+
end
|
|
285
|
+
|
|
286
|
+
describe 'configuration for SymbolArray', :isolated_environment do
|
|
287
|
+
let(:config) do
|
|
288
|
+
config_path = described_class.configuration_file_for('.')
|
|
289
|
+
described_class.configuration_from_file(config_path)
|
|
290
|
+
end
|
|
291
|
+
|
|
292
|
+
context 'when no config file exists for the target file' do
|
|
293
|
+
it 'is disabled' do
|
|
294
|
+
expect(config.cop_enabled?('SymbolArray')).to be_false
|
|
295
|
+
end
|
|
296
|
+
end
|
|
297
|
+
|
|
298
|
+
context 'when a config file which does not mention SymbolArray exists' do
|
|
299
|
+
it 'is disabled' do
|
|
300
|
+
create_file('.rubocop.yml', [
|
|
301
|
+
'LineLength:',
|
|
302
|
+
' Max: 79'
|
|
303
|
+
])
|
|
304
|
+
expect(config.cop_enabled?('SymbolArray')).to be_false
|
|
305
|
+
end
|
|
306
|
+
end
|
|
307
|
+
|
|
308
|
+
context 'when a config file which explicitly enables SymbolArray exists' do
|
|
309
|
+
it 'is enabled' do
|
|
310
|
+
create_file('.rubocop.yml', [
|
|
311
|
+
'SymbolArray:',
|
|
312
|
+
' Enabled: true'
|
|
313
|
+
])
|
|
314
|
+
expect(config.cop_enabled?('SymbolArray')).to be_true
|
|
315
|
+
end
|
|
316
|
+
end
|
|
317
|
+
end
|
|
318
|
+
|
|
319
|
+
describe 'configuration for AssignmentInCondition' do
|
|
320
|
+
describe 'AllowSafeAssignment' do
|
|
321
|
+
it 'is enabled by default' do
|
|
322
|
+
default_config = described_class.default_configuration
|
|
323
|
+
symbol_name_config = default_config.for_cop('AssignmentInCondition')
|
|
324
|
+
expect(symbol_name_config['AllowSafeAssignment']).to be_true
|
|
325
|
+
end
|
|
326
|
+
end
|
|
327
|
+
end
|
|
328
|
+
end
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
|
|
3
|
+
require 'spec_helper'
|
|
4
|
+
|
|
5
|
+
describe Rubocop::Config do
|
|
6
|
+
include FileHelper
|
|
7
|
+
|
|
8
|
+
subject(:configuration) { described_class.new(hash, loaded_path) }
|
|
9
|
+
let(:hash) { {} }
|
|
10
|
+
let(:loaded_path) { 'example/.rubocop.yml' }
|
|
11
|
+
|
|
12
|
+
describe '#validate', :isolated_environment do
|
|
13
|
+
# TODO: Because Config.load_file now outputs the validation warning,
|
|
14
|
+
# it is inserting text into the rspec test output here.
|
|
15
|
+
# The next 2 lines should be removed eventually.
|
|
16
|
+
before(:each) { $stderr = StringIO.new }
|
|
17
|
+
after(:each) { $stderr = STDERR }
|
|
18
|
+
|
|
19
|
+
subject(:configuration) do
|
|
20
|
+
Rubocop::ConfigLoader.load_file(configuration_path)
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
let(:configuration_path) { '.rubocop.yml' }
|
|
24
|
+
|
|
25
|
+
context 'when the configuration includes any unrecognized cop name' do
|
|
26
|
+
before do
|
|
27
|
+
create_file(configuration_path, [
|
|
28
|
+
'LyneLenth:',
|
|
29
|
+
' Enabled: true',
|
|
30
|
+
' Max: 100'
|
|
31
|
+
])
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
it 'raises validation error' do
|
|
35
|
+
expect { configuration.validate }
|
|
36
|
+
.to raise_error(described_class::ValidationError,
|
|
37
|
+
/^unrecognized cop LyneLenth/)
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
context 'when the configuration includes any unrecognized parameter' do
|
|
42
|
+
before do
|
|
43
|
+
create_file(configuration_path, [
|
|
44
|
+
'LineLength:',
|
|
45
|
+
' Enabled: true',
|
|
46
|
+
' Min: 10'
|
|
47
|
+
])
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
it 'raises validation error' do
|
|
51
|
+
expect { configuration.validate }
|
|
52
|
+
.to raise_error(described_class::ValidationError,
|
|
53
|
+
/^unrecognized parameter LineLength:Min/)
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
context 'when the configuration includes any common parameter' do
|
|
58
|
+
# Common parameters are parameters that are not in the default
|
|
59
|
+
# configuration, but are nonetheless allowed for any cop.
|
|
60
|
+
before do
|
|
61
|
+
create_file(configuration_path, [
|
|
62
|
+
'LineLength:',
|
|
63
|
+
' Exclude:',
|
|
64
|
+
' - lib/file.rb',
|
|
65
|
+
' Include:',
|
|
66
|
+
' - lib/file.xyz',
|
|
67
|
+
' Severity: warning'
|
|
68
|
+
])
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
it 'does not raise validation error' do
|
|
72
|
+
expect { configuration.validate }.to_not raise_error
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
describe '#file_to_include?' do
|
|
78
|
+
let(:hash) do
|
|
79
|
+
{
|
|
80
|
+
'AllCops' => {
|
|
81
|
+
'Includes' => ['Gemfile', 'config/unicorn.rb.example']
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
let(:loaded_path) { '/home/foo/project/.rubocop.yml' }
|
|
87
|
+
|
|
88
|
+
context 'when the passed path matches any of patterns to include' do
|
|
89
|
+
it 'returns true' do
|
|
90
|
+
file_path = '/home/foo/project/Gemfile'
|
|
91
|
+
expect(configuration.file_to_include?(file_path)).to be_true
|
|
92
|
+
end
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
context 'when the passed path does not match any of patterns to include' do
|
|
96
|
+
it 'returns false' do
|
|
97
|
+
file_path = '/home/foo/project/Gemfile.lock'
|
|
98
|
+
expect(configuration.file_to_include?(file_path)).to be_false
|
|
99
|
+
end
|
|
100
|
+
end
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
describe '#file_to_exclude?' do
|
|
104
|
+
let(:hash) do
|
|
105
|
+
{
|
|
106
|
+
'AllCops' => {
|
|
107
|
+
'Excludes' => ['/home/foo/project/log/*']
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
let(:loaded_path) { '/home/foo/project/.rubocop.yml' }
|
|
113
|
+
|
|
114
|
+
context 'when the passed path matches any of patterns to exclude' do
|
|
115
|
+
it 'returns true' do
|
|
116
|
+
file_path = '/home/foo/project/log/foo.rb'
|
|
117
|
+
expect(configuration.file_to_exclude?(file_path)).to be_true
|
|
118
|
+
end
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
context 'when the passed path does not match any of patterns to exclude' do
|
|
122
|
+
it 'returns false' do
|
|
123
|
+
file_path = '/home/foo/project/log_file.rb'
|
|
124
|
+
expect(configuration.file_to_exclude?(file_path)).to be_false
|
|
125
|
+
end
|
|
126
|
+
end
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
describe '#patterns_to_include' do
|
|
130
|
+
subject(:patterns_to_include) do
|
|
131
|
+
configuration = described_class.new(hash, loaded_path)
|
|
132
|
+
configuration.patterns_to_include
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
let(:hash) { {} }
|
|
136
|
+
let(:loaded_path) { 'example/.rubocop.yml' }
|
|
137
|
+
|
|
138
|
+
context 'when config file has AllCops => Includes key' do
|
|
139
|
+
let(:hash) do
|
|
140
|
+
{
|
|
141
|
+
'AllCops' => {
|
|
142
|
+
'Includes' => ['Gemfile', 'config/unicorn.rb.example']
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
end
|
|
146
|
+
|
|
147
|
+
it 'returns the Includes value' do
|
|
148
|
+
expect(patterns_to_include).to eq([
|
|
149
|
+
'Gemfile',
|
|
150
|
+
'config/unicorn.rb.example'
|
|
151
|
+
])
|
|
152
|
+
end
|
|
153
|
+
end
|
|
154
|
+
end
|
|
155
|
+
|
|
156
|
+
describe '#patterns_to_exclude' do
|
|
157
|
+
subject(:patterns_to_exclude) do
|
|
158
|
+
configuration = described_class.new(hash, loaded_path)
|
|
159
|
+
configuration.patterns_to_exclude
|
|
160
|
+
end
|
|
161
|
+
|
|
162
|
+
let(:hash) { {} }
|
|
163
|
+
let(:loaded_path) { 'example/.rubocop.yml' }
|
|
164
|
+
|
|
165
|
+
context 'when config file has AllCops => Excludes key' do
|
|
166
|
+
let(:hash) do
|
|
167
|
+
{
|
|
168
|
+
'AllCops' => {
|
|
169
|
+
'Excludes' => ['log/*']
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
end
|
|
173
|
+
|
|
174
|
+
it 'returns the Excludes value' do
|
|
175
|
+
expect(patterns_to_exclude).to eq(['log/*'])
|
|
176
|
+
end
|
|
177
|
+
end
|
|
178
|
+
end
|
|
179
|
+
end
|