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,61 +2,55 @@
2
2
 
3
3
  require 'spec_helper'
4
4
 
5
- module Rubocop
6
- module Cop
7
- module Style
8
- describe Encoding do
9
- subject(:encoding) { Encoding.new }
10
-
11
- it 'registers an offence when no encoding present', ruby: 1.9 do
12
- inspect_source(encoding, ['def foo() end'])
13
-
14
- expect(encoding.messages).to eq(
15
- ['Missing utf-8 encoding comment.'])
16
- end
17
-
18
- it 'accepts encoding on first line', ruby: 1.9 do
19
- inspect_source(encoding, ['# encoding: utf-8',
20
- 'def foo() end'])
21
-
22
- expect(encoding.offences).to be_empty
23
- end
24
-
25
- it 'accepts encoding on second line when shebang present', ruby: 1.9 do
26
- inspect_source(encoding, ['#!/usr/bin/env ruby',
27
- '# encoding: utf-8',
28
- 'def foo() end'])
29
-
30
- expect(encoding.messages).to be_empty
31
- end
32
-
33
- it 'books an offence when encoding is in the wrong place', ruby: 1.9 do
34
- inspect_source(encoding, ['def foo() end',
35
- '# encoding: utf-8'])
36
-
37
- expect(encoding.messages).to eq(
38
- ['Missing utf-8 encoding comment.'])
39
- end
40
-
41
- it 'does not register an offence on Ruby 2.0', ruby: 2.0 do
42
- inspect_source(encoding, ['def foo() end'])
43
-
44
- expect(encoding.offences).to be_empty
45
- end
46
-
47
- it 'accepts encoding inserted by magic_encoding gem', ruby: 1.9 do
48
- inspect_source(encoding, ['# -*- encoding : utf-8 -*-',
49
- 'def foo() end'])
50
-
51
- expect(encoding.messages).to be_empty
52
- end
53
-
54
- it 'accepts vim-style encoding comments', ruby: 1.9 do
55
- inspect_source(encoding, ['# vim:fileencoding=utf-8',
56
- 'def foo() end'])
57
- expect(encoding.messages).to be_empty
58
- end
59
- end
60
- end
5
+ describe Rubocop::Cop::Style::Encoding do
6
+ subject(:cop) { described_class.new }
7
+
8
+ it 'registers an offence when no encoding present', ruby: 1.9 do
9
+ inspect_source(cop, ['def foo() end'])
10
+
11
+ expect(cop.messages).to eq(
12
+ ['Missing utf-8 encoding comment.'])
13
+ end
14
+
15
+ it 'accepts encoding on first line', ruby: 1.9 do
16
+ inspect_source(cop, ['# encoding: utf-8',
17
+ 'def foo() end'])
18
+
19
+ expect(cop.offences).to be_empty
20
+ end
21
+
22
+ it 'accepts encoding on second line when shebang present', ruby: 1.9 do
23
+ inspect_source(cop, ['#!/usr/bin/env ruby',
24
+ '# encoding: utf-8',
25
+ 'def foo() end'])
26
+
27
+ expect(cop.messages).to be_empty
28
+ end
29
+
30
+ it 'books an offence when encoding is in the wrong place', ruby: 1.9 do
31
+ inspect_source(cop, ['def foo() end',
32
+ '# encoding: utf-8'])
33
+
34
+ expect(cop.messages).to eq(
35
+ ['Missing utf-8 encoding comment.'])
36
+ end
37
+
38
+ it 'does not register an offence on Ruby 2.0', ruby: 2.0 do
39
+ inspect_source(cop, ['def foo() end'])
40
+
41
+ expect(cop.offences).to be_empty
42
+ end
43
+
44
+ it 'accepts encoding inserted by magic_encoding gem', ruby: 1.9 do
45
+ inspect_source(cop, ['# -*- encoding : utf-8 -*-',
46
+ 'def foo() end'])
47
+
48
+ expect(cop.messages).to be_empty
49
+ end
50
+
51
+ it 'accepts vim-style encoding comments', ruby: 1.9 do
52
+ inspect_source(cop, ['# vim:fileencoding=utf-8',
53
+ 'def foo() end'])
54
+ expect(cop.messages).to be_empty
61
55
  end
62
56
  end
@@ -2,18 +2,12 @@
2
2
 
3
3
  require 'spec_helper'
4
4
 
5
- module Rubocop
6
- module Cop
7
- module Style
8
- describe EndBlock do
9
- subject(:cop) { EndBlock.new }
5
+ describe Rubocop::Cop::Style::EndBlock do
6
+ subject(:cop) { described_class.new }
10
7
 
11
- it 'reports an offence for an END block' do
12
- src = ['END { test }']
13
- inspect_source(cop, src)
14
- expect(cop.offences.size).to eq(1)
15
- end
16
- end
17
- end
8
+ it 'reports an offence for an END block' do
9
+ src = ['END { test }']
10
+ inspect_source(cop, src)
11
+ expect(cop.offences.size).to eq(1)
18
12
  end
19
13
  end
@@ -2,26 +2,20 @@
2
2
 
3
3
  require 'spec_helper'
4
4
 
5
- module Rubocop
6
- module Cop
7
- module Style
8
- describe EndOfLine do
9
- subject(:eol) { EndOfLine.new }
5
+ describe Rubocop::Cop::Style::EndOfLine do
6
+ subject(:cop) { described_class.new }
10
7
 
11
- it 'registers an offence for CR+LF' do
12
- pending 'Fails after upgdate to parser-2.0.0.pre3.'
13
- inspect_source(eol, ["x=0\r", ''])
14
- expect(eol.messages).to eq(
15
- ['Carriage return character detected.'])
16
- end
8
+ it 'registers an offence for CR+LF' do
9
+ pending 'Fails after upgdate to parser-2.0.0.pre3.'
10
+ inspect_source(cop, ["x=0\r", ''])
11
+ expect(cop.messages).to eq(
12
+ ['Carriage return character detected.'])
13
+ end
17
14
 
18
- it 'registers an offence for CR at end of file' do
19
- pending
20
- inspect_source(eol, ["x=0\r"])
21
- expect(eol.messages).to eq(
22
- ['Carriage return character detected.'])
23
- end
24
- end
25
- end
15
+ it 'registers an offence for CR at end of file' do
16
+ pending
17
+ inspect_source(cop, ["x=0\r"])
18
+ expect(cop.messages).to eq(
19
+ ['Carriage return character detected.'])
26
20
  end
27
21
  end
@@ -2,46 +2,74 @@
2
2
 
3
3
  require 'spec_helper'
4
4
 
5
- module Rubocop
6
- module Cop
7
- module Style
8
- describe EvenOdd do
9
- subject(:cop) { described_class.new }
10
-
11
- it 'registers an offence for x % 2 == 0' do
12
- inspect_source(cop,
13
- ['x % 2 == 0'])
14
- expect(cop.offences.size).to eq(1)
15
- expect(cop.messages).to eq([EvenOdd::MSG_EVEN])
16
- end
17
-
18
- it 'registers an offence for (x % 2) == 0' do
19
- inspect_source(cop,
20
- ['(x % 2) == 0'])
21
- expect(cop.offences.size).to eq(1)
22
- expect(cop.messages).to eq([EvenOdd::MSG_EVEN])
23
- end
24
-
25
- it 'registers an offence for x % 2 == 1' do
26
- inspect_source(cop,
27
- ['x % 2 == 1'])
28
- expect(cop.offences.size).to eq(1)
29
- expect(cop.messages).to eq([EvenOdd::MSG_ODD])
30
- end
31
-
32
- it 'registers an offence for (x % 2) == 1' do
33
- inspect_source(cop,
34
- ['(x % 2) == 1'])
35
- expect(cop.offences.size).to eq(1)
36
- expect(cop.messages).to eq([EvenOdd::MSG_ODD])
37
- end
38
-
39
- it 'accepts x % 3 == 0' do
40
- inspect_source(cop,
41
- ['x % 3 == 0'])
42
- expect(cop.offences).to be_empty
43
- end
44
- end
45
- end
5
+ describe Rubocop::Cop::Style::EvenOdd do
6
+ subject(:cop) { described_class.new }
7
+
8
+ it 'registers an offence for x % 2 == 0' do
9
+ inspect_source(cop,
10
+ ['x % 2 == 0'])
11
+ expect(cop.offences.size).to eq(1)
12
+ expect(cop.messages).to eq(['Use Fixnum.even?'])
13
+ end
14
+
15
+ it 'registers an offence for x % 2 != 0' do
16
+ inspect_source(cop,
17
+ ['x % 2 != 0'])
18
+ expect(cop.offences.size).to eq(1)
19
+ expect(cop.messages).to eq(['Use Fixnum.odd?'])
20
+ end
21
+
22
+ it 'registers an offence for (x % 2) == 0' do
23
+ inspect_source(cop,
24
+ ['(x % 2) == 0'])
25
+ expect(cop.offences.size).to eq(1)
26
+ expect(cop.messages).to eq(['Use Fixnum.even?'])
27
+ end
28
+
29
+ it 'registers an offence for (x % 2) != 0' do
30
+ inspect_source(cop,
31
+ ['(x % 2) != 0'])
32
+ expect(cop.offences.size).to eq(1)
33
+ expect(cop.messages).to eq(['Use Fixnum.odd?'])
34
+ end
35
+
36
+ it 'registers an offence for x % 2 == 1' do
37
+ inspect_source(cop,
38
+ ['x % 2 == 1'])
39
+ expect(cop.offences.size).to eq(1)
40
+ expect(cop.messages).to eq(['Use Fixnum.odd?'])
41
+ end
42
+
43
+ it 'registers an offence for x % 2 != 1' do
44
+ inspect_source(cop,
45
+ ['x % 2 != 1'])
46
+ expect(cop.offences.size).to eq(1)
47
+ expect(cop.messages).to eq(['Use Fixnum.even?'])
48
+ end
49
+
50
+ it 'registers an offence for (x % 2) == 1' do
51
+ inspect_source(cop,
52
+ ['(x % 2) == 1'])
53
+ expect(cop.offences.size).to eq(1)
54
+ expect(cop.messages).to eq(['Use Fixnum.odd?'])
55
+ end
56
+
57
+ it 'registers an offence for (x % 2) != 1' do
58
+ inspect_source(cop,
59
+ ['(x % 2) != 1'])
60
+ expect(cop.offences.size).to eq(1)
61
+ expect(cop.messages).to eq(['Use Fixnum.even?'])
62
+ end
63
+
64
+ it 'accepts x % 3 == 0' do
65
+ inspect_source(cop,
66
+ ['x % 3 == 0'])
67
+ expect(cop.offences).to be_empty
68
+ end
69
+
70
+ it 'accepts x % 3 != 0' do
71
+ inspect_source(cop,
72
+ ['x % 3 != 0'])
73
+ expect(cop.offences).to be_empty
46
74
  end
47
75
  end
@@ -2,36 +2,30 @@
2
2
 
3
3
  require 'spec_helper'
4
4
 
5
- module Rubocop
6
- module Cop
7
- module Style
8
- describe FavorJoin do
9
- subject(:fj) { FavorJoin.new }
5
+ describe Rubocop::Cop::Style::FavorJoin do
6
+ subject(:cop) { described_class.new }
10
7
 
11
- it 'registers an offence for an array followed by string' do
12
- inspect_source(fj,
13
- ['%w(one two three) * ", "'])
14
- expect(fj.offences.size).to eq(1)
15
- expect(fj.messages)
16
- .to eq([FavorJoin::MSG])
17
- end
8
+ it 'registers an offence for an array followed by string' do
9
+ inspect_source(cop,
10
+ ['%w(one two three) * ", "'])
11
+ expect(cop.offences.size).to eq(1)
12
+ expect(cop.messages)
13
+ .to eq(['Favor Array#join over Array#*.'])
14
+ end
18
15
 
19
- it 'does not register an offence for numbers' do
20
- inspect_source(fj,
21
- ['%w(one two three) * 4'])
22
- expect(fj.offences).to be_empty
23
- end
16
+ it 'does not register an offence for numbers' do
17
+ inspect_source(cop,
18
+ ['%w(one two three) * 4'])
19
+ expect(cop.offences).to be_empty
20
+ end
24
21
 
25
- it 'does not register an offence for ambiguous cases' do
26
- inspect_source(fj,
27
- ['test * ", "'])
28
- expect(fj.offences).to be_empty
22
+ it 'does not register an offence for ambiguous cases' do
23
+ inspect_source(cop,
24
+ ['test * ", "'])
25
+ expect(cop.offences).to be_empty
29
26
 
30
- inspect_source(fj,
31
- ['%w(one two three) * test'])
32
- expect(fj.offences).to be_empty
33
- end
34
- end
35
- end
27
+ inspect_source(cop,
28
+ ['%w(one two three) * test'])
29
+ expect(cop.offences).to be_empty
36
30
  end
37
31
  end
@@ -2,181 +2,185 @@
2
2
 
3
3
  require 'spec_helper'
4
4
 
5
- module Rubocop
6
- module Cop
7
- module Style
8
- describe FavorModifier do
9
- let(:if_unless) { IfUnlessModifier.new(config) }
10
- let(:while_until) { WhileUntilModifier.new(config) }
11
- let(:config) do
12
- hash = { 'LineLength' => { 'Max' => 79 } }
13
- Rubocop::Config.new(hash)
14
- end
15
-
16
- it 'registers an offence for multiline if that fits on one line' do
17
- # This if statement fits exactly on one line if written as a
18
- # modifier.
19
- condition = 'a' * 38
20
- body = 'b' * 35
21
- expect(" #{body} if #{condition}".length).to eq(79)
22
-
23
- inspect_source(if_unless,
24
- [" if #{condition}",
25
- " #{body}",
26
- ' end'])
27
- expect(if_unless.messages).to eq(
28
- ['Favor modifier if/unless usage when you have a single-line' +
29
- ' body. Another good alternative is the usage of control flow' +
30
- ' &&/||.'])
31
- end
32
-
33
- it 'registers an offence for short multiline if near an else etc' do
34
- inspect_source(if_unless,
35
- ['if x',
36
- ' y',
37
- 'elsif x1',
38
- ' y1',
39
- 'else',
40
- ' z',
41
- 'end',
42
- 'n = a ? 0 : 1',
43
- 'm = 3 if m0',
44
- '',
45
- 'if a',
46
- ' b',
47
- 'end'])
48
- expect(if_unless.offences.size).to eq(1)
49
- end
50
-
51
- it "accepts multiline if that doesn't fit on one line" do
52
- check_too_long(if_unless, 'if')
53
- end
54
-
55
- it 'accepts multiline if whose body is more than one line' do
56
- check_short_multiline(if_unless, 'if')
57
- end
58
-
59
- it 'registers an offence for multiline unless that fits on one line' do
60
- inspect_source(if_unless, ['unless a',
61
- ' b',
62
- 'end'])
63
- expect(if_unless.messages).to eq(
64
- ['Favor modifier if/unless usage when you have a single-line' +
65
- ' body. Another good alternative is the usage of control flow' +
66
- ' &&/||.'])
67
- end
68
-
69
- it 'accepts code with EOL comment since user might want to keep it' do
70
- inspect_source(if_unless, ['unless a',
71
- ' b # A comment',
72
- 'end'])
73
- expect(if_unless.offences).to be_empty
74
- end
75
-
76
- it 'accepts if-else-end' do
77
- inspect_source(if_unless,
78
- ['if args.last.is_a? Hash then args.pop else ' +
79
- 'Hash.new end'])
80
- expect(if_unless.messages).to be_empty
81
- end
82
-
83
- it "accepts multiline unless that doesn't fit on one line" do
84
- check_too_long(while_until, 'unless')
85
- end
86
-
87
- it 'accepts multiline unless whose body is more than one line' do
88
- check_short_multiline(while_until, 'unless')
89
- end
90
-
91
- it 'registers an offence for multiline while that fits on one line' do
92
- check_really_short(while_until, 'while')
93
- end
94
-
95
- it "accepts multiline while that doesn't fit on one line" do
96
- check_too_long(while_until, 'while')
97
- end
98
-
99
- it 'accepts multiline while whose body is more than one line' do
100
- check_short_multiline(while_until, 'while')
101
- end
102
-
103
- it 'registers an offence for multiline until that fits on one line' do
104
- check_really_short(while_until, 'until')
105
- end
106
-
107
- it "accepts multiline until that doesn't fit on one line" do
108
- check_too_long(while_until, 'until')
109
- end
110
-
111
- it 'accepts multiline until whose body is more than one line' do
112
- check_short_multiline(while_until, 'until')
113
- end
114
-
115
- it 'accepts an empty condition' do
116
- check_empty(if_unless, 'if')
117
- check_empty(if_unless, 'unless')
118
- check_empty(while_until, 'while')
119
- check_empty(while_until, 'until')
120
- end
121
-
122
- it 'accepts if/elsif' do
123
- inspect_source(if_unless, ['if test',
124
- ' something',
125
- 'elsif test2',
126
- ' something_else',
127
- 'end'])
128
- expect(if_unless.offences).to be_empty
129
- end
130
-
131
- it 'accepts modifier while' do
132
- inspect_source(while_until, ['ala while bala'])
133
- expect(while_until.offences).to be_empty
134
- end
135
-
136
- it 'accepts modifier until' do
137
- inspect_source(while_until, ['ala until bala'])
138
- expect(while_until.offences).to be_empty
139
- end
140
-
141
- def check_empty(cop, keyword)
142
- inspect_source(cop, ["#{keyword} cond",
143
- 'end'])
144
- expect(cop.offences).to be_empty
145
- end
146
-
147
- def check_really_short(cop, keyword)
148
- inspect_source(cop, ["#{keyword} a",
149
- ' b',
150
- 'end'])
151
- expect(cop.messages).to eq(
152
- ['Favor modifier while/until usage when you have a single-line ' +
153
- 'body.'])
154
- expect(cop.offences.map { |o| o.location.source }).to eq([keyword])
155
- end
156
-
157
- def check_too_long(cop, keyword)
158
- # This statement is one character too long to fit.
159
- condition = 'a' * (40 - keyword.length)
160
- body = 'b' * 36
161
- expect(" #{body} #{keyword} #{condition}".length).to eq(80)
162
-
163
- inspect_source(cop,
164
- [" #{keyword} #{condition}",
165
- " #{body}",
166
- ' end'])
167
-
168
- expect(cop.offences).to be_empty
169
- end
170
-
171
- def check_short_multiline(cop, keyword)
172
- inspect_source(cop,
173
- ["#{keyword} ENV['COVERAGE']",
174
- " require 'simplecov'",
175
- ' SimpleCov.start',
176
- 'end'])
177
- expect(cop.messages).to be_empty
178
- end
179
- end
180
- end
5
+ describe Rubocop::Cop::Style::IfUnlessModifier do
6
+ subject(:cop) { described_class.new(config) }
7
+ let(:config) do
8
+ hash = { 'LineLength' => { 'Max' => 79 } }
9
+ Rubocop::Config.new(hash)
181
10
  end
11
+
12
+ it 'registers an offence for multiline if that fits on one line' do
13
+ # This if statement fits exactly on one line if written as a
14
+ # modifier.
15
+ condition = 'a' * 38
16
+ body = 'b' * 35
17
+ expect(" #{body} if #{condition}".length).to eq(79)
18
+
19
+ inspect_source(cop,
20
+ [" if #{condition}",
21
+ " #{body}",
22
+ ' end'])
23
+ expect(cop.messages).to eq(
24
+ ['Favor modifier if/unless usage when you have a single-line' +
25
+ ' body. Another good alternative is the usage of control flow' +
26
+ ' &&/||.'])
27
+ end
28
+
29
+ it 'registers an offence for short multiline if near an else etc' do
30
+ inspect_source(cop,
31
+ ['if x',
32
+ ' y',
33
+ 'elsif x1',
34
+ ' y1',
35
+ 'else',
36
+ ' z',
37
+ 'end',
38
+ 'n = a ? 0 : 1',
39
+ 'm = 3 if m0',
40
+ '',
41
+ 'if a',
42
+ ' b',
43
+ 'end'])
44
+ expect(cop.offences.size).to eq(1)
45
+ end
46
+
47
+ it "accepts multiline if that doesn't fit on one line" do
48
+ check_too_long(cop, 'if')
49
+ end
50
+
51
+ it 'accepts multiline if whose body is more than one line' do
52
+ check_short_multiline(cop, 'if')
53
+ end
54
+
55
+ it 'registers an offence for multiline unless that fits on one line' do
56
+ inspect_source(cop, ['unless a',
57
+ ' b',
58
+ 'end'])
59
+ expect(cop.messages).to eq(
60
+ ['Favor modifier if/unless usage when you have a single-line' +
61
+ ' body. Another good alternative is the usage of control flow' +
62
+ ' &&/||.'])
63
+ end
64
+
65
+ it 'accepts code with EOL comment since user might want to keep it' do
66
+ inspect_source(cop, ['unless a',
67
+ ' b # A comment',
68
+ 'end'])
69
+ expect(cop.offences).to be_empty
70
+ end
71
+
72
+ it 'accepts if-else-end' do
73
+ inspect_source(cop,
74
+ ['if args.last.is_a? Hash then args.pop else ' +
75
+ 'Hash.new end'])
76
+ expect(cop.messages).to be_empty
77
+ end
78
+
79
+ it 'accepts an empty condition' do
80
+ check_empty(cop, 'if')
81
+ check_empty(cop, 'unless')
82
+ end
83
+
84
+ it 'accepts if/elsif' do
85
+ inspect_source(cop, ['if test',
86
+ ' something',
87
+ 'elsif test2',
88
+ ' something_else',
89
+ 'end'])
90
+ expect(cop.offences).to be_empty
91
+ end
92
+ end
93
+
94
+ describe Rubocop::Cop::Style::WhileUntilModifier do
95
+ subject(:cop) { described_class.new(config) }
96
+ let(:config) do
97
+ hash = { 'LineLength' => { 'Max' => 79 } }
98
+ Rubocop::Config.new(hash)
99
+ end
100
+
101
+ it "accepts multiline unless that doesn't fit on one line" do
102
+ check_too_long(cop, 'unless')
103
+ end
104
+
105
+ it 'accepts multiline unless whose body is more than one line' do
106
+ check_short_multiline(cop, 'unless')
107
+ end
108
+
109
+ it 'registers an offence for multiline while that fits on one line' do
110
+ check_really_short(cop, 'while')
111
+ end
112
+
113
+ it "accepts multiline while that doesn't fit on one line" do
114
+ check_too_long(cop, 'while')
115
+ end
116
+
117
+ it 'accepts multiline while whose body is more than one line' do
118
+ check_short_multiline(cop, 'while')
119
+ end
120
+
121
+ it 'registers an offence for multiline until that fits on one line' do
122
+ check_really_short(cop, 'until')
123
+ end
124
+
125
+ it "accepts multiline until that doesn't fit on one line" do
126
+ check_too_long(cop, 'until')
127
+ end
128
+
129
+ it 'accepts multiline until whose body is more than one line' do
130
+ check_short_multiline(cop, 'until')
131
+ end
132
+
133
+ it 'accepts an empty condition' do
134
+ check_empty(cop, 'while')
135
+ check_empty(cop, 'until')
136
+ end
137
+
138
+ it 'accepts modifier while' do
139
+ inspect_source(cop, ['ala while bala'])
140
+ expect(cop.offences).to be_empty
141
+ end
142
+
143
+ it 'accepts modifier until' do
144
+ inspect_source(cop, ['ala until bala'])
145
+ expect(cop.offences).to be_empty
146
+ end
147
+ end
148
+
149
+ def check_empty(cop, keyword)
150
+ inspect_source(cop, ["#{keyword} cond",
151
+ 'end'])
152
+ expect(cop.offences).to be_empty
153
+ end
154
+
155
+ def check_really_short(cop, keyword)
156
+ inspect_source(cop, ["#{keyword} a",
157
+ ' b',
158
+ 'end'])
159
+ expect(cop.messages).to eq(
160
+ ['Favor modifier while/until usage when you have a single-line ' +
161
+ 'body.'])
162
+ expect(cop.offences.map { |o| o.location.source }).to eq([keyword])
163
+ end
164
+
165
+ def check_too_long(cop, keyword)
166
+ # This statement is one character too long to fit.
167
+ condition = 'a' * (40 - keyword.length)
168
+ body = 'b' * 36
169
+ expect(" #{body} #{keyword} #{condition}".length).to eq(80)
170
+
171
+ inspect_source(cop,
172
+ [" #{keyword} #{condition}",
173
+ " #{body}",
174
+ ' end'])
175
+
176
+ expect(cop.offences).to be_empty
177
+ end
178
+
179
+ def check_short_multiline(cop, keyword)
180
+ inspect_source(cop,
181
+ ["#{keyword} ENV['COVERAGE']",
182
+ " require 'simplecov'",
183
+ ' SimpleCov.start',
184
+ 'end'])
185
+ expect(cop.messages).to be_empty
182
186
  end