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
@@ -1,135 +0,0 @@
1
- # encoding: utf-8
2
-
3
- module Rubocop
4
- module Cop
5
- class Grammar
6
- def initialize(tokens)
7
- @tokens_without_pos = tokens.map { |t| [t.type, t.text] }
8
- process_embedded_expressions
9
- @token_indexes = {}
10
- @tokens_without_pos.each_with_index do |t, i|
11
- @token_indexes[t] ||= []
12
- @token_indexes[t] << i
13
- end
14
- @ix = 0
15
- @table = {}
16
- token_positions = tokens.map { |t| [t.pos.lineno, t.pos.column] }
17
- @index_by_pos = Hash[*token_positions.each_with_index.to_a.flatten(1)]
18
- @special = {
19
- assign: [:on_op, '='],
20
- brace_block: [:on_lbrace, '{']
21
- }
22
- end
23
-
24
- # The string "#{x}" will give the tokens
25
- # [:on_tstring_beg, '"'], [:on_embexpr_beg, '#{'], [:on_ident, 'x'],
26
- # [:on_rbrace, '}'], [:on_tstring_end, '"']
27
- # which is not so good for us. We want to distinguish between a
28
- # right brace that ends an embedded expression inside a string
29
- # and an ordinary right brace. So we replace :on_rbrace with the
30
- # made up :on_embexpr_end.
31
- def process_embedded_expressions
32
- state = :outside
33
- brace_depth = 0
34
- @tokens_without_pos.each_with_index do |(type, _), ix|
35
- case state
36
- when :outside
37
- state = :inside_string if type == :on_tstring_beg
38
- when :inside_string
39
- case type
40
- when :on_tstring_end
41
- state = :outside
42
- when :on_embexpr_beg
43
- brace_depth = 1
44
- state = :inside_expr
45
- end
46
- when :inside_expr
47
- case type
48
- when :on_lbrace
49
- brace_depth += 1
50
- when :on_rbrace
51
- if brace_depth == 1
52
- @tokens_without_pos[ix][0] = :on_embexpr_end
53
- state = :inside_string
54
- end
55
- brace_depth -= 1
56
- end
57
- end
58
- end
59
- end
60
-
61
- # Returns a hash mapping indexes in the token array to grammar
62
- # paths, e.g.:
63
- # { 0 => [:program, :assign, :var_field, :@ident],
64
- # 1 => [:program, :assign],
65
- # 2 => [:program, :assign, :@int],
66
- # 4 => [:program, :assign, :var_field, :@ident],
67
- # 5 => [:program, :assign],
68
- # 7 => [:program, :assign, :@int],
69
- # 9 => [:program, :assign, :var_field, :@ident],
70
- # 11 => [:program, :assign],
71
- # 12 => [:program, :assign, :@int] }
72
- def correlate(sexp, path = [])
73
- case sexp
74
- when Array
75
- case sexp[0]
76
- when /^@/
77
- # Leaves in the grammar have a corresponding token with a
78
- # position, which we search for and advance @ix.
79
- @ix = @index_by_pos[[sexp[-1].lineno, sexp[-1].column]]
80
- fail "#{sexp}\n#{@index_by_pos}" unless @ix
81
- @table[@ix] = path + [sexp[0]]
82
- @ix += 1
83
- when *@special.keys
84
- # Here we don't advance @ix because there may be other
85
- # tokens inbetween the current one and the one we get from
86
- # @special.
87
- find(path, sexp, @special[sexp[0]])
88
- when :block_var # "{ |...|" or "do |...|"
89
- @ix = find(path, sexp, [:on_op, '|']) + 1
90
- find(path, sexp, [:on_op, '|'])
91
- end
92
- path += [sexp[0]] if Symbol === sexp[0]
93
- # Compensate for reverse order of if/unless/while/until modifier.
94
- modifiers = [:if_mod, :unless_mod, :while_mod, :until_mod]
95
- children = modifiers.include?(sexp[0]) ? sexp.reverse : sexp
96
-
97
- children.each do |elem|
98
- case elem
99
- when Array
100
- correlate(elem, path) # Dive deeper
101
- when Symbol
102
- unless elem.to_s =~ /^@?[a-z_]+$/
103
- # There's a trailing @ in some symbols in sexp,
104
- # e.g. :-@, that don't appear in tokens. That's why we
105
- # chomp it off.
106
- find(path, [elem], [:on_op, elem.to_s.chomp('@')])
107
- end
108
- end
109
- end
110
- end
111
- @table
112
- end
113
-
114
- private
115
-
116
- def find(path, sexp, token_to_find)
117
- indices = @token_indexes[token_to_find] or return
118
- ix = indices.find { |i| i >= @ix } or return
119
- @table[ix] = path + [sexp[0]]
120
- add_matching_rbrace(ix) if token_to_find == [:on_lbrace, '{']
121
- ix
122
- end
123
-
124
- def add_matching_rbrace(ix)
125
- brace_depth = 0
126
- rbrace_offset = @tokens_without_pos[ix..-1].index do |t|
127
- brace_depth += 1 if t == [:on_lbrace, '{']
128
- brace_depth -= 1 if t == [:on_rbrace, '}']
129
- brace_depth == 0 && t == [:on_rbrace, '}']
130
- end
131
- @table[ix + rbrace_offset] = @table[ix] if rbrace_offset
132
- end
133
- end
134
- end
135
- end
@@ -1,44 +0,0 @@
1
- # encoding: utf-8
2
-
3
- module Rubocop
4
- module Cop
5
- class Indentation < Cop
6
- ERROR_MESSAGE = 'Indent when as deep as case.'
7
-
8
- def inspect(file, source, tokens, sexp)
9
- case_tokens = find_keywords(tokens, 'case')
10
- when_tokens = find_keywords(tokens, 'when')
11
- each_when(sexp) do |case_ix|
12
- when_pos = when_tokens.shift.pos
13
- if when_pos.column != case_tokens[case_ix].pos.column
14
- add_offence(:convention, when_pos.lineno, ERROR_MESSAGE)
15
- end
16
- end
17
- end
18
-
19
- def find_keywords(tokens, keyword)
20
- indexes = tokens.each_index.select do |ix|
21
- keyword?(tokens, ix, keyword)
22
- end
23
- tokens.values_at(*indexes)
24
- end
25
-
26
- def keyword?(tokens, ix, keyword)
27
- [tokens[ix].type, tokens[ix].text] == [:on_kw, keyword] &&
28
- tokens[ix - 1].type != :on_symbeg
29
- end
30
-
31
- # Does a depth first search for :when, yielding the index of the
32
- # corresponding :case for each one.
33
- def each_when(sexp, case_ix = -1, &block)
34
- if sexp[0] == :case
35
- @total_case_ix = (@total_case_ix || -1) + 1
36
- each_when(sexp[2], @total_case_ix, &block)
37
- else
38
- yield case_ix if sexp[0] == :when
39
- sexp.grep(Array).each { |s| each_when(s, case_ix, &block) }
40
- end
41
- end
42
- end
43
- end
44
- end
@@ -1,57 +0,0 @@
1
- # encoding: utf-8
2
-
3
- require 'spec_helper'
4
-
5
- module Rubocop
6
- module Cop
7
- describe AmpersandsPipesVsAndOr do
8
- let(:amp) { AmpersandsPipesVsAndOr.new }
9
-
10
- it 'registers an offence for AND used in condition of if statement' do
11
- check('if', 'and', '&&')
12
- end
13
-
14
- it 'registers an offence for OR used in condition of if statement' do
15
- check('if', 'or', '||')
16
- end
17
-
18
- it 'registers an offence for AND used in condition of unless' do
19
- check('unless', 'and', '&&')
20
- end
21
-
22
- it 'registers an offence for OR used in condition of unless' do
23
- check('unless', 'or', '||')
24
- end
25
-
26
- it 'registers an offence for AND used in condition of while' do
27
- check('while', 'and', '&&')
28
- end
29
-
30
- it 'registers an offence for OR used in condition of while' do
31
- check('while', 'or', '||')
32
- end
33
-
34
- it 'registers an offence for AND used in condition of until' do
35
- check('until', 'and', '&&')
36
- end
37
-
38
- it 'registers an offence for OR used in condition of until' do
39
- check('until', 'or', '||')
40
- end
41
-
42
- def check(keyword, bad_operator, good_operator)
43
- inspect_source(amp, 'file.rb', ["#{keyword} a #{bad_operator} b",
44
- ' c',
45
- 'end',
46
- "#{keyword} a #{good_operator} b",
47
- ' c',
48
- 'end'])
49
- # Just one offence should be registered. The good_operator
50
- # should be accepted.
51
- expect(amp.offences.map(&:message)).to eq(
52
- ['Use &&/|| for boolean expressions, and/or for control flow.'])
53
- expect(amp.offences[0].line_number).to eq(1)
54
- end
55
- end
56
- end
57
- end
@@ -1,71 +0,0 @@
1
- # encoding: utf-8
2
-
3
- require 'spec_helper'
4
-
5
- module Rubocop
6
- module Cop
7
- describe Grammar do
8
- EXAMPLE = '3.times { |i| x = "#{y}#{z}}" }'
9
- tokens = Ripper.lex(EXAMPLE).map { |t| Token.new(*t) }
10
- let(:grammar) { Grammar.new(tokens) }
11
-
12
- it 'correlates token indices to grammar paths', ruby: 2.0 do
13
- method_block = [:program, :method_add_block]
14
- brace_block = method_block + [:brace_block]
15
- test_2_0 = [[[1, 0], :on_int, '3'],
16
- [[1, 1], :on_period, '.'],
17
- [[1, 2], :on_ident, 'times'],
18
- [[1, 7], :on_sp, ' '],
19
- [[1, 8], :on_lbrace, '{'],
20
- [[1, 9], :on_sp, ' '], # 5
21
- [[1, 10], :on_op, '|'],
22
- [[1, 11], :on_ident, 'i'],
23
- [[1, 12], :on_op, '|'],
24
- [[1, 13], :on_sp, ' '],
25
- [[1, 14], :on_ident, 'x'], # 10
26
- [[1, 15], :on_sp, ' '],
27
- [[1, 16], :on_op, '='],
28
- [[1, 17], :on_sp, ' '],
29
- [[1, 18], :on_tstring_beg, '"'],
30
- [[1, 19], :on_embexpr_beg, '#{'], # 15
31
- [[1, 21], :on_ident, 'y'],
32
- [[1, 22], :on_embexpr_end, '}'], # [[1, 22], :on_rbrace, '}'],
33
- [[1, 23], :on_embexpr_beg, '#{'],
34
- [[1, 25], :on_ident, 'z'],
35
- [[1, 26], :on_embexpr_end, '}'], # [[1, 26], :on_rbrace, '}'], # 20
36
- [[1, 27], :on_tstring_content, '}'],
37
- [[1, 28], :on_tstring_end, '"'],
38
- [[1, 29], :on_sp, ' '],
39
- [[1, 30], :on_rbrace, '}']]
40
- expect(Ripper.lex(EXAMPLE)).to eq(test_2_0) if RUBY_VERSION >= '2.0'
41
- sexp = Ripper.sexp(EXAMPLE)
42
- Position.make_position_objects(sexp)
43
-
44
- varref = (RUBY_VERSION == '1.9.2') ? :var_ref : :vcall
45
-
46
- test = {
47
- 0 => method_block + [:call, :@int], # 3
48
- 2 => method_block + [:call, :@ident], # times
49
- 4 => brace_block, # {
50
- 6 => brace_block + [:block_var], # |
51
- 7 => brace_block + [:block_var, :params, :@ident], # i
52
- 8 => brace_block + [:block_var], # |
53
- 10 => brace_block + [:assign, :var_field, :@ident], # x
54
- 12 => brace_block + [:assign], # =
55
- 16 => brace_block + [:assign, :string_literal, :string_content,
56
- :string_embexpr, varref, :@ident], # y
57
- 19 => brace_block + [:assign, :string_literal, :string_content,
58
- :string_embexpr, varref, :@ident], # z
59
- 21 => brace_block + [:assign, :string_literal, :string_content,
60
- :@tstring_content], # }
61
- }
62
- if RUBY_VERSION >= '2.0'
63
- expect(grammar.correlate(sexp)).to eq(test)
64
- else
65
- test = (test[24] = brace_block)
66
- expect(grammar.correlate(sexp)).to eq(test)
67
- end
68
- end
69
- end
70
- end
71
- end
@@ -1,24 +0,0 @@
1
- # encoding: utf-8
2
-
3
- require 'spec_helper'
4
-
5
- module Rubocop
6
- module Cop
7
- describe MultilineBlocks do
8
- let(:blocks) { MultilineBlocks.new }
9
-
10
- it 'registers an offence for a multiline block with braces' do
11
- inspect_source(blocks, '', ['each { |x|',
12
- '}'])
13
- expect(blocks.offences.map(&:message)).to eq(
14
- ['Avoid using {...} for multi-line blocks.'])
15
- end
16
-
17
- it 'accepts a multiline block with do-end' do
18
- inspect_source(blocks, '', ['each do |x|',
19
- 'end'])
20
- expect(blocks.offences.map(&:message)).to be_empty
21
- end
22
- end
23
- end
24
- end
@@ -1,22 +0,0 @@
1
- # encoding: utf-8
2
-
3
- require 'spec_helper'
4
-
5
- module Rubocop
6
- module Cop
7
- describe SingleLineBlocks do
8
- let(:blocks) { SingleLineBlocks.new }
9
-
10
- it 'registers an offence for a single line block with do-end' do
11
- inspect_source(blocks, '', ['each do |x| end'])
12
- expect(blocks.offences.map(&:message)).to eq(
13
- ['Prefer {...} over do...end for single-line blocks.'])
14
- end
15
-
16
- it 'accepts a single line block with braces' do
17
- inspect_source(blocks, '', ['each { |x| }'])
18
- expect(blocks.offences.map(&:message)).to be_empty
19
- end
20
- end
21
- end
22
- end