rubocop 0.8.3 → 0.9.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of rubocop might be problematic. Click here for more details.

Files changed (381) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +0 -4
  3. data/.yardopts +2 -0
  4. data/CHANGELOG.md +70 -1
  5. data/README.md +101 -11
  6. data/config/default.yml +10 -2
  7. data/config/enabled.yml +85 -11
  8. data/lib/rubocop.rb +97 -73
  9. data/lib/rubocop/cli.rb +177 -92
  10. data/lib/rubocop/config.rb +56 -11
  11. data/lib/rubocop/config_store.rb +2 -0
  12. data/lib/rubocop/cop/cop.rb +52 -8
  13. data/lib/rubocop/cop/lint/assignment_in_condition.rb +54 -0
  14. data/lib/rubocop/cop/lint/end_alignment.rb +180 -0
  15. data/lib/rubocop/cop/lint/end_in_method.rb +30 -0
  16. data/lib/rubocop/cop/lint/ensure_return.rb +22 -0
  17. data/lib/rubocop/cop/lint/eval.rb +22 -0
  18. data/lib/rubocop/cop/lint/handle_exceptions.rb +20 -0
  19. data/lib/rubocop/cop/lint/literal_in_condition.rb +63 -0
  20. data/lib/rubocop/cop/lint/loop.rb +29 -0
  21. data/lib/rubocop/cop/lint/rescue_exception.rb +29 -0
  22. data/lib/rubocop/cop/lint/shadowing_outer_local_variable.rb +33 -0
  23. data/lib/rubocop/cop/lint/unreachable_code.rb +35 -0
  24. data/lib/rubocop/cop/lint/unused_local_variable.rb +32 -0
  25. data/lib/rubocop/cop/lint/void.rb +58 -0
  26. data/lib/rubocop/cop/offence.rb +112 -12
  27. data/lib/rubocop/cop/rails/validation.rb +34 -0
  28. data/lib/rubocop/cop/style/access_control.rb +58 -0
  29. data/lib/rubocop/cop/style/alias.rb +28 -0
  30. data/lib/rubocop/cop/style/align_parameters.rb +39 -0
  31. data/lib/rubocop/cop/style/and_or.rb +45 -0
  32. data/lib/rubocop/cop/style/ascii_comments.rb +21 -0
  33. data/lib/rubocop/cop/style/ascii_identifiers.rb +22 -0
  34. data/lib/rubocop/cop/style/attr.rb +20 -0
  35. data/lib/rubocop/cop/style/avoid_class_vars.rb +20 -0
  36. data/lib/rubocop/cop/style/avoid_for.rb +18 -0
  37. data/lib/rubocop/cop/style/avoid_global_vars.rb +65 -0
  38. data/lib/rubocop/cop/style/avoid_perl_backrefs.rb +21 -0
  39. data/lib/rubocop/cop/style/avoid_perlisms.rb +50 -0
  40. data/lib/rubocop/cop/style/begin_block.rb +18 -0
  41. data/lib/rubocop/cop/style/block_comments.rb +20 -0
  42. data/lib/rubocop/cop/style/block_nesting.rb +47 -0
  43. data/lib/rubocop/cop/style/blocks.rb +27 -0
  44. data/lib/rubocop/cop/style/case_equality.rb +22 -0
  45. data/lib/rubocop/cop/style/case_indentation.rb +28 -0
  46. data/lib/rubocop/cop/style/character_literal.rb +37 -0
  47. data/lib/rubocop/cop/style/class_and_module_camel_case.rb +33 -0
  48. data/lib/rubocop/cop/style/class_methods.rb +22 -0
  49. data/lib/rubocop/cop/style/collection_methods.rb +37 -0
  50. data/lib/rubocop/cop/style/colon_method_call.rb +29 -0
  51. data/lib/rubocop/cop/style/constant_name.rb +31 -0
  52. data/lib/rubocop/cop/style/def_parentheses.rb +70 -0
  53. data/lib/rubocop/cop/style/documentation.rb +58 -0
  54. data/lib/rubocop/cop/style/dot_position.rb +25 -0
  55. data/lib/rubocop/cop/style/empty_line_between_defs.rb +26 -0
  56. data/lib/rubocop/cop/style/empty_lines.rb +40 -0
  57. data/lib/rubocop/cop/style/empty_literal.rb +53 -0
  58. data/lib/rubocop/cop/style/encoding.rb +29 -0
  59. data/lib/rubocop/cop/style/end_block.rb +18 -0
  60. data/lib/rubocop/cop/style/end_of_line.rb +23 -0
  61. data/lib/rubocop/cop/style/favor_join.rb +29 -0
  62. data/lib/rubocop/cop/style/favor_modifier.rb +118 -0
  63. data/lib/rubocop/cop/style/favor_sprintf.rb +28 -0
  64. data/lib/rubocop/cop/style/favor_unless_over_negated_if.rb +54 -0
  65. data/lib/rubocop/cop/style/hash_syntax.rb +47 -0
  66. data/lib/rubocop/cop/style/if_then_else.rb +80 -0
  67. data/lib/rubocop/cop/style/lambda.rb +47 -0
  68. data/lib/rubocop/cop/style/leading_comment_space.rb +25 -0
  69. data/lib/rubocop/cop/style/line_continuation.rb +26 -0
  70. data/lib/rubocop/cop/style/line_length.rb +30 -0
  71. data/lib/rubocop/cop/style/method_and_variable_snake_case.rb +61 -0
  72. data/lib/rubocop/cop/style/method_call_parentheses.rb +22 -0
  73. data/lib/rubocop/cop/style/method_length.rb +57 -0
  74. data/lib/rubocop/cop/style/not.rb +24 -0
  75. data/lib/rubocop/cop/style/numeric_literals.rb +25 -0
  76. data/lib/rubocop/cop/{op_method.rb → style/op_method.rb} +4 -3
  77. data/lib/rubocop/cop/style/parameter_lists.rb +42 -0
  78. data/lib/rubocop/cop/style/parentheses_around_condition.rb +42 -0
  79. data/lib/rubocop/cop/style/proc.rb +30 -0
  80. data/lib/rubocop/cop/style/reduce_arguments.rb +34 -0
  81. data/lib/rubocop/cop/style/regexp_literal.rb +39 -0
  82. data/lib/rubocop/cop/style/rescue_modifier.rb +55 -0
  83. data/lib/rubocop/cop/style/semicolon.rb +51 -0
  84. data/lib/rubocop/cop/style/single_line_methods.rb +48 -0
  85. data/lib/rubocop/cop/style/space_after_comma_etc.rb +69 -0
  86. data/lib/rubocop/cop/style/space_after_control_keyword.rb +32 -0
  87. data/lib/rubocop/cop/style/string_literals.rb +36 -0
  88. data/lib/rubocop/cop/style/surrounding_space.rb +314 -0
  89. data/lib/rubocop/cop/style/symbol_array.rb +31 -0
  90. data/lib/rubocop/cop/style/symbol_name.rb +27 -0
  91. data/lib/rubocop/cop/style/tab.rb +25 -0
  92. data/lib/rubocop/cop/style/ternary_operator.rb +49 -0
  93. data/lib/rubocop/cop/style/trailing_whitespace.rb +24 -0
  94. data/lib/rubocop/cop/style/trivial_accessors.rb +32 -0
  95. data/lib/rubocop/cop/style/unless_else.rb +26 -0
  96. data/lib/rubocop/cop/style/variable_interpolation.rb +32 -0
  97. data/lib/rubocop/cop/style/when_then.rb +25 -0
  98. data/lib/rubocop/cop/style/while_until_do.rb +45 -0
  99. data/lib/rubocop/cop/style/word_array.rb +44 -0
  100. data/lib/rubocop/cop/util.rb +1 -0
  101. data/lib/rubocop/cop/variable_inspector.rb +280 -0
  102. data/lib/rubocop/formatter/base_formatter.rb +119 -0
  103. data/lib/rubocop/formatter/clang_style_formatter.rb +21 -0
  104. data/lib/rubocop/formatter/emacs_style_formatter.rb +17 -0
  105. data/lib/rubocop/formatter/formatter_set.rb +77 -0
  106. data/lib/rubocop/formatter/json_formatter.rb +76 -0
  107. data/lib/rubocop/formatter/progress_formatter.rb +63 -0
  108. data/lib/rubocop/formatter/simple_text_formatter.rb +62 -0
  109. data/lib/rubocop/version.rb +15 -1
  110. data/rubocop.gemspec +1 -2
  111. data/spec/.rubocop.yml +5 -0
  112. data/spec/project_spec.rb +4 -7
  113. data/spec/rubocop/cli_spec.rb +383 -146
  114. data/spec/rubocop/config_spec.rb +61 -0
  115. data/spec/rubocop/config_store_spec.rb +2 -2
  116. data/spec/rubocop/cops/cop_spec.rb +14 -7
  117. data/spec/rubocop/cops/lint/assignment_in_condition_spec.rb +111 -0
  118. data/spec/rubocop/cops/lint/end_alignment_spec.rb +426 -0
  119. data/spec/rubocop/cops/lint/end_in_method_spec.rb +35 -0
  120. data/spec/rubocop/cops/lint/ensure_return_spec.rb +37 -0
  121. data/spec/rubocop/cops/lint/eval_spec.rb +41 -0
  122. data/spec/rubocop/cops/lint/handle_exceptions_spec.rb +36 -0
  123. data/spec/rubocop/cops/lint/literal_in_condition_spec.rb +35 -0
  124. data/spec/rubocop/cops/lint/loop_spec.rb +33 -0
  125. data/spec/rubocop/cops/lint/rescue_exception_spec.rb +127 -0
  126. data/spec/rubocop/cops/lint/shadowing_outer_local_variable_spec.rb +180 -0
  127. data/spec/rubocop/cops/lint/unreachable_code_spec.rb +69 -0
  128. data/spec/rubocop/cops/lint/unused_local_variable_spec.rb +484 -0
  129. data/spec/rubocop/cops/lint/void_spec.rb +63 -0
  130. data/spec/rubocop/cops/offence_spec.rb +107 -10
  131. data/spec/rubocop/cops/rails/validation_spec.rb +27 -0
  132. data/spec/rubocop/cops/style/access_control_spec.rb +142 -0
  133. data/spec/rubocop/cops/style/alias_spec.rb +47 -0
  134. data/spec/rubocop/cops/style/align_parameters_spec.rb +199 -0
  135. data/spec/rubocop/cops/style/and_or_spec.rb +39 -0
  136. data/spec/rubocop/cops/style/ascii_comments_spec.rb +28 -0
  137. data/spec/rubocop/cops/style/ascii_identifiers_spec.rb +28 -0
  138. data/spec/rubocop/cops/style/attr_spec.rb +20 -0
  139. data/spec/rubocop/cops/style/avoid_class_vars_spec.rb +27 -0
  140. data/spec/rubocop/cops/style/avoid_for_spec.rb +37 -0
  141. data/spec/rubocop/cops/style/avoid_global_vars_spec.rb +34 -0
  142. data/spec/rubocop/cops/style/avoid_perl_backrefs_spec.rb +20 -0
  143. data/spec/rubocop/cops/style/avoid_perlisms_spec.rb +47 -0
  144. data/spec/rubocop/cops/style/begin_block_spec.rb +19 -0
  145. data/spec/rubocop/cops/style/block_comments_spec.rb +27 -0
  146. data/spec/rubocop/cops/style/block_nesting_spec.rb +159 -0
  147. data/spec/rubocop/cops/style/blocks_spec.rb +35 -0
  148. data/spec/rubocop/cops/style/case_equality_spec.rb +18 -0
  149. data/spec/rubocop/cops/style/case_indentation_spec.rb +88 -0
  150. data/spec/rubocop/cops/style/character_literal_spec.rb +28 -0
  151. data/spec/rubocop/cops/style/class_and_module_camel_case_spec.rb +46 -0
  152. data/spec/rubocop/cops/style/class_methods_spec.rb +51 -0
  153. data/spec/rubocop/cops/style/collection_methods_spec.rb +46 -0
  154. data/spec/rubocop/cops/style/colon_method_call_spec.rb +55 -0
  155. data/spec/rubocop/cops/style/constant_name_spec.rb +56 -0
  156. data/spec/rubocop/cops/style/def_with_parentheses_spec.rb +40 -0
  157. data/spec/rubocop/cops/style/def_without_parentheses_spec.rb +34 -0
  158. data/spec/rubocop/cops/style/documentation_spec.rb +79 -0
  159. data/spec/rubocop/cops/style/dot_position_spec.rb +30 -0
  160. data/spec/rubocop/cops/style/empty_line_between_defs_spec.rb +85 -0
  161. data/spec/rubocop/cops/style/empty_lines_spec.rb +40 -0
  162. data/spec/rubocop/cops/style/empty_literal_spec.rb +91 -0
  163. data/spec/rubocop/cops/style/encoding_spec.rb +49 -0
  164. data/spec/rubocop/cops/style/end_block_spec.rb +19 -0
  165. data/spec/rubocop/cops/style/end_of_line_spec.rb +25 -0
  166. data/spec/rubocop/cops/style/favor_join_spec.rb +37 -0
  167. data/spec/rubocop/cops/style/favor_modifier_spec.rb +160 -0
  168. data/spec/rubocop/cops/style/favor_sprintf_spec.rb +53 -0
  169. data/spec/rubocop/cops/style/favor_unless_over_negated_if_spec.rb +64 -0
  170. data/spec/rubocop/cops/style/favor_until_over_negated_while_spec.rb +47 -0
  171. data/spec/rubocop/cops/style/hash_syntax_spec.rb +51 -0
  172. data/spec/rubocop/cops/style/if_with_semicolon_spec.rb +25 -0
  173. data/spec/rubocop/cops/style/lambda_spec.rb +45 -0
  174. data/spec/rubocop/cops/style/leading_comment_space_spec.rb +65 -0
  175. data/spec/rubocop/cops/style/line_continuation_spec.rb +26 -0
  176. data/spec/rubocop/cops/style/line_length_spec.rb +25 -0
  177. data/spec/rubocop/cops/style/method_and_variable_snake_case_spec.rb +95 -0
  178. data/spec/rubocop/cops/style/method_call_parentheses_spec.rb +25 -0
  179. data/spec/rubocop/cops/style/method_length_spec.rb +151 -0
  180. data/spec/rubocop/cops/style/multiline_if_then_spec.rb +81 -0
  181. data/spec/rubocop/cops/style/not_spec.rb +28 -0
  182. data/spec/rubocop/cops/style/numeric_literals_spec.rb +51 -0
  183. data/spec/rubocop/cops/style/one_line_conditional_spec.rb +18 -0
  184. data/spec/rubocop/cops/style/op_method_spec.rb +80 -0
  185. data/spec/rubocop/cops/style/parameter_lists_spec.rb +49 -0
  186. data/spec/rubocop/cops/style/parentheses_around_condition_spec.rb +59 -0
  187. data/spec/rubocop/cops/style/proc_spec.rb +28 -0
  188. data/spec/rubocop/cops/style/reduce_arguments_spec.rb +59 -0
  189. data/spec/rubocop/cops/style/regexp_literal_spec.rb +83 -0
  190. data/spec/rubocop/cops/style/rescue_modifier_spec.rb +122 -0
  191. data/spec/rubocop/cops/style/semicolon_spec.rb +95 -0
  192. data/spec/rubocop/cops/style/single_line_methods_spec.rb +54 -0
  193. data/spec/rubocop/cops/style/space_after_colon_spec.rb +29 -0
  194. data/spec/rubocop/cops/style/space_after_comma_spec.rb +31 -0
  195. data/spec/rubocop/cops/style/space_after_control_keyword_spec.rb +69 -0
  196. data/spec/rubocop/cops/style/space_after_semicolon_spec.rb +24 -0
  197. data/spec/rubocop/cops/style/space_around_braces_spec.rb +49 -0
  198. data/spec/rubocop/cops/style/space_around_equals_in_default_parameter_spec.rb +34 -0
  199. data/spec/rubocop/cops/style/space_around_operators_spec.rb +216 -0
  200. data/spec/rubocop/cops/style/space_inside_brackets_spec.rb +51 -0
  201. data/spec/rubocop/cops/style/space_inside_hash_literal_braces_spec.rb +99 -0
  202. data/spec/rubocop/cops/style/space_inside_parens_spec.rb +33 -0
  203. data/spec/rubocop/cops/style/string_literals_spec.rb +62 -0
  204. data/spec/rubocop/cops/style/symbol_array_spec.rb +45 -0
  205. data/spec/rubocop/cops/style/symbol_name_spec.rb +122 -0
  206. data/spec/rubocop/cops/style/tab_spec.rb +23 -0
  207. data/spec/rubocop/cops/style/ternary_operator_spec.rb +42 -0
  208. data/spec/rubocop/cops/style/trailing_whitespace_spec.rb +29 -0
  209. data/spec/rubocop/cops/style/trivial_accessors_spec.rb +338 -0
  210. data/spec/rubocop/cops/style/unless_else_spec.rb +31 -0
  211. data/spec/rubocop/cops/style/variable_interpolation_spec.rb +53 -0
  212. data/spec/rubocop/cops/style/when_then_spec.rb +40 -0
  213. data/spec/rubocop/cops/style/while_until_do_spec.rb +47 -0
  214. data/spec/rubocop/cops/style/word_array_spec.rb +61 -0
  215. data/spec/rubocop/cops/variable_inspector_spec.rb +374 -0
  216. data/spec/rubocop/formatter/base_formatter_spec.rb +190 -0
  217. data/spec/rubocop/formatter/clang_style_formatter_spec.rb +70 -0
  218. data/spec/rubocop/formatter/emacs_style_formatter_spec.rb +32 -0
  219. data/spec/rubocop/formatter/formatter_set_spec.rb +132 -0
  220. data/spec/rubocop/formatter/json_formatter_spec.rb +142 -0
  221. data/spec/rubocop/formatter/progress_formatter_spec.rb +196 -0
  222. data/spec/rubocop/formatter/simple_text_formatter_spec.rb +74 -0
  223. data/spec/spec_helper.rb +23 -8
  224. data/spec/support/mri_syntax_checker.rb +69 -0
  225. data/spec/support/shared_examples.rb +33 -0
  226. metadata +315 -243
  227. data/lib/rubocop/cop/access_control.rb +0 -41
  228. data/lib/rubocop/cop/alias.rb +0 -17
  229. data/lib/rubocop/cop/align_parameters.rb +0 -37
  230. data/lib/rubocop/cop/and_or.rb +0 -36
  231. data/lib/rubocop/cop/ascii_comments.rb +0 -17
  232. data/lib/rubocop/cop/ascii_identifiers.rb +0 -19
  233. data/lib/rubocop/cop/avoid_class_vars.rb +0 -15
  234. data/lib/rubocop/cop/avoid_for.rb +0 -17
  235. data/lib/rubocop/cop/avoid_global_vars.rb +0 -61
  236. data/lib/rubocop/cop/avoid_perl_backrefs.rb +0 -17
  237. data/lib/rubocop/cop/avoid_perlisms.rb +0 -47
  238. data/lib/rubocop/cop/block_comments.rb +0 -17
  239. data/lib/rubocop/cop/block_nesting.rb +0 -35
  240. data/lib/rubocop/cop/blocks.rb +0 -23
  241. data/lib/rubocop/cop/case_indentation.rb +0 -22
  242. data/lib/rubocop/cop/class_and_module_camel_case.rb +0 -29
  243. data/lib/rubocop/cop/class_methods.rb +0 -15
  244. data/lib/rubocop/cop/collection_methods.rb +0 -29
  245. data/lib/rubocop/cop/colon_method_call.rb +0 -20
  246. data/lib/rubocop/cop/constant_name.rb +0 -24
  247. data/lib/rubocop/cop/def_parentheses.rb +0 -62
  248. data/lib/rubocop/cop/empty_line_between_defs.rb +0 -22
  249. data/lib/rubocop/cop/empty_lines.rb +0 -34
  250. data/lib/rubocop/cop/empty_literal.rb +0 -49
  251. data/lib/rubocop/cop/encoding.rb +0 -19
  252. data/lib/rubocop/cop/end_of_line.rb +0 -15
  253. data/lib/rubocop/cop/ensure_return.rb +0 -19
  254. data/lib/rubocop/cop/eval.rb +0 -19
  255. data/lib/rubocop/cop/favor_join.rb +0 -22
  256. data/lib/rubocop/cop/favor_modifier.rb +0 -92
  257. data/lib/rubocop/cop/favor_percent_r.rb +0 -19
  258. data/lib/rubocop/cop/favor_sprintf.rb +0 -21
  259. data/lib/rubocop/cop/favor_unless_over_negated_if.rb +0 -49
  260. data/lib/rubocop/cop/handle_exceptions.rb +0 -17
  261. data/lib/rubocop/cop/hash_syntax.rb +0 -41
  262. data/lib/rubocop/cop/if_then_else.rb +0 -75
  263. data/lib/rubocop/cop/lambda.rb +0 -42
  264. data/lib/rubocop/cop/leading_comment_space.rb +0 -19
  265. data/lib/rubocop/cop/line_continuation.rb +0 -15
  266. data/lib/rubocop/cop/line_length.rb +0 -23
  267. data/lib/rubocop/cop/loop.rb +0 -33
  268. data/lib/rubocop/cop/method_and_variable_snake_case.rb +0 -55
  269. data/lib/rubocop/cop/method_length.rb +0 -52
  270. data/lib/rubocop/cop/not.rb +0 -21
  271. data/lib/rubocop/cop/numeric_literals.rb +0 -21
  272. data/lib/rubocop/cop/parameter_lists.rb +0 -23
  273. data/lib/rubocop/cop/parentheses_around_condition.rb +0 -40
  274. data/lib/rubocop/cop/percent_r.rb +0 -19
  275. data/lib/rubocop/cop/proc.rb +0 -26
  276. data/lib/rubocop/cop/reduce_arguments.rb +0 -29
  277. data/lib/rubocop/cop/rescue_exception.rb +0 -26
  278. data/lib/rubocop/cop/rescue_modifier.rb +0 -15
  279. data/lib/rubocop/cop/semicolon.rb +0 -31
  280. data/lib/rubocop/cop/single_line_methods.rb +0 -44
  281. data/lib/rubocop/cop/space_after_comma_etc.rb +0 -62
  282. data/lib/rubocop/cop/space_after_control_keyword.rb +0 -29
  283. data/lib/rubocop/cop/string_literals.rb +0 -25
  284. data/lib/rubocop/cop/surrounding_space.rb +0 -285
  285. data/lib/rubocop/cop/symbol_array.rb +0 -31
  286. data/lib/rubocop/cop/symbol_name.rb +0 -23
  287. data/lib/rubocop/cop/syntax.rb +0 -49
  288. data/lib/rubocop/cop/tab.rb +0 -15
  289. data/lib/rubocop/cop/ternary_operator.rb +0 -43
  290. data/lib/rubocop/cop/trailing_whitespace.rb +0 -15
  291. data/lib/rubocop/cop/trivial_accessors.rb +0 -26
  292. data/lib/rubocop/cop/unless_else.rb +0 -23
  293. data/lib/rubocop/cop/variable_interpolation.rb +0 -29
  294. data/lib/rubocop/cop/when_then.rb +0 -17
  295. data/lib/rubocop/cop/word_array.rb +0 -37
  296. data/lib/rubocop/report/emacs_style.rb +0 -17
  297. data/lib/rubocop/report/plain_text.rb +0 -18
  298. data/lib/rubocop/report/report.rb +0 -44
  299. data/spec/rubocop/cops/access_control_spec.rb +0 -129
  300. data/spec/rubocop/cops/alias_spec.rb +0 -39
  301. data/spec/rubocop/cops/align_parameters_spec.rb +0 -197
  302. data/spec/rubocop/cops/and_or_spec.rb +0 -37
  303. data/spec/rubocop/cops/ascii_comments_spec.rb +0 -26
  304. data/spec/rubocop/cops/ascii_identifiers_spec.rb +0 -26
  305. data/spec/rubocop/cops/avoid_class_vars_spec.rb +0 -25
  306. data/spec/rubocop/cops/avoid_for_spec.rb +0 -35
  307. data/spec/rubocop/cops/avoid_global_vars_spec.rb +0 -32
  308. data/spec/rubocop/cops/avoid_perl_backrefs_spec.rb +0 -18
  309. data/spec/rubocop/cops/avoid_perlisms_spec.rb +0 -44
  310. data/spec/rubocop/cops/block_comments_spec.rb +0 -25
  311. data/spec/rubocop/cops/block_nesting_spec.rb +0 -148
  312. data/spec/rubocop/cops/blocks_spec.rb +0 -33
  313. data/spec/rubocop/cops/case_indentation_spec.rb +0 -86
  314. data/spec/rubocop/cops/class_and_module_camel_case_spec.rb +0 -44
  315. data/spec/rubocop/cops/class_methods_spec.rb +0 -49
  316. data/spec/rubocop/cops/collection_methods_spec.rb +0 -44
  317. data/spec/rubocop/cops/colon_method_call_spec.rb +0 -53
  318. data/spec/rubocop/cops/constant_name_spec.rb +0 -42
  319. data/spec/rubocop/cops/def_with_parentheses_spec.rb +0 -38
  320. data/spec/rubocop/cops/def_without_parentheses_spec.rb +0 -32
  321. data/spec/rubocop/cops/empty_line_between_defs_spec.rb +0 -83
  322. data/spec/rubocop/cops/empty_lines_spec.rb +0 -38
  323. data/spec/rubocop/cops/empty_literal_spec.rb +0 -90
  324. data/spec/rubocop/cops/encoding_spec.rb +0 -47
  325. data/spec/rubocop/cops/end_of_line_spec.rb +0 -23
  326. data/spec/rubocop/cops/ensure_return_spec.rb +0 -35
  327. data/spec/rubocop/cops/eval_spec.rb +0 -39
  328. data/spec/rubocop/cops/favor_join_spec.rb +0 -35
  329. data/spec/rubocop/cops/favor_modifier_spec.rb +0 -146
  330. data/spec/rubocop/cops/favor_percent_r_spec.rb +0 -29
  331. data/spec/rubocop/cops/favor_sprintf_spec.rb +0 -51
  332. data/spec/rubocop/cops/favor_unless_over_negated_if_spec.rb +0 -62
  333. data/spec/rubocop/cops/favor_until_over_negated_while_spec.rb +0 -45
  334. data/spec/rubocop/cops/handle_exceptions_spec.rb +0 -34
  335. data/spec/rubocop/cops/hash_syntax_spec.rb +0 -49
  336. data/spec/rubocop/cops/if_with_semicolon_spec.rb +0 -23
  337. data/spec/rubocop/cops/lambda_spec.rb +0 -43
  338. data/spec/rubocop/cops/leading_comment_space_spec.rb +0 -54
  339. data/spec/rubocop/cops/line_continuation_spec.rb +0 -24
  340. data/spec/rubocop/cops/line_length_spec.rb +0 -23
  341. data/spec/rubocop/cops/loop_spec.rb +0 -31
  342. data/spec/rubocop/cops/method_and_variable_snake_case_spec.rb +0 -93
  343. data/spec/rubocop/cops/method_length_spec.rb +0 -147
  344. data/spec/rubocop/cops/multiline_if_then_spec.rb +0 -79
  345. data/spec/rubocop/cops/not_spec.rb +0 -26
  346. data/spec/rubocop/cops/numeric_literals_spec.rb +0 -49
  347. data/spec/rubocop/cops/one_line_conditional_spec.rb +0 -16
  348. data/spec/rubocop/cops/op_method_spec.rb +0 -78
  349. data/spec/rubocop/cops/parameter_lists_spec.rb +0 -24
  350. data/spec/rubocop/cops/parentheses_around_condition_spec.rb +0 -61
  351. data/spec/rubocop/cops/percent_r_spec.rb +0 -29
  352. data/spec/rubocop/cops/proc_spec.rb +0 -26
  353. data/spec/rubocop/cops/reduce_arguments_spec.rb +0 -57
  354. data/spec/rubocop/cops/rescue_exception_spec.rb +0 -125
  355. data/spec/rubocop/cops/rescue_modifier_spec.rb +0 -37
  356. data/spec/rubocop/cops/semicolon_spec.rb +0 -88
  357. data/spec/rubocop/cops/single_line_methods_spec.rb +0 -50
  358. data/spec/rubocop/cops/space_after_colon_spec.rb +0 -27
  359. data/spec/rubocop/cops/space_after_comma_spec.rb +0 -29
  360. data/spec/rubocop/cops/space_after_control_keyword_spec.rb +0 -67
  361. data/spec/rubocop/cops/space_after_semicolon_spec.rb +0 -22
  362. data/spec/rubocop/cops/space_around_braces_spec.rb +0 -47
  363. data/spec/rubocop/cops/space_around_equals_in_default_parameter_spec.rb +0 -32
  364. data/spec/rubocop/cops/space_around_operators_spec.rb +0 -209
  365. data/spec/rubocop/cops/space_inside_brackets_spec.rb +0 -49
  366. data/spec/rubocop/cops/space_inside_hash_literal_braces_spec.rb +0 -86
  367. data/spec/rubocop/cops/space_inside_parens_spec.rb +0 -31
  368. data/spec/rubocop/cops/string_literals_spec.rb +0 -58
  369. data/spec/rubocop/cops/symbol_array_spec.rb +0 -41
  370. data/spec/rubocop/cops/symbol_name_spec.rb +0 -119
  371. data/spec/rubocop/cops/syntax_spec.rb +0 -41
  372. data/spec/rubocop/cops/tab_spec.rb +0 -21
  373. data/spec/rubocop/cops/ternary_operator_spec.rb +0 -40
  374. data/spec/rubocop/cops/trailing_whitespace_spec.rb +0 -27
  375. data/spec/rubocop/cops/trivial_accessors_spec.rb +0 -337
  376. data/spec/rubocop/cops/unless_else_spec.rb +0 -29
  377. data/spec/rubocop/cops/variable_interpolation_spec.rb +0 -49
  378. data/spec/rubocop/cops/when_then_spec.rb +0 -38
  379. data/spec/rubocop/cops/word_array_spec.rb +0 -47
  380. data/spec/rubocop/reports/emacs_style_spec.rb +0 -25
  381. data/spec/rubocop/reports/report_spec.rb +0 -29
@@ -0,0 +1,24 @@
1
+ # encoding: utf-8
2
+
3
+ module Rubocop
4
+ module Cop
5
+ module Style
6
+ # This cop looks for trailing whitespace in the source code.
7
+ class TrailingWhitespace < Cop
8
+ MSG = 'Trailing whitespace detected.'
9
+
10
+ def inspect(source_buffer, source, tokens, ast, comments)
11
+ source.each_with_index do |line, index|
12
+ if line =~ /.*[ \t]+$/
13
+ add_offence(:convention,
14
+ source_range(source_buffer, source[0...index],
15
+ line.rstrip.length,
16
+ line.length - line.rstrip.length),
17
+ MSG)
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,32 @@
1
+ # encoding: utf-8
2
+
3
+ module Rubocop
4
+ module Cop
5
+ module Style
6
+ # This cop looks for trivial reader/writer methods, that could
7
+ # have been created with the attr_* family of functions automatically.
8
+ class TrivialAccessors < Cop
9
+ MSG = 'Use attr_%s to define trivial %s methods.'
10
+
11
+ def on_def(node)
12
+ method_name, args, body = *node
13
+
14
+ kind = if body && body.type == :ivar
15
+ 'reader'
16
+ elsif args.children.size == 1 &&
17
+ body && body.type == :ivasgn &&
18
+ body.children[1] && body.children[1].type == :lvar &&
19
+ method_name != :initialize
20
+ 'writer'
21
+ end
22
+ if kind
23
+ add_offence(:convention, node.loc.keyword,
24
+ sprintf(MSG, kind, kind))
25
+ end
26
+
27
+ super
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,26 @@
1
+ # encoding: utf-8
2
+
3
+ module Rubocop
4
+ module Cop
5
+ module Style
6
+ # This cop looks for *unless* expressions with *else* clauses.
7
+ class UnlessElse < Cop
8
+ MSG = 'Never use unless with else. Rewrite these with the ' +
9
+ 'positive case first.'
10
+
11
+ def on_if(node)
12
+ loc = node.loc
13
+
14
+ # discard ternary ops and modifier if/unless nodes
15
+ return unless loc.respond_to?(:keyword) && loc.respond_to?(:else)
16
+
17
+ if loc.keyword.is?('unless') && loc.else
18
+ add_offence(:convention, loc.expression, MSG)
19
+ end
20
+
21
+ super
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,32 @@
1
+ # encoding: utf-8
2
+
3
+ module Rubocop
4
+ module Cop
5
+ module Style
6
+ # This cop checks for variable interpolation (like "#@ivar").
7
+ class VariableInterpolation < Cop
8
+ MSG = 'Replace interpolated var %s with expression #{%s}.'
9
+
10
+ def on_dstr(node)
11
+ var_nodes(node.children).each do |v|
12
+ var = (v.type == :nth_ref ? '$' : '') + v.to_a[0].to_s
13
+
14
+ if node.loc.expression.source.include?("##{var}")
15
+ add_offence(:convention,
16
+ v.loc.expression,
17
+ sprintf(MSG, var, var))
18
+ end
19
+ end
20
+
21
+ super
22
+ end
23
+
24
+ private
25
+
26
+ def var_nodes(nodes)
27
+ nodes.select { |n| [:ivar, :cvar, :gvar, :nth_ref].include?(n.type) }
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,25 @@
1
+ # encoding: utf-8
2
+
3
+ module Rubocop
4
+ module Cop
5
+ module Style
6
+ # This cop checks for *when;* uses in *case* expressions.
7
+ class WhenThen < Cop
8
+ MSG = 'Never use "when x;". Use "when x then" instead.'
9
+
10
+ def on_when(node)
11
+ if node.loc.begin && node.loc.begin.is?(';')
12
+ add_offence(:convention, node.loc.begin, MSG)
13
+ do_autocorrect(node)
14
+ end
15
+
16
+ super
17
+ end
18
+
19
+ def autocorrect_action(node)
20
+ replace(node.loc.begin, ' then')
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,45 @@
1
+ # encoding: utf-8
2
+
3
+ module Rubocop
4
+ module Cop
5
+ module Style
6
+ # Checks for uses of `do` in multi-line `while/until` statements.
7
+ class WhileUntilDo < Cop
8
+ def on_while(node)
9
+ handle(node)
10
+
11
+ super
12
+ end
13
+
14
+ def on_until(node)
15
+ handle(node)
16
+
17
+ super
18
+ end
19
+
20
+ def handle(node)
21
+ length = node.loc.expression.source.lines.to_a.size
22
+
23
+ if length > 1
24
+ if node.loc.begin && node.loc.begin.is?('do')
25
+ add_offence(:convention,
26
+ node.loc.begin,
27
+ error_message(node.type))
28
+ do_autocorrect(node)
29
+ end
30
+ end
31
+ end
32
+
33
+ private
34
+
35
+ def error_message(node_type)
36
+ format('Never use `do` with multi-line `%s`.', node_type)
37
+ end
38
+
39
+ def autocorrect_action(node)
40
+ remove(node.loc.begin)
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,44 @@
1
+ # encoding: utf-8
2
+
3
+ module Rubocop
4
+ module Cop
5
+ module Style
6
+ # This cop checks for array literals made up of word-like
7
+ # strings, that are not using the %w() syntax.
8
+ class WordArray < Cop
9
+ MSG = 'Use %w or %W for array of words.'
10
+
11
+ def on_array(node)
12
+ return unless node.loc.begin && node.loc.begin.is?('[')
13
+
14
+ array_elems = node.children
15
+
16
+ # no need to check empty arrays
17
+ return unless array_elems && array_elems.size > 1
18
+
19
+ string_array = array_elems.all? { |e| e.type == :str }
20
+
21
+ if string_array && !complex_content?(array_elems)
22
+ add_offence(:convention, node.loc.expression, MSG)
23
+ end
24
+
25
+ super
26
+ end
27
+
28
+ private
29
+
30
+ def complex_content?(arr_sexp)
31
+ arr_sexp.each do |s|
32
+ source = s.loc.expression.source
33
+ unless source.start_with?('?') # %W(\r \n) can replace [?\r, ?\n]
34
+ str_content = Util.strip_quotes(source)
35
+ return true unless str_content =~ /\A[\w-]+\z/
36
+ end
37
+ end
38
+
39
+ false
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
@@ -2,6 +2,7 @@
2
2
 
3
3
  module Rubocop
4
4
  module Cop
5
+ # This module contains a collection of useful utility methods.
5
6
  module Util
6
7
  module_function
7
8
 
@@ -0,0 +1,280 @@
1
+ # encoding: utf-8
2
+
3
+ module Rubocop
4
+ module Cop
5
+ # This module provides a way to track local variables and scopes of Ruby.
6
+ # This is intended to be used as mix-in, and the user class may override
7
+ # some of hook methods.
8
+ module VariableInspector
9
+ VARIABLE_ASSIGNMENT_TYPES = [:lvasgn].freeze
10
+ ARGUMENT_DECLARATION_TYPES = [
11
+ :arg, :optarg, :restarg, :blockarg,
12
+ :kwarg, :kwoptarg, :kwsplatarg,
13
+ :shadowarg
14
+ ].freeze
15
+ VARIABLE_DECLARATION_TYPES =
16
+ (VARIABLE_ASSIGNMENT_TYPES + ARGUMENT_DECLARATION_TYPES).freeze
17
+ VARIABLE_USE_TYPES = [:lvar].freeze
18
+ SCOPE_TYPES = [:module, :class, :sclass, :def, :defs, :block].freeze
19
+
20
+ # A VariableEntry represents existance of a local variable.
21
+ # This holds a variable declaration node,
22
+ # and some states of the variable.
23
+ class VariableEntry
24
+ attr_reader :node
25
+ attr_accessor :used
26
+ alias_method :used?, :used
27
+
28
+ def initialize(node)
29
+ unless VARIABLE_DECLARATION_TYPES.include?(node.type)
30
+ fail ArgumentError,
31
+ "Node type must be any of #{VARIABLE_DECLARATION_TYPES}, " +
32
+ "passed #{node.type}"
33
+ end
34
+ @node = node
35
+ @used = false
36
+ end
37
+
38
+ def name
39
+ @node.children.first
40
+ end
41
+ end
42
+
43
+ # A Scope represents a context of local variable visibility.
44
+ # This is a place where local variables belong to.
45
+ # A scope instance holds a scope node and variable entries.
46
+ class Scope
47
+ attr_reader :node, :variable_entries
48
+
49
+ def initialize(node)
50
+ # Accept begin node for top level scope.
51
+ unless SCOPE_TYPES.include?(node.type) || node.type == :begin
52
+ fail ArgumentError,
53
+ "Node type must be any of #{SCOPE_TYPES}, " +
54
+ "passed #{node.type}"
55
+ end
56
+ @node = node
57
+ @variable_entries = {}
58
+ end
59
+ end
60
+
61
+ # A VariableTable manages the lifetime of all scopes and local variables
62
+ # in a program.
63
+ # This holds scopes as stack structure, and provides a way to add local
64
+ # variables to current scope and find local variables by considering
65
+ # variable visibility of the current scope.
66
+ class VariableTable
67
+ def initialize(hook_receiver = nil)
68
+ @hook_receiver = hook_receiver
69
+ end
70
+
71
+ def invoke_hook(hook_name, *args)
72
+ @hook_receiver.send(hook_name, *args) if @hook_receiver
73
+ end
74
+
75
+ def scope_stack
76
+ @scope_stack ||= []
77
+ end
78
+
79
+ def push_scope(scope_node)
80
+ scope = Scope.new(scope_node)
81
+ invoke_hook(:before_entering_scope, scope)
82
+ scope_stack.push(scope)
83
+ invoke_hook(:after_entering_scope, scope)
84
+ scope
85
+ end
86
+
87
+ def pop_scope
88
+ scope = current_scope
89
+ invoke_hook(:before_leaving_scope, scope)
90
+ scope_stack.pop
91
+ invoke_hook(:after_leaving_scope, scope)
92
+ scope
93
+ end
94
+
95
+ def current_scope
96
+ scope_stack.last
97
+ end
98
+
99
+ def current_scope_level
100
+ scope_stack.count
101
+ end
102
+
103
+ def add_variable_entry(variable_declaration_node)
104
+ entry = VariableEntry.new(variable_declaration_node)
105
+ invoke_hook(:before_declaring_variable, entry)
106
+ current_scope.variable_entries[entry.name] = entry
107
+ invoke_hook(:after_declaring_variable, entry)
108
+ entry
109
+ end
110
+
111
+ def find_variable_entry(variable_name)
112
+ scope_stack.reverse_each do |scope|
113
+ entry = scope.variable_entries[variable_name]
114
+ return entry if entry
115
+ # Only block scope allows referencing outer scope variables.
116
+ return nil unless scope.node.type == :block
117
+ end
118
+ nil
119
+ end
120
+ end
121
+
122
+ # This provides a way to scan all nodes only in current scope.
123
+ class NodeScanner
124
+ def self.scan_nodes_in_scope(origin_node, &block)
125
+ new.scan_nodes_in_scope(origin_node, &block)
126
+ end
127
+
128
+ def initialize
129
+ @node_index = -1
130
+ end
131
+
132
+ def scan_nodes_in_scope(origin_node, &block)
133
+ origin_node.children.each do |child|
134
+ next unless child.is_a?(Parser::AST::Node)
135
+
136
+ node = child
137
+ @node_index += 1
138
+
139
+ catch(:skip_children) do
140
+ yield node, @node_index
141
+
142
+ # Do not go into inner scope.
143
+ unless SCOPE_TYPES.include?(node.type)
144
+ scan_nodes_in_scope(node, &block)
145
+ end
146
+ end
147
+ end
148
+ end
149
+ end
150
+
151
+ def variable_table
152
+ @variable_table ||= VariableTable.new(self)
153
+ end
154
+
155
+ # Starting point.
156
+ def inspect_variables(root_node)
157
+ return unless root_node
158
+
159
+ # Wrap with begin node if it's standalone node.
160
+ unless root_node.type == :begin
161
+ root_node = Parser::AST::Node.new(:begin, [root_node])
162
+ end
163
+
164
+ inspect_variables_in_scope(root_node)
165
+ end
166
+
167
+ # This is called for each scope recursively.
168
+ def inspect_variables_in_scope(scope_node)
169
+ variable_table.push_scope(scope_node)
170
+
171
+ NodeScanner.scan_nodes_in_scope(scope_node) do |node, index|
172
+ if scope_node.type == :block && index == 0 && node.type == :send
173
+ # Avoid processing method argument nodes of outer scope
174
+ # in current block scope.
175
+ # See #process_node.
176
+ throw :skip_children
177
+ elsif [:sclass, :defs].include?(scope_node.type) && index == 0
178
+ throw :skip_children
179
+ end
180
+
181
+ process_node(node)
182
+ end
183
+
184
+ variable_table.pop_scope
185
+ end
186
+
187
+ def process_node(node)
188
+ case node.type
189
+ when *ARGUMENT_DECLARATION_TYPES
190
+ variable_table.add_variable_entry(node)
191
+ when *VARIABLE_ASSIGNMENT_TYPES
192
+ variable_name = node.children.first
193
+ variable_entry = variable_table.find_variable_entry(variable_name)
194
+ if variable_entry
195
+ variable_entry.used = true
196
+ else
197
+ variable_table.add_variable_entry(node)
198
+ end
199
+ when *VARIABLE_USE_TYPES
200
+ variable_name = node.children.first
201
+ variable_entry = variable_table.find_variable_entry(variable_name)
202
+ unless variable_entry
203
+ fail "Using undeclared local variable \"#{variable_name}\" " +
204
+ "at #{node.loc.expression}, #{node.inspect}"
205
+ end
206
+ variable_entry.used = true
207
+ when :block
208
+ # The variable foo belongs to the top level scope,
209
+ # but in AST, it's under the block node.
210
+ #
211
+ # Ruby:
212
+ # some_method(foo = 1) do
213
+ # end
214
+ # puts foo
215
+ #
216
+ # AST:
217
+ # (begin
218
+ # (block
219
+ # (send nil :some_method
220
+ # (lvasgn :foo
221
+ # (int 1)))
222
+ # (args) nil)
223
+ # (send nil :puts
224
+ # (lvar :foo)))
225
+ #
226
+ # So the nodes of the method argument need to be processed
227
+ # in current scope before dive into the block scope.
228
+ NodeScanner.scan_nodes_in_scope(node.children.first) do |n|
229
+ process_node(n)
230
+ end
231
+ # Now go into the block scope.
232
+ inspect_variables_in_scope(node)
233
+ when :sclass, :defs
234
+ # Same thing.
235
+ #
236
+ # Ruby:
237
+ # instance = Object.new
238
+ # class << instance
239
+ # foo = 1
240
+ # end
241
+ #
242
+ # AST:
243
+ # (begin
244
+ # (lvasgn :instance
245
+ # (send
246
+ # (const nil :Object) :new))
247
+ # (sclass
248
+ # (lvar :instance)
249
+ # (begin
250
+ # (lvasgn :foo
251
+ # (int 1))
252
+ process_node(node.children.first)
253
+ inspect_variables_in_scope(node)
254
+ when *SCOPE_TYPES
255
+ inspect_variables_in_scope(node)
256
+ end
257
+ end
258
+
259
+ # Hooks
260
+
261
+ def before_entering_scope(scope)
262
+ end
263
+
264
+ def after_entering_scope(scope)
265
+ end
266
+
267
+ def before_leaving_scope(scope)
268
+ end
269
+
270
+ def after_leaving_scope(scope)
271
+ end
272
+
273
+ def before_declaring_variable(variable_entry)
274
+ end
275
+
276
+ def after_declaring_variable(variable_entry)
277
+ end
278
+ end
279
+ end
280
+ end