sabat-rubocop 0.9.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (239) hide show
  1. data/.gitignore +50 -0
  2. data/.rspec +1 -0
  3. data/.rubocop.yml +7 -0
  4. data/.travis.yml +7 -0
  5. data/.yardopts +2 -0
  6. data/CHANGELOG.md +268 -0
  7. data/CONTRIBUTING.md +16 -0
  8. data/Gemfile +7 -0
  9. data/LICENSE.txt +20 -0
  10. data/README.md +324 -0
  11. data/Rakefile +29 -0
  12. data/bin/rubocop +22 -0
  13. data/config/default.yml +58 -0
  14. data/config/disabled.yml +5 -0
  15. data/config/enabled.yml +403 -0
  16. data/lib/rubocop.rb +116 -0
  17. data/lib/rubocop/cli.rb +407 -0
  18. data/lib/rubocop/config.rb +250 -0
  19. data/lib/rubocop/config_store.rb +39 -0
  20. data/lib/rubocop/cop/cop.rb +138 -0
  21. data/lib/rubocop/cop/lint/assignment_in_condition.rb +54 -0
  22. data/lib/rubocop/cop/lint/end_alignment.rb +189 -0
  23. data/lib/rubocop/cop/lint/end_in_method.rb +30 -0
  24. data/lib/rubocop/cop/lint/ensure_return.rb +22 -0
  25. data/lib/rubocop/cop/lint/eval.rb +22 -0
  26. data/lib/rubocop/cop/lint/handle_exceptions.rb +20 -0
  27. data/lib/rubocop/cop/lint/literal_in_condition.rb +81 -0
  28. data/lib/rubocop/cop/lint/loop.rb +29 -0
  29. data/lib/rubocop/cop/lint/rescue_exception.rb +29 -0
  30. data/lib/rubocop/cop/lint/shadowing_outer_local_variable.rb +34 -0
  31. data/lib/rubocop/cop/lint/unreachable_code.rb +35 -0
  32. data/lib/rubocop/cop/lint/unused_local_variable.rb +32 -0
  33. data/lib/rubocop/cop/lint/void.rb +58 -0
  34. data/lib/rubocop/cop/offence.rb +136 -0
  35. data/lib/rubocop/cop/rails/validation.rb +30 -0
  36. data/lib/rubocop/cop/style/access_control.rb +58 -0
  37. data/lib/rubocop/cop/style/alias.rb +28 -0
  38. data/lib/rubocop/cop/style/align_parameters.rb +39 -0
  39. data/lib/rubocop/cop/style/and_or.rb +45 -0
  40. data/lib/rubocop/cop/style/ascii_comments.rb +21 -0
  41. data/lib/rubocop/cop/style/ascii_identifiers.rb +22 -0
  42. data/lib/rubocop/cop/style/attr.rb +20 -0
  43. data/lib/rubocop/cop/style/avoid_class_vars.rb +20 -0
  44. data/lib/rubocop/cop/style/avoid_for.rb +18 -0
  45. data/lib/rubocop/cop/style/avoid_global_vars.rb +65 -0
  46. data/lib/rubocop/cop/style/avoid_perl_backrefs.rb +21 -0
  47. data/lib/rubocop/cop/style/avoid_perlisms.rb +50 -0
  48. data/lib/rubocop/cop/style/begin_block.rb +18 -0
  49. data/lib/rubocop/cop/style/block_comments.rb +20 -0
  50. data/lib/rubocop/cop/style/block_nesting.rb +47 -0
  51. data/lib/rubocop/cop/style/blocks.rb +27 -0
  52. data/lib/rubocop/cop/style/case_equality.rb +22 -0
  53. data/lib/rubocop/cop/style/case_indentation.rb +28 -0
  54. data/lib/rubocop/cop/style/character_literal.rb +37 -0
  55. data/lib/rubocop/cop/style/class_and_module_camel_case.rb +33 -0
  56. data/lib/rubocop/cop/style/class_methods.rb +22 -0
  57. data/lib/rubocop/cop/style/collection_methods.rb +56 -0
  58. data/lib/rubocop/cop/style/colon_method_call.rb +29 -0
  59. data/lib/rubocop/cop/style/constant_name.rb +31 -0
  60. data/lib/rubocop/cop/style/def_parentheses.rb +70 -0
  61. data/lib/rubocop/cop/style/documentation.rb +58 -0
  62. data/lib/rubocop/cop/style/dot_position.rb +25 -0
  63. data/lib/rubocop/cop/style/empty_line_between_defs.rb +26 -0
  64. data/lib/rubocop/cop/style/empty_lines.rb +40 -0
  65. data/lib/rubocop/cop/style/empty_literal.rb +53 -0
  66. data/lib/rubocop/cop/style/encoding.rb +29 -0
  67. data/lib/rubocop/cop/style/end_block.rb +18 -0
  68. data/lib/rubocop/cop/style/end_of_line.rb +23 -0
  69. data/lib/rubocop/cop/style/favor_join.rb +29 -0
  70. data/lib/rubocop/cop/style/favor_modifier.rb +118 -0
  71. data/lib/rubocop/cop/style/favor_sprintf.rb +28 -0
  72. data/lib/rubocop/cop/style/favor_unless_over_negated_if.rb +54 -0
  73. data/lib/rubocop/cop/style/hash_syntax.rb +47 -0
  74. data/lib/rubocop/cop/style/if_then_else.rb +29 -0
  75. data/lib/rubocop/cop/style/if_with_semicolon.rb +20 -0
  76. data/lib/rubocop/cop/style/lambda.rb +47 -0
  77. data/lib/rubocop/cop/style/leading_comment_space.rb +25 -0
  78. data/lib/rubocop/cop/style/line_continuation.rb +26 -0
  79. data/lib/rubocop/cop/style/line_length.rb +30 -0
  80. data/lib/rubocop/cop/style/method_and_variable_snake_case.rb +61 -0
  81. data/lib/rubocop/cop/style/method_call_parentheses.rb +22 -0
  82. data/lib/rubocop/cop/style/method_length.rb +57 -0
  83. data/lib/rubocop/cop/style/multiline_if_then.rb +47 -0
  84. data/lib/rubocop/cop/style/not.rb +24 -0
  85. data/lib/rubocop/cop/style/numeric_literals.rb +25 -0
  86. data/lib/rubocop/cop/style/one_line_conditional.rb +20 -0
  87. data/lib/rubocop/cop/style/op_method.rb +29 -0
  88. data/lib/rubocop/cop/style/parameter_lists.rb +42 -0
  89. data/lib/rubocop/cop/style/parentheses_around_condition.rb +42 -0
  90. data/lib/rubocop/cop/style/proc.rb +30 -0
  91. data/lib/rubocop/cop/style/reduce_arguments.rb +34 -0
  92. data/lib/rubocop/cop/style/regexp_literal.rb +39 -0
  93. data/lib/rubocop/cop/style/rescue_modifier.rb +55 -0
  94. data/lib/rubocop/cop/style/semicolon.rb +51 -0
  95. data/lib/rubocop/cop/style/single_line_methods.rb +48 -0
  96. data/lib/rubocop/cop/style/space_after_comma_etc.rb +69 -0
  97. data/lib/rubocop/cop/style/space_after_control_keyword.rb +32 -0
  98. data/lib/rubocop/cop/style/string_literals.rb +36 -0
  99. data/lib/rubocop/cop/style/surrounding_space.rb +314 -0
  100. data/lib/rubocop/cop/style/symbol_array.rb +31 -0
  101. data/lib/rubocop/cop/style/symbol_name.rb +27 -0
  102. data/lib/rubocop/cop/style/tab.rb +25 -0
  103. data/lib/rubocop/cop/style/ternary_operator.rb +49 -0
  104. data/lib/rubocop/cop/style/trailing_whitespace.rb +24 -0
  105. data/lib/rubocop/cop/style/trivial_accessors.rb +32 -0
  106. data/lib/rubocop/cop/style/unless_else.rb +26 -0
  107. data/lib/rubocop/cop/style/variable_interpolation.rb +32 -0
  108. data/lib/rubocop/cop/style/when_then.rb +25 -0
  109. data/lib/rubocop/cop/style/while_until_do.rb +45 -0
  110. data/lib/rubocop/cop/style/word_array.rb +44 -0
  111. data/lib/rubocop/cop/util.rb +27 -0
  112. data/lib/rubocop/cop/variable_inspector.rb +280 -0
  113. data/lib/rubocop/formatter/base_formatter.rb +119 -0
  114. data/lib/rubocop/formatter/clang_style_formatter.rb +21 -0
  115. data/lib/rubocop/formatter/emacs_style_formatter.rb +17 -0
  116. data/lib/rubocop/formatter/formatter_set.rb +77 -0
  117. data/lib/rubocop/formatter/json_formatter.rb +76 -0
  118. data/lib/rubocop/formatter/progress_formatter.rb +63 -0
  119. data/lib/rubocop/formatter/simple_text_formatter.rb +62 -0
  120. data/lib/rubocop/version.rb +21 -0
  121. data/rubocop.gemspec +36 -0
  122. data/spec/.rubocop.yml +5 -0
  123. data/spec/project_spec.rb +24 -0
  124. data/spec/rubocop/cli_spec.rb +906 -0
  125. data/spec/rubocop/config_spec.rb +470 -0
  126. data/spec/rubocop/config_store_spec.rb +66 -0
  127. data/spec/rubocop/cops/cop_spec.rb +38 -0
  128. data/spec/rubocop/cops/lint/assignment_in_condition_spec.rb +111 -0
  129. data/spec/rubocop/cops/lint/end_alignment_spec.rb +333 -0
  130. data/spec/rubocop/cops/lint/end_in_method_spec.rb +35 -0
  131. data/spec/rubocop/cops/lint/ensure_return_spec.rb +37 -0
  132. data/spec/rubocop/cops/lint/eval_spec.rb +41 -0
  133. data/spec/rubocop/cops/lint/handle_exceptions_spec.rb +36 -0
  134. data/spec/rubocop/cops/lint/literal_in_condition_spec.rb +42 -0
  135. data/spec/rubocop/cops/lint/loop_spec.rb +33 -0
  136. data/spec/rubocop/cops/lint/rescue_exception_spec.rb +127 -0
  137. data/spec/rubocop/cops/lint/shadowing_outer_local_variable_spec.rb +243 -0
  138. data/spec/rubocop/cops/lint/unreachable_code_spec.rb +69 -0
  139. data/spec/rubocop/cops/lint/unused_local_variable_spec.rb +497 -0
  140. data/spec/rubocop/cops/lint/void_spec.rb +63 -0
  141. data/spec/rubocop/cops/offence_spec.rb +133 -0
  142. data/spec/rubocop/cops/rails/validation_spec.rb +27 -0
  143. data/spec/rubocop/cops/style/access_control_spec.rb +142 -0
  144. data/spec/rubocop/cops/style/alias_spec.rb +47 -0
  145. data/spec/rubocop/cops/style/align_parameters_spec.rb +199 -0
  146. data/spec/rubocop/cops/style/and_or_spec.rb +39 -0
  147. data/spec/rubocop/cops/style/ascii_comments_spec.rb +28 -0
  148. data/spec/rubocop/cops/style/ascii_identifiers_spec.rb +28 -0
  149. data/spec/rubocop/cops/style/attr_spec.rb +20 -0
  150. data/spec/rubocop/cops/style/avoid_class_vars_spec.rb +27 -0
  151. data/spec/rubocop/cops/style/avoid_for_spec.rb +37 -0
  152. data/spec/rubocop/cops/style/avoid_global_vars_spec.rb +34 -0
  153. data/spec/rubocop/cops/style/avoid_perl_backrefs_spec.rb +20 -0
  154. data/spec/rubocop/cops/style/avoid_perlisms_spec.rb +47 -0
  155. data/spec/rubocop/cops/style/begin_block_spec.rb +19 -0
  156. data/spec/rubocop/cops/style/block_comments_spec.rb +27 -0
  157. data/spec/rubocop/cops/style/block_nesting_spec.rb +159 -0
  158. data/spec/rubocop/cops/style/blocks_spec.rb +35 -0
  159. data/spec/rubocop/cops/style/case_equality_spec.rb +18 -0
  160. data/spec/rubocop/cops/style/case_indentation_spec.rb +88 -0
  161. data/spec/rubocop/cops/style/character_literal_spec.rb +28 -0
  162. data/spec/rubocop/cops/style/class_and_module_camel_case_spec.rb +46 -0
  163. data/spec/rubocop/cops/style/class_methods_spec.rb +51 -0
  164. data/spec/rubocop/cops/style/collection_methods_spec.rb +41 -0
  165. data/spec/rubocop/cops/style/colon_method_call_spec.rb +55 -0
  166. data/spec/rubocop/cops/style/constant_name_spec.rb +56 -0
  167. data/spec/rubocop/cops/style/def_with_parentheses_spec.rb +40 -0
  168. data/spec/rubocop/cops/style/def_without_parentheses_spec.rb +34 -0
  169. data/spec/rubocop/cops/style/documentation_spec.rb +79 -0
  170. data/spec/rubocop/cops/style/dot_position_spec.rb +30 -0
  171. data/spec/rubocop/cops/style/empty_line_between_defs_spec.rb +85 -0
  172. data/spec/rubocop/cops/style/empty_lines_spec.rb +40 -0
  173. data/spec/rubocop/cops/style/empty_literal_spec.rb +91 -0
  174. data/spec/rubocop/cops/style/encoding_spec.rb +49 -0
  175. data/spec/rubocop/cops/style/end_block_spec.rb +19 -0
  176. data/spec/rubocop/cops/style/end_of_line_spec.rb +25 -0
  177. data/spec/rubocop/cops/style/favor_join_spec.rb +37 -0
  178. data/spec/rubocop/cops/style/favor_modifier_spec.rb +160 -0
  179. data/spec/rubocop/cops/style/favor_sprintf_spec.rb +53 -0
  180. data/spec/rubocop/cops/style/favor_unless_over_negated_if_spec.rb +64 -0
  181. data/spec/rubocop/cops/style/favor_until_over_negated_while_spec.rb +47 -0
  182. data/spec/rubocop/cops/style/hash_syntax_spec.rb +51 -0
  183. data/spec/rubocop/cops/style/if_with_semicolon_spec.rb +25 -0
  184. data/spec/rubocop/cops/style/lambda_spec.rb +45 -0
  185. data/spec/rubocop/cops/style/leading_comment_space_spec.rb +65 -0
  186. data/spec/rubocop/cops/style/line_continuation_spec.rb +26 -0
  187. data/spec/rubocop/cops/style/line_length_spec.rb +25 -0
  188. data/spec/rubocop/cops/style/method_and_variable_snake_case_spec.rb +95 -0
  189. data/spec/rubocop/cops/style/method_call_parentheses_spec.rb +25 -0
  190. data/spec/rubocop/cops/style/method_length_spec.rb +151 -0
  191. data/spec/rubocop/cops/style/multiline_if_then_spec.rb +97 -0
  192. data/spec/rubocop/cops/style/not_spec.rb +28 -0
  193. data/spec/rubocop/cops/style/numeric_literals_spec.rb +51 -0
  194. data/spec/rubocop/cops/style/one_line_conditional_spec.rb +18 -0
  195. data/spec/rubocop/cops/style/op_method_spec.rb +80 -0
  196. data/spec/rubocop/cops/style/parameter_lists_spec.rb +49 -0
  197. data/spec/rubocop/cops/style/parentheses_around_condition_spec.rb +59 -0
  198. data/spec/rubocop/cops/style/proc_spec.rb +28 -0
  199. data/spec/rubocop/cops/style/reduce_arguments_spec.rb +59 -0
  200. data/spec/rubocop/cops/style/regexp_literal_spec.rb +83 -0
  201. data/spec/rubocop/cops/style/rescue_modifier_spec.rb +122 -0
  202. data/spec/rubocop/cops/style/semicolon_spec.rb +95 -0
  203. data/spec/rubocop/cops/style/single_line_methods_spec.rb +54 -0
  204. data/spec/rubocop/cops/style/space_after_colon_spec.rb +29 -0
  205. data/spec/rubocop/cops/style/space_after_comma_spec.rb +31 -0
  206. data/spec/rubocop/cops/style/space_after_control_keyword_spec.rb +69 -0
  207. data/spec/rubocop/cops/style/space_after_semicolon_spec.rb +24 -0
  208. data/spec/rubocop/cops/style/space_around_braces_spec.rb +49 -0
  209. data/spec/rubocop/cops/style/space_around_equals_in_default_parameter_spec.rb +34 -0
  210. data/spec/rubocop/cops/style/space_around_operators_spec.rb +216 -0
  211. data/spec/rubocop/cops/style/space_inside_brackets_spec.rb +51 -0
  212. data/spec/rubocop/cops/style/space_inside_hash_literal_braces_spec.rb +99 -0
  213. data/spec/rubocop/cops/style/space_inside_parens_spec.rb +33 -0
  214. data/spec/rubocop/cops/style/string_literals_spec.rb +62 -0
  215. data/spec/rubocop/cops/style/symbol_array_spec.rb +45 -0
  216. data/spec/rubocop/cops/style/symbol_name_spec.rb +122 -0
  217. data/spec/rubocop/cops/style/tab_spec.rb +23 -0
  218. data/spec/rubocop/cops/style/ternary_operator_spec.rb +42 -0
  219. data/spec/rubocop/cops/style/trailing_whitespace_spec.rb +29 -0
  220. data/spec/rubocop/cops/style/trivial_accessors_spec.rb +338 -0
  221. data/spec/rubocop/cops/style/unless_else_spec.rb +31 -0
  222. data/spec/rubocop/cops/style/variable_interpolation_spec.rb +53 -0
  223. data/spec/rubocop/cops/style/when_then_spec.rb +40 -0
  224. data/spec/rubocop/cops/style/while_until_do_spec.rb +47 -0
  225. data/spec/rubocop/cops/style/word_array_spec.rb +61 -0
  226. data/spec/rubocop/cops/variable_inspector_spec.rb +374 -0
  227. data/spec/rubocop/formatter/base_formatter_spec.rb +190 -0
  228. data/spec/rubocop/formatter/clang_style_formatter_spec.rb +70 -0
  229. data/spec/rubocop/formatter/emacs_style_formatter_spec.rb +32 -0
  230. data/spec/rubocop/formatter/formatter_set_spec.rb +132 -0
  231. data/spec/rubocop/formatter/json_formatter_spec.rb +142 -0
  232. data/spec/rubocop/formatter/progress_formatter_spec.rb +196 -0
  233. data/spec/rubocop/formatter/simple_text_formatter_spec.rb +74 -0
  234. data/spec/spec_helper.rb +92 -0
  235. data/spec/support/file_helper.rb +21 -0
  236. data/spec/support/isolated_environment.rb +27 -0
  237. data/spec/support/mri_syntax_checker.rb +69 -0
  238. data/spec/support/shared_examples.rb +33 -0
  239. metadata +517 -0
@@ -0,0 +1,39 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ module Rubocop
6
+ module Cop
7
+ module Style
8
+ describe AndOr do
9
+ let(:amp) { AndOr.new }
10
+
11
+ it 'registers an offence for OR' do
12
+ inspect_source(amp,
13
+ ['test if a or b'])
14
+ expect(amp.offences.size).to eq(1)
15
+ expect(amp.messages).to eq(['Use || instead of or.'])
16
+ end
17
+
18
+ it 'registers an offence for AND' do
19
+ inspect_source(amp,
20
+ ['test if a and b'])
21
+ expect(amp.offences.size).to eq(1)
22
+ expect(amp.messages).to eq(['Use && instead of and.'])
23
+ end
24
+
25
+ it 'accepts ||' do
26
+ inspect_source(amp,
27
+ ['test if a || b'])
28
+ expect(amp.offences).to be_empty
29
+ end
30
+
31
+ it 'accepts &&' do
32
+ inspect_source(amp,
33
+ ['test if a && b'])
34
+ expect(amp.offences).to be_empty
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,28 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ module Rubocop
6
+ module Cop
7
+ module Style
8
+ describe AsciiComments do
9
+ let(:ascii) { AsciiComments.new }
10
+
11
+ it 'registers an offence for a comment with non-ascii chars' do
12
+ inspect_source(ascii,
13
+ ['# encoding: utf-8',
14
+ '# 这是什么?'])
15
+ expect(ascii.offences.size).to eq(1)
16
+ expect(ascii.offences.map(&:message))
17
+ .to eq([AsciiComments::MSG])
18
+ end
19
+
20
+ it 'accepts comments with only ascii chars' do
21
+ inspect_source(ascii,
22
+ ['# AZaz1@$%~,;*_`|'])
23
+ expect(ascii.offences).to be_empty
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,28 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ module Rubocop
6
+ module Cop
7
+ module Style
8
+ describe AsciiIdentifiers do
9
+ let(:ascii) { AsciiIdentifiers.new }
10
+
11
+ it 'registers an offence for a variable name with non-ascii chars' do
12
+ inspect_source(ascii,
13
+ ['# encoding: utf-8',
14
+ 'älg = 1'])
15
+ expect(ascii.offences.size).to eq(1)
16
+ expect(ascii.offences.map(&:message))
17
+ .to eq([AsciiIdentifiers::MSG])
18
+ end
19
+
20
+ it 'accepts identifiers with only ascii chars' do
21
+ inspect_source(ascii,
22
+ ['x.empty?'])
23
+ expect(ascii.offences).to be_empty
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,20 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ module Rubocop
6
+ module Cop
7
+ module Style
8
+ describe Attr do
9
+ let(:cop) { Attr.new }
10
+
11
+ it 'registers an offence attr' do
12
+ inspect_source(cop, ['class SomeClass',
13
+ ' attr :name',
14
+ 'end'])
15
+ expect(cop.offences.size).to eq(1)
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,27 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ module Rubocop
6
+ module Cop
7
+ module Style
8
+ describe AvoidClassVars do
9
+ let(:acv) { AvoidClassVars.new }
10
+
11
+ it 'registers an offence for class variable declaration' do
12
+ inspect_source(acv,
13
+ ['class TestClass; @@test = 10; end'])
14
+ expect(acv.offences.size).to eq(1)
15
+ expect(acv.offences.map(&:message))
16
+ .to eq(['Replace class var @@test with a class instance var.'])
17
+ end
18
+
19
+ it 'does not register an offence for class variable usage' do
20
+ inspect_source(acv,
21
+ ['@@test.test(20)'])
22
+ expect(acv.offences).to be_empty
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,37 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ module Rubocop
6
+ module Cop
7
+ module Style
8
+ describe AvoidFor do
9
+ let(:af) { AvoidFor.new }
10
+
11
+ it 'registers an offence for for' do
12
+ inspect_source(af,
13
+ ['def func',
14
+ ' for n in [1, 2, 3] do',
15
+ ' puts n',
16
+ ' end',
17
+ 'end'])
18
+ expect(af.offences.size).to eq(1)
19
+ expect(af.offences.map(&:message))
20
+ .to eq([AvoidFor::MSG])
21
+ end
22
+
23
+ it 'does not register an offence for :for' do
24
+ inspect_source(af,
25
+ ['[:for, :ala, :bala]'])
26
+ expect(af.offences).to be_empty
27
+ end
28
+
29
+ it 'does not register an offence for def for' do
30
+ inspect_source(af,
31
+ ['def for; end'])
32
+ expect(af.offences).to be_empty
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,34 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ module Rubocop
6
+ module Cop
7
+ module Style
8
+ describe AvoidGlobalVars do
9
+ let(:ap) { AvoidGlobalVars.new }
10
+
11
+ it 'registers an offence for $custom' do
12
+ inspect_source(ap, ['puts $custom'])
13
+ expect(ap.offences.size).to eq(1)
14
+ end
15
+
16
+ it 'does not register an offence for $"' do
17
+ inspect_source(ap, ['puts $"'])
18
+
19
+ expect(ap.offences).to be_empty
20
+ end
21
+
22
+ it 'does not register an offence for $ORS' do
23
+ inspect_source(ap, ['puts $0'])
24
+ expect(ap.offences).to be_empty
25
+ end
26
+
27
+ it 'does not register an offence for backrefs like $1' do
28
+ inspect_source(ap, ['puts $1'])
29
+ expect(ap.offences).to be_empty
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,20 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ module Rubocop
6
+ module Cop
7
+ module Style
8
+ describe AvoidPerlBackrefs do
9
+ let(:ap) { AvoidPerlBackrefs.new }
10
+
11
+ it 'registers an offence for $1' do
12
+ inspect_source(ap, ['puts $1'])
13
+ expect(ap.offences.size).to eq(1)
14
+ expect(ap.offences.map(&:message))
15
+ .to eq(['Prefer the use of MatchData over $1.'])
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,47 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ module Rubocop
6
+ module Cop
7
+ module Style
8
+ describe AvoidPerlisms do
9
+ let(:ap) { AvoidPerlisms.new }
10
+
11
+ it 'registers an offence for $:' do
12
+ inspect_source(ap, ['puts $:'])
13
+ expect(ap.offences.size).to eq(1)
14
+ expect(ap.offences.map(&:message))
15
+ .to eq(['Prefer $LOAD_PATH over $:.'])
16
+ end
17
+
18
+ it 'registers an offence for $"' do
19
+ inspect_source(ap, ['puts $"'])
20
+ expect(ap.offences.size).to eq(1)
21
+ expect(ap.offences.map(&:message))
22
+ .to eq(['Prefer $LOADED_FEATURES over $".'])
23
+ end
24
+
25
+ it 'registers an offence for $0' do
26
+ inspect_source(ap, ['puts $0'])
27
+ expect(ap.offences.size).to eq(1)
28
+ expect(ap.offences.map(&:message))
29
+ .to eq(['Prefer $PROGRAM_NAME over $0.'])
30
+ end
31
+
32
+ it 'registers an offence for $$' do
33
+ inspect_source(ap, ['puts $$'])
34
+ expect(ap.offences.size).to eq(1)
35
+ expect(ap.offences.map(&:message))
36
+ .to eq(['Prefer $PID or $PROCESS_ID from English library' +
37
+ ' over $$.'])
38
+ end
39
+
40
+ it 'does not register an offence for backrefs like $1' do
41
+ inspect_source(ap, ['puts $1'])
42
+ expect(ap.offences).to be_empty
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,19 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ module Rubocop
6
+ module Cop
7
+ module Style
8
+ describe BeginBlock do
9
+ let(:cop) { BeginBlock.new }
10
+
11
+ it 'reports an offence for a BEGIN block' do
12
+ src = ['BEGIN { test }']
13
+ inspect_source(cop, src)
14
+ expect(cop.offences.size).to eq(1)
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,27 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ module Rubocop
6
+ module Cop
7
+ module Style
8
+ describe BlockComments do
9
+ let(:block) { BlockComments.new }
10
+
11
+ it 'registers an offence for block comments' do
12
+ inspect_source(block,
13
+ ['=begin',
14
+ 'comment',
15
+ '=end'])
16
+ expect(block.offences.size).to eq(1)
17
+ end
18
+
19
+ it 'accepts regular comments' do
20
+ inspect_source(block,
21
+ ['# comment'])
22
+ expect(block.offences).to be_empty
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,159 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ module Rubocop
6
+ module Cop
7
+ module Style
8
+ describe BlockNesting do
9
+ let(:block_nesting) { BlockNesting.new }
10
+ before { BlockNesting.config = { 'Max' => 2 } }
11
+
12
+ it 'accepts `Max` levels of nesting' do
13
+ source = ['if a',
14
+ ' if b',
15
+ ' puts b',
16
+ ' end',
17
+ 'end']
18
+ expect_nesting_offences(source, [])
19
+ end
20
+
21
+ it 'registers an offence for `Max + 1` levels of `if` nesting' do
22
+ source = ['if a',
23
+ ' if b',
24
+ ' if c',
25
+ ' puts c',
26
+ ' end',
27
+ ' end',
28
+ 'end']
29
+ expect_nesting_offences(source, [3])
30
+ end
31
+
32
+ it 'registers a single offence for `Max + 2` levels of `if` nesting' do
33
+ source = ['if a',
34
+ ' if b',
35
+ ' if c',
36
+ ' if d',
37
+ ' puts d',
38
+ ' end',
39
+ ' end',
40
+ ' end',
41
+ 'end']
42
+ expect_nesting_offences(source, [3])
43
+ end
44
+
45
+ it 'registers 2 offences' do
46
+ source = ['if a',
47
+ ' if b',
48
+ ' if c',
49
+ ' puts c',
50
+ ' end',
51
+ ' end',
52
+ ' if d',
53
+ ' if e',
54
+ ' puts e',
55
+ ' end',
56
+ ' end',
57
+ 'end']
58
+ expect_nesting_offences(source, [3, 8])
59
+ end
60
+
61
+ it 'registers an offence for nested `case`' do
62
+ source = ['if a',
63
+ ' if b',
64
+ ' case c',
65
+ ' when C',
66
+ ' puts C',
67
+ ' end',
68
+ ' end',
69
+ 'end']
70
+ expect_nesting_offences(source, [3])
71
+ end
72
+
73
+ it 'registers an offence for nested `while`' do
74
+ source = ['if a',
75
+ ' if b',
76
+ ' while c',
77
+ ' puts c',
78
+ ' end',
79
+ ' end',
80
+ 'end']
81
+ expect_nesting_offences(source, [3])
82
+ end
83
+
84
+ it 'registers an offence for nested modifier `while`' do
85
+ source = ['if a',
86
+ ' if b',
87
+ ' begin',
88
+ ' puts c',
89
+ ' end while c',
90
+ ' end',
91
+ 'end']
92
+ expect_nesting_offences(source, [3])
93
+ end
94
+
95
+ it 'registers an offence for nested `until`' do
96
+ source = ['if a',
97
+ ' if b',
98
+ ' until c',
99
+ ' puts c',
100
+ ' end',
101
+ ' end',
102
+ 'end']
103
+ expect_nesting_offences(source, [3])
104
+ end
105
+
106
+ it 'registers an offence for nested modifier `until`' do
107
+ source = ['if a',
108
+ ' if b',
109
+ ' begin',
110
+ ' puts c',
111
+ ' end until c',
112
+ ' end',
113
+ 'end']
114
+ expect_nesting_offences(source, [3])
115
+ end
116
+
117
+ it 'registers an offence for nested `for`' do
118
+ source = ['if a',
119
+ ' if b',
120
+ ' for c in [1,2] do',
121
+ ' puts c',
122
+ ' end',
123
+ ' end',
124
+ 'end']
125
+ expect_nesting_offences(source, [3])
126
+ end
127
+
128
+ it 'registers an offence for nested `rescue`' do
129
+ source = ['if a',
130
+ ' if b',
131
+ ' begin',
132
+ ' puts c',
133
+ ' rescue',
134
+ ' puts x',
135
+ ' end',
136
+ ' end',
137
+ 'end']
138
+ expect_nesting_offences(source, [5])
139
+ end
140
+
141
+ it 'accepts if/elsif' do
142
+ source = ['if a',
143
+ 'elsif b',
144
+ 'elsif c',
145
+ 'elsif d',
146
+ 'end']
147
+ expect_nesting_offences(source, [])
148
+ end
149
+
150
+ def expect_nesting_offences(source, lines)
151
+ inspect_source(block_nesting, source)
152
+ expect(block_nesting.offences.map(&:line)).to eq(lines)
153
+ expect(block_nesting.messages).to eq(
154
+ ['Avoid more than 2 levels of block nesting.'] * lines.length)
155
+ end
156
+ end
157
+ end
158
+ end
159
+ end