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
@@ -0,0 +1,147 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
module Rubocop
|
6
|
+
module Cop
|
7
|
+
describe MethodLength do
|
8
|
+
let(:method_length) { MethodLength.new }
|
9
|
+
before { MethodLength.config = { 'Max' => 5, 'CountComments' => false } }
|
10
|
+
|
11
|
+
it 'rejects a method with more than 5 lines' do
|
12
|
+
inspect_source(method_length, ['def m()',
|
13
|
+
' a = 1',
|
14
|
+
' a = 2',
|
15
|
+
' a = 3',
|
16
|
+
' a = 4',
|
17
|
+
' a = 5',
|
18
|
+
' a = 6',
|
19
|
+
'end'])
|
20
|
+
expect(method_length.offences.size).to eq(1)
|
21
|
+
expect(method_length.offences.map(&:line_number).sort).to eq([1])
|
22
|
+
end
|
23
|
+
|
24
|
+
it 'accepts a method with less than 5 lines' do
|
25
|
+
inspect_source(method_length, ['def m()',
|
26
|
+
' a = 1',
|
27
|
+
' a = 2',
|
28
|
+
' a = 3',
|
29
|
+
' a = 4',
|
30
|
+
'end'])
|
31
|
+
expect(method_length.offences).to be_empty
|
32
|
+
end
|
33
|
+
|
34
|
+
it 'does not count blank lines' do
|
35
|
+
inspect_source(method_length, ['def m()',
|
36
|
+
' a = 1',
|
37
|
+
' a = 2',
|
38
|
+
' a = 3',
|
39
|
+
' a = 4',
|
40
|
+
'',
|
41
|
+
'',
|
42
|
+
' a = 7',
|
43
|
+
'end'])
|
44
|
+
expect(method_length.offences).to be_empty
|
45
|
+
end
|
46
|
+
|
47
|
+
it 'accepts empty methods' do
|
48
|
+
inspect_source(method_length, ['def m()',
|
49
|
+
'end'])
|
50
|
+
expect(method_length.offences).to be_empty
|
51
|
+
end
|
52
|
+
|
53
|
+
it 'is not fooled by one-liner methods, syntax #1' do
|
54
|
+
inspect_source(method_length, ['def one_line; 10 end',
|
55
|
+
'def self.m()',
|
56
|
+
' a = 1',
|
57
|
+
' a = 2',
|
58
|
+
' a = 4',
|
59
|
+
' a = 5',
|
60
|
+
' a = 6',
|
61
|
+
'end'])
|
62
|
+
expect(method_length.offences).to be_empty
|
63
|
+
end
|
64
|
+
|
65
|
+
it 'is not fooled by one-liner methods, syntax #2' do
|
66
|
+
inspect_source(method_length, ['def one_line(test) 10 end',
|
67
|
+
'def self.m()',
|
68
|
+
' a = 1',
|
69
|
+
' a = 2',
|
70
|
+
' a = 4',
|
71
|
+
' a = 5',
|
72
|
+
' a = 6',
|
73
|
+
'end'])
|
74
|
+
expect(method_length.offences).to be_empty
|
75
|
+
end
|
76
|
+
|
77
|
+
it 'checks class methods, syntax #1' do
|
78
|
+
inspect_source(method_length, ['def self.m()',
|
79
|
+
' a = 1',
|
80
|
+
' a = 2',
|
81
|
+
' a = 3',
|
82
|
+
' a = 4',
|
83
|
+
' a = 5',
|
84
|
+
' a = 6',
|
85
|
+
'end'])
|
86
|
+
expect(method_length.offences.size).to eq(1)
|
87
|
+
expect(method_length.offences.map(&:line_number).sort).to eq([1])
|
88
|
+
end
|
89
|
+
|
90
|
+
it 'checks class methods, syntax #2' do
|
91
|
+
inspect_source(method_length, ['class K',
|
92
|
+
' class << self',
|
93
|
+
' def m()',
|
94
|
+
' a = 1',
|
95
|
+
' a = 2',
|
96
|
+
' a = 3',
|
97
|
+
' a = 4',
|
98
|
+
' a = 5',
|
99
|
+
' a = 6',
|
100
|
+
' end',
|
101
|
+
' end',
|
102
|
+
'end'])
|
103
|
+
expect(method_length.offences.size).to eq(1)
|
104
|
+
expect(method_length.offences.map(&:line_number).sort).to eq([3])
|
105
|
+
end
|
106
|
+
|
107
|
+
it 'properly counts lines when method ends with block' do
|
108
|
+
inspect_source(method_length, ['def m()',
|
109
|
+
' something do',
|
110
|
+
' a = 2',
|
111
|
+
' a = 3',
|
112
|
+
' a = 4',
|
113
|
+
' a = 5',
|
114
|
+
' end',
|
115
|
+
'end'])
|
116
|
+
expect(method_length.offences.size).to eq(1)
|
117
|
+
expect(method_length.offences.map(&:line_number).sort).to eq([1])
|
118
|
+
end
|
119
|
+
|
120
|
+
it 'does not count commented lines by default' do
|
121
|
+
inspect_source(method_length, ['def m()',
|
122
|
+
' a = 1',
|
123
|
+
' #a = 2',
|
124
|
+
' a = 3',
|
125
|
+
' #a = 4',
|
126
|
+
' a = 5',
|
127
|
+
' a = 6',
|
128
|
+
'end'])
|
129
|
+
expect(method_length.offences).to be_empty
|
130
|
+
end
|
131
|
+
|
132
|
+
it 'has the option of counting commented lines' do
|
133
|
+
MethodLength.config['CountComments'] = true
|
134
|
+
inspect_source(method_length, ['def m()',
|
135
|
+
' a = 1',
|
136
|
+
' #a = 2',
|
137
|
+
' a = 3',
|
138
|
+
' #a = 4',
|
139
|
+
' a = 5',
|
140
|
+
' a = 6',
|
141
|
+
'end'])
|
142
|
+
expect(method_length.offences.size).to eq(1)
|
143
|
+
expect(method_length.offences.map(&:line_number).sort).to eq([1])
|
144
|
+
end
|
145
|
+
end
|
146
|
+
end
|
147
|
+
end
|
@@ -10,25 +10,25 @@ module Rubocop
|
|
10
10
|
# if
|
11
11
|
|
12
12
|
it 'registers an offence for then in multiline if' do
|
13
|
-
inspect_source(mit,
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
13
|
+
inspect_source(mit, ['if cond then',
|
14
|
+
'end',
|
15
|
+
"if cond then\t",
|
16
|
+
'end',
|
17
|
+
'if cond then ',
|
18
|
+
'end',
|
19
|
+
'if cond then # bad',
|
20
|
+
'end'])
|
21
21
|
expect(mit.offences.map(&:line_number)).to eq([1, 3, 5, 7])
|
22
22
|
end
|
23
23
|
|
24
24
|
it 'accepts multiline if without then' do
|
25
|
-
inspect_source(mit,
|
26
|
-
|
25
|
+
inspect_source(mit, ['if cond',
|
26
|
+
'end'])
|
27
27
|
expect(mit.offences.map(&:message)).to be_empty
|
28
28
|
end
|
29
29
|
|
30
30
|
it 'accepts table style if/then/elsif/ends' do
|
31
|
-
inspect_source(mit,
|
31
|
+
inspect_source(mit,
|
32
32
|
['if @io == $stdout then str << "$stdout"',
|
33
33
|
'elsif @io == $stdin then str << "$stdin"',
|
34
34
|
'elsif @io == $stderr then str << "$stderr"',
|
@@ -40,15 +40,15 @@ module Rubocop
|
|
40
40
|
# unless
|
41
41
|
|
42
42
|
it 'registers an offence for then in multiline unless' do
|
43
|
-
inspect_source(mit,
|
44
|
-
|
43
|
+
inspect_source(mit, ['unless cond then',
|
44
|
+
'end'])
|
45
45
|
expect(mit.offences.map(&:message)).to eq(
|
46
46
|
['Never use then for multi-line if/unless.'])
|
47
47
|
end
|
48
48
|
|
49
49
|
it 'accepts multiline unless without then' do
|
50
|
-
inspect_source(mit,
|
51
|
-
|
50
|
+
inspect_source(mit, ['unless cond',
|
51
|
+
'end'])
|
52
52
|
expect(mit.offences.map(&:message)).to be_empty
|
53
53
|
end
|
54
54
|
end
|
@@ -8,15 +8,14 @@ module Rubocop
|
|
8
8
|
let(:lambda_literal) { NewLambdaLiteral.new }
|
9
9
|
|
10
10
|
it 'registers an offence for an old lambda call' do
|
11
|
-
inspect_source(lambda_literal,
|
12
|
-
expect(lambda_literal.offences.
|
13
|
-
['The new lambda literal syntax is preferred in Ruby 1.9.'])
|
11
|
+
inspect_source(lambda_literal, ['f = lambda { |x| x }'])
|
12
|
+
expect(lambda_literal.offences.size).to eq(1)
|
14
13
|
end
|
15
14
|
|
16
15
|
it 'accepts the new lambda literal' do
|
17
|
-
inspect_source(lambda_literal,
|
18
|
-
|
19
|
-
expect(lambda_literal.offences
|
16
|
+
inspect_source(lambda_literal, ['lambda = ->(x) { x }',
|
17
|
+
'lambda.(1)'])
|
18
|
+
expect(lambda_literal.offences).to be_empty
|
20
19
|
end
|
21
20
|
end
|
22
21
|
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
module Rubocop
|
6
|
+
module Cop
|
7
|
+
describe Not do
|
8
|
+
let(:a) { Not.new }
|
9
|
+
|
10
|
+
it 'registers an offence for not' do
|
11
|
+
inspect_source(a,
|
12
|
+
['not test'])
|
13
|
+
expect(a.offences.size).to eq(1)
|
14
|
+
expect(a.offences.map(&:message))
|
15
|
+
.to eq([Not::MSG])
|
16
|
+
end
|
17
|
+
|
18
|
+
it 'does not register an offence for !' do
|
19
|
+
inspect_source(a,
|
20
|
+
['!test'])
|
21
|
+
expect(a.offences).to be_empty
|
22
|
+
end
|
23
|
+
|
24
|
+
it 'does not register an offence for :not' do
|
25
|
+
inspect_source(a,
|
26
|
+
['[:not, :if, :else]'])
|
27
|
+
expect(a.offences).to be_empty
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -8,40 +8,40 @@ module Rubocop
|
|
8
8
|
let(:num) { NumericLiterals.new }
|
9
9
|
|
10
10
|
it 'registers an offence for a long integer without underscores' do
|
11
|
-
inspect_source(num,
|
11
|
+
inspect_source(num, ['a = 123456'])
|
12
12
|
expect(num.offences.map(&:message)).to eq(
|
13
13
|
['Add underscores to large numeric literals to improve their ' +
|
14
14
|
'readability.'])
|
15
15
|
end
|
16
16
|
|
17
17
|
it 'registers an offence for an integer with not enough underscores' do
|
18
|
-
inspect_source(num,
|
18
|
+
inspect_source(num, ['a = 123456_789000'])
|
19
19
|
expect(num.offences.map(&:message)).to eq(
|
20
20
|
['Add underscores to large numeric literals to improve their ' +
|
21
21
|
'readability.'])
|
22
22
|
end
|
23
23
|
|
24
|
-
it 'registers an offence for a long float without underscores' do
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
end
|
24
|
+
# it 'registers an offence for a long float without underscores' do
|
25
|
+
# inspect_source(num, ['a = 1.234567'])
|
26
|
+
# expect(num.offences.map(&:message)).to eq(
|
27
|
+
# ['Add underscores to large numeric literals to improve their ' +
|
28
|
+
# 'readability.'])
|
29
|
+
# end
|
30
30
|
|
31
31
|
it 'accepts long numbers with underscore' do
|
32
|
-
inspect_source(num,
|
33
|
-
|
32
|
+
inspect_source(num, ['a = 123_456',
|
33
|
+
'b = 1.234_56'])
|
34
34
|
expect(num.offences.map(&:message)).to be_empty
|
35
35
|
end
|
36
36
|
|
37
37
|
it 'accepts a short integer without underscore' do
|
38
|
-
inspect_source(num,
|
38
|
+
inspect_source(num, ['a = 123'])
|
39
39
|
expect(num.offences.map(&:message)).to be_empty
|
40
40
|
end
|
41
41
|
|
42
42
|
it 'accepts short numbers without underscore' do
|
43
|
-
inspect_source(num,
|
44
|
-
|
43
|
+
inspect_source(num, ['a = 123',
|
44
|
+
'b = 123.456'])
|
45
45
|
expect(num.offences.map(&:message)).to be_empty
|
46
46
|
end
|
47
47
|
end
|
@@ -18,6 +18,19 @@ module Rubocop
|
|
18
18
|
|
19
19
|
expect(offence.to_s).to eq('C: 1: message')
|
20
20
|
end
|
21
|
+
|
22
|
+
it 'does not blow up if a message contains %' do
|
23
|
+
offence = Offence.new(:convention, 1, 'message % test')
|
24
|
+
|
25
|
+
expect(offence.to_s).to eq('C: 1: message % test')
|
26
|
+
end
|
27
|
+
|
28
|
+
it 'redefines == to compare offences based on their contents' do
|
29
|
+
o1 = Offence.new(:test, 1, 'message')
|
30
|
+
o2 = Offence.new(:test, 1, 'message')
|
31
|
+
|
32
|
+
expect(o1 == o2).to be_true
|
33
|
+
end
|
21
34
|
end
|
22
35
|
end
|
23
36
|
end
|
@@ -8,7 +8,7 @@ module Rubocop
|
|
8
8
|
let(:olc) { OneLineConditional.new }
|
9
9
|
|
10
10
|
it 'registers an offence for one line if/then/end' do
|
11
|
-
inspect_source(olc,
|
11
|
+
inspect_source(olc, ['if cond then run else dont end'])
|
12
12
|
expect(olc.offences.map(&:message)).to eq([olc.error_message])
|
13
13
|
end
|
14
14
|
end
|
@@ -0,0 +1,78 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
module Rubocop
|
6
|
+
module Cop
|
7
|
+
describe OpMethod do
|
8
|
+
let(:om) { OpMethod.new }
|
9
|
+
|
10
|
+
it 'registers an offence for arg not named other' do
|
11
|
+
inspect_source(om,
|
12
|
+
['def +(another)',
|
13
|
+
' another',
|
14
|
+
'end'])
|
15
|
+
expect(om.offences.size).to eq(1)
|
16
|
+
expect(om.offences.map(&:message))
|
17
|
+
.to eq([sprintf(OpMethod::MSG, '+')])
|
18
|
+
end
|
19
|
+
|
20
|
+
it 'works properly even if the argument is not surrounded with braces' do
|
21
|
+
inspect_source(om,
|
22
|
+
['def + another',
|
23
|
+
' another',
|
24
|
+
'end'])
|
25
|
+
expect(om.offences.size).to eq(1)
|
26
|
+
expect(om.offences.map(&:message))
|
27
|
+
.to eq([sprintf(OpMethod::MSG, '+')])
|
28
|
+
end
|
29
|
+
|
30
|
+
it 'does not register an offence for arg named other' do
|
31
|
+
inspect_source(om,
|
32
|
+
['def +(other)',
|
33
|
+
' other',
|
34
|
+
'end'])
|
35
|
+
expect(om.offences).to be_empty
|
36
|
+
end
|
37
|
+
|
38
|
+
it 'does not register an offence for []' do
|
39
|
+
inspect_source(om,
|
40
|
+
['def [](index)',
|
41
|
+
' other',
|
42
|
+
'end'])
|
43
|
+
expect(om.offences).to be_empty
|
44
|
+
end
|
45
|
+
|
46
|
+
it 'does not register an offence for []=' do
|
47
|
+
inspect_source(om,
|
48
|
+
['def []=(index, value)',
|
49
|
+
' other',
|
50
|
+
'end'])
|
51
|
+
expect(om.offences).to be_empty
|
52
|
+
end
|
53
|
+
|
54
|
+
it 'does not register an offence for <<' do
|
55
|
+
inspect_source(om,
|
56
|
+
['def <<(cop)',
|
57
|
+
' other',
|
58
|
+
'end'])
|
59
|
+
expect(om.offences).to be_empty
|
60
|
+
end
|
61
|
+
|
62
|
+
it 'does not register an offence for non binary operators' do
|
63
|
+
inspect_source(om,
|
64
|
+
['def -@', # Unary minus
|
65
|
+
'end',
|
66
|
+
'',
|
67
|
+
# This + is not a unary operator. It can only be
|
68
|
+
# called with dot notation.
|
69
|
+
'def +',
|
70
|
+
'end',
|
71
|
+
'',
|
72
|
+
'def *(a, b)', # Quite strange, but legal ruby.
|
73
|
+
'end'])
|
74
|
+
expect(om.offences).to be_empty
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
@@ -8,16 +8,16 @@ module Rubocop
|
|
8
8
|
let(:list) { ParameterLists.new }
|
9
9
|
|
10
10
|
it 'registers an offence for a method def with 5 parameters' do
|
11
|
-
inspect_source(list,
|
12
|
-
|
13
|
-
expect(list.
|
14
|
-
['Avoid parameter lists longer than
|
11
|
+
inspect_source(list, ['def meth(a, b, c, d, e)',
|
12
|
+
'end'])
|
13
|
+
expect(list.messages).to eq(
|
14
|
+
['Avoid parameter lists longer than 4 parameters.'])
|
15
15
|
end
|
16
16
|
|
17
17
|
it 'accepts a method def with 4 parameters' do
|
18
|
-
inspect_source(list,
|
19
|
-
|
20
|
-
expect(list.offences
|
18
|
+
inspect_source(list, ['def meth(a, b, c, d)',
|
19
|
+
'end'])
|
20
|
+
expect(list.offences).to be_empty
|
21
21
|
end
|
22
22
|
end
|
23
23
|
end
|
@@ -8,57 +8,54 @@ module Rubocop
|
|
8
8
|
let(:pac) { ParenthesesAroundCondition.new }
|
9
9
|
|
10
10
|
it 'registers an offence for parentheses around condition' do
|
11
|
-
inspect_source(pac,
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
expect(pac.offences.
|
26
|
-
["Don't use parentheses around the condition of an if/unless/" +
|
27
|
-
'while/until, unless the condition contains an assignment.'] * 9)
|
11
|
+
inspect_source(pac, ['if (x > 10)',
|
12
|
+
'elsif (x < 3)',
|
13
|
+
'end',
|
14
|
+
'unless (x > 10)',
|
15
|
+
'end',
|
16
|
+
'while (x > 10)',
|
17
|
+
'end',
|
18
|
+
'until (x > 10)',
|
19
|
+
'end',
|
20
|
+
'x += 1 if (x < 10)',
|
21
|
+
'x += 1 unless (x < 10)',
|
22
|
+
'x += 1 while (x < 10)',
|
23
|
+
'x += 1 until (x < 10)',
|
24
|
+
])
|
25
|
+
expect(pac.offences.size).to eq(9)
|
28
26
|
end
|
29
27
|
|
30
28
|
it 'accepts condition without parentheses' do
|
31
|
-
inspect_source(pac,
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
expect(pac.offences
|
29
|
+
inspect_source(pac, ['if x > 10',
|
30
|
+
'end',
|
31
|
+
'unless x > 10',
|
32
|
+
'end',
|
33
|
+
'while x > 10',
|
34
|
+
'end',
|
35
|
+
'until x > 10',
|
36
|
+
'end',
|
37
|
+
'x += 1 if x < 10',
|
38
|
+
'x += 1 unless x < 10',
|
39
|
+
'x += 1 while x < 10',
|
40
|
+
'x += 1 until x < 10',
|
41
|
+
])
|
42
|
+
expect(pac.offences).to be_empty
|
45
43
|
end
|
46
44
|
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
inspect_source(pac, 'file.rb', ['if (@lex_state != EXPR_BEG &&',
|
51
|
-
' @lex_state != EXPR_FNAME &&',
|
52
|
-
' trans[1])',
|
53
|
-
'end'])
|
54
|
-
expect(pac.offences.map(&:message)).to be_empty
|
45
|
+
it 'is not confused by leading brace in subexpression' do
|
46
|
+
inspect_source(pac, ['(a > b) && other ? one : two'])
|
47
|
+
expect(pac.offences).to be_empty
|
55
48
|
end
|
56
49
|
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
50
|
+
# Parentheses are sometimes used to help the editor make nice
|
51
|
+
# indentation of conditions spanning several lines.
|
52
|
+
# it 'accepts parentheses around multiline conditions' do
|
53
|
+
# inspect_source(pac, ['if (@lex_state != EXPR_BEG &&',
|
54
|
+
# ' @lex_state != EXPR_FNAME &&',
|
55
|
+
# ' trans[1])',
|
56
|
+
# 'end'])
|
57
|
+
# expect(pac.offences.map(&:message)).to be_empty
|
58
|
+
# end
|
62
59
|
end
|
63
60
|
end
|
64
61
|
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
module Rubocop
|
6
|
+
module Cop
|
7
|
+
describe PercentR do
|
8
|
+
let(:apr) { PercentR.new }
|
9
|
+
|
10
|
+
it 'registers an offence for %r with zero or one slash in regexp' do
|
11
|
+
inspect_source(apr, ['x =~ %r(/home)',
|
12
|
+
'y =~ %r(etc)'])
|
13
|
+
expect(apr.offences.map(&:message))
|
14
|
+
.to eq([PercentR::MSG] * 2)
|
15
|
+
end
|
16
|
+
|
17
|
+
it 'accepts %r with at least two slashes in regexp' do
|
18
|
+
inspect_source(apr, ['x =~ %r(/home/)',
|
19
|
+
'y =~ %r(/////)'])
|
20
|
+
expect(apr.offences.map(&:message)).to be_empty
|
21
|
+
end
|
22
|
+
|
23
|
+
it 'accepts slash delimiters for regexp' do
|
24
|
+
inspect_source(apr, ['x =~ /\/home/'])
|
25
|
+
expect(apr.offences.map(&:message)).to be_empty
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
module Rubocop
|
6
|
+
module Cop
|
7
|
+
describe ReduceArguments do
|
8
|
+
let(:reduce_arguments) { ReduceArguments.new }
|
9
|
+
|
10
|
+
it 'find wrong argument names in calls with different syntax' do
|
11
|
+
inspect_source(reduce_arguments,
|
12
|
+
['def m',
|
13
|
+
' [0, 1].reduce { |c, d| c + d }',
|
14
|
+
' [0, 1].reduce{ |c, d| c + d }',
|
15
|
+
' [0, 1].reduce(5) { |c, d| c + d }',
|
16
|
+
' [0, 1].reduce(5){ |c, d| c + d }',
|
17
|
+
' [0, 1].reduce (5) { |c, d| c + d }',
|
18
|
+
' [0, 1].reduce(5) { |c, d| c + d }',
|
19
|
+
'end'])
|
20
|
+
expect(reduce_arguments.offences.size).to eq(6)
|
21
|
+
expect(reduce_arguments.offences
|
22
|
+
.map(&:line_number).sort).to eq((2..7).to_a)
|
23
|
+
end
|
24
|
+
|
25
|
+
it 'allows calls with proper argument names' do
|
26
|
+
inspect_source(reduce_arguments,
|
27
|
+
['def m',
|
28
|
+
' [0, 1].reduce { |a, e| a + e }',
|
29
|
+
' [0, 1].reduce{ |a, e| a + e }',
|
30
|
+
' [0, 1].reduce(5) { |a, e| a + e }',
|
31
|
+
' [0, 1].reduce(5){ |a, e| a + e }',
|
32
|
+
' [0, 1].reduce (5) { |a, e| a + e }',
|
33
|
+
' [0, 1].reduce(5) { |a, e| a + e }',
|
34
|
+
'end'])
|
35
|
+
expect(reduce_arguments.offences).to be_empty
|
36
|
+
end
|
37
|
+
|
38
|
+
it 'ignores do..end blocks' do
|
39
|
+
inspect_source(reduce_arguments,
|
40
|
+
['def m',
|
41
|
+
' [0, 1].reduce do |c, d|',
|
42
|
+
' c + d',
|
43
|
+
' end',
|
44
|
+
'end'])
|
45
|
+
expect(reduce_arguments.offences).to be_empty
|
46
|
+
end
|
47
|
+
|
48
|
+
it 'ignores :reduce symbols' do
|
49
|
+
inspect_source(reduce_arguments,
|
50
|
+
['def m',
|
51
|
+
' call_method(:reduce) { |a, b| a + b}',
|
52
|
+
'end'])
|
53
|
+
expect(reduce_arguments.offences).to be_empty
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|