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.

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