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,33 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
|
|
3
|
+
require 'spec_helper'
|
|
4
|
+
|
|
5
|
+
describe Rubocop::Cop::Lint::InvalidCharacterLiteral do
|
|
6
|
+
subject(:cop) { described_class.new }
|
|
7
|
+
|
|
8
|
+
# Is there a way to emit this warning without syntax error?
|
|
9
|
+
#
|
|
10
|
+
# $ ruby -w
|
|
11
|
+
# p(? )
|
|
12
|
+
# -:1: warning: invalid character syntax; use ?\s
|
|
13
|
+
# -:1: syntax error, unexpected '?', expecting ')'
|
|
14
|
+
# p(? )
|
|
15
|
+
# ^
|
|
16
|
+
#
|
|
17
|
+
# https://github.com/ruby/ruby/blob/v2_1_0/parse.y#L7276
|
|
18
|
+
# https://github.com/whitequark/parser/blob/v2.1.2/lib/parser/lexer.rl#L1660
|
|
19
|
+
context 'with a non-escaped whitespace character literal ' do
|
|
20
|
+
let(:source) { 'p(? )' }
|
|
21
|
+
|
|
22
|
+
it 'registers an offence' do
|
|
23
|
+
pending 'Is there a way to emit this warning without syntax errors?'
|
|
24
|
+
|
|
25
|
+
inspect_source(cop, source)
|
|
26
|
+
|
|
27
|
+
expect(cop.offences.size).to eq(1)
|
|
28
|
+
expect(cop.offences.first.message)
|
|
29
|
+
.to eq('Invalid character literal; use ?\s')
|
|
30
|
+
expect(cop.highlights).to eq([' '])
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
|
|
3
|
+
require 'spec_helper'
|
|
4
|
+
|
|
5
|
+
describe Rubocop::Cop::Lint::LiteralInCondition do
|
|
6
|
+
subject(:cop) { described_class.new }
|
|
7
|
+
|
|
8
|
+
%w(1 2.0 [1] {}).each do |lit|
|
|
9
|
+
it "registers an offence for literal #{lit} in &&" do
|
|
10
|
+
inspect_source(cop,
|
|
11
|
+
["if x && #{lit}",
|
|
12
|
+
' top',
|
|
13
|
+
'end'
|
|
14
|
+
])
|
|
15
|
+
expect(cop.offences.size).to eq(1)
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
it "registers an offence for literal #{lit} in complex cond" do
|
|
19
|
+
inspect_source(cop,
|
|
20
|
+
["if x && !(a && #{lit}) && y && z",
|
|
21
|
+
' top',
|
|
22
|
+
'end'
|
|
23
|
+
])
|
|
24
|
+
expect(cop.offences.size).to eq(1)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
it "registers an offence for literal #{lit} in !" do
|
|
28
|
+
inspect_source(cop,
|
|
29
|
+
["if !#{lit}",
|
|
30
|
+
' top',
|
|
31
|
+
'end'
|
|
32
|
+
])
|
|
33
|
+
expect(cop.offences.size).to eq(1)
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
it "registers an offence for literal #{lit} in complex !" do
|
|
37
|
+
inspect_source(cop,
|
|
38
|
+
["if !(x && (y && #{lit}))",
|
|
39
|
+
' top',
|
|
40
|
+
'end'
|
|
41
|
+
])
|
|
42
|
+
expect(cop.offences.size).to eq(1)
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
it "accepts literal #{lit} if it's not an and/or operand" do
|
|
46
|
+
inspect_source(cop,
|
|
47
|
+
["if test(#{lit})",
|
|
48
|
+
' top',
|
|
49
|
+
'end'
|
|
50
|
+
])
|
|
51
|
+
expect(cop.offences).to be_empty
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
it "accepts literal #{lit} in non-toplevel and/or" do
|
|
55
|
+
inspect_source(cop,
|
|
56
|
+
["if (a || #{lit}).something",
|
|
57
|
+
' top',
|
|
58
|
+
'end'
|
|
59
|
+
])
|
|
60
|
+
expect(cop.offences).to be_empty
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
end
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
|
|
3
|
+
require 'spec_helper'
|
|
4
|
+
|
|
5
|
+
describe Rubocop::Cop::Lint::Loop do
|
|
6
|
+
subject(:cop) { described_class.new }
|
|
7
|
+
|
|
8
|
+
it 'registers an offence for begin/end/while' do
|
|
9
|
+
inspect_source(cop, ['begin something; top; end while test'])
|
|
10
|
+
expect(cop.offences.size).to eq(1)
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
it 'registers an offence for begin/end/until' do
|
|
14
|
+
inspect_source(cop, ['begin something; top; end until test'])
|
|
15
|
+
expect(cop.offences.size).to eq(1)
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
it 'accepts normal while' do
|
|
19
|
+
inspect_source(cop, ['while test; one; two; end'])
|
|
20
|
+
expect(cop.offences).to be_empty
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
it 'accepts normal until' do
|
|
24
|
+
inspect_source(cop, ['until test; one; two; end'])
|
|
25
|
+
expect(cop.offences).to be_empty
|
|
26
|
+
end
|
|
27
|
+
end
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
|
|
3
|
+
require 'spec_helper'
|
|
4
|
+
|
|
5
|
+
describe Rubocop::Cop::Lint::ParenthesesAsGroupedExpression do
|
|
6
|
+
subject(:cop) { described_class.new }
|
|
7
|
+
|
|
8
|
+
it 'registers an offence for method call with space before the ' \
|
|
9
|
+
'parenthesis' do
|
|
10
|
+
inspect_source(cop, ['a.func (x)'])
|
|
11
|
+
expect(cop.offences.size).to eq(1)
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
it 'registers an offence for predicate method call with space ' \
|
|
15
|
+
'before the parenthesis' do
|
|
16
|
+
inspect_source(cop, ['is? (x)'])
|
|
17
|
+
expect(cop.offences.size).to eq(1)
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
it 'registers an offence for math expression' do
|
|
21
|
+
inspect_source(cop, ['puts (2 + 3) * 4'])
|
|
22
|
+
expect(cop.offences.size).to eq(1)
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
it 'accepts a method call without arguments' do
|
|
26
|
+
inspect_source(cop, ['func'])
|
|
27
|
+
expect(cop.offences).to be_empty
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
it 'accepts a method call with arguments but no parentheses' do
|
|
31
|
+
inspect_source(cop, ['puts x'])
|
|
32
|
+
expect(cop.offences).to be_empty
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
it 'accepts a chain of method calls' do
|
|
36
|
+
inspect_source(cop, ['a.b',
|
|
37
|
+
'a.b 1',
|
|
38
|
+
'a.b(1)'])
|
|
39
|
+
expect(cop.offences).to be_empty
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
it 'accepts method with parens as arg to method without' do
|
|
43
|
+
inspect_source(cop, ['a b(c)'])
|
|
44
|
+
expect(cop.offences).to be_empty
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
it 'accepts an operator call with argument in parentheses' do
|
|
48
|
+
inspect_source(cop, ['a % (b + c)',
|
|
49
|
+
'a.b = (c == d)'])
|
|
50
|
+
expect(cop.offences).to be_empty
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
it 'accepts a space inside opening paren followed by left paren' do
|
|
54
|
+
inspect_source(cop, ['a( (b) )'])
|
|
55
|
+
expect(cop.offences).to be_empty
|
|
56
|
+
end
|
|
57
|
+
end
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
|
|
3
|
+
require 'spec_helper'
|
|
4
|
+
|
|
5
|
+
describe Rubocop::Cop::Lint::RequireParentheses do
|
|
6
|
+
subject(:cop) { described_class.new }
|
|
7
|
+
|
|
8
|
+
it 'registers an offence for missing parentheses around expression with ' \
|
|
9
|
+
'&& operator' do
|
|
10
|
+
inspect_source(cop, ["if day.is? 'monday' && month == :jan",
|
|
11
|
+
' foo',
|
|
12
|
+
'end'])
|
|
13
|
+
expect(cop.highlights).to eq(["day.is? 'monday' && month == :jan"])
|
|
14
|
+
expect(cop.messages)
|
|
15
|
+
.to eq(['Use parentheses in the method call to avoid confusion about ' \
|
|
16
|
+
'precedence.'])
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
it 'registers an offence for missing parentheses around expression with ' \
|
|
20
|
+
'|| operator' do
|
|
21
|
+
inspect_source(cop, "day_is? 'tuesday' || true")
|
|
22
|
+
expect(cop.highlights).to eq(["day_is? 'tuesday' || true"])
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
it 'registers an offence for missing parentheses around expression in ' \
|
|
26
|
+
'ternary' do
|
|
27
|
+
inspect_source(cop, "wd.include? 'tuesday' && true == true ? a : b")
|
|
28
|
+
expect(cop.highlights).to eq(["wd.include? 'tuesday' && true == true"])
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
it 'accepts missing parentheses around expression with + operator' do
|
|
32
|
+
inspect_source(cop, ["if day_is? 'tuesday' + rest",
|
|
33
|
+
'end'])
|
|
34
|
+
expect(cop.offences).to be_empty
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
it 'accepts method calls without parentheses followed by keyword and/or' do
|
|
38
|
+
inspect_source(cop, ["if day.is? 'tuesday' and month == :jan",
|
|
39
|
+
'end',
|
|
40
|
+
"if day.is? 'tuesday' or month == :jan",
|
|
41
|
+
'end'])
|
|
42
|
+
expect(cop.offences).to be_empty
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
it 'accepts method calls that are all operations' do
|
|
46
|
+
inspect_source(cop, ['if current_level == max + 1',
|
|
47
|
+
'end'])
|
|
48
|
+
expect(cop.offences).to be_empty
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
it 'accepts condition that is not a call' do
|
|
52
|
+
inspect_source(cop, ['if @debug',
|
|
53
|
+
'end'])
|
|
54
|
+
expect(cop.offences).to be_empty
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
it 'accepts parentheses around expression with boolean operator' do
|
|
58
|
+
inspect_source(cop, ["if day.is?('tuesday' && true == true)",
|
|
59
|
+
'end'])
|
|
60
|
+
expect(cop.offences).to be_empty
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
it 'accepts method call with parentheses in ternary' do
|
|
64
|
+
inspect_source(cop, "wd.include?('tuesday' && true == true) ? a : b")
|
|
65
|
+
expect(cop.offences).to be_empty
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
it 'accepts missing parentheses when method is not a predicate' do
|
|
69
|
+
inspect_source(cop, "weekdays.foo 'tuesday' && true == true")
|
|
70
|
+
expect(cop.offences).to be_empty
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
it 'accepts calls to methods that are setters' do
|
|
74
|
+
inspect_source(cop, 's.version = @version || ">= 1.8.5"')
|
|
75
|
+
expect(cop.offences).to be_empty
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
it 'accepts calls to methods that are operators' do
|
|
79
|
+
inspect_source(cop, 'a[b || c]')
|
|
80
|
+
expect(cop.offences).to be_empty
|
|
81
|
+
end
|
|
82
|
+
end
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
|
|
3
|
+
require 'spec_helper'
|
|
4
|
+
|
|
5
|
+
describe Rubocop::Cop::Lint::RescueException do
|
|
6
|
+
subject(:cop) { described_class.new }
|
|
7
|
+
|
|
8
|
+
it 'registers an offence for rescue from Exception' do
|
|
9
|
+
inspect_source(cop,
|
|
10
|
+
['begin',
|
|
11
|
+
' something',
|
|
12
|
+
'rescue Exception',
|
|
13
|
+
' #do nothing',
|
|
14
|
+
'end'])
|
|
15
|
+
expect(cop.offences.size).to eq(1)
|
|
16
|
+
expect(cop.messages)
|
|
17
|
+
.to eq(['Avoid rescuing the Exception class.'])
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
it 'registers an offence for rescue with ::Exception' do
|
|
21
|
+
inspect_source(cop,
|
|
22
|
+
['begin',
|
|
23
|
+
' something',
|
|
24
|
+
'rescue ::Exception',
|
|
25
|
+
' #do nothing',
|
|
26
|
+
'end'])
|
|
27
|
+
expect(cop.offences.size).to eq(1)
|
|
28
|
+
expect(cop.messages)
|
|
29
|
+
.to eq(['Avoid rescuing the Exception class.'])
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
it 'registers an offence for rescue with StandardError, Exception' do
|
|
33
|
+
inspect_source(cop,
|
|
34
|
+
['begin',
|
|
35
|
+
' something',
|
|
36
|
+
'rescue StandardError, Exception',
|
|
37
|
+
' #do nothing',
|
|
38
|
+
'end'])
|
|
39
|
+
expect(cop.offences.size).to eq(1)
|
|
40
|
+
expect(cop.messages)
|
|
41
|
+
.to eq(['Avoid rescuing the Exception class.'])
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
it 'registers an offence for rescue with Exception => e' do
|
|
45
|
+
inspect_source(cop,
|
|
46
|
+
['begin',
|
|
47
|
+
' something',
|
|
48
|
+
'rescue Exception => e',
|
|
49
|
+
' #do nothing',
|
|
50
|
+
'end'])
|
|
51
|
+
expect(cop.offences.size).to eq(1)
|
|
52
|
+
expect(cop.messages)
|
|
53
|
+
.to eq(['Avoid rescuing the Exception class.'])
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
it 'does not register an offence for rescue with no class' do
|
|
57
|
+
inspect_source(cop,
|
|
58
|
+
['begin',
|
|
59
|
+
' something',
|
|
60
|
+
' return',
|
|
61
|
+
'rescue',
|
|
62
|
+
' file.close',
|
|
63
|
+
'end'])
|
|
64
|
+
expect(cop.offences).to be_empty
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
it 'does not register an offence for rescue with no class and => e' do
|
|
68
|
+
inspect_source(cop,
|
|
69
|
+
['begin',
|
|
70
|
+
' something',
|
|
71
|
+
' return',
|
|
72
|
+
'rescue => e',
|
|
73
|
+
' file.close',
|
|
74
|
+
'end'])
|
|
75
|
+
expect(cop.offences).to be_empty
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
it 'does not register an offence for rescue with other class' do
|
|
79
|
+
inspect_source(cop,
|
|
80
|
+
['begin',
|
|
81
|
+
' something',
|
|
82
|
+
' return',
|
|
83
|
+
'rescue ArgumentError => e',
|
|
84
|
+
' file.close',
|
|
85
|
+
'end'])
|
|
86
|
+
expect(cop.offences).to be_empty
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
it 'does not register an offence for rescue with other classes' do
|
|
90
|
+
inspect_source(cop,
|
|
91
|
+
['begin',
|
|
92
|
+
' something',
|
|
93
|
+
' return',
|
|
94
|
+
'rescue EOFError, ArgumentError => e',
|
|
95
|
+
' file.close',
|
|
96
|
+
'end'])
|
|
97
|
+
expect(cop.offences).to be_empty
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
it 'does not register an offence for rescue with a module prefix' do
|
|
101
|
+
inspect_source(cop,
|
|
102
|
+
['begin',
|
|
103
|
+
' something',
|
|
104
|
+
' return',
|
|
105
|
+
'rescue Test::Exception => e',
|
|
106
|
+
' file.close',
|
|
107
|
+
'end'])
|
|
108
|
+
expect(cop.offences).to be_empty
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
it 'does not crash when the splat operator is used in a rescue' do
|
|
112
|
+
inspect_source(cop,
|
|
113
|
+
['ERRORS = [Exception]',
|
|
114
|
+
'begin',
|
|
115
|
+
' a = 3 / 0',
|
|
116
|
+
'rescue *ERRORS',
|
|
117
|
+
' puts e',
|
|
118
|
+
'end'])
|
|
119
|
+
expect(cop.offences).to be_empty
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
it 'does not crash when the namespace of a rescued class is in a local ' \
|
|
123
|
+
'variable' do
|
|
124
|
+
inspect_source(cop,
|
|
125
|
+
['adapter = current_adapter',
|
|
126
|
+
'begin',
|
|
127
|
+
'rescue adapter::ParseError',
|
|
128
|
+
'end'])
|
|
129
|
+
expect(cop.offences).to be_empty
|
|
130
|
+
end
|
|
131
|
+
end
|
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
|
|
3
|
+
require 'spec_helper'
|
|
4
|
+
|
|
5
|
+
describe Rubocop::Cop::Lint::ShadowingOuterLocalVariable do
|
|
6
|
+
subject(:cop) { described_class.new }
|
|
7
|
+
|
|
8
|
+
context 'when a block argument has same name ' \
|
|
9
|
+
'as an outer scope variable' do
|
|
10
|
+
let(:source) do
|
|
11
|
+
[
|
|
12
|
+
'def some_method',
|
|
13
|
+
' foo = 1',
|
|
14
|
+
' puts foo',
|
|
15
|
+
' 1.times do |foo|',
|
|
16
|
+
' end',
|
|
17
|
+
'end'
|
|
18
|
+
]
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
it 'registers an offence' do
|
|
22
|
+
inspect_source(cop, source)
|
|
23
|
+
expect(cop.offences.size).to eq(1)
|
|
24
|
+
expect(cop.offences.first.message)
|
|
25
|
+
.to include('Shadowing outer local variable - foo')
|
|
26
|
+
expect(cop.offences.first.line).to eq(4)
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
include_examples 'mimics MRI 2.1'
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
context 'when a splat block argument has same name ' \
|
|
33
|
+
'as an outer scope variable' do
|
|
34
|
+
let(:source) do
|
|
35
|
+
[
|
|
36
|
+
'def some_method',
|
|
37
|
+
' foo = 1',
|
|
38
|
+
' puts foo',
|
|
39
|
+
' 1.times do |*foo|',
|
|
40
|
+
' end',
|
|
41
|
+
'end'
|
|
42
|
+
]
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
it 'registers an offence' do
|
|
46
|
+
inspect_source(cop, source)
|
|
47
|
+
expect(cop.offences.size).to eq(1)
|
|
48
|
+
expect(cop.offences.first.message)
|
|
49
|
+
.to include('Shadowing outer local variable - foo')
|
|
50
|
+
expect(cop.offences.first.line).to eq(4)
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
include_examples 'mimics MRI 2.1'
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
context 'when a block block argument has same name ' \
|
|
57
|
+
'as an outer scope variable' do
|
|
58
|
+
let(:source) do
|
|
59
|
+
[
|
|
60
|
+
'def some_method',
|
|
61
|
+
' foo = 1',
|
|
62
|
+
' puts foo',
|
|
63
|
+
' proc_taking_block = proc do |&foo|',
|
|
64
|
+
' end',
|
|
65
|
+
' proc_taking_block.call do',
|
|
66
|
+
' end',
|
|
67
|
+
'end'
|
|
68
|
+
]
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
it 'registers an offence' do
|
|
72
|
+
inspect_source(cop, source)
|
|
73
|
+
expect(cop.offences.size).to eq(1)
|
|
74
|
+
expect(cop.offences.first.message)
|
|
75
|
+
.to include('Shadowing outer local variable - foo')
|
|
76
|
+
expect(cop.offences.first.line).to eq(4)
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
include_examples 'mimics MRI 2.1'
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
context 'when a block local variable has same name ' \
|
|
83
|
+
'as an outer scope variable' do
|
|
84
|
+
let(:source) do
|
|
85
|
+
[
|
|
86
|
+
'def some_method',
|
|
87
|
+
' foo = 1',
|
|
88
|
+
' puts foo',
|
|
89
|
+
' 1.times do |i; foo|',
|
|
90
|
+
' puts foo',
|
|
91
|
+
' end',
|
|
92
|
+
'end'
|
|
93
|
+
]
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
it 'registers an offence' do
|
|
97
|
+
inspect_source(cop, source)
|
|
98
|
+
expect(cop.offences.size).to eq(1)
|
|
99
|
+
expect(cop.offences.first.message)
|
|
100
|
+
.to include('Shadowing outer local variable - foo')
|
|
101
|
+
expect(cop.offences.first.line).to eq(4)
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
include_examples 'mimics MRI 2.1', 'shadowing'
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
context 'when a block argument has different name ' \
|
|
108
|
+
'with outer scope variables' do
|
|
109
|
+
let(:source) do
|
|
110
|
+
[
|
|
111
|
+
'def some_method',
|
|
112
|
+
' foo = 1',
|
|
113
|
+
' puts foo',
|
|
114
|
+
' 1.times do |bar|',
|
|
115
|
+
' end',
|
|
116
|
+
'end'
|
|
117
|
+
]
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
include_examples 'accepts'
|
|
121
|
+
include_examples 'mimics MRI 2.1'
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
context 'when an outer scope variable is reassigned in a block' do
|
|
125
|
+
let(:source) do
|
|
126
|
+
[
|
|
127
|
+
'def some_method',
|
|
128
|
+
' foo = 1',
|
|
129
|
+
' puts foo',
|
|
130
|
+
' 1.times do',
|
|
131
|
+
' foo = 2',
|
|
132
|
+
' end',
|
|
133
|
+
'end'
|
|
134
|
+
]
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
include_examples 'accepts'
|
|
138
|
+
include_examples 'mimics MRI 2.1'
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
context 'when an outer scope variable is referenced in a block' do
|
|
142
|
+
let(:source) do
|
|
143
|
+
[
|
|
144
|
+
'def some_method',
|
|
145
|
+
' foo = 1',
|
|
146
|
+
' puts foo',
|
|
147
|
+
' 1.times do',
|
|
148
|
+
' puts foo',
|
|
149
|
+
' end',
|
|
150
|
+
'end'
|
|
151
|
+
]
|
|
152
|
+
end
|
|
153
|
+
|
|
154
|
+
include_examples 'accepts'
|
|
155
|
+
include_examples 'mimics MRI 2.1'
|
|
156
|
+
end
|
|
157
|
+
|
|
158
|
+
context 'when multiple block arguments have same name "_"' do
|
|
159
|
+
let(:source) do
|
|
160
|
+
[
|
|
161
|
+
'def some_method',
|
|
162
|
+
' 1.times do |_, foo, _|',
|
|
163
|
+
' end',
|
|
164
|
+
'end'
|
|
165
|
+
]
|
|
166
|
+
end
|
|
167
|
+
|
|
168
|
+
include_examples 'accepts'
|
|
169
|
+
include_examples 'mimics MRI 2.1'
|
|
170
|
+
end
|
|
171
|
+
|
|
172
|
+
context 'when multiple block arguments have ' \
|
|
173
|
+
'a same name starts with "_"' do
|
|
174
|
+
let(:source) do
|
|
175
|
+
[
|
|
176
|
+
'def some_method',
|
|
177
|
+
' 1.times do |_foo, bar, _foo|',
|
|
178
|
+
' end',
|
|
179
|
+
'end'
|
|
180
|
+
]
|
|
181
|
+
end
|
|
182
|
+
|
|
183
|
+
include_examples 'accepts' unless RUBY_VERSION < '2.0'
|
|
184
|
+
include_examples 'mimics MRI 2.1'
|
|
185
|
+
end
|
|
186
|
+
|
|
187
|
+
context 'when a block argument has same name "_" ' \
|
|
188
|
+
'as outer scope variable "_"' do
|
|
189
|
+
let(:source) do
|
|
190
|
+
[
|
|
191
|
+
'def some_method',
|
|
192
|
+
' _ = 1',
|
|
193
|
+
' puts _',
|
|
194
|
+
' 1.times do |_|',
|
|
195
|
+
' end',
|
|
196
|
+
'end'
|
|
197
|
+
]
|
|
198
|
+
end
|
|
199
|
+
|
|
200
|
+
include_examples 'accepts'
|
|
201
|
+
include_examples 'mimics MRI 2.1'
|
|
202
|
+
end
|
|
203
|
+
|
|
204
|
+
context 'when a block argument has a same name starts with "_" ' \
|
|
205
|
+
'as an outer scope variable' do
|
|
206
|
+
let(:source) do
|
|
207
|
+
[
|
|
208
|
+
'def some_method',
|
|
209
|
+
' _foo = 1',
|
|
210
|
+
' puts _foo',
|
|
211
|
+
' 1.times do |_foo|',
|
|
212
|
+
' end',
|
|
213
|
+
'end'
|
|
214
|
+
]
|
|
215
|
+
end
|
|
216
|
+
|
|
217
|
+
include_examples 'accepts'
|
|
218
|
+
include_examples 'mimics MRI 2.1'
|
|
219
|
+
end
|
|
220
|
+
|
|
221
|
+
context 'when a method argument has same name ' \
|
|
222
|
+
'as an outer scope variable' do
|
|
223
|
+
let(:source) do
|
|
224
|
+
[
|
|
225
|
+
'class SomeClass',
|
|
226
|
+
' foo = 1',
|
|
227
|
+
' puts foo',
|
|
228
|
+
' def some_method(foo)',
|
|
229
|
+
' end',
|
|
230
|
+
'end'
|
|
231
|
+
]
|
|
232
|
+
end
|
|
233
|
+
|
|
234
|
+
include_examples 'accepts'
|
|
235
|
+
include_examples 'mimics MRI 2.1'
|
|
236
|
+
end
|
|
237
|
+
end
|