rubocop 0.7.2 → 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 (184) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +7 -1
  3. data/CHANGELOG.md +19 -0
  4. data/README.md +4 -8
  5. data/bin/rubocop +2 -2
  6. data/config/default.yml +8 -0
  7. data/config/enabled.yml +21 -24
  8. data/lib/rubocop.rb +9 -7
  9. data/lib/rubocop/cli.rb +73 -52
  10. data/lib/rubocop/config.rb +8 -5
  11. data/lib/rubocop/cop/access_control.rb +41 -0
  12. data/lib/rubocop/cop/alias.rb +7 -5
  13. data/lib/rubocop/cop/align_parameters.rb +20 -96
  14. data/lib/rubocop/cop/and_or.rb +26 -0
  15. data/lib/rubocop/cop/ascii_comments.rb +3 -8
  16. data/lib/rubocop/cop/ascii_identifiers.rb +6 -5
  17. data/lib/rubocop/cop/avoid_class_vars.rb +5 -10
  18. data/lib/rubocop/cop/avoid_for.rb +7 -5
  19. data/lib/rubocop/cop/avoid_global_vars.rb +19 -7
  20. data/lib/rubocop/cop/avoid_perl_backrefs.rb +7 -10
  21. data/lib/rubocop/cop/avoid_perlisms.rb +11 -10
  22. data/lib/rubocop/cop/block_comments.rb +4 -6
  23. data/lib/rubocop/cop/blocks.rb +11 -47
  24. data/lib/rubocop/cop/case_indentation.rb +9 -31
  25. data/lib/rubocop/cop/class_and_module_camel_case.rb +20 -11
  26. data/lib/rubocop/cop/class_methods.rb +5 -10
  27. data/lib/rubocop/cop/collection_methods.rb +16 -16
  28. data/lib/rubocop/cop/colon_method_call.rb +8 -32
  29. data/lib/rubocop/cop/constant_name.rb +24 -0
  30. data/lib/rubocop/cop/cop.rb +20 -78
  31. data/lib/rubocop/cop/def_parentheses.rb +43 -35
  32. data/lib/rubocop/cop/empty_line_between_defs.rb +11 -15
  33. data/lib/rubocop/cop/empty_lines.rb +20 -9
  34. data/lib/rubocop/cop/empty_literal.rb +47 -0
  35. data/lib/rubocop/cop/encoding.rb +3 -3
  36. data/lib/rubocop/cop/end_of_line.rb +3 -3
  37. data/lib/rubocop/cop/ensure_return.rb +6 -23
  38. data/lib/rubocop/cop/eval.rb +7 -10
  39. data/lib/rubocop/cop/favor_join.rb +9 -24
  40. data/lib/rubocop/cop/favor_modifier.rb +38 -48
  41. data/lib/rubocop/cop/favor_percent_r.rb +7 -7
  42. data/lib/rubocop/cop/favor_sprintf.rb +8 -24
  43. data/lib/rubocop/cop/favor_unless_over_negated_if.rb +19 -17
  44. data/lib/rubocop/cop/handle_exceptions.rb +7 -11
  45. data/lib/rubocop/cop/hash_syntax.rb +29 -14
  46. data/lib/rubocop/cop/if_then_else.rb +32 -29
  47. data/lib/rubocop/cop/leading_comment_space.rb +5 -8
  48. data/lib/rubocop/cop/line_continuation.rb +4 -7
  49. data/lib/rubocop/cop/line_length.rb +3 -3
  50. data/lib/rubocop/cop/loop.rb +33 -0
  51. data/lib/rubocop/cop/method_and_variable_snake_case.rb +42 -19
  52. data/lib/rubocop/cop/method_length.rb +34 -37
  53. data/lib/rubocop/cop/new_lambda_literal.rb +8 -6
  54. data/lib/rubocop/cop/not.rb +10 -4
  55. data/lib/rubocop/cop/numeric_literals.rb +9 -7
  56. data/lib/rubocop/cop/offence.rb +1 -1
  57. data/lib/rubocop/cop/op_method.rb +12 -22
  58. data/lib/rubocop/cop/parameter_lists.rb +12 -6
  59. data/lib/rubocop/cop/parentheses_around_condition.rb +11 -11
  60. data/lib/rubocop/cop/percent_r.rb +7 -7
  61. data/lib/rubocop/cop/reduce_arguments.rb +13 -51
  62. data/lib/rubocop/cop/rescue_exception.rb +13 -29
  63. data/lib/rubocop/cop/rescue_modifier.rb +5 -8
  64. data/lib/rubocop/cop/semicolon.rb +15 -74
  65. data/lib/rubocop/cop/single_line_methods.rb +28 -44
  66. data/lib/rubocop/cop/space_after_comma_etc.rb +29 -9
  67. data/lib/rubocop/cop/space_after_control_keyword.rb +16 -15
  68. data/lib/rubocop/cop/string_literals.rb +9 -35
  69. data/lib/rubocop/cop/surrounding_space.rb +213 -112
  70. data/lib/rubocop/cop/symbol_array.rb +9 -7
  71. data/lib/rubocop/cop/symbol_name.rb +23 -0
  72. data/lib/rubocop/cop/syntax.rb +14 -7
  73. data/lib/rubocop/cop/tab.rb +3 -3
  74. data/lib/rubocop/cop/ternary_operator.rb +26 -24
  75. data/lib/rubocop/cop/trailing_whitespace.rb +3 -5
  76. data/lib/rubocop/cop/trivial_accessors.rb +18 -95
  77. data/lib/rubocop/cop/unless_else.rb +11 -7
  78. data/lib/rubocop/cop/util.rb +26 -0
  79. data/lib/rubocop/cop/variable_interpolation.rb +18 -10
  80. data/lib/rubocop/cop/when_then.rb +6 -17
  81. data/lib/rubocop/cop/word_array.rb +18 -19
  82. data/lib/rubocop/version.rb +1 -1
  83. data/rubocop.gemspec +1 -0
  84. data/spec/project_spec.rb +1 -1
  85. data/spec/rubocop/cli_spec.rb +16 -9
  86. data/spec/rubocop/config_spec.rb +13 -3
  87. data/spec/rubocop/cops/access_control_spec.rb +129 -0
  88. data/spec/rubocop/cops/alias_spec.rb +2 -6
  89. data/spec/rubocop/cops/align_parameters_spec.rb +58 -71
  90. data/spec/rubocop/cops/and_or_spec.rb +37 -0
  91. data/spec/rubocop/cops/ascii_comments_spec.rb +3 -4
  92. data/spec/rubocop/cops/ascii_identifiers_spec.rb +3 -4
  93. data/spec/rubocop/cops/avoid_class_vars_spec.rb +7 -2
  94. data/spec/rubocop/cops/avoid_for_spec.rb +1 -4
  95. data/spec/rubocop/cops/{avoid_global_vars.rb → avoid_global_vars_spec.rb} +4 -4
  96. data/spec/rubocop/cops/avoid_perl_backrefs_spec.rb +1 -1
  97. data/spec/rubocop/cops/avoid_perlisms_spec.rb +5 -5
  98. data/spec/rubocop/cops/block_comments_spec.rb +0 -4
  99. data/spec/rubocop/cops/blocks_spec.rb +33 -0
  100. data/spec/rubocop/cops/case_indentation_spec.rb +5 -5
  101. data/spec/rubocop/cops/class_and_module_camel_case_spec.rb +15 -5
  102. data/spec/rubocop/cops/class_methods_spec.rb +4 -4
  103. data/spec/rubocop/cops/collection_methods_spec.rb +9 -4
  104. data/spec/rubocop/cops/colon_method_call_spec.rb +11 -5
  105. data/spec/rubocop/cops/constant_name_spec.rb +42 -0
  106. data/spec/rubocop/cops/def_with_parentheses_spec.rb +13 -8
  107. data/spec/rubocop/cops/def_without_parentheses_spec.rb +11 -5
  108. data/spec/rubocop/cops/empty_line_between_defs_spec.rb +38 -38
  109. data/spec/rubocop/cops/empty_lines_spec.rb +15 -3
  110. data/spec/rubocop/cops/empty_literal_spec.rb +90 -0
  111. data/spec/rubocop/cops/encoding_spec.rb +9 -9
  112. data/spec/rubocop/cops/end_of_line_spec.rb +2 -2
  113. data/spec/rubocop/cops/ensure_return_spec.rb +1 -3
  114. data/spec/rubocop/cops/eval_spec.rb +8 -5
  115. data/spec/rubocop/cops/favor_join_spec.rb +1 -5
  116. data/spec/rubocop/cops/favor_modifier_spec.rb +16 -14
  117. data/spec/rubocop/cops/{favor_percent_r.rb → favor_percent_r_spec.rb} +6 -6
  118. data/spec/rubocop/cops/favor_sprintf_spec.rb +3 -9
  119. data/spec/rubocop/cops/favor_unless_over_negated_if_spec.rb +4 -4
  120. data/spec/rubocop/cops/favor_until_over_negated_while_spec.rb +3 -3
  121. data/spec/rubocop/cops/handle_exceptions_spec.rb +1 -3
  122. data/spec/rubocop/cops/hash_syntax_spec.rb +11 -6
  123. data/spec/rubocop/cops/if_with_semicolon_spec.rb +7 -1
  124. data/spec/rubocop/cops/leading_comment_space_spec.rb +0 -7
  125. data/spec/rubocop/cops/line_continuation_spec.rb +2 -2
  126. data/spec/rubocop/cops/line_length_spec.rb +2 -2
  127. data/spec/rubocop/cops/loop_spec.rb +31 -0
  128. data/spec/rubocop/cops/method_and_variable_snake_case_spec.rb +38 -12
  129. data/spec/rubocop/cops/method_length_spec.rb +85 -85
  130. data/spec/rubocop/cops/multiline_if_then_spec.rb +15 -15
  131. data/spec/rubocop/cops/new_lambda_literal_spec.rb +3 -3
  132. data/spec/rubocop/cops/not_spec.rb +1 -4
  133. data/spec/rubocop/cops/numeric_literals_spec.rb +13 -13
  134. data/spec/rubocop/cops/one_line_conditional_spec.rb +1 -1
  135. data/spec/rubocop/cops/op_method_spec.rb +2 -9
  136. data/spec/rubocop/cops/parameter_lists_spec.rb +7 -7
  137. data/spec/rubocop/cops/parentheses_around_condition_spec.rb +41 -44
  138. data/spec/rubocop/cops/percent_r_spec.rb +6 -6
  139. data/spec/rubocop/cops/reduce_arguments_spec.rb +4 -4
  140. data/spec/rubocop/cops/rescue_exception_spec.rb +48 -8
  141. data/spec/rubocop/cops/rescue_modifier_spec.rb +2 -5
  142. data/spec/rubocop/cops/semicolon_spec.rb +2 -30
  143. data/spec/rubocop/cops/single_line_methods_spec.rb +13 -13
  144. data/spec/rubocop/cops/space_after_colon_spec.rb +3 -3
  145. data/spec/rubocop/cops/space_after_comma_spec.rb +14 -2
  146. data/spec/rubocop/cops/space_after_control_keyword_spec.rb +42 -3
  147. data/spec/rubocop/cops/space_after_semicolon_spec.rb +2 -2
  148. data/spec/rubocop/cops/space_around_braces_spec.rb +18 -3
  149. data/spec/rubocop/cops/space_around_equals_in_default_parameter_spec.rb +4 -4
  150. data/spec/rubocop/cops/space_around_operators_spec.rb +82 -27
  151. data/spec/rubocop/cops/space_inside_brackets_spec.rb +13 -7
  152. data/spec/rubocop/cops/space_inside_hash_literal_braces_spec.rb +14 -9
  153. data/spec/rubocop/cops/space_inside_parens_spec.rb +7 -3
  154. data/spec/rubocop/cops/string_literals_spec.rb +17 -5
  155. data/spec/rubocop/cops/symbol_array_spec.rb +18 -2
  156. data/spec/rubocop/cops/symbol_name_spec.rb +119 -0
  157. data/spec/rubocop/cops/syntax_spec.rb +25 -18
  158. data/spec/rubocop/cops/tab_spec.rb +2 -2
  159. data/spec/rubocop/cops/ternary_operator_spec.rb +13 -17
  160. data/spec/rubocop/cops/trailing_whitespace_spec.rb +3 -3
  161. data/spec/rubocop/cops/trivial_accessors_spec.rb +17 -20
  162. data/spec/rubocop/cops/unless_else_spec.rb +8 -8
  163. data/spec/rubocop/cops/variable_interpolation_spec.rb +0 -5
  164. data/spec/rubocop/cops/when_then_spec.rb +14 -21
  165. data/spec/rubocop/cops/word_array_spec.rb +12 -4
  166. data/spec/spec_helper.rb +12 -4
  167. metadata +40 -31
  168. data/.document +0 -5
  169. data/lib/rubocop/cop/ampersands_pipes_vs_and_or.rb +0 -25
  170. data/lib/rubocop/cop/array_literal.rb +0 -61
  171. data/lib/rubocop/cop/brace_after_percent.rb +0 -32
  172. data/lib/rubocop/cop/grammar.rb +0 -138
  173. data/lib/rubocop/cop/hash_literal.rb +0 -61
  174. data/lib/rubocop/cop/percent_literals.rb +0 -25
  175. data/lib/rubocop/cop/symbol_snake_case.rb +0 -47
  176. data/spec/rubocop/cops/ampersands_pipes_vs_and_or_spec.rb +0 -57
  177. data/spec/rubocop/cops/array_literal_spec.rb +0 -46
  178. data/spec/rubocop/cops/brace_after_percent_spec.rb +0 -33
  179. data/spec/rubocop/cops/grammar_spec.rb +0 -81
  180. data/spec/rubocop/cops/hash_literal_spec.rb +0 -46
  181. data/spec/rubocop/cops/multiline_blocks_spec.rb +0 -24
  182. data/spec/rubocop/cops/percent_literals_spec.rb +0 -47
  183. data/spec/rubocop/cops/single_line_blocks_spec.rb +0 -22
  184. data/spec/rubocop/cops/symbol_snake_case_spec.rb +0 -93
@@ -9,28 +9,24 @@ module Rubocop
9
9
 
10
10
  it 'registers an offence for an array followed by string' do
11
11
  inspect_source(fj,
12
- 'file.rb',
13
12
  ['%w(one two three) * ", "'])
14
13
  expect(fj.offences.size).to eq(1)
15
14
  expect(fj.offences.map(&:message))
16
- .to eq([FavorJoin::ERROR_MESSAGE])
15
+ .to eq([FavorJoin::MSG])
17
16
  end
18
17
 
19
18
  it 'does not register an offence for numbers' do
20
19
  inspect_source(fj,
21
- 'file.rb',
22
20
  ['%w(one two three) * 4'])
23
21
  expect(fj.offences).to be_empty
24
22
  end
25
23
 
26
24
  it 'does not register an offence for ambiguous cases' do
27
25
  inspect_source(fj,
28
- 'file.rb',
29
26
  ['test * ", "'])
30
27
  expect(fj.offences).to be_empty
31
28
 
32
29
  inspect_source(fj,
33
- 'file.rb',
34
30
  ['%w(one two three) * test'])
35
31
  expect(fj.offences).to be_empty
36
32
  end
@@ -4,13 +4,14 @@ require 'spec_helper'
4
4
 
5
5
  module Rubocop
6
6
  module Cop
7
- describe FavorModifier do
7
+ describe FavorModifier, broken: true do
8
8
  let(:if_until) { IfUnlessModifier.new }
9
9
  let(:while_until) { WhileUntilModifier.new }
10
+ before { LineLength.config = { 'Max' => 79 } }
10
11
 
11
12
  it 'registers an offence for multiline if that fits on one line' do
12
13
  # This if statement fits exactly on one line if written as a modifier.
13
- inspect_source(if_until, 'file.rb',
14
+ inspect_source(if_until,
14
15
  ['if a_condition_that_is_just_short_enough',
15
16
  ' some_long_metod_name(followed_by_args)',
16
17
  'end'])
@@ -28,23 +29,24 @@ module Rubocop
28
29
  end
29
30
 
30
31
  it 'registers an offence for multiline unless that fits on one line' do
31
- inspect_source(if_until, 'file.rb', ['unless a',
32
- ' b',
33
- 'end'])
32
+ inspect_source(if_until, ['unless a',
33
+ ' b',
34
+ 'end'])
34
35
  expect(if_until.offences.map(&:message)).to eq(
35
36
  ['Favor modifier if/unless usage when you have a single-line body.' +
36
37
  ' Another good alternative is the usage of control flow and/or.'])
37
38
  end
38
39
 
39
40
  it 'accepts code with EOL comment since user might want to keep it' do
40
- inspect_source(if_until, 'file.rb', ['unless a',
41
- ' b # A comment',
42
- 'end'])
41
+ pending
42
+ inspect_source(if_until, ['unless a',
43
+ ' b # A comment',
44
+ 'end'])
43
45
  expect(if_until.offences.map(&:message)).to be_empty
44
46
  end
45
47
 
46
48
  it 'accepts if-else-end' do
47
- inspect_source(if_until, 'file.rb',
49
+ inspect_source(if_until,
48
50
  ['if args.last.is_a? Hash then args.pop else ' +
49
51
  'Hash.new end'])
50
52
  expect(if_until.offences.map(&:message)).to be_empty
@@ -83,16 +85,16 @@ module Rubocop
83
85
  end
84
86
 
85
87
  def check_really_short(cop, keyword)
86
- inspect_source(cop, 'file.rb', ["#{keyword} a",
87
- ' b',
88
- 'end'])
88
+ inspect_source(cop, ["#{keyword} a",
89
+ ' b',
90
+ 'end'])
89
91
  expect(cop.offences.map(&:message)).to eq(
90
92
  ['Favor modifier while/until usage when you have a single-line ' +
91
93
  'body.'])
92
94
  end
93
95
 
94
96
  def check_too_long(cop, keyword)
95
- inspect_source(cop, 'file.rb',
97
+ inspect_source(cop,
96
98
  [" #{keyword} a_lengthy_condition_that_goes_on_and_on",
97
99
  ' some_long_metod_name(followed_by_args)',
98
100
  ' end'])
@@ -100,7 +102,7 @@ module Rubocop
100
102
  end
101
103
 
102
104
  def check_short_multiline(cop, keyword)
103
- inspect_source(cop, 'file.rb',
105
+ inspect_source(cop,
104
106
  ["#{keyword} ENV['COVERAGE']",
105
107
  " require 'simplecov'",
106
108
  ' SimpleCov.start',
@@ -8,20 +8,20 @@ module Rubocop
8
8
  let(:fpr) { FavorPercentR.new }
9
9
 
10
10
  it 'registers an offence for // with two slashes in regexp' do
11
- inspect_source(fpr, 'file.rb', ['x =~ /home\/\//',
12
- 'y =~ /etc\/top\//'])
11
+ inspect_source(fpr, ['x =~ /home\/\//',
12
+ 'y =~ /etc\/top\//'])
13
13
  expect(fpr.offences.map(&:message))
14
- .to eq([FavorPercentR::ERROR_MESSAGE] * 2)
14
+ .to eq([FavorPercentR::MSG] * 2)
15
15
  end
16
16
 
17
17
  it 'accepts // with only one slash in regexp' do
18
- inspect_source(fpr, 'file.rb', ['x =~ /\/home/',
19
- 'y =~ /\//)'])
18
+ inspect_source(fpr, ['x =~ /\/home/',
19
+ 'y =~ /\//'])
20
20
  expect(fpr.offences.map(&:message)).to be_empty
21
21
  end
22
22
 
23
23
  it 'accepts %r delimiters for regexp with two or more slashes' do
24
- inspect_source(fpr, 'file.rb', ['x =~ %r(/home/)'])
24
+ inspect_source(fpr, ['x =~ %r(/home/)'])
25
25
  expect(fpr.offences.map(&:message)).to be_empty
26
26
  end
27
27
  end
@@ -9,48 +9,42 @@ module Rubocop
9
9
 
10
10
  it 'registers an offence for a string followed by something' do
11
11
  inspect_source(fs,
12
- 'file.rb',
13
12
  ['puts "%d" % 10'])
14
13
  expect(fs.offences.size).to eq(1)
15
14
  expect(fs.offences.map(&:message))
16
- .to eq([FavorSprintf::ERROR_MESSAGE])
15
+ .to eq([FavorSprintf::MSG])
17
16
  end
18
17
 
19
18
  it 'registers an offence for something followed by an array' do
20
19
  inspect_source(fs,
21
- 'file.rb',
22
20
  ['puts x % [10, 11]'])
23
21
  expect(fs.offences.size).to eq(1)
24
22
  expect(fs.offences.map(&:message))
25
- .to eq([FavorSprintf::ERROR_MESSAGE])
23
+ .to eq([FavorSprintf::MSG])
26
24
  end
27
25
 
28
26
  it 'does not register an offence for numbers' do
29
27
  inspect_source(fs,
30
- 'file.rb',
31
28
  ['puts 10 % 4'])
32
29
  expect(fs.offences).to be_empty
33
30
  end
34
31
 
35
32
  it 'does not register an offence for ambiguous cases' do
36
33
  inspect_source(fs,
37
- 'file.rb',
38
34
  ['puts x % 4'])
39
35
  expect(fs.offences).to be_empty
40
36
 
41
37
  inspect_source(fs,
42
- 'file.rb',
43
38
  ['puts x % Y'])
44
39
  expect(fs.offences).to be_empty
45
40
  end
46
41
 
47
42
  it 'works if the first operand contains embedded expressions' do
48
43
  inspect_source(fs,
49
- 'file.rb',
50
44
  ['puts "#{x * 5} %d #{@test}" % 10'])
51
45
  expect(fs.offences.size).to eq(1)
52
46
  expect(fs.offences.map(&:message))
53
- .to eq([FavorSprintf::ERROR_MESSAGE])
47
+ .to eq([FavorSprintf::MSG])
54
48
  end
55
49
  end
56
50
  end
@@ -8,7 +8,7 @@ module Rubocop
8
8
  let(:fav_unless) { FavorUnlessOverNegatedIf.new }
9
9
 
10
10
  it 'registers an offence for if with exclamation point condition' do
11
- inspect_source(fav_unless, 'file.rb',
11
+ inspect_source(fav_unless,
12
12
  ['if !a_condition',
13
13
  ' some_method',
14
14
  'end',
@@ -20,7 +20,7 @@ module Rubocop
20
20
  end
21
21
 
22
22
  it 'registers an offence for if with "not" condition' do
23
- inspect_source(fav_unless, 'file.rb',
23
+ inspect_source(fav_unless,
24
24
  ['if not a_condition',
25
25
  ' some_method',
26
26
  'end',
@@ -32,7 +32,7 @@ module Rubocop
32
32
  end
33
33
 
34
34
  it 'accepts an if/else with negative condition' do
35
- inspect_source(fav_unless, 'file.rb',
35
+ inspect_source(fav_unless,
36
36
  ['if !a_condition',
37
37
  ' some_method',
38
38
  'else',
@@ -47,7 +47,7 @@ module Rubocop
47
47
  end
48
48
 
49
49
  it 'accepts an if where only part of the contition is negated' do
50
- inspect_source(fav_unless, 'file.rb',
50
+ inspect_source(fav_unless,
51
51
  ['if !a_condition && another_condition',
52
52
  ' some_method',
53
53
  'end',
@@ -8,7 +8,7 @@ module Rubocop
8
8
  let(:fav_until) { FavorUntilOverNegatedWhile.new }
9
9
 
10
10
  it 'registers an offence for while with exclamation point condition' do
11
- inspect_source(fav_until, 'file.rb',
11
+ inspect_source(fav_until,
12
12
  ['while !a_condition',
13
13
  ' some_method',
14
14
  'end',
@@ -19,7 +19,7 @@ module Rubocop
19
19
  end
20
20
 
21
21
  it 'registers an offence for while with "not" condition' do
22
- inspect_source(fav_until, 'file.rb',
22
+ inspect_source(fav_until,
23
23
  ['while (not a_condition)',
24
24
  ' some_method',
25
25
  'end',
@@ -30,7 +30,7 @@ module Rubocop
30
30
  end
31
31
 
32
32
  it 'accepts an while where only part of the contition is negated' do
33
- inspect_source(fav_until, 'file.rb',
33
+ inspect_source(fav_until,
34
34
  ['while !a_condition && another_condition',
35
35
  ' some_method',
36
36
  'end',
@@ -9,7 +9,6 @@ module Rubocop
9
9
 
10
10
  it 'registers an offence for empty rescue block' do
11
11
  inspect_source(he,
12
- 'file.rb',
13
12
  ['begin',
14
13
  ' something',
15
14
  'rescue',
@@ -17,12 +16,11 @@ module Rubocop
17
16
  'end'])
18
17
  expect(he.offences.size).to eq(1)
19
18
  expect(he.offences.map(&:message))
20
- .to eq([HandleExceptions::ERROR_MESSAGE])
19
+ .to eq([HandleExceptions::MSG])
21
20
  end
22
21
 
23
22
  it 'does not register an offence for rescue with body' do
24
23
  inspect_source(he,
25
- 'file.rb',
26
24
  ['begin',
27
25
  ' something',
28
26
  ' return',
@@ -8,35 +8,40 @@ module Rubocop
8
8
  let(:hash_syntax) { HashSyntax.new }
9
9
 
10
10
  it 'registers an offence for hash rocket syntax when new is possible' do
11
- inspect_source(hash_syntax, '', ['x = { :a => 0 }'])
11
+ inspect_source(hash_syntax, ['x = { :a => 0 }'])
12
12
  expect(hash_syntax.offences.map(&:message)).to eq(
13
13
  ['Ruby 1.8 hash syntax detected'])
14
14
  end
15
15
 
16
16
  it 'registers an offence for mixed syntax when new is possible' do
17
- inspect_source(hash_syntax, '', ['x = { :a => 0, b: 1 }'])
17
+ inspect_source(hash_syntax, ['x = { :a => 0, b: 1 }'])
18
18
  expect(hash_syntax.offences.map(&:message)).to eq(
19
19
  ['Ruby 1.8 hash syntax detected'])
20
20
  end
21
21
 
22
22
  it 'registers an offence for hash rockets in method calls' do
23
- inspect_source(hash_syntax, '', ['func(3, :a => 0)'])
23
+ inspect_source(hash_syntax, ['func(3, :a => 0)'])
24
24
  expect(hash_syntax.offences.map(&:message)).to eq(
25
25
  ['Ruby 1.8 hash syntax detected'])
26
26
  end
27
27
 
28
28
  it 'accepts hash rockets when keys have different types' do
29
- inspect_source(hash_syntax, '', ['x = { :a => 0, "b" => 1 }'])
29
+ inspect_source(hash_syntax, ['x = { :a => 0, "b" => 1 }'])
30
+ expect(hash_syntax.offences.map(&:message)).to be_empty
31
+ end
32
+
33
+ it 'accepts hash rockets when keys special symbols in them' do
34
+ inspect_source(hash_syntax, ['x = { :"t o" => 0, :"\xab" => 1 }'])
30
35
  expect(hash_syntax.offences.map(&:message)).to be_empty
31
36
  end
32
37
 
33
38
  it 'accepts new syntax in a hash literal' do
34
- inspect_source(hash_syntax, '', ['x = { a: 0, b: 1 }'])
39
+ inspect_source(hash_syntax, ['x = { a: 0, b: 1 }'])
35
40
  expect(hash_syntax.offences.map(&:message)).to be_empty
36
41
  end
37
42
 
38
43
  it 'accepts new syntax in method calls' do
39
- inspect_source(hash_syntax, '', ['func(3, a: 0)'])
44
+ inspect_source(hash_syntax, ['func(3, a: 0)'])
40
45
  expect(hash_syntax.offences.map(&:message)).to be_empty
41
46
  end
42
47
  end
@@ -8,10 +8,16 @@ module Rubocop
8
8
  let(:iws) { IfWithSemicolon.new }
9
9
 
10
10
  it 'registers an offence for one line if/;/end' do
11
- inspect_source(iws, '', ['if cond; run else dont end'])
11
+ inspect_source(iws, ['if cond; run else dont end'])
12
12
  expect(iws.offences.map(&:message)).to eq(
13
13
  ['Never use if x; Use the ternary operator instead.'])
14
14
  end
15
+
16
+ it 'can handle modifier conditionals' do
17
+ inspect_source(iws, ['class Hash',
18
+ 'end if RUBY_VERSION < "1.8.7"'])
19
+ expect(iws.offences.map(&:message)).to be_empty
20
+ end
15
21
  end
16
22
  end
17
23
  end
@@ -9,42 +9,36 @@ module Rubocop
9
9
 
10
10
  it 'registers an offence for comment without leading space' do
11
11
  inspect_source(lcs,
12
- 'file.rb',
13
12
  ['#missing space'])
14
13
  expect(lcs.offences.size).to eq(1)
15
14
  end
16
15
 
17
16
  it 'does not register an offence for # followed by no text' do
18
17
  inspect_source(lcs,
19
- 'file.rb',
20
18
  ['#'])
21
19
  expect(lcs.offences).to be_empty
22
20
  end
23
21
 
24
22
  it 'does not register an offence for more than one space' do
25
23
  inspect_source(lcs,
26
- 'file.rb',
27
24
  ['# heavily indented'])
28
25
  expect(lcs.offences).to be_empty
29
26
  end
30
27
 
31
28
  it 'does not register an offence for more than one #' do
32
29
  inspect_source(lcs,
33
- 'file.rb',
34
30
  ['###### heavily indented'])
35
31
  expect(lcs.offences).to be_empty
36
32
  end
37
33
 
38
34
  it 'does not register an offence for only #s' do
39
35
  inspect_source(lcs,
40
- 'file.rb',
41
36
  ['######'])
42
37
  expect(lcs.offences).to be_empty
43
38
  end
44
39
 
45
40
  it 'does not register an offence for #! on first line' do
46
41
  inspect_source(lcs,
47
- 'file.rb',
48
42
  ['#!/usr/bin/ruby',
49
43
  'test'])
50
44
  expect(lcs.offences).to be_empty
@@ -52,7 +46,6 @@ module Rubocop
52
46
 
53
47
  it 'registers an offence for #! after the first line' do
54
48
  inspect_source(lcs,
55
- 'file.rb',
56
49
  ['test', '#!/usr/bin/ruby'])
57
50
  expect(lcs.offences.size).to eq(1)
58
51
  end
@@ -8,13 +8,13 @@ module Rubocop
8
8
  let(:lc) { LineContinuation.new }
9
9
 
10
10
  it 'registers an offence for line continuation char' do
11
- inspect_source(lc, 'file.rb',
11
+ inspect_source(lc,
12
12
  ['test = 5 \\', '+ 5'])
13
13
  expect(lc.offences.size).to eq(1)
14
14
  end
15
15
 
16
16
  it 'does not register an offence for cont char in a string' do
17
- inspect_source(lc, 'file.rb',
17
+ inspect_source(lc,
18
18
  ['result = "test string\\\n"',
19
19
  'more'])
20
20
  expect(lc.offences).to be_empty
@@ -9,13 +9,13 @@ module Rubocop
9
9
  before { LineLength.config = { 'Max' => 79 } }
10
10
 
11
11
  it "registers an offence for a line that's 80 characters wide" do
12
- ll.inspect('file.rb', ['#' * 80], nil, nil)
12
+ ll.inspect(['#' * 80], nil, nil, nil)
13
13
  expect(ll.offences.size).to eq(1)
14
14
  expect(ll.offences.first.message).to eq('Line is too long. [80/79]')
15
15
  end
16
16
 
17
17
  it "accepts a line that's 79 characters wide" do
18
- ll.inspect('file.rb', ['#' * 79], nil, nil)
18
+ ll.inspect(['#' * 79], nil, nil, nil)
19
19
  expect(ll.offences).to be_empty
20
20
  end
21
21
  end
@@ -0,0 +1,31 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ module Rubocop
6
+ module Cop
7
+ describe Loop do
8
+ let(:loop) { Loop.new }
9
+
10
+ it 'registers an offence for begin/end/while' do
11
+ inspect_source(loop, ['begin something; top; end while test'])
12
+ expect(loop.offences.size).to eq(1)
13
+ end
14
+
15
+ it 'registers an offence for begin/end/until' do
16
+ inspect_source(loop, ['begin something; top; end until test'])
17
+ expect(loop.offences.size).to eq(1)
18
+ end
19
+
20
+ it 'accepts normal while' do
21
+ inspect_source(loop, ['while test; one; two; end'])
22
+ expect(loop.offences).to be_empty
23
+ end
24
+
25
+ it 'accepts normal until' do
26
+ inspect_source(loop, ['until test; one; two; end'])
27
+ expect(loop.offences).to be_empty
28
+ end
29
+ end
30
+ end
31
+ end