rubocop 0.4.0 → 0.8.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 (190) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +50 -0
  3. data/.rubocop.yml +5 -127
  4. data/.travis.yml +7 -1
  5. data/CHANGELOG.md +157 -0
  6. data/CONTRIBUTING.md +13 -6
  7. data/Gemfile +3 -8
  8. data/README.md +160 -9
  9. data/Rakefile +3 -17
  10. data/bin/rubocop +16 -10
  11. data/config/default.yml +46 -0
  12. data/config/disabled.yml +5 -0
  13. data/config/enabled.yml +322 -0
  14. data/lib/rubocop/cli.rb +248 -93
  15. data/lib/rubocop/config.rb +205 -0
  16. data/lib/rubocop/config_store.rb +37 -0
  17. data/lib/rubocop/cop/access_control.rb +41 -0
  18. data/lib/rubocop/cop/alias.rb +17 -0
  19. data/lib/rubocop/cop/align_parameters.rb +20 -95
  20. data/lib/rubocop/cop/and_or.rb +26 -0
  21. data/lib/rubocop/cop/ascii_comments.rb +13 -0
  22. data/lib/rubocop/cop/ascii_identifiers.rb +19 -0
  23. data/lib/rubocop/cop/avoid_class_vars.rb +15 -0
  24. data/lib/rubocop/cop/avoid_for.rb +17 -0
  25. data/lib/rubocop/cop/avoid_global_vars.rb +61 -0
  26. data/lib/rubocop/cop/avoid_perl_backrefs.rb +17 -0
  27. data/lib/rubocop/cop/avoid_perlisms.rb +47 -0
  28. data/lib/rubocop/cop/block_comments.rb +15 -0
  29. data/lib/rubocop/cop/blocks.rb +11 -47
  30. data/lib/rubocop/cop/case_indentation.rb +22 -0
  31. data/lib/rubocop/cop/class_and_module_camel_case.rb +20 -11
  32. data/lib/rubocop/cop/class_methods.rb +15 -0
  33. data/lib/rubocop/cop/collection_methods.rb +16 -16
  34. data/lib/rubocop/cop/colon_method_call.rb +20 -0
  35. data/lib/rubocop/cop/constant_name.rb +24 -0
  36. data/lib/rubocop/cop/cop.rb +34 -47
  37. data/lib/rubocop/cop/def_parentheses.rb +43 -35
  38. data/lib/rubocop/cop/empty_line_between_defs.rb +22 -0
  39. data/lib/rubocop/cop/empty_lines.rb +21 -13
  40. data/lib/rubocop/cop/empty_literal.rb +47 -0
  41. data/lib/rubocop/cop/encoding.rb +3 -3
  42. data/lib/rubocop/cop/end_of_line.rb +3 -3
  43. data/lib/rubocop/cop/ensure_return.rb +19 -0
  44. data/lib/rubocop/cop/eval.rb +19 -0
  45. data/lib/rubocop/cop/favor_join.rb +22 -0
  46. data/lib/rubocop/cop/favor_modifier.rb +38 -48
  47. data/lib/rubocop/cop/favor_percent_r.rb +19 -0
  48. data/lib/rubocop/cop/favor_sprintf.rb +21 -0
  49. data/lib/rubocop/cop/favor_unless_over_negated_if.rb +19 -17
  50. data/lib/rubocop/cop/handle_exceptions.rb +17 -0
  51. data/lib/rubocop/cop/hash_syntax.rb +29 -14
  52. data/lib/rubocop/cop/if_then_else.rb +32 -29
  53. data/lib/rubocop/cop/leading_comment_space.rb +17 -0
  54. data/lib/rubocop/cop/line_continuation.rb +15 -0
  55. data/lib/rubocop/cop/line_length.rb +4 -4
  56. data/lib/rubocop/cop/loop.rb +33 -0
  57. data/lib/rubocop/cop/method_and_variable_snake_case.rb +41 -17
  58. data/lib/rubocop/cop/method_length.rb +52 -0
  59. data/lib/rubocop/cop/new_lambda_literal.rb +8 -6
  60. data/lib/rubocop/cop/not.rb +21 -0
  61. data/lib/rubocop/cop/numeric_literals.rb +9 -7
  62. data/lib/rubocop/cop/offence.rb +12 -1
  63. data/lib/rubocop/cop/op_method.rb +26 -0
  64. data/lib/rubocop/cop/parameter_lists.rb +12 -6
  65. data/lib/rubocop/cop/parentheses_around_condition.rb +11 -11
  66. data/lib/rubocop/cop/percent_r.rb +19 -0
  67. data/lib/rubocop/cop/reduce_arguments.rb +29 -0
  68. data/lib/rubocop/cop/rescue_exception.rb +26 -0
  69. data/lib/rubocop/cop/rescue_modifier.rb +17 -0
  70. data/lib/rubocop/cop/semicolon.rb +31 -0
  71. data/lib/rubocop/cop/single_line_methods.rb +44 -0
  72. data/lib/rubocop/cop/space_after_comma_etc.rb +30 -10
  73. data/lib/rubocop/cop/space_after_control_keyword.rb +29 -0
  74. data/lib/rubocop/cop/string_literals.rb +9 -23
  75. data/lib/rubocop/cop/surrounding_space.rb +223 -83
  76. data/lib/rubocop/cop/symbol_array.rb +31 -0
  77. data/lib/rubocop/cop/symbol_name.rb +23 -0
  78. data/lib/rubocop/cop/syntax.rb +35 -5
  79. data/lib/rubocop/cop/tab.rb +3 -3
  80. data/lib/rubocop/cop/ternary_operator.rb +26 -24
  81. data/lib/rubocop/cop/trailing_whitespace.rb +3 -5
  82. data/lib/rubocop/cop/trivial_accessors.rb +26 -0
  83. data/lib/rubocop/cop/unless_else.rb +11 -7
  84. data/lib/rubocop/cop/util.rb +26 -0
  85. data/lib/rubocop/cop/variable_interpolation.rb +29 -0
  86. data/lib/rubocop/cop/when_then.rb +6 -14
  87. data/lib/rubocop/cop/word_array.rb +37 -0
  88. data/lib/rubocop/report/emacs_style.rb +2 -2
  89. data/lib/rubocop/report/plain_text.rb +1 -1
  90. data/lib/rubocop/version.rb +3 -1
  91. data/lib/rubocop.rb +48 -8
  92. data/rubocop.gemspec +32 -151
  93. data/spec/project_spec.rb +27 -0
  94. data/spec/rubocop/cli_spec.rb +573 -200
  95. data/spec/rubocop/config_spec.rb +409 -0
  96. data/spec/rubocop/config_store_spec.rb +66 -0
  97. data/spec/rubocop/cops/access_control_spec.rb +129 -0
  98. data/spec/rubocop/cops/alias_spec.rb +39 -0
  99. data/spec/rubocop/cops/align_parameters_spec.rb +66 -70
  100. data/spec/rubocop/cops/and_or_spec.rb +37 -0
  101. data/spec/rubocop/cops/ascii_comments_spec.rb +26 -0
  102. data/spec/rubocop/cops/ascii_identifiers_spec.rb +26 -0
  103. data/spec/rubocop/cops/avoid_class_vars_spec.rb +25 -0
  104. data/spec/rubocop/cops/avoid_for_spec.rb +35 -0
  105. data/spec/rubocop/cops/avoid_global_vars_spec.rb +32 -0
  106. data/spec/rubocop/cops/avoid_perl_backrefs_spec.rb +18 -0
  107. data/spec/rubocop/cops/avoid_perlisms_spec.rb +44 -0
  108. data/spec/rubocop/cops/block_comments_spec.rb +25 -0
  109. data/spec/rubocop/cops/blocks_spec.rb +33 -0
  110. data/spec/rubocop/cops/{indentation_spec.rb → case_indentation_spec.rb} +7 -7
  111. data/spec/rubocop/cops/class_and_module_camel_case_spec.rb +15 -5
  112. data/spec/rubocop/cops/class_methods_spec.rb +49 -0
  113. data/spec/rubocop/cops/collection_methods_spec.rb +9 -4
  114. data/spec/rubocop/cops/colon_method_call_spec.rb +53 -0
  115. data/spec/rubocop/cops/constant_name_spec.rb +42 -0
  116. data/spec/rubocop/cops/def_with_parentheses_spec.rb +13 -8
  117. data/spec/rubocop/cops/def_without_parentheses_spec.rb +11 -5
  118. data/spec/rubocop/cops/empty_line_between_defs_spec.rb +83 -0
  119. data/spec/rubocop/cops/empty_lines_spec.rb +14 -59
  120. data/spec/rubocop/cops/empty_literal_spec.rb +90 -0
  121. data/spec/rubocop/cops/encoding_spec.rb +11 -11
  122. data/spec/rubocop/cops/end_of_line_spec.rb +2 -2
  123. data/spec/rubocop/cops/ensure_return_spec.rb +35 -0
  124. data/spec/rubocop/cops/eval_spec.rb +39 -0
  125. data/spec/rubocop/cops/favor_join_spec.rb +35 -0
  126. data/spec/rubocop/cops/favor_modifier_spec.rb +16 -14
  127. data/spec/rubocop/cops/favor_percent_r_spec.rb +29 -0
  128. data/spec/rubocop/cops/favor_sprintf_spec.rb +51 -0
  129. data/spec/rubocop/cops/favor_unless_over_negated_if_spec.rb +4 -4
  130. data/spec/rubocop/cops/favor_until_over_negated_while_spec.rb +3 -3
  131. data/spec/rubocop/cops/handle_exceptions_spec.rb +34 -0
  132. data/spec/rubocop/cops/hash_syntax_spec.rb +11 -6
  133. data/spec/rubocop/cops/if_with_semicolon_spec.rb +7 -1
  134. data/spec/rubocop/cops/leading_comment_space_spec.rb +54 -0
  135. data/spec/rubocop/cops/line_continuation_spec.rb +24 -0
  136. data/spec/rubocop/cops/line_length_spec.rb +3 -2
  137. data/spec/rubocop/cops/loop_spec.rb +31 -0
  138. data/spec/rubocop/cops/method_and_variable_snake_case_spec.rb +55 -9
  139. data/spec/rubocop/cops/method_length_spec.rb +147 -0
  140. data/spec/rubocop/cops/multiline_if_then_spec.rb +15 -15
  141. data/spec/rubocop/cops/new_lambda_literal_spec.rb +5 -6
  142. data/spec/rubocop/cops/not_spec.rb +31 -0
  143. data/spec/rubocop/cops/numeric_literals_spec.rb +13 -13
  144. data/spec/rubocop/cops/offence_spec.rb +13 -0
  145. data/spec/rubocop/cops/one_line_conditional_spec.rb +1 -1
  146. data/spec/rubocop/cops/op_method_spec.rb +78 -0
  147. data/spec/rubocop/cops/parameter_lists_spec.rb +7 -7
  148. data/spec/rubocop/cops/parentheses_around_condition_spec.rb +41 -44
  149. data/spec/rubocop/cops/percent_r_spec.rb +29 -0
  150. data/spec/rubocop/cops/reduce_arguments_spec.rb +57 -0
  151. data/spec/rubocop/cops/rescue_exception_spec.rb +125 -0
  152. data/spec/rubocop/cops/rescue_modifier_spec.rb +37 -0
  153. data/spec/rubocop/cops/semicolon_spec.rb +88 -0
  154. data/spec/rubocop/cops/single_line_methods_spec.rb +50 -0
  155. data/spec/rubocop/cops/space_after_colon_spec.rb +3 -3
  156. data/spec/rubocop/cops/space_after_comma_spec.rb +14 -2
  157. data/spec/rubocop/cops/space_after_control_keyword_spec.rb +67 -0
  158. data/spec/rubocop/cops/space_after_semicolon_spec.rb +6 -1
  159. data/spec/rubocop/cops/space_around_braces_spec.rb +18 -3
  160. data/spec/rubocop/cops/space_around_equals_in_default_parameter_spec.rb +12 -2
  161. data/spec/rubocop/cops/space_around_operators_spec.rb +88 -26
  162. data/spec/rubocop/cops/space_inside_brackets_spec.rb +13 -7
  163. data/spec/rubocop/cops/space_inside_hash_literal_braces_spec.rb +79 -0
  164. data/spec/rubocop/cops/space_inside_parens_spec.rb +7 -3
  165. data/spec/rubocop/cops/string_literals_spec.rb +21 -6
  166. data/spec/rubocop/cops/symbol_array_spec.rb +41 -0
  167. data/spec/rubocop/cops/symbol_name_spec.rb +119 -0
  168. data/spec/rubocop/cops/syntax_spec.rb +28 -5
  169. data/spec/rubocop/cops/tab_spec.rb +2 -2
  170. data/spec/rubocop/cops/ternary_operator_spec.rb +13 -17
  171. data/spec/rubocop/cops/trailing_whitespace_spec.rb +3 -3
  172. data/spec/rubocop/cops/trivial_accessors_spec.rb +329 -0
  173. data/spec/rubocop/cops/unless_else_spec.rb +8 -8
  174. data/spec/rubocop/cops/variable_interpolation_spec.rb +49 -0
  175. data/spec/rubocop/cops/when_then_spec.rb +14 -14
  176. data/spec/rubocop/cops/word_array_spec.rb +47 -0
  177. data/spec/spec_helper.rb +30 -9
  178. data/spec/support/file_helper.rb +21 -0
  179. data/spec/support/isolated_environment.rb +27 -0
  180. metadata +235 -76
  181. data/.document +0 -5
  182. data/Gemfile.lock +0 -41
  183. data/VERSION +0 -1
  184. data/lib/rubocop/cop/ampersands_pipes_vs_and_or.rb +0 -25
  185. data/lib/rubocop/cop/grammar.rb +0 -135
  186. data/lib/rubocop/cop/indentation.rb +0 -44
  187. data/spec/rubocop/cops/ampersands_pipes_vs_and_or_spec.rb +0 -57
  188. data/spec/rubocop/cops/grammar_spec.rb +0 -71
  189. data/spec/rubocop/cops/multiline_blocks_spec.rb +0 -24
  190. data/spec/rubocop/cops/single_line_blocks_spec.rb +0 -22
@@ -0,0 +1,125 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ module Rubocop
6
+ module Cop
7
+ describe RescueException do
8
+ let(:re) { RescueException.new }
9
+
10
+ it 'registers an offence for rescue from Exception' do
11
+ inspect_source(re,
12
+ ['begin',
13
+ ' something',
14
+ 'rescue Exception',
15
+ ' #do nothing',
16
+ 'end'])
17
+ expect(re.offences.size).to eq(1)
18
+ expect(re.offences.map(&:message))
19
+ .to eq([RescueException::MSG])
20
+ end
21
+
22
+ it 'registers an offence for rescue with ::Exception' do
23
+ inspect_source(re,
24
+ ['begin',
25
+ ' something',
26
+ 'rescue ::Exception',
27
+ ' #do nothing',
28
+ 'end'])
29
+ expect(re.offences.size).to eq(1)
30
+ expect(re.offences.map(&:message))
31
+ .to eq([RescueException::MSG])
32
+ end
33
+
34
+ it 'registers an offence for rescue with StandardError, Exception' do
35
+ inspect_source(re,
36
+ ['begin',
37
+ ' something',
38
+ 'rescue StandardError, Exception',
39
+ ' #do nothing',
40
+ 'end'])
41
+ expect(re.offences.size).to eq(1)
42
+ expect(re.offences.map(&:message))
43
+ .to eq([RescueException::MSG])
44
+ end
45
+
46
+ it 'registers an offence for rescue with Exception => e' do
47
+ inspect_source(re,
48
+ ['begin',
49
+ ' something',
50
+ 'rescue Exception => e',
51
+ ' #do nothing',
52
+ 'end'])
53
+ expect(re.offences.size).to eq(1)
54
+ expect(re.offences.map(&:message))
55
+ .to eq([RescueException::MSG])
56
+ end
57
+
58
+ it 'does not register an offence for rescue with no class' do
59
+ inspect_source(re,
60
+ ['begin',
61
+ ' something',
62
+ ' return',
63
+ 'rescue',
64
+ ' file.close',
65
+ 'end'])
66
+ expect(re.offences).to be_empty
67
+ end
68
+
69
+ it 'does not register an offence for rescue with no class and => e' do
70
+ inspect_source(re,
71
+ ['begin',
72
+ ' something',
73
+ ' return',
74
+ 'rescue => e',
75
+ ' file.close',
76
+ 'end'])
77
+ expect(re.offences).to be_empty
78
+ end
79
+
80
+ it 'does not register an offence for rescue with other class' do
81
+ inspect_source(re,
82
+ ['begin',
83
+ ' something',
84
+ ' return',
85
+ 'rescue ArgumentError => e',
86
+ ' file.close',
87
+ 'end'])
88
+ expect(re.offences).to be_empty
89
+ end
90
+
91
+ it 'does not register an offence for rescue with other classes' do
92
+ inspect_source(re,
93
+ ['begin',
94
+ ' something',
95
+ ' return',
96
+ 'rescue EOFError, ArgumentError => e',
97
+ ' file.close',
98
+ 'end'])
99
+ expect(re.offences).to be_empty
100
+ end
101
+
102
+ it 'does not register an offence for rescue with a module prefix' do
103
+ inspect_source(re,
104
+ ['begin',
105
+ ' something',
106
+ ' return',
107
+ 'rescue Test::Exception => e',
108
+ ' file.close',
109
+ 'end'])
110
+ expect(re.offences).to be_empty
111
+ end
112
+
113
+ it 'does not crash when the splat operator is used in a rescue' do
114
+ inspect_source(re,
115
+ ['ERRORS = [Exception]',
116
+ 'begin',
117
+ ' a = 3 / 0',
118
+ 'rescue *ERRORS',
119
+ ' puts e',
120
+ 'end'])
121
+ expect(re.offences).to be_empty
122
+ end
123
+ end
124
+ end
125
+ end
@@ -0,0 +1,37 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ module Rubocop
6
+ module Cop
7
+ describe RescueModifier do
8
+ let(:rm) { RescueModifier.new }
9
+
10
+ it 'registers an offence for modifier rescue' do
11
+ inspect_source(rm,
12
+ ['method rescue handle'])
13
+ expect(rm.offences.size).to eq(1)
14
+ expect(rm.offences.map(&:message))
15
+ .to eq([RescueModifier::MSG])
16
+ end
17
+
18
+ it 'handles more complex expression with modifier rescue' do
19
+ inspect_source(rm,
20
+ ['method1 or method2 rescue handle'])
21
+ expect(rm.offences.size).to eq(1)
22
+ expect(rm.offences.map(&:message))
23
+ .to eq([RescueModifier::MSG])
24
+ end
25
+
26
+ it 'does not register an offence for normal rescue' do
27
+ inspect_source(rm,
28
+ ['begin',
29
+ ' test',
30
+ 'rescue',
31
+ ' handle',
32
+ 'end'])
33
+ expect(rm.offences).to be_empty
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,88 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ module Rubocop
6
+ module Cop
7
+ describe Semicolon do
8
+ let(:s) { Semicolon.new }
9
+ before do
10
+ Semicolon.config = {
11
+ 'AllowAfterParameterListInOneLineMethods' => false,
12
+ 'AllowBeforeEndInOneLineMethods' => true
13
+ }
14
+ end
15
+
16
+ it 'registers an offence for a single expression' do
17
+ inspect_source(s,
18
+ ['puts "this is a test";'])
19
+ expect(s.offences.size).to eq(1)
20
+ expect(s.offences.map(&:message)).to eq([Semicolon::MSG])
21
+ end
22
+
23
+ it 'registers an offence for several expressions' do
24
+ inspect_source(s,
25
+ ['puts "this is a test"; puts "So is this"'])
26
+ expect(s.offences.size).to eq(1)
27
+ expect(s.offences.map(&:message)).to eq([Semicolon::MSG])
28
+ end
29
+
30
+ it 'registers an offence for one line method with two statements' do
31
+ inspect_source(s,
32
+ ['def foo(a) x(1); y(2); z(3); end'])
33
+ expect(s.offences.size).to eq(1)
34
+ end
35
+
36
+ it 'accepts semicolon before end if so configured' do
37
+ inspect_source(s,
38
+ ['def foo(a) z(3); end'])
39
+ expect(s.offences).to be_empty
40
+ end
41
+
42
+ it 'accepts semicolon after params if so configured' do
43
+ inspect_source(s,
44
+ ['def foo(a); z(3) end'])
45
+ expect(s.offences).to be_empty
46
+ end
47
+
48
+ it 'accepts one line method definitions' do
49
+ inspect_source(s,
50
+ ['def foo1; x(3) end',
51
+ 'def initialize(*_); end',
52
+ 'def foo2() x(3); end',
53
+ 'def foo3; x(3); end'])
54
+ expect(s.offences).to be_empty
55
+ end
56
+
57
+ it 'accepts one line empty class definitions' do
58
+ inspect_source(s,
59
+ ['# Prefer a single-line format for class ...',
60
+ 'class Foo < Exception; end',
61
+ '',
62
+ 'class Bar; end'])
63
+ expect(s.offences).to be_empty
64
+ end
65
+
66
+ it 'accepts one line empty method definitions' do
67
+ inspect_source(s,
68
+ ['# One exception to the rule are empty-body methods',
69
+ 'def no_op; end',
70
+ '',
71
+ 'def foo; end'])
72
+ expect(s.offences).to be_empty
73
+ end
74
+
75
+ it 'accepts one line empty module definitions' do
76
+ inspect_source(s,
77
+ ['module Foo; end'])
78
+ expect(s.offences).to be_empty
79
+ end
80
+
81
+ it 'registers an offence for semicolon at the end no matter what' do
82
+ inspect_source(s,
83
+ ['module Foo; end;'])
84
+ expect(s.offences.size).to eq(1)
85
+ end
86
+ end
87
+ end
88
+ end
@@ -0,0 +1,50 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ module Rubocop
6
+ module Cop
7
+ describe SingleLineMethods do
8
+ let(:slm) { SingleLineMethods.new }
9
+ before { SingleLineMethods.config = { 'AllowIfMethodIsEmpty' => true } }
10
+
11
+ it 'registers an offence for a single-line method' do
12
+ inspect_source(slm,
13
+ ['def some_method; body end',
14
+ 'def link_to(name, url); {:name => name}; end',
15
+ 'def @table.columns; super; end'])
16
+ expect(slm.offences.map(&:message)).to eq(
17
+ [SingleLineMethods::MSG] * 3)
18
+ end
19
+
20
+ it 'registers an offence for an empty method if so configured' do
21
+ SingleLineMethods.config = { 'AllowIfMethodIsEmpty' => false }
22
+ inspect_source(slm, ['def no_op; end',
23
+ 'def self.resource_class=(klass); end',
24
+ 'def @table.columns; end'])
25
+ expect(slm.offences.size).to eq(3)
26
+ end
27
+
28
+ it 'accepts a single-line empty method if so configured' do
29
+ SingleLineMethods.config = { 'AllowIfMethodIsEmpty' => true }
30
+ inspect_source(slm, ['def no_op; end',
31
+ 'def self.resource_class=(klass); end',
32
+ 'def @table.columns; end'])
33
+ expect(slm.offences).to be_empty
34
+ end
35
+
36
+ it 'accepts a multi-line method' do
37
+ inspect_source(slm, ['def some_method',
38
+ ' body',
39
+ 'end'])
40
+ expect(slm.offences).to be_empty
41
+ end
42
+
43
+ it 'does not crash on an method with a capitalized name' do
44
+ inspect_source(slm, ['def NoSnakeCase',
45
+ 'end'])
46
+ expect(slm.offences).to be_empty
47
+ end
48
+ end
49
+ end
50
+ end
@@ -8,18 +8,18 @@ module Rubocop
8
8
  let(:space) { SpaceAfterColon.new }
9
9
 
10
10
  it 'registers an offence for colon without space after it' do
11
- inspect_source(space, 'file.rb', ['x = w ? {a:3}:4'])
11
+ inspect_source(space, ['x = w ? {a:3}:4'])
12
12
  expect(space.offences.map(&:message)).to eq(
13
13
  ['Space missing after colon.'] * 2)
14
14
  end
15
15
 
16
16
  it 'allows the colons in symbols' do
17
- inspect_source(space, 'file.rb', ['x = :a'])
17
+ inspect_source(space, ['x = :a'])
18
18
  expect(space.offences.map(&:message)).to be_empty
19
19
  end
20
20
 
21
21
  it 'allows colons in strings' do
22
- inspect_source(space, 'file.rb', ["str << ':'"])
22
+ inspect_source(space, ["str << ':'"])
23
23
  expect(space.offences.map(&:message)).to be_empty
24
24
  end
25
25
  end
@@ -7,8 +7,20 @@ module Rubocop
7
7
  describe SpaceAfterComma do
8
8
  let(:space) { SpaceAfterComma.new }
9
9
 
10
- it 'registers an offence for block argument commas' do
11
- inspect_source(space, 'file.rb', ['each { |s,t| }'])
10
+ it 'registers an offence for block argument commas without space' do
11
+ inspect_source(space, ['each { |s,t| }'])
12
+ expect(space.offences.map(&:message)).to eq(
13
+ ['Space missing after comma.'])
14
+ end
15
+
16
+ it 'registers an offence for array index commas without space' do
17
+ inspect_source(space, ['formats[0,1]'])
18
+ expect(space.offences.map(&:message)).to eq(
19
+ ['Space missing after comma.'])
20
+ end
21
+
22
+ it 'registers an offence for method call arg commas without space' do
23
+ inspect_source(space, ['a(1,2)'])
12
24
  expect(space.offences.map(&:message)).to eq(
13
25
  ['Space missing after comma.'])
14
26
  end
@@ -0,0 +1,67 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ module Rubocop
6
+ module Cop
7
+ describe SpaceAfterControlKeyword do
8
+ let(:ap) { SpaceAfterControlKeyword.new }
9
+
10
+ it 'registers an offence for normal if' do
11
+ inspect_source(ap,
12
+ ['if(test) then result end'])
13
+ expect(ap.offences.size).to eq(1)
14
+ end
15
+
16
+ it 'registers an offence for modifier unless' do
17
+ inspect_source(ap, ['action unless(test)'])
18
+
19
+ expect(ap.offences.size).to eq(1)
20
+ end
21
+
22
+ it 'does not get confused by keywords' do
23
+ inspect_source(ap, ['[:if, :unless].action'])
24
+ expect(ap.offences).to be_empty
25
+ end
26
+
27
+ it 'does not get confused by the ternary operator' do
28
+ inspect_source(ap, ['a ? b : c'])
29
+ expect(ap.offences).to be_empty
30
+ end
31
+
32
+ it 'registers an offence for if, elsif, and unless' do
33
+ inspect_source(ap,
34
+ ['if(a)',
35
+ 'elsif(b)',
36
+ ' unless(c)',
37
+ ' end',
38
+ 'end'])
39
+ expect(ap.offences.map(&:line_number)).to eq([1, 2, 3])
40
+ end
41
+
42
+ it 'registers an offence for case and when' do
43
+ inspect_source(ap,
44
+ ['case(a)',
45
+ 'when(0) then 1',
46
+ 'end'])
47
+ expect(ap.offences.map(&:line_number)).to eq([1, 2])
48
+ end
49
+
50
+ it 'registers an offence for case and when' do
51
+ inspect_source(ap,
52
+ ['case(a)',
53
+ 'when(0) then 1',
54
+ 'end'])
55
+ expect(ap.offences.map(&:line_number)).to eq([1, 2])
56
+ end
57
+
58
+ it 'registers an offence for while and until' do
59
+ inspect_source(ap,
60
+ ['while(a)',
61
+ ' b until(c)',
62
+ 'end'])
63
+ expect(ap.offences.map(&:line_number)).to eq([1, 2])
64
+ end
65
+ end
66
+ end
67
+ end
@@ -8,10 +8,15 @@ module Rubocop
8
8
  let(:space) { SpaceAfterSemicolon.new }
9
9
 
10
10
  it 'registers an offence for semicolon without space after it' do
11
- inspect_source(space, 'file.rb', ['x = 1;y = 2'])
11
+ inspect_source(space, ['x = 1;y = 2'])
12
12
  expect(space.offences.map(&:message)).to eq(
13
13
  ['Space missing after semicolon.'])
14
14
  end
15
+
16
+ it 'does not crash if semicolon is the last character of the file' do
17
+ inspect_source(space, ['x = 1;'])
18
+ expect(space.offences.map(&:message)).to be_empty
19
+ end
15
20
  end
16
21
  end
17
22
  end
@@ -8,25 +8,40 @@ module Rubocop
8
8
  let(:space) { SpaceAroundBraces.new }
9
9
 
10
10
  it 'registers an offence for left brace without spaces' do
11
- inspect_source(space, 'file.rb', ['each{ puts }'])
11
+ inspect_source(space, ['each{ puts }'])
12
12
  expect(space.offences.map(&:message)).to eq(
13
13
  ["Surrounding space missing for '{'."])
14
14
  end
15
15
 
16
16
  it 'registers an offence for right brace without inner space' do
17
- inspect_source(space, 'file.rb', ['each { puts}'])
17
+ inspect_source(space, ['each { puts}'])
18
18
  expect(space.offences.map(&:message)).to eq(
19
19
  ["Space missing to the left of '}'."])
20
20
  end
21
21
 
22
22
  it 'accepts an empty hash literal with no space inside' do
23
- inspect_source(space, 'file.rb',
23
+ inspect_source(space,
24
24
  ['view_hash.each do |view_key|',
25
25
  'end',
26
26
  '@views = {}',
27
27
  ''])
28
28
  expect(space.offences.map(&:message)).to be_empty
29
29
  end
30
+
31
+ it 'accepts string interpolation braces with no space inside' do
32
+ inspect_source(space,
33
+ ['"A=#{a}"',
34
+ ':"#{b}"',
35
+ '/#{c}/',
36
+ '`#{d}`',
37
+ 'sprintf("#{message.gsub(/%/, \'%%\')}", line)'])
38
+ expect(space.offences.map(&:message)).to be_empty
39
+ end
40
+
41
+ it 'accepts braces around a hash literal argument' do
42
+ inspect_source(space, ["new({'user' => user_params})"])
43
+ expect(space.offences.map(&:message)).to be_empty
44
+ end
30
45
  end
31
46
  end
32
47
  end
@@ -8,13 +8,23 @@ module Rubocop
8
8
  let(:space) { SpaceAroundEqualsInParameterDefault.new }
9
9
 
10
10
  it 'registers an offence for default value assignment without space' do
11
- inspect_source(space, 'file.rb', ['def f(x, y=0, z=1)', 'end'])
11
+ inspect_source(space, ['def f(x, y=0, z=1)', 'end'])
12
12
  expect(space.offences.map(&:message)).to eq(
13
13
  ['Surrounding space missing in default value assignment.'] * 2)
14
14
  end
15
15
 
16
+ it 'registers an offence for assignment of empty string without space' do
17
+ inspect_source(space, ['def f(x, y="", z=1)', 'end'])
18
+ expect(space.offences.size).to eq(2)
19
+ end
20
+
21
+ it 'registers an offence for assignment of empty list without space' do
22
+ inspect_source(space, ['def f(x, y=[])', 'end'])
23
+ expect(space.offences.size).to eq(1)
24
+ end
25
+
16
26
  it 'accepts default value assignment with space' do
17
- inspect_source(space, 'file.rb', ['def f(x, y = 0, z = 1)', 'end'])
27
+ inspect_source(space, ['def f(x, y = 0, z = {})', 'end'])
18
28
  expect(space.offences.map(&:message)).to be_empty
19
29
  end
20
30
  end