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.
Files changed (219) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +22 -0
  3. data/.rspec +1 -0
  4. data/.travis.yml +14 -0
  5. data/CHANGELOG.md +0 -0
  6. data/Gemfile +4 -0
  7. data/LICENSE.txt +22 -0
  8. data/README.md +35 -0
  9. data/Rakefile +22 -0
  10. data/bin/ridecharge-rubocop +49 -0
  11. data/config/0default.yml +8 -0
  12. data/config/fleet-magic-todo.yml +380 -0
  13. data/config/rc-todo.yml +190 -0
  14. data/config/ridecharge-rubocop_todo.yml +73 -0
  15. data/config/rubocop/default.yml +308 -0
  16. data/config/rubocop/disabled.yml +9 -0
  17. data/config/rubocop/enabled.yml +648 -0
  18. data/config/standard-todo.yml +24 -0
  19. data/config/tabs.yml +15 -0
  20. data/config/vehicle-todo.yml +195 -0
  21. data/lib/ridecharge/rubocop.rb +2 -0
  22. data/lib/ridecharge/rubocop/version.rb +5 -0
  23. data/lib/rubocop/config_loader_monkeypatch.rb +117 -0
  24. data/lib/rubocop/ridecharge.rb +1 -0
  25. data/ridecharge-rubocop.gemspec +25 -0
  26. data/spec/isolated_environment_spec.rb +24 -0
  27. data/spec/project_spec.rb +118 -0
  28. data/spec/rubocop/cli_spec.rb +1385 -0
  29. data/spec/rubocop/config_loader_spec.rb +328 -0
  30. data/spec/rubocop/config_spec.rb +179 -0
  31. data/spec/rubocop/config_store_spec.rb +53 -0
  32. data/spec/rubocop/cop/commissioner_spec.rb +83 -0
  33. data/spec/rubocop/cop/cop_spec.rb +114 -0
  34. data/spec/rubocop/cop/corrector_spec.rb +59 -0
  35. data/spec/rubocop/cop/lint/ambiguous_operator_spec.rb +113 -0
  36. data/spec/rubocop/cop/lint/ambiguous_regexp_literal_spec.rb +35 -0
  37. data/spec/rubocop/cop/lint/assignment_in_condition_spec.rb +107 -0
  38. data/spec/rubocop/cop/lint/block_alignment_spec.rb +411 -0
  39. data/spec/rubocop/cop/lint/condition_position_spec.rb +49 -0
  40. data/spec/rubocop/cop/lint/debugger_spec.rb +39 -0
  41. data/spec/rubocop/cop/lint/else_layout_spec.rb +65 -0
  42. data/spec/rubocop/cop/lint/empty_ensure_spec.rb +27 -0
  43. data/spec/rubocop/cop/lint/end_alignment_spec.rb +136 -0
  44. data/spec/rubocop/cop/lint/end_in_method_spec.rb +29 -0
  45. data/spec/rubocop/cop/lint/ensure_return_spec.rb +39 -0
  46. data/spec/rubocop/cop/lint/eval_spec.rb +35 -0
  47. data/spec/rubocop/cop/lint/handle_exceptions_spec.rb +30 -0
  48. data/spec/rubocop/cop/lint/invalid_character_literal_spec.rb +33 -0
  49. data/spec/rubocop/cop/lint/literal_in_condition_spec.rb +63 -0
  50. data/spec/rubocop/cop/lint/loop_spec.rb +27 -0
  51. data/spec/rubocop/cop/lint/parentheses_as_grouped_expression_spec.rb +57 -0
  52. data/spec/rubocop/cop/lint/require_parentheses_spec.rb +82 -0
  53. data/spec/rubocop/cop/lint/rescue_exception_spec.rb +131 -0
  54. data/spec/rubocop/cop/lint/shadowing_outer_local_variable_spec.rb +237 -0
  55. data/spec/rubocop/cop/lint/syntax_spec.rb +34 -0
  56. data/spec/rubocop/cop/lint/unreachable_code_spec.rb +63 -0
  57. data/spec/rubocop/cop/lint/useless_assignment_spec.rb +1570 -0
  58. data/spec/rubocop/cop/lint/useless_comparison_spec.rb +30 -0
  59. data/spec/rubocop/cop/lint/useless_else_without_rescue_spec.rb +48 -0
  60. data/spec/rubocop/cop/lint/useless_setter_call_spec.rb +149 -0
  61. data/spec/rubocop/cop/lint/void_spec.rb +57 -0
  62. data/spec/rubocop/cop/offence_spec.rb +133 -0
  63. data/spec/rubocop/cop/rails/default_scope_spec.rb +37 -0
  64. data/spec/rubocop/cop/rails/has_and_belongs_to_many_spec.rb +13 -0
  65. data/spec/rubocop/cop/rails/output_spec.rb +41 -0
  66. data/spec/rubocop/cop/rails/read_attribute_spec.rb +13 -0
  67. data/spec/rubocop/cop/rails/validation_spec.rb +21 -0
  68. data/spec/rubocop/cop/style/access_modifier_indentation_spec.rb +361 -0
  69. data/spec/rubocop/cop/style/accessor_method_name_spec.rb +81 -0
  70. data/spec/rubocop/cop/style/alias_spec.rb +59 -0
  71. data/spec/rubocop/cop/style/align_array_spec.rb +75 -0
  72. data/spec/rubocop/cop/style/align_hash_spec.rb +310 -0
  73. data/spec/rubocop/cop/style/align_parameters_spec.rb +222 -0
  74. data/spec/rubocop/cop/style/and_or_spec.rb +57 -0
  75. data/spec/rubocop/cop/style/ascii_comments_spec.rb +22 -0
  76. data/spec/rubocop/cop/style/ascii_identifiers_spec.rb +36 -0
  77. data/spec/rubocop/cop/style/attr_spec.rb +19 -0
  78. data/spec/rubocop/cop/style/begin_block_spec.rb +13 -0
  79. data/spec/rubocop/cop/style/block_comments_spec.rb +21 -0
  80. data/spec/rubocop/cop/style/block_nesting_spec.rb +156 -0
  81. data/spec/rubocop/cop/style/blocks_spec.rb +99 -0
  82. data/spec/rubocop/cop/style/braces_around_hash_parameters_spec.rb +284 -0
  83. data/spec/rubocop/cop/style/case_equality_spec.rb +12 -0
  84. data/spec/rubocop/cop/style/case_indentation_spec.rb +289 -0
  85. data/spec/rubocop/cop/style/character_literal_spec.rb +37 -0
  86. data/spec/rubocop/cop/style/class_and_module_camel_case_spec.rb +40 -0
  87. data/spec/rubocop/cop/style/class_length_spec.rb +131 -0
  88. data/spec/rubocop/cop/style/class_methods_spec.rb +45 -0
  89. data/spec/rubocop/cop/style/class_vars_spec.rb +19 -0
  90. data/spec/rubocop/cop/style/collection_methods_spec.rb +48 -0
  91. data/spec/rubocop/cop/style/colon_method_call_spec.rb +60 -0
  92. data/spec/rubocop/cop/style/comment_annotation_spec.rb +86 -0
  93. data/spec/rubocop/cop/style/constant_name_spec.rb +65 -0
  94. data/spec/rubocop/cop/style/cyclomatic_complexity_spec.rb +204 -0
  95. data/spec/rubocop/cop/style/def_with_parentheses_spec.rb +39 -0
  96. data/spec/rubocop/cop/style/documentation_spec.rb +123 -0
  97. data/spec/rubocop/cop/style/dot_position_spec.rb +94 -0
  98. data/spec/rubocop/cop/style/empty_line_between_defs_spec.rb +127 -0
  99. data/spec/rubocop/cop/style/empty_lines_around_access_modifier_spec.rb +56 -0
  100. data/spec/rubocop/cop/style/empty_lines_around_body_spec.rb +131 -0
  101. data/spec/rubocop/cop/style/empty_lines_spec.rb +40 -0
  102. data/spec/rubocop/cop/style/empty_literal_spec.rb +100 -0
  103. data/spec/rubocop/cop/style/encoding_spec.rb +56 -0
  104. data/spec/rubocop/cop/style/end_block_spec.rb +13 -0
  105. data/spec/rubocop/cop/style/end_of_line_spec.rb +47 -0
  106. data/spec/rubocop/cop/style/even_odd_spec.rb +75 -0
  107. data/spec/rubocop/cop/style/favor_join_spec.rb +31 -0
  108. data/spec/rubocop/cop/style/favor_sprintf_spec.rb +47 -0
  109. data/spec/rubocop/cop/style/favor_unless_over_negated_if_spec.rb +76 -0
  110. data/spec/rubocop/cop/style/favor_until_over_negated_while_spec.rb +41 -0
  111. data/spec/rubocop/cop/style/final_newline_spec.rb +30 -0
  112. data/spec/rubocop/cop/style/flip_flop_spec.rb +23 -0
  113. data/spec/rubocop/cop/style/for_spec.rb +105 -0
  114. data/spec/rubocop/cop/style/global_vars_spec.rb +34 -0
  115. data/spec/rubocop/cop/style/hash_methods_spec.rb +45 -0
  116. data/spec/rubocop/cop/style/hash_syntax_spec.rb +131 -0
  117. data/spec/rubocop/cop/style/if_unless_modifier_spec.rb +128 -0
  118. data/spec/rubocop/cop/style/if_with_semicolon_spec.rb +19 -0
  119. data/spec/rubocop/cop/style/indentation_consistency_spec.rb +490 -0
  120. data/spec/rubocop/cop/style/indentation_width_spec.rb +470 -0
  121. data/spec/rubocop/cop/style/lambda_call_spec.rb +65 -0
  122. data/spec/rubocop/cop/style/lambda_spec.rb +41 -0
  123. data/spec/rubocop/cop/style/leading_comment_space_spec.rb +64 -0
  124. data/spec/rubocop/cop/style/line_end_concatenation_spec.rb +34 -0
  125. data/spec/rubocop/cop/style/line_length_spec.rb +20 -0
  126. data/spec/rubocop/cop/style/method_call_parentheses_spec.rb +59 -0
  127. data/spec/rubocop/cop/style/method_called_on_do_end_block_spec.rb +60 -0
  128. data/spec/rubocop/cop/style/method_def_parentheses_spec.rb +106 -0
  129. data/spec/rubocop/cop/style/method_length_spec.rb +147 -0
  130. data/spec/rubocop/cop/style/method_name_spec.rb +125 -0
  131. data/spec/rubocop/cop/style/module_function_spec.rb +24 -0
  132. data/spec/rubocop/cop/style/multiline_block_chain_spec.rb +78 -0
  133. data/spec/rubocop/cop/style/multiline_if_then_spec.rb +107 -0
  134. data/spec/rubocop/cop/style/multiline_ternary_operator_spec.rb +18 -0
  135. data/spec/rubocop/cop/style/nested_ternary_operator_spec.rb +21 -0
  136. data/spec/rubocop/cop/style/nil_comparison_spec.rb +30 -0
  137. data/spec/rubocop/cop/style/not_spec.rb +22 -0
  138. data/spec/rubocop/cop/style/numeric_literals_spec.rb +64 -0
  139. data/spec/rubocop/cop/style/one_line_conditional_spec.rb +13 -0
  140. data/spec/rubocop/cop/style/op_method_spec.rb +74 -0
  141. data/spec/rubocop/cop/style/parameter_lists_spec.rb +44 -0
  142. data/spec/rubocop/cop/style/parentheses_around_condition_spec.rb +122 -0
  143. data/spec/rubocop/cop/style/perl_backrefs_spec.rb +17 -0
  144. data/spec/rubocop/cop/style/predicate_name_spec.rb +25 -0
  145. data/spec/rubocop/cop/style/proc_spec.rb +27 -0
  146. data/spec/rubocop/cop/style/raise_args_spec.rb +82 -0
  147. data/spec/rubocop/cop/style/redundant_begin_spec.rb +57 -0
  148. data/spec/rubocop/cop/style/redundant_exception_spec.rb +27 -0
  149. data/spec/rubocop/cop/style/redundant_return_spec.rb +171 -0
  150. data/spec/rubocop/cop/style/redundant_self_spec.rb +142 -0
  151. data/spec/rubocop/cop/style/regexp_literal_spec.rb +83 -0
  152. data/spec/rubocop/cop/style/rescue_modifier_spec.rb +116 -0
  153. data/spec/rubocop/cop/style/semicolon_spec.rb +100 -0
  154. data/spec/rubocop/cop/style/signal_exception_spec.rb +266 -0
  155. data/spec/rubocop/cop/style/single_line_block_params_spec.rb +68 -0
  156. data/spec/rubocop/cop/style/single_line_methods_spec.rb +52 -0
  157. data/spec/rubocop/cop/style/space_after_colon_spec.rb +38 -0
  158. data/spec/rubocop/cop/style/space_after_comma_spec.rb +30 -0
  159. data/spec/rubocop/cop/style/space_after_control_keyword_spec.rb +84 -0
  160. data/spec/rubocop/cop/style/space_after_method_name_spec.rb +70 -0
  161. data/spec/rubocop/cop/style/space_after_not_spec.rb +22 -0
  162. data/spec/rubocop/cop/style/space_after_semicolon_spec.rb +23 -0
  163. data/spec/rubocop/cop/style/space_around_block_braces_spec.rb +283 -0
  164. data/spec/rubocop/cop/style/space_around_equals_in_parameter_default_spec.rb +33 -0
  165. data/spec/rubocop/cop/style/space_around_operators_spec.rb +325 -0
  166. data/spec/rubocop/cop/style/space_before_modifier_keyword_spec.rb +70 -0
  167. data/spec/rubocop/cop/style/space_inside_brackets_spec.rb +52 -0
  168. data/spec/rubocop/cop/style/space_inside_hash_literal_braces_spec.rb +138 -0
  169. data/spec/rubocop/cop/style/space_inside_parens_spec.rb +34 -0
  170. data/spec/rubocop/cop/style/special_global_vars_spec.rb +56 -0
  171. data/spec/rubocop/cop/style/string_literals_spec.rb +212 -0
  172. data/spec/rubocop/cop/style/symbol_array_spec.rb +37 -0
  173. data/spec/rubocop/cop/style/tab_spec.rb +17 -0
  174. data/spec/rubocop/cop/style/trailing_blank_lines_spec.rb +43 -0
  175. data/spec/rubocop/cop/style/trailing_comma_spec.rb +230 -0
  176. data/spec/rubocop/cop/style/trailing_whitespace_spec.rb +30 -0
  177. data/spec/rubocop/cop/style/trivial_accessors_spec.rb +415 -0
  178. data/spec/rubocop/cop/style/unless_else_spec.rb +25 -0
  179. data/spec/rubocop/cop/style/variable_interpolation_spec.rb +47 -0
  180. data/spec/rubocop/cop/style/variable_name_spec.rb +107 -0
  181. data/spec/rubocop/cop/style/when_then_spec.rb +41 -0
  182. data/spec/rubocop/cop/style/while_until_do_spec.rb +53 -0
  183. data/spec/rubocop/cop/style/while_until_modifier_spec.rb +75 -0
  184. data/spec/rubocop/cop/style/word_array_spec.rb +97 -0
  185. data/spec/rubocop/cop/team_spec.rb +156 -0
  186. data/spec/rubocop/cop/util_spec.rb +49 -0
  187. data/spec/rubocop/cop/variable_inspector/assignment_spec.rb +213 -0
  188. data/spec/rubocop/cop/variable_inspector/locatable_spec.rb +734 -0
  189. data/spec/rubocop/cop/variable_inspector/scope_spec.rb +184 -0
  190. data/spec/rubocop/cop/variable_inspector/variable_spec.rb +73 -0
  191. data/spec/rubocop/cop/variable_inspector/variable_table_spec.rb +269 -0
  192. data/spec/rubocop/cop/variable_inspector_spec.rb +29 -0
  193. data/spec/rubocop/file_inspector_spec.rb +78 -0
  194. data/spec/rubocop/formatter/base_formatter_spec.rb +191 -0
  195. data/spec/rubocop/formatter/clang_style_formatter_spec.rb +114 -0
  196. data/spec/rubocop/formatter/colorizable_spec.rb +107 -0
  197. data/spec/rubocop/formatter/disabled_config_formatter_spec.rb +50 -0
  198. data/spec/rubocop/formatter/emacs_style_formatter_spec.rb +62 -0
  199. data/spec/rubocop/formatter/file_list_formatter_spec.rb +33 -0
  200. data/spec/rubocop/formatter/formatter_set_spec.rb +132 -0
  201. data/spec/rubocop/formatter/json_formatter_spec.rb +148 -0
  202. data/spec/rubocop/formatter/offence_count_formatter_spec.rb +52 -0
  203. data/spec/rubocop/formatter/progress_formatter_spec.rb +182 -0
  204. data/spec/rubocop/formatter/simple_text_formatter_spec.rb +123 -0
  205. data/spec/rubocop/options_spec.rb +145 -0
  206. data/spec/rubocop/path_util_spec.rb +42 -0
  207. data/spec/rubocop/processed_source_spec.rb +114 -0
  208. data/spec/rubocop/source_parser_spec.rb +139 -0
  209. data/spec/rubocop/target_finder_spec.rb +180 -0
  210. data/spec/rubocop/token_spec.rb +25 -0
  211. data/spec/spec_helper.rb +136 -0
  212. data/spec/support/ast_helper.rb +15 -0
  213. data/spec/support/file_helper.rb +21 -0
  214. data/spec/support/isolated_environment.rb +34 -0
  215. data/spec/support/mri_syntax_checker.rb +73 -0
  216. data/spec/support/shared_context.rb +22 -0
  217. data/spec/support/shared_examples.rb +33 -0
  218. data/spec/support/statement_modifier_helper.rb +41 -0
  219. metadata +511 -0
@@ -0,0 +1,33 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Rubocop::Cop::Style::SpaceAroundEqualsInParameterDefault do
6
+ subject(:cop) { described_class.new }
7
+
8
+ it 'registers an offence for default value assignment without space' do
9
+ inspect_source(cop, ['def f(x, y=0, z=1)', 'end'])
10
+ expect(cop.messages).to eq(
11
+ ['Surrounding space missing in default value assignment.'] * 2)
12
+ end
13
+
14
+ it 'registers an offence for assignment empty string without space' do
15
+ inspect_source(cop, ['def f(x, y="", z=1)', 'end'])
16
+ expect(cop.offences.size).to eq(2)
17
+ end
18
+
19
+ it 'registers an offence for assignment of empty list without space' do
20
+ inspect_source(cop, ['def f(x, y=[])', 'end'])
21
+ expect(cop.offences.size).to eq(1)
22
+ end
23
+
24
+ it 'accepts default value assignment with space' do
25
+ inspect_source(cop, ['def f(x, y = 0, z = {})', 'end'])
26
+ expect(cop.messages).to be_empty
27
+ end
28
+
29
+ it 'auto-corrects missing space' do
30
+ new_source = autocorrect_source(cop, ['def f(x, y=0, z=1)', 'end'])
31
+ expect(new_source).to eq(['def f(x, y = 0, z = 1)', 'end'].join("\n"))
32
+ end
33
+ end
@@ -0,0 +1,325 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Rubocop::Cop::Style::SpaceAroundOperators do
6
+ subject(:cop) { described_class.new }
7
+
8
+ it 'registers an offence for assignment without space on both sides' do
9
+ inspect_source(cop, ['x=0', 'y= 0', 'z =0'])
10
+ expect(cop.messages).to eq(
11
+ ["Surrounding space missing for operator '='."] * 3)
12
+ end
13
+
14
+ it 'auto-corrects assignment without space on both sides' do
15
+ new_source = autocorrect_source(cop, ['x=0', 'y= 0', 'z =0'])
16
+ expect(new_source).to eq(['x = 0', 'y = 0', 'z = 0'].join("\n"))
17
+ end
18
+
19
+ it 'registers an offence for ternary operator without space' do
20
+ inspect_source(cop, ['x == 0?1:2'])
21
+ expect(cop.messages).to eq(
22
+ ["Surrounding space missing for operator '?'.",
23
+ "Surrounding space missing for operator ':'."])
24
+ end
25
+
26
+ it 'auto-corrects a ternary operator without space' do
27
+ new_source = autocorrect_source(cop, 'x == 0?1:2')
28
+ expect(new_source).to eq('x == 0 ? 1 : 2')
29
+ end
30
+
31
+ it 'registers an offence in presence of modifier if statement' do
32
+ check_modifier('if')
33
+ end
34
+
35
+ it 'registers an offence in presence of modifier unless statement' do
36
+ check_modifier('unless')
37
+ end
38
+
39
+ it 'registers an offence in presence of modifier while statement' do
40
+ check_modifier('unless')
41
+ end
42
+
43
+ it 'registers an offence in presence of modifier until statement' do
44
+ check_modifier('unless')
45
+ end
46
+
47
+ def check_modifier(keyword)
48
+ src = ["a=1 #{keyword} condition",
49
+ 'c=2']
50
+ inspect_source(cop, src)
51
+ expect(cop.offences.map(&:line)).to eq([1, 2])
52
+ expect(cop.messages).to eq(
53
+ ["Surrounding space missing for operator '='."] * 2)
54
+
55
+ new_source = autocorrect_source(cop, src)
56
+ expect(new_source)
57
+ .to eq(src.map { |line| line.sub(/=/, ' = ') }.join("\n"))
58
+ end
59
+
60
+ it 'registers an offence for binary operators that could be unary' do
61
+ inspect_source(cop, ['a-3', 'x&0xff', 'z+0'])
62
+ expect(cop.messages).to eq(
63
+ ["Surrounding space missing for operator '-'.",
64
+ "Surrounding space missing for operator '&'.",
65
+ "Surrounding space missing for operator '+'."])
66
+ end
67
+
68
+ it 'auto-corrects missing space in binary operators that could be unary' do
69
+ new_source = autocorrect_source(cop, ['a-3', 'x&0xff', 'z+0'])
70
+ expect(new_source).to eq(['a - 3', 'x & 0xff', 'z + 0'].join("\n"))
71
+ end
72
+
73
+ it 'registers an offence for arguments to a method' do
74
+ inspect_source(cop, ['puts 1+2'])
75
+ expect(cop.messages).to eq(
76
+ ["Surrounding space missing for operator '+'."])
77
+ end
78
+
79
+ it 'auto-corrects missing space in arguments to a method' do
80
+ new_source = autocorrect_source(cop, 'puts 1+2')
81
+ expect(new_source).to eq('puts 1 + 2')
82
+ end
83
+
84
+ it 'accepts operator surrounded by tabs' do
85
+ inspect_source(cop, ["a\t+\tb"])
86
+ expect(cop.messages).to be_empty
87
+ end
88
+
89
+ it 'accepts operator symbols' do
90
+ inspect_source(cop, ['func(:-)'])
91
+ expect(cop.messages).to be_empty
92
+ end
93
+
94
+ it 'accepts ranges' do
95
+ inspect_source(cop, ['a, b = (1..2), (1...3)'])
96
+ expect(cop.messages).to be_empty
97
+ end
98
+
99
+ it 'accepts scope operator' do
100
+ source = ['@io.class == Zlib::GzipWriter']
101
+ inspect_source(cop, source)
102
+ expect(cop.messages).to be_empty
103
+ end
104
+
105
+ it 'accepts ::Kernel::raise' do
106
+ source = ['::Kernel::raise IllegalBlockError.new']
107
+ inspect_source(cop, source)
108
+ expect(cop.messages).to be_empty
109
+ end
110
+
111
+ it 'accepts exclamation point negation' do
112
+ inspect_source(cop, ['x = !a&&!b'])
113
+ expect(cop.messages).to eq(
114
+ ["Surrounding space missing for operator '&&'."])
115
+ end
116
+
117
+ it 'accepts exclamation point definition' do
118
+ inspect_source(cop, [' def !',
119
+ ' !__getobj__',
120
+ ' end'])
121
+ expect(cop.offences).to be_empty
122
+ expect(cop.messages).to be_empty
123
+ end
124
+
125
+ it 'accepts a unary' do
126
+ inspect_source(cop,
127
+ [' def bm(label_width = 0, *labels, &blk)',
128
+ ' benchmark(CAPTION, label_width, FORMAT,',
129
+ ' *labels, &blk)',
130
+ ' end',
131
+ '',
132
+ ' def each &block',
133
+ ' end',
134
+ '',
135
+ ' def self.search *args',
136
+ ' end',
137
+ '',
138
+ ' def each *args',
139
+ ' end',
140
+ ''])
141
+ expect(cop.messages).to be_empty
142
+ end
143
+
144
+ it 'accepts splat operator' do
145
+ inspect_source(cop, ['return *list if options'])
146
+ expect(cop.messages).to be_empty
147
+ end
148
+
149
+ it 'accepts def of operator' do
150
+ inspect_source(cop, ['def +(other); end',
151
+ 'def self.===(other); end'])
152
+ expect(cop.messages).to be_empty
153
+ end
154
+
155
+ it 'accepts an operator at the end of a line' do
156
+ inspect_source(cop,
157
+ ["['Favor unless over if for negative ' +",
158
+ " 'conditions.'] * 2"])
159
+ expect(cop.messages).to eq([])
160
+ end
161
+
162
+ it 'accepts an assignment with spaces' do
163
+ inspect_source(cop, ['x = 0'])
164
+ expect(cop.offences).to be_empty
165
+ end
166
+
167
+ it 'accepts an operator called with method syntax' do
168
+ inspect_source(cop, ['Date.today.+(1).to_s'])
169
+ expect(cop.offences).to be_empty
170
+ end
171
+
172
+ it 'registers an offence for operators without spaces' do
173
+ inspect_source(cop,
174
+ ['x+= a+b-c*d/e%f^g|h&i||j',
175
+ 'y -=k&&l'])
176
+ expect(cop.messages)
177
+ .to eq(["Surrounding space missing for operator '+='.",
178
+ "Surrounding space missing for operator '+'.",
179
+ "Surrounding space missing for operator '-'.",
180
+ "Surrounding space missing for operator '*'.",
181
+ "Surrounding space missing for operator '/'.",
182
+ "Surrounding space missing for operator '%'.",
183
+ "Surrounding space missing for operator '^'.",
184
+ "Surrounding space missing for operator '|'.",
185
+ "Surrounding space missing for operator '&'.",
186
+ "Surrounding space missing for operator '||'.",
187
+ "Surrounding space missing for operator '-='.",
188
+ "Surrounding space missing for operator '&&'."])
189
+ end
190
+
191
+ it 'auto-corrects missing space' do
192
+ new_source = autocorrect_source(cop, ['x+= a+b-c*d/e%f^g|h&i||j',
193
+ 'y -=k&&l'])
194
+ expect(new_source).to eq(['x += a + b - c * d / e % f ^ g | h & i || j',
195
+ 'y -= k && l'].join("\n"))
196
+ end
197
+
198
+ it 'accepts operators with spaces' do
199
+ inspect_source(cop,
200
+ ['x += a + b - c * d / e % f ^ g | h & i || j',
201
+ 'y -= k && l'])
202
+ expect(cop.messages).to eq([])
203
+ end
204
+
205
+ it "accepts some operators that are exceptions & don't need spaces" do
206
+ inspect_source(cop, ['(1..3)',
207
+ 'ActionController::Base',
208
+ 'each { |s, t| }'])
209
+ expect(cop.messages).to eq([])
210
+ end
211
+
212
+ it 'accepts an assignment followed by newline' do
213
+ inspect_source(cop, ['x =', '0'])
214
+ expect(cop.offences).to be_empty
215
+ end
216
+
217
+ it 'registers an offences for exponent operator with spaces' do
218
+ inspect_source(cop, ['x = a * b ** 2'])
219
+ expect(cop.messages).to eq(
220
+ ['Space around operator ** detected.'])
221
+ end
222
+
223
+ it 'auto-corrects unwanted space around **' do
224
+ new_source = autocorrect_source(cop, ['x = a * b ** 2',
225
+ 'y = a * b** 2'])
226
+ expect(new_source).to eq(['x = a * b**2',
227
+ 'y = a * b**2'].join("\n"))
228
+ end
229
+
230
+ it 'accepts exponent operator without spaces' do
231
+ inspect_source(cop, ['x = a * b**2'])
232
+ expect(cop.offences).to be_empty
233
+ end
234
+
235
+ it 'registers an offence for a setter call without spaces' do
236
+ inspect_source(cop, ['x.y=2'])
237
+ expect(cop.messages).to eq(
238
+ ["Surrounding space missing for operator '='."])
239
+ end
240
+
241
+ it 'registers an offence for a hash rocket without spaces' do
242
+ inspect_source(cop, ['{ 1=>2, a: b }'])
243
+ expect(cop.messages).to eq(
244
+ ["Surrounding space missing for operator '=>'."])
245
+ end
246
+
247
+ it 'accepts unary operators without space' do
248
+ inspect_source(cop, ['[].map(&:size)',
249
+ '-3',
250
+ 'arr.collect { |e| -e }',
251
+ 'x = +2'])
252
+ expect(cop.messages).to eq([])
253
+ end
254
+
255
+ it 'accepts [] without space' do
256
+ inspect_source(cop, ['files[2]'])
257
+ expect(cop.messages).to eq([])
258
+ end
259
+
260
+ it 'accepts argument default values without space' do
261
+ # These are handled by SpaceAroundEqualsInParameterDefault,
262
+ # so SpaceAroundOperators leaves them alone.
263
+ inspect_source(cop,
264
+ ['def init(name=nil)',
265
+ 'end'])
266
+ expect(cop.messages).to be_empty
267
+ end
268
+
269
+ it 'accepts the construct class <<self with no space after <<' do
270
+ inspect_source(cop, ['class <<self',
271
+ 'end'])
272
+ expect(cop.messages).to be_empty
273
+ end
274
+
275
+ it 'registers an offence for match operators without space' do
276
+ inspect_source(cop, ['x=~/abc/', 'y !~/abc/'])
277
+ expect(cop.messages)
278
+ .to eq(["Surrounding space missing for operator '=~'.",
279
+ "Surrounding space missing for operator '!~'."])
280
+ end
281
+
282
+ it 'registers an offence for various assignments without space' do
283
+ inspect_source(cop, ['x||=0', 'y&&=0', 'z*=2',
284
+ '@a=0', '@@a=0', 'a,b=0', 'A=0', 'x[3]=0', '$A=0'])
285
+ expect(cop.messages)
286
+ .to eq(["Surrounding space missing for operator '||='.",
287
+ "Surrounding space missing for operator '&&='.",
288
+ "Surrounding space missing for operator '*='.",
289
+ "Surrounding space missing for operator '='.",
290
+ "Surrounding space missing for operator '='.",
291
+ "Surrounding space missing for operator '='.",
292
+ "Surrounding space missing for operator '='.",
293
+ "Surrounding space missing for operator '='.",
294
+ "Surrounding space missing for operator '='."])
295
+ end
296
+
297
+ it 'registers an offence for equality operators without space' do
298
+ inspect_source(cop, ['x==0', 'y!=0', 'Hash===z'])
299
+ expect(cop.messages)
300
+ .to eq(["Surrounding space missing for operator '=='.",
301
+ "Surrounding space missing for operator '!='.",
302
+ "Surrounding space missing for operator '==='."])
303
+ end
304
+
305
+ it 'registers an offence for - without space with negative lhs operand' do
306
+ inspect_source(cop, ['-1-arg'])
307
+ expect(cop.messages)
308
+ .to eq(["Surrounding space missing for operator '-'."])
309
+ end
310
+
311
+ it 'registers an offence for inheritance < without space' do
312
+ inspect_source(cop, ['class ShowSourceTestClass<ShowSourceTestSuperClass',
313
+ 'end'])
314
+ expect(cop.messages)
315
+ .to eq(["Surrounding space missing for operator '<'."])
316
+ end
317
+
318
+ it 'registers an offence for hash rocket without space at rescue' do
319
+ inspect_source(cop, ['begin',
320
+ 'rescue Exception=>e',
321
+ 'end'])
322
+ expect(cop.messages)
323
+ .to eq(["Surrounding space missing for operator '=>'."])
324
+ end
325
+ end
@@ -0,0 +1,70 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Rubocop::Cop::Style::SpaceBeforeModifierKeyword do
6
+ subject(:cop) { described_class.new }
7
+
8
+ it 'registers an offence for missing space before if/unless' do
9
+ inspect_source(cop, ['(a = 3)if a == 2',
10
+ 'a = "test"if a == 2',
11
+ 'a = 42unless a == 2',
12
+ 'a = [1,2,3]unless a == 2',
13
+ 'a = {:a => "b"}if a == 2'])
14
+ expect(cop.highlights).to eq([')', '"', '2', ']', '}'])
15
+ end
16
+
17
+ it 'registers an offence for missing space before while/until' do
18
+ inspect_source(cop, ['(a = 3)while b',
19
+ 'a = "test"until b',
20
+ 'a = 42while b',
21
+ 'a = [1,2,3]until b',
22
+ 'a = {:a => "b"}while b'])
23
+ expect(cop.highlights).to eq([')', '"', '2', ']', '}'])
24
+ end
25
+
26
+ it 'accepts modifiers with preceding space' do
27
+ inspect_source(cop, ['(a = 3) if b',
28
+ 'a = "test" unless b',
29
+ 'a = 42 while b',
30
+ 'a = [1,2,3] until b'])
31
+ expect(cop.offences).to be_empty
32
+ end
33
+
34
+ it 'accepts elsif at beginning of line' do
35
+ inspect_source(cop, ["if RUBY_VERSION.between?('1.9.2', '2.0.0')",
36
+ " require 'testing/performance/ruby/yarv'",
37
+ 'elsif RUBY_VERSION.between?("1.8.6", "1.9")',
38
+ " require 'testing/performance/ruby/mri'",
39
+ 'end'])
40
+ expect(cop.highlights).to eq([])
41
+ end
42
+
43
+ it 'does not crash on ternary conditionals' do
44
+ inspect_source(cop, 'a ? b : c')
45
+ expect(cop.offences).to be_empty
46
+ end
47
+
48
+ it 'auto-corrects missing space' do
49
+ new_source = autocorrect_source(cop, ['(a = 3)if a == 2',
50
+ 'a = "test"if a == 2',
51
+ 'a = 42unless a == 2',
52
+ 'a = [1,2,3]unless a == 2',
53
+ 'a = {:a => "b"}if a == 2',
54
+ '(a = 3)while b',
55
+ 'a = "test"until b',
56
+ 'a = 42while b',
57
+ 'a = [1,2,3]until b',
58
+ 'a = {:a => "b"}while b'])
59
+ expect(new_source).to eq(['(a = 3) if a == 2',
60
+ 'a = "test" if a == 2',
61
+ 'a = 42 unless a == 2',
62
+ 'a = [1,2,3] unless a == 2',
63
+ 'a = {:a => "b"} if a == 2',
64
+ '(a = 3) while b',
65
+ 'a = "test" until b',
66
+ 'a = 42 while b',
67
+ 'a = [1,2,3] until b',
68
+ 'a = {:a => "b"} while b'].join("\n"))
69
+ end
70
+ end
@@ -0,0 +1,52 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Rubocop::Cop::Style::SpaceInsideBrackets do
6
+ subject(:cop) { described_class.new }
7
+
8
+ it 'registers an offence for an array literal with spaces inside' do
9
+ inspect_source(cop, ['a = [1, 2 ]',
10
+ 'b = [ 1, 2]'])
11
+ expect(cop.messages).to eq(
12
+ ['Space inside square brackets detected.',
13
+ 'Space inside square brackets detected.'])
14
+ end
15
+
16
+ it 'accepts space inside strings within square brackets' do
17
+ inspect_source(cop, ["['Encoding:',",
18
+ " ' Enabled: false']"])
19
+ expect(cop.messages).to be_empty
20
+ end
21
+
22
+ it 'accepts space inside square brackets if on its own row' do
23
+ inspect_source(cop, ['a = [',
24
+ ' 1, 2',
25
+ ' ]'])
26
+ expect(cop.messages).to be_empty
27
+ end
28
+
29
+ it 'accepts square brackets as method name' do
30
+ inspect_source(cop, ['def Vector.[](*array)',
31
+ 'end'])
32
+ expect(cop.messages).to be_empty
33
+ end
34
+
35
+ it 'accepts square brackets called with method call syntax' do
36
+ inspect_source(cop, ['subject.[](0)'])
37
+ expect(cop.messages).to be_empty
38
+ end
39
+
40
+ it 'only reports a single space once' do
41
+ inspect_source(cop, ['[ ]'])
42
+ expect(cop.messages).to eq(
43
+ ['Space inside square brackets detected.'])
44
+ end
45
+
46
+ it 'auto-corrects unwanted space' do
47
+ new_source = autocorrect_source(cop, ['a = [1, 2 ]',
48
+ 'b = [ 1, 2]'])
49
+ expect(new_source).to eq(['a = [1, 2]',
50
+ 'b = [1, 2]'].join("\n"))
51
+ end
52
+ end