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,28 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
module Rubocop
|
6
|
+
module Cop
|
7
|
+
module Style
|
8
|
+
describe Not do
|
9
|
+
let(:a) { Not.new }
|
10
|
+
|
11
|
+
it 'registers an offence for not' do
|
12
|
+
inspect_source(a, ['not test'])
|
13
|
+
expect(a.offences.size).to eq(1)
|
14
|
+
end
|
15
|
+
|
16
|
+
it 'does not register an offence for !' do
|
17
|
+
inspect_source(a, ['!test'])
|
18
|
+
expect(a.offences).to be_empty
|
19
|
+
end
|
20
|
+
|
21
|
+
it 'does not register an offence for :not' do
|
22
|
+
inspect_source(a, ['[:not, :if, :else]'])
|
23
|
+
expect(a.offences).to be_empty
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
module Rubocop
|
6
|
+
module Cop
|
7
|
+
module Style
|
8
|
+
describe NumericLiterals do
|
9
|
+
let(:num) { NumericLiterals.new }
|
10
|
+
|
11
|
+
it 'registers an offence for a long integer without underscores' do
|
12
|
+
inspect_source(num, ['a = 123456'])
|
13
|
+
expect(num.offences.map(&:message)).to eq(
|
14
|
+
['Add underscores to large numeric literals to improve their ' +
|
15
|
+
'readability.'])
|
16
|
+
end
|
17
|
+
|
18
|
+
it 'registers an offence for an integer with not enough underscores' do
|
19
|
+
inspect_source(num, ['a = 123456_789000'])
|
20
|
+
expect(num.offences.map(&:message)).to eq(
|
21
|
+
['Add underscores to large numeric literals to improve their ' +
|
22
|
+
'readability.'])
|
23
|
+
end
|
24
|
+
|
25
|
+
# it 'registers an offence for a long float without underscores' do
|
26
|
+
# inspect_source(num, ['a = 1.234567'])
|
27
|
+
# expect(num.offences.map(&:message)).to eq(
|
28
|
+
# ['Add underscores to large numeric literals to improve their ' +
|
29
|
+
# 'readability.'])
|
30
|
+
# end
|
31
|
+
|
32
|
+
it 'accepts long numbers with underscore' do
|
33
|
+
inspect_source(num, ['a = 123_456',
|
34
|
+
'b = 1.234_56'])
|
35
|
+
expect(num.offences.map(&:message)).to be_empty
|
36
|
+
end
|
37
|
+
|
38
|
+
it 'accepts a short integer without underscore' do
|
39
|
+
inspect_source(num, ['a = 123'])
|
40
|
+
expect(num.offences.map(&:message)).to be_empty
|
41
|
+
end
|
42
|
+
|
43
|
+
it 'accepts short numbers without underscore' do
|
44
|
+
inspect_source(num, ['a = 123',
|
45
|
+
'b = 123.456'])
|
46
|
+
expect(num.offences.map(&:message)).to be_empty
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
module Rubocop
|
6
|
+
module Cop
|
7
|
+
module Style
|
8
|
+
describe OneLineConditional do
|
9
|
+
let(:olc) { OneLineConditional.new }
|
10
|
+
|
11
|
+
it 'registers an offence for one line if/then/end' do
|
12
|
+
inspect_source(olc, ['if cond then run else dont end'])
|
13
|
+
expect(olc.offences.map(&:message)).to eq([olc.error_message])
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,80 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
module Rubocop
|
6
|
+
module Cop
|
7
|
+
module Style
|
8
|
+
describe OpMethod do
|
9
|
+
let(:om) { OpMethod.new }
|
10
|
+
|
11
|
+
it 'registers an offence for arg not named other' do
|
12
|
+
inspect_source(om,
|
13
|
+
['def +(another)',
|
14
|
+
' another',
|
15
|
+
'end'])
|
16
|
+
expect(om.offences.size).to eq(1)
|
17
|
+
expect(om.offences.map(&:message))
|
18
|
+
.to eq([sprintf(OpMethod::MSG, '+')])
|
19
|
+
end
|
20
|
+
|
21
|
+
it 'works properly even if the argument not surrounded with braces' do
|
22
|
+
inspect_source(om,
|
23
|
+
['def + another',
|
24
|
+
' another',
|
25
|
+
'end'])
|
26
|
+
expect(om.offences.size).to eq(1)
|
27
|
+
expect(om.offences.map(&:message))
|
28
|
+
.to eq([sprintf(OpMethod::MSG, '+')])
|
29
|
+
end
|
30
|
+
|
31
|
+
it 'does not register an offence for arg named other' do
|
32
|
+
inspect_source(om,
|
33
|
+
['def +(other)',
|
34
|
+
' other',
|
35
|
+
'end'])
|
36
|
+
expect(om.offences).to be_empty
|
37
|
+
end
|
38
|
+
|
39
|
+
it 'does not register an offence for []' do
|
40
|
+
inspect_source(om,
|
41
|
+
['def [](index)',
|
42
|
+
' other',
|
43
|
+
'end'])
|
44
|
+
expect(om.offences).to be_empty
|
45
|
+
end
|
46
|
+
|
47
|
+
it 'does not register an offence for []=' do
|
48
|
+
inspect_source(om,
|
49
|
+
['def []=(index, value)',
|
50
|
+
' other',
|
51
|
+
'end'])
|
52
|
+
expect(om.offences).to be_empty
|
53
|
+
end
|
54
|
+
|
55
|
+
it 'does not register an offence for <<' do
|
56
|
+
inspect_source(om,
|
57
|
+
['def <<(cop)',
|
58
|
+
' other',
|
59
|
+
'end'])
|
60
|
+
expect(om.offences).to be_empty
|
61
|
+
end
|
62
|
+
|
63
|
+
it 'does not register an offence for non binary operators' do
|
64
|
+
inspect_source(om,
|
65
|
+
['def -@', # Unary minus
|
66
|
+
'end',
|
67
|
+
'',
|
68
|
+
# This + is not a unary operator. It can only be
|
69
|
+
# called with dot notation.
|
70
|
+
'def +',
|
71
|
+
'end',
|
72
|
+
'',
|
73
|
+
'def *(a, b)', # Quite strange, but legal ruby.
|
74
|
+
'end'])
|
75
|
+
expect(om.offences).to be_empty
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
module Rubocop
|
6
|
+
module Cop
|
7
|
+
module Style
|
8
|
+
describe ParameterLists do
|
9
|
+
let(:list) { ParameterLists.new }
|
10
|
+
before do
|
11
|
+
ParameterLists.config = {
|
12
|
+
'Max' => 4,
|
13
|
+
'CountKeywordArgs' => true
|
14
|
+
}
|
15
|
+
end
|
16
|
+
|
17
|
+
it 'registers an offence for a method def with 5 parameters' do
|
18
|
+
inspect_source(list, ['def meth(a, b, c, d, e)',
|
19
|
+
'end'])
|
20
|
+
expect(list.offences.size).to eq(1)
|
21
|
+
end
|
22
|
+
|
23
|
+
it 'accepts a method def with 4 parameters' do
|
24
|
+
inspect_source(list, ['def meth(a, b, c, d)',
|
25
|
+
'end'])
|
26
|
+
expect(list.offences).to be_empty
|
27
|
+
end
|
28
|
+
|
29
|
+
context 'When CountKeywordArgs is true' do
|
30
|
+
it 'counts keyword arguments as well', ruby: 2.0 do
|
31
|
+
inspect_source(list, ['def meth(a, b, c, d: 1, e: 2)',
|
32
|
+
'end'])
|
33
|
+
expect(list.offences.size).to eq(1)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
context 'When CountKeywordArgs is false' do
|
38
|
+
before { ParameterLists.config['CountKeywordArgs'] = false }
|
39
|
+
|
40
|
+
it 'it does not count keyword arguments', ruby: 2.0 do
|
41
|
+
inspect_source(list, ['def meth(a, b, c, d: 1, e: 2)',
|
42
|
+
'end'])
|
43
|
+
expect(list.offences).to be_empty
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
module Rubocop
|
6
|
+
module Cop
|
7
|
+
module Style
|
8
|
+
describe ParenthesesAroundCondition do
|
9
|
+
let(:pac) { ParenthesesAroundCondition.new }
|
10
|
+
|
11
|
+
it 'registers an offence for parentheses around condition' do
|
12
|
+
inspect_source(pac, ['if (x > 10)',
|
13
|
+
'elsif (x < 3)',
|
14
|
+
'end',
|
15
|
+
'unless (x > 10)',
|
16
|
+
'end',
|
17
|
+
'while (x > 10)',
|
18
|
+
'end',
|
19
|
+
'until (x > 10)',
|
20
|
+
'end',
|
21
|
+
'x += 1 if (x < 10)',
|
22
|
+
'x += 1 unless (x < 10)',
|
23
|
+
'x += 1 while (x < 10)',
|
24
|
+
'x += 1 until (x < 10)',
|
25
|
+
])
|
26
|
+
expect(pac.offences.size).to eq(9)
|
27
|
+
end
|
28
|
+
|
29
|
+
it 'accepts condition without parentheses' do
|
30
|
+
inspect_source(pac, ['if x > 10',
|
31
|
+
'end',
|
32
|
+
'unless x > 10',
|
33
|
+
'end',
|
34
|
+
'while x > 10',
|
35
|
+
'end',
|
36
|
+
'until x > 10',
|
37
|
+
'end',
|
38
|
+
'x += 1 if x < 10',
|
39
|
+
'x += 1 unless x < 10',
|
40
|
+
'x += 1 while x < 10',
|
41
|
+
'x += 1 until x < 10',
|
42
|
+
])
|
43
|
+
expect(pac.offences).to be_empty
|
44
|
+
end
|
45
|
+
|
46
|
+
it 'is not confused by leading brace in subexpression' do
|
47
|
+
inspect_source(pac, ['(a > b) && other ? one : two'])
|
48
|
+
expect(pac.offences).to be_empty
|
49
|
+
end
|
50
|
+
|
51
|
+
it 'is not confused by unbalanced parentheses' do
|
52
|
+
inspect_source(pac, ['if (a + b).c()',
|
53
|
+
'end'])
|
54
|
+
expect(pac.offences).to be_empty
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
module Rubocop
|
6
|
+
module Cop
|
7
|
+
module Style
|
8
|
+
describe Proc do
|
9
|
+
let(:proc) { Proc.new }
|
10
|
+
|
11
|
+
it 'registers an offence for a Proc.new call' do
|
12
|
+
inspect_source(proc, ['f = Proc.new { |x| puts x }'])
|
13
|
+
expect(proc.offences.size).to eq(1)
|
14
|
+
end
|
15
|
+
|
16
|
+
it 'accepts the proc method' do
|
17
|
+
inspect_source(proc, ['f = proc { |x| puts x }'])
|
18
|
+
expect(proc.offences).to be_empty
|
19
|
+
end
|
20
|
+
|
21
|
+
it 'accepts the Proc.new call outside of block' do
|
22
|
+
inspect_source(proc, ['p = Proc.new'])
|
23
|
+
expect(proc.offences).to be_empty
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
module Rubocop
|
6
|
+
module Cop
|
7
|
+
module Style
|
8
|
+
describe ReduceArguments do
|
9
|
+
let(:reduce_arguments) { ReduceArguments.new }
|
10
|
+
|
11
|
+
it 'find wrong argument names in calls with different syntax' do
|
12
|
+
inspect_source(reduce_arguments,
|
13
|
+
['def m',
|
14
|
+
' [0, 1].reduce { |c, d| c + d }',
|
15
|
+
' [0, 1].reduce{ |c, d| c + d }',
|
16
|
+
' [0, 1].reduce(5) { |c, d| c + d }',
|
17
|
+
' [0, 1].reduce(5){ |c, d| c + d }',
|
18
|
+
' [0, 1].reduce (5) { |c, d| c + d }',
|
19
|
+
' [0, 1].reduce(5) { |c, d| c + d }',
|
20
|
+
'end'])
|
21
|
+
expect(reduce_arguments.offences.size).to eq(6)
|
22
|
+
expect(reduce_arguments.offences
|
23
|
+
.map(&:line).sort).to eq((2..7).to_a)
|
24
|
+
end
|
25
|
+
|
26
|
+
it 'allows calls with proper argument names' do
|
27
|
+
inspect_source(reduce_arguments,
|
28
|
+
['def m',
|
29
|
+
' [0, 1].reduce { |a, e| a + e }',
|
30
|
+
' [0, 1].reduce{ |a, e| a + e }',
|
31
|
+
' [0, 1].reduce(5) { |a, e| a + e }',
|
32
|
+
' [0, 1].reduce(5){ |a, e| a + e }',
|
33
|
+
' [0, 1].reduce (5) { |a, e| a + e }',
|
34
|
+
' [0, 1].reduce(5) { |a, e| a + e }',
|
35
|
+
'end'])
|
36
|
+
expect(reduce_arguments.offences).to be_empty
|
37
|
+
end
|
38
|
+
|
39
|
+
it 'ignores do..end blocks' do
|
40
|
+
inspect_source(reduce_arguments,
|
41
|
+
['def m',
|
42
|
+
' [0, 1].reduce do |c, d|',
|
43
|
+
' c + d',
|
44
|
+
' end',
|
45
|
+
'end'])
|
46
|
+
expect(reduce_arguments.offences).to be_empty
|
47
|
+
end
|
48
|
+
|
49
|
+
it 'ignores :reduce symbols' do
|
50
|
+
inspect_source(reduce_arguments,
|
51
|
+
['def m',
|
52
|
+
' call_method(:reduce) { |a, b| a + b}',
|
53
|
+
'end'])
|
54
|
+
expect(reduce_arguments.offences).to be_empty
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
@@ -0,0 +1,83 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
module Rubocop
|
6
|
+
module Cop
|
7
|
+
module Style
|
8
|
+
describe RegexpLiteral do
|
9
|
+
let(:rl) { RegexpLiteral.new }
|
10
|
+
before { RegexpLiteral.config = { 'MaxSlashes' => 1 } }
|
11
|
+
|
12
|
+
context 'when a regexp uses // delimiters' do
|
13
|
+
context 'when MaxSlashes is 1' do
|
14
|
+
it 'registers an offence for two slashes in regexp' do
|
15
|
+
inspect_source(rl, ['x =~ /home\/\//',
|
16
|
+
'y =~ /etc\/top\//'])
|
17
|
+
expect(rl.offences.map(&:message))
|
18
|
+
.to eq(['Use %r for regular expressions matching more ' +
|
19
|
+
"than 1 '/' character."] * 2)
|
20
|
+
end
|
21
|
+
|
22
|
+
it 'accepts zero or one slash in regexp' do
|
23
|
+
inspect_source(rl, ['x =~ /\/home/',
|
24
|
+
'y =~ /\//',
|
25
|
+
'z =~ /a/'])
|
26
|
+
expect(rl.offences).to be_empty
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
context 'when MaxSlashes is 0' do
|
31
|
+
before { RegexpLiteral.config = { 'MaxSlashes' => 0 } }
|
32
|
+
|
33
|
+
it 'registers an offence for one slash in regexp' do
|
34
|
+
inspect_source(rl, ['x =~ /home\//'])
|
35
|
+
expect(rl.offences.map(&:message))
|
36
|
+
.to eq(['Use %r for regular expressions matching more ' +
|
37
|
+
"than 0 '/' characters."])
|
38
|
+
end
|
39
|
+
|
40
|
+
it 'accepts zero slashes in regexp' do
|
41
|
+
inspect_source(rl, ['z =~ /a/'])
|
42
|
+
expect(rl.offences).to be_empty
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
context 'when a regexp uses %r delimiters' do
|
48
|
+
context 'when MaxSlashes is 1' do
|
49
|
+
it 'registers an offence for zero or one slash in regexp' do
|
50
|
+
inspect_source(rl, ['x =~ %r(/home)',
|
51
|
+
'y =~ %r(etc)'])
|
52
|
+
expect(rl.offences.map(&:message))
|
53
|
+
.to eq(['Use %r only for regular expressions matching more ' +
|
54
|
+
"than 1 '/' character."] * 2)
|
55
|
+
end
|
56
|
+
|
57
|
+
it 'accepts regexp with two or more slashes' do
|
58
|
+
inspect_source(rl, ['x =~ %r(/home/)',
|
59
|
+
'y =~ %r(/////)'])
|
60
|
+
expect(rl.offences).to be_empty
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
context 'when MaxSlashes is 0' do
|
65
|
+
before { RegexpLiteral.config = { 'MaxSlashes' => 0 } }
|
66
|
+
|
67
|
+
it 'registers an offence for zero slashes in regexp' do
|
68
|
+
inspect_source(rl, ['y =~ %r(etc)'])
|
69
|
+
expect(rl.offences.map(&:message))
|
70
|
+
.to eq(['Use %r only for regular expressions matching more ' +
|
71
|
+
"than 0 '/' characters."])
|
72
|
+
end
|
73
|
+
|
74
|
+
it 'accepts regexp with one slash' do
|
75
|
+
inspect_source(rl, ['x =~ %r(/home)'])
|
76
|
+
expect(rl.offences).to be_empty
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|