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,13 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Rubocop::Cop::Rails::HasAndBelongsToMany do
6
+ subject(:cop) { described_class.new }
7
+
8
+ it 'registers an offence for has_and_belongs_to_many' do
9
+ inspect_source(cop,
10
+ ['has_and_belongs_to_many :groups'])
11
+ expect(cop.offences.size).to eq(1)
12
+ end
13
+ end
@@ -0,0 +1,41 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Rubocop::Cop::Rails::Output, :config do
6
+ subject(:cop) { described_class.new(config) }
7
+ let(:cop_config) { { 'Ignore' => ['^.*\.rake$'] } }
8
+
9
+ it 'should record an offence for puts statements' do
10
+ source = ['p "edmond dantes"',
11
+ 'puts "sinbad"',
12
+ 'print "abbe busoni"',
13
+ 'pp "monte cristo"']
14
+ inspect_source(cop, source)
15
+ expect(cop.offences.size).to eq(4)
16
+ end
17
+
18
+ it 'should not record an offence for methods' do
19
+ source = ['obj.print',
20
+ 'something.p',
21
+ 'nothing.pp']
22
+ inspect_source(cop, source)
23
+ expect(cop.offences).to be_empty
24
+ end
25
+
26
+ it 'should not record an offence for comments' do
27
+ source = ['# print "test"',
28
+ '# p']
29
+ inspect_source(cop, source)
30
+ expect(cop.offences).to be_empty
31
+ end
32
+
33
+ it 'should ignore certain files' do
34
+ source = ['print 1']
35
+ processed_source = parse_source(source)
36
+ allow(processed_source.buffer)
37
+ .to receive(:name).and_return('/var/lib/test.rake')
38
+ _investigate(cop, processed_source)
39
+ expect(cop.offences).to be_empty
40
+ end
41
+ end
@@ -0,0 +1,13 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Rubocop::Cop::Rails::ReadAttribute do
6
+ subject(:cop) { described_class.new }
7
+
8
+ it 'registers an offence for read_attribute' do
9
+ inspect_source(cop,
10
+ ['res = read_attribute(:test)'])
11
+ expect(cop.offences.size).to eq(1)
12
+ end
13
+ end
@@ -0,0 +1,21 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Rubocop::Cop::Rails::Validation do
6
+ subject(:cop) { described_class.new }
7
+
8
+ described_class::BLACKLIST.each do |validation|
9
+ it "registers an offence for #{validation}" do
10
+ inspect_source(cop,
11
+ ["#{validation} :name"])
12
+ expect(cop.offences.size).to eq(1)
13
+ end
14
+ end
15
+
16
+ it 'accepts sexy validations' do
17
+ inspect_source(cop,
18
+ ['validates :name'])
19
+ expect(cop.offences).to be_empty
20
+ end
21
+ end
@@ -0,0 +1,361 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Rubocop::Cop::Style::AccessModifierIndentation, :config do
6
+ subject(:cop) { described_class.new(config) }
7
+
8
+ context 'when EnforcedStyle is set to indent' do
9
+ let(:cop_config) { { 'EnforcedStyle' => 'indent' } }
10
+
11
+ it 'registers an offence for misaligned private' do
12
+ inspect_source(cop,
13
+ ['class Test',
14
+ '',
15
+ 'private',
16
+ '',
17
+ ' def test; end',
18
+ 'end'])
19
+ expect(cop.offences.size).to eq(1)
20
+ expect(cop.messages)
21
+ .to eq(['Indent access modifiers like private.'])
22
+ expect(cop.config_to_allow_offences).to eq('EnforcedStyle' => 'outdent')
23
+ end
24
+
25
+ it 'registers an offence for misaligned private in module' do
26
+ inspect_source(cop,
27
+ ['module Test',
28
+ '',
29
+ ' private',
30
+ '',
31
+ ' def test; end',
32
+ 'end'])
33
+ expect(cop.offences.size).to eq(1)
34
+ expect(cop.messages).to eq(['Indent access modifiers like private.'])
35
+ # Not aligned according to `indent` or `outdent` style:
36
+ expect(cop.config_to_allow_offences).to eq('Enabled' => false)
37
+ end
38
+
39
+ it 'registers an offence for correct + opposite alignment' do
40
+ inspect_source(cop,
41
+ ['module Test',
42
+ '',
43
+ ' public',
44
+ '',
45
+ 'private',
46
+ '',
47
+ ' def test; end',
48
+ 'end'])
49
+ expect(cop.offences.size).to eq(1)
50
+ expect(cop.messages).to eq(['Indent access modifiers like private.'])
51
+ # No EnforcedStyle can allow both aligments:
52
+ expect(cop.config_to_allow_offences).to eq('Enabled' => false)
53
+ end
54
+
55
+ it 'registers an offence for opposite + correct alignment' do
56
+ inspect_source(cop,
57
+ ['module Test',
58
+ '',
59
+ 'public',
60
+ '',
61
+ ' private',
62
+ '',
63
+ ' def test; end',
64
+ 'end'])
65
+ expect(cop.offences.size).to eq(1)
66
+ expect(cop.messages).to eq(['Indent access modifiers like public.'])
67
+ # No EnforcedStyle can allow both aligments:
68
+ expect(cop.config_to_allow_offences).to eq('Enabled' => false)
69
+ end
70
+
71
+ it 'registers an offence for misaligned private in singleton class' do
72
+ inspect_source(cop,
73
+ ['class << self',
74
+ '',
75
+ 'private',
76
+ '',
77
+ ' def test; end',
78
+ 'end'])
79
+ expect(cop.offences.size).to eq(1)
80
+ expect(cop.messages)
81
+ .to eq(['Indent access modifiers like private.'])
82
+ end
83
+
84
+ it 'registers an offence for misaligned private in class ' \
85
+ 'defined with Class.new' do
86
+ inspect_source(cop,
87
+ ['Test = Class.new do',
88
+ '',
89
+ 'private',
90
+ '',
91
+ ' def test; end',
92
+ 'end'])
93
+ expect(cop.offences.size).to eq(1)
94
+ expect(cop.messages)
95
+ .to eq(['Indent access modifiers like private.'])
96
+ end
97
+
98
+ it 'registers an offence for misaligned private in module ' \
99
+ 'defined with Module.new' do
100
+ inspect_source(cop,
101
+ ['Test = Module.new do',
102
+ '',
103
+ 'private',
104
+ '',
105
+ ' def test; end',
106
+ 'end'])
107
+ expect(cop.offences.size).to eq(1)
108
+ expect(cop.messages)
109
+ .to eq(['Indent access modifiers like private.'])
110
+ end
111
+
112
+ it 'registers an offence for misaligned protected' do
113
+ inspect_source(cop,
114
+ ['class Test',
115
+ '',
116
+ 'protected',
117
+ '',
118
+ ' def test; end',
119
+ 'end'])
120
+ expect(cop.offences.size).to eq(1)
121
+ expect(cop.messages)
122
+ .to eq(['Indent access modifiers like protected.'])
123
+ end
124
+
125
+ it 'accepts properly indented private' do
126
+ inspect_source(cop,
127
+ ['class Test',
128
+ '',
129
+ ' private',
130
+ '',
131
+ ' def test; end',
132
+ 'end'])
133
+ expect(cop.offences).to be_empty
134
+ end
135
+
136
+ it 'accepts properly indented protected' do
137
+ inspect_source(cop,
138
+ ['class Test',
139
+ '',
140
+ ' protected',
141
+ '',
142
+ ' def test; end',
143
+ 'end'])
144
+ expect(cop.offences).to be_empty
145
+ end
146
+
147
+ it 'accepts an empty class' do
148
+ inspect_source(cop,
149
+ ['class Test',
150
+ 'end'])
151
+ expect(cop.offences).to be_empty
152
+ end
153
+
154
+ it 'handles properly nested classes' do
155
+ inspect_source(cop,
156
+ ['class Test',
157
+ '',
158
+ ' class Nested',
159
+ '',
160
+ ' private',
161
+ '',
162
+ ' def a; end',
163
+ ' end',
164
+ '',
165
+ ' protected',
166
+ '',
167
+ ' def test; end',
168
+ 'end'])
169
+ expect(cop.offences.size).to eq(1)
170
+ expect(cop.messages)
171
+ .to eq(['Indent access modifiers like private.'])
172
+ end
173
+
174
+ it 'auto-corrects incorrectly indented access modifiers' do
175
+ corrected = autocorrect_source(cop, ['class Test',
176
+ '',
177
+ 'public',
178
+ ' private',
179
+ ' protected',
180
+ '',
181
+ ' def test; end',
182
+ 'end'])
183
+ expect(corrected).to eq(['class Test',
184
+ '',
185
+ ' public',
186
+ ' private',
187
+ ' protected',
188
+ '',
189
+ ' def test; end',
190
+ 'end'].join("\n"))
191
+ end
192
+ end
193
+
194
+ context 'when EnforcedStyle is set to outdent' do
195
+ let(:cop_config) { { 'EnforcedStyle' => 'outdent' } }
196
+ let(:indent_msg) { 'Outdent access modifiers like private.' }
197
+
198
+ it 'registers offence for private indented to method depth in a class' do
199
+ inspect_source(cop,
200
+ ['class Test',
201
+ '',
202
+ ' private',
203
+ '',
204
+ ' def test; end',
205
+ 'end'])
206
+ expect(cop.offences.size).to eq(1)
207
+ expect(cop.messages).to eq([indent_msg])
208
+ expect(cop.config_to_allow_offences).to eq('EnforcedStyle' => 'indent')
209
+ end
210
+
211
+ it 'registers offence for private indented to method depth in a module' do
212
+ inspect_source(cop,
213
+ ['module Test',
214
+ '',
215
+ ' private',
216
+ '',
217
+ ' def test; end',
218
+ 'end'])
219
+ expect(cop.offences.size).to eq(1)
220
+ expect(cop.messages).to eq([indent_msg])
221
+ end
222
+
223
+ it 'registers offence for private indented to method depth in singleton' \
224
+ 'class' do
225
+ inspect_source(cop,
226
+ ['class << self',
227
+ '',
228
+ ' private',
229
+ '',
230
+ ' def test; end',
231
+ 'end'])
232
+ expect(cop.offences.size).to eq(1)
233
+ expect(cop.messages).to eq([indent_msg])
234
+ end
235
+
236
+ it 'registers offence for private indented to method depth in class ' \
237
+ 'defined with Class.new' do
238
+ inspect_source(cop,
239
+ ['Test = Class.new do',
240
+ '',
241
+ ' private',
242
+ '',
243
+ ' def test; end',
244
+ 'end'])
245
+ expect(cop.offences.size).to eq(1)
246
+ expect(cop.messages).to eq([indent_msg])
247
+ end
248
+
249
+ it 'registers offence for private indented to method depth in module ' \
250
+ 'defined with Module.new' do
251
+ inspect_source(cop,
252
+ ['Test = Module.new do',
253
+ '',
254
+ ' private',
255
+ '',
256
+ ' def test; end',
257
+ 'end'])
258
+ expect(cop.offences.size).to eq(1)
259
+ expect(cop.messages).to eq([indent_msg])
260
+ end
261
+
262
+ it 'accepts private indented to the containing class indent level' do
263
+ inspect_source(cop,
264
+ ['class Test',
265
+ '',
266
+ 'private',
267
+ '',
268
+ ' def test; end',
269
+ 'end'])
270
+ expect(cop.offences).to be_empty
271
+ end
272
+
273
+ it 'accepts protected indented to the containing class indent level' do
274
+ inspect_source(cop,
275
+ ['class Test',
276
+ '',
277
+ 'protected',
278
+ '',
279
+ ' def test; end',
280
+ 'end'])
281
+ expect(cop.offences).to be_empty
282
+ end
283
+
284
+ it 'handles properly nested classes' do
285
+ inspect_source(cop,
286
+ ['class Test',
287
+ '',
288
+ ' class Nested',
289
+ '',
290
+ ' private',
291
+ '',
292
+ ' def a; end',
293
+ ' end',
294
+ '',
295
+ 'protected',
296
+ '',
297
+ ' def test; end',
298
+ 'end'])
299
+ expect(cop.offences.size).to eq(1)
300
+ expect(cop.messages).to eq([indent_msg])
301
+ end
302
+
303
+ it 'auto-corrects incorrectly indented access modifiers' do
304
+ corrected = autocorrect_source(cop, ['module M',
305
+ ' class Test',
306
+ '',
307
+ 'public',
308
+ ' private',
309
+ ' protected',
310
+ '',
311
+ ' def test; end',
312
+ ' end',
313
+ 'end'])
314
+ expect(corrected).to eq(['module M',
315
+ ' class Test',
316
+ '',
317
+ ' public',
318
+ ' private',
319
+ ' protected',
320
+ '',
321
+ ' def test; end',
322
+ ' end',
323
+ 'end'].join("\n"))
324
+ end
325
+
326
+ it 'auto-corrects private in complicated case' do
327
+ corrected = autocorrect_source(cop, ['class Hello',
328
+ ' def foo',
329
+ " 'hi'",
330
+ ' end',
331
+ '',
332
+ ' def bar',
333
+ ' Module.new do',
334
+ '',
335
+ ' private',
336
+ '',
337
+ ' def hi',
338
+ " 'bye'",
339
+ ' end',
340
+ ' end',
341
+ ' end',
342
+ 'end'])
343
+ expect(corrected).to eq(['class Hello',
344
+ ' def foo',
345
+ " 'hi'",
346
+ ' end',
347
+ '',
348
+ ' def bar',
349
+ ' Module.new do',
350
+ '',
351
+ ' private',
352
+ '',
353
+ ' def hi',
354
+ " 'bye'",
355
+ ' end',
356
+ ' end',
357
+ ' end',
358
+ 'end'].join("\n"))
359
+ end
360
+ end
361
+ end