sabat-rubocop 0.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gitignore +50 -0
- data/.rspec +1 -0
- data/.rubocop.yml +7 -0
- data/.travis.yml +7 -0
- data/.yardopts +2 -0
- data/CHANGELOG.md +268 -0
- data/CONTRIBUTING.md +16 -0
- data/Gemfile +7 -0
- data/LICENSE.txt +20 -0
- data/README.md +324 -0
- data/Rakefile +29 -0
- data/bin/rubocop +22 -0
- data/config/default.yml +58 -0
- data/config/disabled.yml +5 -0
- data/config/enabled.yml +403 -0
- data/lib/rubocop.rb +116 -0
- data/lib/rubocop/cli.rb +407 -0
- data/lib/rubocop/config.rb +250 -0
- data/lib/rubocop/config_store.rb +39 -0
- data/lib/rubocop/cop/cop.rb +138 -0
- data/lib/rubocop/cop/lint/assignment_in_condition.rb +54 -0
- data/lib/rubocop/cop/lint/end_alignment.rb +189 -0
- data/lib/rubocop/cop/lint/end_in_method.rb +30 -0
- data/lib/rubocop/cop/lint/ensure_return.rb +22 -0
- data/lib/rubocop/cop/lint/eval.rb +22 -0
- data/lib/rubocop/cop/lint/handle_exceptions.rb +20 -0
- data/lib/rubocop/cop/lint/literal_in_condition.rb +81 -0
- data/lib/rubocop/cop/lint/loop.rb +29 -0
- data/lib/rubocop/cop/lint/rescue_exception.rb +29 -0
- data/lib/rubocop/cop/lint/shadowing_outer_local_variable.rb +34 -0
- data/lib/rubocop/cop/lint/unreachable_code.rb +35 -0
- data/lib/rubocop/cop/lint/unused_local_variable.rb +32 -0
- data/lib/rubocop/cop/lint/void.rb +58 -0
- data/lib/rubocop/cop/offence.rb +136 -0
- data/lib/rubocop/cop/rails/validation.rb +30 -0
- data/lib/rubocop/cop/style/access_control.rb +58 -0
- data/lib/rubocop/cop/style/alias.rb +28 -0
- data/lib/rubocop/cop/style/align_parameters.rb +39 -0
- data/lib/rubocop/cop/style/and_or.rb +45 -0
- data/lib/rubocop/cop/style/ascii_comments.rb +21 -0
- data/lib/rubocop/cop/style/ascii_identifiers.rb +22 -0
- data/lib/rubocop/cop/style/attr.rb +20 -0
- data/lib/rubocop/cop/style/avoid_class_vars.rb +20 -0
- data/lib/rubocop/cop/style/avoid_for.rb +18 -0
- data/lib/rubocop/cop/style/avoid_global_vars.rb +65 -0
- data/lib/rubocop/cop/style/avoid_perl_backrefs.rb +21 -0
- data/lib/rubocop/cop/style/avoid_perlisms.rb +50 -0
- data/lib/rubocop/cop/style/begin_block.rb +18 -0
- data/lib/rubocop/cop/style/block_comments.rb +20 -0
- data/lib/rubocop/cop/style/block_nesting.rb +47 -0
- data/lib/rubocop/cop/style/blocks.rb +27 -0
- data/lib/rubocop/cop/style/case_equality.rb +22 -0
- data/lib/rubocop/cop/style/case_indentation.rb +28 -0
- data/lib/rubocop/cop/style/character_literal.rb +37 -0
- data/lib/rubocop/cop/style/class_and_module_camel_case.rb +33 -0
- data/lib/rubocop/cop/style/class_methods.rb +22 -0
- data/lib/rubocop/cop/style/collection_methods.rb +56 -0
- data/lib/rubocop/cop/style/colon_method_call.rb +29 -0
- data/lib/rubocop/cop/style/constant_name.rb +31 -0
- data/lib/rubocop/cop/style/def_parentheses.rb +70 -0
- data/lib/rubocop/cop/style/documentation.rb +58 -0
- data/lib/rubocop/cop/style/dot_position.rb +25 -0
- data/lib/rubocop/cop/style/empty_line_between_defs.rb +26 -0
- data/lib/rubocop/cop/style/empty_lines.rb +40 -0
- data/lib/rubocop/cop/style/empty_literal.rb +53 -0
- data/lib/rubocop/cop/style/encoding.rb +29 -0
- data/lib/rubocop/cop/style/end_block.rb +18 -0
- data/lib/rubocop/cop/style/end_of_line.rb +23 -0
- data/lib/rubocop/cop/style/favor_join.rb +29 -0
- data/lib/rubocop/cop/style/favor_modifier.rb +118 -0
- data/lib/rubocop/cop/style/favor_sprintf.rb +28 -0
- data/lib/rubocop/cop/style/favor_unless_over_negated_if.rb +54 -0
- data/lib/rubocop/cop/style/hash_syntax.rb +47 -0
- data/lib/rubocop/cop/style/if_then_else.rb +29 -0
- data/lib/rubocop/cop/style/if_with_semicolon.rb +20 -0
- data/lib/rubocop/cop/style/lambda.rb +47 -0
- data/lib/rubocop/cop/style/leading_comment_space.rb +25 -0
- data/lib/rubocop/cop/style/line_continuation.rb +26 -0
- data/lib/rubocop/cop/style/line_length.rb +30 -0
- data/lib/rubocop/cop/style/method_and_variable_snake_case.rb +61 -0
- data/lib/rubocop/cop/style/method_call_parentheses.rb +22 -0
- data/lib/rubocop/cop/style/method_length.rb +57 -0
- data/lib/rubocop/cop/style/multiline_if_then.rb +47 -0
- data/lib/rubocop/cop/style/not.rb +24 -0
- data/lib/rubocop/cop/style/numeric_literals.rb +25 -0
- data/lib/rubocop/cop/style/one_line_conditional.rb +20 -0
- data/lib/rubocop/cop/style/op_method.rb +29 -0
- data/lib/rubocop/cop/style/parameter_lists.rb +42 -0
- data/lib/rubocop/cop/style/parentheses_around_condition.rb +42 -0
- data/lib/rubocop/cop/style/proc.rb +30 -0
- data/lib/rubocop/cop/style/reduce_arguments.rb +34 -0
- data/lib/rubocop/cop/style/regexp_literal.rb +39 -0
- data/lib/rubocop/cop/style/rescue_modifier.rb +55 -0
- data/lib/rubocop/cop/style/semicolon.rb +51 -0
- data/lib/rubocop/cop/style/single_line_methods.rb +48 -0
- data/lib/rubocop/cop/style/space_after_comma_etc.rb +69 -0
- data/lib/rubocop/cop/style/space_after_control_keyword.rb +32 -0
- data/lib/rubocop/cop/style/string_literals.rb +36 -0
- data/lib/rubocop/cop/style/surrounding_space.rb +314 -0
- data/lib/rubocop/cop/style/symbol_array.rb +31 -0
- data/lib/rubocop/cop/style/symbol_name.rb +27 -0
- data/lib/rubocop/cop/style/tab.rb +25 -0
- data/lib/rubocop/cop/style/ternary_operator.rb +49 -0
- data/lib/rubocop/cop/style/trailing_whitespace.rb +24 -0
- data/lib/rubocop/cop/style/trivial_accessors.rb +32 -0
- data/lib/rubocop/cop/style/unless_else.rb +26 -0
- data/lib/rubocop/cop/style/variable_interpolation.rb +32 -0
- data/lib/rubocop/cop/style/when_then.rb +25 -0
- data/lib/rubocop/cop/style/while_until_do.rb +45 -0
- data/lib/rubocop/cop/style/word_array.rb +44 -0
- data/lib/rubocop/cop/util.rb +27 -0
- data/lib/rubocop/cop/variable_inspector.rb +280 -0
- data/lib/rubocop/formatter/base_formatter.rb +119 -0
- data/lib/rubocop/formatter/clang_style_formatter.rb +21 -0
- data/lib/rubocop/formatter/emacs_style_formatter.rb +17 -0
- data/lib/rubocop/formatter/formatter_set.rb +77 -0
- data/lib/rubocop/formatter/json_formatter.rb +76 -0
- data/lib/rubocop/formatter/progress_formatter.rb +63 -0
- data/lib/rubocop/formatter/simple_text_formatter.rb +62 -0
- data/lib/rubocop/version.rb +21 -0
- data/rubocop.gemspec +36 -0
- data/spec/.rubocop.yml +5 -0
- data/spec/project_spec.rb +24 -0
- data/spec/rubocop/cli_spec.rb +906 -0
- data/spec/rubocop/config_spec.rb +470 -0
- data/spec/rubocop/config_store_spec.rb +66 -0
- data/spec/rubocop/cops/cop_spec.rb +38 -0
- data/spec/rubocop/cops/lint/assignment_in_condition_spec.rb +111 -0
- data/spec/rubocop/cops/lint/end_alignment_spec.rb +333 -0
- data/spec/rubocop/cops/lint/end_in_method_spec.rb +35 -0
- data/spec/rubocop/cops/lint/ensure_return_spec.rb +37 -0
- data/spec/rubocop/cops/lint/eval_spec.rb +41 -0
- data/spec/rubocop/cops/lint/handle_exceptions_spec.rb +36 -0
- data/spec/rubocop/cops/lint/literal_in_condition_spec.rb +42 -0
- data/spec/rubocop/cops/lint/loop_spec.rb +33 -0
- data/spec/rubocop/cops/lint/rescue_exception_spec.rb +127 -0
- data/spec/rubocop/cops/lint/shadowing_outer_local_variable_spec.rb +243 -0
- data/spec/rubocop/cops/lint/unreachable_code_spec.rb +69 -0
- data/spec/rubocop/cops/lint/unused_local_variable_spec.rb +497 -0
- data/spec/rubocop/cops/lint/void_spec.rb +63 -0
- data/spec/rubocop/cops/offence_spec.rb +133 -0
- data/spec/rubocop/cops/rails/validation_spec.rb +27 -0
- data/spec/rubocop/cops/style/access_control_spec.rb +142 -0
- data/spec/rubocop/cops/style/alias_spec.rb +47 -0
- data/spec/rubocop/cops/style/align_parameters_spec.rb +199 -0
- data/spec/rubocop/cops/style/and_or_spec.rb +39 -0
- data/spec/rubocop/cops/style/ascii_comments_spec.rb +28 -0
- data/spec/rubocop/cops/style/ascii_identifiers_spec.rb +28 -0
- data/spec/rubocop/cops/style/attr_spec.rb +20 -0
- data/spec/rubocop/cops/style/avoid_class_vars_spec.rb +27 -0
- data/spec/rubocop/cops/style/avoid_for_spec.rb +37 -0
- data/spec/rubocop/cops/style/avoid_global_vars_spec.rb +34 -0
- data/spec/rubocop/cops/style/avoid_perl_backrefs_spec.rb +20 -0
- data/spec/rubocop/cops/style/avoid_perlisms_spec.rb +47 -0
- data/spec/rubocop/cops/style/begin_block_spec.rb +19 -0
- data/spec/rubocop/cops/style/block_comments_spec.rb +27 -0
- data/spec/rubocop/cops/style/block_nesting_spec.rb +159 -0
- data/spec/rubocop/cops/style/blocks_spec.rb +35 -0
- data/spec/rubocop/cops/style/case_equality_spec.rb +18 -0
- data/spec/rubocop/cops/style/case_indentation_spec.rb +88 -0
- data/spec/rubocop/cops/style/character_literal_spec.rb +28 -0
- data/spec/rubocop/cops/style/class_and_module_camel_case_spec.rb +46 -0
- data/spec/rubocop/cops/style/class_methods_spec.rb +51 -0
- data/spec/rubocop/cops/style/collection_methods_spec.rb +41 -0
- data/spec/rubocop/cops/style/colon_method_call_spec.rb +55 -0
- data/spec/rubocop/cops/style/constant_name_spec.rb +56 -0
- data/spec/rubocop/cops/style/def_with_parentheses_spec.rb +40 -0
- data/spec/rubocop/cops/style/def_without_parentheses_spec.rb +34 -0
- data/spec/rubocop/cops/style/documentation_spec.rb +79 -0
- data/spec/rubocop/cops/style/dot_position_spec.rb +30 -0
- data/spec/rubocop/cops/style/empty_line_between_defs_spec.rb +85 -0
- data/spec/rubocop/cops/style/empty_lines_spec.rb +40 -0
- data/spec/rubocop/cops/style/empty_literal_spec.rb +91 -0
- data/spec/rubocop/cops/style/encoding_spec.rb +49 -0
- data/spec/rubocop/cops/style/end_block_spec.rb +19 -0
- data/spec/rubocop/cops/style/end_of_line_spec.rb +25 -0
- data/spec/rubocop/cops/style/favor_join_spec.rb +37 -0
- data/spec/rubocop/cops/style/favor_modifier_spec.rb +160 -0
- data/spec/rubocop/cops/style/favor_sprintf_spec.rb +53 -0
- data/spec/rubocop/cops/style/favor_unless_over_negated_if_spec.rb +64 -0
- data/spec/rubocop/cops/style/favor_until_over_negated_while_spec.rb +47 -0
- data/spec/rubocop/cops/style/hash_syntax_spec.rb +51 -0
- data/spec/rubocop/cops/style/if_with_semicolon_spec.rb +25 -0
- data/spec/rubocop/cops/style/lambda_spec.rb +45 -0
- data/spec/rubocop/cops/style/leading_comment_space_spec.rb +65 -0
- data/spec/rubocop/cops/style/line_continuation_spec.rb +26 -0
- data/spec/rubocop/cops/style/line_length_spec.rb +25 -0
- data/spec/rubocop/cops/style/method_and_variable_snake_case_spec.rb +95 -0
- data/spec/rubocop/cops/style/method_call_parentheses_spec.rb +25 -0
- data/spec/rubocop/cops/style/method_length_spec.rb +151 -0
- data/spec/rubocop/cops/style/multiline_if_then_spec.rb +97 -0
- data/spec/rubocop/cops/style/not_spec.rb +28 -0
- data/spec/rubocop/cops/style/numeric_literals_spec.rb +51 -0
- data/spec/rubocop/cops/style/one_line_conditional_spec.rb +18 -0
- data/spec/rubocop/cops/style/op_method_spec.rb +80 -0
- data/spec/rubocop/cops/style/parameter_lists_spec.rb +49 -0
- data/spec/rubocop/cops/style/parentheses_around_condition_spec.rb +59 -0
- data/spec/rubocop/cops/style/proc_spec.rb +28 -0
- data/spec/rubocop/cops/style/reduce_arguments_spec.rb +59 -0
- data/spec/rubocop/cops/style/regexp_literal_spec.rb +83 -0
- data/spec/rubocop/cops/style/rescue_modifier_spec.rb +122 -0
- data/spec/rubocop/cops/style/semicolon_spec.rb +95 -0
- data/spec/rubocop/cops/style/single_line_methods_spec.rb +54 -0
- data/spec/rubocop/cops/style/space_after_colon_spec.rb +29 -0
- data/spec/rubocop/cops/style/space_after_comma_spec.rb +31 -0
- data/spec/rubocop/cops/style/space_after_control_keyword_spec.rb +69 -0
- data/spec/rubocop/cops/style/space_after_semicolon_spec.rb +24 -0
- data/spec/rubocop/cops/style/space_around_braces_spec.rb +49 -0
- data/spec/rubocop/cops/style/space_around_equals_in_default_parameter_spec.rb +34 -0
- data/spec/rubocop/cops/style/space_around_operators_spec.rb +216 -0
- data/spec/rubocop/cops/style/space_inside_brackets_spec.rb +51 -0
- data/spec/rubocop/cops/style/space_inside_hash_literal_braces_spec.rb +99 -0
- data/spec/rubocop/cops/style/space_inside_parens_spec.rb +33 -0
- data/spec/rubocop/cops/style/string_literals_spec.rb +62 -0
- data/spec/rubocop/cops/style/symbol_array_spec.rb +45 -0
- data/spec/rubocop/cops/style/symbol_name_spec.rb +122 -0
- data/spec/rubocop/cops/style/tab_spec.rb +23 -0
- data/spec/rubocop/cops/style/ternary_operator_spec.rb +42 -0
- data/spec/rubocop/cops/style/trailing_whitespace_spec.rb +29 -0
- data/spec/rubocop/cops/style/trivial_accessors_spec.rb +338 -0
- data/spec/rubocop/cops/style/unless_else_spec.rb +31 -0
- data/spec/rubocop/cops/style/variable_interpolation_spec.rb +53 -0
- data/spec/rubocop/cops/style/when_then_spec.rb +40 -0
- data/spec/rubocop/cops/style/while_until_do_spec.rb +47 -0
- data/spec/rubocop/cops/style/word_array_spec.rb +61 -0
- data/spec/rubocop/cops/variable_inspector_spec.rb +374 -0
- data/spec/rubocop/formatter/base_formatter_spec.rb +190 -0
- data/spec/rubocop/formatter/clang_style_formatter_spec.rb +70 -0
- data/spec/rubocop/formatter/emacs_style_formatter_spec.rb +32 -0
- data/spec/rubocop/formatter/formatter_set_spec.rb +132 -0
- data/spec/rubocop/formatter/json_formatter_spec.rb +142 -0
- data/spec/rubocop/formatter/progress_formatter_spec.rb +196 -0
- data/spec/rubocop/formatter/simple_text_formatter_spec.rb +74 -0
- data/spec/spec_helper.rb +92 -0
- data/spec/support/file_helper.rb +21 -0
- data/spec/support/isolated_environment.rb +27 -0
- data/spec/support/mri_syntax_checker.rb +69 -0
- data/spec/support/shared_examples.rb +33 -0
- metadata +517 -0
@@ -0,0 +1,45 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
module Rubocop
|
6
|
+
module Cop
|
7
|
+
module Style
|
8
|
+
describe SymbolArray do
|
9
|
+
let(:sa) { SymbolArray.new }
|
10
|
+
|
11
|
+
it 'registers an offence for arrays of symbols', { ruby: 2.0 } do
|
12
|
+
inspect_source(sa,
|
13
|
+
['[:one, :two, :three]'])
|
14
|
+
expect(sa.offences.size).to eq(1)
|
15
|
+
end
|
16
|
+
|
17
|
+
it 'does not reg an offence for array with non-syms', { ruby: 2.0 } do
|
18
|
+
inspect_source(sa,
|
19
|
+
['[:one, :two, "three"]'])
|
20
|
+
expect(sa.offences).to be_empty
|
21
|
+
end
|
22
|
+
|
23
|
+
it 'does not reg an offence for array starting with %i',
|
24
|
+
{ ruby: 2.0 } do
|
25
|
+
inspect_source(sa,
|
26
|
+
['%i(one two three)'])
|
27
|
+
expect(sa.offences).to be_empty
|
28
|
+
end
|
29
|
+
|
30
|
+
it 'does not reg an offence for array with one element',
|
31
|
+
{ ruby: 2.0 } do
|
32
|
+
inspect_source(sa,
|
33
|
+
['[:three]'])
|
34
|
+
expect(sa.offences).to be_empty
|
35
|
+
end
|
36
|
+
|
37
|
+
it 'does nothing on Ruby 1.9', { ruby: 1.9 } do
|
38
|
+
inspect_source(sa,
|
39
|
+
['[:one, :two, :three]'])
|
40
|
+
expect(sa.offences).to be_empty
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,122 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
module Rubocop
|
6
|
+
module Cop
|
7
|
+
module Style
|
8
|
+
describe SymbolName do
|
9
|
+
let(:symbol_name) { SymbolName.new }
|
10
|
+
|
11
|
+
before do
|
12
|
+
SymbolName.config =
|
13
|
+
Config.default_configuration.for_cop('SymbolName')
|
14
|
+
end
|
15
|
+
|
16
|
+
context 'when AllowCamelCase is true' do
|
17
|
+
before do
|
18
|
+
SymbolName.config = {
|
19
|
+
'AllowCamelCase' => true
|
20
|
+
}
|
21
|
+
end
|
22
|
+
|
23
|
+
it 'does not register an offence for camel case in names' do
|
24
|
+
inspect_source(symbol_name,
|
25
|
+
['test = :BadIdea'])
|
26
|
+
expect(symbol_name.offences).to be_empty
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
context 'when AllowCamelCase is false' do
|
31
|
+
before do
|
32
|
+
SymbolName.config = {
|
33
|
+
'AllowCamelCase' => false
|
34
|
+
}
|
35
|
+
end
|
36
|
+
|
37
|
+
it 'registers an offence for camel case in names' do
|
38
|
+
inspect_source(symbol_name,
|
39
|
+
['test = :BadIdea'])
|
40
|
+
expect(symbol_name.offences.map(&:message)).to eq(
|
41
|
+
['Use snake_case for symbols.'])
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
it 'registers an offence for symbol used as hash label' do
|
46
|
+
inspect_source(symbol_name,
|
47
|
+
['{ KEY_ONE: 1, KEY_TWO: 2 }'])
|
48
|
+
expect(symbol_name.offences.map(&:message)).to eq(
|
49
|
+
['Use snake_case for symbols.'] * 2)
|
50
|
+
end
|
51
|
+
|
52
|
+
it 'accepts snake case in names' do
|
53
|
+
inspect_source(symbol_name,
|
54
|
+
['test = :good_idea'])
|
55
|
+
expect(symbol_name.offences).to be_empty
|
56
|
+
end
|
57
|
+
|
58
|
+
it 'accepts snake case in hash label names' do
|
59
|
+
inspect_source(symbol_name,
|
60
|
+
['{ one: 1, one_more_3: 2 }'])
|
61
|
+
expect(symbol_name.offences).to be_empty
|
62
|
+
end
|
63
|
+
|
64
|
+
it 'accepts snake case with a prefix @ in names' do
|
65
|
+
inspect_source(symbol_name,
|
66
|
+
['test = :@good_idea'])
|
67
|
+
expect(symbol_name.offences).to be_empty
|
68
|
+
end
|
69
|
+
|
70
|
+
it 'accepts snake case with ? suffix' do
|
71
|
+
inspect_source(symbol_name,
|
72
|
+
['test = :good_idea?'])
|
73
|
+
expect(symbol_name.offences).to be_empty
|
74
|
+
end
|
75
|
+
|
76
|
+
it 'accepts snake case with ! suffix' do
|
77
|
+
inspect_source(symbol_name,
|
78
|
+
['test = :good_idea!'])
|
79
|
+
expect(symbol_name.offences).to be_empty
|
80
|
+
end
|
81
|
+
|
82
|
+
it 'accepts snake case with = suffix' do
|
83
|
+
inspect_source(symbol_name,
|
84
|
+
['test = :good_idea='])
|
85
|
+
expect(symbol_name.offences).to be_empty
|
86
|
+
end
|
87
|
+
|
88
|
+
it 'accepts special cases - !, [] and **' do
|
89
|
+
inspect_source(symbol_name,
|
90
|
+
['test = :**',
|
91
|
+
'test = :!',
|
92
|
+
'test = :[]',
|
93
|
+
'test = :[]='])
|
94
|
+
expect(symbol_name.offences).to be_empty
|
95
|
+
end
|
96
|
+
|
97
|
+
it 'accepts special cases - ==, <=>, >, <, >=, <=' do
|
98
|
+
inspect_source(symbol_name,
|
99
|
+
['test = :==',
|
100
|
+
'test = :<=>',
|
101
|
+
'test = :>',
|
102
|
+
'test = :<',
|
103
|
+
'test = :>=',
|
104
|
+
'test = :<='])
|
105
|
+
expect(symbol_name.offences).to be_empty
|
106
|
+
end
|
107
|
+
|
108
|
+
it 'can handle an alias of and operator without crashing' do
|
109
|
+
inspect_source(symbol_name,
|
110
|
+
['alias + add'])
|
111
|
+
expect(symbol_name.offences).to be_empty
|
112
|
+
end
|
113
|
+
|
114
|
+
it 'registers an offence for SCREAMING_symbol_name' do
|
115
|
+
inspect_source(symbol_name,
|
116
|
+
['test = :BAD_IDEA'])
|
117
|
+
expect(symbol_name.offences.size).to eq(1)
|
118
|
+
end
|
119
|
+
end
|
120
|
+
end
|
121
|
+
end
|
122
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
module Rubocop
|
6
|
+
module Cop
|
7
|
+
module Style
|
8
|
+
describe Tab do
|
9
|
+
let(:tab) { Tab.new }
|
10
|
+
|
11
|
+
it 'registers an offence for a line indented with tab' do
|
12
|
+
inspect_source(tab, ["\tx = 0"])
|
13
|
+
expect(tab.offences.size).to eq(1)
|
14
|
+
end
|
15
|
+
|
16
|
+
it 'accepts a line with tab in a string' do
|
17
|
+
inspect_source(tab, ["(x = \"\t\")"])
|
18
|
+
expect(tab.offences).to be_empty
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
module Rubocop
|
6
|
+
module Cop
|
7
|
+
module Style
|
8
|
+
describe MultilineTernaryOperator do
|
9
|
+
let(:op) { MultilineTernaryOperator.new }
|
10
|
+
|
11
|
+
it 'registers offence for a multiline ternary operator expression' do
|
12
|
+
inspect_source(op, ['a = cond ?',
|
13
|
+
' b : c'])
|
14
|
+
expect(op.offences.size).to eq(1)
|
15
|
+
end
|
16
|
+
|
17
|
+
it 'accepts a single line ternary operator expression' do
|
18
|
+
inspect_source(op, ['a = cond ? b : c'])
|
19
|
+
expect(op.offences).to be_empty
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
describe NestedTernaryOperator do
|
24
|
+
let(:op) { NestedTernaryOperator.new }
|
25
|
+
|
26
|
+
it 'registers an offence for a nested ternary operator expression' do
|
27
|
+
inspect_source(op, ['a ? (b ? b1 : b2) : a2'])
|
28
|
+
expect(op.offences.size).to eq(1)
|
29
|
+
end
|
30
|
+
|
31
|
+
it 'accepts a non-nested ternary operator within an if' do
|
32
|
+
inspect_source(op, ['a = if x',
|
33
|
+
' cond ? b : c',
|
34
|
+
'else',
|
35
|
+
' d',
|
36
|
+
'end'])
|
37
|
+
expect(op.offences).to be_empty
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
module Rubocop
|
6
|
+
module Cop
|
7
|
+
module Style
|
8
|
+
describe TrailingWhitespace do
|
9
|
+
let(:tws) { TrailingWhitespace.new }
|
10
|
+
|
11
|
+
it 'registers an offence for a line ending with space' do
|
12
|
+
source = ['x = 0 ']
|
13
|
+
inspect_source(tws, source)
|
14
|
+
expect(tws.offences.size).to eq(1)
|
15
|
+
end
|
16
|
+
|
17
|
+
it 'registers an offence for a line ending with tab' do
|
18
|
+
inspect_source(tws, ["x = 0\t"])
|
19
|
+
expect(tws.offences.size).to eq(1)
|
20
|
+
end
|
21
|
+
|
22
|
+
it 'accepts a line without trailing whitespace' do
|
23
|
+
inspect_source(tws, ["x = 0\n"])
|
24
|
+
expect(tws.offences).to be_empty
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,338 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
module Rubocop
|
6
|
+
module Cop
|
7
|
+
module Style
|
8
|
+
describe TrivialAccessors do
|
9
|
+
let(:trivial_accessors_finder) { TrivialAccessors.new }
|
10
|
+
|
11
|
+
before :each do
|
12
|
+
trivial_accessors_finder.offences.clear
|
13
|
+
end
|
14
|
+
|
15
|
+
it 'finds trivial reader' do
|
16
|
+
inspect_source(trivial_accessors_finder,
|
17
|
+
['def foo',
|
18
|
+
' @foo',
|
19
|
+
'end',
|
20
|
+
'',
|
21
|
+
'def Foo',
|
22
|
+
' @Foo',
|
23
|
+
'end'])
|
24
|
+
expect(trivial_accessors_finder.offences.size).to eq(2)
|
25
|
+
expect(trivial_accessors_finder.offences
|
26
|
+
.map(&:line).sort).to eq([1, 5])
|
27
|
+
end
|
28
|
+
|
29
|
+
it 'finds trivial reader in a class' do
|
30
|
+
inspect_source(trivial_accessors_finder,
|
31
|
+
['class TrivialFoo',
|
32
|
+
' def foo',
|
33
|
+
' @foo',
|
34
|
+
' end',
|
35
|
+
' def bar',
|
36
|
+
' !foo',
|
37
|
+
' end',
|
38
|
+
'end'])
|
39
|
+
expect(trivial_accessors_finder.offences.size).to eq(1)
|
40
|
+
expect(trivial_accessors_finder.offences
|
41
|
+
.map(&:line).sort).to eq([2])
|
42
|
+
end
|
43
|
+
|
44
|
+
it 'finds trivial reader in a nested class' do
|
45
|
+
inspect_source(trivial_accessors_finder,
|
46
|
+
['class TrivialFoo',
|
47
|
+
' class Nested',
|
48
|
+
' def foo',
|
49
|
+
' @foo',
|
50
|
+
' end',
|
51
|
+
' end',
|
52
|
+
'end'])
|
53
|
+
expect(trivial_accessors_finder.offences.size).to eq(1)
|
54
|
+
expect(trivial_accessors_finder.offences
|
55
|
+
.map(&:line).sort).to eq([3])
|
56
|
+
end
|
57
|
+
|
58
|
+
it 'finds trivial readers in a little less trivial class' do
|
59
|
+
inspect_source(trivial_accessors_finder,
|
60
|
+
['class TrivialFoo',
|
61
|
+
' def foo',
|
62
|
+
' @foo',
|
63
|
+
' end',
|
64
|
+
' def foo_and_bar',
|
65
|
+
' @foo_bar = @foo + @bar',
|
66
|
+
' end',
|
67
|
+
' def foo_bar',
|
68
|
+
' @foo_bar',
|
69
|
+
' end',
|
70
|
+
' def foo?',
|
71
|
+
' foo.present?',
|
72
|
+
' end',
|
73
|
+
' def bar?',
|
74
|
+
' !bar',
|
75
|
+
' end',
|
76
|
+
' def foobar',
|
77
|
+
' foo? ? foo.value : "bar"',
|
78
|
+
' end',
|
79
|
+
' def bar',
|
80
|
+
' foo.bar',
|
81
|
+
' end',
|
82
|
+
' def foo_required?',
|
83
|
+
' super && !bar_required?',
|
84
|
+
' end',
|
85
|
+
' def self.from_omniauth(auth)',
|
86
|
+
' foobars.each do |f|',
|
87
|
+
' # do stuff',
|
88
|
+
' end',
|
89
|
+
' end',
|
90
|
+
' def regex',
|
91
|
+
' %r{\A#{visit node}\Z}',
|
92
|
+
' end',
|
93
|
+
' def array',
|
94
|
+
' [foo, bar].join',
|
95
|
+
' end',
|
96
|
+
' def string',
|
97
|
+
' "string"',
|
98
|
+
' end',
|
99
|
+
' def class',
|
100
|
+
' Foo.class',
|
101
|
+
' end',
|
102
|
+
' def with_return',
|
103
|
+
' return foo',
|
104
|
+
' end',
|
105
|
+
' def captures',
|
106
|
+
' (length - 1).times.map { |i| self[i + 1] }',
|
107
|
+
' end',
|
108
|
+
' def foo val',
|
109
|
+
' super',
|
110
|
+
' @val',
|
111
|
+
' end',
|
112
|
+
'end'])
|
113
|
+
expect(trivial_accessors_finder.offences.size).to eq(2)
|
114
|
+
expect(trivial_accessors_finder.offences
|
115
|
+
.map(&:line).sort).to eq([2, 8])
|
116
|
+
end
|
117
|
+
|
118
|
+
it 'finds trivial reader with braces' do
|
119
|
+
inspect_source(trivial_accessors_finder,
|
120
|
+
['class Test',
|
121
|
+
' # trivial reader with braces',
|
122
|
+
' def name()',
|
123
|
+
' @name',
|
124
|
+
' end',
|
125
|
+
'end'])
|
126
|
+
expect(trivial_accessors_finder.offences.size).to eq(1)
|
127
|
+
expect(trivial_accessors_finder.offences
|
128
|
+
.map(&:line).sort).to eq([3])
|
129
|
+
end
|
130
|
+
|
131
|
+
it 'finds trivial writer without braces' do
|
132
|
+
inspect_source(trivial_accessors_finder,
|
133
|
+
['class Test',
|
134
|
+
' # trivial writer without braces',
|
135
|
+
' def name= name',
|
136
|
+
' @name = name',
|
137
|
+
' end',
|
138
|
+
'end'])
|
139
|
+
expect(trivial_accessors_finder.offences.size).to eq(1)
|
140
|
+
expect(trivial_accessors_finder.offences
|
141
|
+
.map(&:line).sort).to eq([3])
|
142
|
+
end
|
143
|
+
|
144
|
+
it 'does not find trivial writer with function calls' do
|
145
|
+
inspect_source(trivial_accessors_finder,
|
146
|
+
['class TrivialTest',
|
147
|
+
' def test=(val)',
|
148
|
+
' @test = val',
|
149
|
+
' some_function_call',
|
150
|
+
' or_more_of_them',
|
151
|
+
' end',
|
152
|
+
'end'])
|
153
|
+
expect(trivial_accessors_finder.offences).to be_empty
|
154
|
+
end
|
155
|
+
|
156
|
+
it 'finds trivials with less peculiar methods' do
|
157
|
+
inspect_source(trivial_accessors_finder,
|
158
|
+
['class NilStats',
|
159
|
+
'def most_traded_pair',
|
160
|
+
'end',
|
161
|
+
'def win_ratio',
|
162
|
+
'end',
|
163
|
+
'def win_ratio_percentage()',
|
164
|
+
'end',
|
165
|
+
'def pips_won',
|
166
|
+
' 0.0',
|
167
|
+
'end',
|
168
|
+
'def gain_at(date)',
|
169
|
+
' 1',
|
170
|
+
'end',
|
171
|
+
'def gain_percentage',
|
172
|
+
' 0',
|
173
|
+
'end',
|
174
|
+
'def gain_breakdown(options = {})',
|
175
|
+
' []',
|
176
|
+
'end',
|
177
|
+
'def copy_to_all_ratio',
|
178
|
+
' nil',
|
179
|
+
'end',
|
180
|
+
'def trade_population',
|
181
|
+
' {}',
|
182
|
+
'end',
|
183
|
+
'def average_leverage',
|
184
|
+
' 1',
|
185
|
+
'end',
|
186
|
+
'def with_yield',
|
187
|
+
' yield',
|
188
|
+
'rescue Error => e',
|
189
|
+
' #do stuff',
|
190
|
+
'end',
|
191
|
+
'end'])
|
192
|
+
expect(trivial_accessors_finder.offences).to be_empty
|
193
|
+
end
|
194
|
+
|
195
|
+
it 'finds oneliner trivials' do
|
196
|
+
inspect_source(trivial_accessors_finder,
|
197
|
+
['class Oneliner',
|
198
|
+
' def foo; @foo; end',
|
199
|
+
' def foo= foo; @foo = foo; end',
|
200
|
+
'end'])
|
201
|
+
expect(trivial_accessors_finder.offences.size).to eq(2)
|
202
|
+
expect(trivial_accessors_finder.offences
|
203
|
+
.map(&:line).sort).to eq([2, 3])
|
204
|
+
end
|
205
|
+
|
206
|
+
it 'does not find a trivial reader' do
|
207
|
+
inspect_source(trivial_accessors_finder,
|
208
|
+
['def bar',
|
209
|
+
' @bar + foo',
|
210
|
+
'end'])
|
211
|
+
expect(trivial_accessors_finder.offences).to be_empty
|
212
|
+
end
|
213
|
+
|
214
|
+
it 'finds trivial writer' do
|
215
|
+
inspect_source(trivial_accessors_finder,
|
216
|
+
['def foo=(val)',
|
217
|
+
' @foo = val',
|
218
|
+
'end'])
|
219
|
+
expect(trivial_accessors_finder.offences.size).to eq(1)
|
220
|
+
expect(trivial_accessors_finder.offences
|
221
|
+
.map(&:line).sort).to eq([1])
|
222
|
+
end
|
223
|
+
|
224
|
+
it 'finds trivial writer in a class' do
|
225
|
+
inspect_source(trivial_accessors_finder,
|
226
|
+
['class TrivialFoo',
|
227
|
+
' def foo=(val)',
|
228
|
+
' @foo = val',
|
229
|
+
' end',
|
230
|
+
' def void(no_value)',
|
231
|
+
' end',
|
232
|
+
' def inspect(sexp)',
|
233
|
+
' each(:def, sexp) do |item|',
|
234
|
+
' #do stuff',
|
235
|
+
' end',
|
236
|
+
' end',
|
237
|
+
' def if_method(foo)',
|
238
|
+
' if true',
|
239
|
+
' unless false',
|
240
|
+
' #do stuff',
|
241
|
+
' end',
|
242
|
+
' end',
|
243
|
+
' end',
|
244
|
+
'end'])
|
245
|
+
expect(trivial_accessors_finder.offences.size).to eq(1)
|
246
|
+
expect(trivial_accessors_finder.offences
|
247
|
+
.map(&:line).sort).to eq([2])
|
248
|
+
end
|
249
|
+
|
250
|
+
it 'finds trivial accessors in a little less trivial class' do
|
251
|
+
inspect_source(trivial_accessors_finder,
|
252
|
+
['class TrivialFoo',
|
253
|
+
' def foo',
|
254
|
+
' @foo',
|
255
|
+
' end',
|
256
|
+
' def foo_and_bar',
|
257
|
+
' @foo_bar = @foo + @bar',
|
258
|
+
' end',
|
259
|
+
' def foo_bar',
|
260
|
+
' @foo_bar',
|
261
|
+
' end',
|
262
|
+
' def bar=(bar_value)',
|
263
|
+
' @bar = bar_value',
|
264
|
+
' end',
|
265
|
+
'end'])
|
266
|
+
expect(trivial_accessors_finder.offences.size).to eq(3)
|
267
|
+
expect(trivial_accessors_finder.offences
|
268
|
+
.map(&:line).sort).to eq([2, 8, 11])
|
269
|
+
end
|
270
|
+
|
271
|
+
it 'does not find a trivial writer' do
|
272
|
+
inspect_source(trivial_accessors_finder,
|
273
|
+
['def bar=(value)',
|
274
|
+
' @bar = value + 42',
|
275
|
+
'end'])
|
276
|
+
expect(trivial_accessors_finder.offences).to be_empty
|
277
|
+
end
|
278
|
+
|
279
|
+
it 'finds trivial writers in a little less trivial class' do
|
280
|
+
inspect_source(trivial_accessors_finder,
|
281
|
+
['class TrivialFoo',
|
282
|
+
' def foo_bar=(foo, bar)',
|
283
|
+
' @foo_bar = foo + bar',
|
284
|
+
' end',
|
285
|
+
' def universal=(answer=42)',
|
286
|
+
' @universal = answer',
|
287
|
+
' end',
|
288
|
+
' def bar=(bar_value)',
|
289
|
+
' @bar = bar_value',
|
290
|
+
' end',
|
291
|
+
'end'])
|
292
|
+
expect(trivial_accessors_finder.offences.size).to eq(2)
|
293
|
+
expect(trivial_accessors_finder.offences
|
294
|
+
.map(&:line).sort).to eq([5, 8])
|
295
|
+
end
|
296
|
+
|
297
|
+
it 'does not find trivial accessors with method calls' do
|
298
|
+
inspect_source(trivial_accessors_finder,
|
299
|
+
['class TrivialFoo',
|
300
|
+
' def foo_bar(foo)',
|
301
|
+
' foo_bar = foo + 42',
|
302
|
+
' end',
|
303
|
+
' def foo(value)',
|
304
|
+
' foo = []',
|
305
|
+
' # do stuff',
|
306
|
+
' foo',
|
307
|
+
' end',
|
308
|
+
' def bar',
|
309
|
+
' foo_method',
|
310
|
+
' end',
|
311
|
+
'end'])
|
312
|
+
expect(trivial_accessors_finder.offences).to be_empty
|
313
|
+
end
|
314
|
+
|
315
|
+
it 'does not find trivial writer with exceptions' do
|
316
|
+
inspect_source(trivial_accessors_finder,
|
317
|
+
[' def expiration_formatted=(value)',
|
318
|
+
' begin',
|
319
|
+
' @expiration = foo_stuff',
|
320
|
+
' rescue ArgumentError',
|
321
|
+
' @expiration = nil',
|
322
|
+
' end',
|
323
|
+
' self[:expiration] = @expiration',
|
324
|
+
' end'])
|
325
|
+
expect(trivial_accessors_finder.offences).to be_empty
|
326
|
+
end
|
327
|
+
|
328
|
+
it 'accepts an initialize method looking like a writer' do
|
329
|
+
inspect_source(trivial_accessors_finder,
|
330
|
+
[' def initialize(value)',
|
331
|
+
' @top = value',
|
332
|
+
' end'])
|
333
|
+
expect(trivial_accessors_finder.offences).to be_empty
|
334
|
+
end
|
335
|
+
end
|
336
|
+
end
|
337
|
+
end
|
338
|
+
end
|