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
@@ -5,10 +5,10 @@ require 'spec_helper'
5
5
  describe Rubocop::Cop::Style::Alias do
6
6
  subject(:cop) { described_class.new }
7
7
 
8
- it 'registers an offence for alias with symbol args' do
8
+ it 'registers an offense for alias with symbol args' do
9
9
  inspect_source(cop,
10
10
  ['alias :ala :bala'])
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(['Use alias_method instead of alias.'])
14
14
  end
@@ -18,10 +18,10 @@ describe Rubocop::Cop::Style::Alias do
18
18
  expect(corrected).to eq 'alias_method :ala, :bala'
19
19
  end
20
20
 
21
- it 'registers an offence for alias with bareword args' do
21
+ it 'registers an offense for alias with bareword args' do
22
22
  inspect_source(cop,
23
23
  ['alias ala bala'])
24
- expect(cop.offences.size).to eq(1)
24
+ expect(cop.offenses.size).to eq(1)
25
25
  expect(cop.messages)
26
26
  .to eq(['Use alias_method instead of alias.'])
27
27
  end
@@ -31,22 +31,22 @@ describe Rubocop::Cop::Style::Alias do
31
31
  expect(corrected).to eq 'alias_method :ala, :bala'
32
32
  end
33
33
 
34
- it 'does not register an offence for alias_method' do
34
+ it 'does not register an offense for alias_method' do
35
35
  inspect_source(cop,
36
36
  ['alias_method :ala, :bala'])
37
- expect(cop.offences).to be_empty
37
+ expect(cop.offenses).to be_empty
38
38
  end
39
39
 
40
- it 'does not register an offence for :alias' do
40
+ it 'does not register an offense for :alias' do
41
41
  inspect_source(cop,
42
42
  ['[:alias, :ala, :bala]'])
43
- expect(cop.offences).to be_empty
43
+ expect(cop.offenses).to be_empty
44
44
  end
45
45
 
46
- it 'does not register an offence for alias with gvars' do
46
+ it 'does not register an offense for alias with gvars' do
47
47
  inspect_source(cop,
48
48
  ['alias $ala $bala'])
49
- expect(cop.offences).to be_empty
49
+ expect(cop.offenses).to be_empty
50
50
  end
51
51
 
52
52
  it 'accepts alias in an instance_exec block' do
@@ -54,6 +54,6 @@ describe Rubocop::Cop::Style::Alias do
54
54
  ['cli.instance_exec do',
55
55
  ' alias :old_trap_interrupt :trap_interrupt',
56
56
  'end'])
57
- expect(cop.offences).to be_empty
57
+ expect(cop.offenses).to be_empty
58
58
  end
59
59
  end
@@ -5,7 +5,7 @@ require 'spec_helper'
5
5
  describe Rubocop::Cop::Style::AlignArray do
6
6
  subject(:cop) { described_class.new }
7
7
 
8
- it 'registers an offence for misaligned array elements' do
8
+ it 'registers an offense for misaligned array elements' do
9
9
  inspect_source(cop, ['array = [',
10
10
  ' a,',
11
11
  ' b,',
@@ -13,7 +13,7 @@ describe Rubocop::Cop::Style::AlignArray do
13
13
  ' d',
14
14
  ']'])
15
15
  expect(cop.messages).to eq(['Align the elements of an array ' \
16
- 'literal if they span more than ' +
16
+ 'literal if they span more than ' \
17
17
  'one line.'] * 2)
18
18
  expect(cop.highlights).to eq(%w(b d))
19
19
  end
@@ -25,18 +25,18 @@ describe Rubocop::Cop::Style::AlignArray do
25
25
  ' c,',
26
26
  ' d',
27
27
  ']'])
28
- expect(cop.offences).to be_empty
28
+ expect(cop.offenses).to be_empty
29
29
  end
30
30
 
31
31
  it 'accepts single line array' do
32
32
  inspect_source(cop, 'array = [ a, b ]')
33
- expect(cop.offences).to be_empty
33
+ expect(cop.offenses).to be_empty
34
34
  end
35
35
 
36
36
  it 'accepts several elements per line' do
37
37
  inspect_source(cop, ['array = [ a, b,',
38
38
  ' c, d ]'])
39
- expect(cop.offences).to be_empty
39
+ expect(cop.offenses).to be_empty
40
40
  end
41
41
 
42
42
  it 'auto-corrects alignment' do
@@ -54,14 +54,30 @@ describe Rubocop::Cop::Style::AlignArray do
54
54
  ']'].join("\n"))
55
55
  end
56
56
 
57
- it 'auto-corrects array within array' do
57
+ it 'auto-corrects array within array with too much indentation' do
58
58
  original_source = ['[:l1,',
59
59
  ' [:l2,',
60
+ '',
60
61
  ' [:l3,',
61
- ' [:l4]]]]']
62
+ ' [:l4]]]]']
62
63
  new_source = autocorrect_source(cop, original_source)
63
64
  expect(new_source).to eq(['[:l1,',
64
65
  ' [:l2,',
66
+ '',
67
+ ' [:l3,',
68
+ ' [:l4]]]]'].join("\n"))
69
+ end
70
+
71
+ it 'auto-corrects array within array with too little indentation' do
72
+ original_source = ['[:l1,',
73
+ '[:l2,',
74
+ '',
75
+ ' [:l3,',
76
+ ' [:l4]]]]']
77
+ new_source = autocorrect_source(cop, original_source)
78
+ expect(new_source).to eq(['[:l1,',
79
+ ' [:l2,',
80
+ '',
65
81
  ' [:l3,',
66
82
  ' [:l4]]]]'].join("\n"))
67
83
  end
@@ -3,20 +3,101 @@
3
3
  require 'spec_helper'
4
4
 
5
5
  describe Rubocop::Cop::Style::AlignHash, :config do
6
+ subject(:cop) { described_class.new(config) }
7
+
6
8
  shared_examples 'not on separate lines' do
7
9
  it 'accepts single line hash' do
8
10
  inspect_source(cop, 'func(a: 0, bb: 1)')
9
- expect(cop.offences).to be_empty
11
+ expect(cop.offenses).to be_empty
10
12
  end
11
13
 
12
14
  it 'accepts several pairs per line' do
13
15
  inspect_source(cop, ['func(a: 1, bb: 2,',
14
16
  ' ccc: 3, dddd: 4)'])
15
- expect(cop.offences).to be_empty
17
+ expect(cop.offenses).to be_empty
18
+ end
19
+ end
20
+
21
+ context 'always inspect last argument hash' do
22
+ let(:cop_config) do
23
+ {
24
+ 'EnforcedLastArgumentHashStyle' => 'always_inspect'
25
+ }
26
+ end
27
+
28
+ it 'registers offence for misaligned keys in implicit hash' do
29
+ inspect_source(cop, ['func(a: 0,',
30
+ ' b: 1)'])
31
+ expect(cop.offenses.size).to eq(1)
32
+ end
33
+
34
+ it 'registers offence for misaligned keys in explicit hash' do
35
+ inspect_source(cop, ['func({a: 0,',
36
+ ' b: 1})'])
37
+ expect(cop.offenses.size).to eq(1)
38
+ end
39
+ end
40
+
41
+ context 'always ignore last argument hash' do
42
+ let(:cop_config) do
43
+ {
44
+ 'EnforcedLastArgumentHashStyle' => 'always_ignore'
45
+ }
46
+ end
47
+
48
+ it 'accepts misaligned keys in implicit hash' do
49
+ inspect_source(cop, ['func(a: 0,',
50
+ ' b: 1)'])
51
+ expect(cop.offenses).to be_empty
52
+ end
53
+
54
+ it 'accepts misaligned keys in explicit hash' do
55
+ inspect_source(cop, ['func({a: 0,',
56
+ ' b: 1})'])
57
+ expect(cop.offenses).to be_empty
58
+ end
59
+ end
60
+
61
+ context 'ignore implicit last argument hash' do
62
+ let(:cop_config) do
63
+ {
64
+ 'EnforcedLastArgumentHashStyle' => 'ignore_implicit'
65
+ }
66
+ end
67
+
68
+ it 'accepts misaligned keys in implicit hash' do
69
+ inspect_source(cop, ['func(a: 0,',
70
+ ' b: 1)'])
71
+ expect(cop.offenses).to be_empty
72
+ end
73
+
74
+ it 'registers offence for misaligned keys in explicit hash' do
75
+ inspect_source(cop, ['func({a: 0,',
76
+ ' b: 1})'])
77
+ expect(cop.offenses.size).to eq(1)
78
+ end
79
+ end
80
+
81
+ context 'ignore explicit last argument hash' do
82
+ let(:cop_config) do
83
+ {
84
+ 'EnforcedLastArgumentHashStyle' => 'ignore_explicit'
85
+ }
86
+ end
87
+
88
+ it 'registers offence for misaligned keys in implicit hash' do
89
+ inspect_source(cop, ['func(a: 0,',
90
+ ' b: 1)'])
91
+ expect(cop.offenses.size).to eq(1)
92
+ end
93
+
94
+ it 'accepts misaligned keys in explicit hash' do
95
+ inspect_source(cop, ['func({a: 0,',
96
+ ' b: 1})'])
97
+ expect(cop.offenses).to be_empty
16
98
  end
17
99
  end
18
100
 
19
- subject(:cop) { described_class.new(config) }
20
101
  let(:cop_config) do
21
102
  {
22
103
  'EnforcedHashRocketStyle' => 'key',
@@ -25,7 +106,7 @@ describe Rubocop::Cop::Style::AlignHash, :config do
25
106
  end
26
107
 
27
108
  context 'with default configuration' do
28
- it 'registers an offence for misaligned hash keys' do
109
+ it 'registers an offense for misaligned hash keys' do
29
110
  inspect_source(cop, ['hash1 = {',
30
111
  ' a: 0,',
31
112
  ' bb: 1',
@@ -35,7 +116,7 @@ describe Rubocop::Cop::Style::AlignHash, :config do
35
116
  " 'dddd' => 2",
36
117
  '}'])
37
118
  expect(cop.messages).to eq(['Align the elements of a hash ' \
38
- 'literal if they span more than ' +
119
+ 'literal if they span more than ' \
39
120
  'one line.'] * 2)
40
121
  expect(cop.highlights).to eq(['bb: 1',
41
122
  "'dddd' => 2"])
@@ -50,40 +131,40 @@ describe Rubocop::Cop::Style::AlignHash, :config do
50
131
  " 'ccc' => 2,",
51
132
  " 'dddd' => 2",
52
133
  '}'])
53
- expect(cop.offences).to be_empty
134
+ expect(cop.offenses).to be_empty
54
135
  end
55
136
 
56
- it 'registers an offence for separator alignment' do
137
+ it 'registers an offense for separator alignment' do
57
138
  inspect_source(cop, ['hash = {',
58
139
  " 'a' => 0,",
59
140
  " 'bbb' => 1",
60
141
  '}'])
61
- expect(cop.offences.size).to eq(1)
142
+ expect(cop.offenses.size).to eq(1)
62
143
  expect(cop.highlights).to eq(["'bbb' => 1"])
63
144
  end
64
145
 
65
- context 'with braceless hash as last argument' do
66
- it 'registers an offence for misaligned hash keys' do
146
+ context 'with implicit hash as last argument' do
147
+ it 'registers an offense for misaligned hash keys' do
67
148
  inspect_source(cop, ['func(a: 0,',
68
149
  ' b: 1)'])
69
- expect(cop.offences.size).to eq(1)
150
+ expect(cop.offenses.size).to eq(1)
70
151
  end
71
152
 
72
- it 'registers an offence for right alignment of keys' do
153
+ it 'registers an offense for right alignment of keys' do
73
154
  inspect_source(cop, ['func(a: 0,',
74
155
  ' bbb: 1)'])
75
- expect(cop.offences.size).to eq(1)
156
+ expect(cop.offenses.size).to eq(1)
76
157
  end
77
158
 
78
159
  it 'accepts aligned hash keys' do
79
160
  inspect_source(cop, ['func(a: 0,',
80
161
  ' b: 1)'])
81
- expect(cop.offences).to be_empty
162
+ expect(cop.offenses).to be_empty
82
163
  end
83
164
 
84
165
  it 'accepts an empty hash' do
85
166
  inspect_source(cop, 'h = {}')
86
- expect(cop.offences).to be_empty
167
+ expect(cop.offenses).to be_empty
87
168
  end
88
169
  end
89
170
 
@@ -128,12 +209,12 @@ describe Rubocop::Cop::Style::AlignHash, :config do
128
209
  ' bbb: 1',
129
210
  '}'
130
211
  ])
131
- expect(cop.offences).to be_empty
212
+ expect(cop.offenses).to be_empty
132
213
  end
133
214
 
134
215
  it 'accepts an empty hash' do
135
216
  inspect_source(cop, 'h = {}')
136
- expect(cop.offences).to be_empty
217
+ expect(cop.offenses).to be_empty
137
218
  end
138
219
 
139
220
  it 'accepts a multiline array of single line hashes' do
@@ -145,10 +226,10 @@ describe Rubocop::Cop::Style::AlignHash, :config do
145
226
  ' { after: %w( n o ) }',
146
227
  ' ]',
147
228
  ' end'])
148
- expect(cop.offences).to be_empty
229
+ expect(cop.offenses).to be_empty
149
230
  end
150
231
 
151
- it 'registers an offence for misaligned hash values' do
232
+ it 'registers an offense for misaligned hash values' do
152
233
  inspect_source(cop, ['hash1 = {',
153
234
  " 'a' => 0,",
154
235
  " 'bbb' => 1",
@@ -162,12 +243,12 @@ describe Rubocop::Cop::Style::AlignHash, :config do
162
243
  'bbb:1'])
163
244
  end
164
245
 
165
- it 'registers an offence for misaligned hash rockets' do
246
+ it 'registers an offense for misaligned hash rockets' do
166
247
  inspect_source(cop, ['hash = {',
167
248
  " 'a' => 0,",
168
249
  " 'bbb' => 1",
169
250
  '}'])
170
- expect(cop.offences.size).to eq(1)
251
+ expect(cop.offenses.size).to eq(1)
171
252
  end
172
253
 
173
254
  it 'auto-corrects alignment' do
@@ -196,7 +277,7 @@ describe Rubocop::Cop::Style::AlignHash, :config do
196
277
 
197
278
  it 'accepts a single method argument entry with colon' do
198
279
  inspect_source(cop, ['merge(parent: nil)'])
199
- expect(cop.offences).to be_empty
280
+ expect(cop.offenses).to be_empty
200
281
  end
201
282
  end
202
283
 
@@ -233,28 +314,28 @@ describe Rubocop::Cop::Style::AlignHash, :config do
233
314
  " 'a' => 0,",
234
315
  " 'bbb' => 1",
235
316
  '}'])
236
- expect(cop.offences).to be_empty
317
+ expect(cop.offenses).to be_empty
237
318
  end
238
319
 
239
320
  it 'accepts an empty hash' do
240
321
  inspect_source(cop, 'h = {}')
241
- expect(cop.offences).to be_empty
322
+ expect(cop.offenses).to be_empty
242
323
  end
243
324
 
244
- it 'registers an offence for misaligned hash values' do
325
+ it 'registers an offense for misaligned hash values' do
245
326
  inspect_source(cop, ['hash = {',
246
327
  " 'a' => 0,",
247
328
  " 'bbb' => 1",
248
329
  '}'])
249
- expect(cop.offences.size).to eq(1)
330
+ expect(cop.offenses.size).to eq(1)
250
331
  end
251
332
 
252
- it 'registers an offence for misaligned hash rockets' do
333
+ it 'registers an offense for misaligned hash rockets' do
253
334
  inspect_source(cop, ['hash = {',
254
335
  " 'a' => 0,",
255
336
  " 'bbb' => 1",
256
337
  '}'])
257
- expect(cop.offences.size).to eq(1)
338
+ expect(cop.offenses.size).to eq(1)
258
339
  end
259
340
 
260
341
  include_examples 'not on separate lines'
@@ -283,7 +364,7 @@ describe Rubocop::Cop::Style::AlignHash, :config do
283
364
  }
284
365
  end
285
366
 
286
- it 'registers offences for misaligned entries' do
367
+ it 'registers offenses for misaligned entries' do
287
368
  inspect_source(cop, ['hash1 = {',
288
369
  ' a: 0,',
289
370
  ' bbb: 1',
@@ -304,7 +385,7 @@ describe Rubocop::Cop::Style::AlignHash, :config do
304
385
  " 'a' => 0,",
305
386
  " 'bbb' => 1",
306
387
  '}'])
307
- expect(cop.offences).to be_empty
388
+ expect(cop.offenses).to be_empty
308
389
  end
309
390
  end
310
391
  end
@@ -2,221 +2,294 @@
2
2
 
3
3
  require 'spec_helper'
4
4
 
5
- describe Rubocop::Cop::Style::AlignParameters do
6
- subject(:cop) { described_class.new }
7
-
8
- it 'registers an offence for parameters with single indent' do
9
- inspect_source(cop, ['function(a,',
10
- ' if b then c else d end)'])
11
- expect(cop.offences.size).to eq(1)
12
- expect(cop.highlights).to eq(['if b then c else d end'])
13
- end
5
+ describe Rubocop::Cop::Style::AlignParameters, :config do
6
+ subject(:cop) { described_class.new(config) }
14
7
 
15
- it 'registers an offence for parameters with double indent' do
16
- inspect_source(cop, ['function(a,',
17
- ' if b then c else d end)'])
18
- expect(cop.offences.size).to eq(1)
19
- end
8
+ context 'aligned with first parameter' do
9
+ let(:cop_config) do
10
+ {
11
+ 'EnforcedStyle' => 'with_first_parameter'
12
+ }
13
+ end
20
14
 
21
- it 'accepts multiline []= method call' do
22
- inspect_source(cop, ['Test.config["something"] =',
23
- ' true'])
24
- expect(cop.offences).to be_empty
25
- end
15
+ it 'registers an offense for parameters with single indent' do
16
+ inspect_source(cop, ['function(a,',
17
+ ' if b then c else d end)'])
18
+ expect(cop.offenses.size).to eq(1)
19
+ expect(cop.highlights).to eq(['if b then c else d end'])
20
+ end
26
21
 
27
- it 'accepts correctly aligned parameters' do
28
- inspect_source(cop, ['function(a,',
29
- ' 0, 1,',
30
- ' (x + y),',
31
- ' if b then c else d end)'])
32
- expect(cop.offences).to be_empty
33
- end
22
+ it 'registers an offense for parameters with double indent' do
23
+ inspect_source(cop, ['function(a,',
24
+ ' if b then c else d end)'])
25
+ expect(cop.offenses.size).to eq(1)
26
+ end
34
27
 
35
- it 'accepts calls that only span one line' do
36
- inspect_source(cop, ['find(path, s, @special[sexp[0]])'])
37
- expect(cop.offences).to be_empty
38
- end
28
+ it 'accepts multiline []= method call' do
29
+ inspect_source(cop, ['Test.config["something"] =',
30
+ ' true'])
31
+ expect(cop.offenses).to be_empty
32
+ end
39
33
 
40
- it "doesn't get confused by a symbol argument" do
41
- inspect_source(cop, ['add_offence(index,',
42
- ' MSG % kind)'])
43
- expect(cop.offences).to be_empty
44
- end
34
+ it 'accepts correctly aligned parameters' do
35
+ inspect_source(cop, ['function(a,',
36
+ ' 0, 1,',
37
+ ' (x + y),',
38
+ ' if b then c else d end)'])
39
+ expect(cop.offenses).to be_empty
40
+ end
45
41
 
46
- it "doesn't get confused by splat operator" do
47
- inspect_source(cop, ['func1(*a,',
48
- ' *b,',
49
- ' c)',
50
- 'func2(a,',
51
- ' *b,',
52
- ' c)',
53
- 'func3(*a)'
54
- ])
55
- expect(cop.offences.map(&:to_s))
56
- .to eq(['C: 5: 6: Align the parameters of a method call if ' \
57
- 'they span more than one line.'])
58
- expect(cop.highlights).to eq(['*b'])
59
- end
42
+ it 'accepts calls that only span one line' do
43
+ inspect_source(cop, ['find(path, s, @special[sexp[0]])'])
44
+ expect(cop.offenses).to be_empty
45
+ end
60
46
 
61
- it "doesn't get confused by extra comma at the end" do
62
- inspect_source(cop, ['func1(a,',
63
- ' b,)'])
64
- expect(cop.offences.map(&:to_s))
65
- .to eq(['C: 2: 6: Align the parameters of a method call if ' \
66
- 'they span more than one line.'])
67
- expect(cop.highlights).to eq(['b'])
68
- end
47
+ it "doesn't get confused by a symbol argument" do
48
+ inspect_source(cop, ['add_offense(index,',
49
+ ' MSG % kind)'])
50
+ expect(cop.offenses).to be_empty
51
+ end
69
52
 
70
- it 'can handle a correctly aligned string literal as first argument' do
71
- inspect_source(cop, ['add_offence(x,',
72
- ' a)'])
73
- expect(cop.offences).to be_empty
74
- end
53
+ it "doesn't get confused by splat operator" do
54
+ inspect_source(cop, ['func1(*a,',
55
+ ' *b,',
56
+ ' c)',
57
+ 'func2(a,',
58
+ ' *b,',
59
+ ' c)',
60
+ 'func3(*a)'
61
+ ])
62
+ expect(cop.offenses.map(&:to_s))
63
+ .to eq(['C: 5: 6: Align the parameters of a method call if ' \
64
+ 'they span more than one line.'])
65
+ expect(cop.highlights).to eq(['*b'])
66
+ end
75
67
 
76
- it 'can handle a string literal as other argument' do
77
- inspect_source(cop, ['add_offence(',
78
- ' "", a)'])
79
- expect(cop.offences).to be_empty
80
- end
68
+ it "doesn't get confused by extra comma at the end" do
69
+ inspect_source(cop, ['func1(a,',
70
+ ' b,)'])
71
+ expect(cop.offenses.map(&:to_s))
72
+ .to eq(['C: 2: 6: Align the parameters of a method call if ' \
73
+ 'they span more than one line.'])
74
+ expect(cop.highlights).to eq(['b'])
75
+ end
81
76
 
82
- it "doesn't get confused by a line break inside a parameter" do
83
- inspect_source(cop, ['read(path, { headers: true,',
84
- ' converters: :numeric })'])
85
- expect(cop.offences).to be_empty
86
- end
77
+ it 'can handle a correctly aligned string literal as first argument' do
78
+ inspect_source(cop, ['add_offense(x,',
79
+ ' a)'])
80
+ expect(cop.offenses).to be_empty
81
+ end
87
82
 
88
- it "doesn't get confused by symbols with embedded expressions" do
89
- inspect_source(cop, ['send(:"#{name}_comments_path")'])
90
- expect(cop.offences).to be_empty
91
- end
83
+ it 'can handle a string literal as other argument' do
84
+ inspect_source(cop, ['add_offense(',
85
+ ' "", a)'])
86
+ expect(cop.offenses).to be_empty
87
+ end
92
88
 
93
- it "doesn't get confused by regexen with embedded expressions" do
94
- inspect_source(cop, ['a(/#{name}/)'])
95
- expect(cop.offences).to be_empty
96
- end
89
+ it "doesn't get confused by a line break inside a parameter" do
90
+ inspect_source(cop, ['read(path, { headers: true,',
91
+ ' converters: :numeric })'])
92
+ expect(cop.offenses).to be_empty
93
+ end
97
94
 
98
- it 'accepts braceless hashes' do
99
- inspect_source(cop, ['run(collection, :entry_name => label,',
100
- ' :paginator => paginator)'])
101
- expect(cop.offences).to be_empty
102
- end
95
+ it "doesn't get confused by symbols with embedded expressions" do
96
+ inspect_source(cop, ['send(:"#{name}_comments_path")'])
97
+ expect(cop.offenses).to be_empty
98
+ end
103
99
 
104
- it 'accepts the first parameter being on a new row' do
105
- inspect_source(cop, [' match(',
106
- ' a,',
107
- ' b',
108
- ' )'])
109
- expect(cop.offences).to be_empty
110
- end
100
+ it "doesn't get confused by regexen with embedded expressions" do
101
+ inspect_source(cop, ['a(/#{name}/)'])
102
+ expect(cop.offenses).to be_empty
103
+ end
111
104
 
112
- it 'can handle heredoc strings' do
113
- inspect_source(cop, ['class_eval(<<-EOS, __FILE__, __LINE__ + 1)',
114
- ' def run_#{name}_callbacks(*args)',
115
- ' a = 1',
116
- ' return value',
117
- ' end',
118
- ' EOS'])
119
- expect(cop.offences).to be_empty
120
- end
105
+ it 'accepts braceless hashes' do
106
+ inspect_source(cop, ['run(collection, :entry_name => label,',
107
+ ' :paginator => paginator)'])
108
+ expect(cop.offenses).to be_empty
109
+ end
121
110
 
122
- it 'can handle a method call within a method call' do
123
- inspect_source(cop, ['a(a1,',
124
- ' b(b1,',
125
- ' b2),',
126
- ' a2)'])
127
- expect(cop.offences).to be_empty
128
- end
111
+ it 'accepts the first parameter being on a new row' do
112
+ inspect_source(cop, [' match(',
113
+ ' a,',
114
+ ' b',
115
+ ' )'])
116
+ expect(cop.offenses).to be_empty
117
+ end
129
118
 
130
- it 'can handle a call embedded in a string' do
131
- inspect_source(cop, ['model("#{index(name)}", child)'])
132
- expect(cop.offences).to be_empty
133
- end
119
+ it 'can handle heredoc strings' do
120
+ inspect_source(cop, ['class_eval(<<-EOS, __FILE__, __LINE__ + 1)',
121
+ ' def run_#{name}_callbacks(*args)',
122
+ ' a = 1',
123
+ ' return value',
124
+ ' end',
125
+ ' EOS'])
126
+ expect(cop.offenses).to be_empty
127
+ end
134
128
 
135
- it 'can handle do-end' do
136
- inspect_source(cop, [' run(lambda do |e|',
137
- " w = e['warden']",
138
- ' end)'])
139
- expect(cop.offences).to be_empty
140
- end
129
+ it 'can handle a method call within a method call' do
130
+ inspect_source(cop, ['a(a1,',
131
+ ' b(b1,',
132
+ ' b2),',
133
+ ' a2)'])
134
+ expect(cop.offenses).to be_empty
135
+ end
141
136
 
142
- it 'can handle a call with a block inside another call' do
143
- src = ['new(table_name,',
144
- ' exec_query("info(\'#{row[\'name\']}\')").map { |col|',
145
- " col['name']",
146
- ' })']
147
- inspect_source(cop, src)
148
- expect(cop.offences).to be_empty
149
- end
137
+ it 'can handle a call embedded in a string' do
138
+ inspect_source(cop, ['model("#{index(name)}", child)'])
139
+ expect(cop.offenses).to be_empty
140
+ end
150
141
 
151
- it 'can handle a ternary condition with a block reference' do
152
- inspect_source(cop, ['cond ? a : func(&b)'])
153
- expect(cop.offences).to be_empty
154
- end
142
+ it 'can handle do-end' do
143
+ inspect_source(cop, [' run(lambda do |e|',
144
+ " w = e['warden']",
145
+ ' end)'])
146
+ expect(cop.offenses).to be_empty
147
+ end
155
148
 
156
- it 'can handle parentheses used with no parameters' do
157
- inspect_source(cop, ['func()'])
158
- expect(cop.offences).to be_empty
159
- end
149
+ it 'can handle a call with a block inside another call' do
150
+ src = ['new(table_name,',
151
+ ' exec_query("info(\'#{row[\'name\']}\')").map { |col|',
152
+ " col['name']",
153
+ ' })']
154
+ inspect_source(cop, src)
155
+ expect(cop.offenses).to be_empty
156
+ end
160
157
 
161
- it 'can handle a multiline hash as second parameter' do
162
- inspect_source(cop, ['tag(:input, {',
163
- ' :value => value',
164
- '})'])
165
- expect(cop.offences).to be_empty
166
- end
158
+ it 'can handle a ternary condition with a block reference' do
159
+ inspect_source(cop, ['cond ? a : func(&b)'])
160
+ expect(cop.offenses).to be_empty
161
+ end
167
162
 
168
- it 'can handle method calls without parentheses' do
169
- inspect_source(cop, ['a(b c, d)'])
170
- expect(cop.offences).to be_empty
171
- end
163
+ it 'can handle parentheses used with no parameters' do
164
+ inspect_source(cop, ['func()'])
165
+ expect(cop.offenses).to be_empty
166
+ end
172
167
 
173
- it 'can handle other method calls without parentheses' do
174
- src = ['chars(Unicode.apply_mapping @wrapped_string, :uppercase)']
175
- inspect_source(cop, src)
176
- expect(cop.offences).to be_empty
177
- end
168
+ it 'can handle a multiline hash as second parameter' do
169
+ inspect_source(cop, ['tag(:input, {',
170
+ ' :value => value',
171
+ '})'])
172
+ expect(cop.offenses).to be_empty
173
+ end
178
174
 
179
- it 'auto-corrects alignment' do
180
- new_source = autocorrect_source(cop, ['func(a,',
181
- ' b,',
182
- 'c)'])
183
- expect(new_source).to eq(['func(a,',
184
- ' b,',
185
- ' c)'].join("\n"))
186
- end
175
+ it 'can handle method calls without parentheses' do
176
+ inspect_source(cop, ['a(b c, d)'])
177
+ expect(cop.offenses).to be_empty
178
+ end
187
179
 
188
- it 'auto-corrects each line of a multi-line parameter to the right' do
189
- new_source =
190
- autocorrect_source(cop,
191
- ['create :transaction, :closed,',
192
- ' account: account,',
193
- ' open_price: 1.29,',
194
- ' close_price: 1.30'])
195
- expect(new_source)
196
- .to eq(['create :transaction, :closed,',
197
- ' account: account,',
198
- ' open_price: 1.29,',
199
- ' close_price: 1.30'].join("\n"))
200
- end
180
+ it 'can handle other method calls without parentheses' do
181
+ src = ['chars(Unicode.apply_mapping @wrapped_string, :uppercase)']
182
+ inspect_source(cop, src)
183
+ expect(cop.offenses).to be_empty
184
+ end
185
+
186
+ it 'auto-corrects alignment' do
187
+ new_source = autocorrect_source(cop, ['func(a,',
188
+ ' b,',
189
+ 'c)'])
190
+ expect(new_source).to eq(['func(a,',
191
+ ' b,',
192
+ ' c)'].join("\n"))
193
+ end
194
+
195
+ it 'auto-corrects each line of a multi-line parameter to the right' do
196
+ new_source =
197
+ autocorrect_source(cop,
198
+ ['create :transaction, :closed,',
199
+ ' account: account,',
200
+ ' open_price: 1.29,',
201
+ ' close_price: 1.30'])
202
+ expect(new_source)
203
+ .to eq(['create :transaction, :closed,',
204
+ ' account: account,',
205
+ ' open_price: 1.29,',
206
+ ' close_price: 1.30'].join("\n"))
207
+ end
208
+
209
+ it 'auto-corrects each line of a multi-line parameter to the left' do
210
+ new_source =
211
+ autocorrect_source(cop,
212
+ ['create :transaction, :closed,',
213
+ ' account: account,',
214
+ ' open_price: 1.29,',
215
+ ' close_price: 1.30'])
216
+ expect(new_source)
217
+ .to eq(['create :transaction, :closed,',
218
+ ' account: account,',
219
+ ' open_price: 1.29,',
220
+ ' close_price: 1.30'].join("\n"))
221
+ end
201
222
 
202
- it 'auto-corrects each line of a multi-line parameter to the left' do
203
- new_source =
204
- autocorrect_source(cop,
205
- ['create :transaction, :closed,',
206
- ' account: account,',
207
- ' open_price: 1.29,',
208
- ' close_price: 1.30'])
209
- expect(new_source)
210
- .to eq(['create :transaction, :closed,',
211
- ' account: account,',
212
- ' open_price: 1.29,',
213
- ' close_price: 1.30'].join("\n"))
223
+ it 'auto-corrects only parameters that begin a line' do
224
+ original_source = ['foo(:bar, {',
225
+ ' whiz: 2, bang: 3 }, option: 3)']
226
+ new_source = autocorrect_source(cop, original_source)
227
+ expect(new_source).to eq(original_source.join("\n"))
228
+ end
214
229
  end
215
230
 
216
- it 'auto-corrects only parameters that begin a line' do
217
- original_source = ['foo(:bar, {',
218
- ' whiz: 2, bang: 3 }, option: 3)']
219
- new_source = autocorrect_source(cop, original_source)
220
- expect(new_source).to eq(original_source.join("\n"))
231
+ context 'aligned with fixed indentation' do
232
+ let(:cop_config) do
233
+ {
234
+ 'EnforcedStyle' => 'with_fixed_indentation'
235
+ }
236
+ end
237
+
238
+ let(:correct_source) do
239
+ [
240
+ 'create :transaction, :closed,',
241
+ ' account: account,',
242
+ ' open_price: 1.29,',
243
+ ' close_price: 1.30'
244
+ ]
245
+ end
246
+
247
+ it 'does not autocorrect correct source' do
248
+ expect(autocorrect_source(cop, correct_source))
249
+ .to eq(correct_source.join("\n"))
250
+ end
251
+
252
+ it 'autocorrects by outdenting when indented too far' do
253
+ original_source = [
254
+ 'create :transaction, :closed,',
255
+ ' account: account,',
256
+ ' open_price: 1.29,',
257
+ ' close_price: 1.30'
258
+ ]
259
+
260
+ expect(autocorrect_source(cop, original_source))
261
+ .to eq(correct_source.join("\n"))
262
+ end
263
+
264
+ it 'autocorrects by indenting when not indented' do
265
+ original_source = [
266
+ 'create :transaction, :closed,',
267
+ 'account: account,',
268
+ 'open_price: 1.29,',
269
+ 'close_price: 1.30'
270
+ ]
271
+
272
+ expect(autocorrect_source(cop, original_source))
273
+ .to eq(correct_source.join("\n"))
274
+ end
275
+
276
+ it 'autocorrects when first line is indented' do
277
+ original_source = [
278
+ ' create :transaction, :closed,',
279
+ ' account: account,',
280
+ ' open_price: 1.29,',
281
+ ' close_price: 1.30'
282
+ ]
283
+
284
+ correct_source = [
285
+ ' create :transaction, :closed,',
286
+ ' account: account,',
287
+ ' open_price: 1.29,',
288
+ ' close_price: 1.30'
289
+ ]
290
+
291
+ expect(autocorrect_source(cop, original_source))
292
+ .to eq(correct_source.join("\n"))
293
+ end
221
294
  end
222
295
  end