rubocop 0.18.1 → 0.19.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of rubocop might be problematic. Click here for more details.

Files changed (398) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +1 -1
  3. data/CHANGELOG.md +65 -1
  4. data/Gemfile +0 -3
  5. data/LICENSE.txt +1 -1
  6. data/README.md +179 -77
  7. data/Rakefile +8 -0
  8. data/config/default.yml +151 -14
  9. data/config/enabled.yml +65 -8
  10. data/lib/rubocop.rb +19 -4
  11. data/lib/rubocop/cli.rb +2 -1
  12. data/lib/rubocop/comment_config.rb +97 -0
  13. data/lib/rubocop/config.rb +1 -1
  14. data/lib/rubocop/config_loader.rb +3 -2
  15. data/lib/rubocop/config_store.rb +6 -2
  16. data/lib/rubocop/cop/commissioner.rb +2 -2
  17. data/lib/rubocop/cop/cop.rb +22 -26
  18. data/lib/rubocop/cop/lint/ambiguous_operator.rb +2 -2
  19. data/lib/rubocop/cop/lint/ambiguous_regexp_literal.rb +1 -1
  20. data/lib/rubocop/cop/lint/assignment_in_condition.rb +1 -1
  21. data/lib/rubocop/cop/lint/block_alignment.rb +6 -6
  22. data/lib/rubocop/cop/lint/condition_position.rb +1 -1
  23. data/lib/rubocop/cop/lint/debugger.rb +1 -1
  24. data/lib/rubocop/cop/lint/deprecated_class_methods.rb +60 -0
  25. data/lib/rubocop/cop/lint/else_layout.rb +1 -1
  26. data/lib/rubocop/cop/lint/empty_ensure.rb +1 -1
  27. data/lib/rubocop/cop/lint/end_alignment.rb +14 -12
  28. data/lib/rubocop/cop/lint/end_in_method.rb +1 -1
  29. data/lib/rubocop/cop/lint/ensure_return.rb +1 -1
  30. data/lib/rubocop/cop/lint/eval.rb +1 -1
  31. data/lib/rubocop/cop/lint/handle_exceptions.rb +1 -1
  32. data/lib/rubocop/cop/lint/literal_in_condition.rb +13 -2
  33. data/lib/rubocop/cop/lint/literal_in_interpolation.rb +28 -0
  34. data/lib/rubocop/cop/lint/loop.rb +4 -4
  35. data/lib/rubocop/cop/lint/parentheses_as_grouped_expression.rb +1 -1
  36. data/lib/rubocop/cop/lint/require_parentheses.rb +6 -6
  37. data/lib/rubocop/cop/lint/rescue_exception.rb +1 -1
  38. data/lib/rubocop/cop/lint/shadowing_outer_local_variable.rb +2 -2
  39. data/lib/rubocop/cop/lint/string_conversion_in_interpolation.rb +30 -0
  40. data/lib/rubocop/cop/lint/syntax.rb +5 -5
  41. data/lib/rubocop/cop/lint/unreachable_code.rb +1 -1
  42. data/lib/rubocop/cop/lint/useless_assignment.rb +5 -5
  43. data/lib/rubocop/cop/lint/useless_comparison.rb +1 -1
  44. data/lib/rubocop/cop/lint/useless_setter_call.rb +1 -1
  45. data/lib/rubocop/cop/lint/void.rb +5 -5
  46. data/lib/rubocop/cop/mixin/autocorrect_alignment.rb +8 -5
  47. data/lib/rubocop/cop/mixin/code_length.rb +2 -2
  48. data/lib/rubocop/cop/mixin/configurable_enforced_style.rb +7 -7
  49. data/lib/rubocop/cop/mixin/configurable_max.rb +1 -1
  50. data/lib/rubocop/cop/mixin/configurable_naming.rb +1 -1
  51. data/lib/rubocop/cop/mixin/if_then_else.rb +1 -1
  52. data/lib/rubocop/cop/mixin/negative_conditional.rb +1 -1
  53. data/lib/rubocop/cop/mixin/parser_diagnostic.rb +2 -2
  54. data/lib/rubocop/cop/mixin/space_after_punctuation.rb +3 -2
  55. data/lib/rubocop/cop/mixin/space_inside.rb +1 -1
  56. data/lib/rubocop/cop/mixin/statement_modifier.rb +1 -0
  57. data/lib/rubocop/cop/mixin/string_help.rb +4 -4
  58. data/lib/rubocop/cop/{offence.rb → offense.rb} +7 -7
  59. data/lib/rubocop/cop/rails/action_filter.rb +73 -0
  60. data/lib/rubocop/cop/rails/default_scope.rb +1 -1
  61. data/lib/rubocop/cop/rails/has_and_belongs_to_many.rb +1 -1
  62. data/lib/rubocop/cop/rails/output.rb +1 -10
  63. data/lib/rubocop/cop/rails/read_attribute.rb +1 -1
  64. data/lib/rubocop/cop/rails/scope_args.rb +33 -0
  65. data/lib/rubocop/cop/rails/validation.rb +1 -1
  66. data/lib/rubocop/cop/style/access_modifier_indentation.rb +1 -1
  67. data/lib/rubocop/cop/style/accessor_method_name.rb +2 -2
  68. data/lib/rubocop/cop/style/alias.rb +2 -2
  69. data/lib/rubocop/cop/style/align_array.rb +1 -1
  70. data/lib/rubocop/cop/style/align_hash.rb +29 -2
  71. data/lib/rubocop/cop/style/align_parameters.rb +16 -2
  72. data/lib/rubocop/cop/style/and_or.rb +2 -2
  73. data/lib/rubocop/cop/style/ascii_comments.rb +1 -1
  74. data/lib/rubocop/cop/style/ascii_identifiers.rb +1 -1
  75. data/lib/rubocop/cop/style/attr.rb +1 -1
  76. data/lib/rubocop/cop/style/begin_block.rb +1 -1
  77. data/lib/rubocop/cop/style/block_comments.rb +1 -1
  78. data/lib/rubocop/cop/style/block_nesting.rb +1 -1
  79. data/lib/rubocop/cop/style/blocks.rb +2 -2
  80. data/lib/rubocop/cop/style/braces_around_hash_parameters.rb +2 -2
  81. data/lib/rubocop/cop/style/case_equality.rb +1 -1
  82. data/lib/rubocop/cop/style/case_indentation.rb +2 -2
  83. data/lib/rubocop/cop/style/character_literal.rb +2 -2
  84. data/lib/rubocop/cop/style/class_and_module_camel_case.rb +1 -1
  85. data/lib/rubocop/cop/style/class_and_module_children.rb +69 -0
  86. data/lib/rubocop/cop/style/class_methods.rb +1 -1
  87. data/lib/rubocop/cop/style/class_vars.rb +3 -3
  88. data/lib/rubocop/cop/style/collection_methods.rb +4 -4
  89. data/lib/rubocop/cop/style/colon_method_call.rb +1 -1
  90. data/lib/rubocop/cop/style/comment_annotation.rb +1 -1
  91. data/lib/rubocop/cop/style/constant_name.rb +1 -1
  92. data/lib/rubocop/cop/style/cyclomatic_complexity.rb +2 -2
  93. data/lib/rubocop/cop/style/def_parentheses.rb +2 -2
  94. data/lib/rubocop/cop/style/documentation.rb +1 -1
  95. data/lib/rubocop/cop/style/dot_position.rb +10 -11
  96. data/lib/rubocop/cop/style/double_negation.rb +40 -0
  97. data/lib/rubocop/cop/style/empty_line_between_defs.rb +8 -1
  98. data/lib/rubocop/cop/style/empty_lines.rb +3 -2
  99. data/lib/rubocop/cop/style/empty_lines_around_access_modifier.rb +1 -1
  100. data/lib/rubocop/cop/style/empty_lines_around_body.rb +1 -1
  101. data/lib/rubocop/cop/style/empty_literal.rb +3 -3
  102. data/lib/rubocop/cop/style/encoding.rb +1 -1
  103. data/lib/rubocop/cop/style/end_block.rb +1 -1
  104. data/lib/rubocop/cop/style/end_of_line.rb +2 -2
  105. data/lib/rubocop/cop/style/even_odd.rb +2 -2
  106. data/lib/rubocop/cop/style/favor_join.rb +1 -1
  107. data/lib/rubocop/cop/style/file_name.rb +29 -0
  108. data/lib/rubocop/cop/style/final_newline.rb +1 -1
  109. data/lib/rubocop/cop/style/flip_flop.rb +2 -2
  110. data/lib/rubocop/cop/style/for.rb +2 -2
  111. data/lib/rubocop/cop/style/format_string.rb +66 -0
  112. data/lib/rubocop/cop/style/global_vars.rb +2 -2
  113. data/lib/rubocop/cop/style/hash_methods.rb +1 -1
  114. data/lib/rubocop/cop/style/hash_syntax.rb +3 -3
  115. data/lib/rubocop/cop/style/if_unless_modifier.rb +2 -1
  116. data/lib/rubocop/cop/style/indent_array.rb +41 -0
  117. data/lib/rubocop/cop/style/indent_hash.rb +119 -0
  118. data/lib/rubocop/cop/style/indentation_consistency.rb +3 -11
  119. data/lib/rubocop/cop/style/indentation_width.rb +44 -23
  120. data/lib/rubocop/cop/style/lambda.rb +2 -2
  121. data/lib/rubocop/cop/style/lambda_call.rb +3 -3
  122. data/lib/rubocop/cop/style/leading_comment_space.rb +1 -1
  123. data/lib/rubocop/cop/style/line_end_concatenation.rb +7 -3
  124. data/lib/rubocop/cop/style/line_length.rb +2 -2
  125. data/lib/rubocop/cop/style/method_call_parentheses.rb +2 -2
  126. data/lib/rubocop/cop/style/method_called_on_do_end_block.rb +2 -2
  127. data/lib/rubocop/cop/style/method_def_parentheses.rb +9 -7
  128. data/lib/rubocop/cop/style/module_function.rb +1 -1
  129. data/lib/rubocop/cop/style/multiline_block_chain.rb +1 -1
  130. data/lib/rubocop/cop/style/multiline_ternary_operator.rb +1 -1
  131. data/lib/rubocop/cop/style/nested_ternary_operator.rb +2 -2
  132. data/lib/rubocop/cop/style/nil_comparison.rb +1 -1
  133. data/lib/rubocop/cop/style/not.rb +1 -1
  134. data/lib/rubocop/cop/style/numeric_literals.rb +5 -5
  135. data/lib/rubocop/cop/style/op_method.rb +2 -2
  136. data/lib/rubocop/cop/style/parameter_lists.rb +1 -1
  137. data/lib/rubocop/cop/style/parentheses_around_condition.rb +5 -4
  138. data/lib/rubocop/cop/style/percent_literal_delimiters.rb +143 -0
  139. data/lib/rubocop/cop/style/perl_backrefs.rb +1 -1
  140. data/lib/rubocop/cop/style/predicate_name.rb +1 -1
  141. data/lib/rubocop/cop/style/proc.rb +1 -1
  142. data/lib/rubocop/cop/style/raise_args.rb +2 -2
  143. data/lib/rubocop/cop/style/redundant_begin.rb +1 -1
  144. data/lib/rubocop/cop/style/redundant_exception.rb +1 -1
  145. data/lib/rubocop/cop/style/redundant_return.rb +1 -1
  146. data/lib/rubocop/cop/style/redundant_self.rb +2 -2
  147. data/lib/rubocop/cop/style/regexp_literal.rb +45 -19
  148. data/lib/rubocop/cop/style/rescue_modifier.rb +1 -1
  149. data/lib/rubocop/cop/style/self_assignment.rb +73 -0
  150. data/lib/rubocop/cop/style/semicolon.rb +12 -8
  151. data/lib/rubocop/cop/style/signal_exception.rb +2 -2
  152. data/lib/rubocop/cop/style/single_line_block_params.rb +1 -1
  153. data/lib/rubocop/cop/style/single_line_methods.rb +38 -1
  154. data/lib/rubocop/cop/style/space_after_colon.rb +3 -3
  155. data/lib/rubocop/cop/style/space_after_comma.rb +1 -1
  156. data/lib/rubocop/cop/style/space_after_control_keyword.rb +1 -1
  157. data/lib/rubocop/cop/style/space_after_method_name.rb +11 -3
  158. data/lib/rubocop/cop/style/space_after_not.rb +1 -1
  159. data/lib/rubocop/cop/style/space_after_semicolon.rb +1 -1
  160. data/lib/rubocop/cop/style/space_around_equals_in_parameter_default.rb +41 -6
  161. data/lib/rubocop/cop/style/space_around_operators.rb +4 -4
  162. data/lib/rubocop/cop/style/space_before_block_braces.rb +63 -0
  163. data/lib/rubocop/cop/style/space_before_modifier_keyword.rb +1 -1
  164. data/lib/rubocop/cop/style/{space_around_block_braces.rb → space_inside_block_braces.rb} +15 -24
  165. data/lib/rubocop/cop/style/space_inside_hash_literal_braces.rb +14 -7
  166. data/lib/rubocop/cop/style/special_global_vars.rb +1 -1
  167. data/lib/rubocop/cop/style/string_literals.rb +1 -1
  168. data/lib/rubocop/cop/style/symbol_array.rb +1 -1
  169. data/lib/rubocop/cop/style/tab.rb +1 -1
  170. data/lib/rubocop/cop/style/trailing_blank_lines.rb +2 -2
  171. data/lib/rubocop/cop/style/trailing_comma.rb +4 -4
  172. data/lib/rubocop/cop/style/trailing_whitespace.rb +1 -1
  173. data/lib/rubocop/cop/style/trivial_accessors.rb +2 -2
  174. data/lib/rubocop/cop/style/unless_else.rb +1 -1
  175. data/lib/rubocop/cop/style/variable_interpolation.rb +1 -1
  176. data/lib/rubocop/cop/style/when_then.rb +1 -1
  177. data/lib/rubocop/cop/style/while_until_do.rb +1 -1
  178. data/lib/rubocop/cop/style/while_until_modifier.rb +2 -1
  179. data/lib/rubocop/cop/style/word_array.rb +2 -2
  180. data/lib/rubocop/cop/team.rb +24 -7
  181. data/lib/rubocop/cop/util.rb +3 -3
  182. data/lib/rubocop/cop/variable_inspector.rb +25 -13
  183. data/lib/rubocop/cop/variable_inspector/assignment.rb +1 -1
  184. data/lib/rubocop/cop/variable_inspector/reference.rb +1 -1
  185. data/lib/rubocop/cop/variable_inspector/scope.rb +1 -1
  186. data/lib/rubocop/cop/variable_inspector/variable.rb +2 -2
  187. data/lib/rubocop/cop/variable_inspector/variable_table.rb +1 -1
  188. data/lib/rubocop/file_inspector.rb +12 -13
  189. data/lib/rubocop/formatter/base_formatter.rb +4 -4
  190. data/lib/rubocop/formatter/clang_style_formatter.rb +2 -2
  191. data/lib/rubocop/formatter/disabled_config_formatter.rb +12 -12
  192. data/lib/rubocop/formatter/emacs_style_formatter.rb +3 -2
  193. data/lib/rubocop/formatter/file_list_formatter.rb +4 -4
  194. data/lib/rubocop/formatter/formatter_set.rb +2 -1
  195. data/lib/rubocop/formatter/fuubar_style_formatter.rb +76 -0
  196. data/lib/rubocop/formatter/json_formatter.rb +17 -16
  197. data/lib/rubocop/formatter/offense_count_formatter.rb +54 -0
  198. data/lib/rubocop/formatter/progress_formatter.rb +16 -16
  199. data/lib/rubocop/formatter/simple_text_formatter.rb +25 -25
  200. data/lib/rubocop/options.rb +8 -7
  201. data/lib/rubocop/processed_source.rb +3 -2
  202. data/lib/rubocop/source_parser.rb +1 -59
  203. data/lib/rubocop/version.rb +3 -3
  204. data/relnotes/0.19.0.md +70 -0
  205. data/rubocop-todo.yml +6 -6
  206. data/rubocop.gemspec +2 -1
  207. data/spec/rubocop/cli_spec.rb +431 -268
  208. data/spec/rubocop/comment_config_spec.rb +103 -0
  209. data/spec/rubocop/config_loader_spec.rb +4 -4
  210. data/spec/rubocop/cop/commissioner_spec.rb +7 -7
  211. data/spec/rubocop/cop/cop_spec.rb +17 -17
  212. data/spec/rubocop/cop/lint/ambiguous_operator_spec.rb +16 -16
  213. data/spec/rubocop/cop/lint/ambiguous_regexp_literal_spec.rb +5 -5
  214. data/spec/rubocop/cop/lint/assignment_in_condition_spec.rb +19 -19
  215. data/spec/rubocop/cop/lint/block_alignment_spec.rb +52 -52
  216. data/spec/rubocop/cop/lint/condition_position_spec.rb +7 -7
  217. data/spec/rubocop/cop/lint/debugger_spec.rb +10 -10
  218. data/spec/rubocop/cop/lint/deprecated_class_methods_spec.rb +33 -0
  219. data/spec/rubocop/cop/lint/else_layout_spec.rb +7 -7
  220. data/spec/rubocop/cop/lint/empty_ensure_spec.rb +4 -4
  221. data/spec/rubocop/cop/lint/end_alignment_spec.rb +33 -34
  222. data/spec/rubocop/cop/lint/end_in_method_spec.rb +5 -5
  223. data/spec/rubocop/cop/lint/ensure_return_spec.rb +4 -4
  224. data/spec/rubocop/cop/lint/eval_spec.rb +8 -8
  225. data/spec/rubocop/cop/lint/handle_exceptions_spec.rb +4 -4
  226. data/spec/rubocop/cop/lint/invalid_character_literal_spec.rb +3 -3
  227. data/spec/rubocop/cop/lint/literal_in_condition_spec.rb +65 -10
  228. data/spec/rubocop/cop/lint/literal_in_interpolation_spec.rb +21 -0
  229. data/spec/rubocop/cop/lint/loop_spec.rb +6 -6
  230. data/spec/rubocop/cop/lint/parentheses_as_grouped_expression_spec.rb +14 -14
  231. data/spec/rubocop/cop/lint/require_parentheses_spec.rb +15 -15
  232. data/spec/rubocop/cop/lint/rescue_exception_spec.rb +21 -21
  233. data/spec/rubocop/cop/lint/shadowing_outer_local_variable_spec.rb +16 -16
  234. data/spec/rubocop/cop/lint/string_conversion_in_interpolation_spec.rb +27 -0
  235. data/spec/rubocop/cop/lint/syntax_spec.rb +11 -11
  236. data/spec/rubocop/cop/lint/unreachable_code_spec.rb +8 -8
  237. data/spec/rubocop/cop/lint/useless_assignment_spec.rb +207 -169
  238. data/spec/rubocop/cop/lint/useless_comparison_spec.rb +5 -5
  239. data/spec/rubocop/cop/lint/useless_else_without_rescue_spec.rb +4 -4
  240. data/spec/rubocop/cop/lint/useless_setter_call_spec.rb +17 -17
  241. data/spec/rubocop/cop/lint/void_spec.rb +8 -8
  242. data/spec/rubocop/cop/{offence_spec.rb → offense_spec.rb} +17 -17
  243. data/spec/rubocop/cop/rails/action_filter_spec.rb +69 -0
  244. data/spec/rubocop/cop/rails/default_scope_spec.rb +9 -9
  245. data/spec/rubocop/cop/rails/has_and_belongs_to_many_spec.rb +2 -2
  246. data/spec/rubocop/cop/rails/output_spec.rb +8 -18
  247. data/spec/rubocop/cop/rails/read_attribute_spec.rb +2 -2
  248. data/spec/rubocop/cop/rails/scope_args_spec.rb +25 -0
  249. data/spec/rubocop/cop/rails/validation_spec.rb +3 -3
  250. data/spec/rubocop/cop/style/access_modifier_indentation_spec.rb +38 -38
  251. data/spec/rubocop/cop/style/accessor_method_name_spec.rb +14 -14
  252. data/spec/rubocop/cop/style/alias_spec.rb +11 -11
  253. data/spec/rubocop/cop/style/align_array_spec.rb +23 -7
  254. data/spec/rubocop/cop/style/align_hash_spec.rb +111 -30
  255. data/spec/rubocop/cop/style/align_parameters_spec.rb +260 -187
  256. data/spec/rubocop/cop/style/and_or_spec.rb +6 -6
  257. data/spec/rubocop/cop/style/ascii_comments_spec.rb +3 -3
  258. data/spec/rubocop/cop/style/ascii_identifiers_spec.rb +5 -5
  259. data/spec/rubocop/cop/style/attr_spec.rb +2 -2
  260. data/spec/rubocop/cop/style/begin_block_spec.rb +2 -2
  261. data/spec/rubocop/cop/style/block_comments_spec.rb +3 -3
  262. data/spec/rubocop/cop/style/block_nesting_spec.rb +26 -26
  263. data/spec/rubocop/cop/style/blocks_spec.rb +8 -8
  264. data/spec/rubocop/cop/style/braces_around_hash_parameters_spec.rb +8 -8
  265. data/spec/rubocop/cop/style/case_equality_spec.rb +2 -2
  266. data/spec/rubocop/cop/style/case_indentation_spec.rb +21 -21
  267. data/spec/rubocop/cop/style/character_literal_spec.rb +6 -6
  268. data/spec/rubocop/cop/style/class_and_module_camel_case_spec.rb +4 -4
  269. data/spec/rubocop/cop/style/class_and_module_children_spec.rb +129 -0
  270. data/spec/rubocop/cop/style/class_length_spec.rb +9 -9
  271. data/spec/rubocop/cop/style/class_methods_spec.rb +8 -8
  272. data/spec/rubocop/cop/style/class_vars_spec.rb +4 -4
  273. data/spec/rubocop/cop/style/collection_methods_spec.rb +6 -6
  274. data/spec/rubocop/cop/style/colon_method_call_spec.rb +16 -16
  275. data/spec/rubocop/cop/style/comment_annotation_spec.rb +16 -16
  276. data/spec/rubocop/cop/style/constant_name_spec.rb +12 -12
  277. data/spec/rubocop/cop/style/cyclomatic_complexity_spec.rb +16 -16
  278. data/spec/rubocop/cop/style/def_with_parentheses_spec.rb +6 -6
  279. data/spec/rubocop/cop/style/documentation_spec.rb +14 -14
  280. data/spec/rubocop/cop/style/dot_position_spec.rb +23 -26
  281. data/spec/rubocop/cop/style/double_negation_spec.rb +22 -0
  282. data/spec/rubocop/cop/style/empty_line_between_defs_spec.rb +22 -14
  283. data/spec/rubocop/cop/style/empty_lines_around_access_modifier_spec.rb +4 -4
  284. data/spec/rubocop/cop/style/empty_lines_around_body_spec.rb +20 -20
  285. data/spec/rubocop/cop/style/empty_lines_spec.rb +17 -6
  286. data/spec/rubocop/cop/style/empty_literal_spec.rb +20 -20
  287. data/spec/rubocop/cop/style/encoding_spec.rb +5 -5
  288. data/spec/rubocop/cop/style/end_block_spec.rb +2 -2
  289. data/spec/rubocop/cop/style/end_of_line_spec.rb +4 -4
  290. data/spec/rubocop/cop/style/even_odd_spec.rb +18 -18
  291. data/spec/rubocop/cop/style/favor_join_spec.rb +7 -7
  292. data/spec/rubocop/cop/style/favor_unless_over_negated_if_spec.rb +7 -7
  293. data/spec/rubocop/cop/style/favor_until_over_negated_while_spec.rb +3 -3
  294. data/spec/rubocop/cop/style/file_name_spec.rb +71 -0
  295. data/spec/rubocop/cop/style/final_newline_spec.rb +4 -4
  296. data/spec/rubocop/cop/style/flip_flop_spec.rb +4 -4
  297. data/spec/rubocop/cop/style/for_spec.rb +13 -13
  298. data/spec/rubocop/cop/style/format_string_spec.rb +136 -0
  299. data/spec/rubocop/cop/style/global_vars_spec.rb +7 -7
  300. data/spec/rubocop/cop/style/hash_methods_spec.rb +6 -6
  301. data/spec/rubocop/cop/style/hash_syntax_spec.rb +11 -11
  302. data/spec/rubocop/cop/style/if_unless_modifier_spec.rb +29 -11
  303. data/spec/rubocop/cop/style/if_with_semicolon_spec.rb +1 -1
  304. data/spec/rubocop/cop/style/indent_array_spec.rb +136 -0
  305. data/spec/rubocop/cop/style/indent_hash_spec.rb +238 -0
  306. data/spec/rubocop/cop/style/indentation_consistency_spec.rb +69 -49
  307. data/spec/rubocop/cop/style/indentation_width_spec.rb +264 -128
  308. data/spec/rubocop/cop/style/lambda_call_spec.rb +14 -14
  309. data/spec/rubocop/cop/style/lambda_spec.rb +7 -7
  310. data/spec/rubocop/cop/style/leading_comment_space_spec.rb +15 -15
  311. data/spec/rubocop/cop/style/line_end_concatenation_spec.rb +11 -4
  312. data/spec/rubocop/cop/style/line_length_spec.rb +5 -5
  313. data/spec/rubocop/cop/style/method_call_parentheses_spec.rb +5 -5
  314. data/spec/rubocop/cop/style/method_called_on_do_end_block_spec.rb +9 -9
  315. data/spec/rubocop/cop/style/method_def_parentheses_spec.rb +19 -19
  316. data/spec/rubocop/cop/style/method_length_spec.rb +17 -17
  317. data/spec/rubocop/cop/style/method_name_spec.rb +21 -21
  318. data/spec/rubocop/cop/style/module_function_spec.rb +3 -3
  319. data/spec/rubocop/cop/style/multiline_block_chain_spec.rb +13 -13
  320. data/spec/rubocop/cop/style/multiline_if_then_spec.rb +10 -10
  321. data/spec/rubocop/cop/style/multiline_ternary_operator_spec.rb +3 -3
  322. data/spec/rubocop/cop/style/nested_ternary_operator_spec.rb +3 -3
  323. data/spec/rubocop/cop/style/nil_comparison_spec.rb +7 -7
  324. data/spec/rubocop/cop/style/not_spec.rb +6 -11
  325. data/spec/rubocop/cop/style/numeric_literals_spec.rb +8 -8
  326. data/spec/rubocop/cop/style/one_line_conditional_spec.rb +1 -1
  327. data/spec/rubocop/cop/style/op_method_spec.rb +13 -13
  328. data/spec/rubocop/cop/style/parameter_lists_spec.rb +6 -6
  329. data/spec/rubocop/cop/style/parentheses_around_condition_spec.rb +11 -10
  330. data/spec/rubocop/cop/style/percent_literal_delimiters_spec.rb +250 -0
  331. data/spec/rubocop/cop/style/perl_backrefs_spec.rb +2 -2
  332. data/spec/rubocop/cop/style/predicate_name_spec.rb +3 -3
  333. data/spec/rubocop/cop/style/proc_spec.rb +4 -4
  334. data/spec/rubocop/cop/style/raise_args_spec.rb +20 -20
  335. data/spec/rubocop/cop/style/redundant_begin_spec.rb +6 -6
  336. data/spec/rubocop/cop/style/redundant_exception_spec.rb +6 -6
  337. data/spec/rubocop/cop/style/redundant_return_spec.rb +22 -22
  338. data/spec/rubocop/cop/style/redundant_self_spec.rb +14 -14
  339. data/spec/rubocop/cop/style/regexp_literal_spec.rb +88 -67
  340. data/spec/rubocop/cop/style/rescue_modifier_spec.rb +17 -17
  341. data/spec/rubocop/cop/style/self_assignment_spec.rb +43 -0
  342. data/spec/rubocop/cop/style/semicolon_spec.rb +31 -17
  343. data/spec/rubocop/cop/style/signal_exception_spec.rb +29 -29
  344. data/spec/rubocop/cop/style/single_line_block_params_spec.rb +6 -6
  345. data/spec/rubocop/cop/style/single_line_methods_spec.rb +44 -6
  346. data/spec/rubocop/cop/style/space_after_colon_spec.rb +1 -1
  347. data/spec/rubocop/cop/style/space_after_comma_spec.rb +3 -3
  348. data/spec/rubocop/cop/style/space_after_control_keyword_spec.rb +12 -12
  349. data/spec/rubocop/cop/style/space_after_method_name_spec.rb +8 -8
  350. data/spec/rubocop/cop/style/space_after_not_spec.rb +3 -3
  351. data/spec/rubocop/cop/style/space_after_semicolon_spec.rb +1 -1
  352. data/spec/rubocop/cop/style/space_around_equals_in_parameter_default_spec.rb +63 -21
  353. data/spec/rubocop/cop/style/space_around_operators_spec.rb +24 -24
  354. data/spec/rubocop/cop/style/space_before_block_braces_spec.rb +72 -0
  355. data/spec/rubocop/cop/style/space_before_modifier_keyword_spec.rb +4 -4
  356. data/spec/rubocop/cop/style/{space_around_block_braces_spec.rb → space_inside_block_braces_spec.rb} +39 -41
  357. data/spec/rubocop/cop/style/space_inside_brackets_spec.rb +1 -1
  358. data/spec/rubocop/cop/style/space_inside_hash_literal_braces_spec.rb +15 -15
  359. data/spec/rubocop/cop/style/space_inside_parens_spec.rb +1 -1
  360. data/spec/rubocop/cop/style/special_global_vars_spec.rb +10 -10
  361. data/spec/rubocop/cop/style/string_literals_spec.rb +31 -31
  362. data/spec/rubocop/cop/style/symbol_array_spec.rb +9 -9
  363. data/spec/rubocop/cop/style/tab_spec.rb +3 -3
  364. data/spec/rubocop/cop/style/trailing_blank_lines_spec.rb +3 -3
  365. data/spec/rubocop/cop/style/trailing_comma_spec.rb +32 -32
  366. data/spec/rubocop/cop/style/trailing_whitespace_spec.rb +5 -5
  367. data/spec/rubocop/cop/style/trivial_accessors_spec.rb +39 -39
  368. data/spec/rubocop/cop/style/unless_else_spec.rb +1 -1
  369. data/spec/rubocop/cop/style/variable_interpolation_spec.rb +12 -12
  370. data/spec/rubocop/cop/style/variable_name_spec.rb +21 -21
  371. data/spec/rubocop/cop/style/when_then_spec.rb +1 -1
  372. data/spec/rubocop/cop/style/while_until_do_spec.rb +8 -8
  373. data/spec/rubocop/cop/style/while_until_modifier_spec.rb +25 -7
  374. data/spec/rubocop/cop/style/word_array_spec.rb +23 -23
  375. data/spec/rubocop/cop/team_spec.rb +14 -14
  376. data/spec/rubocop/file_inspector_spec.rb +14 -12
  377. data/spec/rubocop/formatter/base_formatter_spec.rb +19 -19
  378. data/spec/rubocop/formatter/clang_style_formatter_spec.rb +14 -14
  379. data/spec/rubocop/formatter/disabled_config_formatter_spec.rb +7 -7
  380. data/spec/rubocop/formatter/emacs_style_formatter_spec.rb +7 -7
  381. data/spec/rubocop/formatter/file_list_formatter_spec.rb +4 -4
  382. data/spec/rubocop/formatter/fuubar_style_formatter_spec.rb +129 -0
  383. data/spec/rubocop/formatter/json_formatter_spec.rb +23 -19
  384. data/spec/rubocop/formatter/offense_count_formatter_spec.rb +77 -0
  385. data/spec/rubocop/formatter/progress_formatter_spec.rb +27 -27
  386. data/spec/rubocop/formatter/simple_text_formatter_spec.rb +16 -16
  387. data/spec/rubocop/options_spec.rb +7 -8
  388. data/spec/rubocop/source_parser_spec.rb +0 -54
  389. data/spec/spec_helper.rb +11 -7
  390. data/spec/support/file_helper.rb +1 -1
  391. data/spec/support/mri_syntax_checker.rb +4 -4
  392. data/spec/support/shared_examples.rb +6 -6
  393. data/spec/support/statement_modifier_helper.rb +3 -3
  394. metadata +76 -16
  395. data/lib/rubocop/cop/style/favor_sprintf.rb +0 -26
  396. data/lib/rubocop/formatter/offence_count_formatter.rb +0 -49
  397. data/spec/rubocop/cop/style/favor_sprintf_spec.rb +0 -47
  398. data/spec/rubocop/formatter/offence_count_formatter_spec.rb +0 -52
@@ -0,0 +1,136 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Rubocop::Cop::Style::FormatString, :config do
6
+ subject(:cop) { described_class.new(config) }
7
+
8
+ context 'when enforced style is sprintf' do
9
+ let(:cop_config) { { 'EnforcedStyle' => 'sprintf' } }
10
+ it 'registers an offense for a string followed by something' do
11
+ inspect_source(cop,
12
+ ['puts "%d" % 10'])
13
+ expect(cop.offenses.size).to eq(1)
14
+ expect(cop.messages)
15
+ .to eq(['Favor sprintf over String#%.'])
16
+ end
17
+
18
+ it 'registers an offense for something followed by an array' do
19
+ inspect_source(cop,
20
+ ['puts x % [10, 11]'])
21
+ expect(cop.offenses.size).to eq(1)
22
+ expect(cop.messages)
23
+ .to eq(['Favor sprintf over String#%.'])
24
+ end
25
+
26
+ it 'does not register an offense for numbers' do
27
+ inspect_source(cop,
28
+ ['puts 10 % 4'])
29
+ expect(cop.offenses).to be_empty
30
+ end
31
+
32
+ it 'does not register an offense for ambiguous cases' do
33
+ inspect_source(cop,
34
+ ['puts x % 4'])
35
+ expect(cop.offenses).to be_empty
36
+
37
+ inspect_source(cop,
38
+ ['puts x % Y'])
39
+ expect(cop.offenses).to be_empty
40
+ end
41
+
42
+ it 'works if the first operand contains embedded expressions' do
43
+ inspect_source(cop,
44
+ ['puts "#{x * 5} %d #{@test}" % 10'])
45
+ expect(cop.offenses.size).to eq(1)
46
+ expect(cop.messages)
47
+ .to eq(['Favor sprintf over String#%.'])
48
+ end
49
+
50
+ it 'registers an offense for format' do
51
+ inspect_source(cop,
52
+ ['format(something, a, b)'])
53
+ expect(cop.offenses.size).to eq(1)
54
+ expect(cop.messages)
55
+ .to eq(['Favor sprintf over format.'])
56
+ end
57
+ end
58
+
59
+ context 'when enforced style is format' do
60
+ let(:cop_config) { { 'EnforcedStyle' => 'format' } }
61
+
62
+ it 'registers an offense for a string followed by something' do
63
+ inspect_source(cop,
64
+ ['puts "%d" % 10'])
65
+ expect(cop.offenses.size).to eq(1)
66
+ expect(cop.messages)
67
+ .to eq(['Favor format over String#%.'])
68
+ end
69
+
70
+ it 'registers an offense for something followed by an array' do
71
+ inspect_source(cop,
72
+ ['puts x % [10, 11]'])
73
+ expect(cop.offenses.size).to eq(1)
74
+ expect(cop.messages)
75
+ .to eq(['Favor format over String#%.'])
76
+ end
77
+
78
+ it 'does not register an offense for numbers' do
79
+ inspect_source(cop,
80
+ ['puts 10 % 4'])
81
+ expect(cop.offenses).to be_empty
82
+ end
83
+
84
+ it 'does not register an offense for ambiguous cases' do
85
+ inspect_source(cop,
86
+ ['puts x % 4'])
87
+ expect(cop.offenses).to be_empty
88
+
89
+ inspect_source(cop,
90
+ ['puts x % Y'])
91
+ expect(cop.offenses).to be_empty
92
+ end
93
+
94
+ it 'works if the first operand contains embedded expressions' do
95
+ inspect_source(cop,
96
+ ['puts "#{x * 5} %d #{@test}" % 10'])
97
+ expect(cop.offenses.size).to eq(1)
98
+ expect(cop.messages)
99
+ .to eq(['Favor format over String#%.'])
100
+ end
101
+
102
+ it 'registers an offense for sprintf' do
103
+ inspect_source(cop,
104
+ ['sprintf(something, a, b)'])
105
+ expect(cop.offenses.size).to eq(1)
106
+ expect(cop.messages)
107
+ .to eq(['Favor format over sprintf.'])
108
+ end
109
+ end
110
+
111
+ context 'when enforced style is percent' do
112
+ let(:cop_config) { { 'EnforcedStyle' => 'percent' } }
113
+
114
+ it 'registers an offense for format' do
115
+ inspect_source(cop,
116
+ ['format(something, a, b)'])
117
+ expect(cop.offenses.size).to eq(1)
118
+ expect(cop.messages)
119
+ .to eq(['Favor String#% over format.'])
120
+ end
121
+
122
+ it 'registers an offense for sprintf' do
123
+ inspect_source(cop,
124
+ ['sprintf(something, a, b)'])
125
+ expect(cop.offenses.size).to eq(1)
126
+ expect(cop.messages)
127
+ .to eq(['Favor String#% over sprintf.'])
128
+ end
129
+
130
+ it 'accepts String#%' do
131
+ inspect_source(cop,
132
+ ['puts "%d" % 10'])
133
+ expect(cop.offenses).to be_empty
134
+ end
135
+ end
136
+ end
@@ -10,25 +10,25 @@ describe Rubocop::Cop::Style::GlobalVars, :config do
10
10
  subject(:cop) { described_class.new(config) }
11
11
  let(:cop_config) { cop_config }
12
12
 
13
- it 'registers an offence for $custom' do
13
+ it 'registers an offense for $custom' do
14
14
  inspect_source(cop, ['puts $custom'])
15
- expect(cop.offences.size).to eq(1)
15
+ expect(cop.offenses.size).to eq(1)
16
16
  end
17
17
 
18
18
  it 'allows user whitelisted variables' do
19
19
  inspect_source(cop, ['puts $allowed'])
20
- expect(cop.offences).to be_empty
20
+ expect(cop.offenses).to be_empty
21
21
  end
22
22
 
23
23
  described_class::BUILT_IN_VARS.each do |var|
24
- it "does not register an offence for built-in variable #{var}" do
24
+ it "does not register an offense for built-in variable #{var}" do
25
25
  inspect_source(cop, ["puts #{var}"])
26
- expect(cop.offences).to be_empty
26
+ expect(cop.offenses).to be_empty
27
27
  end
28
28
  end
29
29
 
30
- it 'does not register an offence for backrefs like $1' do
30
+ it 'does not register an offense for backrefs like $1' do
31
31
  inspect_source(cop, ['puts $1'])
32
- expect(cop.offences).to be_empty
32
+ expect(cop.offenses).to be_empty
33
33
  end
34
34
  end
@@ -5,10 +5,10 @@ require 'spec_helper'
5
5
  describe Rubocop::Cop::Style::HashMethods do
6
6
  subject(:cop) { described_class.new }
7
7
 
8
- it 'registers an offence for has_key? with one arg' do
8
+ it 'registers an offense for has_key? with one arg' do
9
9
  inspect_source(cop,
10
10
  ['o.has_key?(o)'])
11
- expect(cop.offences.size).to eq(1)
11
+ expect(cop.offenses.size).to eq(1)
12
12
  expect(cop.messages)
13
13
  .to eq(['has_key? is deprecated in favor of key?.'])
14
14
  end
@@ -16,13 +16,13 @@ describe Rubocop::Cop::Style::HashMethods do
16
16
  it 'accepts has_key? with no args' do
17
17
  inspect_source(cop,
18
18
  ['o.has_key?'])
19
- expect(cop.offences).to be_empty
19
+ expect(cop.offenses).to be_empty
20
20
  end
21
21
 
22
- it 'registers an offence for has_value? with one arg' do
22
+ it 'registers an offense for has_value? with one arg' do
23
23
  inspect_source(cop,
24
24
  ['o.has_value?(o)'])
25
- expect(cop.offences.size).to eq(1)
25
+ expect(cop.offenses.size).to eq(1)
26
26
  expect(cop.messages)
27
27
  .to eq(['has_value? is deprecated in favor of value?.'])
28
28
  end
@@ -30,7 +30,7 @@ describe Rubocop::Cop::Style::HashMethods do
30
30
  it 'accepts has_value? with no args' do
31
31
  inspect_source(cop,
32
32
  ['o.has_value?'])
33
- expect(cop.offences).to be_empty
33
+ expect(cop.offenses).to be_empty
34
34
  end
35
35
 
36
36
  it 'auto-corrects has_key? with key?' do
@@ -14,20 +14,20 @@ describe Rubocop::Cop::Style::HashSyntax, :config do
14
14
  'SpaceAroundOperators' => { 'Enabled' => true })
15
15
  end
16
16
 
17
- it 'registers offence for hash rocket syntax when new is possible' do
17
+ it 'registers offense for hash rocket syntax when new is possible' do
18
18
  inspect_source(cop, ['x = { :a => 0 }'])
19
19
  expect(cop.messages).to eq(['Use the new Ruby 1.9 hash syntax.'])
20
- expect(cop.config_to_allow_offences)
20
+ expect(cop.config_to_allow_offenses)
21
21
  .to eq('EnforcedStyle' => 'hash_rockets')
22
22
  end
23
23
 
24
- it 'registers an offence for mixed syntax when new is possible' do
24
+ it 'registers an offense for mixed syntax when new is possible' do
25
25
  inspect_source(cop, ['x = { :a => 0, b: 1 }'])
26
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)
27
+ expect(cop.config_to_allow_offenses).to eq('Enabled' => false)
28
28
  end
29
29
 
30
- it 'registers an offence for hash rockets in method calls' do
30
+ it 'registers an offense for hash rockets in method calls' do
31
31
  inspect_source(cop, ['func(3, :a => 0)'])
32
32
  expect(cop.messages).to eq(['Use the new Ruby 1.9 hash syntax.'])
33
33
  end
@@ -52,7 +52,7 @@ describe Rubocop::Cop::Style::HashSyntax, :config do
52
52
  expect(cop.messages).to be_empty
53
53
  end
54
54
 
55
- it 'registers offence when keys start with an uppercase letter' do
55
+ it 'registers offense when keys start with an uppercase letter' do
56
56
  inspect_source(cop, ['x = { :A => 0 }'])
57
57
  expect(cop.messages).to eq(['Use the new Ruby 1.9 hash syntax.'])
58
58
  end
@@ -96,19 +96,19 @@ describe Rubocop::Cop::Style::HashSyntax, :config do
96
96
  context 'configured to enforce hash rockets style' do
97
97
  let(:cop_config) { { 'EnforcedStyle' => 'hash_rockets' } }
98
98
 
99
- it 'registers offence for Ruby 1.9 style' do
99
+ it 'registers offense for Ruby 1.9 style' do
100
100
  inspect_source(cop, ['x = { a: 0 }'])
101
101
  expect(cop.messages).to eq(['Always use hash rockets in hashes.'])
102
- expect(cop.config_to_allow_offences).to eq('EnforcedStyle' => 'ruby19')
102
+ expect(cop.config_to_allow_offenses).to eq('EnforcedStyle' => 'ruby19')
103
103
  end
104
104
 
105
- it 'registers an offence for mixed syntax' do
105
+ it 'registers an offense for mixed syntax' do
106
106
  inspect_source(cop, ['x = { :a => 0, b: 1 }'])
107
107
  expect(cop.messages).to eq(['Always use hash rockets in hashes.'])
108
- expect(cop.config_to_allow_offences).to eq('Enabled' => false)
108
+ expect(cop.config_to_allow_offenses).to eq('Enabled' => false)
109
109
  end
110
110
 
111
- it 'registers an offence for 1.9 style in method calls' do
111
+ it 'registers an offense for 1.9 style in method calls' do
112
112
  inspect_source(cop, ['func(3, a: 0)'])
113
113
  expect(cop.messages).to eq(['Always use hash rockets in hashes.'])
114
114
  end
@@ -11,7 +11,7 @@ describe Rubocop::Cop::Style::IfUnlessModifier do
11
11
  Rubocop::Config.new(hash)
12
12
  end
13
13
 
14
- it 'registers an offence for multiline if that fits on one line' do
14
+ it 'registers an offense for multiline if that fits on one line' do
15
15
  # This if statement fits exactly on one line if written as a
16
16
  # modifier.
17
17
  condition = 'a' * 38
@@ -24,11 +24,11 @@ describe Rubocop::Cop::Style::IfUnlessModifier do
24
24
  ' end'])
25
25
  expect(cop.messages).to eq(
26
26
  ['Favor modifier if usage when you have a single-line' \
27
- ' body. Another good alternative is the usage of control flow' +
27
+ ' body. Another good alternative is the usage of control flow' \
28
28
  ' &&/||.'])
29
29
  end
30
30
 
31
- it 'registers an offence for short multiline if near an else etc' do
31
+ it 'registers an offense for short multiline if near an else etc' do
32
32
  inspect_source(cop,
33
33
  ['if x',
34
34
  ' y',
@@ -43,7 +43,7 @@ describe Rubocop::Cop::Style::IfUnlessModifier do
43
43
  'if a',
44
44
  ' b',
45
45
  'end'])
46
- expect(cop.offences.size).to eq(1)
46
+ expect(cop.offenses.size).to eq(1)
47
47
  end
48
48
 
49
49
  it "accepts multiline if that doesn't fit on one line" do
@@ -54,13 +54,13 @@ describe Rubocop::Cop::Style::IfUnlessModifier do
54
54
  check_short_multiline(cop, 'if')
55
55
  end
56
56
 
57
- it 'registers an offence for multiline unless that fits on one line' do
57
+ it 'registers an offense for multiline unless that fits on one line' do
58
58
  inspect_source(cop, ['unless a',
59
59
  ' b',
60
60
  'end'])
61
61
  expect(cop.messages).to eq(
62
62
  ['Favor modifier unless usage when you have a single-line' \
63
- ' body. Another good alternative is the usage of control flow' +
63
+ ' body. Another good alternative is the usage of control flow' \
64
64
  ' &&/||.'])
65
65
  end
66
66
 
@@ -68,7 +68,7 @@ describe Rubocop::Cop::Style::IfUnlessModifier do
68
68
  inspect_source(cop, ['unless a',
69
69
  ' b # A comment',
70
70
  'end'])
71
- expect(cop.offences).to be_empty
71
+ expect(cop.offenses).to be_empty
72
72
  end
73
73
 
74
74
  it 'accepts if-else-end' do
@@ -89,7 +89,7 @@ describe Rubocop::Cop::Style::IfUnlessModifier do
89
89
  'elsif test2',
90
90
  ' something_else',
91
91
  'end'])
92
- expect(cop.offences).to be_empty
92
+ expect(cop.offenses).to be_empty
93
93
  end
94
94
 
95
95
  context 'with implicit match conditional' do
@@ -106,11 +106,11 @@ describe Rubocop::Cop::Style::IfUnlessModifier do
106
106
  context 'when a multiline if fits on one line' do
107
107
  let(:conditional) { "/#{'a' * 36}/" }
108
108
 
109
- it 'registers an offence' do
109
+ it 'registers an offense' do
110
110
  expect(" #{body} if #{conditional}".length).to eq(79)
111
111
 
112
112
  inspect_source(cop, source)
113
- expect(cop.offences.size).to eq(1)
113
+ expect(cop.offenses.size).to eq(1)
114
114
  end
115
115
  end
116
116
 
@@ -121,7 +121,25 @@ describe Rubocop::Cop::Style::IfUnlessModifier do
121
121
  expect(" #{body} if #{conditional}".length).to eq(80)
122
122
 
123
123
  inspect_source(cop, source)
124
- expect(cop.offences).to be_empty
124
+ expect(cop.offenses).to be_empty
125
+ end
126
+ end
127
+
128
+ context 'when the maximum line length is specified by the cop itself' do
129
+ let(:config) do
130
+ hash = {
131
+ 'LineLength' => { 'Max' => 100 },
132
+ 'IfUnlessModifier' => { 'MaxLineLength' => 79 }
133
+ }
134
+ Rubocop::Config.new(hash)
135
+ end
136
+
137
+ it "accepts multiline if that doesn't fit on one line" do
138
+ check_too_long(cop, 'if')
139
+ end
140
+
141
+ it "accepts multiline unless that doesn't fit on one line" do
142
+ check_too_long(cop, 'unless')
125
143
  end
126
144
  end
127
145
  end
@@ -5,7 +5,7 @@ require 'spec_helper'
5
5
  describe Rubocop::Cop::Style::IfWithSemicolon do
6
6
  subject(:cop) { described_class.new }
7
7
 
8
- it 'registers an offence for one line if/;/end' do
8
+ it 'registers an offense for one line if/;/end' do
9
9
  inspect_source(cop, ['if cond; run else dont end'])
10
10
  expect(cop.messages).to eq(
11
11
  ['Never use if x; Use the ternary operator instead.'])
@@ -0,0 +1,136 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Rubocop::Cop::Style::IndentArray do
6
+ subject(:cop) { described_class.new }
7
+
8
+ it 'accepts multi-assignments' do
9
+ inspect_source(cop, 'a, b = b, a')
10
+ expect(cop.offenses).to be_empty
11
+ end
12
+
13
+ it 'accepts correctly indented only element' do
14
+ inspect_source(cop,
15
+ ['a << [',
16
+ ' 1',
17
+ ']'])
18
+ expect(cop.offenses).to be_empty
19
+ end
20
+
21
+ it 'registers an offense for incorrectly indented only element' do
22
+ inspect_source(cop,
23
+ ['a << [',
24
+ ' 1',
25
+ ']'])
26
+ expect(cop.highlights).to eq(['1'])
27
+ end
28
+
29
+ it 'auto-corrects incorrectly indented only element' do
30
+ corrected = autocorrect_source(cop, ['a << [',
31
+ ' 1',
32
+ ']'])
33
+ expect(corrected).to eq ['a << [',
34
+ ' 1',
35
+ ']'].join("\n")
36
+ end
37
+
38
+ it 'accepts correctly indented first element' do
39
+ inspect_source(cop,
40
+ ['[',
41
+ ' x,',
42
+ ' y',
43
+ ']'])
44
+ expect(cop.offenses).to be_empty
45
+ end
46
+
47
+ it 'registers an offense for incorrectly indented first element' do
48
+ inspect_source(cop,
49
+ ['[',
50
+ 'x,',
51
+ ' y',
52
+ ']'])
53
+ expect(cop.highlights).to eq(['x'])
54
+ end
55
+
56
+ it 'accepts several elements per line' do
57
+ inspect_source(cop,
58
+ ['a = [',
59
+ ' 1, 2',
60
+ ']'])
61
+ expect(cop.offenses).to be_empty
62
+ end
63
+
64
+ it 'accepts a first element on the same line as the left bracket' do
65
+ inspect_source(cop,
66
+ ['a = ["a",',
67
+ ' "b"]'])
68
+ expect(cop.offenses).to be_empty
69
+ end
70
+
71
+ it 'accepts single line array' do
72
+ inspect_source(cop,
73
+ ['a = [1, 2]'])
74
+ expect(cop.offenses).to be_empty
75
+ end
76
+
77
+ it 'accepts an empty array' do
78
+ inspect_source(cop,
79
+ ['a = []'])
80
+ expect(cop.offenses).to be_empty
81
+ end
82
+
83
+ context 'when array is method argument' do
84
+ context 'and arguments are surrounded by parentheses' do
85
+ it 'accepts normal indentation for first argument' do
86
+ inspect_source(cop,
87
+ ['func([',
88
+ ' 1',
89
+ '])'])
90
+ expect(cop.offenses).to be_empty
91
+ end
92
+
93
+ it 'registers an offense for incorrect indentation' do
94
+ inspect_source(cop,
95
+ ['func([',
96
+ ' 1',
97
+ ' ])'])
98
+ expect(cop.messages)
99
+ .to eq(['Use 2 spaces for indentation in an array, relative to ' \
100
+ 'the start of the line where the left bracket is.'])
101
+ end
102
+
103
+ it 'accepts normal indentation for second argument' do
104
+ inspect_source(cop,
105
+ ['body.should have_tag("input", [',
106
+ ' :name])'])
107
+ expect(cop.offenses).to be_empty
108
+ end
109
+ end
110
+
111
+ context 'and arguments are not surrounded by parentheses' do
112
+ it 'accepts single line array' do
113
+ inspect_source(cop,
114
+ ['func x, [1, 2]'])
115
+ expect(cop.offenses).to be_empty
116
+ end
117
+
118
+ it 'accepts a correctly indented multi-line array' do
119
+ inspect_source(cop,
120
+ ['func x, [',
121
+ ' 1, 2]'])
122
+ expect(cop.offenses).to be_empty
123
+ end
124
+
125
+ it 'registers an offense for incorrectly indented multi-line array' do
126
+ inspect_source(cop,
127
+ ['func x, [',
128
+ ' 1, 2]'])
129
+ expect(cop.messages)
130
+ .to eq(['Use 2 spaces for indentation in an array, relative to ' \
131
+ 'the start of the line where the left bracket is.'])
132
+ expect(cop.highlights).to eq(['1'])
133
+ end
134
+ end
135
+ end
136
+ end