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,36 @@
1
+ # encoding: utf-8
2
+
3
+ module Rubocop
4
+ module Cop
5
+ module Style
6
+ # Checks for uses of double quotes where single quotes would do.
7
+ class StringLiterals < Cop
8
+ MSG = "Prefer single-quoted strings when you don't need " +
9
+ 'string interpolation or special symbols.'
10
+
11
+ def on_str(node)
12
+ # Constants like __FILE__ are handled as strings,
13
+ # but don't respond to begin.
14
+ return unless node.loc.respond_to?(:begin)
15
+
16
+ # regex matches IF there is a ' or there is a \\ in the string that
17
+ # is not preceeded/followed by another \\ (e.g. "\\x34") but not
18
+ # "\\\\"
19
+ if node.loc.expression.source !~ /('|([^\\]|\A)\\([^\\]|\Z))/ &&
20
+ node.loc.begin.is?('"')
21
+ add_offence(:convention, node.loc.expression, MSG)
22
+ do_autocorrect(node)
23
+ end
24
+ end
25
+
26
+ alias_method :on_dstr, :ignore_node
27
+ alias_method :on_regexp, :ignore_node
28
+
29
+ def autocorrect_action(node)
30
+ replace(node.loc.begin, "'")
31
+ replace(node.loc.end, "'")
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,314 @@
1
+ # encoding: utf-8
2
+
3
+ # rubocop:disable SymbolName
4
+
5
+ module Rubocop
6
+ module Cop
7
+ module Style
8
+ # Common functionality for checking surrounding space.
9
+ module SurroundingSpace
10
+ def space_between?(t1, t2)
11
+ char_preceding_2nd_token =
12
+ @source[t2.pos.line - 1][t2.pos.column - 1]
13
+ if char_preceding_2nd_token == '+' && t1.type != :tPLUS
14
+ # Special case. A unary plus is not present in the tokens.
15
+ char_preceding_2nd_token =
16
+ @source[t2.pos.line - 1][t2.pos.column - 2]
17
+ end
18
+ t2.pos.line > t1.pos.line || char_preceding_2nd_token == ' '
19
+ end
20
+
21
+ def index_of_first_token(node, tokens)
22
+ @token_table ||= build_token_table(tokens)
23
+ b = node.loc.expression.begin
24
+ @token_table[[b.line, b.column]]
25
+ end
26
+
27
+ def index_of_last_token(node, tokens)
28
+ @token_table ||= build_token_table(tokens)
29
+ e = node.loc.expression.end
30
+ (0...e.column).to_a.reverse.find do |c|
31
+ ix = @token_table[[e.line, c]]
32
+ return ix if ix
33
+ end
34
+ end
35
+
36
+ def build_token_table(tokens)
37
+ table = {}
38
+ tokens.each_with_index do |t, ix|
39
+ table[[t.pos.line, t.pos.column]] = ix
40
+ end
41
+ table
42
+ end
43
+ end
44
+
45
+ # Checks that operators have space around them, except for **
46
+ # which should not have surrounding space.
47
+ class SpaceAroundOperators < Cop
48
+ include SurroundingSpace
49
+ MSG_MISSING = "Surrounding space missing for operator '%s'."
50
+ MSG_DETECTED = 'Space around operator ** detected.'
51
+
52
+ BINARY_OPERATORS =
53
+ [:tEQL, :tAMPER2, :tPIPE, :tCARET, :tPLUS, :tMINUS, :tSTAR2,
54
+ :tDIVIDE, :tPERCENT, :tEH, :tCOLON, :tANDOP, :tOROP, :tMATCH,
55
+ :tNMATCH, :tEQ, :tNEQ, :tGT, :tRSHFT, :tGEQ, :tLT,
56
+ :tLSHFT, :tLEQ, :tASSOC, :tEQQ, :tCMP, :tOP_ASGN]
57
+
58
+ def inspect(source_buffer, source, tokens, sexp, comments)
59
+ return unless sexp
60
+
61
+ @source = source
62
+ positions_not_to_check = get_positions_not_to_check(tokens, sexp)
63
+
64
+ tokens.each_cons(3) do |token_before, token, token_after|
65
+ next if token_before.type == :kDEF # TODO: remove?
66
+ next if token_before.type == :tDOT # Called as method.
67
+ next if positions_not_to_check.include?(token.pos)
68
+
69
+ case token.type
70
+ when :tPOW
71
+ if has_space?(token_before, token, token_after)
72
+ add_offence(:convention, token.pos, MSG_DETECTED)
73
+ end
74
+ when *BINARY_OPERATORS
75
+ check_missing_space(token_before, token, token_after)
76
+ end
77
+ end
78
+ end
79
+
80
+ # Returns an array of positions marking the tokens that this cop
81
+ # should not check, either because the token is not an operator
82
+ # or because another cop does the check.
83
+ def get_positions_not_to_check(tokens, sexp)
84
+ positions_not_to_check = []
85
+ do_not_check_block_arg_pipes(sexp, positions_not_to_check)
86
+ do_not_check_param_default(tokens, sexp, positions_not_to_check)
87
+ do_not_check_class_lshift_self(tokens, sexp, positions_not_to_check)
88
+ do_not_check_def_things(tokens, sexp, positions_not_to_check)
89
+ do_not_check_singleton_operator_defs(tokens, sexp,
90
+ positions_not_to_check)
91
+ positions_not_to_check
92
+ end
93
+
94
+ def do_not_check_block_arg_pipes(sexp, positions_not_to_check)
95
+ # each { |a| }
96
+ # ^ ^
97
+ on_node(:block, sexp) do |b|
98
+ on_node(:args, b) do |a|
99
+ positions_not_to_check << a.loc.begin << a.loc.end if a.loc.begin
100
+ end
101
+ end
102
+ end
103
+
104
+ def do_not_check_param_default(tokens, sexp, positions_not_to_check)
105
+ # func(a, b=nil)
106
+ # ^
107
+ on_node(:optarg, sexp) do |optarg|
108
+ _arg, equals, _value = tokens[index_of_first_token(optarg, tokens),
109
+ 3]
110
+ positions_not_to_check << equals.pos
111
+ end
112
+ end
113
+
114
+ def do_not_check_class_lshift_self(tokens,
115
+ sexp,
116
+ positions_not_to_check)
117
+ # class <<self
118
+ # ^
119
+ on_node(:sclass, sexp) do |sclass|
120
+ ix = index_of_first_token(sclass, tokens)
121
+ if tokens[ix, 2].map(&:type) == [:kCLASS, :tLSHFT]
122
+ positions_not_to_check << tokens[ix + 1].pos
123
+ end
124
+ end
125
+ end
126
+
127
+ def do_not_check_def_things(tokens, sexp, positions_not_to_check)
128
+ # def +(other)
129
+ # ^
130
+ on_node(:def, sexp) do |def_node|
131
+ # def each &block
132
+ # ^
133
+ # def each *args
134
+ # ^
135
+ on_node([:blockarg, :restarg], def_node) do |arg_node|
136
+ positions_not_to_check <<
137
+ tokens[index_of_first_token(arg_node, tokens)].pos
138
+ end
139
+ positions_not_to_check <<
140
+ tokens[index_of_first_token(def_node, tokens) + 1].pos
141
+ end
142
+ end
143
+
144
+ def do_not_check_singleton_operator_defs(tokens, sexp,
145
+ positions_not_to_check)
146
+ # def self.===(other)
147
+ # ^
148
+ on_node(:defs, sexp) do |defs_node|
149
+ _receiver, name, _args = *defs_node
150
+ ix = index_of_first_token(defs_node, tokens)
151
+ name_token = tokens[ix..-1].find { |t| t.text == name.to_s }
152
+ positions_not_to_check << name_token.pos
153
+ end
154
+ end
155
+
156
+ def check_missing_space(token_before, token, token_after)
157
+ unless has_space?(token_before, token, token_after)
158
+ text = token.text.to_s + (token.type == :tOP_ASGN ? '=' : '')
159
+ add_offence(:convention, token.pos, MSG_MISSING % text)
160
+ end
161
+ end
162
+
163
+ def has_space?(token_before, token, token_after)
164
+ space_between?(token_before, token) && space_between?(token,
165
+ token_after)
166
+ end
167
+ end
168
+
169
+ # Checks that block braces have surrounding space.
170
+ class SpaceAroundBraces < Cop
171
+ include SurroundingSpace
172
+ MSG_LEFT = "Surrounding space missing for '{'."
173
+ MSG_RIGHT = "Space missing to the left of '}'."
174
+
175
+ def inspect(source_buffer, source, tokens, sexp, comments)
176
+ return unless sexp
177
+ @source = source
178
+ positions_not_to_check = get_positions_not_to_check(tokens, sexp)
179
+ tokens.each_cons(2) do |t1, t2|
180
+ next if ([t1.pos, t2.pos] - positions_not_to_check).size < 2
181
+
182
+ type1, type2 = t1.type, t2.type
183
+ # :tLBRACE in hash literals, :tLCURLY otherwise.
184
+ next if [:tLCURLY, :tLBRACE].include?(type1) && type2 == :tRCURLY
185
+ check(t1, t2, MSG_LEFT) if type1 == :tLCURLY || type2 == :tLCURLY
186
+ check(t1, t2, MSG_RIGHT) if type2 == :tRCURLY
187
+ end
188
+ end
189
+
190
+ def get_positions_not_to_check(tokens, sexp)
191
+ positions_not_to_check = []
192
+
193
+ on_node(:hash, sexp) do |hash|
194
+ b_ix = index_of_first_token(hash, tokens)
195
+ e_ix = index_of_last_token(hash, tokens)
196
+ positions_not_to_check << tokens[b_ix].pos << tokens[e_ix].pos
197
+ end
198
+
199
+ # TODO: Check braces inside string/symbol/regexp/xstr interpolation.
200
+ on_node([:dstr, :dsym, :regexp, :xstr], sexp) do |s|
201
+ b_ix = index_of_first_token(s, tokens)
202
+ e_ix = index_of_last_token(s, tokens)
203
+ tokens[b_ix..e_ix].each do |t|
204
+ positions_not_to_check << t.pos if t.type == :tRCURLY
205
+ end
206
+ end
207
+
208
+ positions_not_to_check
209
+ end
210
+
211
+ def check(t1, t2, msg)
212
+ unless space_between?(t1, t2)
213
+ brace_token = msg == MSG_LEFT ? t1 : t2
214
+ add_offence(:convention, brace_token.pos, msg)
215
+ end
216
+ end
217
+ end
218
+
219
+ # Common functionality for checking for spaces inside various
220
+ # kinds of parentheses.
221
+ module SpaceInside
222
+ include SurroundingSpace
223
+ MSG = 'Space inside %s detected.'
224
+
225
+ def inspect(source_buffer, source, tokens, sexp, comments)
226
+ @source = source
227
+ left, right, kind = specifics
228
+ tokens.each_cons(2) do |t1, t2|
229
+ if t1.type == left || t2.type == right
230
+ if t2.pos.line == t1.pos.line && space_between?(t1, t2)
231
+ space_range = Parser::Source::Range.new(source_buffer,
232
+ t1.pos.end_pos,
233
+ t2.pos.begin_pos)
234
+ add_offence(:convention, space_range, format(MSG, kind))
235
+ end
236
+ end
237
+ end
238
+ end
239
+ end
240
+
241
+ # Checks for spaces inside ordinary round parentheses.
242
+ class SpaceInsideParens < Cop
243
+ include SpaceInside
244
+
245
+ def specifics
246
+ [:tLPAREN2, :tRPAREN, 'parentheses']
247
+ end
248
+ end
249
+
250
+ # Checks for spaces inside square brackets.
251
+ class SpaceInsideBrackets < Cop
252
+ include SpaceInside
253
+
254
+ def specifics
255
+ [:tLBRACK, :tRBRACK, 'square brackets']
256
+ end
257
+ end
258
+
259
+ # Checks that braces used for hash literals have or don't have
260
+ # surrounding space depending on configuration.
261
+ class SpaceInsideHashLiteralBraces < Cop
262
+ include SurroundingSpace
263
+ MSG = 'Space inside hash literal braces %s.'
264
+
265
+ def inspect(source_buffer, source, tokens, sexp, comments)
266
+ return unless sexp
267
+ @source = source
268
+ on_node(:hash, sexp) do |hash|
269
+ b_ix = index_of_first_token(hash, tokens)
270
+ e_ix = index_of_last_token(hash, tokens)
271
+ if tokens[b_ix].type == :tLBRACE # Hash literal with braces?
272
+ check(tokens[b_ix], tokens[b_ix + 1])
273
+ check(tokens[e_ix - 1], tokens[e_ix])
274
+ end
275
+ end
276
+ end
277
+
278
+ def check(t1, t2)
279
+ types = [t1, t2].map(&:type)
280
+ braces = [:tLBRACE, :tRCURLY]
281
+ return if types == braces || (braces - types).size == 2
282
+ # No offence if line break inside.
283
+ return if t1.pos.line < t2.pos.line
284
+ has_space = space_between?(t1, t2)
285
+ is_offence, word = if self.class.config['EnforcedStyleIsWithSpaces']
286
+ [!has_space, 'missing']
287
+ else
288
+ [has_space, 'detected']
289
+ end
290
+ add_offence(:convention, t1.pos, sprintf(MSG, word)) if is_offence
291
+ end
292
+ end
293
+
294
+ # Checks that the equals signs in parameter default assignments
295
+ # have surrounding space.
296
+ class SpaceAroundEqualsInParameterDefault < Cop
297
+ include SurroundingSpace
298
+ MSG = 'Surrounding space missing in default value assignment.'
299
+
300
+ def inspect(source_buffer, source, tokens, sexp, comments)
301
+ return unless sexp
302
+ @source = source
303
+ on_node(:optarg, sexp) do |optarg|
304
+ index = index_of_first_token(optarg, tokens)
305
+ arg, equals, value = tokens[index, 3]
306
+ unless space_between?(arg, equals) && space_between?(equals, value)
307
+ add_offence(:convention, equals.pos, MSG)
308
+ end
309
+ end
310
+ end
311
+ end
312
+ end
313
+ end
314
+ end
@@ -0,0 +1,31 @@
1
+ # encoding: utf-8
2
+
3
+ module Rubocop
4
+ module Cop
5
+ module Style
6
+ # This cop checks for array literals made up of symbols
7
+ # that are not using the %i() syntax.
8
+ #
9
+ # This check makes sense only on Ruby 2.0+.
10
+ class SymbolArray < Cop
11
+ MSG = 'Use %i or %I for array of symbols.'
12
+
13
+ def on_array(node)
14
+ # %i and %I were introduced in Ruby 2.0
15
+ unless RUBY_VERSION < '2.0.0'
16
+ return unless node.loc.begin && node.loc.begin.is?('[')
17
+
18
+ array_elems = node.children
19
+
20
+ # no need to check empty arrays
21
+ return unless array_elems && array_elems.size > 1
22
+
23
+ symbol_array = array_elems.all? { |e| e.type == :sym }
24
+
25
+ add_offence(:convention, node.loc.expression, MSG) if symbol_array
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,27 @@
1
+ # encoding: utf-8
2
+
3
+ module Rubocop
4
+ module Cop
5
+ module Style
6
+ # This cop checks whether symbol names are snake_case.
7
+ # There's also an option to accept CamelCase symbol names as well.
8
+ class SymbolName < Cop
9
+ MSG = 'Use snake_case for symbols.'
10
+ SNAKE_CASE = /^[\da-z_]+[!?=]?$/
11
+ CAMEL_CASE = /^[A-Z][A-Za-z\d]*$/
12
+
13
+ def allow_camel_case?
14
+ self.class.config['AllowCamelCase']
15
+ end
16
+
17
+ def on_sym(node)
18
+ sym_name = node.to_a[0]
19
+ return unless sym_name =~ /^[a-zA-Z]/
20
+ return if sym_name =~ SNAKE_CASE
21
+ return if allow_camel_case? && sym_name =~ CAMEL_CASE
22
+ add_offence(:convention, node.loc.expression, MSG)
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,25 @@
1
+ # encoding: utf-8
2
+
3
+ module Rubocop
4
+ module Cop
5
+ module Style
6
+ # This cop checks for tabs inside the source code.
7
+ class Tab < Cop
8
+ MSG = 'Tab detected.'
9
+
10
+ def inspect(source_buffer, source, tokens, ast, comments)
11
+ source.each_with_index do |line, index|
12
+ match = line.match(/^( *)\t/)
13
+ if match
14
+ spaces = match.captures[0]
15
+ add_offence(:convention,
16
+ source_range(source_buffer, source[0...index],
17
+ spaces.length, 8),
18
+ MSG)
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,49 @@
1
+ # encoding: utf-8
2
+
3
+ module Rubocop
4
+ module Cop
5
+ module Style
6
+ # This cop checks for multi-line ternary op expressions.
7
+ class MultilineTernaryOperator < Cop
8
+ MSG =
9
+ 'Avoid multi-line ?: (the ternary operator); use if/unless instead.'
10
+
11
+ def on_if(node)
12
+ loc = node.loc
13
+
14
+ # discard non-ternary ops
15
+ return unless loc.respond_to?(:question)
16
+
17
+ if loc.line != loc.colon.line
18
+ add_offence(:convention, loc.expression, MSG)
19
+ end
20
+
21
+ super
22
+ end
23
+ end
24
+
25
+ # This cop checks for nested ternary op expressions.
26
+ class NestedTernaryOperator < Cop
27
+ MSG = 'Ternary operators must not be nested. Prefer if/else ' +
28
+ 'constructs instead.'
29
+
30
+ def on_if(node)
31
+ loc = node.loc
32
+
33
+ # discard non-ternary ops
34
+ return unless loc.respond_to?(:question)
35
+
36
+ node.children.each do |child|
37
+ on_node(:if, child) do |c|
38
+ if c.loc.respond_to?(:question)
39
+ add_offence(:convention, c.loc.expression, MSG)
40
+ end
41
+ end
42
+ end
43
+
44
+ super
45
+ end
46
+ end
47
+ end
48
+ end
49
+ end