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,125 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
module Rubocop
|
6
|
+
module Cop
|
7
|
+
describe RescueException do
|
8
|
+
let(:re) { RescueException.new }
|
9
|
+
|
10
|
+
it 'registers an offence for rescue from Exception' do
|
11
|
+
inspect_source(re,
|
12
|
+
['begin',
|
13
|
+
' something',
|
14
|
+
'rescue Exception',
|
15
|
+
' #do nothing',
|
16
|
+
'end'])
|
17
|
+
expect(re.offences.size).to eq(1)
|
18
|
+
expect(re.offences.map(&:message))
|
19
|
+
.to eq([RescueException::MSG])
|
20
|
+
end
|
21
|
+
|
22
|
+
it 'registers an offence for rescue with ::Exception' do
|
23
|
+
inspect_source(re,
|
24
|
+
['begin',
|
25
|
+
' something',
|
26
|
+
'rescue ::Exception',
|
27
|
+
' #do nothing',
|
28
|
+
'end'])
|
29
|
+
expect(re.offences.size).to eq(1)
|
30
|
+
expect(re.offences.map(&:message))
|
31
|
+
.to eq([RescueException::MSG])
|
32
|
+
end
|
33
|
+
|
34
|
+
it 'registers an offence for rescue with StandardError, Exception' do
|
35
|
+
inspect_source(re,
|
36
|
+
['begin',
|
37
|
+
' something',
|
38
|
+
'rescue StandardError, Exception',
|
39
|
+
' #do nothing',
|
40
|
+
'end'])
|
41
|
+
expect(re.offences.size).to eq(1)
|
42
|
+
expect(re.offences.map(&:message))
|
43
|
+
.to eq([RescueException::MSG])
|
44
|
+
end
|
45
|
+
|
46
|
+
it 'registers an offence for rescue with Exception => e' do
|
47
|
+
inspect_source(re,
|
48
|
+
['begin',
|
49
|
+
' something',
|
50
|
+
'rescue Exception => e',
|
51
|
+
' #do nothing',
|
52
|
+
'end'])
|
53
|
+
expect(re.offences.size).to eq(1)
|
54
|
+
expect(re.offences.map(&:message))
|
55
|
+
.to eq([RescueException::MSG])
|
56
|
+
end
|
57
|
+
|
58
|
+
it 'does not register an offence for rescue with no class' do
|
59
|
+
inspect_source(re,
|
60
|
+
['begin',
|
61
|
+
' something',
|
62
|
+
' return',
|
63
|
+
'rescue',
|
64
|
+
' file.close',
|
65
|
+
'end'])
|
66
|
+
expect(re.offences).to be_empty
|
67
|
+
end
|
68
|
+
|
69
|
+
it 'does not register an offence for rescue with no class and => e' do
|
70
|
+
inspect_source(re,
|
71
|
+
['begin',
|
72
|
+
' something',
|
73
|
+
' return',
|
74
|
+
'rescue => e',
|
75
|
+
' file.close',
|
76
|
+
'end'])
|
77
|
+
expect(re.offences).to be_empty
|
78
|
+
end
|
79
|
+
|
80
|
+
it 'does not register an offence for rescue with other class' do
|
81
|
+
inspect_source(re,
|
82
|
+
['begin',
|
83
|
+
' something',
|
84
|
+
' return',
|
85
|
+
'rescue ArgumentError => e',
|
86
|
+
' file.close',
|
87
|
+
'end'])
|
88
|
+
expect(re.offences).to be_empty
|
89
|
+
end
|
90
|
+
|
91
|
+
it 'does not register an offence for rescue with other classes' do
|
92
|
+
inspect_source(re,
|
93
|
+
['begin',
|
94
|
+
' something',
|
95
|
+
' return',
|
96
|
+
'rescue EOFError, ArgumentError => e',
|
97
|
+
' file.close',
|
98
|
+
'end'])
|
99
|
+
expect(re.offences).to be_empty
|
100
|
+
end
|
101
|
+
|
102
|
+
it 'does not register an offence for rescue with a module prefix' do
|
103
|
+
inspect_source(re,
|
104
|
+
['begin',
|
105
|
+
' something',
|
106
|
+
' return',
|
107
|
+
'rescue Test::Exception => e',
|
108
|
+
' file.close',
|
109
|
+
'end'])
|
110
|
+
expect(re.offences).to be_empty
|
111
|
+
end
|
112
|
+
|
113
|
+
it 'does not crash when the splat operator is used in a rescue' do
|
114
|
+
inspect_source(re,
|
115
|
+
['ERRORS = [Exception]',
|
116
|
+
'begin',
|
117
|
+
' a = 3 / 0',
|
118
|
+
'rescue *ERRORS',
|
119
|
+
' puts e',
|
120
|
+
'end'])
|
121
|
+
expect(re.offences).to be_empty
|
122
|
+
end
|
123
|
+
end
|
124
|
+
end
|
125
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
module Rubocop
|
6
|
+
module Cop
|
7
|
+
describe RescueModifier do
|
8
|
+
let(:rm) { RescueModifier.new }
|
9
|
+
|
10
|
+
it 'registers an offence for modifier rescue' do
|
11
|
+
inspect_source(rm,
|
12
|
+
['method rescue handle'])
|
13
|
+
expect(rm.offences.size).to eq(1)
|
14
|
+
expect(rm.offences.map(&:message))
|
15
|
+
.to eq([RescueModifier::MSG])
|
16
|
+
end
|
17
|
+
|
18
|
+
it 'handles more complex expression with modifier rescue' do
|
19
|
+
inspect_source(rm,
|
20
|
+
['method1 or method2 rescue handle'])
|
21
|
+
expect(rm.offences.size).to eq(1)
|
22
|
+
expect(rm.offences.map(&:message))
|
23
|
+
.to eq([RescueModifier::MSG])
|
24
|
+
end
|
25
|
+
|
26
|
+
it 'does not register an offence for normal rescue' do
|
27
|
+
inspect_source(rm,
|
28
|
+
['begin',
|
29
|
+
' test',
|
30
|
+
'rescue',
|
31
|
+
' handle',
|
32
|
+
'end'])
|
33
|
+
expect(rm.offences).to be_empty
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,88 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
module Rubocop
|
6
|
+
module Cop
|
7
|
+
describe Semicolon do
|
8
|
+
let(:s) { Semicolon.new }
|
9
|
+
before do
|
10
|
+
Semicolon.config = {
|
11
|
+
'AllowAfterParameterListInOneLineMethods' => false,
|
12
|
+
'AllowBeforeEndInOneLineMethods' => true
|
13
|
+
}
|
14
|
+
end
|
15
|
+
|
16
|
+
it 'registers an offence for a single expression' do
|
17
|
+
inspect_source(s,
|
18
|
+
['puts "this is a test";'])
|
19
|
+
expect(s.offences.size).to eq(1)
|
20
|
+
expect(s.offences.map(&:message)).to eq([Semicolon::MSG])
|
21
|
+
end
|
22
|
+
|
23
|
+
it 'registers an offence for several expressions' do
|
24
|
+
inspect_source(s,
|
25
|
+
['puts "this is a test"; puts "So is this"'])
|
26
|
+
expect(s.offences.size).to eq(1)
|
27
|
+
expect(s.offences.map(&:message)).to eq([Semicolon::MSG])
|
28
|
+
end
|
29
|
+
|
30
|
+
it 'registers an offence for one line method with two statements' do
|
31
|
+
inspect_source(s,
|
32
|
+
['def foo(a) x(1); y(2); z(3); end'])
|
33
|
+
expect(s.offences.size).to eq(1)
|
34
|
+
end
|
35
|
+
|
36
|
+
it 'accepts semicolon before end if so configured' do
|
37
|
+
inspect_source(s,
|
38
|
+
['def foo(a) z(3); end'])
|
39
|
+
expect(s.offences).to be_empty
|
40
|
+
end
|
41
|
+
|
42
|
+
it 'accepts semicolon after params if so configured' do
|
43
|
+
inspect_source(s,
|
44
|
+
['def foo(a); z(3) end'])
|
45
|
+
expect(s.offences).to be_empty
|
46
|
+
end
|
47
|
+
|
48
|
+
it 'accepts one line method definitions' do
|
49
|
+
inspect_source(s,
|
50
|
+
['def foo1; x(3) end',
|
51
|
+
'def initialize(*_); end',
|
52
|
+
'def foo2() x(3); end',
|
53
|
+
'def foo3; x(3); end'])
|
54
|
+
expect(s.offences).to be_empty
|
55
|
+
end
|
56
|
+
|
57
|
+
it 'accepts one line empty class definitions' do
|
58
|
+
inspect_source(s,
|
59
|
+
['# Prefer a single-line format for class ...',
|
60
|
+
'class Foo < Exception; end',
|
61
|
+
'',
|
62
|
+
'class Bar; end'])
|
63
|
+
expect(s.offences).to be_empty
|
64
|
+
end
|
65
|
+
|
66
|
+
it 'accepts one line empty method definitions' do
|
67
|
+
inspect_source(s,
|
68
|
+
['# One exception to the rule are empty-body methods',
|
69
|
+
'def no_op; end',
|
70
|
+
'',
|
71
|
+
'def foo; end'])
|
72
|
+
expect(s.offences).to be_empty
|
73
|
+
end
|
74
|
+
|
75
|
+
it 'accepts one line empty module definitions' do
|
76
|
+
inspect_source(s,
|
77
|
+
['module Foo; end'])
|
78
|
+
expect(s.offences).to be_empty
|
79
|
+
end
|
80
|
+
|
81
|
+
it 'registers an offence for semicolon at the end no matter what' do
|
82
|
+
inspect_source(s,
|
83
|
+
['module Foo; end;'])
|
84
|
+
expect(s.offences.size).to eq(1)
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
module Rubocop
|
6
|
+
module Cop
|
7
|
+
describe SingleLineMethods do
|
8
|
+
let(:slm) { SingleLineMethods.new }
|
9
|
+
before { SingleLineMethods.config = { 'AllowIfMethodIsEmpty' => true } }
|
10
|
+
|
11
|
+
it 'registers an offence for a single-line method' do
|
12
|
+
inspect_source(slm,
|
13
|
+
['def some_method; body end',
|
14
|
+
'def link_to(name, url); {:name => name}; end',
|
15
|
+
'def @table.columns; super; end'])
|
16
|
+
expect(slm.offences.map(&:message)).to eq(
|
17
|
+
[SingleLineMethods::MSG] * 3)
|
18
|
+
end
|
19
|
+
|
20
|
+
it 'registers an offence for an empty method if so configured' do
|
21
|
+
SingleLineMethods.config = { 'AllowIfMethodIsEmpty' => false }
|
22
|
+
inspect_source(slm, ['def no_op; end',
|
23
|
+
'def self.resource_class=(klass); end',
|
24
|
+
'def @table.columns; end'])
|
25
|
+
expect(slm.offences.size).to eq(3)
|
26
|
+
end
|
27
|
+
|
28
|
+
it 'accepts a single-line empty method if so configured' do
|
29
|
+
SingleLineMethods.config = { 'AllowIfMethodIsEmpty' => true }
|
30
|
+
inspect_source(slm, ['def no_op; end',
|
31
|
+
'def self.resource_class=(klass); end',
|
32
|
+
'def @table.columns; end'])
|
33
|
+
expect(slm.offences).to be_empty
|
34
|
+
end
|
35
|
+
|
36
|
+
it 'accepts a multi-line method' do
|
37
|
+
inspect_source(slm, ['def some_method',
|
38
|
+
' body',
|
39
|
+
'end'])
|
40
|
+
expect(slm.offences).to be_empty
|
41
|
+
end
|
42
|
+
|
43
|
+
it 'does not crash on an method with a capitalized name' do
|
44
|
+
inspect_source(slm, ['def NoSnakeCase',
|
45
|
+
'end'])
|
46
|
+
expect(slm.offences).to be_empty
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
@@ -8,18 +8,18 @@ module Rubocop
|
|
8
8
|
let(:space) { SpaceAfterColon.new }
|
9
9
|
|
10
10
|
it 'registers an offence for colon without space after it' do
|
11
|
-
inspect_source(space,
|
11
|
+
inspect_source(space, ['x = w ? {a:3}:4'])
|
12
12
|
expect(space.offences.map(&:message)).to eq(
|
13
13
|
['Space missing after colon.'] * 2)
|
14
14
|
end
|
15
15
|
|
16
16
|
it 'allows the colons in symbols' do
|
17
|
-
inspect_source(space,
|
17
|
+
inspect_source(space, ['x = :a'])
|
18
18
|
expect(space.offences.map(&:message)).to be_empty
|
19
19
|
end
|
20
20
|
|
21
21
|
it 'allows colons in strings' do
|
22
|
-
inspect_source(space,
|
22
|
+
inspect_source(space, ["str << ':'"])
|
23
23
|
expect(space.offences.map(&:message)).to be_empty
|
24
24
|
end
|
25
25
|
end
|
@@ -7,8 +7,20 @@ module Rubocop
|
|
7
7
|
describe SpaceAfterComma do
|
8
8
|
let(:space) { SpaceAfterComma.new }
|
9
9
|
|
10
|
-
it 'registers an offence for block argument commas' do
|
11
|
-
inspect_source(space,
|
10
|
+
it 'registers an offence for block argument commas without space' do
|
11
|
+
inspect_source(space, ['each { |s,t| }'])
|
12
|
+
expect(space.offences.map(&:message)).to eq(
|
13
|
+
['Space missing after comma.'])
|
14
|
+
end
|
15
|
+
|
16
|
+
it 'registers an offence for array index commas without space' do
|
17
|
+
inspect_source(space, ['formats[0,1]'])
|
18
|
+
expect(space.offences.map(&:message)).to eq(
|
19
|
+
['Space missing after comma.'])
|
20
|
+
end
|
21
|
+
|
22
|
+
it 'registers an offence for method call arg commas without space' do
|
23
|
+
inspect_source(space, ['a(1,2)'])
|
12
24
|
expect(space.offences.map(&:message)).to eq(
|
13
25
|
['Space missing after comma.'])
|
14
26
|
end
|
@@ -0,0 +1,67 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
module Rubocop
|
6
|
+
module Cop
|
7
|
+
describe SpaceAfterControlKeyword do
|
8
|
+
let(:ap) { SpaceAfterControlKeyword.new }
|
9
|
+
|
10
|
+
it 'registers an offence for normal if' do
|
11
|
+
inspect_source(ap,
|
12
|
+
['if(test) then result end'])
|
13
|
+
expect(ap.offences.size).to eq(1)
|
14
|
+
end
|
15
|
+
|
16
|
+
it 'registers an offence for modifier unless' do
|
17
|
+
inspect_source(ap, ['action unless(test)'])
|
18
|
+
|
19
|
+
expect(ap.offences.size).to eq(1)
|
20
|
+
end
|
21
|
+
|
22
|
+
it 'does not get confused by keywords' do
|
23
|
+
inspect_source(ap, ['[:if, :unless].action'])
|
24
|
+
expect(ap.offences).to be_empty
|
25
|
+
end
|
26
|
+
|
27
|
+
it 'does not get confused by the ternary operator' do
|
28
|
+
inspect_source(ap, ['a ? b : c'])
|
29
|
+
expect(ap.offences).to be_empty
|
30
|
+
end
|
31
|
+
|
32
|
+
it 'registers an offence for if, elsif, and unless' do
|
33
|
+
inspect_source(ap,
|
34
|
+
['if(a)',
|
35
|
+
'elsif(b)',
|
36
|
+
' unless(c)',
|
37
|
+
' end',
|
38
|
+
'end'])
|
39
|
+
expect(ap.offences.map(&:line_number)).to eq([1, 2, 3])
|
40
|
+
end
|
41
|
+
|
42
|
+
it 'registers an offence for case and when' do
|
43
|
+
inspect_source(ap,
|
44
|
+
['case(a)',
|
45
|
+
'when(0) then 1',
|
46
|
+
'end'])
|
47
|
+
expect(ap.offences.map(&:line_number)).to eq([1, 2])
|
48
|
+
end
|
49
|
+
|
50
|
+
it 'registers an offence for case and when' do
|
51
|
+
inspect_source(ap,
|
52
|
+
['case(a)',
|
53
|
+
'when(0) then 1',
|
54
|
+
'end'])
|
55
|
+
expect(ap.offences.map(&:line_number)).to eq([1, 2])
|
56
|
+
end
|
57
|
+
|
58
|
+
it 'registers an offence for while and until' do
|
59
|
+
inspect_source(ap,
|
60
|
+
['while(a)',
|
61
|
+
' b until(c)',
|
62
|
+
'end'])
|
63
|
+
expect(ap.offences.map(&:line_number)).to eq([1, 2])
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
@@ -8,10 +8,15 @@ module Rubocop
|
|
8
8
|
let(:space) { SpaceAfterSemicolon.new }
|
9
9
|
|
10
10
|
it 'registers an offence for semicolon without space after it' do
|
11
|
-
inspect_source(space,
|
11
|
+
inspect_source(space, ['x = 1;y = 2'])
|
12
12
|
expect(space.offences.map(&:message)).to eq(
|
13
13
|
['Space missing after semicolon.'])
|
14
14
|
end
|
15
|
+
|
16
|
+
it 'does not crash if semicolon is the last character of the file' do
|
17
|
+
inspect_source(space, ['x = 1;'])
|
18
|
+
expect(space.offences.map(&:message)).to be_empty
|
19
|
+
end
|
15
20
|
end
|
16
21
|
end
|
17
22
|
end
|
@@ -8,25 +8,40 @@ module Rubocop
|
|
8
8
|
let(:space) { SpaceAroundBraces.new }
|
9
9
|
|
10
10
|
it 'registers an offence for left brace without spaces' do
|
11
|
-
inspect_source(space,
|
11
|
+
inspect_source(space, ['each{ puts }'])
|
12
12
|
expect(space.offences.map(&:message)).to eq(
|
13
13
|
["Surrounding space missing for '{'."])
|
14
14
|
end
|
15
15
|
|
16
16
|
it 'registers an offence for right brace without inner space' do
|
17
|
-
inspect_source(space,
|
17
|
+
inspect_source(space, ['each { puts}'])
|
18
18
|
expect(space.offences.map(&:message)).to eq(
|
19
19
|
["Space missing to the left of '}'."])
|
20
20
|
end
|
21
21
|
|
22
22
|
it 'accepts an empty hash literal with no space inside' do
|
23
|
-
inspect_source(space,
|
23
|
+
inspect_source(space,
|
24
24
|
['view_hash.each do |view_key|',
|
25
25
|
'end',
|
26
26
|
'@views = {}',
|
27
27
|
''])
|
28
28
|
expect(space.offences.map(&:message)).to be_empty
|
29
29
|
end
|
30
|
+
|
31
|
+
it 'accepts string interpolation braces with no space inside' do
|
32
|
+
inspect_source(space,
|
33
|
+
['"A=#{a}"',
|
34
|
+
':"#{b}"',
|
35
|
+
'/#{c}/',
|
36
|
+
'`#{d}`',
|
37
|
+
'sprintf("#{message.gsub(/%/, \'%%\')}", line)'])
|
38
|
+
expect(space.offences.map(&:message)).to be_empty
|
39
|
+
end
|
40
|
+
|
41
|
+
it 'accepts braces around a hash literal argument' do
|
42
|
+
inspect_source(space, ["new({'user' => user_params})"])
|
43
|
+
expect(space.offences.map(&:message)).to be_empty
|
44
|
+
end
|
30
45
|
end
|
31
46
|
end
|
32
47
|
end
|
@@ -8,13 +8,23 @@ module Rubocop
|
|
8
8
|
let(:space) { SpaceAroundEqualsInParameterDefault.new }
|
9
9
|
|
10
10
|
it 'registers an offence for default value assignment without space' do
|
11
|
-
inspect_source(space,
|
11
|
+
inspect_source(space, ['def f(x, y=0, z=1)', 'end'])
|
12
12
|
expect(space.offences.map(&:message)).to eq(
|
13
13
|
['Surrounding space missing in default value assignment.'] * 2)
|
14
14
|
end
|
15
15
|
|
16
|
+
it 'registers an offence for assignment of empty string without space' do
|
17
|
+
inspect_source(space, ['def f(x, y="", z=1)', 'end'])
|
18
|
+
expect(space.offences.size).to eq(2)
|
19
|
+
end
|
20
|
+
|
21
|
+
it 'registers an offence for assignment of empty list without space' do
|
22
|
+
inspect_source(space, ['def f(x, y=[])', 'end'])
|
23
|
+
expect(space.offences.size).to eq(1)
|
24
|
+
end
|
25
|
+
|
16
26
|
it 'accepts default value assignment with space' do
|
17
|
-
inspect_source(space,
|
27
|
+
inspect_source(space, ['def f(x, y = 0, z = {})', 'end'])
|
18
28
|
expect(space.offences.map(&:message)).to be_empty
|
19
29
|
end
|
20
30
|
end
|