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.
- checksums.yaml +7 -0
- data/.gitignore +50 -0
- data/.rubocop.yml +5 -127
- data/.travis.yml +7 -1
- data/CHANGELOG.md +157 -0
- data/CONTRIBUTING.md +13 -6
- data/Gemfile +3 -8
- data/README.md +160 -9
- data/Rakefile +3 -17
- data/bin/rubocop +16 -10
- data/config/default.yml +46 -0
- data/config/disabled.yml +5 -0
- data/config/enabled.yml +322 -0
- data/lib/rubocop/cli.rb +248 -93
- data/lib/rubocop/config.rb +205 -0
- data/lib/rubocop/config_store.rb +37 -0
- data/lib/rubocop/cop/access_control.rb +41 -0
- data/lib/rubocop/cop/alias.rb +17 -0
- data/lib/rubocop/cop/align_parameters.rb +20 -95
- data/lib/rubocop/cop/and_or.rb +26 -0
- data/lib/rubocop/cop/ascii_comments.rb +13 -0
- data/lib/rubocop/cop/ascii_identifiers.rb +19 -0
- data/lib/rubocop/cop/avoid_class_vars.rb +15 -0
- data/lib/rubocop/cop/avoid_for.rb +17 -0
- data/lib/rubocop/cop/avoid_global_vars.rb +61 -0
- data/lib/rubocop/cop/avoid_perl_backrefs.rb +17 -0
- data/lib/rubocop/cop/avoid_perlisms.rb +47 -0
- data/lib/rubocop/cop/block_comments.rb +15 -0
- data/lib/rubocop/cop/blocks.rb +11 -47
- data/lib/rubocop/cop/case_indentation.rb +22 -0
- data/lib/rubocop/cop/class_and_module_camel_case.rb +20 -11
- data/lib/rubocop/cop/class_methods.rb +15 -0
- data/lib/rubocop/cop/collection_methods.rb +16 -16
- data/lib/rubocop/cop/colon_method_call.rb +20 -0
- data/lib/rubocop/cop/constant_name.rb +24 -0
- data/lib/rubocop/cop/cop.rb +34 -47
- data/lib/rubocop/cop/def_parentheses.rb +43 -35
- data/lib/rubocop/cop/empty_line_between_defs.rb +22 -0
- data/lib/rubocop/cop/empty_lines.rb +21 -13
- data/lib/rubocop/cop/empty_literal.rb +47 -0
- data/lib/rubocop/cop/encoding.rb +3 -3
- data/lib/rubocop/cop/end_of_line.rb +3 -3
- data/lib/rubocop/cop/ensure_return.rb +19 -0
- data/lib/rubocop/cop/eval.rb +19 -0
- data/lib/rubocop/cop/favor_join.rb +22 -0
- data/lib/rubocop/cop/favor_modifier.rb +38 -48
- data/lib/rubocop/cop/favor_percent_r.rb +19 -0
- data/lib/rubocop/cop/favor_sprintf.rb +21 -0
- data/lib/rubocop/cop/favor_unless_over_negated_if.rb +19 -17
- data/lib/rubocop/cop/handle_exceptions.rb +17 -0
- data/lib/rubocop/cop/hash_syntax.rb +29 -14
- data/lib/rubocop/cop/if_then_else.rb +32 -29
- data/lib/rubocop/cop/leading_comment_space.rb +17 -0
- data/lib/rubocop/cop/line_continuation.rb +15 -0
- data/lib/rubocop/cop/line_length.rb +4 -4
- data/lib/rubocop/cop/loop.rb +33 -0
- data/lib/rubocop/cop/method_and_variable_snake_case.rb +41 -17
- data/lib/rubocop/cop/method_length.rb +52 -0
- data/lib/rubocop/cop/new_lambda_literal.rb +8 -6
- data/lib/rubocop/cop/not.rb +21 -0
- data/lib/rubocop/cop/numeric_literals.rb +9 -7
- data/lib/rubocop/cop/offence.rb +12 -1
- data/lib/rubocop/cop/op_method.rb +26 -0
- data/lib/rubocop/cop/parameter_lists.rb +12 -6
- data/lib/rubocop/cop/parentheses_around_condition.rb +11 -11
- data/lib/rubocop/cop/percent_r.rb +19 -0
- data/lib/rubocop/cop/reduce_arguments.rb +29 -0
- data/lib/rubocop/cop/rescue_exception.rb +26 -0
- data/lib/rubocop/cop/rescue_modifier.rb +17 -0
- data/lib/rubocop/cop/semicolon.rb +31 -0
- data/lib/rubocop/cop/single_line_methods.rb +44 -0
- data/lib/rubocop/cop/space_after_comma_etc.rb +30 -10
- data/lib/rubocop/cop/space_after_control_keyword.rb +29 -0
- data/lib/rubocop/cop/string_literals.rb +9 -23
- data/lib/rubocop/cop/surrounding_space.rb +223 -83
- data/lib/rubocop/cop/symbol_array.rb +31 -0
- data/lib/rubocop/cop/symbol_name.rb +23 -0
- data/lib/rubocop/cop/syntax.rb +35 -5
- data/lib/rubocop/cop/tab.rb +3 -3
- data/lib/rubocop/cop/ternary_operator.rb +26 -24
- data/lib/rubocop/cop/trailing_whitespace.rb +3 -5
- data/lib/rubocop/cop/trivial_accessors.rb +26 -0
- data/lib/rubocop/cop/unless_else.rb +11 -7
- data/lib/rubocop/cop/util.rb +26 -0
- data/lib/rubocop/cop/variable_interpolation.rb +29 -0
- data/lib/rubocop/cop/when_then.rb +6 -14
- data/lib/rubocop/cop/word_array.rb +37 -0
- data/lib/rubocop/report/emacs_style.rb +2 -2
- data/lib/rubocop/report/plain_text.rb +1 -1
- data/lib/rubocop/version.rb +3 -1
- data/lib/rubocop.rb +48 -8
- data/rubocop.gemspec +32 -151
- data/spec/project_spec.rb +27 -0
- data/spec/rubocop/cli_spec.rb +573 -200
- data/spec/rubocop/config_spec.rb +409 -0
- data/spec/rubocop/config_store_spec.rb +66 -0
- data/spec/rubocop/cops/access_control_spec.rb +129 -0
- data/spec/rubocop/cops/alias_spec.rb +39 -0
- data/spec/rubocop/cops/align_parameters_spec.rb +66 -70
- data/spec/rubocop/cops/and_or_spec.rb +37 -0
- data/spec/rubocop/cops/ascii_comments_spec.rb +26 -0
- data/spec/rubocop/cops/ascii_identifiers_spec.rb +26 -0
- data/spec/rubocop/cops/avoid_class_vars_spec.rb +25 -0
- data/spec/rubocop/cops/avoid_for_spec.rb +35 -0
- data/spec/rubocop/cops/avoid_global_vars_spec.rb +32 -0
- data/spec/rubocop/cops/avoid_perl_backrefs_spec.rb +18 -0
- data/spec/rubocop/cops/avoid_perlisms_spec.rb +44 -0
- data/spec/rubocop/cops/block_comments_spec.rb +25 -0
- data/spec/rubocop/cops/blocks_spec.rb +33 -0
- data/spec/rubocop/cops/{indentation_spec.rb → case_indentation_spec.rb} +7 -7
- data/spec/rubocop/cops/class_and_module_camel_case_spec.rb +15 -5
- data/spec/rubocop/cops/class_methods_spec.rb +49 -0
- data/spec/rubocop/cops/collection_methods_spec.rb +9 -4
- data/spec/rubocop/cops/colon_method_call_spec.rb +53 -0
- data/spec/rubocop/cops/constant_name_spec.rb +42 -0
- data/spec/rubocop/cops/def_with_parentheses_spec.rb +13 -8
- data/spec/rubocop/cops/def_without_parentheses_spec.rb +11 -5
- data/spec/rubocop/cops/empty_line_between_defs_spec.rb +83 -0
- data/spec/rubocop/cops/empty_lines_spec.rb +14 -59
- data/spec/rubocop/cops/empty_literal_spec.rb +90 -0
- data/spec/rubocop/cops/encoding_spec.rb +11 -11
- data/spec/rubocop/cops/end_of_line_spec.rb +2 -2
- data/spec/rubocop/cops/ensure_return_spec.rb +35 -0
- data/spec/rubocop/cops/eval_spec.rb +39 -0
- data/spec/rubocop/cops/favor_join_spec.rb +35 -0
- data/spec/rubocop/cops/favor_modifier_spec.rb +16 -14
- data/spec/rubocop/cops/favor_percent_r_spec.rb +29 -0
- data/spec/rubocop/cops/favor_sprintf_spec.rb +51 -0
- data/spec/rubocop/cops/favor_unless_over_negated_if_spec.rb +4 -4
- data/spec/rubocop/cops/favor_until_over_negated_while_spec.rb +3 -3
- data/spec/rubocop/cops/handle_exceptions_spec.rb +34 -0
- data/spec/rubocop/cops/hash_syntax_spec.rb +11 -6
- data/spec/rubocop/cops/if_with_semicolon_spec.rb +7 -1
- data/spec/rubocop/cops/leading_comment_space_spec.rb +54 -0
- data/spec/rubocop/cops/line_continuation_spec.rb +24 -0
- data/spec/rubocop/cops/line_length_spec.rb +3 -2
- data/spec/rubocop/cops/loop_spec.rb +31 -0
- data/spec/rubocop/cops/method_and_variable_snake_case_spec.rb +55 -9
- data/spec/rubocop/cops/method_length_spec.rb +147 -0
- data/spec/rubocop/cops/multiline_if_then_spec.rb +15 -15
- data/spec/rubocop/cops/new_lambda_literal_spec.rb +5 -6
- data/spec/rubocop/cops/not_spec.rb +31 -0
- data/spec/rubocop/cops/numeric_literals_spec.rb +13 -13
- data/spec/rubocop/cops/offence_spec.rb +13 -0
- data/spec/rubocop/cops/one_line_conditional_spec.rb +1 -1
- data/spec/rubocop/cops/op_method_spec.rb +78 -0
- data/spec/rubocop/cops/parameter_lists_spec.rb +7 -7
- data/spec/rubocop/cops/parentheses_around_condition_spec.rb +41 -44
- data/spec/rubocop/cops/percent_r_spec.rb +29 -0
- data/spec/rubocop/cops/reduce_arguments_spec.rb +57 -0
- data/spec/rubocop/cops/rescue_exception_spec.rb +125 -0
- data/spec/rubocop/cops/rescue_modifier_spec.rb +37 -0
- data/spec/rubocop/cops/semicolon_spec.rb +88 -0
- data/spec/rubocop/cops/single_line_methods_spec.rb +50 -0
- data/spec/rubocop/cops/space_after_colon_spec.rb +3 -3
- data/spec/rubocop/cops/space_after_comma_spec.rb +14 -2
- data/spec/rubocop/cops/space_after_control_keyword_spec.rb +67 -0
- data/spec/rubocop/cops/space_after_semicolon_spec.rb +6 -1
- data/spec/rubocop/cops/space_around_braces_spec.rb +18 -3
- data/spec/rubocop/cops/space_around_equals_in_default_parameter_spec.rb +12 -2
- data/spec/rubocop/cops/space_around_operators_spec.rb +88 -26
- data/spec/rubocop/cops/space_inside_brackets_spec.rb +13 -7
- data/spec/rubocop/cops/space_inside_hash_literal_braces_spec.rb +79 -0
- data/spec/rubocop/cops/space_inside_parens_spec.rb +7 -3
- data/spec/rubocop/cops/string_literals_spec.rb +21 -6
- data/spec/rubocop/cops/symbol_array_spec.rb +41 -0
- data/spec/rubocop/cops/symbol_name_spec.rb +119 -0
- data/spec/rubocop/cops/syntax_spec.rb +28 -5
- data/spec/rubocop/cops/tab_spec.rb +2 -2
- data/spec/rubocop/cops/ternary_operator_spec.rb +13 -17
- data/spec/rubocop/cops/trailing_whitespace_spec.rb +3 -3
- data/spec/rubocop/cops/trivial_accessors_spec.rb +329 -0
- data/spec/rubocop/cops/unless_else_spec.rb +8 -8
- data/spec/rubocop/cops/variable_interpolation_spec.rb +49 -0
- data/spec/rubocop/cops/when_then_spec.rb +14 -14
- data/spec/rubocop/cops/word_array_spec.rb +47 -0
- data/spec/spec_helper.rb +30 -9
- data/spec/support/file_helper.rb +21 -0
- data/spec/support/isolated_environment.rb +27 -0
- metadata +235 -76
- data/.document +0 -5
- data/Gemfile.lock +0 -41
- data/VERSION +0 -1
- data/lib/rubocop/cop/ampersands_pipes_vs_and_or.rb +0 -25
- data/lib/rubocop/cop/grammar.rb +0 -135
- data/lib/rubocop/cop/indentation.rb +0 -44
- data/spec/rubocop/cops/ampersands_pipes_vs_and_or_spec.rb +0 -57
- data/spec/rubocop/cops/grammar_spec.rb +0 -71
- data/spec/rubocop/cops/multiline_blocks_spec.rb +0 -24
- data/spec/rubocop/cops/single_line_blocks_spec.rb +0 -22
data/lib/rubocop/cop/grammar.rb
DELETED
@@ -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
|