rubocop 0.12.0 → 0.13.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 (279) hide show
  1. data/CHANGELOG.md +40 -0
  2. data/README.md +49 -8
  3. data/config/default.yml +40 -0
  4. data/config/enabled.yml +37 -9
  5. data/lib/rubocop.rb +24 -10
  6. data/lib/rubocop/cli.rb +41 -106
  7. data/lib/rubocop/config.rb +3 -2
  8. data/lib/rubocop/cop/commissioner.rb +15 -5
  9. data/lib/rubocop/cop/cop.rb +47 -32
  10. data/lib/rubocop/cop/lint/assignment_in_condition.rb +2 -2
  11. data/lib/rubocop/cop/lint/block_alignment.rb +30 -9
  12. data/lib/rubocop/cop/lint/empty_ensure.rb +1 -1
  13. data/lib/rubocop/cop/lint/end_alignment.rb +4 -4
  14. data/lib/rubocop/cop/lint/end_in_method.rb +1 -1
  15. data/lib/rubocop/cop/lint/ensure_return.rb +1 -1
  16. data/lib/rubocop/cop/lint/eval.rb +1 -3
  17. data/lib/rubocop/cop/lint/handle_exceptions.rb +1 -1
  18. data/lib/rubocop/cop/lint/literal_in_condition.rb +6 -4
  19. data/lib/rubocop/cop/lint/loop.rb +1 -1
  20. data/lib/rubocop/cop/lint/parentheses_as_grouped_expression.rb +1 -1
  21. data/lib/rubocop/cop/lint/rescue_exception.rb +1 -1
  22. data/lib/rubocop/cop/lint/shadowing_outer_local_variable.rb +5 -8
  23. data/lib/rubocop/cop/lint/unreachable_code.rb +1 -1
  24. data/lib/rubocop/cop/lint/useless_assignment.rb +57 -60
  25. data/lib/rubocop/cop/lint/useless_comparison.rb +1 -1
  26. data/lib/rubocop/cop/lint/useless_setter_call.rb +85 -0
  27. data/lib/rubocop/cop/lint/void.rb +6 -8
  28. data/lib/rubocop/cop/rails/has_and_belongs_to_many.rb +1 -1
  29. data/lib/rubocop/cop/rails/read_attribute.rb +1 -1
  30. data/lib/rubocop/cop/rails/validation.rb +1 -1
  31. data/lib/rubocop/cop/style/access_control.rb +4 -6
  32. data/lib/rubocop/cop/style/alias.rb +1 -3
  33. data/lib/rubocop/cop/style/align_array.rb +47 -0
  34. data/lib/rubocop/cop/style/align_hash.rb +145 -0
  35. data/lib/rubocop/cop/style/align_parameters.rb +9 -3
  36. data/lib/rubocop/cop/style/and_or.rb +3 -4
  37. data/lib/rubocop/cop/style/ascii_comments.rb +1 -3
  38. data/lib/rubocop/cop/style/ascii_identifiers.rb +1 -1
  39. data/lib/rubocop/cop/style/attr.rb +1 -4
  40. data/lib/rubocop/cop/style/begin_block.rb +1 -1
  41. data/lib/rubocop/cop/style/block_comments.rb +1 -1
  42. data/lib/rubocop/cop/style/block_nesting.rb +2 -2
  43. data/lib/rubocop/cop/style/blocks.rb +14 -2
  44. data/lib/rubocop/cop/style/case_equality.rb +1 -3
  45. data/lib/rubocop/cop/style/case_indentation.rb +1 -1
  46. data/lib/rubocop/cop/style/character_literal.rb +1 -2
  47. data/lib/rubocop/cop/style/class_and_module_camel_case.rb +1 -1
  48. data/lib/rubocop/cop/style/class_methods.rb +1 -3
  49. data/lib/rubocop/cop/style/{avoid_class_vars.rb → class_vars.rb} +6 -2
  50. data/lib/rubocop/cop/style/collection_methods.rb +7 -9
  51. data/lib/rubocop/cop/style/colon_method_call.rb +1 -2
  52. data/lib/rubocop/cop/style/comment_annotation.rb +6 -6
  53. data/lib/rubocop/cop/style/constant_name.rb +1 -3
  54. data/lib/rubocop/cop/style/def_parentheses.rb +4 -12
  55. data/lib/rubocop/cop/style/documentation.rb +2 -2
  56. data/lib/rubocop/cop/style/dot_position.rb +2 -4
  57. data/lib/rubocop/cop/style/empty_line_between_defs.rb +21 -6
  58. data/lib/rubocop/cop/style/empty_lines.rb +1 -1
  59. data/lib/rubocop/cop/style/empty_literal.rb +3 -12
  60. data/lib/rubocop/cop/style/encoding.rb +6 -6
  61. data/lib/rubocop/cop/style/end_block.rb +1 -1
  62. data/lib/rubocop/cop/style/end_of_line.rb +5 -5
  63. data/lib/rubocop/cop/style/even_odd.rb +2 -2
  64. data/lib/rubocop/cop/style/favor_join.rb +1 -3
  65. data/lib/rubocop/cop/style/favor_modifier.rb +7 -3
  66. data/lib/rubocop/cop/style/favor_sprintf.rb +1 -1
  67. data/lib/rubocop/cop/style/favor_unless_over_negated_if.rb +1 -1
  68. data/lib/rubocop/cop/style/final_newline.rb +23 -0
  69. data/lib/rubocop/cop/style/{avoid_for.rb → for.rb} +2 -2
  70. data/lib/rubocop/cop/style/{avoid_global_vars.rb → global_vars.rb} +19 -6
  71. data/lib/rubocop/cop/style/hash_methods.rb +3 -5
  72. data/lib/rubocop/cop/style/hash_syntax.rb +4 -4
  73. data/lib/rubocop/cop/style/if_then_else.rb +1 -1
  74. data/lib/rubocop/cop/style/indentation_width.rb +4 -4
  75. data/lib/rubocop/cop/style/lambda.rb +2 -2
  76. data/lib/rubocop/cop/style/leading_comment_space.rb +1 -1
  77. data/lib/rubocop/cop/style/line_length.rb +7 -8
  78. data/lib/rubocop/cop/style/method_and_variable_snake_case.rb +1 -1
  79. data/lib/rubocop/cop/style/method_call_parentheses.rb +1 -4
  80. data/lib/rubocop/cop/style/method_length.rb +4 -4
  81. data/lib/rubocop/cop/style/module_function.rb +1 -3
  82. data/lib/rubocop/cop/style/multiline_block_chain.rb +44 -0
  83. data/lib/rubocop/cop/style/nil_comparison.rb +1 -3
  84. data/lib/rubocop/cop/style/not.rb +1 -1
  85. data/lib/rubocop/cop/style/numeric_literals.rb +26 -6
  86. data/lib/rubocop/cop/style/op_method.rb +2 -2
  87. data/lib/rubocop/cop/style/parameter_lists.rb +4 -4
  88. data/lib/rubocop/cop/style/parentheses_around_condition.rb +2 -2
  89. data/lib/rubocop/cop/style/perl_backrefs.rb +26 -0
  90. data/lib/rubocop/cop/style/proc.rb +1 -3
  91. data/lib/rubocop/cop/style/reduce_arguments.rb +7 -5
  92. data/lib/rubocop/cop/style/redundant_begin.rb +1 -1
  93. data/lib/rubocop/cop/style/redundant_return.rb +9 -2
  94. data/lib/rubocop/cop/style/redundant_self.rb +9 -2
  95. data/lib/rubocop/cop/style/regexp_literal.rb +7 -8
  96. data/lib/rubocop/cop/style/rescue_modifier.rb +1 -1
  97. data/lib/rubocop/cop/style/semicolon.rb +10 -10
  98. data/lib/rubocop/cop/style/signal_exception.rb +2 -4
  99. data/lib/rubocop/cop/style/single_line_methods.rb +2 -4
  100. data/lib/rubocop/cop/style/space_after_comma_etc.rb +1 -1
  101. data/lib/rubocop/cop/style/space_after_control_keyword.rb +1 -1
  102. data/lib/rubocop/cop/style/space_after_method_name.rb +1 -1
  103. data/lib/rubocop/cop/style/space_before_modifier_keyword.rb +34 -0
  104. data/lib/rubocop/cop/style/{avoid_perlisms.rb → special_global_vars.rb} +17 -8
  105. data/lib/rubocop/cop/style/string_literals.rb +1 -2
  106. data/lib/rubocop/cop/style/surrounding_space.rb +9 -8
  107. data/lib/rubocop/cop/style/symbol_array.rb +1 -1
  108. data/lib/rubocop/cop/style/symbol_name.rb +9 -2
  109. data/lib/rubocop/cop/style/tab.rb +5 -5
  110. data/lib/rubocop/cop/style/ternary_operator.rb +2 -6
  111. data/lib/rubocop/cop/style/trailing_blank_lines.rb +32 -0
  112. data/lib/rubocop/cop/style/trailing_whitespace.rb +5 -6
  113. data/lib/rubocop/cop/style/trivial_accessors.rb +5 -5
  114. data/lib/rubocop/cop/style/unless_else.rb +1 -1
  115. data/lib/rubocop/cop/style/variable_interpolation.rb +1 -3
  116. data/lib/rubocop/cop/style/when_then.rb +1 -4
  117. data/lib/rubocop/cop/style/while_until_do.rb +7 -5
  118. data/lib/rubocop/cop/style/word_array.rb +1 -1
  119. data/lib/rubocop/cop/team.rb +100 -0
  120. data/lib/rubocop/cop/variable_inspector.rb +323 -235
  121. data/lib/rubocop/cop/variable_inspector/assignment.rb +103 -0
  122. data/lib/rubocop/cop/variable_inspector/locatable.rb +162 -0
  123. data/lib/rubocop/cop/variable_inspector/reference.rb +31 -0
  124. data/lib/rubocop/cop/variable_inspector/scope.rb +70 -0
  125. data/lib/rubocop/cop/variable_inspector/variable.rb +87 -0
  126. data/lib/rubocop/cop/variable_inspector/variable_table.rb +129 -0
  127. data/lib/rubocop/formatter/json_formatter.rb +8 -8
  128. data/lib/rubocop/formatter/progress_formatter.rb +4 -4
  129. data/lib/rubocop/processed_source.rb +22 -1
  130. data/lib/rubocop/version.rb +1 -1
  131. data/rubocop.gemspec +1 -1
  132. data/spec/rubocop/cli_spec.rb +32 -30
  133. data/spec/rubocop/config_spec.rb +4 -6
  134. data/spec/rubocop/cop/commissioner_spec.rb +4 -5
  135. data/spec/rubocop/cop/cop_spec.rb +8 -26
  136. data/spec/rubocop/cop/lint/assignment_in_condition_spec.rb +5 -9
  137. data/spec/rubocop/cop/lint/block_alignment_spec.rb +105 -57
  138. data/spec/rubocop/cop/lint/empty_ensure_spec.rb +1 -1
  139. data/spec/rubocop/cop/lint/end_alignment_spec.rb +1 -1
  140. data/spec/rubocop/cop/lint/end_in_method_spec.rb +1 -1
  141. data/spec/rubocop/cop/lint/ensure_return_spec.rb +1 -1
  142. data/spec/rubocop/cop/lint/eval_spec.rb +3 -3
  143. data/spec/rubocop/cop/lint/handle_exceptions_spec.rb +2 -2
  144. data/spec/rubocop/cop/lint/literal_in_condition_spec.rb +1 -1
  145. data/spec/rubocop/cop/lint/loop_spec.rb +1 -1
  146. data/spec/rubocop/cop/lint/parentheses_as_grouped_expression_spec.rb +1 -1
  147. data/spec/rubocop/cop/lint/rescue_exception_spec.rb +5 -5
  148. data/spec/rubocop/cop/lint/unreachable_code_spec.rb +1 -1
  149. data/spec/rubocop/cop/lint/useless_assignment_spec.rb +1545 -108
  150. data/spec/rubocop/cop/lint/useless_comparison_spec.rb +1 -1
  151. data/spec/rubocop/cop/lint/useless_setter_call_spec.rb +101 -0
  152. data/spec/rubocop/cop/lint/void_spec.rb +1 -1
  153. data/spec/rubocop/cop/offence_spec.rb +4 -4
  154. data/spec/rubocop/cop/rails/has_and_belongs_to_many_spec.rb +1 -1
  155. data/spec/rubocop/cop/rails/read_attribute_spec.rb +1 -1
  156. data/spec/rubocop/cop/rails/validation_spec.rb +1 -1
  157. data/spec/rubocop/cop/style/access_control_spec.rb +20 -20
  158. data/spec/rubocop/cop/style/alias_spec.rb +3 -3
  159. data/spec/rubocop/cop/style/align_array_spec.rb +62 -0
  160. data/spec/rubocop/cop/style/align_hash_spec.rb +267 -0
  161. data/spec/rubocop/cop/style/align_parameters_spec.rb +2 -2
  162. data/spec/rubocop/cop/style/and_or_spec.rb +1 -1
  163. data/spec/rubocop/cop/style/ascii_comments_spec.rb +2 -2
  164. data/spec/rubocop/cop/style/ascii_identifiers_spec.rb +2 -2
  165. data/spec/rubocop/cop/style/attr_spec.rb +1 -1
  166. data/spec/rubocop/cop/style/begin_block_spec.rb +1 -1
  167. data/spec/rubocop/cop/style/block_comments_spec.rb +1 -1
  168. data/spec/rubocop/cop/style/block_nesting_spec.rb +3 -3
  169. data/spec/rubocop/cop/style/blocks_spec.rb +25 -1
  170. data/spec/rubocop/cop/style/case_equality_spec.rb +1 -1
  171. data/spec/rubocop/cop/style/case_indentation_spec.rb +5 -5
  172. data/spec/rubocop/cop/style/character_literal_spec.rb +1 -1
  173. data/spec/rubocop/cop/style/class_and_module_camel_case_spec.rb +1 -1
  174. data/spec/rubocop/cop/style/class_methods_spec.rb +1 -1
  175. data/spec/rubocop/cop/style/class_vars_spec.rb +25 -0
  176. data/spec/rubocop/cop/style/collection_methods_spec.rb +5 -6
  177. data/spec/rubocop/cop/style/colon_method_call_spec.rb +0 -3
  178. data/spec/rubocop/cop/style/comment_annotation_spec.rb +20 -18
  179. data/spec/rubocop/cop/style/constant_name_spec.rb +1 -1
  180. data/spec/rubocop/cop/style/def_with_parentheses_spec.rb +1 -1
  181. data/spec/rubocop/cop/style/def_without_parentheses_spec.rb +1 -1
  182. data/spec/rubocop/cop/style/documentation_spec.rb +1 -1
  183. data/spec/rubocop/cop/style/dot_position_spec.rb +5 -5
  184. data/spec/rubocop/cop/style/empty_line_between_defs_spec.rb +35 -4
  185. data/spec/rubocop/cop/style/empty_lines_spec.rb +1 -1
  186. data/spec/rubocop/cop/style/empty_literal_spec.rb +7 -7
  187. data/spec/rubocop/cop/style/encoding_spec.rb +11 -5
  188. data/spec/rubocop/cop/style/end_block_spec.rb +1 -1
  189. data/spec/rubocop/cop/style/end_of_line_spec.rb +4 -3
  190. data/spec/rubocop/cop/style/even_odd_spec.rb +1 -1
  191. data/spec/rubocop/cop/style/favor_join_spec.rb +2 -2
  192. data/spec/rubocop/cop/style/favor_modifier_spec.rb +13 -10
  193. data/spec/rubocop/cop/style/favor_sprintf_spec.rb +4 -4
  194. data/spec/rubocop/cop/style/favor_unless_over_negated_if_spec.rb +1 -1
  195. data/spec/rubocop/cop/style/favor_until_over_negated_while_spec.rb +4 -4
  196. data/spec/rubocop/cop/style/final_newline_spec.rb +25 -0
  197. data/spec/rubocop/cop/style/{avoid_for_spec.rb → for_spec.rb} +8 -12
  198. data/spec/rubocop/cop/style/{avoid_global_vars_spec.rb → global_vars_spec.rb} +13 -3
  199. data/spec/rubocop/cop/style/hash_methods_spec.rb +1 -1
  200. data/spec/rubocop/cop/style/hash_syntax_spec.rb +20 -9
  201. data/spec/rubocop/cop/style/if_with_semicolon_spec.rb +3 -3
  202. data/spec/rubocop/cop/style/indentation_width_spec.rb +19 -19
  203. data/spec/rubocop/cop/style/lambda_spec.rb +6 -6
  204. data/spec/rubocop/cop/style/leading_comment_space_spec.rb +1 -1
  205. data/spec/rubocop/cop/style/line_length_spec.rb +3 -3
  206. data/spec/rubocop/cop/style/method_and_variable_snake_case_spec.rb +8 -9
  207. data/spec/rubocop/cop/style/method_call_parentheses_spec.rb +1 -1
  208. data/spec/rubocop/cop/style/method_length_spec.rb +18 -17
  209. data/spec/rubocop/cop/style/module_function_spec.rb +1 -1
  210. data/spec/rubocop/cop/style/multiline_block_chain_spec.rb +84 -0
  211. data/spec/rubocop/cop/style/multiline_if_then_spec.rb +2 -2
  212. data/spec/rubocop/cop/style/nil_comparison_spec.rb +1 -1
  213. data/spec/rubocop/cop/style/not_spec.rb +1 -1
  214. data/spec/rubocop/cop/style/numeric_literals_spec.rb +15 -25
  215. data/spec/rubocop/cop/style/one_line_conditional_spec.rb +2 -2
  216. data/spec/rubocop/cop/style/op_method_spec.rb +3 -3
  217. data/spec/rubocop/cop/style/parameter_lists_spec.rb +5 -5
  218. data/spec/rubocop/cop/style/parentheses_around_condition_spec.rb +4 -8
  219. data/spec/rubocop/cop/style/perl_backrefs_spec.rb +23 -0
  220. data/spec/rubocop/cop/style/proc_spec.rb +1 -1
  221. data/spec/rubocop/cop/style/reduce_arguments_spec.rb +18 -11
  222. data/spec/rubocop/cop/style/redundant_begin_spec.rb +1 -1
  223. data/spec/rubocop/cop/style/redundant_return_spec.rb +16 -1
  224. data/spec/rubocop/cop/style/redundant_self_spec.rb +6 -1
  225. data/spec/rubocop/cop/style/regexp_literal_spec.rb +19 -23
  226. data/spec/rubocop/cop/style/rescue_modifier_spec.rb +3 -3
  227. data/spec/rubocop/cop/style/semicolon_spec.rb +3 -3
  228. data/spec/rubocop/cop/style/signal_exception_spec.rb +1 -1
  229. data/spec/rubocop/cop/style/single_line_methods_spec.rb +22 -18
  230. data/spec/rubocop/cop/style/space_after_colon_spec.rb +4 -4
  231. data/spec/rubocop/cop/style/space_after_comma_spec.rb +4 -4
  232. data/spec/rubocop/cop/style/space_after_control_keyword_spec.rb +1 -1
  233. data/spec/rubocop/cop/style/space_after_method_name_spec.rb +1 -1
  234. data/spec/rubocop/cop/style/space_after_semicolon_spec.rb +3 -3
  235. data/spec/rubocop/cop/style/space_around_braces_spec.rb +13 -12
  236. data/spec/rubocop/cop/style/space_around_equals_in_default_parameter_spec.rb +3 -3
  237. data/spec/rubocop/cop/style/space_around_operators_spec.rb +25 -25
  238. data/spec/rubocop/cop/style/space_before_modifier_keyword_spec.rb +53 -0
  239. data/spec/rubocop/cop/style/space_inside_brackets_spec.rb +9 -9
  240. data/spec/rubocop/cop/style/space_inside_hash_literal_braces_spec.rb +47 -61
  241. data/spec/rubocop/cop/style/space_inside_parens_spec.rb +4 -4
  242. data/spec/rubocop/cop/style/special_global_vars_spec.rb +52 -0
  243. data/spec/rubocop/cop/style/string_literals_spec.rb +5 -5
  244. data/spec/rubocop/cop/style/symbol_array_spec.rb +1 -1
  245. data/spec/rubocop/cop/style/symbol_name_spec.rb +27 -18
  246. data/spec/rubocop/cop/style/tab_spec.rb +1 -1
  247. data/spec/rubocop/cop/style/ternary_operator_spec.rb +2 -2
  248. data/spec/rubocop/cop/style/trailing_blank_lines_spec.rb +24 -0
  249. data/spec/rubocop/cop/style/trailing_whitespace_spec.rb +7 -7
  250. data/spec/rubocop/cop/style/trivial_accessors_spec.rb +6 -14
  251. data/spec/rubocop/cop/style/unless_else_spec.rb +3 -3
  252. data/spec/rubocop/cop/style/variable_interpolation_spec.rb +5 -5
  253. data/spec/rubocop/cop/style/when_then_spec.rb +15 -15
  254. data/spec/rubocop/cop/style/while_until_do_spec.rb +3 -3
  255. data/spec/rubocop/cop/style/word_array_spec.rb +1 -1
  256. data/spec/rubocop/cop/team_spec.rb +158 -0
  257. data/spec/rubocop/cop/variable_inspector/assignment_spec.rb +217 -0
  258. data/spec/rubocop/cop/variable_inspector/locatable_spec.rb +740 -0
  259. data/spec/rubocop/cop/variable_inspector/scope_spec.rb +191 -0
  260. data/spec/rubocop/cop/variable_inspector/variable_spec.rb +79 -0
  261. data/spec/rubocop/cop/variable_inspector/variable_table_spec.rb +275 -0
  262. data/spec/rubocop/cop/variable_inspector_spec.rb +13 -533
  263. data/spec/rubocop/formatter/clang_style_formatter_spec.rb +4 -4
  264. data/spec/rubocop/formatter/disabled_config_formatter_spec.rb +1 -1
  265. data/spec/rubocop/formatter/emacs_style_formatter_spec.rb +3 -3
  266. data/spec/rubocop/formatter/file_list_formatter_spec.rb +3 -3
  267. data/spec/rubocop/formatter/progress_formatter_spec.rb +1 -1
  268. data/spec/spec_helper.rb +5 -1
  269. data/spec/support/ast_helper.rb +15 -0
  270. data/spec/support/shared_context.rb +18 -0
  271. data/spec/support/shared_examples.rb +1 -1
  272. metadata +95 -32
  273. checksums.yaml +0 -7
  274. data/lib/rubocop/cop/lint/unused_local_variable.rb +0 -32
  275. data/lib/rubocop/cop/style/avoid_perl_backrefs.rb +0 -19
  276. data/spec/rubocop/cop/lint/unused_local_variable_spec.rb +0 -588
  277. data/spec/rubocop/cop/style/avoid_class_vars_spec.rb +0 -27
  278. data/spec/rubocop/cop/style/avoid_perl_backrefs_spec.rb +0 -20
  279. data/spec/rubocop/cop/style/avoid_perlisms_spec.rb +0 -47
@@ -8,10 +8,7 @@ module Rubocop
8
8
  MSG = 'Do not use `attr`. Use `attr_reader` instead.'
9
9
 
10
10
  def on_send(node)
11
- if command?(:attr, node)
12
- add_offence(:convention, node.loc.selector, MSG)
13
- do_autocorrect(node)
14
- end
11
+ convention(node, :selector) if command?(:attr, node)
15
12
  end
16
13
 
17
14
  def autocorrect_action(node)
@@ -8,7 +8,7 @@ module Rubocop
8
8
  MSG = 'Avoid the use of BEGIN blocks.'
9
9
 
10
10
  def on_preexe(node)
11
- add_offence(:convention, node.loc.keyword, MSG)
11
+ convention(node, :keyword)
12
12
  end
13
13
  end
14
14
  end
@@ -10,7 +10,7 @@ module Rubocop
10
10
  def investigate(processed_source)
11
11
  processed_source.comments.each do |comment|
12
12
  if comment.text.start_with?('=begin')
13
- add_offence(:convention, comment.loc.expression, MSG)
13
+ convention(comment, :expression)
14
14
  end
15
15
  end
16
16
  end
@@ -14,7 +14,7 @@ module Rubocop
14
14
 
15
15
  def investigate(processed_source)
16
16
  return unless processed_source.ast
17
- max = BlockNesting.config['Max']
17
+ max = cop_config['Max']
18
18
  check_nesting_level(processed_source.ast, max, 0)
19
19
  end
20
20
 
@@ -27,7 +27,7 @@ module Rubocop
27
27
  current_level += 1
28
28
  end
29
29
  if current_level == max + 1
30
- add_offence(:convention, node.location.expression, message(max))
30
+ convention(node, :expression, message(max))
31
31
  return
32
32
  end
33
33
  end
@@ -29,9 +29,21 @@ module Rubocop
29
29
  block_begin = node.loc.begin.source
30
30
 
31
31
  if block_length > 0 && block_begin == '{'
32
- add_offence(:convention, node.loc.begin, MULTI_LINE_MSG)
32
+ convention(node, :begin, MULTI_LINE_MSG)
33
33
  elsif block_length == 0 && block_begin != '{'
34
- add_offence(:convention, node.loc.begin, SINGLE_LINE_MSG)
34
+ convention(node, :begin, SINGLE_LINE_MSG)
35
+ end
36
+ end
37
+
38
+ def autocorrect_action(node)
39
+ @corrections << lambda do |corrector|
40
+ if node.loc.begin.is?('{')
41
+ corrector.replace(node.loc.begin, 'do')
42
+ corrector.replace(node.loc.end, 'end')
43
+ else
44
+ corrector.replace(node.loc.begin, '{')
45
+ corrector.replace(node.loc.end, '}')
46
+ end
35
47
  end
36
48
  end
37
49
 
@@ -10,9 +10,7 @@ module Rubocop
10
10
  def on_send(node)
11
11
  _receiver, method_name, *_args = *node
12
12
 
13
- if method_name == :===
14
- add_offence(:convention, node.loc.selector, MSG)
15
- end
13
+ convention(node, :selector) if method_name == :===
16
14
  end
17
15
  end
18
16
  end
@@ -17,7 +17,7 @@ module Rubocop
17
17
 
18
18
  whens.each do |when_node|
19
19
  pos = when_node.loc.keyword
20
- add_offence(:convention, pos, MSG) if pos.column != case_column
20
+ convention(when_node, pos) if pos.column != case_column
21
21
  end
22
22
  end
23
23
  end
@@ -16,8 +16,7 @@ module Rubocop
16
16
  # we don't register an offence for things like ?\C-\M-d
17
17
  if node.loc.begin.is?('?') &&
18
18
  node.loc.expression.source.size.between?(2, 3)
19
- add_offence(:convention, node.loc.expression, MSG)
20
- do_autocorrect(node)
19
+ convention(node, :expression)
21
20
  end
22
21
  end
23
22
 
@@ -21,7 +21,7 @@ module Rubocop
21
21
  def check_name(node)
22
22
  name = node.loc.name.source
23
23
 
24
- add_offence(:convention, node.loc.name, MSG) if name =~ /_/
24
+ convention(node, :name) if name =~ /_/
25
25
  end
26
26
  end
27
27
  end
@@ -12,9 +12,7 @@ module Rubocop
12
12
  def on_defs(node)
13
13
  definee, _name, _args, _body = *node
14
14
 
15
- if definee.type == :const
16
- add_offence(:convention, definee.loc.name, MSG)
17
- end
15
+ convention(definee, :name) if definee.type == :const
18
16
  end
19
17
  end
20
18
  end
@@ -6,12 +6,16 @@ module Rubocop
6
6
  # This cop checks for uses of class variables. Offences
7
7
  # are signaled only on assignment to class variables to
8
8
  # reduced the number of offences that would be reported.
9
- class AvoidClassVars < Cop
9
+ class ClassVars < Cop
10
10
  MSG = 'Replace class var %s with a class instance var.'
11
11
 
12
12
  def on_cvasgn(node)
13
+ convention(node, :name)
14
+ end
15
+
16
+ def message(node)
13
17
  class_var, = *node
14
- add_offence(:convention, node.loc.name, sprintf(MSG, class_var))
18
+ MSG.format(class_var)
15
19
  end
16
20
  end
17
21
  end
@@ -12,9 +12,9 @@ module Rubocop
12
12
  class CollectionMethods < Cop
13
13
  MSG = 'Prefer %s over %s.'
14
14
 
15
- def self.preferred_methods
16
- if config['PreferredMethods']
17
- config['PreferredMethods'].symbolize_keys
15
+ def preferred_methods
16
+ if cop_config['PreferredMethods']
17
+ cop_config['PreferredMethods'].symbolize_keys
18
18
  end
19
19
  end
20
20
 
@@ -44,20 +44,18 @@ module Rubocop
44
44
  def check_method_node(node)
45
45
  _receiver, method_name, *_args = *node
46
46
 
47
- if self.class.preferred_methods[method_name]
48
- add_offence(
49
- :convention,
50
- node.loc.selector,
47
+ if preferred_methods[method_name]
48
+ convention(
49
+ node, :selector,
51
50
  sprintf(MSG,
52
51
  preferred_method(method_name),
53
52
  method_name)
54
53
  )
55
- do_autocorrect(node)
56
54
  end
57
55
  end
58
56
 
59
57
  def preferred_method(method)
60
- self.class.preferred_methods[method.to_sym]
58
+ preferred_methods[method.to_sym]
61
59
  end
62
60
  end
63
61
  end
@@ -15,8 +15,7 @@ module Rubocop
15
15
  return unless receiver && node.loc.dot && node.loc.dot.is?('::')
16
16
  return if allowed_name(_method_name.to_s)
17
17
 
18
- add_offence(:convention, node.loc.dot, MSG)
19
- do_autocorrect(node)
18
+ convention(node, :dot)
20
19
  end
21
20
 
22
21
  def allowed_name(method_name)
@@ -6,8 +6,8 @@ module Rubocop
6
6
  # This cop checks that comment annotation keywords are written according
7
7
  # to guidelines.
8
8
  class CommentAnnotation < Cop
9
- MSG = 'Annotation keywords shall be all upper case, followed by a ' +
10
- 'colon and a space, then a note describing the problem.'
9
+ MSG = 'Annotation keywords should be all upper case, followed by a ' \
10
+ 'colon and a space, then a note describing the problem.'
11
11
 
12
12
  def investigate(processed_source)
13
13
  processed_source.comments.each do |comment|
@@ -21,14 +21,14 @@ module Rubocop
21
21
  range = Parser::Source::Range.new(processed_source.buffer,
22
22
  start,
23
23
  start + length)
24
- add_offence(:convention, range, MSG)
24
+ convention(nil, range)
25
25
  end
26
26
  end
27
27
  end
28
28
  end
29
29
 
30
- def self.keywords
31
- CommentAnnotation.config['Keywords']
30
+ def keywords
31
+ cop_config['Keywords']
32
32
  end
33
33
 
34
34
  private
@@ -51,7 +51,7 @@ module Rubocop
51
51
  end
52
52
 
53
53
  def keyword?(word)
54
- CommentAnnotation.keywords.include?(word)
54
+ keywords.include?(word)
55
55
  end
56
56
  end
57
57
  end
@@ -18,9 +18,7 @@ module Rubocop
18
18
  # We cannot know the result of method calls line
19
19
  # NewClass = something_that_returns_a_class
20
20
  unless value && [:send, :block].include?(value.type)
21
- if const_name !~ SNAKE_CASE
22
- add_offence(:convention, node.loc.name, MSG)
23
- end
21
+ convention(node, :name) if const_name !~ SNAKE_CASE
24
22
  end
25
23
  end
26
24
  end
@@ -17,10 +17,7 @@ module Rubocop
17
17
  return if start_line == end_line
18
18
 
19
19
  _, args = *node
20
- if args.children == [] && args.loc.begin
21
- add_offence(:convention, args.loc.begin, MSG)
22
- do_autocorrect(args)
23
- end
20
+ convention(args, :begin) if args.children == [] && args.loc.begin
24
21
  end
25
22
 
26
23
  def on_defs(node)
@@ -30,10 +27,7 @@ module Rubocop
30
27
  return if start_line == end_line
31
28
 
32
29
  _, _, args = *node
33
- if args.children == [] && args.loc.begin
34
- add_offence(:convention, args.loc.begin, MSG)
35
- do_autocorrect(args)
36
- end
30
+ convention(args, :begin) if args.children == [] && args.loc.begin
37
31
  end
38
32
 
39
33
  def autocorrect_action(node)
@@ -54,8 +48,7 @@ module Rubocop
54
48
  _, args = *node
55
49
 
56
50
  if args.children.size > 0 && args.loc.begin.nil?
57
- add_offence(:convention, args.loc.expression, MSG)
58
- do_autocorrect(args)
51
+ convention(args, :expression)
59
52
  end
60
53
  end
61
54
 
@@ -63,8 +56,7 @@ module Rubocop
63
56
  _, _, args = *node
64
57
 
65
58
  if args.children.size > 0 && args.loc.begin.nil?
66
- add_offence(:convention, args.loc.expression, MSG)
67
- do_autocorrect(args)
59
+ convention(args, :expression)
68
60
  end
69
61
  end
70
62
 
@@ -30,7 +30,7 @@ module Rubocop
30
30
  _name, _superclass, body = *node
31
31
 
32
32
  if body && ast_with_comments[node].empty?
33
- add_offence(:convention, node.loc.keyword, format(MSG, 'class'))
33
+ convention(node, :keyword, format(MSG, 'class'))
34
34
  end
35
35
  end
36
36
  end
@@ -52,7 +52,7 @@ module Rubocop
52
52
  end
53
53
 
54
54
  if !namespace && ast_with_comments[node].empty?
55
- add_offence(:convention, node.loc.keyword, format(MSG, 'module'))
55
+ convention(node, :keyword, format(MSG, 'module'))
56
56
  end
57
57
  end
58
58
  end
@@ -10,9 +10,7 @@ module Rubocop
10
10
  def on_send(node)
11
11
  return unless node.loc.dot
12
12
 
13
- unless proper_dot_position?(node)
14
- add_offence(:convention, node.loc.dot, MSG)
15
- end
13
+ convention(node, :dot) unless proper_dot_position?(node)
16
14
  end
17
15
 
18
16
  private
@@ -27,7 +25,7 @@ module Rubocop
27
25
  selector_line = node.loc.begin.line
28
26
  end
29
27
 
30
- case DotPosition.config['Style'].downcase
28
+ case cop_config['Style'].downcase
31
29
  when 'leading' then dot_line == selector_line
32
30
  when 'trailing' then dot_line != selector_line
33
31
  else fail 'Unknown dot position style selected.'
@@ -9,14 +9,29 @@ module Rubocop
9
9
  MSG = 'Use empty lines between defs.'
10
10
 
11
11
  def on_def(node)
12
- def_start = node.loc.keyword.line
13
- def_end = node.loc.end.line
14
-
15
- if @prev_def_end && (def_start - @prev_def_end) == 1
16
- add_offence(:convention, node.loc.keyword, MSG)
12
+ if @prev_def_end && (def_start(node) - @prev_def_end) == 1
13
+ unless @prev_was_single_line && singe_line_def?(node) &&
14
+ cop_config['AllowAdjacentOneLineDefs']
15
+ convention(node, :keyword)
16
+ end
17
17
  end
18
18
 
19
- @prev_def_end = def_end
19
+ @prev_def_end = def_end(node)
20
+ @prev_was_single_line = singe_line_def?(node)
21
+ end
22
+
23
+ private
24
+
25
+ def singe_line_def?(node)
26
+ def_start(node) == def_end(node)
27
+ end
28
+
29
+ def def_start(node)
30
+ node.loc.keyword.line
31
+ end
32
+
33
+ def def_end(node)
34
+ node.loc.end.line
20
35
  end
21
36
  end
22
37
  end
@@ -28,7 +28,7 @@ module Rubocop
28
28
  processed_source[0...(line - 1)],
29
29
  0,
30
30
  1)
31
- add_offence(:convention, range, MSG)
31
+ convention(nil, range)
32
32
  end
33
33
  end
34
34
  end
@@ -33,20 +33,11 @@ module Rubocop
33
33
 
34
34
  case node
35
35
  when ARRAY_NODE
36
- add_offence(:convention,
37
- node.loc.expression,
38
- ARR_MSG)
39
- do_autocorrect(node)
36
+ convention(node, :expression, ARR_MSG)
40
37
  when HASH_NODE
41
- add_offence(:convention,
42
- node.loc.expression,
43
- HASH_MSG)
44
- do_autocorrect(node)
38
+ convention(node, :expression, HASH_MSG)
45
39
  when STR_NODE
46
- add_offence(:convention,
47
- node.loc.expression,
48
- STR_MSG)
49
- do_autocorrect(node)
40
+ convention(node, :expression, STR_MSG)
50
41
  end
51
42
  end
52
43
 
@@ -15,12 +15,12 @@ module Rubocop
15
15
  line_number = 0
16
16
  line_number += 1 if processed_source[line_number] =~ /^#!/
17
17
  line = processed_source[line_number]
18
- unless line =~ /#.*coding\s?: (UTF|utf)-8/
19
- add_offence(:convention,
20
- source_range(processed_source.buffer,
21
- processed_source[0...line_number],
22
- 0, 1),
23
- MSG)
18
+ unless line =~ /#.*coding\s?[:=]\s?(UTF|utf)-8/
19
+ convention(nil,
20
+ source_range(processed_source.buffer,
21
+ processed_source[0...line_number],
22
+ 0, 1),
23
+ MSG)
24
24
  end
25
25
  end
26
26
  end
@@ -8,7 +8,7 @@ module Rubocop
8
8
  MSG = 'Avoid the use of END blocks. Use `Kernel#at_exit` instead.'
9
9
 
10
10
  def on_postexe(node)
11
- add_offence(:convention, node.loc.keyword, MSG)
11
+ convention(node, :keyword)
12
12
  end
13
13
  end
14
14
  end
@@ -10,11 +10,11 @@ module Rubocop
10
10
  def investigate(processed_source)
11
11
  processed_source.lines.each_with_index do |line, index|
12
12
  if line =~ /\r$/
13
- add_offence(:convention,
14
- source_range(processed_source.buffer,
15
- processed_source[0...index],
16
- line.length - 1, 1),
17
- MSG)
13
+ convention(nil,
14
+ source_range(processed_source.buffer,
15
+ processed_source[0...index],
16
+ line.length - 1, 1),
17
+ MSG)
18
18
  end
19
19
  end
20
20
  end