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,68 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Rubocop::Cop::Style::SingleLineBlockParams, :config do
6
+ subject(:cop) { described_class.new(config) }
7
+ let(:cop_config) do
8
+ { 'Methods' =>
9
+ [{ 'reduce' => %w(a e) },
10
+ { 'test' => %w(x y) }]
11
+ }
12
+ end
13
+
14
+ it 'find wrong argument names in calls with different syntax' do
15
+ inspect_source(cop,
16
+ ['def m',
17
+ ' [0, 1].reduce { |c, d| c + d }',
18
+ ' [0, 1].reduce{ |c, d| c + d }',
19
+ ' [0, 1].reduce(5) { |c, d| c + d }',
20
+ ' [0, 1].reduce(5){ |c, d| c + d }',
21
+ ' [0, 1].reduce (5) { |c, d| c + d }',
22
+ ' [0, 1].reduce(5) { |c, d| c + d }',
23
+ ' ala.test { |x, z| bala }',
24
+ 'end'])
25
+ expect(cop.offences.size).to eq(7)
26
+ expect(cop.offences.map(&:line).sort).to eq((2..8).to_a)
27
+ end
28
+
29
+ it 'allows calls with proper argument names' do
30
+ inspect_source(cop,
31
+ ['def m',
32
+ ' [0, 1].reduce { |a, e| a + e }',
33
+ ' [0, 1].reduce{ |a, e| a + e }',
34
+ ' [0, 1].reduce(5) { |a, e| a + e }',
35
+ ' [0, 1].reduce(5){ |a, e| a + e }',
36
+ ' [0, 1].reduce (5) { |a, e| a + e }',
37
+ ' [0, 1].reduce(5) { |a, e| a + e }',
38
+ ' ala.test { |x, y| bala }',
39
+ 'end'])
40
+ expect(cop.offences).to be_empty
41
+ end
42
+
43
+ it 'ignores do..end blocks' do
44
+ inspect_source(cop,
45
+ ['def m',
46
+ ' [0, 1].reduce do |c, d|',
47
+ ' c + d',
48
+ ' end',
49
+ 'end'])
50
+ expect(cop.offences).to be_empty
51
+ end
52
+
53
+ it 'ignores :reduce symbols' do
54
+ inspect_source(cop,
55
+ ['def m',
56
+ ' call_method(:reduce) { |a, b| a + b}',
57
+ 'end'])
58
+ expect(cop.offences).to be_empty
59
+ end
60
+
61
+ it 'does not report when destructuring is used' do
62
+ inspect_source(cop,
63
+ ['def m',
64
+ ' test.reduce { |a, (id, _)| a + id}',
65
+ 'end'])
66
+ expect(cop.offences).to be_empty
67
+ end
68
+ end
@@ -0,0 +1,52 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Rubocop::Cop::Style::SingleLineMethods, :config do
6
+ subject(:cop) { described_class.new(config) }
7
+ let(:cop_config) { { 'AllowIfMethodIsEmpty' => true } }
8
+
9
+ it 'registers an offence for a single-line method' do
10
+ inspect_source(cop,
11
+ ['def some_method; body end',
12
+ 'def link_to(name, url); {:name => name}; end',
13
+ 'def @table.columns; super; end'])
14
+ expect(cop.messages).to eq(
15
+ ['Avoid single-line method definitions.'] * 3)
16
+ end
17
+
18
+ context 'when AllowIfMethodIsEmpty is disabled' do
19
+ let(:cop_config) { { 'AllowIfMethodIsEmpty' => false } }
20
+
21
+ it 'registers an offence for an empty method' do
22
+ inspect_source(cop, ['def no_op; end',
23
+ 'def self.resource_class=(klass); end',
24
+ 'def @table.columns; end'])
25
+ expect(cop.offences.size).to eq(3)
26
+ end
27
+ end
28
+
29
+ context 'when AllowIfMethodIsEmpty is enabled' do
30
+ let(:cop_config) { { 'AllowIfMethodIsEmpty' => true } }
31
+
32
+ it 'accepts a single-line empty method' do
33
+ inspect_source(cop, ['def no_op; end',
34
+ 'def self.resource_class=(klass); end',
35
+ 'def @table.columns; end'])
36
+ expect(cop.offences).to be_empty
37
+ end
38
+ end
39
+
40
+ it 'accepts a multi-line method' do
41
+ inspect_source(cop, ['def some_method',
42
+ ' body',
43
+ 'end'])
44
+ expect(cop.offences).to be_empty
45
+ end
46
+
47
+ it 'does not crash on an method with a capitalized name' do
48
+ inspect_source(cop, ['def NoSnakeCase',
49
+ 'end'])
50
+ expect(cop.offences).to be_empty
51
+ end
52
+ end
@@ -0,0 +1,38 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Rubocop::Cop::Style::SpaceAfterColon do
6
+ subject(:cop) { described_class.new }
7
+
8
+ it 'registers an offence for colon without space after it' do
9
+ # TODO: There is double reporting of the last colon (also from
10
+ # SpaceAroundOperators).
11
+ inspect_source(cop, ['x = w ? {a:3}:4'])
12
+ expect(cop.messages).to eq(['Space missing after colon.'] * 2)
13
+ expect(cop.highlights).to eq([':'] * 2)
14
+ end
15
+
16
+ it 'accepts colons in symbols' do
17
+ inspect_source(cop, ['x = :a'])
18
+ expect(cop.messages).to be_empty
19
+ end
20
+
21
+ if RUBY_VERSION >= '2.1'
22
+ it 'accepts colons denoting required keyword argument' do
23
+ inspect_source(cop, ['def initialize(table:, nodes:)',
24
+ 'end'])
25
+ expect(cop.messages).to be_empty
26
+ end
27
+ end
28
+
29
+ it 'accepts colons in strings' do
30
+ inspect_source(cop, ["str << ':'"])
31
+ expect(cop.messages).to be_empty
32
+ end
33
+
34
+ it 'auto-corrects missing space' do
35
+ new_source = autocorrect_source(cop, 'x = w ? {a:3}:4')
36
+ expect(new_source).to eq('x = w ? {a: 3}: 4')
37
+ end
38
+ end
@@ -0,0 +1,30 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Rubocop::Cop::Style::SpaceAfterComma do
6
+ subject(:cop) { described_class.new }
7
+
8
+ it 'registers an offence for block argument commas without space' do
9
+ inspect_source(cop, ['each { |s,t| }'])
10
+ expect(cop.messages).to eq(
11
+ ['Space missing after comma.'])
12
+ end
13
+
14
+ it 'registers an offence for array index commas without space' do
15
+ inspect_source(cop, ['formats[0,1]'])
16
+ expect(cop.messages).to eq(
17
+ ['Space missing after comma.'])
18
+ end
19
+
20
+ it 'registers an offence for method call arg commas without space' do
21
+ inspect_source(cop, ['a(1,2)'])
22
+ expect(cop.messages).to eq(
23
+ ['Space missing after comma.'])
24
+ end
25
+
26
+ it 'auto-corrects missing space' do
27
+ new_source = autocorrect_source(cop, 'each { |s,t| a(1,formats[0,1])}')
28
+ expect(new_source).to eq('each { |s, t| a(1, formats[0, 1])}')
29
+ end
30
+ end
@@ -0,0 +1,84 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Rubocop::Cop::Style::SpaceAfterControlKeyword do
6
+ subject(:cop) { described_class.new }
7
+
8
+ it 'registers an offence for normal if' do
9
+ inspect_source(cop,
10
+ ['if(test) then result end'])
11
+ expect(cop.offences.size).to eq(1)
12
+ end
13
+
14
+ it 'registers an offence for modifier unless' do
15
+ inspect_source(cop, ['action unless(test)'])
16
+
17
+ expect(cop.offences.size).to eq(1)
18
+ end
19
+
20
+ it 'does not get confused by keywords' do
21
+ inspect_source(cop, ['[:if, :unless].action'])
22
+ expect(cop.offences).to be_empty
23
+ end
24
+
25
+ it 'does not get confused by the ternary operator' do
26
+ inspect_source(cop, ['a ? b : c'])
27
+ expect(cop.offences).to be_empty
28
+ end
29
+
30
+ it 'registers an offence for if, elsif, and unless' do
31
+ inspect_source(cop,
32
+ ['if(a)',
33
+ 'elsif(b)',
34
+ ' unless(c)',
35
+ ' end',
36
+ 'end'])
37
+ expect(cop.offences.map(&:line)).to eq([1, 2, 3])
38
+ end
39
+
40
+ it 'registers an offence for case and when' do
41
+ inspect_source(cop,
42
+ ['case(a)',
43
+ 'when(0) then 1',
44
+ 'end'])
45
+ expect(cop.offences.map(&:line)).to eq([1, 2])
46
+ end
47
+
48
+ it 'registers an offence for while and until' do
49
+ inspect_source(cop,
50
+ ['while(a)',
51
+ ' b until(c)',
52
+ 'end'])
53
+ expect(cop.offences.map(&:line)).to eq([1, 2])
54
+ end
55
+
56
+ it 'auto-corrects missing space' do
57
+ new_source = autocorrect_source(cop, ['if(test) then result end',
58
+ 'action unless(test)',
59
+ 'if(a)',
60
+ 'elsif(b)',
61
+ ' unless(c)',
62
+ ' end',
63
+ 'end',
64
+ 'case(a)',
65
+ 'when(0) then 1',
66
+ 'end',
67
+ 'while(a)',
68
+ ' b until(c)',
69
+ 'end'])
70
+ expect(new_source).to eq(['if (test) then result end',
71
+ 'action unless (test)',
72
+ 'if (a)',
73
+ 'elsif (b)',
74
+ ' unless (c)',
75
+ ' end',
76
+ 'end',
77
+ 'case (a)',
78
+ 'when (0) then 1',
79
+ 'end',
80
+ 'while (a)',
81
+ ' b until (c)',
82
+ 'end'].join("\n"))
83
+ end
84
+ end
@@ -0,0 +1,70 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Rubocop::Cop::Style::SpaceAfterMethodName do
6
+ subject(:cop) { described_class.new }
7
+
8
+ it 'registers an offence for def with space before the parenthesis' do
9
+ inspect_source(cop,
10
+ ['def func (x)',
11
+ ' a',
12
+ 'end'])
13
+ expect(cop.offences.size).to eq(1)
14
+ end
15
+
16
+ it 'registers an offence for defs with space before the parenthesis' do
17
+ inspect_source(cop,
18
+ ['def self.func (x)',
19
+ ' a',
20
+ 'end'])
21
+ expect(cop.offences.size).to eq(1)
22
+ end
23
+
24
+ it 'accepts a def without arguments' do
25
+ inspect_source(cop,
26
+ ['def func',
27
+ ' a',
28
+ 'end'])
29
+ expect(cop.offences).to be_empty
30
+ end
31
+
32
+ it 'accepts a defs without arguments' do
33
+ inspect_source(cop,
34
+ ['def self.func',
35
+ ' a',
36
+ 'end'])
37
+ expect(cop.offences).to be_empty
38
+ end
39
+
40
+ it 'accepts a def with arguments but no parentheses' do
41
+ inspect_source(cop,
42
+ ['def func x',
43
+ ' a',
44
+ 'end'])
45
+ expect(cop.offences).to be_empty
46
+ end
47
+
48
+ it 'accepts a defs with arguments but no parentheses' do
49
+ inspect_source(cop,
50
+ ['def self.func x',
51
+ ' a',
52
+ 'end'])
53
+ expect(cop.offences).to be_empty
54
+ end
55
+
56
+ it 'auto-corrects unwanted space' do
57
+ new_source = autocorrect_source(cop, ['def func (x)',
58
+ ' a',
59
+ 'end',
60
+ 'def self.func (x)',
61
+ ' a',
62
+ 'end'])
63
+ expect(new_source).to eq(['def func(x)',
64
+ ' a',
65
+ 'end',
66
+ 'def self.func(x)',
67
+ ' a',
68
+ 'end'].join("\n"))
69
+ end
70
+ end
@@ -0,0 +1,22 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Rubocop::Cop::Style::SpaceAfterNot do
6
+ subject(:cop) { described_class.new }
7
+
8
+ it 'reports an offence for space after !' do
9
+ inspect_source(cop, ['! something'])
10
+ expect(cop.offences.size).to eq(1)
11
+ end
12
+
13
+ it 'accepts no space after !' do
14
+ inspect_source(cop, ['!something'])
15
+ expect(cop.offences).to be_empty
16
+ end
17
+
18
+ it 'auto-corrects by removing redundant space' do
19
+ new_source = autocorrect_source(cop, '! something')
20
+ expect(new_source).to eq('!something')
21
+ end
22
+ end
@@ -0,0 +1,23 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Rubocop::Cop::Style::SpaceAfterSemicolon do
6
+ subject(:cop) { described_class.new }
7
+
8
+ it 'registers an offence for semicolon without space after it' do
9
+ inspect_source(cop, ['x = 1;y = 2'])
10
+ expect(cop.messages).to eq(
11
+ ['Space missing after semicolon.'])
12
+ end
13
+
14
+ it 'does not crash if semicolon is the last character of the file' do
15
+ inspect_source(cop, ['x = 1;'])
16
+ expect(cop.messages).to be_empty
17
+ end
18
+
19
+ it 'auto-corrects missing space' do
20
+ new_source = autocorrect_source(cop, 'x = 1;y = 2')
21
+ expect(new_source).to eq('x = 1; y = 2')
22
+ end
23
+ end
@@ -0,0 +1,283 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Rubocop::Cop::Style::SpaceAroundBlockBraces do
6
+ SUPPORTED_STYLES = %w(space_inside_braces no_space_inside_braces)
7
+
8
+ subject(:cop) { described_class.new(config) }
9
+ let(:config) do
10
+ merged = Rubocop::ConfigLoader
11
+ .default_configuration['SpaceAroundBlockBraces'].merge(cop_config)
12
+ Rubocop::Config.new('Blocks' => { 'Enabled' => false },
13
+ 'SpaceAroundBlockBraces' => merged)
14
+ end
15
+ let(:cop_config) do
16
+ {
17
+ 'EnforcedStyle' => 'space_inside_braces',
18
+ 'SupportedStyles' => SUPPORTED_STYLES,
19
+ 'SpaceBeforeBlockParameters' => true
20
+ }
21
+ end
22
+
23
+ context 'with space inside empty braces not allowed' do
24
+ let(:cop_config) { { 'EnforcedStyleForEmptyBraces' => 'no_space' } }
25
+
26
+ it 'accepts empty braces with no space inside' do
27
+ inspect_source(cop, ['each {}'])
28
+ expect(cop.messages).to be_empty
29
+ end
30
+
31
+ it 'accepts empty braces with line break inside' do
32
+ inspect_source(cop, [' each {',
33
+ ' }'])
34
+ expect(cop.messages).to be_empty
35
+ end
36
+
37
+ it 'registers an offence for empty braces with space inside' do
38
+ inspect_source(cop, ['each { }'])
39
+ expect(cop.messages).to eq(['Space inside empty braces detected.'])
40
+ expect(cop.highlights).to eq([' '])
41
+ end
42
+
43
+ it 'auto-corrects unwanted space' do
44
+ new_source = autocorrect_source(cop, 'each { }')
45
+ expect(new_source).to eq('each {}')
46
+ end
47
+
48
+ it 'does not auto-correct when braces are not empty' do
49
+ old_source = <<-END
50
+ a {
51
+ b
52
+ }
53
+ END
54
+ new_source = autocorrect_source(cop, old_source)
55
+ expect(new_source).to eq(old_source)
56
+ end
57
+ end
58
+
59
+ context 'with space inside empty braces allowed' do
60
+ let(:cop_config) { { 'EnforcedStyleForEmptyBraces' => 'space' } }
61
+
62
+ it 'accepts empty braces with space inside' do
63
+ inspect_source(cop, ['each { }'])
64
+ expect(cop.messages).to be_empty
65
+ end
66
+
67
+ it 'registers an offence for empty braces with no space inside' do
68
+ inspect_source(cop, ['each {}'])
69
+ expect(cop.messages).to eq(['Space missing inside empty braces.'])
70
+ expect(cop.highlights).to eq(['{}'])
71
+ end
72
+
73
+ it 'auto-corrects missing space' do
74
+ new_source = autocorrect_source(cop, 'each {}')
75
+ expect(new_source).to eq('each { }')
76
+ end
77
+ end
78
+
79
+ it 'accepts braces surrounded by spaces' do
80
+ inspect_source(cop, ['each { puts }'])
81
+ expect(cop.messages).to be_empty
82
+ expect(cop.highlights).to be_empty
83
+ end
84
+
85
+ it 'registers an offence for left brace without outer space' do
86
+ inspect_source(cop, ['each{ puts }'])
87
+ expect(cop.messages).to eq(['Space missing to the left of {.'])
88
+ expect(cop.highlights).to eq(['{'])
89
+ end
90
+
91
+ it 'registers an offence for left brace without inner space' do
92
+ inspect_source(cop, ['each {puts }'])
93
+ expect(cop.messages).to eq(['Space missing inside {.'])
94
+ expect(cop.highlights).to eq(['p'])
95
+ end
96
+
97
+ it 'registers an offence for right brace without inner space' do
98
+ inspect_source(cop, ['each { puts}'])
99
+ expect(cop.messages).to eq(['Space missing inside }.'])
100
+ expect(cop.highlights).to eq(['}'])
101
+ expect(cop.config_to_allow_offences).to eq('Enabled' => false)
102
+ end
103
+
104
+ it 'registers offences for both braces without inner space' do
105
+ inspect_source(cop, ['a {}',
106
+ 'b { }',
107
+ 'each {puts}'])
108
+ expect(cop.messages).to eq(['Space inside empty braces detected.',
109
+ 'Space missing inside {.',
110
+ 'Space missing inside }.'])
111
+ expect(cop.highlights).to eq([' ', 'p', '}'])
112
+
113
+ # Both correct and incorrect code has been found in relation to
114
+ # EnforcedStyleForEmptyBraces, but that doesn't matter. EnforcedStyle can
115
+ # be changed to get rid of the EnforcedStyle offences.
116
+ expect(cop.config_to_allow_offences).to eq('EnforcedStyle' =>
117
+ 'no_space_inside_braces')
118
+ end
119
+
120
+ it 'auto-corrects missing space' do
121
+ new_source = autocorrect_source(cop, 'each {puts}')
122
+ expect(new_source).to eq('each { puts }')
123
+ end
124
+
125
+ context 'with passed in parameters' do
126
+ it 'accepts left brace with inner space' do
127
+ inspect_source(cop, ['each { |x| puts }'])
128
+ expect(cop.messages).to be_empty
129
+ expect(cop.highlights).to be_empty
130
+ end
131
+
132
+ it 'registers an offence for left brace without inner space' do
133
+ inspect_source(cop, ['each {|x| puts }'])
134
+ expect(cop.messages).to eq(['Space between { and | missing.'])
135
+ expect(cop.highlights).to eq(['{|'])
136
+ end
137
+
138
+ it 'auto-corrects missing space' do
139
+ new_source = autocorrect_source(cop, 'each{|x| puts }')
140
+ expect(new_source).to eq('each { |x| puts }')
141
+ end
142
+
143
+ context 'and Blocks cop enabled' do
144
+ let(:config) do
145
+ Rubocop::Config.new('Blocks' => { 'Enabled' => true },
146
+ 'SpaceAroundBlockBraces' => cop_config)
147
+ end
148
+
149
+ it 'does auto-correction for single-line blocks' do
150
+ new_source = autocorrect_source(cop, 'each{|x| puts}')
151
+ expect(new_source).to eq('each { |x| puts }')
152
+ end
153
+
154
+ it 'does not do auto-correction for multi-line blocks' do
155
+ # {} will be changed to do..end by the Blocks cop, and then this cop is
156
+ # not relevant anymore.
157
+ old_source = ['each{|x|',
158
+ ' puts',
159
+ '}']
160
+ new_source = autocorrect_source(cop, old_source)
161
+ expect(new_source).to eq(old_source.join("\n"))
162
+ end
163
+ end
164
+
165
+ context 'and space before block parameters not allowed' do
166
+ let(:cop_config) do
167
+ {
168
+ 'EnforcedStyle' => 'space_inside_braces',
169
+ 'SupportedStyles' => SUPPORTED_STYLES,
170
+ 'SpaceBeforeBlockParameters' => false
171
+ }
172
+ end
173
+
174
+ it 'registers an offence for left brace with inner space' do
175
+ inspect_source(cop, ['each { |x| puts }'])
176
+ expect(cop.messages).to eq(['Space between { and | detected.'])
177
+ expect(cop.highlights).to eq([' '])
178
+ end
179
+
180
+ it 'auto-corrects unwanted space' do
181
+ new_source = autocorrect_source(cop, 'each { |x| puts }')
182
+ expect(new_source).to eq('each {|x| puts }')
183
+ end
184
+
185
+ it 'accepts left brace without inner space' do
186
+ inspect_source(cop, ['each {|x| puts }'])
187
+ expect(cop.messages).to be_empty
188
+ expect(cop.highlights).to be_empty
189
+ end
190
+ end
191
+ end
192
+
193
+ context 'configured with no_space_inside_braces' do
194
+ let(:cop_config) do
195
+ {
196
+ 'EnforcedStyle' => 'no_space_inside_braces',
197
+ 'SupportedStyles' => SUPPORTED_STYLES,
198
+ 'SpaceBeforeBlockParameters' => true
199
+ }
200
+ end
201
+
202
+ it 'accepts braces without spaces inside' do
203
+ inspect_source(cop, ['each {puts}'])
204
+ expect(cop.messages).to be_empty
205
+ expect(cop.highlights).to be_empty
206
+ end
207
+
208
+ it 'registers an offence for left brace with inner space' do
209
+ inspect_source(cop, ['each { puts}'])
210
+ expect(cop.messages).to eq(['Space inside { detected.'])
211
+ expect(cop.highlights).to eq([' '])
212
+ expect(cop.config_to_allow_offences).to eq('Enabled' => false)
213
+ end
214
+
215
+ it 'registers an offence for right brace with inner space' do
216
+ inspect_source(cop, ['each {puts }'])
217
+ expect(cop.messages).to eq(['Space inside } detected.'])
218
+ expect(cop.highlights).to eq([' '])
219
+ end
220
+
221
+ it 'registers offences for both braces with inner space' do
222
+ inspect_source(cop, ['each { puts }'])
223
+ expect(cop.messages).to eq(['Space inside { detected.',
224
+ 'Space inside } detected.'])
225
+ expect(cop.highlights).to eq([' ', ' '])
226
+ expect(cop.config_to_allow_offences).to eq('EnforcedStyle' =>
227
+ 'space_inside_braces')
228
+ end
229
+
230
+ it 'registers an offence for left brace without outer space' do
231
+ inspect_source(cop, ['each{puts}'])
232
+ expect(cop.messages).to eq(['Space missing to the left of {.'])
233
+ expect(cop.highlights).to eq(['{'])
234
+ end
235
+
236
+ it 'auto-corrects missing space' do
237
+ new_source = autocorrect_source(cop, 'each{ puts }')
238
+ expect(new_source).to eq('each {puts}')
239
+ end
240
+
241
+ context 'with passed in parameters' do
242
+ context 'and space before block parameters allowed' do
243
+ it 'accepts left brace with inner space' do
244
+ inspect_source(cop, ['each { |x| puts}'])
245
+ expect(cop.messages).to eq([])
246
+ expect(cop.highlights).to eq([])
247
+ end
248
+
249
+ it 'registers an offence for left brace without inner space' do
250
+ inspect_source(cop, ['each {|x| puts}'])
251
+ expect(cop.messages).to eq(['Space between { and | missing.'])
252
+ expect(cop.highlights).to eq(['{|'])
253
+ end
254
+
255
+ it 'auto-corrects missing space' do
256
+ new_source = autocorrect_source(cop, 'each {|x| puts}')
257
+ expect(new_source).to eq('each { |x| puts}')
258
+ end
259
+ end
260
+
261
+ context 'and space before block parameters not allowed' do
262
+ let(:cop_config) do
263
+ {
264
+ 'EnforcedStyle' => 'no_space_inside_braces',
265
+ 'SupportedStyles' => SUPPORTED_STYLES,
266
+ 'SpaceBeforeBlockParameters' => false
267
+ }
268
+ end
269
+
270
+ it 'registers an offence for left brace with inner space' do
271
+ inspect_source(cop, ['each { |x| puts}'])
272
+ expect(cop.messages).to eq(['Space between { and | detected.'])
273
+ expect(cop.highlights).to eq([' '])
274
+ end
275
+
276
+ it 'auto-corrects unwanted space' do
277
+ new_source = autocorrect_source(cop, 'each { |x| puts}')
278
+ expect(new_source).to eq('each {|x| puts}')
279
+ end
280
+ end
281
+ end
282
+ end
283
+ end