rubocop 0.13.1 → 0.14.0
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of rubocop might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/.rubocop.yml +3 -0
- data/CHANGELOG.md +42 -0
- data/README.md +59 -54
- data/config/default.yml +124 -95
- data/config/disabled.yml +4 -0
- data/config/enabled.yml +286 -264
- data/lib/rubocop.rb +10 -3
- data/lib/rubocop/cli.rb +10 -171
- data/lib/rubocop/cop/cop.rb +14 -11
- data/lib/rubocop/cop/lint/debugger.rb +35 -0
- data/lib/rubocop/cop/lint/syntax.rb +34 -0
- data/lib/rubocop/cop/offence.rb +15 -23
- data/lib/rubocop/cop/style/align_array.rb +1 -10
- data/lib/rubocop/cop/style/align_hash.rb +14 -2
- data/lib/rubocop/cop/style/align_parameters.rb +1 -11
- data/lib/rubocop/cop/style/and_or.rb +13 -11
- data/lib/rubocop/cop/style/attr.rb +1 -1
- data/lib/rubocop/cop/style/autocorrect_alignment.rb +31 -6
- data/lib/rubocop/cop/style/blocks.rb +14 -6
- data/lib/rubocop/cop/style/character_literal.rb +1 -1
- data/lib/rubocop/cop/style/class_length.rb +38 -0
- data/lib/rubocop/cop/style/collection_methods.rb +1 -1
- data/lib/rubocop/cop/style/colon_method_call.rb +1 -1
- data/lib/rubocop/cop/style/configurable_naming.rb +47 -0
- data/lib/rubocop/cop/style/def_parentheses.rb +2 -2
- data/lib/rubocop/cop/style/empty_literal.rb +1 -1
- data/lib/rubocop/cop/style/even_odd.rb +7 -3
- data/lib/rubocop/cop/style/hash_methods.rb +1 -1
- data/lib/rubocop/cop/style/hash_syntax.rb +36 -7
- data/lib/rubocop/cop/style/lambda_call.rb +36 -11
- data/lib/rubocop/cop/style/method_call_parentheses.rb +1 -1
- data/lib/rubocop/cop/style/method_called_on_do_end_block.rb +41 -0
- data/lib/rubocop/cop/style/method_length.rb +2 -13
- data/lib/rubocop/cop/style/method_name.rb +42 -0
- data/lib/rubocop/cop/style/numeric_literals.rb +4 -0
- data/lib/rubocop/cop/style/perl_backrefs.rb +1 -1
- data/lib/rubocop/cop/style/raise_args.rb +60 -0
- data/lib/rubocop/cop/style/redundant_exception.rb +32 -0
- data/lib/rubocop/cop/style/redundant_return.rb +14 -5
- data/lib/rubocop/cop/style/redundant_self.rb +1 -1
- data/lib/rubocop/cop/style/semicolon.rb +13 -4
- data/lib/rubocop/cop/style/signal_exception.rb +63 -14
- data/lib/rubocop/cop/style/special_global_vars.rb +1 -1
- data/lib/rubocop/cop/style/string_help.rb +4 -1
- data/lib/rubocop/cop/style/string_literals.rb +34 -11
- data/lib/rubocop/cop/style/surrounding_space.rb +64 -17
- data/lib/rubocop/cop/style/tab.rb +1 -1
- data/lib/rubocop/cop/style/variable_name.rb +44 -0
- data/lib/rubocop/cop/style/when_then.rb +1 -1
- data/lib/rubocop/cop/style/while_until_do.rb +1 -1
- data/lib/rubocop/cop/team.rb +4 -7
- data/lib/rubocop/cop/util.rb +12 -0
- data/lib/rubocop/formatter/clang_style_formatter.rb +1 -1
- data/lib/rubocop/formatter/emacs_style_formatter.rb +5 -2
- data/lib/rubocop/formatter/json_formatter.rb +1 -0
- data/lib/rubocop/formatter/progress_formatter.rb +9 -13
- data/lib/rubocop/formatter/simple_text_formatter.rb +63 -15
- data/lib/rubocop/options.rb +184 -0
- data/lib/rubocop/processed_source.rb +4 -0
- data/lib/rubocop/version.rb +1 -1
- data/rubocop.gemspec +1 -1
- data/spec/rubocop/cli_spec.rb +870 -1001
- data/spec/rubocop/config_spec.rb +13 -13
- data/spec/rubocop/config_store_spec.rb +38 -37
- data/spec/rubocop/cop/commissioner_spec.rb +42 -46
- data/spec/rubocop/cop/cop_spec.rb +72 -77
- data/spec/rubocop/cop/corrector_spec.rb +51 -55
- data/spec/rubocop/cop/lint/assignment_in_condition_spec.rb +100 -106
- data/spec/rubocop/cop/lint/block_alignment_spec.rb +403 -409
- data/spec/rubocop/cop/lint/debugger_spec.rb +39 -0
- data/spec/rubocop/cop/lint/empty_ensure_spec.rb +19 -25
- data/spec/rubocop/cop/lint/end_alignment_spec.rb +50 -56
- data/spec/rubocop/cop/lint/end_in_method_spec.rb +20 -26
- data/spec/rubocop/cop/lint/ensure_return_spec.rb +30 -36
- data/spec/rubocop/cop/lint/eval_spec.rb +25 -31
- data/spec/rubocop/cop/lint/handle_exceptions_spec.rb +22 -28
- data/spec/rubocop/cop/lint/literal_in_condition_spec.rb +51 -57
- data/spec/rubocop/cop/lint/loop_spec.rb +17 -23
- data/spec/rubocop/cop/lint/parentheses_as_grouped_expression_spec.rb +51 -57
- data/spec/rubocop/cop/lint/rescue_exception_spec.rb +105 -111
- data/spec/rubocop/cop/lint/shadowing_outer_local_variable_spec.rb +230 -236
- data/spec/rubocop/cop/lint/syntax_spec.rb +33 -0
- data/spec/rubocop/cop/lint/unreachable_code_spec.rb +51 -57
- data/spec/rubocop/cop/lint/useless_assignment_spec.rb +1544 -1550
- data/spec/rubocop/cop/lint/useless_comparison_spec.rb +21 -27
- data/spec/rubocop/cop/lint/useless_setter_call_spec.rb +119 -125
- data/spec/rubocop/cop/lint/void_spec.rb +50 -56
- data/spec/rubocop/cop/offence_spec.rb +101 -131
- data/spec/rubocop/cop/rails/has_and_belongs_to_many_spec.rb +6 -12
- data/spec/rubocop/cop/rails/read_attribute_spec.rb +6 -12
- data/spec/rubocop/cop/rails/validation_spec.rb +13 -19
- data/spec/rubocop/cop/style/access_control_spec.rb +146 -152
- data/spec/rubocop/cop/style/alias_spec.rb +30 -36
- data/spec/rubocop/cop/style/align_array_spec.rb +57 -56
- data/spec/rubocop/cop/style/align_hash_spec.rb +256 -237
- data/spec/rubocop/cop/style/align_parameters_spec.rb +216 -202
- data/spec/rubocop/cop/style/and_or_spec.rb +51 -55
- data/spec/rubocop/cop/style/ascii_comments_spec.rb +14 -20
- data/spec/rubocop/cop/style/ascii_identifiers_spec.rb +26 -32
- data/spec/rubocop/cop/style/attr_spec.rb +11 -17
- data/spec/rubocop/cop/style/begin_block_spec.rb +6 -12
- data/spec/rubocop/cop/style/block_comments_spec.rb +13 -19
- data/spec/rubocop/cop/style/block_nesting_spec.rb +134 -140
- data/spec/rubocop/cop/style/blocks_spec.rb +81 -84
- data/spec/rubocop/cop/style/case_equality_spec.rb +5 -11
- data/spec/rubocop/cop/style/case_indentation_spec.rb +71 -77
- data/spec/rubocop/cop/style/character_literal_spec.rb +31 -37
- data/spec/rubocop/cop/style/class_and_module_camel_case_spec.rb +31 -37
- data/spec/rubocop/cop/style/class_length_spec.rb +65 -0
- data/spec/rubocop/cop/style/class_methods_spec.rb +35 -41
- data/spec/rubocop/cop/style/class_vars_spec.rb +11 -17
- data/spec/rubocop/cop/style/collection_methods_spec.rb +41 -47
- data/spec/rubocop/cop/style/colon_method_call_spec.rb +45 -51
- data/spec/rubocop/cop/style/comment_annotation_spec.rb +79 -85
- data/spec/rubocop/cop/style/constant_name_spec.rb +45 -51
- data/spec/rubocop/cop/style/def_with_parentheses_spec.rb +28 -34
- data/spec/rubocop/cop/style/def_without_parentheses_spec.rb +23 -29
- data/spec/rubocop/cop/style/documentation_spec.rb +60 -66
- data/spec/rubocop/cop/style/dot_position_spec.rb +50 -56
- data/spec/rubocop/cop/style/empty_line_between_defs_spec.rb +109 -110
- data/spec/rubocop/cop/style/empty_lines_spec.rb +28 -34
- data/spec/rubocop/cop/style/empty_literal_spec.rb +80 -86
- data/spec/rubocop/cop/style/encoding_spec.rb +50 -56
- data/spec/rubocop/cop/style/end_block_spec.rb +6 -12
- data/spec/rubocop/cop/style/end_of_line_spec.rb +13 -19
- data/spec/rubocop/cop/style/even_odd_spec.rb +69 -41
- data/spec/rubocop/cop/style/favor_join_spec.rb +21 -27
- data/spec/rubocop/cop/style/favor_modifier_spec.rb +180 -176
- data/spec/rubocop/cop/style/favor_sprintf_spec.rb +41 -47
- data/spec/rubocop/cop/style/favor_unless_over_negated_if_spec.rb +63 -69
- data/spec/rubocop/cop/style/favor_until_over_negated_while_spec.rb +32 -38
- data/spec/rubocop/cop/style/final_newline_spec.rb +16 -22
- data/spec/rubocop/cop/style/for_spec.rb +18 -24
- data/spec/rubocop/cop/style/global_vars_spec.rb +23 -29
- data/spec/rubocop/cop/style/hash_methods_spec.rb +39 -45
- data/spec/rubocop/cop/style/hash_syntax_spec.rb +93 -65
- data/spec/rubocop/cop/style/if_with_semicolon_spec.rb +11 -17
- data/spec/rubocop/cop/style/indentation_width_spec.rb +377 -383
- data/spec/rubocop/cop/style/lambda_call_spec.rb +40 -22
- data/spec/rubocop/cop/style/lambda_spec.rb +30 -34
- data/spec/rubocop/cop/style/leading_comment_space_spec.rb +44 -50
- data/spec/rubocop/cop/style/line_length_spec.rb +11 -17
- data/spec/rubocop/cop/style/method_call_parentheses_spec.rb +14 -20
- data/spec/rubocop/cop/style/method_called_on_do_end_block_spec.rb +60 -0
- data/spec/rubocop/cop/style/method_length_spec.rb +127 -133
- data/spec/rubocop/cop/style/method_name_spec.rb +103 -0
- data/spec/rubocop/cop/style/module_function_spec.rb +16 -22
- data/spec/rubocop/cop/style/multiline_block_chain_spec.rb +64 -70
- data/spec/rubocop/cop/style/multiline_if_then_spec.rb +74 -80
- data/spec/rubocop/cop/style/nil_comparison_spec.rb +20 -26
- data/spec/rubocop/cop/style/not_spec.rb +13 -19
- data/spec/rubocop/cop/style/numeric_literals_spec.rb +36 -35
- data/spec/rubocop/cop/style/one_line_conditional_spec.rb +5 -11
- data/spec/rubocop/cop/style/op_method_spec.rb +61 -67
- data/spec/rubocop/cop/style/parameter_lists_spec.rb +31 -37
- data/spec/rubocop/cop/style/parentheses_around_condition_spec.rb +62 -68
- data/spec/rubocop/cop/style/perl_backrefs_spec.rb +9 -15
- data/spec/rubocop/cop/style/proc_spec.rb +13 -19
- data/spec/rubocop/cop/style/raise_args_spec.rb +55 -0
- data/spec/rubocop/cop/style/reduce_arguments_spec.rb +49 -55
- data/spec/rubocop/cop/style/redundant_begin_spec.rb +47 -53
- data/spec/rubocop/cop/style/redundant_exception_spec.rb +27 -0
- data/spec/rubocop/cop/style/redundant_return_spec.rb +164 -72
- data/spec/rubocop/cop/style/redundant_self_spec.rb +109 -115
- data/spec/rubocop/cop/style/regexp_literal_spec.rb +57 -63
- data/spec/rubocop/cop/style/rescue_modifier_spec.rb +99 -105
- data/spec/rubocop/cop/style/semicolon_spec.rb +95 -90
- data/spec/rubocop/cop/style/signal_exception_spec.rb +248 -95
- data/spec/rubocop/cop/style/single_line_methods_spec.rb +45 -51
- data/spec/rubocop/cop/style/space_after_colon_spec.rb +14 -20
- data/spec/rubocop/cop/style/space_after_comma_spec.rb +16 -22
- data/spec/rubocop/cop/style/space_after_control_keyword_spec.rb +48 -54
- data/spec/rubocop/cop/style/space_after_method_name_spec.rb +49 -55
- data/spec/rubocop/cop/style/space_after_semicolon_spec.rb +10 -16
- data/spec/rubocop/cop/style/space_around_block_braces_spec.rb +118 -50
- data/spec/rubocop/cop/style/space_around_equals_in_default_parameter_spec.rb +18 -24
- data/spec/rubocop/cop/style/space_around_operators_spec.rb +204 -210
- data/spec/rubocop/cop/style/space_before_modifier_keyword_spec.rb +36 -42
- data/spec/rubocop/cop/style/space_inside_brackets_spec.rb +39 -45
- data/spec/rubocop/cop/style/space_inside_hash_literal_braces_spec.rb +62 -68
- data/spec/rubocop/cop/style/space_inside_parens_spec.rb +18 -24
- data/spec/rubocop/cop/style/special_global_vars_spec.rb +40 -46
- data/spec/rubocop/cop/style/string_literals_spec.rb +148 -70
- data/spec/rubocop/cop/style/symbol_array_spec.rb +28 -34
- data/spec/rubocop/cop/style/symbol_name_spec.rb +132 -138
- data/spec/rubocop/cop/style/tab_spec.rb +9 -15
- data/spec/rubocop/cop/style/ternary_operator_spec.rb +25 -31
- data/spec/rubocop/cop/style/trailing_blank_lines_spec.rb +10 -16
- data/spec/rubocop/cop/style/trailing_whitespace_spec.rb +14 -20
- data/spec/rubocop/cop/style/trivial_accessors_spec.rb +374 -380
- data/spec/rubocop/cop/style/unless_else_spec.rb +17 -23
- data/spec/rubocop/cop/style/variable_interpolation_spec.rb +36 -42
- data/spec/rubocop/cop/style/variable_name_spec.rb +83 -0
- data/spec/rubocop/cop/style/when_then_spec.rb +31 -37
- data/spec/rubocop/cop/style/while_until_do_spec.rb +47 -53
- data/spec/rubocop/cop/style/word_array_spec.rb +49 -55
- data/spec/rubocop/cop/team_spec.rb +125 -127
- data/spec/rubocop/cop/variable_inspector/assignment_spec.rb +176 -180
- data/spec/rubocop/cop/variable_inspector/locatable_spec.rb +580 -586
- data/spec/rubocop/cop/variable_inspector/scope_spec.rb +140 -146
- data/spec/rubocop/cop/variable_inspector/variable_spec.rb +52 -58
- data/spec/rubocop/cop/variable_inspector/variable_table_spec.rb +217 -223
- data/spec/rubocop/cop/variable_inspector_spec.rb +15 -19
- data/spec/rubocop/formatter/clang_style_formatter_spec.rb +35 -36
- data/spec/rubocop/formatter/disabled_config_formatter_spec.rb +2 -2
- data/spec/rubocop/formatter/emacs_style_formatter_spec.rb +24 -1
- data/spec/rubocop/formatter/file_list_formatter_spec.rb +1 -1
- data/spec/rubocop/formatter/formatter_set_spec.rb +3 -3
- data/spec/rubocop/formatter/json_formatter_spec.rb +7 -2
- data/spec/rubocop/formatter/offence_count_formatter_spec.rb +1 -1
- data/spec/rubocop/formatter/progress_formatter_spec.rb +1 -1
- data/spec/rubocop/formatter/simple_text_formatter_spec.rb +55 -6
- data/spec/rubocop/options_spec.rb +233 -0
- data/spec/rubocop/processed_source_spec.rb +85 -42
- data/spec/rubocop/source_parser_spec.rb +108 -110
- data/spec/rubocop/target_finder_spec.rb +125 -127
- data/spec/rubocop/token_spec.rb +15 -17
- metadata +32 -8
- data/lib/rubocop/backports/bsearch.rb +0 -39
- data/lib/rubocop/cop/style/method_and_variable_snake_case.rb +0 -77
- data/spec/rubocop/cop/style/method_and_variable_snake_case_spec.rb +0 -102
@@ -2,76 +2,154 @@
|
|
2
2
|
|
3
3
|
require 'spec_helper'
|
4
4
|
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
5
|
+
describe Rubocop::Cop::Style::StringLiterals, :config do
|
6
|
+
subject(:cop) { described_class.new(config) }
|
7
|
+
|
8
|
+
context 'configured with single quotes preferred' do
|
9
|
+
let(:cop_config) { { 'EnforcedStyle' => 'single_quotes' } }
|
10
|
+
|
11
|
+
it 'registers offence for double quotes when single quotes ' +
|
12
|
+
'suffice' do
|
13
|
+
inspect_source(cop, ['s = "abc"',
|
14
|
+
'x = "a\\\\b"',
|
15
|
+
'y ="\\\\b"',
|
16
|
+
'z = "a\\\\"'])
|
17
|
+
expect(cop.highlights).to eq(['"abc"',
|
18
|
+
'"a\\\\b"',
|
19
|
+
'"\\\\b"',
|
20
|
+
'"a\\\\"'])
|
21
|
+
expect(cop.messages)
|
22
|
+
.to eq(["Prefer single-quoted strings when you don't need " +
|
23
|
+
'string interpolation or special symbols.'] * 4)
|
24
|
+
end
|
25
|
+
|
26
|
+
it 'accepts single quotes' do
|
27
|
+
inspect_source(cop, ["a = 'x'"])
|
28
|
+
expect(cop.offences).to be_empty
|
29
|
+
end
|
30
|
+
|
31
|
+
it 'accepts %q and %Q quotes' do
|
32
|
+
inspect_source(cop, ['a = %q(x) + %Q[x]'])
|
33
|
+
expect(cop.offences).to be_empty
|
34
|
+
end
|
35
|
+
|
36
|
+
it 'accepts double quotes when they are needed' do
|
37
|
+
src = ['a = "\n"',
|
38
|
+
'b = "#{encode_severity}:' +
|
39
|
+
'#{sprintf("%3d", line_number)}: #{m}"',
|
40
|
+
'c = "\'"',
|
41
|
+
'd = "#@test"',
|
42
|
+
'e = "#$test"',
|
43
|
+
'f = "\e"',
|
44
|
+
'g = "#@@test"']
|
45
|
+
inspect_source(cop, src)
|
46
|
+
expect(cop.offences).to be_empty
|
47
|
+
end
|
48
|
+
|
49
|
+
it 'accepts double quotes at the start of regexp literals' do
|
50
|
+
inspect_source(cop, ['s = /"((?:[^\\"]|\\.)*)"/'])
|
51
|
+
expect(cop.offences).to be_empty
|
52
|
+
end
|
53
|
+
|
54
|
+
it 'accepts double quotes with some other special symbols' do
|
55
|
+
# "Substitutions in double-quoted strings"
|
56
|
+
# http://www.ruby-doc.org/docs/ProgrammingRuby/html/language.html
|
57
|
+
src = ['g = "\xf9"',
|
58
|
+
'copyright = "\u00A9"']
|
59
|
+
inspect_source(cop, src)
|
60
|
+
expect(cop.offences).to be_empty
|
61
|
+
end
|
62
|
+
|
63
|
+
it 'accepts " in a %w' do
|
64
|
+
inspect_source(cop, ['%w(")'])
|
65
|
+
expect(cop.offences).to be_empty
|
66
|
+
end
|
67
|
+
|
68
|
+
it 'accepts \\\\\n in a string' do # this would be: "\\\n"
|
69
|
+
inspect_source(cop, ['"foo \\\\\n bar"'])
|
70
|
+
expect(cop.offences).to be_empty
|
71
|
+
end
|
72
|
+
|
73
|
+
it 'can handle double quotes within embedded expression' do
|
74
|
+
src = ['"#{"A"}"']
|
75
|
+
inspect_source(cop, src)
|
76
|
+
expect(cop.offences).to be_empty
|
77
|
+
end
|
78
|
+
|
79
|
+
it 'can handle a built-in constant parsed as string' do
|
80
|
+
# Parser will produce str nodes for constants such as __FILE__.
|
81
|
+
src = ['if __FILE__ == $PROGRAM_NAME',
|
82
|
+
'end']
|
83
|
+
inspect_source(cop, src)
|
84
|
+
expect(cop.offences).to be_empty
|
85
|
+
end
|
86
|
+
|
87
|
+
it 'auto-corrects " with \'' do
|
88
|
+
new_source = autocorrect_source(cop, 's = "abc"')
|
89
|
+
expect(new_source).to eq("s = 'abc'")
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
context 'configured with double quotes preferred' do
|
94
|
+
let(:cop_config) { { 'EnforcedStyle' => 'double_quotes' } }
|
95
|
+
|
96
|
+
it 'registers offence for single quotes when double quotes would ' +
|
97
|
+
'be equivalent' do
|
98
|
+
inspect_source(cop, ["s = 'abc'"])
|
99
|
+
expect(cop.highlights).to eq(["'abc'"])
|
100
|
+
expect(cop.messages)
|
101
|
+
.to eq(['Prefer double-quoted strings unless you need ' +
|
102
|
+
'single quotes to avoid extra backslashes for ' +
|
103
|
+
'escaping.'])
|
104
|
+
end
|
105
|
+
|
106
|
+
it 'accepts double quotes' do
|
107
|
+
inspect_source(cop, ['a = "x"'])
|
108
|
+
expect(cop.offences).to be_empty
|
109
|
+
end
|
110
|
+
|
111
|
+
it 'accepts %q and %Q quotes' do
|
112
|
+
inspect_source(cop, ['a = %q(x) + %Q[x]'])
|
113
|
+
expect(cop.offences).to be_empty
|
114
|
+
end
|
115
|
+
|
116
|
+
it 'accepts single quotes when they are needed' do
|
117
|
+
src = ["a = '\\n'",
|
118
|
+
"b = '\"'"]
|
119
|
+
inspect_source(cop, src)
|
120
|
+
expect(cop.offences).to be_empty
|
121
|
+
end
|
122
|
+
|
123
|
+
it 'accepts single quotes at the start of regexp literals' do
|
124
|
+
inspect_source(cop, ["s = /'((?:[^\\']|\\.)*)'/"])
|
125
|
+
expect(cop.offences).to be_empty
|
126
|
+
end
|
127
|
+
|
128
|
+
it "accepts ' in a %w" do
|
129
|
+
inspect_source(cop, ["%w(')"])
|
130
|
+
expect(cop.offences).to be_empty
|
131
|
+
end
|
132
|
+
|
133
|
+
it 'can handle a built-in constant parsed as string' do
|
134
|
+
# Parser will produce str nodes for constants such as __FILE__.
|
135
|
+
src = ['if __FILE__ == $PROGRAM_NAME',
|
136
|
+
'end']
|
137
|
+
inspect_source(cop, src)
|
138
|
+
expect(cop.offences).to be_empty
|
139
|
+
end
|
140
|
+
|
141
|
+
it "auto-corrects ' with \"" do
|
142
|
+
new_source = autocorrect_source(cop, "s = 'abc'")
|
143
|
+
expect(new_source).to eq('s = "abc"')
|
144
|
+
end
|
145
|
+
end
|
146
|
+
|
147
|
+
context 'when configured with a bad value' do
|
148
|
+
let(:cop_config) { { 'EnforcedStyle' => 'other' } }
|
149
|
+
|
150
|
+
it 'fails' do
|
151
|
+
expect { inspect_source(cop, ['a = "b"']) }
|
152
|
+
.to raise_error(RuntimeError)
|
75
153
|
end
|
76
154
|
end
|
77
155
|
end
|
@@ -2,44 +2,38 @@
|
|
2
2
|
|
3
3
|
require 'spec_helper'
|
4
4
|
|
5
|
-
|
6
|
-
|
7
|
-
module Style
|
8
|
-
describe SymbolArray do
|
9
|
-
subject(:sa) { SymbolArray.new }
|
5
|
+
describe Rubocop::Cop::Style::SymbolArray do
|
6
|
+
subject(:cop) { described_class.new }
|
10
7
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
8
|
+
it 'registers an offence for arrays of symbols', { ruby: 2.0 } do
|
9
|
+
inspect_source(cop,
|
10
|
+
['[:one, :two, :three]'])
|
11
|
+
expect(cop.offences.size).to eq(1)
|
12
|
+
end
|
16
13
|
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
14
|
+
it 'does not reg an offence for array with non-syms', { ruby: 2.0 } do
|
15
|
+
inspect_source(cop,
|
16
|
+
['[:one, :two, "three"]'])
|
17
|
+
expect(cop.offences).to be_empty
|
18
|
+
end
|
22
19
|
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
20
|
+
it 'does not reg an offence for array starting with %i',
|
21
|
+
{ ruby: 2.0 } do
|
22
|
+
inspect_source(cop,
|
23
|
+
['%i(one two three)'])
|
24
|
+
expect(cop.offences).to be_empty
|
25
|
+
end
|
29
26
|
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
27
|
+
it 'does not reg an offence for array with one element',
|
28
|
+
{ ruby: 2.0 } do
|
29
|
+
inspect_source(cop,
|
30
|
+
['[:three]'])
|
31
|
+
expect(cop.offences).to be_empty
|
32
|
+
end
|
36
33
|
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
end
|
42
|
-
end
|
43
|
-
end
|
34
|
+
it 'does nothing on Ruby 1.9', { ruby: 1.9 } do
|
35
|
+
inspect_source(cop,
|
36
|
+
['[:one, :two, :three]'])
|
37
|
+
expect(cop.offences).to be_empty
|
44
38
|
end
|
45
39
|
end
|
@@ -1,144 +1,138 @@
|
|
1
|
-
|
1
|
+
# encoding: utf-8
|
2
2
|
|
3
3
|
require 'spec_helper'
|
4
4
|
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
inspect_source(symbol_name,
|
38
|
-
['test = :"bad.idea"'])
|
39
|
-
expect(symbol_name.offences).to be_empty
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
|
-
context 'when AllowDots is false' do
|
44
|
-
let(:cop_config) { { 'AllowDots' => false } }
|
45
|
-
|
46
|
-
it 'registers an offence for dots in names' do
|
47
|
-
inspect_source(symbol_name,
|
48
|
-
['test = :"bad.idea"'])
|
49
|
-
expect(symbol_name.offences.map(&:message)).to eq(
|
50
|
-
['Use snake_case for symbols.'])
|
51
|
-
end
|
52
|
-
end
|
53
|
-
|
54
|
-
it 'registers an offence for symbol used as hash label' do
|
55
|
-
inspect_source(symbol_name,
|
56
|
-
['{ KEY_ONE: 1, KEY_TWO: 2 }'])
|
57
|
-
expect(symbol_name.messages).to eq(
|
58
|
-
['Use snake_case for symbols.'] * 2)
|
59
|
-
end
|
60
|
-
|
61
|
-
it 'accepts snake case in names' do
|
62
|
-
inspect_source(symbol_name,
|
63
|
-
['test = :good_idea'])
|
64
|
-
expect(symbol_name.offences).to be_empty
|
65
|
-
end
|
66
|
-
|
67
|
-
it 'accepts snake case in hash label names' do
|
68
|
-
inspect_source(symbol_name,
|
69
|
-
['{ one: 1, one_more_3: 2 }'])
|
70
|
-
expect(symbol_name.offences).to be_empty
|
71
|
-
end
|
72
|
-
|
73
|
-
it 'accepts snake case with a prefix @ in names' do
|
74
|
-
inspect_source(symbol_name,
|
75
|
-
['test = :@good_idea'])
|
76
|
-
expect(symbol_name.offences).to be_empty
|
77
|
-
end
|
78
|
-
|
79
|
-
it 'accepts snake case with ? suffix' do
|
80
|
-
inspect_source(symbol_name,
|
81
|
-
['test = :good_idea?'])
|
82
|
-
expect(symbol_name.offences).to be_empty
|
83
|
-
end
|
84
|
-
|
85
|
-
it 'accepts snake case with ! suffix' do
|
86
|
-
inspect_source(symbol_name,
|
87
|
-
['test = :good_idea!'])
|
88
|
-
expect(symbol_name.offences).to be_empty
|
89
|
-
end
|
90
|
-
|
91
|
-
it 'accepts snake case with = suffix' do
|
92
|
-
inspect_source(symbol_name,
|
93
|
-
['test = :good_idea='])
|
94
|
-
expect(symbol_name.offences).to be_empty
|
95
|
-
end
|
96
|
-
|
97
|
-
it 'accepts special cases - !, [] and **' do
|
98
|
-
inspect_source(symbol_name,
|
99
|
-
['test = :**',
|
100
|
-
'test = :!',
|
101
|
-
'test = :[]',
|
102
|
-
'test = :[]='])
|
103
|
-
expect(symbol_name.offences).to be_empty
|
104
|
-
end
|
105
|
-
|
106
|
-
it 'accepts special cases - ==, <=>, >, <, >=, <=' do
|
107
|
-
inspect_source(symbol_name,
|
108
|
-
['test = :==',
|
109
|
-
'test = :<=>',
|
110
|
-
'test = :>',
|
111
|
-
'test = :<',
|
112
|
-
'test = :>=',
|
113
|
-
'test = :<='])
|
114
|
-
expect(symbol_name.offences).to be_empty
|
115
|
-
end
|
116
|
-
|
117
|
-
it 'accepts non snake case arguments to private_constant' do
|
118
|
-
inspect_source(symbol_name,
|
119
|
-
['private_constant :NORMAL_MODE, :ADMIN_MODE'])
|
120
|
-
expect(symbol_name.offences).to be_empty
|
121
|
-
end
|
122
|
-
|
123
|
-
it 'registers an offence for non snake case symbol near ' +
|
124
|
-
'private_constant' do
|
125
|
-
inspect_source(symbol_name,
|
126
|
-
['private_constant f(:ADMIN_MODE)'])
|
127
|
-
expect(symbol_name.offences.size).to eq(1)
|
128
|
-
end
|
129
|
-
|
130
|
-
it 'can handle an alias of and operator without crashing' do
|
131
|
-
inspect_source(symbol_name,
|
132
|
-
['alias + add'])
|
133
|
-
expect(symbol_name.offences).to be_empty
|
134
|
-
end
|
135
|
-
|
136
|
-
it 'registers an offence for SCREAMING_symbol_name' do
|
137
|
-
inspect_source(symbol_name,
|
138
|
-
['test = :BAD_IDEA'])
|
139
|
-
expect(symbol_name.offences.size).to eq(1)
|
140
|
-
end
|
141
|
-
end
|
5
|
+
describe Rubocop::Cop::Style::SymbolName, :config do
|
6
|
+
subject(:cop) { described_class.new(config) }
|
7
|
+
let(:cop_config) { { 'AllowCamelCase' => true } }
|
8
|
+
|
9
|
+
context 'when AllowCamelCase is true' do
|
10
|
+
let(:cop_config) { { 'AllowCamelCase' => true } }
|
11
|
+
|
12
|
+
it 'does not register an offence for camel case in names' do
|
13
|
+
inspect_source(cop,
|
14
|
+
['test = :BadIdea'])
|
15
|
+
expect(cop.offences).to be_empty
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
context 'when AllowCamelCase is false' do
|
20
|
+
let(:cop_config) { { 'AllowCamelCase' => false } }
|
21
|
+
|
22
|
+
it 'registers an offence for camel case in names' do
|
23
|
+
inspect_source(cop,
|
24
|
+
['test = :BadIdea'])
|
25
|
+
expect(cop.messages).to eq(
|
26
|
+
['Use snake_case for symbols.'])
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
context 'when AllowDots is true' do
|
31
|
+
let(:cop_config) { { 'AllowDots' => true } }
|
32
|
+
|
33
|
+
it 'does not register an offence for dots in names' do
|
34
|
+
inspect_source(cop,
|
35
|
+
['test = :"bad.idea"'])
|
36
|
+
expect(cop.offences).to be_empty
|
142
37
|
end
|
143
38
|
end
|
39
|
+
|
40
|
+
context 'when AllowDots is false' do
|
41
|
+
let(:cop_config) { { 'AllowDots' => false } }
|
42
|
+
|
43
|
+
it 'registers an offence for dots in names' do
|
44
|
+
inspect_source(cop,
|
45
|
+
['test = :"bad.idea"'])
|
46
|
+
expect(cop.offences.map(&:message)).to eq(
|
47
|
+
['Use snake_case for symbols.'])
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
it 'registers an offence for symbol used as hash label' do
|
52
|
+
inspect_source(cop,
|
53
|
+
['{ KEY_ONE: 1, KEY_TWO: 2 }'])
|
54
|
+
expect(cop.messages).to eq(
|
55
|
+
['Use snake_case for symbols.'] * 2)
|
56
|
+
end
|
57
|
+
|
58
|
+
it 'accepts snake case in names' do
|
59
|
+
inspect_source(cop,
|
60
|
+
['test = :good_idea'])
|
61
|
+
expect(cop.offences).to be_empty
|
62
|
+
end
|
63
|
+
|
64
|
+
it 'accepts snake case in hash label names' do
|
65
|
+
inspect_source(cop,
|
66
|
+
['{ one: 1, one_more_3: 2 }'])
|
67
|
+
expect(cop.offences).to be_empty
|
68
|
+
end
|
69
|
+
|
70
|
+
it 'accepts snake case with a prefix @ in names' do
|
71
|
+
inspect_source(cop,
|
72
|
+
['test = :@good_idea'])
|
73
|
+
expect(cop.offences).to be_empty
|
74
|
+
end
|
75
|
+
|
76
|
+
it 'accepts snake case with ? suffix' do
|
77
|
+
inspect_source(cop,
|
78
|
+
['test = :good_idea?'])
|
79
|
+
expect(cop.offences).to be_empty
|
80
|
+
end
|
81
|
+
|
82
|
+
it 'accepts snake case with ! suffix' do
|
83
|
+
inspect_source(cop,
|
84
|
+
['test = :good_idea!'])
|
85
|
+
expect(cop.offences).to be_empty
|
86
|
+
end
|
87
|
+
|
88
|
+
it 'accepts snake case with = suffix' do
|
89
|
+
inspect_source(cop,
|
90
|
+
['test = :good_idea='])
|
91
|
+
expect(cop.offences).to be_empty
|
92
|
+
end
|
93
|
+
|
94
|
+
it 'accepts special cases - !, [] and **' do
|
95
|
+
inspect_source(cop,
|
96
|
+
['test = :**',
|
97
|
+
'test = :!',
|
98
|
+
'test = :[]',
|
99
|
+
'test = :[]='])
|
100
|
+
expect(cop.offences).to be_empty
|
101
|
+
end
|
102
|
+
|
103
|
+
it 'accepts special cases - ==, <=>, >, <, >=, <=' do
|
104
|
+
inspect_source(cop,
|
105
|
+
['test = :==',
|
106
|
+
'test = :<=>',
|
107
|
+
'test = :>',
|
108
|
+
'test = :<',
|
109
|
+
'test = :>=',
|
110
|
+
'test = :<='])
|
111
|
+
expect(cop.offences).to be_empty
|
112
|
+
end
|
113
|
+
|
114
|
+
it 'accepts non snake case arguments to private_constant' do
|
115
|
+
inspect_source(cop,
|
116
|
+
['private_constant :NORMAL_MODE, :ADMIN_MODE'])
|
117
|
+
expect(cop.offences).to be_empty
|
118
|
+
end
|
119
|
+
|
120
|
+
it 'registers an offence for non snake case symbol near ' +
|
121
|
+
'private_constant' do
|
122
|
+
inspect_source(cop,
|
123
|
+
['private_constant f(:ADMIN_MODE)'])
|
124
|
+
expect(cop.offences.size).to eq(1)
|
125
|
+
end
|
126
|
+
|
127
|
+
it 'can handle an alias of and operator without crashing' do
|
128
|
+
inspect_source(cop,
|
129
|
+
['alias + add'])
|
130
|
+
expect(cop.offences).to be_empty
|
131
|
+
end
|
132
|
+
|
133
|
+
it 'registers an offence for SCREAMING_symbol_name' do
|
134
|
+
inspect_source(cop,
|
135
|
+
['test = :BAD_IDEA'])
|
136
|
+
expect(cop.offences.size).to eq(1)
|
137
|
+
end
|
144
138
|
end
|