ridecharge-rubocop 0.0.1
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.
- checksums.yaml +7 -0
- data/.gitignore +22 -0
- data/.rspec +1 -0
- data/.travis.yml +14 -0
- data/CHANGELOG.md +0 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +35 -0
- data/Rakefile +22 -0
- data/bin/ridecharge-rubocop +49 -0
- data/config/0default.yml +8 -0
- data/config/fleet-magic-todo.yml +380 -0
- data/config/rc-todo.yml +190 -0
- data/config/ridecharge-rubocop_todo.yml +73 -0
- data/config/rubocop/default.yml +308 -0
- data/config/rubocop/disabled.yml +9 -0
- data/config/rubocop/enabled.yml +648 -0
- data/config/standard-todo.yml +24 -0
- data/config/tabs.yml +15 -0
- data/config/vehicle-todo.yml +195 -0
- data/lib/ridecharge/rubocop.rb +2 -0
- data/lib/ridecharge/rubocop/version.rb +5 -0
- data/lib/rubocop/config_loader_monkeypatch.rb +117 -0
- data/lib/rubocop/ridecharge.rb +1 -0
- data/ridecharge-rubocop.gemspec +25 -0
- data/spec/isolated_environment_spec.rb +24 -0
- data/spec/project_spec.rb +118 -0
- data/spec/rubocop/cli_spec.rb +1385 -0
- data/spec/rubocop/config_loader_spec.rb +328 -0
- data/spec/rubocop/config_spec.rb +179 -0
- data/spec/rubocop/config_store_spec.rb +53 -0
- data/spec/rubocop/cop/commissioner_spec.rb +83 -0
- data/spec/rubocop/cop/cop_spec.rb +114 -0
- data/spec/rubocop/cop/corrector_spec.rb +59 -0
- data/spec/rubocop/cop/lint/ambiguous_operator_spec.rb +113 -0
- data/spec/rubocop/cop/lint/ambiguous_regexp_literal_spec.rb +35 -0
- data/spec/rubocop/cop/lint/assignment_in_condition_spec.rb +107 -0
- data/spec/rubocop/cop/lint/block_alignment_spec.rb +411 -0
- data/spec/rubocop/cop/lint/condition_position_spec.rb +49 -0
- data/spec/rubocop/cop/lint/debugger_spec.rb +39 -0
- data/spec/rubocop/cop/lint/else_layout_spec.rb +65 -0
- data/spec/rubocop/cop/lint/empty_ensure_spec.rb +27 -0
- data/spec/rubocop/cop/lint/end_alignment_spec.rb +136 -0
- data/spec/rubocop/cop/lint/end_in_method_spec.rb +29 -0
- data/spec/rubocop/cop/lint/ensure_return_spec.rb +39 -0
- data/spec/rubocop/cop/lint/eval_spec.rb +35 -0
- data/spec/rubocop/cop/lint/handle_exceptions_spec.rb +30 -0
- data/spec/rubocop/cop/lint/invalid_character_literal_spec.rb +33 -0
- data/spec/rubocop/cop/lint/literal_in_condition_spec.rb +63 -0
- data/spec/rubocop/cop/lint/loop_spec.rb +27 -0
- data/spec/rubocop/cop/lint/parentheses_as_grouped_expression_spec.rb +57 -0
- data/spec/rubocop/cop/lint/require_parentheses_spec.rb +82 -0
- data/spec/rubocop/cop/lint/rescue_exception_spec.rb +131 -0
- data/spec/rubocop/cop/lint/shadowing_outer_local_variable_spec.rb +237 -0
- data/spec/rubocop/cop/lint/syntax_spec.rb +34 -0
- data/spec/rubocop/cop/lint/unreachable_code_spec.rb +63 -0
- data/spec/rubocop/cop/lint/useless_assignment_spec.rb +1570 -0
- data/spec/rubocop/cop/lint/useless_comparison_spec.rb +30 -0
- data/spec/rubocop/cop/lint/useless_else_without_rescue_spec.rb +48 -0
- data/spec/rubocop/cop/lint/useless_setter_call_spec.rb +149 -0
- data/spec/rubocop/cop/lint/void_spec.rb +57 -0
- data/spec/rubocop/cop/offence_spec.rb +133 -0
- data/spec/rubocop/cop/rails/default_scope_spec.rb +37 -0
- data/spec/rubocop/cop/rails/has_and_belongs_to_many_spec.rb +13 -0
- data/spec/rubocop/cop/rails/output_spec.rb +41 -0
- data/spec/rubocop/cop/rails/read_attribute_spec.rb +13 -0
- data/spec/rubocop/cop/rails/validation_spec.rb +21 -0
- data/spec/rubocop/cop/style/access_modifier_indentation_spec.rb +361 -0
- data/spec/rubocop/cop/style/accessor_method_name_spec.rb +81 -0
- data/spec/rubocop/cop/style/alias_spec.rb +59 -0
- data/spec/rubocop/cop/style/align_array_spec.rb +75 -0
- data/spec/rubocop/cop/style/align_hash_spec.rb +310 -0
- data/spec/rubocop/cop/style/align_parameters_spec.rb +222 -0
- data/spec/rubocop/cop/style/and_or_spec.rb +57 -0
- data/spec/rubocop/cop/style/ascii_comments_spec.rb +22 -0
- data/spec/rubocop/cop/style/ascii_identifiers_spec.rb +36 -0
- data/spec/rubocop/cop/style/attr_spec.rb +19 -0
- data/spec/rubocop/cop/style/begin_block_spec.rb +13 -0
- data/spec/rubocop/cop/style/block_comments_spec.rb +21 -0
- data/spec/rubocop/cop/style/block_nesting_spec.rb +156 -0
- data/spec/rubocop/cop/style/blocks_spec.rb +99 -0
- data/spec/rubocop/cop/style/braces_around_hash_parameters_spec.rb +284 -0
- data/spec/rubocop/cop/style/case_equality_spec.rb +12 -0
- data/spec/rubocop/cop/style/case_indentation_spec.rb +289 -0
- data/spec/rubocop/cop/style/character_literal_spec.rb +37 -0
- data/spec/rubocop/cop/style/class_and_module_camel_case_spec.rb +40 -0
- data/spec/rubocop/cop/style/class_length_spec.rb +131 -0
- data/spec/rubocop/cop/style/class_methods_spec.rb +45 -0
- data/spec/rubocop/cop/style/class_vars_spec.rb +19 -0
- data/spec/rubocop/cop/style/collection_methods_spec.rb +48 -0
- data/spec/rubocop/cop/style/colon_method_call_spec.rb +60 -0
- data/spec/rubocop/cop/style/comment_annotation_spec.rb +86 -0
- data/spec/rubocop/cop/style/constant_name_spec.rb +65 -0
- data/spec/rubocop/cop/style/cyclomatic_complexity_spec.rb +204 -0
- data/spec/rubocop/cop/style/def_with_parentheses_spec.rb +39 -0
- data/spec/rubocop/cop/style/documentation_spec.rb +123 -0
- data/spec/rubocop/cop/style/dot_position_spec.rb +94 -0
- data/spec/rubocop/cop/style/empty_line_between_defs_spec.rb +127 -0
- data/spec/rubocop/cop/style/empty_lines_around_access_modifier_spec.rb +56 -0
- data/spec/rubocop/cop/style/empty_lines_around_body_spec.rb +131 -0
- data/spec/rubocop/cop/style/empty_lines_spec.rb +40 -0
- data/spec/rubocop/cop/style/empty_literal_spec.rb +100 -0
- data/spec/rubocop/cop/style/encoding_spec.rb +56 -0
- data/spec/rubocop/cop/style/end_block_spec.rb +13 -0
- data/spec/rubocop/cop/style/end_of_line_spec.rb +47 -0
- data/spec/rubocop/cop/style/even_odd_spec.rb +75 -0
- data/spec/rubocop/cop/style/favor_join_spec.rb +31 -0
- data/spec/rubocop/cop/style/favor_sprintf_spec.rb +47 -0
- data/spec/rubocop/cop/style/favor_unless_over_negated_if_spec.rb +76 -0
- data/spec/rubocop/cop/style/favor_until_over_negated_while_spec.rb +41 -0
- data/spec/rubocop/cop/style/final_newline_spec.rb +30 -0
- data/spec/rubocop/cop/style/flip_flop_spec.rb +23 -0
- data/spec/rubocop/cop/style/for_spec.rb +105 -0
- data/spec/rubocop/cop/style/global_vars_spec.rb +34 -0
- data/spec/rubocop/cop/style/hash_methods_spec.rb +45 -0
- data/spec/rubocop/cop/style/hash_syntax_spec.rb +131 -0
- data/spec/rubocop/cop/style/if_unless_modifier_spec.rb +128 -0
- data/spec/rubocop/cop/style/if_with_semicolon_spec.rb +19 -0
- data/spec/rubocop/cop/style/indentation_consistency_spec.rb +490 -0
- data/spec/rubocop/cop/style/indentation_width_spec.rb +470 -0
- data/spec/rubocop/cop/style/lambda_call_spec.rb +65 -0
- data/spec/rubocop/cop/style/lambda_spec.rb +41 -0
- data/spec/rubocop/cop/style/leading_comment_space_spec.rb +64 -0
- data/spec/rubocop/cop/style/line_end_concatenation_spec.rb +34 -0
- data/spec/rubocop/cop/style/line_length_spec.rb +20 -0
- data/spec/rubocop/cop/style/method_call_parentheses_spec.rb +59 -0
- data/spec/rubocop/cop/style/method_called_on_do_end_block_spec.rb +60 -0
- data/spec/rubocop/cop/style/method_def_parentheses_spec.rb +106 -0
- data/spec/rubocop/cop/style/method_length_spec.rb +147 -0
- data/spec/rubocop/cop/style/method_name_spec.rb +125 -0
- data/spec/rubocop/cop/style/module_function_spec.rb +24 -0
- data/spec/rubocop/cop/style/multiline_block_chain_spec.rb +78 -0
- data/spec/rubocop/cop/style/multiline_if_then_spec.rb +107 -0
- data/spec/rubocop/cop/style/multiline_ternary_operator_spec.rb +18 -0
- data/spec/rubocop/cop/style/nested_ternary_operator_spec.rb +21 -0
- data/spec/rubocop/cop/style/nil_comparison_spec.rb +30 -0
- data/spec/rubocop/cop/style/not_spec.rb +22 -0
- data/spec/rubocop/cop/style/numeric_literals_spec.rb +64 -0
- data/spec/rubocop/cop/style/one_line_conditional_spec.rb +13 -0
- data/spec/rubocop/cop/style/op_method_spec.rb +74 -0
- data/spec/rubocop/cop/style/parameter_lists_spec.rb +44 -0
- data/spec/rubocop/cop/style/parentheses_around_condition_spec.rb +122 -0
- data/spec/rubocop/cop/style/perl_backrefs_spec.rb +17 -0
- data/spec/rubocop/cop/style/predicate_name_spec.rb +25 -0
- data/spec/rubocop/cop/style/proc_spec.rb +27 -0
- data/spec/rubocop/cop/style/raise_args_spec.rb +82 -0
- data/spec/rubocop/cop/style/redundant_begin_spec.rb +57 -0
- data/spec/rubocop/cop/style/redundant_exception_spec.rb +27 -0
- data/spec/rubocop/cop/style/redundant_return_spec.rb +171 -0
- data/spec/rubocop/cop/style/redundant_self_spec.rb +142 -0
- data/spec/rubocop/cop/style/regexp_literal_spec.rb +83 -0
- data/spec/rubocop/cop/style/rescue_modifier_spec.rb +116 -0
- data/spec/rubocop/cop/style/semicolon_spec.rb +100 -0
- data/spec/rubocop/cop/style/signal_exception_spec.rb +266 -0
- data/spec/rubocop/cop/style/single_line_block_params_spec.rb +68 -0
- data/spec/rubocop/cop/style/single_line_methods_spec.rb +52 -0
- data/spec/rubocop/cop/style/space_after_colon_spec.rb +38 -0
- data/spec/rubocop/cop/style/space_after_comma_spec.rb +30 -0
- data/spec/rubocop/cop/style/space_after_control_keyword_spec.rb +84 -0
- data/spec/rubocop/cop/style/space_after_method_name_spec.rb +70 -0
- data/spec/rubocop/cop/style/space_after_not_spec.rb +22 -0
- data/spec/rubocop/cop/style/space_after_semicolon_spec.rb +23 -0
- data/spec/rubocop/cop/style/space_around_block_braces_spec.rb +283 -0
- data/spec/rubocop/cop/style/space_around_equals_in_parameter_default_spec.rb +33 -0
- data/spec/rubocop/cop/style/space_around_operators_spec.rb +325 -0
- data/spec/rubocop/cop/style/space_before_modifier_keyword_spec.rb +70 -0
- data/spec/rubocop/cop/style/space_inside_brackets_spec.rb +52 -0
- data/spec/rubocop/cop/style/space_inside_hash_literal_braces_spec.rb +138 -0
- data/spec/rubocop/cop/style/space_inside_parens_spec.rb +34 -0
- data/spec/rubocop/cop/style/special_global_vars_spec.rb +56 -0
- data/spec/rubocop/cop/style/string_literals_spec.rb +212 -0
- data/spec/rubocop/cop/style/symbol_array_spec.rb +37 -0
- data/spec/rubocop/cop/style/tab_spec.rb +17 -0
- data/spec/rubocop/cop/style/trailing_blank_lines_spec.rb +43 -0
- data/spec/rubocop/cop/style/trailing_comma_spec.rb +230 -0
- data/spec/rubocop/cop/style/trailing_whitespace_spec.rb +30 -0
- data/spec/rubocop/cop/style/trivial_accessors_spec.rb +415 -0
- data/spec/rubocop/cop/style/unless_else_spec.rb +25 -0
- data/spec/rubocop/cop/style/variable_interpolation_spec.rb +47 -0
- data/spec/rubocop/cop/style/variable_name_spec.rb +107 -0
- data/spec/rubocop/cop/style/when_then_spec.rb +41 -0
- data/spec/rubocop/cop/style/while_until_do_spec.rb +53 -0
- data/spec/rubocop/cop/style/while_until_modifier_spec.rb +75 -0
- data/spec/rubocop/cop/style/word_array_spec.rb +97 -0
- data/spec/rubocop/cop/team_spec.rb +156 -0
- data/spec/rubocop/cop/util_spec.rb +49 -0
- data/spec/rubocop/cop/variable_inspector/assignment_spec.rb +213 -0
- data/spec/rubocop/cop/variable_inspector/locatable_spec.rb +734 -0
- data/spec/rubocop/cop/variable_inspector/scope_spec.rb +184 -0
- data/spec/rubocop/cop/variable_inspector/variable_spec.rb +73 -0
- data/spec/rubocop/cop/variable_inspector/variable_table_spec.rb +269 -0
- data/spec/rubocop/cop/variable_inspector_spec.rb +29 -0
- data/spec/rubocop/file_inspector_spec.rb +78 -0
- data/spec/rubocop/formatter/base_formatter_spec.rb +191 -0
- data/spec/rubocop/formatter/clang_style_formatter_spec.rb +114 -0
- data/spec/rubocop/formatter/colorizable_spec.rb +107 -0
- data/spec/rubocop/formatter/disabled_config_formatter_spec.rb +50 -0
- data/spec/rubocop/formatter/emacs_style_formatter_spec.rb +62 -0
- data/spec/rubocop/formatter/file_list_formatter_spec.rb +33 -0
- data/spec/rubocop/formatter/formatter_set_spec.rb +132 -0
- data/spec/rubocop/formatter/json_formatter_spec.rb +148 -0
- data/spec/rubocop/formatter/offence_count_formatter_spec.rb +52 -0
- data/spec/rubocop/formatter/progress_formatter_spec.rb +182 -0
- data/spec/rubocop/formatter/simple_text_formatter_spec.rb +123 -0
- data/spec/rubocop/options_spec.rb +145 -0
- data/spec/rubocop/path_util_spec.rb +42 -0
- data/spec/rubocop/processed_source_spec.rb +114 -0
- data/spec/rubocop/source_parser_spec.rb +139 -0
- data/spec/rubocop/target_finder_spec.rb +180 -0
- data/spec/rubocop/token_spec.rb +25 -0
- data/spec/spec_helper.rb +136 -0
- data/spec/support/ast_helper.rb +15 -0
- data/spec/support/file_helper.rb +21 -0
- data/spec/support/isolated_environment.rb +34 -0
- data/spec/support/mri_syntax_checker.rb +73 -0
- data/spec/support/shared_context.rb +22 -0
- data/spec/support/shared_examples.rb +33 -0
- data/spec/support/statement_modifier_helper.rb +41 -0
- metadata +511 -0
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
|
|
3
|
+
require 'spec_helper'
|
|
4
|
+
|
|
5
|
+
describe Rubocop::Cop::Style::Tab do
|
|
6
|
+
subject(:cop) { described_class.new }
|
|
7
|
+
|
|
8
|
+
it 'registers an offence for a line indented with tab' do
|
|
9
|
+
inspect_source(cop, ["\tx = 0"])
|
|
10
|
+
expect(cop.offences.size).to eq(1)
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
it 'accepts a line with tab in a string' do
|
|
14
|
+
inspect_source(cop, ["(x = \"\t\")"])
|
|
15
|
+
expect(cop.offences).to be_empty
|
|
16
|
+
end
|
|
17
|
+
end
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
|
|
3
|
+
require 'spec_helper'
|
|
4
|
+
|
|
5
|
+
describe Rubocop::Cop::Style::TrailingBlankLines do
|
|
6
|
+
subject(:cop) { described_class.new(config) }
|
|
7
|
+
let(:config) do
|
|
8
|
+
Rubocop::Config.new('TrailingWhitespace' => { 'Enabled' => true })
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
it 'accepts final newline' do
|
|
12
|
+
inspect_source(cop, ['x = 0', ''])
|
|
13
|
+
expect(cop.offences).to be_empty
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
it 'registers an offence for multiple trailing blank lines' do
|
|
17
|
+
inspect_source(cop, ['x = 0', '', '', '', ''])
|
|
18
|
+
expect(cop.offences.size).to eq(1)
|
|
19
|
+
expect(cop.messages).to eq(['3 trailing blank lines detected.'])
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
it 'auto-corrects unwanted blank lines' do
|
|
23
|
+
new_source = autocorrect_source(cop, ['x = 0', '', '', '', ''])
|
|
24
|
+
expect(new_source).to eq(['x = 0', ''].join("\n"))
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
it 'does not auto-correct if it interferes with TrailingWhitespace' do
|
|
28
|
+
original = ['x = 0', '', ' ', '', '']
|
|
29
|
+
new_source = autocorrect_source(cop, original)
|
|
30
|
+
expect(new_source).to eq(original.join("\n"))
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
context 'with TrailingWhitespace disabled' do
|
|
34
|
+
let(:config) do
|
|
35
|
+
Rubocop::Config.new('TrailingWhitespace' => { 'Enabled' => false })
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
it 'auto-corrects even if some lines have space' do
|
|
39
|
+
new_source = autocorrect_source(cop, ['x = 0', '', ' ', '', ''])
|
|
40
|
+
expect(new_source).to eq(['x = 0', ''].join("\n"))
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
|
|
3
|
+
require 'spec_helper'
|
|
4
|
+
|
|
5
|
+
describe Rubocop::Cop::Style::TrailingComma, :config do
|
|
6
|
+
subject(:cop) { described_class.new(config) }
|
|
7
|
+
let(:cop_config) { { 'EnforcedStyleForMultiline' => 'no_comma' } }
|
|
8
|
+
|
|
9
|
+
context 'with single line list of values' do
|
|
10
|
+
it 'registers an offence for trailing comma in an Array literal' do
|
|
11
|
+
inspect_source(cop, 'VALUES = [1001, 2020, 3333, ]')
|
|
12
|
+
expect(cop.messages)
|
|
13
|
+
.to eq(['Avoid comma after the last item of an array.'])
|
|
14
|
+
expect(cop.highlights).to eq([','])
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
it 'registers an offence for trailing comma in a Hash literal' do
|
|
18
|
+
inspect_source(cop, 'MAP = { a: 1001, b: 2020, c: 3333, }')
|
|
19
|
+
expect(cop.messages)
|
|
20
|
+
.to eq(['Avoid comma after the last item of a hash.'])
|
|
21
|
+
expect(cop.highlights).to eq([','])
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
it 'registers an offence for trailing comma in a method call' do
|
|
25
|
+
inspect_source(cop, 'some_method(a, b, c, )')
|
|
26
|
+
expect(cop.messages)
|
|
27
|
+
.to eq(['Avoid comma after the last parameter of a method call.'])
|
|
28
|
+
expect(cop.highlights).to eq([','])
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
it 'registers an offence for trailing comma in a method call with hash' \
|
|
32
|
+
' parameters at the end' do
|
|
33
|
+
inspect_source(cop, 'some_method(a, b, c: 0, d: 1, )')
|
|
34
|
+
expect(cop.messages)
|
|
35
|
+
.to eq(['Avoid comma after the last parameter of a method call.'])
|
|
36
|
+
expect(cop.highlights).to eq([','])
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
it 'accepts Array literal without trailing comma' do
|
|
40
|
+
inspect_source(cop, 'VALUES = [1001, 2020, 3333]')
|
|
41
|
+
expect(cop.offences).to be_empty
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
it 'accepts empty Array literal' do
|
|
45
|
+
inspect_source(cop, 'VALUES = []')
|
|
46
|
+
expect(cop.offences).to be_empty
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
it 'accepts rescue clause' do
|
|
50
|
+
# The list of rescued classes is an array.
|
|
51
|
+
inspect_source(cop, ['begin',
|
|
52
|
+
' do_something',
|
|
53
|
+
'rescue RuntimeError',
|
|
54
|
+
'end'])
|
|
55
|
+
expect(cop.offences).to be_empty
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
it 'accepts Hash literal without trailing comma' do
|
|
59
|
+
inspect_source(cop, 'MAP = { a: 1001, b: 2020, c: 3333 }')
|
|
60
|
+
expect(cop.offences).to be_empty
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
it 'accepts empty Hash literal' do
|
|
64
|
+
inspect_source(cop, 'MAP = {}')
|
|
65
|
+
expect(cop.offences).to be_empty
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
it 'accepts method call without trailing comma' do
|
|
69
|
+
inspect_source(cop, 'some_method(a, b, c)')
|
|
70
|
+
expect(cop.offences).to be_empty
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
it 'accepts method call without parameters' do
|
|
74
|
+
inspect_source(cop, 'some_method')
|
|
75
|
+
expect(cop.offences).to be_empty
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
context 'with multi-line list of values' do
|
|
80
|
+
context 'when EnforcedStyleForMultiline is no_comma' do
|
|
81
|
+
it 'registers an offence for trailing comma in an Array literal' do
|
|
82
|
+
inspect_source(cop, ['VALUES = [',
|
|
83
|
+
' 1001,',
|
|
84
|
+
' 2020,',
|
|
85
|
+
' 3333,',
|
|
86
|
+
' ]'])
|
|
87
|
+
expect(cop.highlights).to eq([','])
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
it 'registers an offence for trailing comma in a Hash literal' do
|
|
91
|
+
inspect_source(cop, ['MAP = { a: 1001,',
|
|
92
|
+
' b: 2020,',
|
|
93
|
+
' c: 3333,',
|
|
94
|
+
' }'])
|
|
95
|
+
expect(cop.highlights).to eq([','])
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
it 'registers an offence for trailing comma in a method call with ' \
|
|
99
|
+
'hash parameters at the end' do
|
|
100
|
+
inspect_source(cop, ['some_method(',
|
|
101
|
+
' a,',
|
|
102
|
+
' b,',
|
|
103
|
+
' c: 0,',
|
|
104
|
+
' d: 1,)'])
|
|
105
|
+
expect(cop.highlights).to eq([','])
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
it 'accepts an Array literal with no trailing comma' do
|
|
109
|
+
inspect_source(cop, ['VALUES = [ 1001,',
|
|
110
|
+
' 2020,',
|
|
111
|
+
' 3333 ]'])
|
|
112
|
+
expect(cop.offences).to be_empty
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
it 'accepts a Hash literal with no trailing comma' do
|
|
116
|
+
inspect_source(cop, ['MAP = {',
|
|
117
|
+
' a: 1001,',
|
|
118
|
+
' b: 2020,',
|
|
119
|
+
' c: 3333',
|
|
120
|
+
' }'])
|
|
121
|
+
expect(cop.offences).to be_empty
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
it 'accepts a method call with ' \
|
|
125
|
+
'hash parameters at the end and no trailing comma' do
|
|
126
|
+
inspect_source(cop, ['some_method(a,',
|
|
127
|
+
' b,',
|
|
128
|
+
' c: 0,',
|
|
129
|
+
' d: 1',
|
|
130
|
+
' )'])
|
|
131
|
+
expect(cop.offences).to be_empty
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
it 'accepts comma inside a heredoc' \
|
|
135
|
+
' parameters at the end' do
|
|
136
|
+
inspect_source(cop, ['route(help: {',
|
|
137
|
+
" 'auth' => <<-HELP.chomp",
|
|
138
|
+
',',
|
|
139
|
+
'HELP',
|
|
140
|
+
'})'])
|
|
141
|
+
expect(cop.offences).to be_empty
|
|
142
|
+
end
|
|
143
|
+
end
|
|
144
|
+
|
|
145
|
+
context 'when EnforcedStyleForMultiline is comma' do
|
|
146
|
+
let(:cop_config) { { 'EnforcedStyleForMultiline' => 'comma' } }
|
|
147
|
+
|
|
148
|
+
it 'registers an offence for no trailing comma in an Array literal' do
|
|
149
|
+
inspect_source(cop, ['VALUES = [',
|
|
150
|
+
' 1001,',
|
|
151
|
+
' 2020,',
|
|
152
|
+
' 3333]'])
|
|
153
|
+
expect(cop.messages)
|
|
154
|
+
.to eq(['Put a comma after the last item of a multiline array.'])
|
|
155
|
+
expect(cop.highlights).to eq(['3333'])
|
|
156
|
+
end
|
|
157
|
+
|
|
158
|
+
it 'registers an offence for no trailing comma in a Hash literal' do
|
|
159
|
+
inspect_source(cop, ['MAP = { a: 1001,',
|
|
160
|
+
' b: 2020,',
|
|
161
|
+
' c: 3333 }'])
|
|
162
|
+
expect(cop.messages)
|
|
163
|
+
.to eq(['Put a comma after the last item of a multiline hash.'])
|
|
164
|
+
expect(cop.highlights).to eq(['c: 3333'])
|
|
165
|
+
end
|
|
166
|
+
|
|
167
|
+
it 'registers an offence for no trailing comma in a method call with' \
|
|
168
|
+
' hash parameters at the end' do
|
|
169
|
+
inspect_source(cop, ['some_method(',
|
|
170
|
+
' a,',
|
|
171
|
+
' b,',
|
|
172
|
+
' c: 0,',
|
|
173
|
+
' d: 1',
|
|
174
|
+
' )'])
|
|
175
|
+
expect(cop.messages)
|
|
176
|
+
.to eq(['Put a comma after the last parameter of a multiline ' \
|
|
177
|
+
'method call.'])
|
|
178
|
+
expect(cop.highlights).to eq(['d: 1'])
|
|
179
|
+
end
|
|
180
|
+
|
|
181
|
+
it 'accepts trailing comma in an Array literal' do
|
|
182
|
+
inspect_source(cop, ['VALUES = [1001,',
|
|
183
|
+
' 2020,',
|
|
184
|
+
' 3333,',
|
|
185
|
+
' ]'])
|
|
186
|
+
expect(cop.offences).to be_empty
|
|
187
|
+
end
|
|
188
|
+
|
|
189
|
+
it 'accepts trailing comma in a Hash literal' do
|
|
190
|
+
inspect_source(cop, ['MAP = {',
|
|
191
|
+
' a: 1001,',
|
|
192
|
+
' b: 2020,',
|
|
193
|
+
' c: 3333,',
|
|
194
|
+
' }'])
|
|
195
|
+
expect(cop.offences).to be_empty
|
|
196
|
+
end
|
|
197
|
+
|
|
198
|
+
it 'accepts trailing comma in a method call with hash' \
|
|
199
|
+
' parameters at the end' do
|
|
200
|
+
inspect_source(cop, ['some_method(',
|
|
201
|
+
' a,',
|
|
202
|
+
' b,',
|
|
203
|
+
' c: 0,',
|
|
204
|
+
' d: 1,',
|
|
205
|
+
' )'])
|
|
206
|
+
expect(cop.offences).to be_empty
|
|
207
|
+
end
|
|
208
|
+
|
|
209
|
+
it 'accepts a multiline word array' do
|
|
210
|
+
inspect_source(cop, ['ingredients = %w(',
|
|
211
|
+
' sausage',
|
|
212
|
+
' anchovies',
|
|
213
|
+
' olives',
|
|
214
|
+
')'])
|
|
215
|
+
expect(cop.offences).to be_empty
|
|
216
|
+
end
|
|
217
|
+
|
|
218
|
+
it 'accepts missing comma after a heredoc' do
|
|
219
|
+
# A heredoc that's the last item in a literal or parameter list can not
|
|
220
|
+
# have a trailing comma. It's a syntax error.
|
|
221
|
+
inspect_source(cop, ['route(help: {',
|
|
222
|
+
" 'auth' => <<-HELP.chomp",
|
|
223
|
+
'...',
|
|
224
|
+
'HELP',
|
|
225
|
+
'},)']) # We still need a comma after the hash.
|
|
226
|
+
expect(cop.offences).to be_empty
|
|
227
|
+
end
|
|
228
|
+
end
|
|
229
|
+
end
|
|
230
|
+
end
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
|
|
3
|
+
require 'spec_helper'
|
|
4
|
+
|
|
5
|
+
describe Rubocop::Cop::Style::TrailingWhitespace do
|
|
6
|
+
subject(:cop) { described_class.new }
|
|
7
|
+
|
|
8
|
+
it 'registers an offence for a line ending with space' do
|
|
9
|
+
source = ['x = 0 ']
|
|
10
|
+
inspect_source(cop, source)
|
|
11
|
+
expect(cop.offences.size).to eq(1)
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
it 'registers an offence for a line ending with tab' do
|
|
15
|
+
inspect_source(cop, ["x = 0\t"])
|
|
16
|
+
expect(cop.offences.size).to eq(1)
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
it 'accepts a line without trailing whitespace' do
|
|
20
|
+
inspect_source(cop, ["x = 0\n"])
|
|
21
|
+
expect(cop.offences).to be_empty
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
it 'auto-corrects unwanted space' do
|
|
25
|
+
new_source = autocorrect_source(cop, ['x = 0 ',
|
|
26
|
+
"x = 0\t"])
|
|
27
|
+
expect(new_source).to eq(['x = 0',
|
|
28
|
+
'x = 0'].join("\n"))
|
|
29
|
+
end
|
|
30
|
+
end
|
|
@@ -0,0 +1,415 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
|
|
3
|
+
require 'spec_helper'
|
|
4
|
+
|
|
5
|
+
describe Rubocop::Cop::Style::TrivialAccessors, :config do
|
|
6
|
+
subject(:cop) { described_class.new(config) }
|
|
7
|
+
let(:cop_config) { {} }
|
|
8
|
+
|
|
9
|
+
it 'finds trivial reader' do
|
|
10
|
+
inspect_source(cop,
|
|
11
|
+
['def foo',
|
|
12
|
+
' @foo',
|
|
13
|
+
'end',
|
|
14
|
+
'',
|
|
15
|
+
'def Foo',
|
|
16
|
+
' @Foo',
|
|
17
|
+
'end'])
|
|
18
|
+
expect(cop.offences.size).to eq(2)
|
|
19
|
+
expect(cop.offences
|
|
20
|
+
.map(&:line).sort).to eq([1, 5])
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
it 'finds trivial reader in a class' do
|
|
24
|
+
inspect_source(cop,
|
|
25
|
+
['class TrivialFoo',
|
|
26
|
+
' def foo',
|
|
27
|
+
' @foo',
|
|
28
|
+
' end',
|
|
29
|
+
' def bar',
|
|
30
|
+
' !foo',
|
|
31
|
+
' end',
|
|
32
|
+
'end'])
|
|
33
|
+
expect(cop.offences.size).to eq(1)
|
|
34
|
+
expect(cop.offences
|
|
35
|
+
.map(&:line).sort).to eq([2])
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
it 'finds trivial reader in a class method' do
|
|
39
|
+
inspect_source(cop,
|
|
40
|
+
['class TrivialFoo',
|
|
41
|
+
' def self.foo',
|
|
42
|
+
' @foo',
|
|
43
|
+
' end',
|
|
44
|
+
' def bar',
|
|
45
|
+
' !foo',
|
|
46
|
+
' end',
|
|
47
|
+
'end'])
|
|
48
|
+
expect(cop.offences.size).to eq(1)
|
|
49
|
+
expect(cop.offences
|
|
50
|
+
.map(&:line).sort).to eq([2])
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
it 'finds trivial reader in a nested class' do
|
|
54
|
+
inspect_source(cop,
|
|
55
|
+
['class TrivialFoo',
|
|
56
|
+
' class Nested',
|
|
57
|
+
' def foo',
|
|
58
|
+
' @foo',
|
|
59
|
+
' end',
|
|
60
|
+
' end',
|
|
61
|
+
'end'])
|
|
62
|
+
expect(cop.offences.size).to eq(1)
|
|
63
|
+
expect(cop.offences
|
|
64
|
+
.map(&:line).sort).to eq([3])
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
it 'finds trivial readers in a little less trivial class' do
|
|
68
|
+
inspect_source(cop,
|
|
69
|
+
['class TrivialFoo',
|
|
70
|
+
' def foo',
|
|
71
|
+
' @foo',
|
|
72
|
+
' end',
|
|
73
|
+
' def foo_and_bar',
|
|
74
|
+
' @foo_bar = @foo + @bar',
|
|
75
|
+
' end',
|
|
76
|
+
' def foo_bar',
|
|
77
|
+
' @foo_bar',
|
|
78
|
+
' end',
|
|
79
|
+
' def foo?',
|
|
80
|
+
' foo.present?',
|
|
81
|
+
' end',
|
|
82
|
+
' def bar?',
|
|
83
|
+
' !bar',
|
|
84
|
+
' end',
|
|
85
|
+
' def foobar',
|
|
86
|
+
' foo? ? foo.value : "bar"',
|
|
87
|
+
' end',
|
|
88
|
+
' def bar',
|
|
89
|
+
' foo.bar',
|
|
90
|
+
' end',
|
|
91
|
+
' def foo_required?',
|
|
92
|
+
' super && !bar_required?',
|
|
93
|
+
' end',
|
|
94
|
+
' def self.from_omniauth(auth)',
|
|
95
|
+
' foobars.each do |f|',
|
|
96
|
+
' # do stuff',
|
|
97
|
+
' end',
|
|
98
|
+
' end',
|
|
99
|
+
' def regex',
|
|
100
|
+
' %r{\A#{visit node}\Z}',
|
|
101
|
+
' end',
|
|
102
|
+
' def array',
|
|
103
|
+
' [foo, bar].join',
|
|
104
|
+
' end',
|
|
105
|
+
' def string',
|
|
106
|
+
' "string"',
|
|
107
|
+
' end',
|
|
108
|
+
' def class',
|
|
109
|
+
' Foo.class',
|
|
110
|
+
' end',
|
|
111
|
+
' def with_return',
|
|
112
|
+
' return foo',
|
|
113
|
+
' end',
|
|
114
|
+
' def captures',
|
|
115
|
+
' (length - 1).times.map { |i| self[i + 1] }',
|
|
116
|
+
' end',
|
|
117
|
+
' def foo val',
|
|
118
|
+
' super',
|
|
119
|
+
' @val',
|
|
120
|
+
' end',
|
|
121
|
+
'end'])
|
|
122
|
+
expect(cop.offences.size).to eq(2)
|
|
123
|
+
expect(cop.offences
|
|
124
|
+
.map(&:line).sort).to eq([2, 8])
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
it 'finds trivial reader with braces' do
|
|
128
|
+
inspect_source(cop,
|
|
129
|
+
['class Test',
|
|
130
|
+
' # trivial reader with braces',
|
|
131
|
+
' def name()',
|
|
132
|
+
' @name',
|
|
133
|
+
' end',
|
|
134
|
+
'end'])
|
|
135
|
+
expect(cop.offences.size).to eq(1)
|
|
136
|
+
expect(cop.offences
|
|
137
|
+
.map(&:line).sort).to eq([3])
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
it 'finds trivial writer without braces' do
|
|
141
|
+
inspect_source(cop,
|
|
142
|
+
['class Test',
|
|
143
|
+
' # trivial writer without braces',
|
|
144
|
+
' def name= name',
|
|
145
|
+
' @name = name',
|
|
146
|
+
' end',
|
|
147
|
+
'end'])
|
|
148
|
+
expect(cop.offences.size).to eq(1)
|
|
149
|
+
expect(cop.offences
|
|
150
|
+
.map(&:line).sort).to eq([3])
|
|
151
|
+
end
|
|
152
|
+
|
|
153
|
+
it 'does not find trivial writer with function calls' do
|
|
154
|
+
inspect_source(cop,
|
|
155
|
+
['class TrivialTest',
|
|
156
|
+
' def test=(val)',
|
|
157
|
+
' @test = val',
|
|
158
|
+
' some_function_call',
|
|
159
|
+
' or_more_of_them',
|
|
160
|
+
' end',
|
|
161
|
+
'end'])
|
|
162
|
+
expect(cop.offences).to be_empty
|
|
163
|
+
end
|
|
164
|
+
|
|
165
|
+
it 'finds trivials with less peculiar methods' do
|
|
166
|
+
inspect_source(cop,
|
|
167
|
+
['class NilStats',
|
|
168
|
+
'def most_traded_pair',
|
|
169
|
+
'end',
|
|
170
|
+
'def win_ratio',
|
|
171
|
+
'end',
|
|
172
|
+
'def win_ratio_percentage()',
|
|
173
|
+
'end',
|
|
174
|
+
'def pips_won',
|
|
175
|
+
' 0.0',
|
|
176
|
+
'end',
|
|
177
|
+
'def gain_at(date)',
|
|
178
|
+
' 1',
|
|
179
|
+
'end',
|
|
180
|
+
'def gain_percentage',
|
|
181
|
+
' 0',
|
|
182
|
+
'end',
|
|
183
|
+
'def gain_breakdown(options = {})',
|
|
184
|
+
' []',
|
|
185
|
+
'end',
|
|
186
|
+
'def copy_to_all_ratio',
|
|
187
|
+
' nil',
|
|
188
|
+
'end',
|
|
189
|
+
'def trade_population',
|
|
190
|
+
' {}',
|
|
191
|
+
'end',
|
|
192
|
+
'def average_leverage',
|
|
193
|
+
' 1',
|
|
194
|
+
'end',
|
|
195
|
+
'def with_yield',
|
|
196
|
+
' yield',
|
|
197
|
+
'rescue Error => e',
|
|
198
|
+
' #do stuff',
|
|
199
|
+
'end',
|
|
200
|
+
'end'])
|
|
201
|
+
expect(cop.offences).to be_empty
|
|
202
|
+
end
|
|
203
|
+
|
|
204
|
+
it 'treats splats as non-trivial' do
|
|
205
|
+
inspect_source(cop,
|
|
206
|
+
[' def splatomatic(*values)',
|
|
207
|
+
' @splatomatic = values',
|
|
208
|
+
' end'])
|
|
209
|
+
expect(cop.offences).to be_empty
|
|
210
|
+
end
|
|
211
|
+
|
|
212
|
+
it 'finds oneliner trivials' do
|
|
213
|
+
inspect_source(cop,
|
|
214
|
+
['class Oneliner',
|
|
215
|
+
' def foo; @foo; end',
|
|
216
|
+
' def foo= foo; @foo = foo; end',
|
|
217
|
+
'end'])
|
|
218
|
+
expect(cop.offences.size).to eq(2)
|
|
219
|
+
expect(cop.offences
|
|
220
|
+
.map(&:line).sort).to eq([2, 3])
|
|
221
|
+
end
|
|
222
|
+
|
|
223
|
+
it 'does not find a trivial reader' do
|
|
224
|
+
inspect_source(cop,
|
|
225
|
+
['def bar',
|
|
226
|
+
' @bar + foo',
|
|
227
|
+
'end'])
|
|
228
|
+
expect(cop.offences).to be_empty
|
|
229
|
+
end
|
|
230
|
+
|
|
231
|
+
it 'finds trivial writer' do
|
|
232
|
+
inspect_source(cop,
|
|
233
|
+
['def foo=(val)',
|
|
234
|
+
' @foo = val',
|
|
235
|
+
'end'])
|
|
236
|
+
expect(cop.offences.size).to eq(1)
|
|
237
|
+
expect(cop.offences
|
|
238
|
+
.map(&:line).sort).to eq([1])
|
|
239
|
+
end
|
|
240
|
+
|
|
241
|
+
it 'finds trivial writer in a class' do
|
|
242
|
+
inspect_source(cop,
|
|
243
|
+
['class TrivialFoo',
|
|
244
|
+
' def foo=(val)',
|
|
245
|
+
' @foo = val',
|
|
246
|
+
' end',
|
|
247
|
+
' def void(no_value)',
|
|
248
|
+
' end',
|
|
249
|
+
' def inspect(sexp)',
|
|
250
|
+
' each(:def, sexp) do |item|',
|
|
251
|
+
' #do stuff',
|
|
252
|
+
' end',
|
|
253
|
+
' end',
|
|
254
|
+
' def if_method(foo)',
|
|
255
|
+
' if true',
|
|
256
|
+
' unless false',
|
|
257
|
+
' #do stuff',
|
|
258
|
+
' end',
|
|
259
|
+
' end',
|
|
260
|
+
' end',
|
|
261
|
+
'end'])
|
|
262
|
+
expect(cop.offences.size).to eq(1)
|
|
263
|
+
expect(cop.offences
|
|
264
|
+
.map(&:line).sort).to eq([2])
|
|
265
|
+
end
|
|
266
|
+
|
|
267
|
+
it 'finds trivial accessors in a little less trivial class' do
|
|
268
|
+
inspect_source(cop,
|
|
269
|
+
['class TrivialFoo',
|
|
270
|
+
' def foo',
|
|
271
|
+
' @foo',
|
|
272
|
+
' end',
|
|
273
|
+
' def foo_and_bar',
|
|
274
|
+
' @foo_bar = @foo + @bar',
|
|
275
|
+
' end',
|
|
276
|
+
' def foo_bar',
|
|
277
|
+
' @foo_bar',
|
|
278
|
+
' end',
|
|
279
|
+
' def bar=(bar_value)',
|
|
280
|
+
' @bar = bar_value',
|
|
281
|
+
' end',
|
|
282
|
+
'end'])
|
|
283
|
+
expect(cop.offences.size).to eq(3)
|
|
284
|
+
expect(cop.offences
|
|
285
|
+
.map(&:line).sort).to eq([2, 8, 11])
|
|
286
|
+
end
|
|
287
|
+
|
|
288
|
+
it 'does not find a trivial writer' do
|
|
289
|
+
inspect_source(cop,
|
|
290
|
+
['def bar=(value)',
|
|
291
|
+
' @bar = value + 42',
|
|
292
|
+
'end'])
|
|
293
|
+
expect(cop.offences).to be_empty
|
|
294
|
+
end
|
|
295
|
+
|
|
296
|
+
it 'finds trivial writers in a little less trivial class' do
|
|
297
|
+
inspect_source(cop,
|
|
298
|
+
['class TrivialFoo',
|
|
299
|
+
' def foo_bar=(foo, bar)',
|
|
300
|
+
' @foo_bar = foo + bar',
|
|
301
|
+
' end',
|
|
302
|
+
' def universal=(answer=42)',
|
|
303
|
+
' @universal = answer',
|
|
304
|
+
' end',
|
|
305
|
+
' def bar=(bar_value)',
|
|
306
|
+
' @bar = bar_value',
|
|
307
|
+
' end',
|
|
308
|
+
'end'])
|
|
309
|
+
expect(cop.offences.size).to eq(2)
|
|
310
|
+
expect(cop.offences
|
|
311
|
+
.map(&:line).sort).to eq([5, 8])
|
|
312
|
+
end
|
|
313
|
+
|
|
314
|
+
it 'does not find trivial accessors with method calls' do
|
|
315
|
+
inspect_source(cop,
|
|
316
|
+
['class TrivialFoo',
|
|
317
|
+
' def foo_bar(foo)',
|
|
318
|
+
' foo_bar = foo + 42',
|
|
319
|
+
' end',
|
|
320
|
+
' def foo(value)',
|
|
321
|
+
' foo = []',
|
|
322
|
+
' # do stuff',
|
|
323
|
+
' foo',
|
|
324
|
+
' end',
|
|
325
|
+
' def bar',
|
|
326
|
+
' foo_method',
|
|
327
|
+
' end',
|
|
328
|
+
'end'])
|
|
329
|
+
expect(cop.offences).to be_empty
|
|
330
|
+
end
|
|
331
|
+
|
|
332
|
+
it 'does not find trivial writer with exceptions' do
|
|
333
|
+
inspect_source(cop,
|
|
334
|
+
[' def expiration_formatted=(value)',
|
|
335
|
+
' begin',
|
|
336
|
+
' @expiration = foo_stuff',
|
|
337
|
+
' rescue ArgumentError',
|
|
338
|
+
' @expiration = nil',
|
|
339
|
+
' end',
|
|
340
|
+
' self[:expiration] = @expiration',
|
|
341
|
+
' end'])
|
|
342
|
+
expect(cop.offences).to be_empty
|
|
343
|
+
end
|
|
344
|
+
|
|
345
|
+
it 'accepts an initialize method looking like a writer' do
|
|
346
|
+
inspect_source(cop,
|
|
347
|
+
[' def initialize(value)',
|
|
348
|
+
' @top = value',
|
|
349
|
+
' end'])
|
|
350
|
+
expect(cop.offences).to be_empty
|
|
351
|
+
end
|
|
352
|
+
|
|
353
|
+
context 'exact name match required' do
|
|
354
|
+
let(:cop_config) { { 'ExactNameMatch' => true } }
|
|
355
|
+
|
|
356
|
+
it 'finds only 1 trivial reader' do
|
|
357
|
+
inspect_source(cop,
|
|
358
|
+
['def foo',
|
|
359
|
+
' @foo',
|
|
360
|
+
'end',
|
|
361
|
+
'',
|
|
362
|
+
'def bar',
|
|
363
|
+
' @barr',
|
|
364
|
+
'end'])
|
|
365
|
+
expect(cop.offences.size).to eq(1)
|
|
366
|
+
expect(cop.offences
|
|
367
|
+
.map(&:line).sort).to eq([1])
|
|
368
|
+
end
|
|
369
|
+
|
|
370
|
+
it 'finds only 1 trivial writer' do
|
|
371
|
+
inspect_source(cop,
|
|
372
|
+
['def foo=(foo)',
|
|
373
|
+
' @foo = foo',
|
|
374
|
+
'end',
|
|
375
|
+
'',
|
|
376
|
+
'def bar=(bar)',
|
|
377
|
+
' @barr = bar',
|
|
378
|
+
'end'])
|
|
379
|
+
expect(cop.offences.size).to eq(1)
|
|
380
|
+
expect(cop.offences
|
|
381
|
+
.map(&:line).sort).to eq([1])
|
|
382
|
+
end
|
|
383
|
+
end
|
|
384
|
+
|
|
385
|
+
context 'with predicates allowed' do
|
|
386
|
+
let(:cop_config) { { 'AllowPredicates' => true } }
|
|
387
|
+
|
|
388
|
+
it 'ignores accessors ending with a question mark' do
|
|
389
|
+
inspect_source(cop,
|
|
390
|
+
[' def foo?',
|
|
391
|
+
' @foo',
|
|
392
|
+
' end'])
|
|
393
|
+
expect(cop.offences).to be_empty
|
|
394
|
+
end
|
|
395
|
+
end
|
|
396
|
+
|
|
397
|
+
context 'with whitelist defined' do
|
|
398
|
+
let(:cop_config) { { 'Whitelist' => ['to_foo', 'bar='] } }
|
|
399
|
+
|
|
400
|
+
it 'ignores accessors in the whitelist' do
|
|
401
|
+
inspect_source(cop,
|
|
402
|
+
[' def to_foo',
|
|
403
|
+
' @foo',
|
|
404
|
+
' end'])
|
|
405
|
+
expect(cop.offences).to be_empty
|
|
406
|
+
end
|
|
407
|
+
it 'ignores writers in the whitelist' do
|
|
408
|
+
inspect_source(cop,
|
|
409
|
+
[' def bar=(bar)',
|
|
410
|
+
' @bar = bar',
|
|
411
|
+
' end'])
|
|
412
|
+
expect(cop.offences).to be_empty
|
|
413
|
+
end
|
|
414
|
+
end
|
|
415
|
+
end
|