sabat-rubocop 0.9.0

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 (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,21 @@
1
+ # encoding: utf-8
2
+
3
+ module Rubocop
4
+ module Cop
5
+ module Style
6
+ # This cop checks for non-ascii (non-English) characters
7
+ # in comments.
8
+ class AsciiComments < Cop
9
+ MSG = 'Use only ascii symbols in comments.'
10
+
11
+ def inspect(source_buffer, source, tokens, ast, comments)
12
+ comments.each do |comment|
13
+ if comment.text =~ /[^\x00-\x7f]/
14
+ add_offence(:convention, comment.loc, MSG)
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,22 @@
1
+ # encoding: utf-8
2
+
3
+ # rubocop:disable SymbolName
4
+
5
+ module Rubocop
6
+ module Cop
7
+ module Style
8
+ # This cop checks for non-ascii characters in indentifier names.
9
+ class AsciiIdentifiers < Cop
10
+ MSG = 'Use only ascii symbols in identifiers.'
11
+
12
+ def inspect(source_buffer, source, tokens, ast, comments)
13
+ tokens.each do |t|
14
+ if t.type == :tIDENTIFIER && t.text =~ /[^\x00-\x7f]/
15
+ add_offence(:convention, t.pos, MSG)
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,20 @@
1
+ # encoding: utf-8
2
+
3
+ module Rubocop
4
+ module Cop
5
+ module Style
6
+ # This cop checks for uses of Module#attr.
7
+ class Attr < Cop
8
+ MSG = 'Do not use `attr`. Use `attr_reader` instead.'
9
+
10
+ def on_send(node)
11
+ if command?(:attr, node)
12
+ add_offence(:convention, node.loc.selector, MSG)
13
+ end
14
+
15
+ super
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,20 @@
1
+ # encoding: utf-8
2
+
3
+ module Rubocop
4
+ module Cop
5
+ module Style
6
+ # This cop checks for uses of class variables. Offences
7
+ # are signaled only on assignment to class variables to
8
+ # reduced the number of offences that would be reported.
9
+ class AvoidClassVars < Cop
10
+ MSG = 'Replace class var %s with a class instance var.'
11
+
12
+ def on_cvasgn(node)
13
+ class_var, = *node
14
+ add_offence(:convention, node.loc.name, sprintf(MSG, class_var))
15
+ super
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,18 @@
1
+ # encoding: utf-8
2
+
3
+ module Rubocop
4
+ module Cop
5
+ module Style
6
+ # This cop looks for uses of the *for* keyword.
7
+ class AvoidFor < Cop
8
+ MSG = 'Prefer *each* over *for*.'
9
+
10
+ def on_for(node)
11
+ add_offence(:convention, node.loc.keyword, MSG)
12
+
13
+ super
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,65 @@
1
+ # encoding: utf-8
2
+
3
+ module Rubocop
4
+ module Cop
5
+ module Style
6
+ # This cops looks for uses of global variables.
7
+ # It does not report offences for built-in global variables.
8
+ class AvoidGlobalVars < Cop
9
+ MSG = 'Do not introduce global variables.'
10
+
11
+ # predefined global variables their English aliases
12
+ # http://www.zenspider.com/Languages/Ruby/QuickRef.html
13
+ BUILT_IN_VARS = %w(
14
+ $: $LOAD_PATH
15
+ $" $LOADED_FEATURES
16
+ $0 $PROGRAM_NAME
17
+ $! $ERROR_INFO
18
+ $@ $ERROR_POSITION
19
+ $; $FS $FIELD_SEPARATOR
20
+ $, $OFS $OUTPUT_FIELD_SEPARATOR
21
+ $/ $RS $INPUT_RECORD_SEPARATOR
22
+ $\\ $ORS $OUTPUT_RECORD_SEPARATOR
23
+ $. $NR $INPUT_LINE_NUMBER
24
+ $_ $LAST_READ_LINE
25
+ $> $DEFAULT_OUTPUT
26
+ $< $DEFAULT_INPUT
27
+ $$ $PID $PROCESS_ID
28
+ $? $CHILD_STATUS
29
+ $~ $LAST_MATCH_INFO
30
+ $= $IGNORECASE
31
+ $* $ARGV
32
+ $& $MATCH
33
+ $` $PREMATCH
34
+ $' $POSTMATCH
35
+ $+ $LAST_PAREN_MATCH
36
+ $stdin $stdout $stderr
37
+ $DEBUG $FILENAME $VERBOSE
38
+ $-0 $-a $-d $-F $-i $-I $-l $-p $-v $-w
39
+ )
40
+
41
+ def on_gvar(node)
42
+ check(node)
43
+
44
+ super
45
+ end
46
+
47
+ def on_gvasgn(node)
48
+ check(node)
49
+
50
+ super
51
+ end
52
+
53
+ def check(node)
54
+ global_var, = *node
55
+
56
+ unless BUILT_IN_VARS.include?(global_var.to_s)
57
+ add_offence(:convention,
58
+ node.loc.name,
59
+ MSG)
60
+ end
61
+ end
62
+ end
63
+ end
64
+ end
65
+ end
@@ -0,0 +1,21 @@
1
+ # encoding: utf-8
2
+
3
+ module Rubocop
4
+ module Cop
5
+ module Style
6
+ # This cop looks for uses of Perl-style regexp match
7
+ # backreferences like $1, $2, etc.
8
+ class AvoidPerlBackrefs < Cop
9
+ def on_nth_ref(node)
10
+ backref, = *node
11
+
12
+ add_offence(:convention,
13
+ node.loc.expression,
14
+ "Prefer the use of MatchData over $#{backref}.")
15
+
16
+ super
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,50 @@
1
+ # encoding: utf-8
2
+
3
+ module Rubocop
4
+ module Cop
5
+ module Style
6
+ # This cop looks for uses of Perl-style global variables.
7
+ class AvoidPerlisms < Cop
8
+ PREFERRED_VARS = {
9
+ '$:' => '$LOAD_PATH',
10
+ '$"' => '$LOADED_FEATURES',
11
+ '$0' => '$PROGRAM_NAME',
12
+ '$!' => '$ERROR_INFO from English library',
13
+ '$@' => '$ERROR_POSITION from English library',
14
+ '$;' => '$FS or $FIELD_SEPARATOR from English library',
15
+ '$,' => '$OFS or $OUTPUT_FIELD_SEPARATOR from English library',
16
+ '$/' => '$RS or $INPUT_RECORD_SEPARATOR from English library',
17
+ '$\\' => '$ORS or $OUTPUT_RECORD_SEPARATOR from English library',
18
+ '$.' => '$NR or $INPUT_LINE_NUMBER from English library',
19
+ '$_' => '$LAST_READ_LINE from English library',
20
+ '$>' => '$DEFAULT_OUTPUT from English library',
21
+ '$<' => '$DEFAULT_INPUT from English library',
22
+ '$$' => '$PID or $PROCESS_ID from English library',
23
+ '$?' => '$CHILD_STATUS from English library',
24
+ '$~' => '$LAST_MATCH_INFO from English library',
25
+ '$=' => '$IGNORECASE from English library',
26
+ '$*' => '$ARGV from English library or ARGV constant',
27
+ '$&' => '$MATCH from English library',
28
+ '$`' => '$PREMATCH from English library',
29
+ '$\'' => '$POSTMATCH from English library',
30
+ '$+' => '$LAST_PAREN_MATCH from English library'
31
+ }
32
+
33
+ def on_gvar(node)
34
+ global_var, = *node
35
+ global_var = global_var.to_s
36
+
37
+ if PREFERRED_VARS[global_var]
38
+ add_offence(
39
+ :convention,
40
+ node.loc.expression,
41
+ "Prefer #{PREFERRED_VARS[global_var]} over #{global_var}."
42
+ )
43
+ end
44
+
45
+ super
46
+ end
47
+ end
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,18 @@
1
+ # encoding: utf-8
2
+
3
+ module Rubocop
4
+ module Cop
5
+ module Style
6
+ # This cop checks for BEGIN blocks.
7
+ class BeginBlock < Cop
8
+ MSG = 'Avoid the use of BEGIN blocks.'
9
+
10
+ def on_preexe(node)
11
+ add_offence(:convention, node.loc.keyword, MSG)
12
+
13
+ super
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,20 @@
1
+ # encoding: utf-8
2
+
3
+ module Rubocop
4
+ module Cop
5
+ module Style
6
+ # This cop looks for uses of block comments (=begin...=end).
7
+ class BlockComments < Cop
8
+ MSG = 'Do not use block comments.'
9
+
10
+ def inspect(source_buffer, source, tokens, ast, comments)
11
+ comments.each do |comment|
12
+ if comment.text.start_with?('=begin')
13
+ add_offence(:convention, comment.loc, MSG)
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,47 @@
1
+ # encoding: utf-8
2
+
3
+ module Rubocop
4
+ module Cop
5
+ module Style
6
+ # This cop checks for excessive nesting of conditional and looping
7
+ # constructs. Despite the cop's name, blocks are not considered as a
8
+ # extra level of nesting.
9
+ #
10
+ # The maximum level of nesting allowed is configurable.
11
+ class BlockNesting < Cop
12
+ NESTING_BLOCKS = [:case, :if, :while, :while_post, :until, :until_post,
13
+ :for, :resbody]
14
+
15
+ def inspect(source_buffer, source, tokens, ast, comments)
16
+ return unless ast
17
+ max = BlockNesting.config['Max']
18
+ check_nesting_level(ast, max, 0)
19
+ end
20
+
21
+ private
22
+
23
+ def check_nesting_level(node, max, current_level)
24
+ if NESTING_BLOCKS.include?(node.type)
25
+ unless node.loc.respond_to?(:keyword) &&
26
+ node.loc.keyword.is?('elsif')
27
+ current_level += 1
28
+ end
29
+ if current_level == max + 1
30
+ add_offence(:convention, node.location.expression, message(max))
31
+ return
32
+ end
33
+ end
34
+ node.children.each do |child|
35
+ if child.is_a?(Parser::AST::Node)
36
+ check_nesting_level(child, max, current_level)
37
+ end
38
+ end
39
+ end
40
+
41
+ def message(max)
42
+ "Avoid more than #{max} levels of block nesting."
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,27 @@
1
+ # encoding: utf-8
2
+
3
+ module Rubocop
4
+ module Cop
5
+ module Style
6
+ # Check for uses of braces or do/end around single line or
7
+ # multi-line blocks.
8
+ class Blocks < Cop
9
+ MULTI_LINE_MSG = 'Avoid using {...} for multi-line blocks.'
10
+ SINGLE_LINE_MSG = 'Prefer {...} over do...end for single-line blocks.'
11
+
12
+ def on_block(node)
13
+ block_length = Util.block_length(node)
14
+ block_begin = node.loc.begin.source
15
+
16
+ if block_length > 0 && block_begin == '{'
17
+ add_offence(:convention, node.loc.begin, MULTI_LINE_MSG)
18
+ elsif block_length == 0 && block_begin != '{'
19
+ add_offence(:convention, node.loc.begin, SINGLE_LINE_MSG)
20
+ end
21
+
22
+ super
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,22 @@
1
+ # encoding: utf-8
2
+
3
+ module Rubocop
4
+ module Cop
5
+ module Style
6
+ # This cop checks for uses of the case equality operator(===).
7
+ class CaseEquality < Cop
8
+ MSG = 'Avoid the use of the case equality operator(===).'
9
+
10
+ def on_send(node)
11
+ _receiver, method_name, *_args = *node
12
+
13
+ if method_name == :===
14
+ add_offence(:convention, node.loc.selector, MSG)
15
+ end
16
+
17
+ super
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,28 @@
1
+ # encoding: utf-8
2
+
3
+ module Rubocop
4
+ module Cop
5
+ module Style
6
+ # This cop checks whether the *when*s of a *case* expression
7
+ # are indented as deep as its *case* keyword.
8
+ #
9
+ # It will register a separate offence for each misaligned *when*.
10
+ class CaseIndentation < Cop
11
+ MSG = 'Indent when as deep as case.'
12
+
13
+ def on_case(case_node)
14
+ _condition, *whens, _else = *case_node
15
+
16
+ case_column = case_node.location.keyword.column
17
+
18
+ whens.each do |when_node|
19
+ pos = when_node.loc.keyword
20
+ add_offence(:convention, pos, MSG) if pos.column != case_column
21
+ end
22
+
23
+ super
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,37 @@
1
+ # encoding: utf-8
2
+
3
+ module Rubocop
4
+ module Cop
5
+ module Style
6
+ # Checks for uses of the character literal ?x.
7
+ class CharacterLiteral < Cop
8
+ MSG = 'Do not use the character literal - use string literal instead.'
9
+
10
+ def on_str(node)
11
+ # Constants like __FILE__ are handled as strings,
12
+ # but don't respond to begin.
13
+ return unless node.loc.respond_to?(:begin)
14
+
15
+ # we don't register an offence for things like ?\C-\M-d
16
+ if node.loc.begin.is?('?') && node.loc.expression.source.size < 4
17
+ add_offence(:convention, node.loc.expression, MSG)
18
+ do_autocorrect(node)
19
+ end
20
+ end
21
+
22
+ alias_method :on_dstr, :ignore_node
23
+ alias_method :on_regexp, :ignore_node
24
+
25
+ def autocorrect_action(node)
26
+ string = node.loc.expression.source[1..-1]
27
+
28
+ if string.length == 1 # normal character
29
+ replace(node.loc.expression, "'#{string}'")
30
+ elsif string.length == 2 # special character like \n
31
+ replace(node.loc.expression, %Q("#{string}"))
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end