rubocop 0.13.1 → 0.14.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 (222) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +3 -0
  3. data/CHANGELOG.md +42 -0
  4. data/README.md +59 -54
  5. data/config/default.yml +124 -95
  6. data/config/disabled.yml +4 -0
  7. data/config/enabled.yml +286 -264
  8. data/lib/rubocop.rb +10 -3
  9. data/lib/rubocop/cli.rb +10 -171
  10. data/lib/rubocop/cop/cop.rb +14 -11
  11. data/lib/rubocop/cop/lint/debugger.rb +35 -0
  12. data/lib/rubocop/cop/lint/syntax.rb +34 -0
  13. data/lib/rubocop/cop/offence.rb +15 -23
  14. data/lib/rubocop/cop/style/align_array.rb +1 -10
  15. data/lib/rubocop/cop/style/align_hash.rb +14 -2
  16. data/lib/rubocop/cop/style/align_parameters.rb +1 -11
  17. data/lib/rubocop/cop/style/and_or.rb +13 -11
  18. data/lib/rubocop/cop/style/attr.rb +1 -1
  19. data/lib/rubocop/cop/style/autocorrect_alignment.rb +31 -6
  20. data/lib/rubocop/cop/style/blocks.rb +14 -6
  21. data/lib/rubocop/cop/style/character_literal.rb +1 -1
  22. data/lib/rubocop/cop/style/class_length.rb +38 -0
  23. data/lib/rubocop/cop/style/collection_methods.rb +1 -1
  24. data/lib/rubocop/cop/style/colon_method_call.rb +1 -1
  25. data/lib/rubocop/cop/style/configurable_naming.rb +47 -0
  26. data/lib/rubocop/cop/style/def_parentheses.rb +2 -2
  27. data/lib/rubocop/cop/style/empty_literal.rb +1 -1
  28. data/lib/rubocop/cop/style/even_odd.rb +7 -3
  29. data/lib/rubocop/cop/style/hash_methods.rb +1 -1
  30. data/lib/rubocop/cop/style/hash_syntax.rb +36 -7
  31. data/lib/rubocop/cop/style/lambda_call.rb +36 -11
  32. data/lib/rubocop/cop/style/method_call_parentheses.rb +1 -1
  33. data/lib/rubocop/cop/style/method_called_on_do_end_block.rb +41 -0
  34. data/lib/rubocop/cop/style/method_length.rb +2 -13
  35. data/lib/rubocop/cop/style/method_name.rb +42 -0
  36. data/lib/rubocop/cop/style/numeric_literals.rb +4 -0
  37. data/lib/rubocop/cop/style/perl_backrefs.rb +1 -1
  38. data/lib/rubocop/cop/style/raise_args.rb +60 -0
  39. data/lib/rubocop/cop/style/redundant_exception.rb +32 -0
  40. data/lib/rubocop/cop/style/redundant_return.rb +14 -5
  41. data/lib/rubocop/cop/style/redundant_self.rb +1 -1
  42. data/lib/rubocop/cop/style/semicolon.rb +13 -4
  43. data/lib/rubocop/cop/style/signal_exception.rb +63 -14
  44. data/lib/rubocop/cop/style/special_global_vars.rb +1 -1
  45. data/lib/rubocop/cop/style/string_help.rb +4 -1
  46. data/lib/rubocop/cop/style/string_literals.rb +34 -11
  47. data/lib/rubocop/cop/style/surrounding_space.rb +64 -17
  48. data/lib/rubocop/cop/style/tab.rb +1 -1
  49. data/lib/rubocop/cop/style/variable_name.rb +44 -0
  50. data/lib/rubocop/cop/style/when_then.rb +1 -1
  51. data/lib/rubocop/cop/style/while_until_do.rb +1 -1
  52. data/lib/rubocop/cop/team.rb +4 -7
  53. data/lib/rubocop/cop/util.rb +12 -0
  54. data/lib/rubocop/formatter/clang_style_formatter.rb +1 -1
  55. data/lib/rubocop/formatter/emacs_style_formatter.rb +5 -2
  56. data/lib/rubocop/formatter/json_formatter.rb +1 -0
  57. data/lib/rubocop/formatter/progress_formatter.rb +9 -13
  58. data/lib/rubocop/formatter/simple_text_formatter.rb +63 -15
  59. data/lib/rubocop/options.rb +184 -0
  60. data/lib/rubocop/processed_source.rb +4 -0
  61. data/lib/rubocop/version.rb +1 -1
  62. data/rubocop.gemspec +1 -1
  63. data/spec/rubocop/cli_spec.rb +870 -1001
  64. data/spec/rubocop/config_spec.rb +13 -13
  65. data/spec/rubocop/config_store_spec.rb +38 -37
  66. data/spec/rubocop/cop/commissioner_spec.rb +42 -46
  67. data/spec/rubocop/cop/cop_spec.rb +72 -77
  68. data/spec/rubocop/cop/corrector_spec.rb +51 -55
  69. data/spec/rubocop/cop/lint/assignment_in_condition_spec.rb +100 -106
  70. data/spec/rubocop/cop/lint/block_alignment_spec.rb +403 -409
  71. data/spec/rubocop/cop/lint/debugger_spec.rb +39 -0
  72. data/spec/rubocop/cop/lint/empty_ensure_spec.rb +19 -25
  73. data/spec/rubocop/cop/lint/end_alignment_spec.rb +50 -56
  74. data/spec/rubocop/cop/lint/end_in_method_spec.rb +20 -26
  75. data/spec/rubocop/cop/lint/ensure_return_spec.rb +30 -36
  76. data/spec/rubocop/cop/lint/eval_spec.rb +25 -31
  77. data/spec/rubocop/cop/lint/handle_exceptions_spec.rb +22 -28
  78. data/spec/rubocop/cop/lint/literal_in_condition_spec.rb +51 -57
  79. data/spec/rubocop/cop/lint/loop_spec.rb +17 -23
  80. data/spec/rubocop/cop/lint/parentheses_as_grouped_expression_spec.rb +51 -57
  81. data/spec/rubocop/cop/lint/rescue_exception_spec.rb +105 -111
  82. data/spec/rubocop/cop/lint/shadowing_outer_local_variable_spec.rb +230 -236
  83. data/spec/rubocop/cop/lint/syntax_spec.rb +33 -0
  84. data/spec/rubocop/cop/lint/unreachable_code_spec.rb +51 -57
  85. data/spec/rubocop/cop/lint/useless_assignment_spec.rb +1544 -1550
  86. data/spec/rubocop/cop/lint/useless_comparison_spec.rb +21 -27
  87. data/spec/rubocop/cop/lint/useless_setter_call_spec.rb +119 -125
  88. data/spec/rubocop/cop/lint/void_spec.rb +50 -56
  89. data/spec/rubocop/cop/offence_spec.rb +101 -131
  90. data/spec/rubocop/cop/rails/has_and_belongs_to_many_spec.rb +6 -12
  91. data/spec/rubocop/cop/rails/read_attribute_spec.rb +6 -12
  92. data/spec/rubocop/cop/rails/validation_spec.rb +13 -19
  93. data/spec/rubocop/cop/style/access_control_spec.rb +146 -152
  94. data/spec/rubocop/cop/style/alias_spec.rb +30 -36
  95. data/spec/rubocop/cop/style/align_array_spec.rb +57 -56
  96. data/spec/rubocop/cop/style/align_hash_spec.rb +256 -237
  97. data/spec/rubocop/cop/style/align_parameters_spec.rb +216 -202
  98. data/spec/rubocop/cop/style/and_or_spec.rb +51 -55
  99. data/spec/rubocop/cop/style/ascii_comments_spec.rb +14 -20
  100. data/spec/rubocop/cop/style/ascii_identifiers_spec.rb +26 -32
  101. data/spec/rubocop/cop/style/attr_spec.rb +11 -17
  102. data/spec/rubocop/cop/style/begin_block_spec.rb +6 -12
  103. data/spec/rubocop/cop/style/block_comments_spec.rb +13 -19
  104. data/spec/rubocop/cop/style/block_nesting_spec.rb +134 -140
  105. data/spec/rubocop/cop/style/blocks_spec.rb +81 -84
  106. data/spec/rubocop/cop/style/case_equality_spec.rb +5 -11
  107. data/spec/rubocop/cop/style/case_indentation_spec.rb +71 -77
  108. data/spec/rubocop/cop/style/character_literal_spec.rb +31 -37
  109. data/spec/rubocop/cop/style/class_and_module_camel_case_spec.rb +31 -37
  110. data/spec/rubocop/cop/style/class_length_spec.rb +65 -0
  111. data/spec/rubocop/cop/style/class_methods_spec.rb +35 -41
  112. data/spec/rubocop/cop/style/class_vars_spec.rb +11 -17
  113. data/spec/rubocop/cop/style/collection_methods_spec.rb +41 -47
  114. data/spec/rubocop/cop/style/colon_method_call_spec.rb +45 -51
  115. data/spec/rubocop/cop/style/comment_annotation_spec.rb +79 -85
  116. data/spec/rubocop/cop/style/constant_name_spec.rb +45 -51
  117. data/spec/rubocop/cop/style/def_with_parentheses_spec.rb +28 -34
  118. data/spec/rubocop/cop/style/def_without_parentheses_spec.rb +23 -29
  119. data/spec/rubocop/cop/style/documentation_spec.rb +60 -66
  120. data/spec/rubocop/cop/style/dot_position_spec.rb +50 -56
  121. data/spec/rubocop/cop/style/empty_line_between_defs_spec.rb +109 -110
  122. data/spec/rubocop/cop/style/empty_lines_spec.rb +28 -34
  123. data/spec/rubocop/cop/style/empty_literal_spec.rb +80 -86
  124. data/spec/rubocop/cop/style/encoding_spec.rb +50 -56
  125. data/spec/rubocop/cop/style/end_block_spec.rb +6 -12
  126. data/spec/rubocop/cop/style/end_of_line_spec.rb +13 -19
  127. data/spec/rubocop/cop/style/even_odd_spec.rb +69 -41
  128. data/spec/rubocop/cop/style/favor_join_spec.rb +21 -27
  129. data/spec/rubocop/cop/style/favor_modifier_spec.rb +180 -176
  130. data/spec/rubocop/cop/style/favor_sprintf_spec.rb +41 -47
  131. data/spec/rubocop/cop/style/favor_unless_over_negated_if_spec.rb +63 -69
  132. data/spec/rubocop/cop/style/favor_until_over_negated_while_spec.rb +32 -38
  133. data/spec/rubocop/cop/style/final_newline_spec.rb +16 -22
  134. data/spec/rubocop/cop/style/for_spec.rb +18 -24
  135. data/spec/rubocop/cop/style/global_vars_spec.rb +23 -29
  136. data/spec/rubocop/cop/style/hash_methods_spec.rb +39 -45
  137. data/spec/rubocop/cop/style/hash_syntax_spec.rb +93 -65
  138. data/spec/rubocop/cop/style/if_with_semicolon_spec.rb +11 -17
  139. data/spec/rubocop/cop/style/indentation_width_spec.rb +377 -383
  140. data/spec/rubocop/cop/style/lambda_call_spec.rb +40 -22
  141. data/spec/rubocop/cop/style/lambda_spec.rb +30 -34
  142. data/spec/rubocop/cop/style/leading_comment_space_spec.rb +44 -50
  143. data/spec/rubocop/cop/style/line_length_spec.rb +11 -17
  144. data/spec/rubocop/cop/style/method_call_parentheses_spec.rb +14 -20
  145. data/spec/rubocop/cop/style/method_called_on_do_end_block_spec.rb +60 -0
  146. data/spec/rubocop/cop/style/method_length_spec.rb +127 -133
  147. data/spec/rubocop/cop/style/method_name_spec.rb +103 -0
  148. data/spec/rubocop/cop/style/module_function_spec.rb +16 -22
  149. data/spec/rubocop/cop/style/multiline_block_chain_spec.rb +64 -70
  150. data/spec/rubocop/cop/style/multiline_if_then_spec.rb +74 -80
  151. data/spec/rubocop/cop/style/nil_comparison_spec.rb +20 -26
  152. data/spec/rubocop/cop/style/not_spec.rb +13 -19
  153. data/spec/rubocop/cop/style/numeric_literals_spec.rb +36 -35
  154. data/spec/rubocop/cop/style/one_line_conditional_spec.rb +5 -11
  155. data/spec/rubocop/cop/style/op_method_spec.rb +61 -67
  156. data/spec/rubocop/cop/style/parameter_lists_spec.rb +31 -37
  157. data/spec/rubocop/cop/style/parentheses_around_condition_spec.rb +62 -68
  158. data/spec/rubocop/cop/style/perl_backrefs_spec.rb +9 -15
  159. data/spec/rubocop/cop/style/proc_spec.rb +13 -19
  160. data/spec/rubocop/cop/style/raise_args_spec.rb +55 -0
  161. data/spec/rubocop/cop/style/reduce_arguments_spec.rb +49 -55
  162. data/spec/rubocop/cop/style/redundant_begin_spec.rb +47 -53
  163. data/spec/rubocop/cop/style/redundant_exception_spec.rb +27 -0
  164. data/spec/rubocop/cop/style/redundant_return_spec.rb +164 -72
  165. data/spec/rubocop/cop/style/redundant_self_spec.rb +109 -115
  166. data/spec/rubocop/cop/style/regexp_literal_spec.rb +57 -63
  167. data/spec/rubocop/cop/style/rescue_modifier_spec.rb +99 -105
  168. data/spec/rubocop/cop/style/semicolon_spec.rb +95 -90
  169. data/spec/rubocop/cop/style/signal_exception_spec.rb +248 -95
  170. data/spec/rubocop/cop/style/single_line_methods_spec.rb +45 -51
  171. data/spec/rubocop/cop/style/space_after_colon_spec.rb +14 -20
  172. data/spec/rubocop/cop/style/space_after_comma_spec.rb +16 -22
  173. data/spec/rubocop/cop/style/space_after_control_keyword_spec.rb +48 -54
  174. data/spec/rubocop/cop/style/space_after_method_name_spec.rb +49 -55
  175. data/spec/rubocop/cop/style/space_after_semicolon_spec.rb +10 -16
  176. data/spec/rubocop/cop/style/space_around_block_braces_spec.rb +118 -50
  177. data/spec/rubocop/cop/style/space_around_equals_in_default_parameter_spec.rb +18 -24
  178. data/spec/rubocop/cop/style/space_around_operators_spec.rb +204 -210
  179. data/spec/rubocop/cop/style/space_before_modifier_keyword_spec.rb +36 -42
  180. data/spec/rubocop/cop/style/space_inside_brackets_spec.rb +39 -45
  181. data/spec/rubocop/cop/style/space_inside_hash_literal_braces_spec.rb +62 -68
  182. data/spec/rubocop/cop/style/space_inside_parens_spec.rb +18 -24
  183. data/spec/rubocop/cop/style/special_global_vars_spec.rb +40 -46
  184. data/spec/rubocop/cop/style/string_literals_spec.rb +148 -70
  185. data/spec/rubocop/cop/style/symbol_array_spec.rb +28 -34
  186. data/spec/rubocop/cop/style/symbol_name_spec.rb +132 -138
  187. data/spec/rubocop/cop/style/tab_spec.rb +9 -15
  188. data/spec/rubocop/cop/style/ternary_operator_spec.rb +25 -31
  189. data/spec/rubocop/cop/style/trailing_blank_lines_spec.rb +10 -16
  190. data/spec/rubocop/cop/style/trailing_whitespace_spec.rb +14 -20
  191. data/spec/rubocop/cop/style/trivial_accessors_spec.rb +374 -380
  192. data/spec/rubocop/cop/style/unless_else_spec.rb +17 -23
  193. data/spec/rubocop/cop/style/variable_interpolation_spec.rb +36 -42
  194. data/spec/rubocop/cop/style/variable_name_spec.rb +83 -0
  195. data/spec/rubocop/cop/style/when_then_spec.rb +31 -37
  196. data/spec/rubocop/cop/style/while_until_do_spec.rb +47 -53
  197. data/spec/rubocop/cop/style/word_array_spec.rb +49 -55
  198. data/spec/rubocop/cop/team_spec.rb +125 -127
  199. data/spec/rubocop/cop/variable_inspector/assignment_spec.rb +176 -180
  200. data/spec/rubocop/cop/variable_inspector/locatable_spec.rb +580 -586
  201. data/spec/rubocop/cop/variable_inspector/scope_spec.rb +140 -146
  202. data/spec/rubocop/cop/variable_inspector/variable_spec.rb +52 -58
  203. data/spec/rubocop/cop/variable_inspector/variable_table_spec.rb +217 -223
  204. data/spec/rubocop/cop/variable_inspector_spec.rb +15 -19
  205. data/spec/rubocop/formatter/clang_style_formatter_spec.rb +35 -36
  206. data/spec/rubocop/formatter/disabled_config_formatter_spec.rb +2 -2
  207. data/spec/rubocop/formatter/emacs_style_formatter_spec.rb +24 -1
  208. data/spec/rubocop/formatter/file_list_formatter_spec.rb +1 -1
  209. data/spec/rubocop/formatter/formatter_set_spec.rb +3 -3
  210. data/spec/rubocop/formatter/json_formatter_spec.rb +7 -2
  211. data/spec/rubocop/formatter/offence_count_formatter_spec.rb +1 -1
  212. data/spec/rubocop/formatter/progress_formatter_spec.rb +1 -1
  213. data/spec/rubocop/formatter/simple_text_formatter_spec.rb +55 -6
  214. data/spec/rubocop/options_spec.rb +233 -0
  215. data/spec/rubocop/processed_source_spec.rb +85 -42
  216. data/spec/rubocop/source_parser_spec.rb +108 -110
  217. data/spec/rubocop/target_finder_spec.rb +125 -127
  218. data/spec/rubocop/token_spec.rb +15 -17
  219. metadata +32 -8
  220. data/lib/rubocop/backports/bsearch.rb +0 -39
  221. data/lib/rubocop/cop/style/method_and_variable_snake_case.rb +0 -77
  222. data/spec/rubocop/cop/style/method_and_variable_snake_case_spec.rb +0 -102
@@ -2,35 +2,29 @@
2
2
 
3
3
  require 'spec_helper'
4
4
 
5
- module Rubocop
6
- module Cop
7
- module Lint
8
- describe UselessComparison do
9
- subject(:cop) { UselessComparison.new }
5
+ describe Rubocop::Cop::Lint::UselessComparison do
6
+ subject(:cop) { described_class.new }
10
7
 
11
- UselessComparison::OPS.each do |op|
12
- it "registers an offence for a simple comparison with #{op}" do
13
- inspect_source(cop,
14
- ["5 #{op} 5",
15
- "a #{op} a"
16
- ])
17
- expect(cop.offences.size).to eq(2)
18
- end
19
-
20
- it "registers an offence for a complex comparison with #{op}" do
21
- inspect_source(cop,
22
- ["5 + 10 * 30 #{op} 5 + 10 * 30",
23
- "a.top(x) #{op} a.top(x)"
24
- ])
25
- expect(cop.offences.size).to eq(2)
26
- end
27
- end
8
+ described_class::OPS.each do |op|
9
+ it "registers an offence for a simple comparison with #{op}" do
10
+ inspect_source(cop,
11
+ ["5 #{op} 5",
12
+ "a #{op} a"
13
+ ])
14
+ expect(cop.offences.size).to eq(2)
15
+ end
28
16
 
29
- it 'works with lambda.()' do
30
- inspect_source(cop, ['a.(x) > a.(x)'])
31
- expect(cop.offences.size).to eq(1)
32
- end
33
- end
17
+ it "registers an offence for a complex comparison with #{op}" do
18
+ inspect_source(cop,
19
+ ["5 + 10 * 30 #{op} 5 + 10 * 30",
20
+ "a.top(x) #{op} a.top(x)"
21
+ ])
22
+ expect(cop.offences.size).to eq(2)
34
23
  end
35
24
  end
25
+
26
+ it 'works with lambda.()' do
27
+ inspect_source(cop, ['a.(x) > a.(x)'])
28
+ expect(cop.offences.size).to eq(1)
29
+ end
36
30
  end
@@ -2,141 +2,135 @@
2
2
 
3
3
  require 'spec_helper'
4
4
 
5
- module Rubocop
6
- module Cop
7
- module Lint
8
- describe UselessSetterCall do
9
- subject(:cop) { UselessSetterCall.new }
5
+ describe Rubocop::Cop::Lint::UselessSetterCall do
6
+ subject(:cop) { described_class.new }
10
7
 
11
- it 'registers an offence for def ending with lvar attr assignment' do
12
- inspect_source(cop,
13
- ['def test',
14
- ' top = Top.new',
15
- ' top.attr = 5',
16
- 'end'
17
- ])
18
- expect(cop.offences.size).to eq(1)
19
- end
20
-
21
- it 'registers an offence for defs ending with lvar attr assignment' do
22
- inspect_source(cop,
23
- ['def Top.test',
24
- ' top = Top.new',
25
- ' top.attr = 5',
26
- 'end'
27
- ])
28
- expect(cop.offences.size).to eq(1)
29
- end
8
+ it 'registers an offence for def ending with lvar attr assignment' do
9
+ inspect_source(cop,
10
+ ['def test',
11
+ ' top = Top.new',
12
+ ' top.attr = 5',
13
+ 'end'
14
+ ])
15
+ expect(cop.offences.size).to eq(1)
16
+ end
30
17
 
31
- it 'accepts def ending with ivar assignment' do
32
- inspect_source(cop,
33
- ['def test',
34
- ' something',
35
- ' @top = 5',
36
- 'end'
37
- ])
38
- expect(cop.offences).to be_empty
39
- end
18
+ it 'registers an offence for defs ending with lvar attr assignment' do
19
+ inspect_source(cop,
20
+ ['def Top.test',
21
+ ' top = Top.new',
22
+ ' top.attr = 5',
23
+ 'end'
24
+ ])
25
+ expect(cop.offences.size).to eq(1)
26
+ end
40
27
 
41
- it 'accepts def ending ivar attr assignment' do
42
- inspect_source(cop,
43
- ['def test',
44
- ' something',
45
- ' @top.attr = 5',
46
- 'end'
47
- ])
48
- expect(cop.offences).to be_empty
49
- end
28
+ it 'accepts def ending with ivar assignment' do
29
+ inspect_source(cop,
30
+ ['def test',
31
+ ' something',
32
+ ' @top = 5',
33
+ 'end'
34
+ ])
35
+ expect(cop.offences).to be_empty
36
+ end
50
37
 
51
- it 'accepts def ending with argument attr assignment' do
52
- inspect_source(cop,
53
- ['def test(some_arg)',
54
- ' unrelated_local_variable = Top.new',
55
- ' some_arg.attr = 5',
56
- 'end'
57
- ])
58
- expect(cop.offences).to be_empty
59
- end
38
+ it 'accepts def ending ivar attr assignment' do
39
+ inspect_source(cop,
40
+ ['def test',
41
+ ' something',
42
+ ' @top.attr = 5',
43
+ 'end'
44
+ ])
45
+ expect(cop.offences).to be_empty
46
+ end
60
47
 
61
- context 'when a lvar has an object passed as argument ' +
62
- 'at the end of the method' do
63
- it 'accepts the lvar attr assignment' do
64
- inspect_source(cop,
65
- ['def test(some_arg)',
66
- ' @some_ivar = some_arg',
67
- ' @some_ivar.do_something',
68
- ' some_lvar = @some_ivar',
69
- ' some_lvar.do_something',
70
- ' some_lvar.attr = 5',
71
- 'end'
72
- ])
73
- expect(cop.offences).to be_empty
74
- end
75
- end
48
+ it 'accepts def ending with argument attr assignment' do
49
+ inspect_source(cop,
50
+ ['def test(some_arg)',
51
+ ' unrelated_local_variable = Top.new',
52
+ ' some_arg.attr = 5',
53
+ 'end'
54
+ ])
55
+ expect(cop.offences).to be_empty
56
+ end
76
57
 
77
- context 'when a lvar has an object passed as argument ' +
78
- 'by multiple-assignment at the end of the method' do
79
- it 'accepts the lvar attr assignment' do
80
- inspect_source(cop,
81
- ['def test(some_arg)',
82
- ' _first, some_lvar, _third = 1, some_arg, 3',
83
- ' some_lvar.attr = 5',
84
- 'end'
85
- ])
86
- expect(cop.offences).to be_empty
87
- end
88
- end
58
+ context 'when a lvar has an object passed as argument ' +
59
+ 'at the end of the method' do
60
+ it 'accepts the lvar attr assignment' do
61
+ inspect_source(cop,
62
+ ['def test(some_arg)',
63
+ ' @some_ivar = some_arg',
64
+ ' @some_ivar.do_something',
65
+ ' some_lvar = @some_ivar',
66
+ ' some_lvar.do_something',
67
+ ' some_lvar.attr = 5',
68
+ 'end'
69
+ ])
70
+ expect(cop.offences).to be_empty
71
+ end
72
+ end
89
73
 
90
- context 'when a lvar possibly has an object passed as argument ' +
91
- 'by logical-operator-assignment at the end of the method' do
92
- it 'accepts the lvar attr assignment' do
93
- inspect_source(cop,
94
- ['def test(some_arg)',
95
- ' some_lvar = nil',
96
- ' some_lvar ||= some_arg',
97
- ' some_lvar.attr = 5',
98
- 'end'
99
- ])
100
- expect(cop.offences).to be_empty
101
- end
102
- end
74
+ context 'when a lvar has an object passed as argument ' +
75
+ 'by multiple-assignment at the end of the method' do
76
+ it 'accepts the lvar attr assignment' do
77
+ inspect_source(cop,
78
+ ['def test(some_arg)',
79
+ ' _first, some_lvar, _third = 1, some_arg, 3',
80
+ ' some_lvar.attr = 5',
81
+ 'end'
82
+ ])
83
+ expect(cop.offences).to be_empty
84
+ end
85
+ end
103
86
 
104
- context 'when a lvar does not have any object passed as argument ' +
105
- 'by binary-operator-assignment at the end of the method' do
106
- it 'registers an offence' do
107
- inspect_source(cop,
108
- ['def test(some_arg)',
109
- ' some_lvar = some_arg',
110
- ' some_lvar += some_arg',
111
- ' some_lvar.attr = 5',
112
- 'end'
113
- ])
114
- expect(cop.offences.size).to eq(1)
115
- end
116
- end
87
+ context 'when a lvar possibly has an object passed as argument ' +
88
+ 'by logical-operator-assignment at the end of the method' do
89
+ it 'accepts the lvar attr assignment' do
90
+ inspect_source(cop,
91
+ ['def test(some_arg)',
92
+ ' some_lvar = nil',
93
+ ' some_lvar ||= some_arg',
94
+ ' some_lvar.attr = 5',
95
+ 'end'
96
+ ])
97
+ expect(cop.offences).to be_empty
98
+ end
99
+ end
117
100
 
118
- context 'when a lvar declared as an argument ' +
119
- 'is no longer the passed object at the end of the method' do
120
- it 'registers an offence for the lvar attr assignment' do
121
- inspect_source(cop,
122
- ['def test(some_arg)',
123
- ' some_arg = Top.new',
124
- ' some_arg.attr = 5',
125
- 'end'
126
- ])
127
- expect(cop.offences.size).to eq(1)
128
- end
129
- end
101
+ context 'when a lvar does not have any object passed as argument ' +
102
+ 'by binary-operator-assignment at the end of the method' do
103
+ it 'registers an offence' do
104
+ inspect_source(cop,
105
+ ['def test(some_arg)',
106
+ ' some_lvar = some_arg',
107
+ ' some_lvar += some_arg',
108
+ ' some_lvar.attr = 5',
109
+ 'end'
110
+ ])
111
+ expect(cop.offences.size).to eq(1)
112
+ end
113
+ end
130
114
 
131
- it 'is not confused by operators ending with =' do
132
- inspect_source(cop,
133
- ['def test',
134
- ' top.attr == 5',
135
- 'end'
136
- ])
137
- expect(cop.offences).to be_empty
138
- end
139
- end
115
+ context 'when a lvar declared as an argument ' +
116
+ 'is no longer the passed object at the end of the method' do
117
+ it 'registers an offence for the lvar attr assignment' do
118
+ inspect_source(cop,
119
+ ['def test(some_arg)',
120
+ ' some_arg = Top.new',
121
+ ' some_arg.attr = 5',
122
+ 'end'
123
+ ])
124
+ expect(cop.offences.size).to eq(1)
140
125
  end
141
126
  end
127
+
128
+ it 'is not confused by operators ending with =' do
129
+ inspect_source(cop,
130
+ ['def test',
131
+ ' top.attr == 5',
132
+ 'end'
133
+ ])
134
+ expect(cop.offences).to be_empty
135
+ end
142
136
  end
@@ -2,62 +2,56 @@
2
2
 
3
3
  require 'spec_helper'
4
4
 
5
- module Rubocop
6
- module Cop
7
- module Lint
8
- describe Void do
9
- subject(:void_op) { Void.new }
10
-
11
- Void::OPS.each do |op|
12
- it "registers an offence for void op #{op} if not on last line" do
13
- inspect_source(void_op,
14
- ["a #{op} b",
15
- "a #{op} b",
16
- "a #{op} b"
17
- ])
18
- expect(void_op.offences.size).to eq(2)
19
- end
20
- end
21
-
22
- Void::OPS.each do |op|
23
- it "accepts void op #{op} if on last line" do
24
- inspect_source(void_op,
25
- ['something',
26
- "a #{op} b"
27
- ])
28
- expect(void_op.offences).to be_empty
29
- end
30
- end
31
-
32
- Void::OPS.each do |op|
33
- it "accepts void op #{op} by itself without a begin block" do
34
- inspect_source(void_op, ["a #{op} b"])
35
- expect(void_op.offences).to be_empty
36
- end
37
- end
38
-
39
- %w(var @var @@var VAR).each do |var|
40
- it "registers an offence for void var #{var} if not on last line" do
41
- inspect_source(void_op,
42
- ["#{var} = 5",
43
- "#{var}",
44
- 'top'
45
- ])
46
- expect(void_op.offences.size).to eq(1)
47
- end
48
- end
49
-
50
- %w(1 2.0 /test/ [1] {}).each do |lit|
51
- it "registers an offence for void lit #{lit} if not on last line" do
52
- inspect_source(void_op,
53
- ["#{lit}",
54
- 'top'
55
- ])
56
- expect(void_op.offences.size).to eq(1)
57
- end
58
- end
59
-
60
- end
5
+ describe Rubocop::Cop::Lint::Void do
6
+ subject(:cop) { described_class.new }
7
+
8
+ described_class::OPS.each do |op|
9
+ it "registers an offence for void op #{op} if not on last line" do
10
+ inspect_source(cop,
11
+ ["a #{op} b",
12
+ "a #{op} b",
13
+ "a #{op} b"
14
+ ])
15
+ expect(cop.offences.size).to eq(2)
61
16
  end
62
17
  end
18
+
19
+ described_class::OPS.each do |op|
20
+ it "accepts void op #{op} if on last line" do
21
+ inspect_source(cop,
22
+ ['something',
23
+ "a #{op} b"
24
+ ])
25
+ expect(cop.offences).to be_empty
26
+ end
27
+ end
28
+
29
+ described_class::OPS.each do |op|
30
+ it "accepts void op #{op} by itself without a begin block" do
31
+ inspect_source(cop, ["a #{op} b"])
32
+ expect(cop.offences).to be_empty
33
+ end
34
+ end
35
+
36
+ %w(var @var @@var VAR).each do |var|
37
+ it "registers an offence for void var #{var} if not on last line" do
38
+ inspect_source(cop,
39
+ ["#{var} = 5",
40
+ "#{var}",
41
+ 'top'
42
+ ])
43
+ expect(cop.offences.size).to eq(1)
44
+ end
45
+ end
46
+
47
+ %w(1 2.0 /test/ [1] {}).each do |lit|
48
+ it "registers an offence for void lit #{lit} if not on last line" do
49
+ inspect_source(cop,
50
+ ["#{lit}",
51
+ 'top'
52
+ ])
53
+ expect(cop.offences.size).to eq(1)
54
+ end
55
+ end
56
+
63
57
  end
@@ -2,158 +2,128 @@
2
2
 
3
3
  require 'spec_helper'
4
4
 
5
- module Rubocop
6
- module Cop
7
- describe Offence do
8
- let(:location) do
9
- source_buffer = Parser::Source::Buffer.new('test', 1)
10
- source_buffer.source = "a\n"
11
- Parser::Source::Range.new(source_buffer, 0, 1)
12
- end
13
- subject(:offence) do
14
- Offence.new(:convention, location, 'message', 'CopName')
15
- end
5
+ describe Rubocop::Cop::Offence do
6
+ let(:location) do
7
+ source_buffer = Parser::Source::Buffer.new('test', 1)
8
+ source_buffer.source = "a\n"
9
+ Parser::Source::Range.new(source_buffer, 0, 1)
10
+ end
11
+ subject(:offence) do
12
+ described_class.new(:convention, location, 'message', 'CopName', true)
13
+ end
16
14
 
17
- it 'has a few required attributes' do
18
- expect(offence.severity).to eq(:convention)
19
- expect(offence.line).to eq(1)
20
- expect(offence.message).to eq('message')
21
- expect(offence.cop_name).to eq('CopName')
22
- end
15
+ it 'has a few required attributes' do
16
+ expect(offence.severity).to eq(:convention)
17
+ expect(offence.line).to eq(1)
18
+ expect(offence.message).to eq('message')
19
+ expect(offence.cop_name).to eq('CopName')
20
+ expect(offence.corrected?).to be_true
21
+ end
23
22
 
24
- it 'overrides #to_s' do
25
- expect(offence.to_s).to eq('C: 1: 1: message')
26
- end
23
+ it 'overrides #to_s' do
24
+ expect(offence.to_s).to eq('C: 1: 1: message')
25
+ end
27
26
 
28
- it 'does not blow up if a message contains %' do
29
- offence = Offence.new(:convention, location, 'message % test',
30
- 'CopName')
27
+ it 'does not blow up if a message contains %' do
28
+ offence = described_class.new(:convention, location, 'message % test',
29
+ 'CopName')
31
30
 
32
- expect(offence.to_s).to eq('C: 1: 1: message % test')
33
- end
31
+ expect(offence.to_s).to eq('C: 1: 1: message % test')
32
+ end
34
33
 
35
- it 'redefines == to compare offences based on their contents' do
36
- o1 = Offence.new(:convention, location, 'message', 'CopName')
37
- o2 = Offence.new(:convention, location, 'message', 'CopName')
34
+ it 'redefines == to compare offences based on their contents' do
35
+ o1 = described_class.new(:convention, location, 'message', 'CopName')
36
+ o2 = described_class.new(:convention, location, 'message', 'CopName')
38
37
 
39
- expect(o1 == o2).to be_true
40
- end
38
+ expect(o1 == o2).to be_true
39
+ end
40
+
41
+ it 'is frozen' do
42
+ expect(offence).to be_frozen
43
+ end
41
44
 
45
+ [:severity, :location, :line, :column, :message, :cop_name].each do |a|
46
+ describe "##{a}" do
42
47
  it 'is frozen' do
43
- expect(offence).to be_frozen
48
+ expect(offence.send(a)).to be_frozen
44
49
  end
50
+ end
51
+ end
45
52
 
46
- describe '.from_diagnostic' do
47
- subject(:offence) { Offence.from_diagnostic(diagnostic) }
48
- let(:diagnostic) { Parser::Diagnostic.new(level, message, location) }
49
- let(:level) { :warning }
50
- let(:message) { 'This is a message' }
51
- let(:location) { double('location').as_null_object }
52
-
53
- it 'returns an offence' do
54
- expect(offence).to be_a(Offence)
55
- end
56
-
57
- it "sets diagnostic's level to offence's severity" do
58
- expect(offence.severity).to eq(level)
59
- end
60
-
61
- it "sets diagnostic's message to offence's message" do
62
- expect(offence.message).to eq(message)
63
- end
64
-
65
- it "sets diagnostic's location to offence's location" do
66
- expect(offence.location).to eq(location)
67
- end
53
+ context 'when unknown severity is passed' do
54
+ it 'raises error' do
55
+ expect do
56
+ described_class.new(:foobar, location, 'message', 'CopName')
57
+ end.to raise_error(ArgumentError)
58
+ end
59
+ end
68
60
 
69
- it 'sets Sytanx as cop name' do
70
- expect(offence.cop_name).to eq('Syntax')
71
- end
72
- end
61
+ describe '#severity_level' do
62
+ subject(:severity_level) do
63
+ described_class.new(severity, location, 'message', 'CopName')
64
+ .severity_level
65
+ end
73
66
 
74
- [:severity, :location, :line, :column, :message, :cop_name].each do |a|
75
- describe "##{a}" do
76
- it 'is frozen' do
77
- expect(offence.send(a)).to be_frozen
78
- end
79
- end
67
+ context 'when severity is :refactor' do
68
+ let(:severity) { :refactor }
69
+ it 'is 1' do
70
+ expect(severity_level).to eq(1)
80
71
  end
72
+ end
81
73
 
82
- context 'when unknown severity is passed' do
83
- it 'raises error' do
84
- expect do
85
- Offence.new(:foobar, location, 'message', 'CopName')
86
- end.to raise_error(ArgumentError)
87
- end
74
+ context 'when severity is :fatal' do
75
+ let(:severity) { :fatal }
76
+ it 'is 5' do
77
+ expect(severity_level).to eq(5)
88
78
  end
79
+ end
80
+ end
89
81
 
90
- describe '#severity_level' do
91
- subject(:severity_level) do
92
- Offence.new(severity, location, 'message', 'CopName').severity_level
93
- end
82
+ describe '#<=>' do
83
+ def offence(hash = {})
84
+ attrs = {
85
+ sev: :convention,
86
+ line: 5,
87
+ col: 5,
88
+ mes: 'message',
89
+ cop: 'CopName'
90
+ }.merge(hash)
91
+
92
+ described_class.new(
93
+ attrs[:sev],
94
+ location(attrs[:line], attrs[:col],
95
+ %w(aaaaaa bbbbbb cccccc dddddd eeeeee ffffff)),
96
+ attrs[:mes],
97
+ attrs[:cop]
98
+ )
99
+ end
94
100
 
95
- context 'when severity is :refactor' do
96
- let(:severity) { :refactor }
97
- it 'is 1' do
98
- expect(severity_level).to eq(1)
99
- end
100
- end
101
+ def location(line, column, source)
102
+ source_buffer = Parser::Source::Buffer.new('test', 1)
103
+ source_buffer.source = source.join("\n")
104
+ begin_pos = source[0...(line - 1)].reduce(0) do |a, e|
105
+ a + e.length + "\n".length
106
+ end + column
107
+ Parser::Source::Range.new(source_buffer, begin_pos, begin_pos + 1)
108
+ end
101
109
 
102
- context 'when severity is :fatal' do
103
- let(:severity) { :fatal }
104
- it 'is 5' do
105
- expect(severity_level).to eq(5)
106
- end
107
- end
108
- end
110
+ [
111
+ [{ }, { }, 0],
109
112
 
110
- describe '#<=>' do
111
- def offence(hash = {})
112
- attrs = {
113
- sev: :convention,
114
- line: 5,
115
- col: 5,
116
- mes: 'message',
117
- cop: 'CopName'
118
- }.merge(hash)
119
-
120
- Offence.new(
121
- attrs[:sev],
122
- location(attrs[:line], attrs[:col],
123
- %w(aaaaaa bbbbbb cccccc dddddd eeeeee ffffff)),
124
- attrs[:mes],
125
- attrs[:cop]
126
- )
127
- end
113
+ [{ line: 6 }, { line: 5 }, 1],
128
114
 
129
- def location(line, column, source)
130
- source_buffer = Parser::Source::Buffer.new('test', 1)
131
- source_buffer.source = source.join("\n")
132
- begin_pos = source[0...(line - 1)].reduce(0) do |a, e|
133
- a + e.length + "\n".length
134
- end + column
135
- Parser::Source::Range.new(source_buffer, begin_pos, begin_pos + 1)
136
- end
115
+ [{ line: 5, col: 6 }, { line: 5, col: 5 }, 1],
116
+ [{ line: 6, col: 4 }, { line: 5, col: 5 }, 1],
137
117
 
138
- [
139
- [{ }, { }, 0],
140
-
141
- [{ line: 6 }, { line: 5 }, 1],
142
-
143
- [{ line: 5, col: 6 }, { line: 5, col: 5 }, 1],
144
- [{ line: 6, col: 4 }, { line: 5, col: 5 }, 1],
145
-
146
- [{ cop: 'B' }, { cop: 'A' }, 1],
147
- [{ line: 6, cop: 'A' }, { line: 5, cop: 'B' }, 1],
148
- [{ col: 6, cop: 'A' }, { col: 5, cop: 'B' }, 1],
149
- ].each do |one, other, expectation|
150
- context "when receiver has #{one} and other has #{other}" do
151
- it "returns #{expectation}" do
152
- an_offence = offence(one)
153
- other_offence = offence(other)
154
- expect(an_offence <=> other_offence).to eq(expectation)
155
- end
156
- end
118
+ [{ cop: 'B' }, { cop: 'A' }, 1],
119
+ [{ line: 6, cop: 'A' }, { line: 5, cop: 'B' }, 1],
120
+ [{ col: 6, cop: 'A' }, { col: 5, cop: 'B' }, 1],
121
+ ].each do |one, other, expectation|
122
+ context "when receiver has #{one} and other has #{other}" do
123
+ it "returns #{expectation}" do
124
+ an_offence = offence(one)
125
+ other_offence = offence(other)
126
+ expect(an_offence <=> other_offence).to eq(expectation)
157
127
  end
158
128
  end
159
129
  end