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
@@ -6,7 +6,7 @@ module Rubocop
6
6
  module Cop
7
7
  module Style
8
8
  describe AlignParameters do
9
- let(:align) { AlignParameters.new }
9
+ subject(:align) { AlignParameters.new }
10
10
 
11
11
  it 'registers an offence for parameters with single indent' do
12
12
  inspect_source(align, ['function(a,',
@@ -22,7 +22,7 @@ module Rubocop
22
22
 
23
23
  it 'accepts multiline []= method call' do
24
24
  inspect_source(align, ['Test.config["something"] =',
25
- ' true'])
25
+ ' true'])
26
26
  expect(align.offences).to be_empty
27
27
  end
28
28
 
@@ -6,7 +6,7 @@ module Rubocop
6
6
  module Cop
7
7
  module Style
8
8
  describe AndOr do
9
- let(:cop) { AndOr.new }
9
+ subject(:cop) { AndOr.new }
10
10
 
11
11
  it 'registers an offence for OR' do
12
12
  inspect_source(cop,
@@ -6,14 +6,14 @@ module Rubocop
6
6
  module Cop
7
7
  module Style
8
8
  describe AsciiComments do
9
- let(:ascii) { AsciiComments.new }
9
+ subject(:ascii) { AsciiComments.new }
10
10
 
11
11
  it 'registers an offence for a comment with non-ascii chars' do
12
12
  inspect_source(ascii,
13
13
  ['# encoding: utf-8',
14
14
  '# 这是什么?'])
15
15
  expect(ascii.offences.size).to eq(1)
16
- expect(ascii.offences.map(&:message))
16
+ expect(ascii.messages)
17
17
  .to eq([AsciiComments::MSG])
18
18
  end
19
19
 
@@ -6,14 +6,14 @@ module Rubocop
6
6
  module Cop
7
7
  module Style
8
8
  describe AsciiIdentifiers do
9
- let(:ascii) { AsciiIdentifiers.new }
9
+ subject(:ascii) { AsciiIdentifiers.new }
10
10
 
11
11
  it 'registers an offence for a variable name with non-ascii chars' do
12
12
  inspect_source(ascii,
13
13
  ['# encoding: utf-8',
14
14
  'älg = 1'])
15
15
  expect(ascii.offences.size).to eq(1)
16
- expect(ascii.offences.map(&:message))
16
+ expect(ascii.messages)
17
17
  .to eq([AsciiIdentifiers::MSG])
18
18
  end
19
19
 
@@ -6,7 +6,7 @@ module Rubocop
6
6
  module Cop
7
7
  module Style
8
8
  describe Attr do
9
- let(:cop) { described_class.new }
9
+ subject(:cop) { described_class.new }
10
10
 
11
11
  it 'registers an offence attr' do
12
12
  inspect_source(cop, ['class SomeClass',
@@ -6,7 +6,7 @@ module Rubocop
6
6
  module Cop
7
7
  module Style
8
8
  describe BeginBlock do
9
- let(:cop) { BeginBlock.new }
9
+ subject(:cop) { BeginBlock.new }
10
10
 
11
11
  it 'reports an offence for a BEGIN block' do
12
12
  src = ['BEGIN { test }']
@@ -6,7 +6,7 @@ module Rubocop
6
6
  module Cop
7
7
  module Style
8
8
  describe BlockComments do
9
- let(:block) { BlockComments.new }
9
+ subject(:block) { BlockComments.new }
10
10
 
11
11
  it 'registers an offence for block comments' do
12
12
  inspect_source(block,
@@ -5,9 +5,9 @@ require 'spec_helper'
5
5
  module Rubocop
6
6
  module Cop
7
7
  module Style
8
- describe BlockNesting do
9
- let(:block_nesting) { BlockNesting.new }
10
- before { BlockNesting.config = { 'Max' => 2 } }
8
+ describe BlockNesting, :config do
9
+ subject(:block_nesting) { BlockNesting.new(config) }
10
+ let(:cop_config) { { 'Max' => 2 } }
11
11
 
12
12
  it 'accepts `Max` levels of nesting' do
13
13
  source = ['if a',
@@ -6,7 +6,7 @@ module Rubocop
6
6
  module Cop
7
7
  module Style
8
8
  describe Blocks do
9
- let(:cop) { Blocks.new }
9
+ subject(:cop) { described_class.new }
10
10
 
11
11
  it 'accepts a multiline block with do-end' do
12
12
  inspect_source(cop, ['each do |x|',
@@ -24,6 +24,11 @@ module Rubocop
24
24
  expect(cop.offences).to be_empty
25
25
  end
26
26
 
27
+ it 'auto-corrects do and end for single line blocks to { and }' do
28
+ new_source = autocorrect_source(cop, 'block do |x| end')
29
+ expect(new_source).to eq('block { |x| }')
30
+ end
31
+
27
32
  context 'when there are braces around a multi-line block' do
28
33
  it 'registers an offence in the simple case' do
29
34
  inspect_source(cop, ['each { |x|',
@@ -71,6 +76,25 @@ module Rubocop
71
76
  inspect_source(cop, src)
72
77
  expect(cop.messages).to eq([Blocks::MULTI_LINE_MSG])
73
78
  end
79
+
80
+ it 'auto-corrects do and end for single line blocks to { and }' do
81
+ source = <<-END.strip_indent
82
+ each { |x|
83
+ some_method
84
+ other_method
85
+ }
86
+ END
87
+
88
+ expected_source = <<-END.strip_indent
89
+ each do |x|
90
+ some_method
91
+ other_method
92
+ end
93
+ END
94
+
95
+ new_source = autocorrect_source(cop, source)
96
+ expect(new_source).to eq(expected_source)
97
+ end
74
98
  end
75
99
  end
76
100
  end
@@ -6,7 +6,7 @@ module Rubocop
6
6
  module Cop
7
7
  module Style
8
8
  describe CaseEquality do
9
- let(:ce) { CaseEquality.new }
9
+ subject(:ce) { CaseEquality.new }
10
10
 
11
11
  it 'registers an offence for ===' do
12
12
  inspect_source(ce, ['Array === var'])
@@ -6,7 +6,7 @@ module Rubocop
6
6
  module Cop
7
7
  module Style
8
8
  describe CaseIndentation do
9
- let(:ind) { CaseIndentation.new }
9
+ subject(:ind) { CaseIndentation.new }
10
10
 
11
11
  it "registers an offence for a when clause that's deeper than case" do
12
12
  source = ['case a',
@@ -16,7 +16,7 @@ module Rubocop
16
16
  ' end',
17
17
  'end']
18
18
  inspect_source(ind, source)
19
- expect(ind.offences.map(&:message)).to eq(
19
+ expect(ind.messages).to eq(
20
20
  ['Indent when as deep as case.'] * 2)
21
21
  end
22
22
 
@@ -44,7 +44,7 @@ module Rubocop
44
44
  'end',
45
45
  '']
46
46
  inspect_source(ind, source)
47
- expect(ind.offences.map(&:message)).to be_empty
47
+ expect(ind.messages).to be_empty
48
48
  end
49
49
 
50
50
  it "doesn't get confused by symbols named case or when" do
@@ -57,7 +57,7 @@ module Rubocop
57
57
  'end',
58
58
  '']
59
59
  inspect_source(ind, source)
60
- expect(ind.offences.map(&:message)).to be_empty
60
+ expect(ind.messages).to be_empty
61
61
  end
62
62
 
63
63
  it 'accepts correctly indented whens in complex combinations' do
@@ -80,7 +80,7 @@ module Rubocop
80
80
  'end',
81
81
  '']
82
82
  inspect_source(ind, source)
83
- expect(ind.offences.map(&:message)).to be_empty
83
+ expect(ind.messages).to be_empty
84
84
  end
85
85
  end
86
86
  end
@@ -6,7 +6,7 @@ module Rubocop
6
6
  module Cop
7
7
  module Style
8
8
  describe CharacterLiteral do
9
- let(:cop) { CharacterLiteral.new }
9
+ subject(:cop) { CharacterLiteral.new }
10
10
 
11
11
  it 'registers an offence for character literals' do
12
12
  inspect_source(cop, ['x = ?x'])
@@ -6,7 +6,7 @@ module Rubocop
6
6
  module Cop
7
7
  module Style
8
8
  describe ClassAndModuleCamelCase do
9
- let(:camel_case) { ClassAndModuleCamelCase.new }
9
+ subject(:camel_case) { ClassAndModuleCamelCase.new }
10
10
 
11
11
  it 'registers an offence for underscore in class and module name' do
12
12
  inspect_source(camel_case,
@@ -6,7 +6,7 @@ module Rubocop
6
6
  module Cop
7
7
  module Style
8
8
  describe ClassMethods do
9
- let(:cm) { ClassMethods.new }
9
+ subject(:cm) { ClassMethods.new }
10
10
 
11
11
  it 'registers an offence for methods using a class name' do
12
12
  inspect_source(cm,
@@ -0,0 +1,25 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ module Rubocop
6
+ module Cop
7
+ module Style
8
+ describe ClassVars do
9
+ subject(:cop) { described_class.new }
10
+
11
+ it 'registers an offence for class variable declaration' do
12
+ inspect_source(cop, ['class TestClass; @@test = 10; end'])
13
+ expect(cop.offences.size).to eq(1)
14
+ expect(cop.messages)
15
+ .to eq(['Replace class var @@test with a class instance var.'])
16
+ end
17
+
18
+ it 'does not register an offence for class variable usage' do
19
+ inspect_source(cop, ['@@test.test(20)'])
20
+ expect(cop.offences).to be_empty
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -5,8 +5,8 @@ require 'spec_helper'
5
5
  module Rubocop
6
6
  module Cop
7
7
  module Style
8
- describe CollectionMethods do
9
- CollectionMethods.config = {
8
+ describe CollectionMethods, :config do
9
+ cop_config = {
10
10
  'PreferredMethods' => {
11
11
  'collect' => 'map',
12
12
  'inject' => 'reduce',
@@ -15,13 +15,13 @@ module Rubocop
15
15
  }
16
16
  }
17
17
 
18
- let(:cop) { CollectionMethods.new }
18
+ subject(:cop) { CollectionMethods.new(config) }
19
+ let(:cop_config) { cop_config }
19
20
 
20
- CollectionMethods.preferred_methods.keys.each do |method|
21
+ cop_config['PreferredMethods'].each do |method, preferred_method|
21
22
  it "registers an offence for #{method} with block" do
22
23
  inspect_source(cop, ["[1, 2, 3].#{method} { |e| e + 1 }"])
23
24
  expect(cop.offences.size).to eq(1)
24
- preferred_method = CollectionMethods.preferred_methods[method]
25
25
  expect(cop.messages)
26
26
  .to eq(["Prefer #{preferred_method} over #{method}."])
27
27
  end
@@ -29,7 +29,6 @@ module Rubocop
29
29
  it "registers an offence for #{method} with proc param" do
30
30
  inspect_source(cop, ["[1, 2, 3].#{method}(&:test)"])
31
31
  expect(cop.offences.size).to eq(1)
32
- preferred_method = CollectionMethods.preferred_methods[method]
33
32
  expect(cop.messages)
34
33
  .to eq(["Prefer #{preferred_method} over #{method}."])
35
34
  end
@@ -7,9 +7,6 @@ module Rubocop
7
7
  module Style
8
8
  describe ColonMethodCall do
9
9
  subject(:cop) { described_class.new }
10
- before do
11
- described_class.config = {}
12
- end
13
10
 
14
11
  it 'registers an offence for instance method call' do
15
12
  inspect_source(cop,
@@ -5,25 +5,24 @@ require 'spec_helper'
5
5
  module Rubocop
6
6
  module Cop
7
7
  module Style
8
- describe CommentAnnotation do
9
- before do
10
- CommentAnnotation.config = {
11
- 'Keywords' => %w(TODO FIXME OPTIMIZE HACK REVIEW)
12
- }
8
+ describe CommentAnnotation, :config do
9
+ subject(:cop) { CommentAnnotation.new(config) }
10
+ let(:cop_config) do
11
+ { 'Keywords' => %w(TODO FIXME OPTIMIZE HACK REVIEW) }
13
12
  end
14
- let(:cop) { CommentAnnotation.new }
15
13
 
16
14
  it 'registers an offence for a missing colon' do
17
15
  inspect_source(cop, ['# TODO make better'])
18
16
  expect(cop.offences.size).to eq(1)
19
17
  end
20
18
 
21
- it 'registers an offence for a missing colon after configured word' do
22
- CommentAnnotation.config = {
23
- 'Keywords' => %w(ISSUE)
24
- }
25
- inspect_source(cop, ['# ISSUE wrong order'])
26
- expect(cop.offences.size).to eq(1)
19
+ context 'with configured keyword' do
20
+ let(:cop_config) { { 'Keywords' => %w(ISSUE) } }
21
+
22
+ it 'registers an offence for a missing colon after the word' do
23
+ inspect_source(cop, ['# ISSUE wrong order'])
24
+ expect(cop.offences.size).to eq(1)
25
+ end
27
26
  end
28
27
 
29
28
  context 'when used with the clang formatter' do
@@ -77,12 +76,15 @@ module Rubocop
77
76
  expect(cop.offences).to be_empty
78
77
  end
79
78
 
80
- it 'accepts a word without colon if not in the configuration' do
81
- CommentAnnotation.config = {
82
- 'Keywords' => %w(FIXME OPTIMIZE HACK REVIEW)
83
- }
84
- inspect_source(cop, ['# TODO make better'])
85
- expect(cop.offences).to be_empty
79
+ context 'when a keyword is not in the configuration' do
80
+ let(:cop_config) do
81
+ { 'Keywords' => %w(FIXME OPTIMIZE HACK REVIEW) }
82
+ end
83
+
84
+ it 'accepts the word without colon' do
85
+ inspect_source(cop, ['# TODO make better'])
86
+ expect(cop.offences).to be_empty
87
+ end
86
88
  end
87
89
  end
88
90
  end
@@ -6,7 +6,7 @@ module Rubocop
6
6
  module Cop
7
7
  module Style
8
8
  describe ConstantName do
9
- let(:const) { ConstantName.new }
9
+ subject(:const) { ConstantName.new }
10
10
 
11
11
  it 'registers an offence for camel case in const name' do
12
12
  inspect_source(const,
@@ -6,7 +6,7 @@ module Rubocop
6
6
  module Cop
7
7
  module Style
8
8
  describe DefWithParentheses do
9
- let(:cop) { described_class.new }
9
+ subject(:cop) { described_class.new }
10
10
 
11
11
  it 'reports an offence for def with empty parens' do
12
12
  src = ['def func()',
@@ -6,7 +6,7 @@ module Rubocop
6
6
  module Cop
7
7
  module Style
8
8
  describe DefWithoutParentheses do
9
- let(:cop) { described_class.new }
9
+ subject(:cop) { described_class.new }
10
10
 
11
11
  it 'reports an offence for def with parameters but no parens' do
12
12
  src = ['def func a, b',
@@ -6,7 +6,7 @@ module Rubocop
6
6
  module Cop
7
7
  module Style
8
8
  describe Documentation do
9
- let(:documentation) { Documentation.new }
9
+ subject(:documentation) { Documentation.new }
10
10
 
11
11
  it 'registers an offence for non-empty class' do
12
12
  inspect_source(documentation,
@@ -5,11 +5,11 @@ require 'spec_helper'
5
5
  module Rubocop
6
6
  module Cop
7
7
  module Style
8
- describe DotPosition do
9
- let(:cop) { DotPosition.new }
8
+ describe DotPosition, :config do
9
+ subject(:cop) { DotPosition.new(config) }
10
10
 
11
11
  context 'Leading dots style' do
12
- before { DotPosition.config = { 'Style' => 'Leading' } }
12
+ let(:cop_config) { { 'Style' => 'Leading' } }
13
13
 
14
14
  it 'registers an offence for trailing dot in multi-line call' do
15
15
  inspect_source(cop, ['something.',
@@ -35,7 +35,7 @@ module Rubocop
35
35
  end
36
36
 
37
37
  context 'Trailing dots style' do
38
- before { DotPosition.config = { 'Style' => 'Trailing' } }
38
+ let(:cop_config) { { 'Style' => 'Trailing' } }
39
39
 
40
40
  it 'registers an offence for leading dot in multi-line call' do
41
41
  inspect_source(cop, ['something',
@@ -61,7 +61,7 @@ module Rubocop
61
61
  end
62
62
 
63
63
  context 'Unknown style' do
64
- before { DotPosition.config = { 'Style' => 'test' } }
64
+ let(:cop_config) { { 'Style' => 'test' } }
65
65
 
66
66
  it 'raises an exception' do
67
67
  expect do
@@ -5,8 +5,9 @@ require 'spec_helper'
5
5
  module Rubocop
6
6
  module Cop
7
7
  module Style
8
- describe EmptyLineBetweenDefs do
9
- let(:empty_lines) { EmptyLineBetweenDefs.new }
8
+ describe EmptyLineBetweenDefs, :config do
9
+ subject(:empty_lines) { EmptyLineBetweenDefs.new(config) }
10
+ let(:cop_config) { { 'AllowAdjacentOneLineDefs' => false } }
10
11
 
11
12
  it 'finds offences in inner classes' do
12
13
  inspect_source(empty_lines, ['class K',
@@ -77,7 +78,7 @@ module Rubocop
77
78
  'end',
78
79
  ]
79
80
  inspect_source(empty_lines, source)
80
- expect(empty_lines.offences.map(&:message)).to be_empty
81
+ expect(empty_lines.messages).to be_empty
81
82
  end
82
83
 
83
84
  it 'accepts a nested def' do
@@ -89,7 +90,37 @@ module Rubocop
89
90
  'end',
90
91
  ]
91
92
  inspect_source(empty_lines, source)
92
- expect(empty_lines.offences.map(&:message)).to be_empty
93
+ expect(empty_lines.messages).to be_empty
94
+ end
95
+
96
+ it 'registers an offence for adjacent one-liners by default' do
97
+ source = ['def a; end',
98
+ 'def b; end']
99
+ inspect_source(empty_lines, source)
100
+ expect(empty_lines.offences).to have(1).item
101
+ end
102
+
103
+ context 'when AllowAdjacentOneLineDefs is enabled' do
104
+ let(:cop_config) { { 'AllowAdjacentOneLineDefs' => true } }
105
+
106
+ it 'accepts adjacent one-liners' do
107
+ source = ['def a; end',
108
+ 'def b; end']
109
+ inspect_source(empty_lines, source)
110
+ expect(empty_lines.offences).to be_empty
111
+ end
112
+
113
+ it 'registers an offence for adjacent defs if some are multi-line' do
114
+ source = ['def a; end',
115
+ 'def b; end',
116
+ 'def c', # Not a one-liner, so this is an offence.
117
+ 'end',
118
+ # Also an offence since previous was multi-line:
119
+ 'def d; end'
120
+ ]
121
+ inspect_source(empty_lines, source)
122
+ expect(empty_lines.offences.map(&:line)).to eq([3, 5])
123
+ end
93
124
  end
94
125
  end
95
126
  end