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
@@ -13,8 +13,9 @@ module Rubocop
13
13
 
14
14
  prev_line = 1
15
15
 
16
- processed_source.tokens.each do |token|
16
+ processed_source.tokens.sort_by { |t| t.pos.line }.each do |token|
17
17
  cur_line = token.pos.line
18
+
18
19
  line_diff = cur_line - prev_line
19
20
 
20
21
  if line_diff > LINE_OFFSET
@@ -28,7 +29,7 @@ module Rubocop
28
29
  processed_source[0...(line - 1)],
29
30
  0,
30
31
  1)
31
- add_offence(range, range)
32
+ add_offense(range, range)
32
33
  end
33
34
  end
34
35
  end
@@ -16,7 +16,7 @@ module Rubocop
16
16
 
17
17
  return if empty_lines_around?(node)
18
18
 
19
- add_offence(node, :expression)
19
+ add_offense(node, :expression)
20
20
  end
21
21
 
22
22
  private
@@ -65,7 +65,7 @@ module Rubocop
65
65
  processed_source[0...line],
66
66
  0,
67
67
  1)
68
- add_offence(range, range, msg)
68
+ add_offense(range, range, msg)
69
69
  end
70
70
  end
71
71
  end
@@ -33,11 +33,11 @@ module Rubocop
33
33
 
34
34
  case node
35
35
  when ARRAY_NODE
36
- add_offence(node, :expression, ARR_MSG)
36
+ add_offense(node, :expression, ARR_MSG)
37
37
  when HASH_NODE
38
- add_offence(node, :expression, HASH_MSG)
38
+ add_offense(node, :expression, HASH_MSG)
39
39
  when STR_NODE
40
- add_offence(node, :expression, STR_MSG)
40
+ add_offense(node, :expression, STR_MSG)
41
41
  end
42
42
  end
43
43
 
@@ -16,7 +16,7 @@ module Rubocop
16
16
  line_number += 1 if processed_source[line_number] =~ /^#!/
17
17
  line = processed_source[line_number]
18
18
  unless line =~ /#.*coding\s?[:=]\s?(UTF|utf)-8/
19
- add_offence(nil,
19
+ add_offense(nil,
20
20
  source_range(processed_source.buffer,
21
21
  processed_source[0...line_number],
22
22
  0, 1),
@@ -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(node, :keyword)
11
+ add_offense(node, :keyword)
12
12
  end
13
13
  end
14
14
  end
@@ -13,13 +13,13 @@ module Rubocop
13
13
  encoding: buffer.source.encoding)
14
14
  original_source.lines.each_with_index do |line, index|
15
15
  if line =~ /\r$/
16
- add_offence(nil,
16
+ add_offense(nil,
17
17
  source_range(buffer,
18
18
  processed_source[0...index],
19
19
  0, line.length),
20
20
  MSG)
21
21
  # Usually there will be carriage return characters on all or none
22
- # of the lines in a file, so we report only one offence.
22
+ # of the lines in a file, so we report only one offense.
23
23
  break
24
24
  end
25
25
  end
@@ -28,11 +28,11 @@ module Rubocop
28
28
  return unless div_by_2?(receiver)
29
29
 
30
30
  if args == ZERO
31
- add_offence(node,
31
+ add_offense(node,
32
32
  :expression,
33
33
  method == :== ? MSG_EVEN : MSG_ODD)
34
34
  elsif args == ONE
35
- add_offence(node,
35
+ add_offense(node,
36
36
  :expression,
37
37
  method == :== ? MSG_ODD : MSG_EVEN)
38
38
  end
@@ -16,7 +16,7 @@ module Rubocop
16
16
 
17
17
  if receiver_node && receiver_node.type == :array &&
18
18
  method_name == :* && arg_nodes[0].type == :str
19
- add_offence(node, :selector)
19
+ add_offense(node, :selector)
20
20
  end
21
21
  end
22
22
  end
@@ -0,0 +1,29 @@
1
+ # encoding: utf-8
2
+
3
+ module Rubocop
4
+ module Cop
5
+ module Style
6
+ # This cop makes sure that Ruby source files have snake_case names.
7
+ class FileName < Cop
8
+ MSG = 'Use snake_case for source file names.'
9
+
10
+ SNAKE_CASE = /^[\da-z_]+$/
11
+
12
+ def investigate(processed_source)
13
+ file_path = processed_source.buffer.name
14
+
15
+ return if config.file_to_include?(file_path)
16
+
17
+ basename = File.basename(file_path).sub(/\.[^\.]+$/, '')
18
+
19
+ unless basename =~ SNAKE_CASE
20
+ add_offense(nil,
21
+ source_range(processed_source.buffer,
22
+ processed_source[0..0],
23
+ 0, 1))
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
@@ -14,7 +14,7 @@ module Rubocop
14
14
  range = source_range(processed_source.buffer,
15
15
  processed_source[0...-1],
16
16
  final_line.length - 1, 1)
17
- add_offence(range, range)
17
+ add_offense(range, range)
18
18
  end
19
19
  end
20
20
 
@@ -8,11 +8,11 @@ module Rubocop
8
8
  MSG = 'Avoid the use of flip flop operators.'
9
9
 
10
10
  def on_iflipflop(node)
11
- add_offence(node, :expression)
11
+ add_offense(node, :expression)
12
12
  end
13
13
 
14
14
  def on_eflipflop(node)
15
- add_offence(node, :expression)
15
+ add_offense(node, :expression)
16
16
  end
17
17
  end
18
18
  end
@@ -12,7 +12,7 @@ module Rubocop
12
12
 
13
13
  def on_for(node)
14
14
  if style == :each
15
- add_offence(node, :keyword, 'Prefer *each* over *for*.') do
15
+ add_offense(node, :keyword, 'Prefer *each* over *for*.') do
16
16
  opposite_style_detected
17
17
  end
18
18
  else
@@ -34,7 +34,7 @@ module Rubocop
34
34
  range = Parser::Source::Range.new(processed_source.buffer,
35
35
  end_pos - 'each'.length,
36
36
  end_pos)
37
- add_offence(range, range, 'Prefer *for* over *each*.') do
37
+ add_offense(range, range, 'Prefer *for* over *each*.') do
38
38
  opposite_style_detected
39
39
  end
40
40
  else
@@ -0,0 +1,66 @@
1
+ # encoding: utf-8
2
+
3
+ module Rubocop
4
+ module Cop
5
+ module Style
6
+ # This cop enforces the use of a single string formatting utility.
7
+ # Valid options include Kernel#format, Kernel#sprintf and String#%.
8
+ #
9
+ # The detection of String#% cannot be implemented in a reliable
10
+ # manner for all cases, so only two scenarios are considered -
11
+ # if the first argument is a string literal and if the second
12
+ # argument is an array literal.
13
+ class FormatString < Cop
14
+ include ConfigurableEnforcedStyle
15
+
16
+ def on_send(node)
17
+ add_offense(node, :selector) if offending_node?(node)
18
+ end
19
+
20
+ private
21
+
22
+ def offending_node?(node)
23
+ case style
24
+ when :format
25
+ sprintf?(node) || percent?(node)
26
+ when :sprintf
27
+ format?(node) || percent?(node)
28
+ when :percent
29
+ format?(node) || sprintf?(node)
30
+ end
31
+ end
32
+
33
+ def format?(node)
34
+ command?(:format, node)
35
+ end
36
+
37
+ def sprintf?(node)
38
+ command?(:sprintf, node)
39
+ end
40
+
41
+ def percent?(node)
42
+ receiver_node, method_name, *arg_nodes = *node
43
+
44
+ method_name == :% &&
45
+ ([:str, :dstr].include?(receiver_node.type) ||
46
+ arg_nodes[0].type == :array)
47
+ end
48
+
49
+ def message(node)
50
+ _receiver_node, method_name, *_arg_nodes = *node
51
+
52
+ preferred =
53
+ if style == :percent
54
+ 'String#%'
55
+ else
56
+ style
57
+ end
58
+
59
+ method_name = 'String#%' if method_name == :%
60
+
61
+ "Favor #{preferred} over #{method_name}."
62
+ end
63
+ end
64
+ end
65
+ end
66
+ end
@@ -4,7 +4,7 @@ module Rubocop
4
4
  module Cop
5
5
  module Style
6
6
  # This cops looks for uses of global variables.
7
- # It does not report offences for built-in global variables.
7
+ # It does not report offenses for built-in global variables.
8
8
  # Built-in global variables are allowed by default. Additionally
9
9
  # users can allow additional variables via the AllowedVariables option.
10
10
  #
@@ -66,7 +66,7 @@ module Rubocop
66
66
  def check(node)
67
67
  global_var, = *node
68
68
 
69
- add_offence(node, :name) unless allowed_var?(global_var)
69
+ add_offense(node, :name) unless allowed_var?(global_var)
70
70
  end
71
71
  end
72
72
  end
@@ -14,7 +14,7 @@ module Rubocop
14
14
  _receiver, method_name, *args = *node
15
15
 
16
16
  if args.size == 1 && DEPRECATED_METHODS.include?(method_name)
17
- add_offence(node, :selector,
17
+ add_offense(node, :selector,
18
18
  MSG.format(method_name,
19
19
  proper_method_name(method_name)))
20
20
  end
@@ -8,7 +8,7 @@ module Rubocop
8
8
  # It can enforce either the use of the class hash rocket syntax or
9
9
  # the use of the newer Ruby 1.9 syntax (when applicable).
10
10
  #
11
- # A separate offence is registered for each problematic pair.
11
+ # A separate offense is registered for each problematic pair.
12
12
  class HashSyntax < Cop
13
13
  include ConfigurableEnforcedStyle
14
14
 
@@ -41,7 +41,7 @@ module Rubocop
41
41
  # Don't do the correction if there is no space before '=>'. The
42
42
  # combined corrections of this cop and SpaceAroundOperators could
43
43
  # produce code with illegal syntax.
44
- fail CorrectionNotPossible
44
+ return
45
45
  end
46
46
 
47
47
  @corrections << lambda do |corrector|
@@ -65,7 +65,7 @@ module Rubocop
65
65
  def check(pairs, delim, msg)
66
66
  pairs.each do |pair|
67
67
  if pair.loc.operator && pair.loc.operator.is?(delim)
68
- add_offence(pair,
68
+ add_offense(pair,
69
69
  pair.loc.expression.begin.join(pair.loc.operator),
70
70
  msg) do
71
71
  opposite_style_detected
@@ -5,6 +5,7 @@ module Rubocop
5
5
  module Style
6
6
  # Checks for if and unless statements that would fit on one line
7
7
  # if written as a modifier if/unless.
8
+ # The maximum line length is configurable.
8
9
  class IfUnlessModifier < Cop
9
10
  include StatementModifier
10
11
 
@@ -23,7 +24,7 @@ module Rubocop
23
24
  next if if_else?(node)
24
25
 
25
26
  if check(node, processed_source.comments)
26
- add_offence(node, :keyword,
27
+ add_offense(node, :keyword,
27
28
  error_message(node.loc.keyword.source))
28
29
  end
29
30
  end
@@ -0,0 +1,41 @@
1
+ # encoding: utf-8
2
+
3
+ module Rubocop
4
+ module Cop
5
+ module Style
6
+ # This cops checks the indentation of the first element in an array
7
+ # literal where the opening bracket and the first element are on separate
8
+ # lines. The other elements' indentations are handled by the AlignArray
9
+ # cop.
10
+ #
11
+ # Array literals shall have their first element indented one step (2
12
+ # spaces) more than the start of the line where the opening bracket is.
13
+ class IndentArray < Cop
14
+ include AutocorrectAlignment
15
+
16
+ def on_array(node)
17
+ first_pair = node.children.first
18
+ return if first_pair.nil?
19
+
20
+ left_bracket = node.loc.begin
21
+ return if left_bracket.nil?
22
+
23
+ return if first_pair.loc.expression.line == left_bracket.line
24
+
25
+ column = first_pair.loc.expression.column
26
+ base_column = left_bracket.source_line =~ /\S/
27
+ expected_column = base_column + IndentationWidth::CORRECT_INDENTATION
28
+ @column_delta = expected_column - column
29
+
30
+ add_offense(first_pair, :expression) if @column_delta != 0
31
+ end
32
+
33
+ def message(_)
34
+ format('Use %d spaces for indentation in an array, relative to ' \
35
+ 'the start of the line where the left bracket is.',
36
+ IndentationWidth::CORRECT_INDENTATION)
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,119 @@
1
+ # encoding: utf-8
2
+
3
+ module Rubocop
4
+ module Cop
5
+ module Style
6
+ # This cops checks the indentation of the first key in a hash literal
7
+ # where the opening brace and the first key are on separate lines. The
8
+ # other keys' indentations are handled by the AlignHash cop.
9
+ #
10
+ # Hash literals that are arguments in a method call with parentheses, and
11
+ # where the opening curly brace of the hash is on the same line as the
12
+ # opening parenthesis of the method call, shall have their first key
13
+ # indented one step (two spaces) more than the position inside the
14
+ # opening parenthesis.
15
+ #
16
+ # Other hash literals shall have their first key indented one step more
17
+ # than the start of the line where the opening curly brace is.
18
+ class IndentHash < Cop
19
+ include AutocorrectAlignment
20
+ include ConfigurableEnforcedStyle
21
+
22
+ def on_hash(node)
23
+ left_brace = node.loc.begin
24
+ check(node, left_brace, nil) if left_brace
25
+ end
26
+
27
+ def on_send(node)
28
+ _receiver, _method_name, *args = *node
29
+ left_parenthesis = node.loc.begin
30
+ return unless left_parenthesis
31
+
32
+ args.each do |arg|
33
+ on_node(:hash, arg, :send) do |hash_node|
34
+ left_brace = hash_node.loc.begin
35
+ if left_brace && left_brace.line == left_parenthesis.line
36
+ check(hash_node, left_brace, left_parenthesis)
37
+ ignore_node(hash_node)
38
+ end
39
+ end
40
+ end
41
+ end
42
+
43
+ private
44
+
45
+ def check(hash_node, left_brace, left_parenthesis)
46
+ return if ignored_node?(hash_node)
47
+
48
+ first_pair = hash_node.children.first
49
+ return if first_pair.nil?
50
+
51
+ left_brace = hash_node.loc.begin
52
+ return if first_pair.loc.expression.line == left_brace.line
53
+
54
+ column = first_pair.loc.expression.column
55
+ @column_delta =
56
+ expected_column(left_brace, left_parenthesis) - column
57
+
58
+ if @column_delta == 0
59
+ correct_style_detected
60
+ else
61
+ add_offense(first_pair, :expression,
62
+ message(base_description(left_parenthesis))) do
63
+ if column == unexpected_column(left_brace, left_parenthesis)
64
+ opposite_style_detected
65
+ else
66
+ unrecognized_style_detected
67
+ end
68
+ end
69
+ end
70
+ end
71
+
72
+ # Returns the expected, or correct indentation.
73
+ def expected_column(left_brace, left_parenthesis)
74
+ base_column =
75
+ if left_parenthesis && style == :special_inside_parentheses
76
+ left_parenthesis.column + 1
77
+ else
78
+ left_brace.source_line =~ /\S/
79
+ end
80
+
81
+ base_column + IndentationWidth::CORRECT_INDENTATION
82
+ end
83
+
84
+ # Returns the description of what the correct indentation is based on.
85
+ def base_description(left_parenthesis)
86
+ if left_parenthesis && style == :special_inside_parentheses
87
+ 'the first position after the preceding left parenthesis'
88
+ else
89
+ 'the start of the line where the left curly brace is'
90
+ end
91
+ end
92
+
93
+ # Returns the "unexpected column", which is the column that would be
94
+ # correct if the configuration was changed.
95
+ def unexpected_column(left_brace, left_parenthesis)
96
+ # Set a crazy value by default, indicating that there's no other
97
+ # configuration that can be chosen to make the used indentation
98
+ # accepted.
99
+ unexpected_base_column = -1000
100
+
101
+ if left_parenthesis
102
+ unexpected_base_column = if style == :special_inside_parentheses
103
+ left_brace.source_line =~ /\S/
104
+ else
105
+ left_parenthesis.column + 1
106
+ end
107
+ end
108
+
109
+ unexpected_base_column + IndentationWidth::CORRECT_INDENTATION
110
+ end
111
+
112
+ def message(base_description)
113
+ format('Use %d spaces for indentation in a hash, relative to %s.',
114
+ IndentationWidth::CORRECT_INDENTATION, base_description)
115
+ end
116
+ end
117
+ end
118
+ end
119
+ end