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,12 +6,12 @@ module Rubocop
6
6
  module Cop
7
7
  module Style
8
8
  describe SpaceInsideBrackets do
9
- let(:space) { SpaceInsideBrackets.new }
9
+ subject(:space) { SpaceInsideBrackets.new }
10
10
 
11
11
  it 'registers an offence for an array literal with spaces inside' do
12
12
  inspect_source(space, ['a = [1, 2 ]',
13
- 'b = [ 1, 2]'])
14
- expect(space.offences.map(&:message)).to eq(
13
+ 'b = [ 1, 2]'])
14
+ expect(space.messages).to eq(
15
15
  ['Space inside square brackets detected.',
16
16
  'Space inside square brackets detected.'])
17
17
  end
@@ -19,30 +19,30 @@ module Rubocop
19
19
  it 'accepts space inside strings within square brackets' do
20
20
  inspect_source(space, ["['Encoding:',",
21
21
  " ' Enabled: false']"])
22
- expect(space.offences.map(&:message)).to be_empty
22
+ expect(space.messages).to be_empty
23
23
  end
24
24
 
25
25
  it 'accepts space inside square brackets if on its own row' do
26
26
  inspect_source(space, ['a = [',
27
27
  ' 1, 2',
28
28
  ' ]'])
29
- expect(space.offences.map(&:message)).to be_empty
29
+ expect(space.messages).to be_empty
30
30
  end
31
31
 
32
32
  it 'accepts square brackets as method name' do
33
33
  inspect_source(space, ['def Vector.[](*array)',
34
- 'end'])
35
- expect(space.offences.map(&:message)).to be_empty
34
+ 'end'])
35
+ expect(space.messages).to be_empty
36
36
  end
37
37
 
38
38
  it 'accepts square brackets called with method call syntax' do
39
39
  inspect_source(space, ['subject.[](0)'])
40
- expect(space.offences.map(&:message)).to be_empty
40
+ expect(space.messages).to be_empty
41
41
  end
42
42
 
43
43
  it 'only reports a single space once' do
44
44
  inspect_source(space, ['[ ]'])
45
- expect(space.offences.map(&:message)).to eq(
45
+ expect(space.messages).to eq(
46
46
  ['Space inside square brackets detected.'])
47
47
  end
48
48
  end
@@ -5,93 +5,79 @@ require 'spec_helper'
5
5
  module Rubocop
6
6
  module Cop
7
7
  module Style
8
- describe SpaceInsideHashLiteralBraces do
9
- let(:sihlb) { SpaceInsideHashLiteralBraces.new }
10
- before do
11
- SpaceInsideHashLiteralBraces.config = {
12
- 'EnforcedStyleIsWithSpaces' => true
13
- }
14
- end
15
-
16
- it 'registers an offence for hashes with no spaces by default' do
17
- inspect_source(sihlb,
18
- ['h = {a: 1, b: :two}',
19
- 'h = {a => 1 }'])
20
- expect(sihlb.offences.map(&:message)).to eq(
21
- ['Space inside hash literal braces missing.'] * 3)
22
- end
8
+ describe SpaceInsideHashLiteralBraces, :config do
9
+ subject(:cop) { SpaceInsideHashLiteralBraces.new(config) }
10
+ let(:cop_config) { { 'EnforcedStyleIsWithSpaces' => true } }
23
11
 
24
12
  it 'registers an offence for hashes with no spaces if so configured' do
25
- inspect_source(sihlb,
13
+ inspect_source(cop,
26
14
  ['h = {a: 1, b: 2}',
27
15
  'h = {a => 1 }'])
28
- expect(sihlb.offences.map(&:message)).to eq(
16
+ expect(cop.messages).to eq(
29
17
  ['Space inside hash literal braces missing.'] * 3)
18
+ expect(cop.highlights).to eq(['{', '}', '{'])
30
19
  end
31
20
 
32
- it 'registers an offence for hashes with spaces if so configured' do
33
- SpaceInsideHashLiteralBraces.config['EnforcedStyleIsWithSpaces'] =
34
- false
35
- inspect_source(sihlb,
36
- ['h = { a: 1, b: 2 }'])
37
- expect(sihlb.offences.map(&:message)).to eq(
38
- ['Space inside hash literal braces detected.'] * 2)
21
+ context 'when EnforcedStyleIsWithSpaces is disabled' do
22
+ let(:cop_config) { { 'EnforcedStyleIsWithSpaces' => false } }
23
+
24
+ it 'registers an offence for hashes with spaces' do
25
+ inspect_source(cop,
26
+ ['h = { a: 1, b: 2 }'])
27
+ expect(cop.messages).to eq(
28
+ ['Space inside hash literal braces detected.'] * 2)
29
+ expect(cop.highlights).to eq(['{', '}'])
30
+ end
31
+
32
+ it 'accepts hashes with no spaces' do
33
+ inspect_source(cop,
34
+ ['h = {a: 1, b: 2}',
35
+ 'h = {a => 1}'])
36
+ expect(cop.offences).to be_empty
37
+ end
38
+
39
+ it 'accepts multiline hashes for no space' do
40
+ inspect_source(cop,
41
+ ['h = {',
42
+ ' a: 1,',
43
+ ' b: 2,',
44
+ '}'])
45
+ expect(cop.offences).to be_empty
46
+ end
47
+
48
+ it 'accepts empty hashes without spaces' do
49
+ inspect_source(cop, ['h = {}'])
50
+ expect(cop.offences).to be_empty
51
+ end
39
52
  end
40
53
 
41
54
  it 'accepts hashes with spaces by default' do
42
- inspect_source(sihlb,
55
+ inspect_source(cop,
43
56
  ['h = { a: 1, b: 2 }',
44
57
  'h = { a => 1 }'])
45
- expect(sihlb.offences.map(&:message)).to be_empty
46
- end
47
-
48
- it 'accepts hashes with no spaces if so configured' do
49
- SpaceInsideHashLiteralBraces.config['EnforcedStyleIsWithSpaces'] =
50
- false
51
- inspect_source(sihlb,
52
- ['h = {a: 1, b: 2}',
53
- 'h = {a => 1}'])
54
- expect(sihlb.offences.map(&:message)).to be_empty
55
- end
56
-
57
- it 'accepts multiline hashes even if configured for no space' do
58
- SpaceInsideHashLiteralBraces.config['EnforcedStyleIsWithSpaces'] =
59
- false
60
- inspect_source(sihlb,
61
- ['h = {',
62
- ' a: 1,',
63
- ' b: 2,',
64
- '}'])
65
- expect(sihlb.offences).to be_empty
58
+ expect(cop.offences).to be_empty
66
59
  end
67
60
 
68
61
  it 'accepts empty hashes without spaces by default' do
69
- inspect_source(sihlb, ['h = {}'])
70
- expect(sihlb.offences).to be_empty
71
- end
72
-
73
- it 'accepts empty hashes without spaces if configured false' do
74
- SpaceInsideHashLiteralBraces.config['EnforcedStyleIsWithSpaces'] =
75
- false
76
- inspect_source(sihlb, ['h = {}'])
77
- expect(sihlb.offences).to be_empty
62
+ inspect_source(cop, ['h = {}'])
63
+ expect(cop.offences).to be_empty
78
64
  end
79
65
 
80
66
  it 'accepts empty hashes without spaces even if configured true' do
81
- inspect_source(sihlb, ['h = {}'])
82
- expect(sihlb.offences).to be_empty
67
+ inspect_source(cop, ['h = {}'])
68
+ expect(cop.offences).to be_empty
83
69
  end
84
70
 
85
71
  it 'accepts hash literals with no braces' do
86
- inspect_source(sihlb, ['x(a: b.c)'])
87
- expect(sihlb.offences).to be_empty
72
+ inspect_source(cop, ['x(a: b.c)'])
73
+ expect(cop.offences).to be_empty
88
74
  end
89
75
 
90
76
  it 'can handle interpolation in a braceless hash literal' do
91
77
  # A tricky special case where the closing brace of the
92
78
  # interpolation risks getting confused for a hash literal brace.
93
- inspect_source(sihlb, ['f(get: "#{x}")'])
94
- expect(sihlb.offences).to be_empty
79
+ inspect_source(cop, ['f(get: "#{x}")'])
80
+ expect(cop.offences).to be_empty
95
81
  end
96
82
  end
97
83
  end
@@ -6,12 +6,12 @@ module Rubocop
6
6
  module Cop
7
7
  module Style
8
8
  describe SpaceInsideParens do
9
- let(:space) { SpaceInsideParens.new }
9
+ subject(:space) { SpaceInsideParens.new }
10
10
 
11
11
  it 'registers an offence for spaces inside parens' do
12
12
  inspect_source(space, ['f( 3)',
13
13
  'g(3 )'])
14
- expect(space.offences.map(&:message)).to eq(
14
+ expect(space.messages).to eq(
15
15
  ['Space inside parentheses detected.',
16
16
  'Space inside parentheses detected.'])
17
17
  end
@@ -20,12 +20,12 @@ module Rubocop
20
20
  inspect_source(space,
21
21
  ['list.inject(Tms.new) { |sum, (label, item)|',
22
22
  '}'])
23
- expect(space.offences.map(&:message)).to be_empty
23
+ expect(space.messages).to be_empty
24
24
  end
25
25
 
26
26
  it 'accepts parentheses with no spaces' do
27
27
  inspect_source(space, ['split("\n")'])
28
- expect(space.offences.map(&:message)).to be_empty
28
+ expect(space.messages).to be_empty
29
29
  end
30
30
  end
31
31
  end
@@ -0,0 +1,52 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ module Rubocop
6
+ module Cop
7
+ module Style
8
+ describe SpecialGlobalVars do
9
+ subject(:cop) { described_class.new }
10
+
11
+ it 'registers an offence for $:' do
12
+ inspect_source(cop, ['puts $:'])
13
+ expect(cop.offences.size).to eq(1)
14
+ expect(cop.messages)
15
+ .to eq(['Prefer $LOAD_PATH over $:.'])
16
+ end
17
+
18
+ it 'registers an offence for $"' do
19
+ inspect_source(cop, ['puts $"'])
20
+ expect(cop.offences.size).to eq(1)
21
+ expect(cop.messages)
22
+ .to eq(['Prefer $LOADED_FEATURES over $".'])
23
+ end
24
+
25
+ it 'registers an offence for $0' do
26
+ inspect_source(cop, ['puts $0'])
27
+ expect(cop.offences.size).to eq(1)
28
+ expect(cop.messages)
29
+ .to eq(['Prefer $PROGRAM_NAME over $0.'])
30
+ end
31
+
32
+ it 'registers an offence for $$' do
33
+ inspect_source(cop, ['puts $$'])
34
+ expect(cop.offences.size).to eq(1)
35
+ expect(cop.messages)
36
+ .to eq(['Prefer $PID or $PROCESS_ID from English library' +
37
+ ' over $$.'])
38
+ end
39
+
40
+ it 'does not register an offence for backrefs like $1' do
41
+ inspect_source(cop, ['puts $1'])
42
+ expect(cop.offences).to be_empty
43
+ end
44
+
45
+ it 'auto-corrects $: to $LOAD_PATH' do
46
+ new_source = autocorrect_source(cop, '$:')
47
+ expect(new_source).to eq('$LOAD_PATH')
48
+ end
49
+ end
50
+ end
51
+ end
52
+ end
@@ -6,13 +6,13 @@ module Rubocop
6
6
  module Cop
7
7
  module Style
8
8
  describe StringLiterals do
9
- let(:cop) { StringLiterals.new }
9
+ subject(:cop) { StringLiterals.new }
10
10
 
11
11
  it 'registers offence for double quotes when single quotes suffice' do
12
12
  inspect_source(cop, ['s = "abc"',
13
- 'x = "a\\\\b"',
14
- 'y ="\\\\b"',
15
- 'z = "a\\\\"'])
13
+ 'x = "a\\\\b"',
14
+ 'y ="\\\\b"',
15
+ 'z = "a\\\\"'])
16
16
  expect(cop.offences.size).to eq(4)
17
17
  end
18
18
 
@@ -23,7 +23,7 @@ module Rubocop
23
23
  'c = "\'"',
24
24
  'd = "#@test"',
25
25
  'e = "#$test"',
26
- 'f = "\e"',
26
+ 'f = "\e"',
27
27
  'g = "#@@test"']
28
28
  inspect_source(cop, src)
29
29
  expect(cop.offences).to be_empty
@@ -6,7 +6,7 @@ module Rubocop
6
6
  module Cop
7
7
  module Style
8
8
  describe SymbolArray do
9
- let(:sa) { SymbolArray.new }
9
+ subject(:sa) { SymbolArray.new }
10
10
 
11
11
  it 'registers an offence for arrays of symbols', { ruby: 2.0 } do
12
12
  inspect_source(sa,
@@ -5,20 +5,12 @@ require 'spec_helper'
5
5
  module Rubocop
6
6
  module Cop
7
7
  module Style
8
- describe SymbolName do
9
- let(:symbol_name) { SymbolName.new }
10
-
11
- before do
12
- SymbolName.config =
13
- Config.default_configuration.for_cop('SymbolName')
14
- end
8
+ describe SymbolName, :config do
9
+ subject(:symbol_name) { SymbolName.new(config) }
10
+ let(:cop_config) { { 'AllowCamelCase' => true } }
15
11
 
16
12
  context 'when AllowCamelCase is true' do
17
- before do
18
- SymbolName.config = {
19
- 'AllowCamelCase' => true
20
- }
21
- end
13
+ let(:cop_config) { { 'AllowCamelCase' => true } }
22
14
 
23
15
  it 'does not register an offence for camel case in names' do
24
16
  inspect_source(symbol_name,
@@ -28,15 +20,32 @@ module Rubocop
28
20
  end
29
21
 
30
22
  context 'when AllowCamelCase is false' do
31
- before do
32
- SymbolName.config = {
33
- 'AllowCamelCase' => false
34
- }
35
- end
23
+ let(:cop_config) { { 'AllowCamelCase' => false } }
36
24
 
37
25
  it 'registers an offence for camel case in names' do
38
26
  inspect_source(symbol_name,
39
27
  ['test = :BadIdea'])
28
+ expect(symbol_name.messages).to eq(
29
+ ['Use snake_case for symbols.'])
30
+ end
31
+ end
32
+
33
+ context 'when AllowDots is true' do
34
+ let(:cop_config) { { 'AllowDots' => true } }
35
+
36
+ it 'does not register an offence for dots in names' do
37
+ inspect_source(symbol_name,
38
+ ['test = :"bad.idea"'])
39
+ expect(symbol_name.offences).to be_empty
40
+ end
41
+ end
42
+
43
+ context 'when AllowDots is false' do
44
+ let(:cop_config) { { 'AllowDots' => false } }
45
+
46
+ it 'registers an offence for dots in names' do
47
+ inspect_source(symbol_name,
48
+ ['test = :"bad.idea"'])
40
49
  expect(symbol_name.offences.map(&:message)).to eq(
41
50
  ['Use snake_case for symbols.'])
42
51
  end
@@ -45,7 +54,7 @@ module Rubocop
45
54
  it 'registers an offence for symbol used as hash label' do
46
55
  inspect_source(symbol_name,
47
56
  ['{ KEY_ONE: 1, KEY_TWO: 2 }'])
48
- expect(symbol_name.offences.map(&:message)).to eq(
57
+ expect(symbol_name.messages).to eq(
49
58
  ['Use snake_case for symbols.'] * 2)
50
59
  end
51
60
 
@@ -6,7 +6,7 @@ module Rubocop
6
6
  module Cop
7
7
  module Style
8
8
  describe Tab do
9
- let(:tab) { Tab.new }
9
+ subject(:tab) { Tab.new }
10
10
 
11
11
  it 'registers an offence for a line indented with tab' do
12
12
  inspect_source(tab, ["\tx = 0"])
@@ -6,7 +6,7 @@ module Rubocop
6
6
  module Cop
7
7
  module Style
8
8
  describe MultilineTernaryOperator do
9
- let(:op) { MultilineTernaryOperator.new }
9
+ subject(:op) { MultilineTernaryOperator.new }
10
10
 
11
11
  it 'registers offence for a multiline ternary operator expression' do
12
12
  inspect_source(op, ['a = cond ?',
@@ -21,7 +21,7 @@ module Rubocop
21
21
  end
22
22
 
23
23
  describe NestedTernaryOperator do
24
- let(:op) { NestedTernaryOperator.new }
24
+ subject(:op) { NestedTernaryOperator.new }
25
25
 
26
26
  it 'registers an offence for a nested ternary operator expression' do
27
27
  inspect_source(op, ['a ? (b ? b1 : b2) : a2'])
@@ -0,0 +1,24 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ module Rubocop
6
+ module Cop
7
+ module Style
8
+ describe TrailingBlankLines do
9
+ subject(:cop) { described_class.new }
10
+
11
+ it 'accepts final newline' do
12
+ inspect_source(cop, ['x = 0', ''])
13
+ expect(cop.offences).to be_empty
14
+ end
15
+
16
+ it 'registers an offence for multiple trailing blank lines' do
17
+ inspect_source(cop, ['x = 0', '', '', '', ''])
18
+ expect(cop.offences.size).to eq(1)
19
+ expect(cop.messages).to eq(['3 trailing blank lines detected.'])
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
@@ -6,22 +6,22 @@ module Rubocop
6
6
  module Cop
7
7
  module Style
8
8
  describe TrailingWhitespace do
9
- let(:tws) { TrailingWhitespace.new }
9
+ subject(:cop) { described_class.new }
10
10
 
11
11
  it 'registers an offence for a line ending with space' do
12
12
  source = ['x = 0 ']
13
- inspect_source(tws, source)
14
- expect(tws.offences.size).to eq(1)
13
+ inspect_source(cop, source)
14
+ expect(cop.offences.size).to eq(1)
15
15
  end
16
16
 
17
17
  it 'registers an offence for a line ending with tab' do
18
- inspect_source(tws, ["x = 0\t"])
19
- expect(tws.offences.size).to eq(1)
18
+ inspect_source(cop, ["x = 0\t"])
19
+ expect(cop.offences.size).to eq(1)
20
20
  end
21
21
 
22
22
  it 'accepts a line without trailing whitespace' do
23
- inspect_source(tws, ["x = 0\n"])
24
- expect(tws.offences).to be_empty
23
+ inspect_source(cop, ["x = 0\n"])
24
+ expect(cop.offences).to be_empty
25
25
  end
26
26
  end
27
27
  end