rubocop 0.13.1 → 0.14.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 +4 -4
- data/.rubocop.yml +3 -0
- data/CHANGELOG.md +42 -0
- data/README.md +59 -54
- data/config/default.yml +124 -95
- data/config/disabled.yml +4 -0
- data/config/enabled.yml +286 -264
- data/lib/rubocop.rb +10 -3
- data/lib/rubocop/cli.rb +10 -171
- data/lib/rubocop/cop/cop.rb +14 -11
- data/lib/rubocop/cop/lint/debugger.rb +35 -0
- data/lib/rubocop/cop/lint/syntax.rb +34 -0
- data/lib/rubocop/cop/offence.rb +15 -23
- data/lib/rubocop/cop/style/align_array.rb +1 -10
- data/lib/rubocop/cop/style/align_hash.rb +14 -2
- data/lib/rubocop/cop/style/align_parameters.rb +1 -11
- data/lib/rubocop/cop/style/and_or.rb +13 -11
- data/lib/rubocop/cop/style/attr.rb +1 -1
- data/lib/rubocop/cop/style/autocorrect_alignment.rb +31 -6
- data/lib/rubocop/cop/style/blocks.rb +14 -6
- data/lib/rubocop/cop/style/character_literal.rb +1 -1
- data/lib/rubocop/cop/style/class_length.rb +38 -0
- data/lib/rubocop/cop/style/collection_methods.rb +1 -1
- data/lib/rubocop/cop/style/colon_method_call.rb +1 -1
- data/lib/rubocop/cop/style/configurable_naming.rb +47 -0
- data/lib/rubocop/cop/style/def_parentheses.rb +2 -2
- data/lib/rubocop/cop/style/empty_literal.rb +1 -1
- data/lib/rubocop/cop/style/even_odd.rb +7 -3
- data/lib/rubocop/cop/style/hash_methods.rb +1 -1
- data/lib/rubocop/cop/style/hash_syntax.rb +36 -7
- data/lib/rubocop/cop/style/lambda_call.rb +36 -11
- data/lib/rubocop/cop/style/method_call_parentheses.rb +1 -1
- data/lib/rubocop/cop/style/method_called_on_do_end_block.rb +41 -0
- data/lib/rubocop/cop/style/method_length.rb +2 -13
- data/lib/rubocop/cop/style/method_name.rb +42 -0
- data/lib/rubocop/cop/style/numeric_literals.rb +4 -0
- data/lib/rubocop/cop/style/perl_backrefs.rb +1 -1
- data/lib/rubocop/cop/style/raise_args.rb +60 -0
- data/lib/rubocop/cop/style/redundant_exception.rb +32 -0
- data/lib/rubocop/cop/style/redundant_return.rb +14 -5
- data/lib/rubocop/cop/style/redundant_self.rb +1 -1
- data/lib/rubocop/cop/style/semicolon.rb +13 -4
- data/lib/rubocop/cop/style/signal_exception.rb +63 -14
- data/lib/rubocop/cop/style/special_global_vars.rb +1 -1
- data/lib/rubocop/cop/style/string_help.rb +4 -1
- data/lib/rubocop/cop/style/string_literals.rb +34 -11
- data/lib/rubocop/cop/style/surrounding_space.rb +64 -17
- data/lib/rubocop/cop/style/tab.rb +1 -1
- data/lib/rubocop/cop/style/variable_name.rb +44 -0
- data/lib/rubocop/cop/style/when_then.rb +1 -1
- data/lib/rubocop/cop/style/while_until_do.rb +1 -1
- data/lib/rubocop/cop/team.rb +4 -7
- data/lib/rubocop/cop/util.rb +12 -0
- data/lib/rubocop/formatter/clang_style_formatter.rb +1 -1
- data/lib/rubocop/formatter/emacs_style_formatter.rb +5 -2
- data/lib/rubocop/formatter/json_formatter.rb +1 -0
- data/lib/rubocop/formatter/progress_formatter.rb +9 -13
- data/lib/rubocop/formatter/simple_text_formatter.rb +63 -15
- data/lib/rubocop/options.rb +184 -0
- data/lib/rubocop/processed_source.rb +4 -0
- data/lib/rubocop/version.rb +1 -1
- data/rubocop.gemspec +1 -1
- data/spec/rubocop/cli_spec.rb +870 -1001
- data/spec/rubocop/config_spec.rb +13 -13
- data/spec/rubocop/config_store_spec.rb +38 -37
- data/spec/rubocop/cop/commissioner_spec.rb +42 -46
- data/spec/rubocop/cop/cop_spec.rb +72 -77
- data/spec/rubocop/cop/corrector_spec.rb +51 -55
- data/spec/rubocop/cop/lint/assignment_in_condition_spec.rb +100 -106
- data/spec/rubocop/cop/lint/block_alignment_spec.rb +403 -409
- data/spec/rubocop/cop/lint/debugger_spec.rb +39 -0
- data/spec/rubocop/cop/lint/empty_ensure_spec.rb +19 -25
- data/spec/rubocop/cop/lint/end_alignment_spec.rb +50 -56
- data/spec/rubocop/cop/lint/end_in_method_spec.rb +20 -26
- data/spec/rubocop/cop/lint/ensure_return_spec.rb +30 -36
- data/spec/rubocop/cop/lint/eval_spec.rb +25 -31
- data/spec/rubocop/cop/lint/handle_exceptions_spec.rb +22 -28
- data/spec/rubocop/cop/lint/literal_in_condition_spec.rb +51 -57
- data/spec/rubocop/cop/lint/loop_spec.rb +17 -23
- data/spec/rubocop/cop/lint/parentheses_as_grouped_expression_spec.rb +51 -57
- data/spec/rubocop/cop/lint/rescue_exception_spec.rb +105 -111
- data/spec/rubocop/cop/lint/shadowing_outer_local_variable_spec.rb +230 -236
- data/spec/rubocop/cop/lint/syntax_spec.rb +33 -0
- data/spec/rubocop/cop/lint/unreachable_code_spec.rb +51 -57
- data/spec/rubocop/cop/lint/useless_assignment_spec.rb +1544 -1550
- data/spec/rubocop/cop/lint/useless_comparison_spec.rb +21 -27
- data/spec/rubocop/cop/lint/useless_setter_call_spec.rb +119 -125
- data/spec/rubocop/cop/lint/void_spec.rb +50 -56
- data/spec/rubocop/cop/offence_spec.rb +101 -131
- data/spec/rubocop/cop/rails/has_and_belongs_to_many_spec.rb +6 -12
- data/spec/rubocop/cop/rails/read_attribute_spec.rb +6 -12
- data/spec/rubocop/cop/rails/validation_spec.rb +13 -19
- data/spec/rubocop/cop/style/access_control_spec.rb +146 -152
- data/spec/rubocop/cop/style/alias_spec.rb +30 -36
- data/spec/rubocop/cop/style/align_array_spec.rb +57 -56
- data/spec/rubocop/cop/style/align_hash_spec.rb +256 -237
- data/spec/rubocop/cop/style/align_parameters_spec.rb +216 -202
- data/spec/rubocop/cop/style/and_or_spec.rb +51 -55
- data/spec/rubocop/cop/style/ascii_comments_spec.rb +14 -20
- data/spec/rubocop/cop/style/ascii_identifiers_spec.rb +26 -32
- data/spec/rubocop/cop/style/attr_spec.rb +11 -17
- data/spec/rubocop/cop/style/begin_block_spec.rb +6 -12
- data/spec/rubocop/cop/style/block_comments_spec.rb +13 -19
- data/spec/rubocop/cop/style/block_nesting_spec.rb +134 -140
- data/spec/rubocop/cop/style/blocks_spec.rb +81 -84
- data/spec/rubocop/cop/style/case_equality_spec.rb +5 -11
- data/spec/rubocop/cop/style/case_indentation_spec.rb +71 -77
- data/spec/rubocop/cop/style/character_literal_spec.rb +31 -37
- data/spec/rubocop/cop/style/class_and_module_camel_case_spec.rb +31 -37
- data/spec/rubocop/cop/style/class_length_spec.rb +65 -0
- data/spec/rubocop/cop/style/class_methods_spec.rb +35 -41
- data/spec/rubocop/cop/style/class_vars_spec.rb +11 -17
- data/spec/rubocop/cop/style/collection_methods_spec.rb +41 -47
- data/spec/rubocop/cop/style/colon_method_call_spec.rb +45 -51
- data/spec/rubocop/cop/style/comment_annotation_spec.rb +79 -85
- data/spec/rubocop/cop/style/constant_name_spec.rb +45 -51
- data/spec/rubocop/cop/style/def_with_parentheses_spec.rb +28 -34
- data/spec/rubocop/cop/style/def_without_parentheses_spec.rb +23 -29
- data/spec/rubocop/cop/style/documentation_spec.rb +60 -66
- data/spec/rubocop/cop/style/dot_position_spec.rb +50 -56
- data/spec/rubocop/cop/style/empty_line_between_defs_spec.rb +109 -110
- data/spec/rubocop/cop/style/empty_lines_spec.rb +28 -34
- data/spec/rubocop/cop/style/empty_literal_spec.rb +80 -86
- data/spec/rubocop/cop/style/encoding_spec.rb +50 -56
- data/spec/rubocop/cop/style/end_block_spec.rb +6 -12
- data/spec/rubocop/cop/style/end_of_line_spec.rb +13 -19
- data/spec/rubocop/cop/style/even_odd_spec.rb +69 -41
- data/spec/rubocop/cop/style/favor_join_spec.rb +21 -27
- data/spec/rubocop/cop/style/favor_modifier_spec.rb +180 -176
- data/spec/rubocop/cop/style/favor_sprintf_spec.rb +41 -47
- data/spec/rubocop/cop/style/favor_unless_over_negated_if_spec.rb +63 -69
- data/spec/rubocop/cop/style/favor_until_over_negated_while_spec.rb +32 -38
- data/spec/rubocop/cop/style/final_newline_spec.rb +16 -22
- data/spec/rubocop/cop/style/for_spec.rb +18 -24
- data/spec/rubocop/cop/style/global_vars_spec.rb +23 -29
- data/spec/rubocop/cop/style/hash_methods_spec.rb +39 -45
- data/spec/rubocop/cop/style/hash_syntax_spec.rb +93 -65
- data/spec/rubocop/cop/style/if_with_semicolon_spec.rb +11 -17
- data/spec/rubocop/cop/style/indentation_width_spec.rb +377 -383
- data/spec/rubocop/cop/style/lambda_call_spec.rb +40 -22
- data/spec/rubocop/cop/style/lambda_spec.rb +30 -34
- data/spec/rubocop/cop/style/leading_comment_space_spec.rb +44 -50
- data/spec/rubocop/cop/style/line_length_spec.rb +11 -17
- data/spec/rubocop/cop/style/method_call_parentheses_spec.rb +14 -20
- data/spec/rubocop/cop/style/method_called_on_do_end_block_spec.rb +60 -0
- data/spec/rubocop/cop/style/method_length_spec.rb +127 -133
- data/spec/rubocop/cop/style/method_name_spec.rb +103 -0
- data/spec/rubocop/cop/style/module_function_spec.rb +16 -22
- data/spec/rubocop/cop/style/multiline_block_chain_spec.rb +64 -70
- data/spec/rubocop/cop/style/multiline_if_then_spec.rb +74 -80
- data/spec/rubocop/cop/style/nil_comparison_spec.rb +20 -26
- data/spec/rubocop/cop/style/not_spec.rb +13 -19
- data/spec/rubocop/cop/style/numeric_literals_spec.rb +36 -35
- data/spec/rubocop/cop/style/one_line_conditional_spec.rb +5 -11
- data/spec/rubocop/cop/style/op_method_spec.rb +61 -67
- data/spec/rubocop/cop/style/parameter_lists_spec.rb +31 -37
- data/spec/rubocop/cop/style/parentheses_around_condition_spec.rb +62 -68
- data/spec/rubocop/cop/style/perl_backrefs_spec.rb +9 -15
- data/spec/rubocop/cop/style/proc_spec.rb +13 -19
- data/spec/rubocop/cop/style/raise_args_spec.rb +55 -0
- data/spec/rubocop/cop/style/reduce_arguments_spec.rb +49 -55
- data/spec/rubocop/cop/style/redundant_begin_spec.rb +47 -53
- data/spec/rubocop/cop/style/redundant_exception_spec.rb +27 -0
- data/spec/rubocop/cop/style/redundant_return_spec.rb +164 -72
- data/spec/rubocop/cop/style/redundant_self_spec.rb +109 -115
- data/spec/rubocop/cop/style/regexp_literal_spec.rb +57 -63
- data/spec/rubocop/cop/style/rescue_modifier_spec.rb +99 -105
- data/spec/rubocop/cop/style/semicolon_spec.rb +95 -90
- data/spec/rubocop/cop/style/signal_exception_spec.rb +248 -95
- data/spec/rubocop/cop/style/single_line_methods_spec.rb +45 -51
- data/spec/rubocop/cop/style/space_after_colon_spec.rb +14 -20
- data/spec/rubocop/cop/style/space_after_comma_spec.rb +16 -22
- data/spec/rubocop/cop/style/space_after_control_keyword_spec.rb +48 -54
- data/spec/rubocop/cop/style/space_after_method_name_spec.rb +49 -55
- data/spec/rubocop/cop/style/space_after_semicolon_spec.rb +10 -16
- data/spec/rubocop/cop/style/space_around_block_braces_spec.rb +118 -50
- data/spec/rubocop/cop/style/space_around_equals_in_default_parameter_spec.rb +18 -24
- data/spec/rubocop/cop/style/space_around_operators_spec.rb +204 -210
- data/spec/rubocop/cop/style/space_before_modifier_keyword_spec.rb +36 -42
- data/spec/rubocop/cop/style/space_inside_brackets_spec.rb +39 -45
- data/spec/rubocop/cop/style/space_inside_hash_literal_braces_spec.rb +62 -68
- data/spec/rubocop/cop/style/space_inside_parens_spec.rb +18 -24
- data/spec/rubocop/cop/style/special_global_vars_spec.rb +40 -46
- data/spec/rubocop/cop/style/string_literals_spec.rb +148 -70
- data/spec/rubocop/cop/style/symbol_array_spec.rb +28 -34
- data/spec/rubocop/cop/style/symbol_name_spec.rb +132 -138
- data/spec/rubocop/cop/style/tab_spec.rb +9 -15
- data/spec/rubocop/cop/style/ternary_operator_spec.rb +25 -31
- data/spec/rubocop/cop/style/trailing_blank_lines_spec.rb +10 -16
- data/spec/rubocop/cop/style/trailing_whitespace_spec.rb +14 -20
- data/spec/rubocop/cop/style/trivial_accessors_spec.rb +374 -380
- data/spec/rubocop/cop/style/unless_else_spec.rb +17 -23
- data/spec/rubocop/cop/style/variable_interpolation_spec.rb +36 -42
- data/spec/rubocop/cop/style/variable_name_spec.rb +83 -0
- data/spec/rubocop/cop/style/when_then_spec.rb +31 -37
- data/spec/rubocop/cop/style/while_until_do_spec.rb +47 -53
- data/spec/rubocop/cop/style/word_array_spec.rb +49 -55
- data/spec/rubocop/cop/team_spec.rb +125 -127
- data/spec/rubocop/cop/variable_inspector/assignment_spec.rb +176 -180
- data/spec/rubocop/cop/variable_inspector/locatable_spec.rb +580 -586
- data/spec/rubocop/cop/variable_inspector/scope_spec.rb +140 -146
- data/spec/rubocop/cop/variable_inspector/variable_spec.rb +52 -58
- data/spec/rubocop/cop/variable_inspector/variable_table_spec.rb +217 -223
- data/spec/rubocop/cop/variable_inspector_spec.rb +15 -19
- data/spec/rubocop/formatter/clang_style_formatter_spec.rb +35 -36
- data/spec/rubocop/formatter/disabled_config_formatter_spec.rb +2 -2
- data/spec/rubocop/formatter/emacs_style_formatter_spec.rb +24 -1
- data/spec/rubocop/formatter/file_list_formatter_spec.rb +1 -1
- data/spec/rubocop/formatter/formatter_set_spec.rb +3 -3
- data/spec/rubocop/formatter/json_formatter_spec.rb +7 -2
- data/spec/rubocop/formatter/offence_count_formatter_spec.rb +1 -1
- data/spec/rubocop/formatter/progress_formatter_spec.rb +1 -1
- data/spec/rubocop/formatter/simple_text_formatter_spec.rb +55 -6
- data/spec/rubocop/options_spec.rb +233 -0
- data/spec/rubocop/processed_source_spec.rb +85 -42
- data/spec/rubocop/source_parser_spec.rb +108 -110
- data/spec/rubocop/target_finder_spec.rb +125 -127
- data/spec/rubocop/token_spec.rb +15 -17
- metadata +32 -8
- data/lib/rubocop/backports/bsearch.rb +0 -39
- data/lib/rubocop/cop/style/method_and_variable_snake_case.rb +0 -77
- data/spec/rubocop/cop/style/method_and_variable_snake_case_spec.rb +0 -102
@@ -2,61 +2,55 @@
|
|
2
2
|
|
3
3
|
require 'spec_helper'
|
4
4
|
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
inspect_source(encoding, ['# vim:fileencoding=utf-8',
|
56
|
-
'def foo() end'])
|
57
|
-
expect(encoding.messages).to be_empty
|
58
|
-
end
|
59
|
-
end
|
60
|
-
end
|
5
|
+
describe Rubocop::Cop::Style::Encoding do
|
6
|
+
subject(:cop) { described_class.new }
|
7
|
+
|
8
|
+
it 'registers an offence when no encoding present', ruby: 1.9 do
|
9
|
+
inspect_source(cop, ['def foo() end'])
|
10
|
+
|
11
|
+
expect(cop.messages).to eq(
|
12
|
+
['Missing utf-8 encoding comment.'])
|
13
|
+
end
|
14
|
+
|
15
|
+
it 'accepts encoding on first line', ruby: 1.9 do
|
16
|
+
inspect_source(cop, ['# encoding: utf-8',
|
17
|
+
'def foo() end'])
|
18
|
+
|
19
|
+
expect(cop.offences).to be_empty
|
20
|
+
end
|
21
|
+
|
22
|
+
it 'accepts encoding on second line when shebang present', ruby: 1.9 do
|
23
|
+
inspect_source(cop, ['#!/usr/bin/env ruby',
|
24
|
+
'# encoding: utf-8',
|
25
|
+
'def foo() end'])
|
26
|
+
|
27
|
+
expect(cop.messages).to be_empty
|
28
|
+
end
|
29
|
+
|
30
|
+
it 'books an offence when encoding is in the wrong place', ruby: 1.9 do
|
31
|
+
inspect_source(cop, ['def foo() end',
|
32
|
+
'# encoding: utf-8'])
|
33
|
+
|
34
|
+
expect(cop.messages).to eq(
|
35
|
+
['Missing utf-8 encoding comment.'])
|
36
|
+
end
|
37
|
+
|
38
|
+
it 'does not register an offence on Ruby 2.0', ruby: 2.0 do
|
39
|
+
inspect_source(cop, ['def foo() end'])
|
40
|
+
|
41
|
+
expect(cop.offences).to be_empty
|
42
|
+
end
|
43
|
+
|
44
|
+
it 'accepts encoding inserted by magic_encoding gem', ruby: 1.9 do
|
45
|
+
inspect_source(cop, ['# -*- encoding : utf-8 -*-',
|
46
|
+
'def foo() end'])
|
47
|
+
|
48
|
+
expect(cop.messages).to be_empty
|
49
|
+
end
|
50
|
+
|
51
|
+
it 'accepts vim-style encoding comments', ruby: 1.9 do
|
52
|
+
inspect_source(cop, ['# vim:fileencoding=utf-8',
|
53
|
+
'def foo() end'])
|
54
|
+
expect(cop.messages).to be_empty
|
61
55
|
end
|
62
56
|
end
|
@@ -2,18 +2,12 @@
|
|
2
2
|
|
3
3
|
require 'spec_helper'
|
4
4
|
|
5
|
-
|
6
|
-
|
7
|
-
module Style
|
8
|
-
describe EndBlock do
|
9
|
-
subject(:cop) { EndBlock.new }
|
5
|
+
describe Rubocop::Cop::Style::EndBlock do
|
6
|
+
subject(:cop) { described_class.new }
|
10
7
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
8
|
+
it 'reports an offence for an END block' do
|
9
|
+
src = ['END { test }']
|
10
|
+
inspect_source(cop, src)
|
11
|
+
expect(cop.offences.size).to eq(1)
|
18
12
|
end
|
19
13
|
end
|
@@ -2,26 +2,20 @@
|
|
2
2
|
|
3
3
|
require 'spec_helper'
|
4
4
|
|
5
|
-
|
6
|
-
|
7
|
-
module Style
|
8
|
-
describe EndOfLine do
|
9
|
-
subject(:eol) { EndOfLine.new }
|
5
|
+
describe Rubocop::Cop::Style::EndOfLine do
|
6
|
+
subject(:cop) { described_class.new }
|
10
7
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
8
|
+
it 'registers an offence for CR+LF' do
|
9
|
+
pending 'Fails after upgdate to parser-2.0.0.pre3.'
|
10
|
+
inspect_source(cop, ["x=0\r", ''])
|
11
|
+
expect(cop.messages).to eq(
|
12
|
+
['Carriage return character detected.'])
|
13
|
+
end
|
17
14
|
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
15
|
+
it 'registers an offence for CR at end of file' do
|
16
|
+
pending
|
17
|
+
inspect_source(cop, ["x=0\r"])
|
18
|
+
expect(cop.messages).to eq(
|
19
|
+
['Carriage return character detected.'])
|
26
20
|
end
|
27
21
|
end
|
@@ -2,46 +2,74 @@
|
|
2
2
|
|
3
3
|
require 'spec_helper'
|
4
4
|
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
5
|
+
describe Rubocop::Cop::Style::EvenOdd do
|
6
|
+
subject(:cop) { described_class.new }
|
7
|
+
|
8
|
+
it 'registers an offence for x % 2 == 0' do
|
9
|
+
inspect_source(cop,
|
10
|
+
['x % 2 == 0'])
|
11
|
+
expect(cop.offences.size).to eq(1)
|
12
|
+
expect(cop.messages).to eq(['Use Fixnum.even?'])
|
13
|
+
end
|
14
|
+
|
15
|
+
it 'registers an offence for x % 2 != 0' do
|
16
|
+
inspect_source(cop,
|
17
|
+
['x % 2 != 0'])
|
18
|
+
expect(cop.offences.size).to eq(1)
|
19
|
+
expect(cop.messages).to eq(['Use Fixnum.odd?'])
|
20
|
+
end
|
21
|
+
|
22
|
+
it 'registers an offence for (x % 2) == 0' do
|
23
|
+
inspect_source(cop,
|
24
|
+
['(x % 2) == 0'])
|
25
|
+
expect(cop.offences.size).to eq(1)
|
26
|
+
expect(cop.messages).to eq(['Use Fixnum.even?'])
|
27
|
+
end
|
28
|
+
|
29
|
+
it 'registers an offence for (x % 2) != 0' do
|
30
|
+
inspect_source(cop,
|
31
|
+
['(x % 2) != 0'])
|
32
|
+
expect(cop.offences.size).to eq(1)
|
33
|
+
expect(cop.messages).to eq(['Use Fixnum.odd?'])
|
34
|
+
end
|
35
|
+
|
36
|
+
it 'registers an offence for x % 2 == 1' do
|
37
|
+
inspect_source(cop,
|
38
|
+
['x % 2 == 1'])
|
39
|
+
expect(cop.offences.size).to eq(1)
|
40
|
+
expect(cop.messages).to eq(['Use Fixnum.odd?'])
|
41
|
+
end
|
42
|
+
|
43
|
+
it 'registers an offence for x % 2 != 1' do
|
44
|
+
inspect_source(cop,
|
45
|
+
['x % 2 != 1'])
|
46
|
+
expect(cop.offences.size).to eq(1)
|
47
|
+
expect(cop.messages).to eq(['Use Fixnum.even?'])
|
48
|
+
end
|
49
|
+
|
50
|
+
it 'registers an offence for (x % 2) == 1' do
|
51
|
+
inspect_source(cop,
|
52
|
+
['(x % 2) == 1'])
|
53
|
+
expect(cop.offences.size).to eq(1)
|
54
|
+
expect(cop.messages).to eq(['Use Fixnum.odd?'])
|
55
|
+
end
|
56
|
+
|
57
|
+
it 'registers an offence for (x % 2) != 1' do
|
58
|
+
inspect_source(cop,
|
59
|
+
['(x % 2) != 1'])
|
60
|
+
expect(cop.offences.size).to eq(1)
|
61
|
+
expect(cop.messages).to eq(['Use Fixnum.even?'])
|
62
|
+
end
|
63
|
+
|
64
|
+
it 'accepts x % 3 == 0' do
|
65
|
+
inspect_source(cop,
|
66
|
+
['x % 3 == 0'])
|
67
|
+
expect(cop.offences).to be_empty
|
68
|
+
end
|
69
|
+
|
70
|
+
it 'accepts x % 3 != 0' do
|
71
|
+
inspect_source(cop,
|
72
|
+
['x % 3 != 0'])
|
73
|
+
expect(cop.offences).to be_empty
|
46
74
|
end
|
47
75
|
end
|
@@ -2,36 +2,30 @@
|
|
2
2
|
|
3
3
|
require 'spec_helper'
|
4
4
|
|
5
|
-
|
6
|
-
|
7
|
-
module Style
|
8
|
-
describe FavorJoin do
|
9
|
-
subject(:fj) { FavorJoin.new }
|
5
|
+
describe Rubocop::Cop::Style::FavorJoin do
|
6
|
+
subject(:cop) { described_class.new }
|
10
7
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
8
|
+
it 'registers an offence for an array followed by string' do
|
9
|
+
inspect_source(cop,
|
10
|
+
['%w(one two three) * ", "'])
|
11
|
+
expect(cop.offences.size).to eq(1)
|
12
|
+
expect(cop.messages)
|
13
|
+
.to eq(['Favor Array#join over Array#*.'])
|
14
|
+
end
|
18
15
|
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
16
|
+
it 'does not register an offence for numbers' do
|
17
|
+
inspect_source(cop,
|
18
|
+
['%w(one two three) * 4'])
|
19
|
+
expect(cop.offences).to be_empty
|
20
|
+
end
|
24
21
|
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
22
|
+
it 'does not register an offence for ambiguous cases' do
|
23
|
+
inspect_source(cop,
|
24
|
+
['test * ", "'])
|
25
|
+
expect(cop.offences).to be_empty
|
29
26
|
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|
27
|
+
inspect_source(cop,
|
28
|
+
['%w(one two three) * test'])
|
29
|
+
expect(cop.offences).to be_empty
|
36
30
|
end
|
37
31
|
end
|
@@ -2,181 +2,185 @@
|
|
2
2
|
|
3
3
|
require 'spec_helper'
|
4
4
|
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
let(:while_until) { WhileUntilModifier.new(config) }
|
11
|
-
let(:config) do
|
12
|
-
hash = { 'LineLength' => { 'Max' => 79 } }
|
13
|
-
Rubocop::Config.new(hash)
|
14
|
-
end
|
15
|
-
|
16
|
-
it 'registers an offence for multiline if that fits on one line' do
|
17
|
-
# This if statement fits exactly on one line if written as a
|
18
|
-
# modifier.
|
19
|
-
condition = 'a' * 38
|
20
|
-
body = 'b' * 35
|
21
|
-
expect(" #{body} if #{condition}".length).to eq(79)
|
22
|
-
|
23
|
-
inspect_source(if_unless,
|
24
|
-
[" if #{condition}",
|
25
|
-
" #{body}",
|
26
|
-
' end'])
|
27
|
-
expect(if_unless.messages).to eq(
|
28
|
-
['Favor modifier if/unless usage when you have a single-line' +
|
29
|
-
' body. Another good alternative is the usage of control flow' +
|
30
|
-
' &&/||.'])
|
31
|
-
end
|
32
|
-
|
33
|
-
it 'registers an offence for short multiline if near an else etc' do
|
34
|
-
inspect_source(if_unless,
|
35
|
-
['if x',
|
36
|
-
' y',
|
37
|
-
'elsif x1',
|
38
|
-
' y1',
|
39
|
-
'else',
|
40
|
-
' z',
|
41
|
-
'end',
|
42
|
-
'n = a ? 0 : 1',
|
43
|
-
'm = 3 if m0',
|
44
|
-
'',
|
45
|
-
'if a',
|
46
|
-
' b',
|
47
|
-
'end'])
|
48
|
-
expect(if_unless.offences.size).to eq(1)
|
49
|
-
end
|
50
|
-
|
51
|
-
it "accepts multiline if that doesn't fit on one line" do
|
52
|
-
check_too_long(if_unless, 'if')
|
53
|
-
end
|
54
|
-
|
55
|
-
it 'accepts multiline if whose body is more than one line' do
|
56
|
-
check_short_multiline(if_unless, 'if')
|
57
|
-
end
|
58
|
-
|
59
|
-
it 'registers an offence for multiline unless that fits on one line' do
|
60
|
-
inspect_source(if_unless, ['unless a',
|
61
|
-
' b',
|
62
|
-
'end'])
|
63
|
-
expect(if_unless.messages).to eq(
|
64
|
-
['Favor modifier if/unless usage when you have a single-line' +
|
65
|
-
' body. Another good alternative is the usage of control flow' +
|
66
|
-
' &&/||.'])
|
67
|
-
end
|
68
|
-
|
69
|
-
it 'accepts code with EOL comment since user might want to keep it' do
|
70
|
-
inspect_source(if_unless, ['unless a',
|
71
|
-
' b # A comment',
|
72
|
-
'end'])
|
73
|
-
expect(if_unless.offences).to be_empty
|
74
|
-
end
|
75
|
-
|
76
|
-
it 'accepts if-else-end' do
|
77
|
-
inspect_source(if_unless,
|
78
|
-
['if args.last.is_a? Hash then args.pop else ' +
|
79
|
-
'Hash.new end'])
|
80
|
-
expect(if_unless.messages).to be_empty
|
81
|
-
end
|
82
|
-
|
83
|
-
it "accepts multiline unless that doesn't fit on one line" do
|
84
|
-
check_too_long(while_until, 'unless')
|
85
|
-
end
|
86
|
-
|
87
|
-
it 'accepts multiline unless whose body is more than one line' do
|
88
|
-
check_short_multiline(while_until, 'unless')
|
89
|
-
end
|
90
|
-
|
91
|
-
it 'registers an offence for multiline while that fits on one line' do
|
92
|
-
check_really_short(while_until, 'while')
|
93
|
-
end
|
94
|
-
|
95
|
-
it "accepts multiline while that doesn't fit on one line" do
|
96
|
-
check_too_long(while_until, 'while')
|
97
|
-
end
|
98
|
-
|
99
|
-
it 'accepts multiline while whose body is more than one line' do
|
100
|
-
check_short_multiline(while_until, 'while')
|
101
|
-
end
|
102
|
-
|
103
|
-
it 'registers an offence for multiline until that fits on one line' do
|
104
|
-
check_really_short(while_until, 'until')
|
105
|
-
end
|
106
|
-
|
107
|
-
it "accepts multiline until that doesn't fit on one line" do
|
108
|
-
check_too_long(while_until, 'until')
|
109
|
-
end
|
110
|
-
|
111
|
-
it 'accepts multiline until whose body is more than one line' do
|
112
|
-
check_short_multiline(while_until, 'until')
|
113
|
-
end
|
114
|
-
|
115
|
-
it 'accepts an empty condition' do
|
116
|
-
check_empty(if_unless, 'if')
|
117
|
-
check_empty(if_unless, 'unless')
|
118
|
-
check_empty(while_until, 'while')
|
119
|
-
check_empty(while_until, 'until')
|
120
|
-
end
|
121
|
-
|
122
|
-
it 'accepts if/elsif' do
|
123
|
-
inspect_source(if_unless, ['if test',
|
124
|
-
' something',
|
125
|
-
'elsif test2',
|
126
|
-
' something_else',
|
127
|
-
'end'])
|
128
|
-
expect(if_unless.offences).to be_empty
|
129
|
-
end
|
130
|
-
|
131
|
-
it 'accepts modifier while' do
|
132
|
-
inspect_source(while_until, ['ala while bala'])
|
133
|
-
expect(while_until.offences).to be_empty
|
134
|
-
end
|
135
|
-
|
136
|
-
it 'accepts modifier until' do
|
137
|
-
inspect_source(while_until, ['ala until bala'])
|
138
|
-
expect(while_until.offences).to be_empty
|
139
|
-
end
|
140
|
-
|
141
|
-
def check_empty(cop, keyword)
|
142
|
-
inspect_source(cop, ["#{keyword} cond",
|
143
|
-
'end'])
|
144
|
-
expect(cop.offences).to be_empty
|
145
|
-
end
|
146
|
-
|
147
|
-
def check_really_short(cop, keyword)
|
148
|
-
inspect_source(cop, ["#{keyword} a",
|
149
|
-
' b',
|
150
|
-
'end'])
|
151
|
-
expect(cop.messages).to eq(
|
152
|
-
['Favor modifier while/until usage when you have a single-line ' +
|
153
|
-
'body.'])
|
154
|
-
expect(cop.offences.map { |o| o.location.source }).to eq([keyword])
|
155
|
-
end
|
156
|
-
|
157
|
-
def check_too_long(cop, keyword)
|
158
|
-
# This statement is one character too long to fit.
|
159
|
-
condition = 'a' * (40 - keyword.length)
|
160
|
-
body = 'b' * 36
|
161
|
-
expect(" #{body} #{keyword} #{condition}".length).to eq(80)
|
162
|
-
|
163
|
-
inspect_source(cop,
|
164
|
-
[" #{keyword} #{condition}",
|
165
|
-
" #{body}",
|
166
|
-
' end'])
|
167
|
-
|
168
|
-
expect(cop.offences).to be_empty
|
169
|
-
end
|
170
|
-
|
171
|
-
def check_short_multiline(cop, keyword)
|
172
|
-
inspect_source(cop,
|
173
|
-
["#{keyword} ENV['COVERAGE']",
|
174
|
-
" require 'simplecov'",
|
175
|
-
' SimpleCov.start',
|
176
|
-
'end'])
|
177
|
-
expect(cop.messages).to be_empty
|
178
|
-
end
|
179
|
-
end
|
180
|
-
end
|
5
|
+
describe Rubocop::Cop::Style::IfUnlessModifier do
|
6
|
+
subject(:cop) { described_class.new(config) }
|
7
|
+
let(:config) do
|
8
|
+
hash = { 'LineLength' => { 'Max' => 79 } }
|
9
|
+
Rubocop::Config.new(hash)
|
181
10
|
end
|
11
|
+
|
12
|
+
it 'registers an offence for multiline if that fits on one line' do
|
13
|
+
# This if statement fits exactly on one line if written as a
|
14
|
+
# modifier.
|
15
|
+
condition = 'a' * 38
|
16
|
+
body = 'b' * 35
|
17
|
+
expect(" #{body} if #{condition}".length).to eq(79)
|
18
|
+
|
19
|
+
inspect_source(cop,
|
20
|
+
[" if #{condition}",
|
21
|
+
" #{body}",
|
22
|
+
' end'])
|
23
|
+
expect(cop.messages).to eq(
|
24
|
+
['Favor modifier if/unless usage when you have a single-line' +
|
25
|
+
' body. Another good alternative is the usage of control flow' +
|
26
|
+
' &&/||.'])
|
27
|
+
end
|
28
|
+
|
29
|
+
it 'registers an offence for short multiline if near an else etc' do
|
30
|
+
inspect_source(cop,
|
31
|
+
['if x',
|
32
|
+
' y',
|
33
|
+
'elsif x1',
|
34
|
+
' y1',
|
35
|
+
'else',
|
36
|
+
' z',
|
37
|
+
'end',
|
38
|
+
'n = a ? 0 : 1',
|
39
|
+
'm = 3 if m0',
|
40
|
+
'',
|
41
|
+
'if a',
|
42
|
+
' b',
|
43
|
+
'end'])
|
44
|
+
expect(cop.offences.size).to eq(1)
|
45
|
+
end
|
46
|
+
|
47
|
+
it "accepts multiline if that doesn't fit on one line" do
|
48
|
+
check_too_long(cop, 'if')
|
49
|
+
end
|
50
|
+
|
51
|
+
it 'accepts multiline if whose body is more than one line' do
|
52
|
+
check_short_multiline(cop, 'if')
|
53
|
+
end
|
54
|
+
|
55
|
+
it 'registers an offence for multiline unless that fits on one line' do
|
56
|
+
inspect_source(cop, ['unless a',
|
57
|
+
' b',
|
58
|
+
'end'])
|
59
|
+
expect(cop.messages).to eq(
|
60
|
+
['Favor modifier if/unless usage when you have a single-line' +
|
61
|
+
' body. Another good alternative is the usage of control flow' +
|
62
|
+
' &&/||.'])
|
63
|
+
end
|
64
|
+
|
65
|
+
it 'accepts code with EOL comment since user might want to keep it' do
|
66
|
+
inspect_source(cop, ['unless a',
|
67
|
+
' b # A comment',
|
68
|
+
'end'])
|
69
|
+
expect(cop.offences).to be_empty
|
70
|
+
end
|
71
|
+
|
72
|
+
it 'accepts if-else-end' do
|
73
|
+
inspect_source(cop,
|
74
|
+
['if args.last.is_a? Hash then args.pop else ' +
|
75
|
+
'Hash.new end'])
|
76
|
+
expect(cop.messages).to be_empty
|
77
|
+
end
|
78
|
+
|
79
|
+
it 'accepts an empty condition' do
|
80
|
+
check_empty(cop, 'if')
|
81
|
+
check_empty(cop, 'unless')
|
82
|
+
end
|
83
|
+
|
84
|
+
it 'accepts if/elsif' do
|
85
|
+
inspect_source(cop, ['if test',
|
86
|
+
' something',
|
87
|
+
'elsif test2',
|
88
|
+
' something_else',
|
89
|
+
'end'])
|
90
|
+
expect(cop.offences).to be_empty
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
describe Rubocop::Cop::Style::WhileUntilModifier do
|
95
|
+
subject(:cop) { described_class.new(config) }
|
96
|
+
let(:config) do
|
97
|
+
hash = { 'LineLength' => { 'Max' => 79 } }
|
98
|
+
Rubocop::Config.new(hash)
|
99
|
+
end
|
100
|
+
|
101
|
+
it "accepts multiline unless that doesn't fit on one line" do
|
102
|
+
check_too_long(cop, 'unless')
|
103
|
+
end
|
104
|
+
|
105
|
+
it 'accepts multiline unless whose body is more than one line' do
|
106
|
+
check_short_multiline(cop, 'unless')
|
107
|
+
end
|
108
|
+
|
109
|
+
it 'registers an offence for multiline while that fits on one line' do
|
110
|
+
check_really_short(cop, 'while')
|
111
|
+
end
|
112
|
+
|
113
|
+
it "accepts multiline while that doesn't fit on one line" do
|
114
|
+
check_too_long(cop, 'while')
|
115
|
+
end
|
116
|
+
|
117
|
+
it 'accepts multiline while whose body is more than one line' do
|
118
|
+
check_short_multiline(cop, 'while')
|
119
|
+
end
|
120
|
+
|
121
|
+
it 'registers an offence for multiline until that fits on one line' do
|
122
|
+
check_really_short(cop, 'until')
|
123
|
+
end
|
124
|
+
|
125
|
+
it "accepts multiline until that doesn't fit on one line" do
|
126
|
+
check_too_long(cop, 'until')
|
127
|
+
end
|
128
|
+
|
129
|
+
it 'accepts multiline until whose body is more than one line' do
|
130
|
+
check_short_multiline(cop, 'until')
|
131
|
+
end
|
132
|
+
|
133
|
+
it 'accepts an empty condition' do
|
134
|
+
check_empty(cop, 'while')
|
135
|
+
check_empty(cop, 'until')
|
136
|
+
end
|
137
|
+
|
138
|
+
it 'accepts modifier while' do
|
139
|
+
inspect_source(cop, ['ala while bala'])
|
140
|
+
expect(cop.offences).to be_empty
|
141
|
+
end
|
142
|
+
|
143
|
+
it 'accepts modifier until' do
|
144
|
+
inspect_source(cop, ['ala until bala'])
|
145
|
+
expect(cop.offences).to be_empty
|
146
|
+
end
|
147
|
+
end
|
148
|
+
|
149
|
+
def check_empty(cop, keyword)
|
150
|
+
inspect_source(cop, ["#{keyword} cond",
|
151
|
+
'end'])
|
152
|
+
expect(cop.offences).to be_empty
|
153
|
+
end
|
154
|
+
|
155
|
+
def check_really_short(cop, keyword)
|
156
|
+
inspect_source(cop, ["#{keyword} a",
|
157
|
+
' b',
|
158
|
+
'end'])
|
159
|
+
expect(cop.messages).to eq(
|
160
|
+
['Favor modifier while/until usage when you have a single-line ' +
|
161
|
+
'body.'])
|
162
|
+
expect(cop.offences.map { |o| o.location.source }).to eq([keyword])
|
163
|
+
end
|
164
|
+
|
165
|
+
def check_too_long(cop, keyword)
|
166
|
+
# This statement is one character too long to fit.
|
167
|
+
condition = 'a' * (40 - keyword.length)
|
168
|
+
body = 'b' * 36
|
169
|
+
expect(" #{body} #{keyword} #{condition}".length).to eq(80)
|
170
|
+
|
171
|
+
inspect_source(cop,
|
172
|
+
[" #{keyword} #{condition}",
|
173
|
+
" #{body}",
|
174
|
+
' end'])
|
175
|
+
|
176
|
+
expect(cop.offences).to be_empty
|
177
|
+
end
|
178
|
+
|
179
|
+
def check_short_multiline(cop, keyword)
|
180
|
+
inspect_source(cop,
|
181
|
+
["#{keyword} ENV['COVERAGE']",
|
182
|
+
" require 'simplecov'",
|
183
|
+
' SimpleCov.start',
|
184
|
+
'end'])
|
185
|
+
expect(cop.messages).to be_empty
|
182
186
|
end
|