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.
Files changed (219) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +22 -0
  3. data/.rspec +1 -0
  4. data/.travis.yml +14 -0
  5. data/CHANGELOG.md +0 -0
  6. data/Gemfile +4 -0
  7. data/LICENSE.txt +22 -0
  8. data/README.md +35 -0
  9. data/Rakefile +22 -0
  10. data/bin/ridecharge-rubocop +49 -0
  11. data/config/0default.yml +8 -0
  12. data/config/fleet-magic-todo.yml +380 -0
  13. data/config/rc-todo.yml +190 -0
  14. data/config/ridecharge-rubocop_todo.yml +73 -0
  15. data/config/rubocop/default.yml +308 -0
  16. data/config/rubocop/disabled.yml +9 -0
  17. data/config/rubocop/enabled.yml +648 -0
  18. data/config/standard-todo.yml +24 -0
  19. data/config/tabs.yml +15 -0
  20. data/config/vehicle-todo.yml +195 -0
  21. data/lib/ridecharge/rubocop.rb +2 -0
  22. data/lib/ridecharge/rubocop/version.rb +5 -0
  23. data/lib/rubocop/config_loader_monkeypatch.rb +117 -0
  24. data/lib/rubocop/ridecharge.rb +1 -0
  25. data/ridecharge-rubocop.gemspec +25 -0
  26. data/spec/isolated_environment_spec.rb +24 -0
  27. data/spec/project_spec.rb +118 -0
  28. data/spec/rubocop/cli_spec.rb +1385 -0
  29. data/spec/rubocop/config_loader_spec.rb +328 -0
  30. data/spec/rubocop/config_spec.rb +179 -0
  31. data/spec/rubocop/config_store_spec.rb +53 -0
  32. data/spec/rubocop/cop/commissioner_spec.rb +83 -0
  33. data/spec/rubocop/cop/cop_spec.rb +114 -0
  34. data/spec/rubocop/cop/corrector_spec.rb +59 -0
  35. data/spec/rubocop/cop/lint/ambiguous_operator_spec.rb +113 -0
  36. data/spec/rubocop/cop/lint/ambiguous_regexp_literal_spec.rb +35 -0
  37. data/spec/rubocop/cop/lint/assignment_in_condition_spec.rb +107 -0
  38. data/spec/rubocop/cop/lint/block_alignment_spec.rb +411 -0
  39. data/spec/rubocop/cop/lint/condition_position_spec.rb +49 -0
  40. data/spec/rubocop/cop/lint/debugger_spec.rb +39 -0
  41. data/spec/rubocop/cop/lint/else_layout_spec.rb +65 -0
  42. data/spec/rubocop/cop/lint/empty_ensure_spec.rb +27 -0
  43. data/spec/rubocop/cop/lint/end_alignment_spec.rb +136 -0
  44. data/spec/rubocop/cop/lint/end_in_method_spec.rb +29 -0
  45. data/spec/rubocop/cop/lint/ensure_return_spec.rb +39 -0
  46. data/spec/rubocop/cop/lint/eval_spec.rb +35 -0
  47. data/spec/rubocop/cop/lint/handle_exceptions_spec.rb +30 -0
  48. data/spec/rubocop/cop/lint/invalid_character_literal_spec.rb +33 -0
  49. data/spec/rubocop/cop/lint/literal_in_condition_spec.rb +63 -0
  50. data/spec/rubocop/cop/lint/loop_spec.rb +27 -0
  51. data/spec/rubocop/cop/lint/parentheses_as_grouped_expression_spec.rb +57 -0
  52. data/spec/rubocop/cop/lint/require_parentheses_spec.rb +82 -0
  53. data/spec/rubocop/cop/lint/rescue_exception_spec.rb +131 -0
  54. data/spec/rubocop/cop/lint/shadowing_outer_local_variable_spec.rb +237 -0
  55. data/spec/rubocop/cop/lint/syntax_spec.rb +34 -0
  56. data/spec/rubocop/cop/lint/unreachable_code_spec.rb +63 -0
  57. data/spec/rubocop/cop/lint/useless_assignment_spec.rb +1570 -0
  58. data/spec/rubocop/cop/lint/useless_comparison_spec.rb +30 -0
  59. data/spec/rubocop/cop/lint/useless_else_without_rescue_spec.rb +48 -0
  60. data/spec/rubocop/cop/lint/useless_setter_call_spec.rb +149 -0
  61. data/spec/rubocop/cop/lint/void_spec.rb +57 -0
  62. data/spec/rubocop/cop/offence_spec.rb +133 -0
  63. data/spec/rubocop/cop/rails/default_scope_spec.rb +37 -0
  64. data/spec/rubocop/cop/rails/has_and_belongs_to_many_spec.rb +13 -0
  65. data/spec/rubocop/cop/rails/output_spec.rb +41 -0
  66. data/spec/rubocop/cop/rails/read_attribute_spec.rb +13 -0
  67. data/spec/rubocop/cop/rails/validation_spec.rb +21 -0
  68. data/spec/rubocop/cop/style/access_modifier_indentation_spec.rb +361 -0
  69. data/spec/rubocop/cop/style/accessor_method_name_spec.rb +81 -0
  70. data/spec/rubocop/cop/style/alias_spec.rb +59 -0
  71. data/spec/rubocop/cop/style/align_array_spec.rb +75 -0
  72. data/spec/rubocop/cop/style/align_hash_spec.rb +310 -0
  73. data/spec/rubocop/cop/style/align_parameters_spec.rb +222 -0
  74. data/spec/rubocop/cop/style/and_or_spec.rb +57 -0
  75. data/spec/rubocop/cop/style/ascii_comments_spec.rb +22 -0
  76. data/spec/rubocop/cop/style/ascii_identifiers_spec.rb +36 -0
  77. data/spec/rubocop/cop/style/attr_spec.rb +19 -0
  78. data/spec/rubocop/cop/style/begin_block_spec.rb +13 -0
  79. data/spec/rubocop/cop/style/block_comments_spec.rb +21 -0
  80. data/spec/rubocop/cop/style/block_nesting_spec.rb +156 -0
  81. data/spec/rubocop/cop/style/blocks_spec.rb +99 -0
  82. data/spec/rubocop/cop/style/braces_around_hash_parameters_spec.rb +284 -0
  83. data/spec/rubocop/cop/style/case_equality_spec.rb +12 -0
  84. data/spec/rubocop/cop/style/case_indentation_spec.rb +289 -0
  85. data/spec/rubocop/cop/style/character_literal_spec.rb +37 -0
  86. data/spec/rubocop/cop/style/class_and_module_camel_case_spec.rb +40 -0
  87. data/spec/rubocop/cop/style/class_length_spec.rb +131 -0
  88. data/spec/rubocop/cop/style/class_methods_spec.rb +45 -0
  89. data/spec/rubocop/cop/style/class_vars_spec.rb +19 -0
  90. data/spec/rubocop/cop/style/collection_methods_spec.rb +48 -0
  91. data/spec/rubocop/cop/style/colon_method_call_spec.rb +60 -0
  92. data/spec/rubocop/cop/style/comment_annotation_spec.rb +86 -0
  93. data/spec/rubocop/cop/style/constant_name_spec.rb +65 -0
  94. data/spec/rubocop/cop/style/cyclomatic_complexity_spec.rb +204 -0
  95. data/spec/rubocop/cop/style/def_with_parentheses_spec.rb +39 -0
  96. data/spec/rubocop/cop/style/documentation_spec.rb +123 -0
  97. data/spec/rubocop/cop/style/dot_position_spec.rb +94 -0
  98. data/spec/rubocop/cop/style/empty_line_between_defs_spec.rb +127 -0
  99. data/spec/rubocop/cop/style/empty_lines_around_access_modifier_spec.rb +56 -0
  100. data/spec/rubocop/cop/style/empty_lines_around_body_spec.rb +131 -0
  101. data/spec/rubocop/cop/style/empty_lines_spec.rb +40 -0
  102. data/spec/rubocop/cop/style/empty_literal_spec.rb +100 -0
  103. data/spec/rubocop/cop/style/encoding_spec.rb +56 -0
  104. data/spec/rubocop/cop/style/end_block_spec.rb +13 -0
  105. data/spec/rubocop/cop/style/end_of_line_spec.rb +47 -0
  106. data/spec/rubocop/cop/style/even_odd_spec.rb +75 -0
  107. data/spec/rubocop/cop/style/favor_join_spec.rb +31 -0
  108. data/spec/rubocop/cop/style/favor_sprintf_spec.rb +47 -0
  109. data/spec/rubocop/cop/style/favor_unless_over_negated_if_spec.rb +76 -0
  110. data/spec/rubocop/cop/style/favor_until_over_negated_while_spec.rb +41 -0
  111. data/spec/rubocop/cop/style/final_newline_spec.rb +30 -0
  112. data/spec/rubocop/cop/style/flip_flop_spec.rb +23 -0
  113. data/spec/rubocop/cop/style/for_spec.rb +105 -0
  114. data/spec/rubocop/cop/style/global_vars_spec.rb +34 -0
  115. data/spec/rubocop/cop/style/hash_methods_spec.rb +45 -0
  116. data/spec/rubocop/cop/style/hash_syntax_spec.rb +131 -0
  117. data/spec/rubocop/cop/style/if_unless_modifier_spec.rb +128 -0
  118. data/spec/rubocop/cop/style/if_with_semicolon_spec.rb +19 -0
  119. data/spec/rubocop/cop/style/indentation_consistency_spec.rb +490 -0
  120. data/spec/rubocop/cop/style/indentation_width_spec.rb +470 -0
  121. data/spec/rubocop/cop/style/lambda_call_spec.rb +65 -0
  122. data/spec/rubocop/cop/style/lambda_spec.rb +41 -0
  123. data/spec/rubocop/cop/style/leading_comment_space_spec.rb +64 -0
  124. data/spec/rubocop/cop/style/line_end_concatenation_spec.rb +34 -0
  125. data/spec/rubocop/cop/style/line_length_spec.rb +20 -0
  126. data/spec/rubocop/cop/style/method_call_parentheses_spec.rb +59 -0
  127. data/spec/rubocop/cop/style/method_called_on_do_end_block_spec.rb +60 -0
  128. data/spec/rubocop/cop/style/method_def_parentheses_spec.rb +106 -0
  129. data/spec/rubocop/cop/style/method_length_spec.rb +147 -0
  130. data/spec/rubocop/cop/style/method_name_spec.rb +125 -0
  131. data/spec/rubocop/cop/style/module_function_spec.rb +24 -0
  132. data/spec/rubocop/cop/style/multiline_block_chain_spec.rb +78 -0
  133. data/spec/rubocop/cop/style/multiline_if_then_spec.rb +107 -0
  134. data/spec/rubocop/cop/style/multiline_ternary_operator_spec.rb +18 -0
  135. data/spec/rubocop/cop/style/nested_ternary_operator_spec.rb +21 -0
  136. data/spec/rubocop/cop/style/nil_comparison_spec.rb +30 -0
  137. data/spec/rubocop/cop/style/not_spec.rb +22 -0
  138. data/spec/rubocop/cop/style/numeric_literals_spec.rb +64 -0
  139. data/spec/rubocop/cop/style/one_line_conditional_spec.rb +13 -0
  140. data/spec/rubocop/cop/style/op_method_spec.rb +74 -0
  141. data/spec/rubocop/cop/style/parameter_lists_spec.rb +44 -0
  142. data/spec/rubocop/cop/style/parentheses_around_condition_spec.rb +122 -0
  143. data/spec/rubocop/cop/style/perl_backrefs_spec.rb +17 -0
  144. data/spec/rubocop/cop/style/predicate_name_spec.rb +25 -0
  145. data/spec/rubocop/cop/style/proc_spec.rb +27 -0
  146. data/spec/rubocop/cop/style/raise_args_spec.rb +82 -0
  147. data/spec/rubocop/cop/style/redundant_begin_spec.rb +57 -0
  148. data/spec/rubocop/cop/style/redundant_exception_spec.rb +27 -0
  149. data/spec/rubocop/cop/style/redundant_return_spec.rb +171 -0
  150. data/spec/rubocop/cop/style/redundant_self_spec.rb +142 -0
  151. data/spec/rubocop/cop/style/regexp_literal_spec.rb +83 -0
  152. data/spec/rubocop/cop/style/rescue_modifier_spec.rb +116 -0
  153. data/spec/rubocop/cop/style/semicolon_spec.rb +100 -0
  154. data/spec/rubocop/cop/style/signal_exception_spec.rb +266 -0
  155. data/spec/rubocop/cop/style/single_line_block_params_spec.rb +68 -0
  156. data/spec/rubocop/cop/style/single_line_methods_spec.rb +52 -0
  157. data/spec/rubocop/cop/style/space_after_colon_spec.rb +38 -0
  158. data/spec/rubocop/cop/style/space_after_comma_spec.rb +30 -0
  159. data/spec/rubocop/cop/style/space_after_control_keyword_spec.rb +84 -0
  160. data/spec/rubocop/cop/style/space_after_method_name_spec.rb +70 -0
  161. data/spec/rubocop/cop/style/space_after_not_spec.rb +22 -0
  162. data/spec/rubocop/cop/style/space_after_semicolon_spec.rb +23 -0
  163. data/spec/rubocop/cop/style/space_around_block_braces_spec.rb +283 -0
  164. data/spec/rubocop/cop/style/space_around_equals_in_parameter_default_spec.rb +33 -0
  165. data/spec/rubocop/cop/style/space_around_operators_spec.rb +325 -0
  166. data/spec/rubocop/cop/style/space_before_modifier_keyword_spec.rb +70 -0
  167. data/spec/rubocop/cop/style/space_inside_brackets_spec.rb +52 -0
  168. data/spec/rubocop/cop/style/space_inside_hash_literal_braces_spec.rb +138 -0
  169. data/spec/rubocop/cop/style/space_inside_parens_spec.rb +34 -0
  170. data/spec/rubocop/cop/style/special_global_vars_spec.rb +56 -0
  171. data/spec/rubocop/cop/style/string_literals_spec.rb +212 -0
  172. data/spec/rubocop/cop/style/symbol_array_spec.rb +37 -0
  173. data/spec/rubocop/cop/style/tab_spec.rb +17 -0
  174. data/spec/rubocop/cop/style/trailing_blank_lines_spec.rb +43 -0
  175. data/spec/rubocop/cop/style/trailing_comma_spec.rb +230 -0
  176. data/spec/rubocop/cop/style/trailing_whitespace_spec.rb +30 -0
  177. data/spec/rubocop/cop/style/trivial_accessors_spec.rb +415 -0
  178. data/spec/rubocop/cop/style/unless_else_spec.rb +25 -0
  179. data/spec/rubocop/cop/style/variable_interpolation_spec.rb +47 -0
  180. data/spec/rubocop/cop/style/variable_name_spec.rb +107 -0
  181. data/spec/rubocop/cop/style/when_then_spec.rb +41 -0
  182. data/spec/rubocop/cop/style/while_until_do_spec.rb +53 -0
  183. data/spec/rubocop/cop/style/while_until_modifier_spec.rb +75 -0
  184. data/spec/rubocop/cop/style/word_array_spec.rb +97 -0
  185. data/spec/rubocop/cop/team_spec.rb +156 -0
  186. data/spec/rubocop/cop/util_spec.rb +49 -0
  187. data/spec/rubocop/cop/variable_inspector/assignment_spec.rb +213 -0
  188. data/spec/rubocop/cop/variable_inspector/locatable_spec.rb +734 -0
  189. data/spec/rubocop/cop/variable_inspector/scope_spec.rb +184 -0
  190. data/spec/rubocop/cop/variable_inspector/variable_spec.rb +73 -0
  191. data/spec/rubocop/cop/variable_inspector/variable_table_spec.rb +269 -0
  192. data/spec/rubocop/cop/variable_inspector_spec.rb +29 -0
  193. data/spec/rubocop/file_inspector_spec.rb +78 -0
  194. data/spec/rubocop/formatter/base_formatter_spec.rb +191 -0
  195. data/spec/rubocop/formatter/clang_style_formatter_spec.rb +114 -0
  196. data/spec/rubocop/formatter/colorizable_spec.rb +107 -0
  197. data/spec/rubocop/formatter/disabled_config_formatter_spec.rb +50 -0
  198. data/spec/rubocop/formatter/emacs_style_formatter_spec.rb +62 -0
  199. data/spec/rubocop/formatter/file_list_formatter_spec.rb +33 -0
  200. data/spec/rubocop/formatter/formatter_set_spec.rb +132 -0
  201. data/spec/rubocop/formatter/json_formatter_spec.rb +148 -0
  202. data/spec/rubocop/formatter/offence_count_formatter_spec.rb +52 -0
  203. data/spec/rubocop/formatter/progress_formatter_spec.rb +182 -0
  204. data/spec/rubocop/formatter/simple_text_formatter_spec.rb +123 -0
  205. data/spec/rubocop/options_spec.rb +145 -0
  206. data/spec/rubocop/path_util_spec.rb +42 -0
  207. data/spec/rubocop/processed_source_spec.rb +114 -0
  208. data/spec/rubocop/source_parser_spec.rb +139 -0
  209. data/spec/rubocop/target_finder_spec.rb +180 -0
  210. data/spec/rubocop/token_spec.rb +25 -0
  211. data/spec/spec_helper.rb +136 -0
  212. data/spec/support/ast_helper.rb +15 -0
  213. data/spec/support/file_helper.rb +21 -0
  214. data/spec/support/isolated_environment.rb +34 -0
  215. data/spec/support/mri_syntax_checker.rb +73 -0
  216. data/spec/support/shared_context.rb +22 -0
  217. data/spec/support/shared_examples.rb +33 -0
  218. data/spec/support/statement_modifier_helper.rb +41 -0
  219. 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