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,49 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
module Rubocop
|
6
|
+
module Cop
|
7
|
+
describe ClassMethods do
|
8
|
+
let(:cm) { ClassMethods.new }
|
9
|
+
|
10
|
+
it 'registers an offence for methods using a class name' do
|
11
|
+
inspect_source(cm,
|
12
|
+
['class Test',
|
13
|
+
' def Test.some_method',
|
14
|
+
' do_something',
|
15
|
+
' end',
|
16
|
+
'end'])
|
17
|
+
expect(cm.offences.size).to eq(1)
|
18
|
+
end
|
19
|
+
|
20
|
+
it 'registers an offence for methods using a module name' do
|
21
|
+
inspect_source(cm,
|
22
|
+
['module Test',
|
23
|
+
' def Test.some_method',
|
24
|
+
' do_something',
|
25
|
+
' end',
|
26
|
+
'end'])
|
27
|
+
expect(cm.offences.size).to eq(1)
|
28
|
+
end
|
29
|
+
|
30
|
+
it 'does not register an offence for methods using self' do
|
31
|
+
inspect_source(cm,
|
32
|
+
['module Test',
|
33
|
+
' def self.some_method',
|
34
|
+
' do_something',
|
35
|
+
' end',
|
36
|
+
'end'])
|
37
|
+
expect(cm.offences).to be_empty
|
38
|
+
end
|
39
|
+
|
40
|
+
it 'does not register an offence outside class/module bodies' do
|
41
|
+
inspect_source(cm,
|
42
|
+
['def self.some_method',
|
43
|
+
' do_something',
|
44
|
+
'end'])
|
45
|
+
expect(cm.offences).to be_empty
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
@@ -8,32 +8,37 @@ module Rubocop
|
|
8
8
|
let(:cm) { CollectionMethods.new }
|
9
9
|
|
10
10
|
it 'registers an offence for collect' do
|
11
|
-
inspect_source(cm,
|
11
|
+
inspect_source(cm, ['[1, 2, 3].collect { |e| e + 1 }'])
|
12
12
|
expect(cm.offences.size).to eq(1)
|
13
13
|
expect(cm.offences.map(&:message))
|
14
14
|
.to eq(['Prefer map over collect.'])
|
15
15
|
end
|
16
16
|
|
17
17
|
it 'registers an offence for inject' do
|
18
|
-
inspect_source(cm,
|
18
|
+
inspect_source(cm, ['[1, 2, 3].inject { |e| e + 1 }'])
|
19
19
|
expect(cm.offences.size).to eq(1)
|
20
20
|
expect(cm.offences.map(&:message))
|
21
21
|
.to eq(['Prefer reduce over inject.'])
|
22
22
|
end
|
23
23
|
|
24
24
|
it 'registers an offence for detect' do
|
25
|
-
inspect_source(cm,
|
25
|
+
inspect_source(cm, ['[1, 2, 3].detect { |e| e + 1 }'])
|
26
26
|
expect(cm.offences.size).to eq(1)
|
27
27
|
expect(cm.offences.map(&:message))
|
28
28
|
.to eq(['Prefer find over detect.'])
|
29
29
|
end
|
30
30
|
|
31
31
|
it 'registers an offence for find_all' do
|
32
|
-
inspect_source(cm,
|
32
|
+
inspect_source(cm, ['[1, 2, 3].find_all { |e| e + 1 }'])
|
33
33
|
expect(cm.offences.size).to eq(1)
|
34
34
|
expect(cm.offences.map(&:message))
|
35
35
|
.to eq(['Prefer select over find_all.'])
|
36
36
|
end
|
37
|
+
|
38
|
+
it 'ignores find_all without an explicit receiver' do
|
39
|
+
inspect_source(cm, ['find_all { |e| e + 1 }'])
|
40
|
+
expect(cm.offences).to be_empty
|
41
|
+
end
|
37
42
|
end
|
38
43
|
end
|
39
44
|
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
module Rubocop
|
6
|
+
module Cop
|
7
|
+
describe ColonMethodCall do
|
8
|
+
let(:smc) { ColonMethodCall.new }
|
9
|
+
|
10
|
+
it 'registers an offence for instance method call' do
|
11
|
+
inspect_source(smc,
|
12
|
+
['test::method_name'])
|
13
|
+
expect(smc.offences.size).to eq(1)
|
14
|
+
end
|
15
|
+
|
16
|
+
it 'registers an offence for instance method call with arg' do
|
17
|
+
inspect_source(smc,
|
18
|
+
['test::method_name(arg)'])
|
19
|
+
expect(smc.offences.size).to eq(1)
|
20
|
+
end
|
21
|
+
|
22
|
+
it 'registers an offence for class method call' do
|
23
|
+
inspect_source(smc,
|
24
|
+
['Class::method_name'])
|
25
|
+
expect(smc.offences.size).to eq(1)
|
26
|
+
end
|
27
|
+
|
28
|
+
it 'registers an offence for class method call with arg' do
|
29
|
+
inspect_source(smc,
|
30
|
+
['Class::method_name(arg, arg2)'])
|
31
|
+
expect(smc.offences.size).to eq(1)
|
32
|
+
end
|
33
|
+
|
34
|
+
it 'does not register an offence for constant access' do
|
35
|
+
inspect_source(smc,
|
36
|
+
['Tip::Top::SOME_CONST'])
|
37
|
+
expect(smc.offences).to be_empty
|
38
|
+
end
|
39
|
+
|
40
|
+
it 'does not register an offence for nested class' do
|
41
|
+
inspect_source(smc,
|
42
|
+
['Tip::Top.some_method'])
|
43
|
+
expect(smc.offences).to be_empty
|
44
|
+
end
|
45
|
+
|
46
|
+
it 'does not register an offence for op methods' do
|
47
|
+
inspect_source(smc,
|
48
|
+
['Tip::Top.some_method[3]'])
|
49
|
+
expect(smc.offences).to be_empty
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
module Rubocop
|
6
|
+
module Cop
|
7
|
+
describe ConstantName do
|
8
|
+
let(:const) { ConstantName.new }
|
9
|
+
|
10
|
+
it 'registers an offence for camel case in const name' do
|
11
|
+
inspect_source(const,
|
12
|
+
['TopCase = 5'])
|
13
|
+
expect(const.offences.size).to eq(1)
|
14
|
+
end
|
15
|
+
|
16
|
+
it 'registers an offence for snake case in const name' do
|
17
|
+
inspect_source(const,
|
18
|
+
['TOP_test = 5'])
|
19
|
+
expect(const.offences.size).to eq(1)
|
20
|
+
end
|
21
|
+
|
22
|
+
it 'allows screaming snake case in const name' do
|
23
|
+
inspect_source(const,
|
24
|
+
['TOP_TEST = 5'])
|
25
|
+
expect(const.offences).to be_empty
|
26
|
+
end
|
27
|
+
|
28
|
+
it 'does not check names if rhs is a method call' do
|
29
|
+
inspect_source(const,
|
30
|
+
['AnythingGoes = test'])
|
31
|
+
expect(const.offences).to be_empty
|
32
|
+
end
|
33
|
+
|
34
|
+
it 'checks qualified const names' do
|
35
|
+
inspect_source(const,
|
36
|
+
['::AnythingGoes = 30',
|
37
|
+
'a::Bar_foo = 10'])
|
38
|
+
expect(const.offences.size).to eq(2)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -10,23 +10,28 @@ module Rubocop
|
|
10
10
|
it 'reports an offence for def with empty parens' do
|
11
11
|
src = ['def func()',
|
12
12
|
'end']
|
13
|
-
inspect_source(def_par,
|
14
|
-
expect(def_par.offences.
|
15
|
-
|
16
|
-
|
13
|
+
inspect_source(def_par, src)
|
14
|
+
expect(def_par.offences.size).to eq(1)
|
15
|
+
end
|
16
|
+
|
17
|
+
it 'reports an offence for class def with empty parens' do
|
18
|
+
src = ['def Test.func()',
|
19
|
+
'end']
|
20
|
+
inspect_source(def_par, src)
|
21
|
+
expect(def_par.offences.size).to eq(1)
|
17
22
|
end
|
18
23
|
|
19
24
|
it 'accepts def with arg and parens' do
|
20
25
|
src = ['def func(a)',
|
21
26
|
'end']
|
22
|
-
inspect_source(def_par,
|
23
|
-
expect(def_par.offences
|
27
|
+
inspect_source(def_par, src)
|
28
|
+
expect(def_par.offences).to be_empty
|
24
29
|
end
|
25
30
|
|
26
31
|
it 'accepts empty parentheses in one liners' do
|
27
32
|
src = ["def to_s() join '/' end"]
|
28
|
-
inspect_source(def_par,
|
29
|
-
expect(def_par.offences
|
33
|
+
inspect_source(def_par, src)
|
34
|
+
expect(def_par.offences).to be_empty
|
30
35
|
end
|
31
36
|
end
|
32
37
|
end
|
@@ -10,16 +10,22 @@ module Rubocop
|
|
10
10
|
it 'reports an offence for def with parameters but no parens' do
|
11
11
|
src = ['def func a, b',
|
12
12
|
'end']
|
13
|
-
inspect_source(def_par,
|
14
|
-
expect(def_par.offences.
|
15
|
-
|
13
|
+
inspect_source(def_par, src)
|
14
|
+
expect(def_par.offences.size).to eq(1)
|
15
|
+
end
|
16
|
+
|
17
|
+
it 'reports an offence for class def with parameters but no parens' do
|
18
|
+
src = ['def Test.func a, b',
|
19
|
+
'end']
|
20
|
+
inspect_source(def_par, src)
|
21
|
+
expect(def_par.offences.size).to eq(1)
|
16
22
|
end
|
17
23
|
|
18
24
|
it 'accepts def with no args and no parens' do
|
19
25
|
src = ['def func',
|
20
26
|
'end']
|
21
|
-
inspect_source(def_par,
|
22
|
-
expect(def_par.offences
|
27
|
+
inspect_source(def_par, src)
|
28
|
+
expect(def_par.offences).to be_empty
|
23
29
|
end
|
24
30
|
end
|
25
31
|
end
|
@@ -0,0 +1,83 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
module Rubocop
|
6
|
+
module Cop
|
7
|
+
describe EmptyLineBetweenDefs do
|
8
|
+
let(:empty_lines) { EmptyLineBetweenDefs.new }
|
9
|
+
|
10
|
+
it 'finds offences in inner classes' do
|
11
|
+
inspect_source(empty_lines, ['class K',
|
12
|
+
' def m',
|
13
|
+
' end',
|
14
|
+
' class J',
|
15
|
+
' def n',
|
16
|
+
' end',
|
17
|
+
' def o',
|
18
|
+
' end',
|
19
|
+
' end',
|
20
|
+
' # checks something',
|
21
|
+
' def p',
|
22
|
+
' end',
|
23
|
+
'end'])
|
24
|
+
expect(empty_lines.offences.size).to eq(1)
|
25
|
+
expect(empty_lines.offences.map(&:line_number).sort).to eq([7])
|
26
|
+
end
|
27
|
+
|
28
|
+
# Only one def, so rule about empty line *between* defs does not
|
29
|
+
# apply.
|
30
|
+
it 'accepts a def that follows a line with code' do
|
31
|
+
inspect_source(empty_lines, ['x = 0',
|
32
|
+
'def m',
|
33
|
+
'end'])
|
34
|
+
expect(empty_lines.offences).to be_empty
|
35
|
+
end
|
36
|
+
|
37
|
+
# Only one def, so rule about empty line *between* defs does not
|
38
|
+
# apply.
|
39
|
+
it 'accepts a def that follows code and a comment' do
|
40
|
+
inspect_source(empty_lines, [' x = 0',
|
41
|
+
' # 123',
|
42
|
+
' def m',
|
43
|
+
' end'])
|
44
|
+
expect(empty_lines.offences).to be_empty
|
45
|
+
end
|
46
|
+
|
47
|
+
it 'accepts the first def without leading empty line in a class' do
|
48
|
+
inspect_source(empty_lines, ['class K',
|
49
|
+
' def m',
|
50
|
+
' end',
|
51
|
+
'end'])
|
52
|
+
expect(empty_lines.offences).to be_empty
|
53
|
+
end
|
54
|
+
|
55
|
+
it 'accepts a def that follows an empty line and then a comment' do
|
56
|
+
inspect_source(empty_lines, ['class A',
|
57
|
+
' # calculates value',
|
58
|
+
' def m',
|
59
|
+
' end',
|
60
|
+
'',
|
61
|
+
' private',
|
62
|
+
' # calculates size',
|
63
|
+
' def n',
|
64
|
+
' end',
|
65
|
+
'end',
|
66
|
+
])
|
67
|
+
expect(empty_lines.offences).to be_empty
|
68
|
+
end
|
69
|
+
|
70
|
+
it 'accepts a def that is the first of a module' do
|
71
|
+
source = ['module Util',
|
72
|
+
' public',
|
73
|
+
' #',
|
74
|
+
' def html_escape(s)',
|
75
|
+
' end',
|
76
|
+
'end',
|
77
|
+
]
|
78
|
+
inspect_source(empty_lines, source)
|
79
|
+
expect(empty_lines.offences.map(&:message)).to be_empty
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
@@ -7,76 +7,31 @@ module Rubocop
|
|
7
7
|
describe EmptyLines do
|
8
8
|
let(:empty_lines) { EmptyLines.new }
|
9
9
|
|
10
|
-
it '
|
11
|
-
inspect_source(empty_lines,
|
12
|
-
|
13
|
-
' end',
|
14
|
-
' class J',
|
15
|
-
' def n',
|
16
|
-
' end',
|
17
|
-
' def o',
|
18
|
-
' end',
|
19
|
-
' end',
|
20
|
-
' # checks something',
|
21
|
-
' def p',
|
22
|
-
' end',
|
23
|
-
'end'])
|
10
|
+
it 'registers an offence for consecutive empty lines' do
|
11
|
+
inspect_source(empty_lines,
|
12
|
+
['test = 5', '', '', '', 'top'])
|
24
13
|
expect(empty_lines.offences.size).to eq(2)
|
25
|
-
expect(empty_lines.offences.map(&:line_number).sort).to eq([7, 11])
|
26
14
|
end
|
27
15
|
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
inspect_source(empty_lines, '', ['x = 0',
|
32
|
-
'def m',
|
33
|
-
'end'])
|
16
|
+
it 'works when there are no tokens' do
|
17
|
+
inspect_source(empty_lines,
|
18
|
+
['#comment'])
|
34
19
|
expect(empty_lines.offences).to be_empty
|
35
20
|
end
|
36
21
|
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
inspect_source(empty_lines, '', [' x = 0',
|
41
|
-
' # 123',
|
42
|
-
' def m',
|
43
|
-
' end'])
|
22
|
+
it 'handles comments' do
|
23
|
+
inspect_source(empty_lines,
|
24
|
+
['test', '', '#comment', 'top'])
|
44
25
|
expect(empty_lines.offences).to be_empty
|
45
26
|
end
|
46
27
|
|
47
|
-
it '
|
48
|
-
inspect_source(empty_lines,
|
49
|
-
|
50
|
-
' end',
|
51
|
-
'end'])
|
52
|
-
expect(empty_lines.offences).to be_empty
|
53
|
-
end
|
28
|
+
it 'does not register an offence for empty lines in a string' do
|
29
|
+
inspect_source(empty_lines, ['result = "test
|
30
|
+
|
54
31
|
|
55
|
-
it 'accepts a def that follows an empty line and then a comment' do
|
56
|
-
inspect_source(empty_lines, '', ['class A',
|
57
|
-
' # calculates value',
|
58
|
-
' def m',
|
59
|
-
' end',
|
60
|
-
'',
|
61
|
-
' private',
|
62
|
-
' # calculates size',
|
63
|
-
' def n',
|
64
|
-
' end',
|
65
|
-
'end',
|
66
|
-
])
|
67
|
-
expect(empty_lines.offences).to be_empty
|
68
|
-
end
|
69
32
|
|
70
|
-
|
71
|
-
|
72
|
-
' public',
|
73
|
-
' #',
|
74
|
-
' def html_escape(s)',
|
75
|
-
' end',
|
76
|
-
'end',
|
77
|
-
]
|
78
|
-
inspect_source(empty_lines, '', source)
|
79
|
-
expect(empty_lines.offences.map(&:message)).to be_empty
|
33
|
+
string"'])
|
34
|
+
expect(empty_lines.offences).to be_empty
|
80
35
|
end
|
81
36
|
end
|
82
37
|
end
|
@@ -0,0 +1,90 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
module Rubocop
|
6
|
+
module Cop
|
7
|
+
describe EmptyLiteral do
|
8
|
+
let(:a) { EmptyLiteral.new }
|
9
|
+
|
10
|
+
describe 'Empty Array' do
|
11
|
+
it 'registers an offence for Array.new()' do
|
12
|
+
inspect_source(a,
|
13
|
+
['test = Array.new()'])
|
14
|
+
expect(a.offences.size).to eq(1)
|
15
|
+
expect(a.offences.map(&:message))
|
16
|
+
.to eq([EmptyLiteral::ARR_MSG])
|
17
|
+
end
|
18
|
+
|
19
|
+
it 'registers an offence for Array.new' do
|
20
|
+
inspect_source(a,
|
21
|
+
['test = Array.new'])
|
22
|
+
expect(a.offences.size).to eq(1)
|
23
|
+
expect(a.offences.map(&:message))
|
24
|
+
.to eq([EmptyLiteral::ARR_MSG])
|
25
|
+
end
|
26
|
+
|
27
|
+
it 'does not register an offence for Array.new(3)' do
|
28
|
+
inspect_source(a,
|
29
|
+
['test = Array.new(3)'])
|
30
|
+
expect(a.offences).to be_empty
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
describe 'Empty Hash' do
|
35
|
+
it 'registers an offence for Hash.new()' do
|
36
|
+
inspect_source(a,
|
37
|
+
['test = Hash.new()'])
|
38
|
+
expect(a.offences.size).to eq(1)
|
39
|
+
expect(a.offences.map(&:message))
|
40
|
+
.to eq([EmptyLiteral::HASH_MSG])
|
41
|
+
end
|
42
|
+
|
43
|
+
it 'registers an offence for Hash.new' do
|
44
|
+
inspect_source(a,
|
45
|
+
['test = Hash.new'])
|
46
|
+
expect(a.offences.size).to eq(1)
|
47
|
+
expect(a.offences.map(&:message))
|
48
|
+
.to eq([EmptyLiteral::HASH_MSG])
|
49
|
+
end
|
50
|
+
|
51
|
+
it 'does not register an offence for Hash.new(3)' do
|
52
|
+
inspect_source(a,
|
53
|
+
['test = Hash.new(3)'])
|
54
|
+
expect(a.offences).to be_empty
|
55
|
+
end
|
56
|
+
|
57
|
+
it 'does not register an offence for Hash.new { block }' do
|
58
|
+
inspect_source(a,
|
59
|
+
['test = Hash.new { block }'])
|
60
|
+
expect(a.offences).to be_empty
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
describe 'Empty String' do
|
65
|
+
it 'registers an offence for String.new()' do
|
66
|
+
inspect_source(a,
|
67
|
+
['test = String.new()'])
|
68
|
+
expect(a.offences.size).to eq(1)
|
69
|
+
expect(a.offences.map(&:message))
|
70
|
+
.to eq([EmptyLiteral::STR_MSG])
|
71
|
+
end
|
72
|
+
|
73
|
+
it 'registers an offence for String.new' do
|
74
|
+
inspect_source(a,
|
75
|
+
['test = String.new'])
|
76
|
+
expect(a.offences.size).to eq(1)
|
77
|
+
expect(a.offences.map(&:message))
|
78
|
+
.to eq([EmptyLiteral::STR_MSG])
|
79
|
+
end
|
80
|
+
|
81
|
+
it 'does not register an offence for String.new("top")' do
|
82
|
+
inspect_source(a,
|
83
|
+
['test = String.new("top")'])
|
84
|
+
expect(a.offences).to be_empty
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
@@ -8,37 +8,37 @@ module Rubocop
|
|
8
8
|
let(:encoding) { Encoding.new }
|
9
9
|
|
10
10
|
it 'registers an offence when no encoding present', ruby: 1.9 do
|
11
|
-
inspect_source(encoding,
|
11
|
+
inspect_source(encoding, ['def foo() end'])
|
12
12
|
|
13
13
|
expect(encoding.offences.map(&:message)).to eq(
|
14
|
-
['Missing encoding comment.'])
|
14
|
+
['Missing utf-8 encoding comment.'])
|
15
15
|
end
|
16
16
|
|
17
17
|
it 'accepts encoding on first line', ruby: 1.9 do
|
18
|
-
inspect_source(encoding,
|
19
|
-
|
18
|
+
inspect_source(encoding, ['# encoding: utf-8',
|
19
|
+
'def foo() end'])
|
20
20
|
|
21
21
|
expect(encoding.offences).to be_empty
|
22
22
|
end
|
23
23
|
|
24
24
|
it 'accepts encoding on second line when shebang present', ruby: 1.9 do
|
25
|
-
inspect_source(encoding,
|
26
|
-
|
27
|
-
|
25
|
+
inspect_source(encoding, ['#!/usr/bin/env ruby',
|
26
|
+
'# encoding: utf-8',
|
27
|
+
'def foo() end'])
|
28
28
|
|
29
29
|
expect(encoding.offences.map(&:message)).to be_empty
|
30
30
|
end
|
31
31
|
|
32
32
|
it 'books an offence when encoding is in the wrong place', ruby: 1.9 do
|
33
|
-
inspect_source(encoding,
|
34
|
-
|
33
|
+
inspect_source(encoding, ['def foo() end',
|
34
|
+
'# encoding: utf-8'])
|
35
35
|
|
36
36
|
expect(encoding.offences.map(&:message)).to eq(
|
37
|
-
['Missing encoding comment.'])
|
37
|
+
['Missing utf-8 encoding comment.'])
|
38
38
|
end
|
39
39
|
|
40
40
|
it 'does not register an offence on Ruby 2.0', ruby: 2.0 do
|
41
|
-
inspect_source(encoding,
|
41
|
+
inspect_source(encoding, ['def foo() end'])
|
42
42
|
|
43
43
|
expect(encoding.offences).to be_empty
|
44
44
|
end
|
@@ -8,13 +8,13 @@ module Rubocop
|
|
8
8
|
let(:eol) { EndOfLine.new }
|
9
9
|
|
10
10
|
it 'registers an offence for CR+LF' do
|
11
|
-
inspect_source(eol,
|
11
|
+
inspect_source(eol, ["x=0\r", ''])
|
12
12
|
expect(eol.offences.map(&:message)).to eq(
|
13
13
|
['Carriage return character detected.'])
|
14
14
|
end
|
15
15
|
|
16
16
|
it 'registers an offence for CR at end of file' do
|
17
|
-
inspect_source(eol,
|
17
|
+
inspect_source(eol, ["x=0\r"])
|
18
18
|
expect(eol.offences.map(&:message)).to eq(
|
19
19
|
['Carriage return character detected.'])
|
20
20
|
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
module Rubocop
|
6
|
+
module Cop
|
7
|
+
describe EnsureReturn do
|
8
|
+
let(:er) { EnsureReturn.new }
|
9
|
+
|
10
|
+
it 'registers an offence for return in ensure' do
|
11
|
+
inspect_source(er,
|
12
|
+
['begin',
|
13
|
+
' something',
|
14
|
+
'ensure',
|
15
|
+
' file.close',
|
16
|
+
' return',
|
17
|
+
'end'])
|
18
|
+
expect(er.offences.size).to eq(1)
|
19
|
+
expect(er.offences.map(&:message))
|
20
|
+
.to eq([EnsureReturn::MSG])
|
21
|
+
end
|
22
|
+
|
23
|
+
it 'does not register an offence for return outside ensure' do
|
24
|
+
inspect_source(er,
|
25
|
+
['begin',
|
26
|
+
' something',
|
27
|
+
' return',
|
28
|
+
'ensure',
|
29
|
+
' file.close',
|
30
|
+
'end'])
|
31
|
+
expect(er.offences).to be_empty
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
module Rubocop
|
6
|
+
module Cop
|
7
|
+
describe Eval do
|
8
|
+
let(:a) { Eval.new }
|
9
|
+
|
10
|
+
it 'registers an offence for eval as function' do
|
11
|
+
inspect_source(a,
|
12
|
+
['eval(something)'])
|
13
|
+
expect(a.offences.size).to eq(1)
|
14
|
+
expect(a.offences.map(&:message))
|
15
|
+
.to eq([Eval::MSG])
|
16
|
+
end
|
17
|
+
|
18
|
+
it 'registers an offence for eval as command' do
|
19
|
+
inspect_source(a,
|
20
|
+
['eval something'])
|
21
|
+
expect(a.offences.size).to eq(1)
|
22
|
+
expect(a.offences.map(&:message))
|
23
|
+
.to eq([Eval::MSG])
|
24
|
+
end
|
25
|
+
|
26
|
+
it 'does not register an offence for eval as variable' do
|
27
|
+
inspect_source(a,
|
28
|
+
['eval = something'])
|
29
|
+
expect(a.offences).to be_empty
|
30
|
+
end
|
31
|
+
|
32
|
+
it 'does not register an offence for eval as method' do
|
33
|
+
inspect_source(a,
|
34
|
+
['something.eval'])
|
35
|
+
expect(a.offences).to be_empty
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|