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,143 @@
1
+ # encoding: utf-8
2
+
3
+ module Rubocop
4
+ module Cop
5
+ module Style
6
+ # This cop enforces the consitent useage of `%`-literal delimiters.
7
+ class PercentLiteralDelimiters < Cop
8
+ def on_array(node)
9
+ process(node, '%w', '%W', '%i')
10
+ end
11
+
12
+ def on_regexp(node)
13
+ process(node, '%r')
14
+ end
15
+
16
+ def on_str(node)
17
+ process(node, '%', '%Q', '%q')
18
+ end
19
+ alias_method :on_dstr, :on_str
20
+
21
+ def on_sym(node)
22
+ process(node, '%s')
23
+ end
24
+
25
+ def on_xstr(node)
26
+ process(node, '%x')
27
+ end
28
+
29
+ def message(node)
30
+ type = type(node)
31
+ delimiters = preferred_delimiters(type)
32
+
33
+ "`#{type}`-literals should be delimited by " \
34
+ "`#{delimiters[0]}` and `#{delimiters[1]}`"
35
+ end
36
+
37
+ private
38
+
39
+ def autocorrect(node)
40
+ type = type(node)
41
+
42
+ opening_delimiter, closing_delimiter = preferred_delimiters(type)
43
+ opening_newline = new_line(node.loc.begin, node.children.first)
44
+ closing_newline = new_line(node.loc.end, node.children.last)
45
+
46
+ expression, reg_opt =
47
+ if node.type == :regexp
48
+ [contents(node.children.first), contents(node.children.last)]
49
+ else
50
+ [contents(node), '']
51
+ end
52
+
53
+ corrected_source =
54
+ type + opening_delimiter + opening_newline +
55
+ expression +
56
+ closing_newline + closing_delimiter + reg_opt
57
+
58
+ @corrections << lambda do |corrector|
59
+ corrector.replace(
60
+ node.loc.expression,
61
+ corrected_source
62
+ )
63
+ end
64
+ end
65
+
66
+ def process(node, *types)
67
+ on_percent_literal(node, types) if percent_literal?(node)
68
+ end
69
+
70
+ def percent_literal?(node)
71
+ if (begin_source = begin_source(node))
72
+ begin_source.start_with?('%')
73
+ end
74
+ end
75
+
76
+ def on_percent_literal(node, types)
77
+ type = type(node)
78
+ if types.include?(type) &&
79
+ !uses_preferred_delimiter?(node, type) &&
80
+ !contains_preferred_delimiter?(node, type)
81
+ add_offense(node, :expression)
82
+ end
83
+ end
84
+
85
+ def type(node)
86
+ node.loc.begin.source[0..-2]
87
+ end
88
+
89
+ def preferred_delimiters(type)
90
+ cop_config['PreferredDelimiters'][type].split(//)
91
+ end
92
+
93
+ def contents(node)
94
+ if node.children.empty?
95
+ ''
96
+ elsif node.children.first.is_a?(Parser::AST::Node)
97
+ Parser::Source::Range.new(
98
+ node.loc.expression.source_buffer,
99
+ node.children.first.loc.expression.begin_pos,
100
+ node.children.last.loc.expression.end_pos
101
+ ).source
102
+ else
103
+ node.children.first.to_s
104
+ end
105
+ end
106
+
107
+ def uses_preferred_delimiter?(node, type)
108
+ preferred_delimiters(type)[0] == begin_source(node)[-1]
109
+ end
110
+
111
+ def contains_preferred_delimiter?(node, type)
112
+ preferred_delimiters = preferred_delimiters(type)
113
+ node
114
+ .children.map { |n| string_source(n) }.compact
115
+ .any? { |s| preferred_delimiters.any? { |d| s.include?(d) } }
116
+ end
117
+
118
+ def begin_source(node)
119
+ if node.loc.respond_to?(:begin) && node.loc.begin
120
+ node.loc.begin.source
121
+ end
122
+ end
123
+
124
+ def string_source(node)
125
+ if node.is_a?(String)
126
+ node
127
+ elsif node.respond_to?(:type) && node.type == :str
128
+ node.loc.expression.source
129
+ end
130
+ end
131
+
132
+ def new_line(range, child_node)
133
+ same_line?(range, child_node) ? '' : "\n"
134
+ end
135
+
136
+ def same_line?(range, child_node)
137
+ !child_node.is_a?(Parser::AST::Node) ||
138
+ range.begin.line == child_node.loc.line
139
+ end
140
+ end
141
+ end
142
+ end
143
+ end
@@ -9,7 +9,7 @@ module Rubocop
9
9
  MSG = 'Avoid the use of Perl-style backrefs.'
10
10
 
11
11
  def on_nth_ref(node)
12
- add_offence(node, :expression)
12
+ add_offense(node, :expression)
13
13
  end
14
14
 
15
15
  def autocorrect(node)
@@ -25,7 +25,7 @@ module Rubocop
25
25
  def check(node, method_name, args, _body)
26
26
  prefix_blacklist.each do |prefix|
27
27
  if method_name.to_s.start_with?(prefix)
28
- add_offence(node, :name,
28
+ add_offense(node, :name,
29
29
  message(method_name.to_s, prefix))
30
30
  end
31
31
  end
@@ -18,7 +18,7 @@ module Rubocop
18
18
  # ...)
19
19
  block_method, = *node
20
20
 
21
- add_offence(block_method, :expression) if block_method == TARGET
21
+ add_offense(block_method, :expression) if block_method == TARGET
22
22
  end
23
23
 
24
24
  def autocorrect(node)
@@ -24,7 +24,7 @@ module Rubocop
24
24
  _receiver, selector, *args = *node
25
25
 
26
26
  if args.size > 1
27
- add_offence(node, :expression, message(selector)) do
27
+ add_offense(node, :expression, message(selector)) do
28
28
  opposite_style_detected
29
29
  end
30
30
  else
@@ -43,7 +43,7 @@ module Rubocop
43
43
 
44
44
  # Allow code like `raise Ex.new(arg1, arg2)`.
45
45
  if constructor_args.size <= 1
46
- add_offence(node, :expression, message(selector)) do
46
+ add_offense(node, :expression, message(selector)) do
47
47
  opposite_style_detected
48
48
  end
49
49
  end
@@ -27,7 +27,7 @@ module Rubocop
27
27
  def check(_node, _method_name, _args, body)
28
28
  return unless body && body.type == :kwbegin
29
29
 
30
- add_offence(body, :begin)
30
+ add_offense(body, :begin)
31
31
  end
32
32
  end
33
33
  end
@@ -24,7 +24,7 @@ module Rubocop
24
24
 
25
25
  first_arg, = *args
26
26
 
27
- add_offence(first_arg, :expression) if first_arg == TARGET_NODE
27
+ add_offense(first_arg, :expression) if first_arg == TARGET_NODE
28
28
  end
29
29
  end
30
30
  end
@@ -58,7 +58,7 @@ module Rubocop
58
58
  return if cop_config['AllowMultipleReturnValues'] &&
59
59
  node.children.size > 1
60
60
 
61
- add_offence(node, :keyword)
61
+ add_offense(node, :keyword)
62
62
  end
63
63
  end
64
64
  end
@@ -88,7 +88,7 @@ module Rubocop
88
88
  @local_variables << lhs
89
89
  end
90
90
 
91
- # Detect offences
91
+ # Detect offenses
92
92
 
93
93
  def on_send(node)
94
94
  receiver, method_name, *_args = *node
@@ -97,7 +97,7 @@ module Rubocop
97
97
  constant_name?(method_name) ||
98
98
  @allowed_send_nodes.include?(node) ||
99
99
  @local_variables.include?(method_name)
100
- add_offence(node, :expression)
100
+ add_offense(node, :expression)
101
101
  end
102
102
  end
103
103
  end
@@ -3,47 +3,73 @@
3
3
  module Rubocop
4
4
  module Cop
5
5
  module Style
6
- # This cop checks for regexp literals and reports offences based
6
+ # This cop checks for regexp literals and reports offenses based
7
7
  # on how many escaped slashes there are in the regexp and on the
8
8
  # value of the configuration parameter MaxSlashes.
9
9
  class RegexpLiteral < Cop
10
- include ConfigurableMax
11
-
12
10
  def on_regexp(node)
13
11
  string_parts = node.children.select { |child| child.type == :str }
14
12
  total_string = string_parts.map { |s| s.loc.expression.source }.join
15
13
  slashes = total_string.count('/')
16
14
  if node.loc.begin.is?('/')
17
15
  if slashes > max_slashes
18
- msg = error_message('')
19
- safe_setting = slashes
16
+ add_offense(node, :expression, error_message('')) do
17
+ self.slash_count_in_slashes_regexp = slashes
18
+ end
20
19
  end
21
20
  elsif slashes <= max_slashes
22
- msg = error_message('only ')
23
- safe_setting = slashes + 1
21
+ add_offense(node, :expression, error_message('only ')) do
22
+ self.slash_count_in_percent_r_regexp = slashes
23
+ end
24
24
  end
25
+ end
25
26
 
26
- if msg
27
- add_offence(node, :expression, msg) { self.max = safe_setting }
27
+ private
28
+
29
+ def max_slashes
30
+ m = cop_config['MaxSlashes']
31
+ unless m.is_a?(Fixnum) && m >= 0
32
+ fail "Illegal value for MaxSlashes: #{m}"
28
33
  end
34
+ m
29
35
  end
30
36
 
31
- def max_slashes
32
- cop_config['MaxSlashes']
37
+ # MaxSlashes must be set equal to the highest number of slashes used
38
+ # within // to avoid reports.
39
+ def slash_count_in_slashes_regexp=(value)
40
+ configure_slashes(value) { |current| [current, value].max }
33
41
  end
34
42
 
35
- private
43
+ # MaxSlashes must be set one less than the highest number of slashes
44
+ # used within %r{} to avoid reports.
45
+ def slash_count_in_percent_r_regexp=(value)
46
+ configure_slashes(value - 1) { |current| [current, value - 1].min }
47
+ end
48
+
49
+ def configure_slashes(value)
50
+ cfg = self.config_to_allow_offenses ||= {}
51
+ return if cfg.key?('Enabled')
52
+
53
+ if cfg['MaxSlashes']
54
+ value = yield cfg['MaxSlashes']
55
+ if cfg['MaxSlashes'] > max_slashes && value < max_slashes ||
56
+ cfg['MaxSlashes'] < max_slashes && value > max_slashes
57
+ # We can't both increase and decrease MaxSlashes to avoid
58
+ # reports. This means that the only option is to disable the cop.
59
+ cfg = self.config_to_allow_offenses = { 'Enabled' => false }
60
+ return
61
+ end
62
+ end
36
63
 
37
- def parameter_name
38
- 'MaxSlashes'
64
+ cfg['MaxSlashes'] = value
39
65
  end
40
66
 
41
67
  def error_message(word)
42
- sprintf('Use %%r %sfor regular expressions matching more ' \
43
- "than %d '/' character%s.",
44
- word,
45
- max_slashes,
46
- max_slashes == 1 ? '' : 's')
68
+ format('Use %%r %sfor regular expressions matching more ' \
69
+ "than %d '/' character%s.",
70
+ word,
71
+ max_slashes,
72
+ max_slashes == 1 ? '' : 's')
47
73
  end
48
74
  end
49
75
  end
@@ -12,7 +12,7 @@ module Rubocop
12
12
  def on_rescue(node)
13
13
  return if ignored_node?(node)
14
14
 
15
- add_offence(node, :expression)
15
+ add_offense(node, :expression)
16
16
  end
17
17
 
18
18
  def on_kwbegin(node)
@@ -0,0 +1,73 @@
1
+ # encoding: utf-8
2
+
3
+ module Rubocop
4
+ module Cop
5
+ module Style
6
+ # This cop enforces the use the shorthand for self-assignment.
7
+ #
8
+ # @example
9
+ #
10
+ # # bad
11
+ # x = x + 1
12
+ #
13
+ # # good
14
+ # x += 1
15
+ class SelfAssignment < Cop
16
+ include AST::Sexp
17
+
18
+ OPS = [:+, :-, :*, :**, :/, :|, :&]
19
+
20
+ def on_lvasgn(node)
21
+ check(node, :lvar)
22
+ end
23
+
24
+ def on_ivasgn(node)
25
+ check(node, :ivar)
26
+ end
27
+
28
+ def on_cvasgn(node)
29
+ check(node, :cvar)
30
+ end
31
+
32
+ def check(node, var_type)
33
+ var_name, rhs = *node
34
+
35
+ return unless rhs
36
+
37
+ if rhs.type == :send
38
+ check_send_node(node, rhs, var_name, var_type)
39
+ elsif [:and, :or].include?(rhs.type)
40
+ check_boolean_node(node, rhs, var_name, var_type)
41
+ end
42
+ end
43
+
44
+ def check_send_node(node, rhs, var_name, var_type)
45
+ receiver, method_name, *_args = *rhs
46
+
47
+ return unless OPS.include?(method_name)
48
+
49
+ target_node = s(var_type, var_name)
50
+
51
+ if receiver == target_node
52
+ add_offense(node,
53
+ :expression,
54
+ "Use self-assignment shorthand #{method_name}=.")
55
+ end
56
+ end
57
+
58
+ def check_boolean_node(node, rhs, var_name, var_type)
59
+ first_operand, _second_operand = *rhs
60
+
61
+ target_node = s(var_type, var_name)
62
+
63
+ if first_operand == target_node
64
+ operator = rhs.loc.operator.source
65
+ add_offense(node,
66
+ :expression,
67
+ "Use self-assignment shorthand #{operator}=.")
68
+ end
69
+ end
70
+ end
71
+ end
72
+ end
73
+ end
@@ -25,14 +25,14 @@ module Rubocop
25
25
  exprs_lines = exprs.map { |e| e.loc.expression.line }
26
26
  lines = exprs_lines.group_by { |i| i }
27
27
 
28
- # every line with more than 1 expression on it is an offence
28
+ # every line with more than 1 expression on it is an offense
29
29
  lines.each do |line, expr_on_line|
30
30
  if expr_on_line.size > 1
31
31
  # TODO: Find the correct position of the semicolon. We don't
32
32
  # know if the first semicolon on the line is a separator of
33
33
  # expressions. It's just a guess.
34
34
  column = @processed_source[line - 1].index(';')
35
- convention_on(line, column)
35
+ convention_on(line, column, !:last_on_line)
36
36
  end
37
37
  end
38
38
  end
@@ -47,16 +47,20 @@ module Rubocop
47
47
 
48
48
  tokens_for_lines.each do |line, tokens|
49
49
  if tokens.last.type == :tSEMI
50
- convention_on(line, tokens.last.pos.column)
50
+ convention_on(line, tokens.last.pos.column, :last_on_line)
51
51
  end
52
52
  end
53
53
  end
54
54
 
55
- def convention_on(line, column)
56
- add_offence(nil,
57
- source_range(@processed_source.buffer,
58
- @processed_source[0...(line - 1)], column,
59
- 1))
55
+ def convention_on(line, column, last_on_line)
56
+ range = source_range(@processed_source.buffer,
57
+ @processed_source[0...(line - 1)], column,
58
+ 1)
59
+ add_offense(last_on_line ? range : nil, range)
60
+ end
61
+
62
+ def autocorrect(range)
63
+ @corrections << ->(corrector) { corrector.remove(range) } if range
60
64
  end
61
65
  end
62
66
  end