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,50 @@
1
+ # rcov generated
2
+ coverage
3
+ coverage.data
4
+
5
+ # rdoc generated
6
+ rdoc
7
+
8
+ # yard generated
9
+ doc
10
+ .yardoc
11
+
12
+ # bundler
13
+ .bundle
14
+ Gemfile.lock
15
+
16
+ # jeweler generated
17
+ pkg
18
+
19
+ # Have editor/IDE/OS specific files you need to ignore? Consider using a global gitignore:
20
+ #
21
+ # * Create a file at ~/.gitignore
22
+ # * Include files you want ignored
23
+ # * Run: git config --global core.excludesfile ~/.gitignore
24
+ #
25
+ # After doing this, these files will be ignored in all your git projects,
26
+ # saving you from having to 'pollute' every project you touch with them
27
+ #
28
+ # Not sure what to needs to be ignored for particular editors/OSes? Here's some ideas to get you started. (Remember, remove the leading # of the line)
29
+ #
30
+ # For MacOS:
31
+ #
32
+ #.DS_Store
33
+
34
+ # For TextMate
35
+ #*.tmproj
36
+ #tmtags
37
+
38
+ # For emacs:
39
+ #*~
40
+ #\#*
41
+ #.\#*
42
+
43
+ # For vim:
44
+ #*.swp
45
+
46
+ # For redcar:
47
+ #.redcar
48
+
49
+ # For rubinius:
50
+ #*.rbc
data/.rspec ADDED
@@ -0,0 +1 @@
1
+ --color
@@ -0,0 +1,7 @@
1
+ # This is the configuration used to check the rubocop source code.
2
+
3
+ inherit_from: config/default.yml
4
+
5
+ # Avoid methods longer than 30 lines of code
6
+ MethodLength:
7
+ Max: 30
@@ -0,0 +1,7 @@
1
+ language: ruby
2
+ rvm:
3
+ - 1.9.3
4
+ - 2.0.0
5
+ - jruby-19mode
6
+ - rbx-19mode
7
+ script: bundle exec rspec
@@ -0,0 +1,2 @@
1
+ --markup markdown
2
+ --hide-void-return
@@ -0,0 +1,268 @@
1
+ # Changelog
2
+
3
+ ## master (unreleased)
4
+
5
+ ### New features
6
+
7
+ * Added `-l/--lint` option to allow doing only linting with no style checks (similar to running `ruby -wc`).
8
+
9
+ ### Changes
10
+
11
+ * Removed the `BlockAlignSchema` configuration option from `EndAlignment`. We now support only the default alignment schema - `StartOfAssignment`.
12
+
13
+ ### Bugs fixed
14
+
15
+ * [#318](https://github.com/bbatsov/rubocop/issues/318) - correct some special cases of block end alignment
16
+ * [#317](https://github.com/bbatsov/rubocop/issues/317) - fix a false positive in `LiteralInCondition`
17
+ * [#321](https://github.com/bbatsov/rubocop/issues/321) - Ignore variables whose name start with `_` in `ShadowingOuterLocalVariable`
18
+ * [#322](https://github.com/bbatsov/rubocop/issues/322) - Fix exception of `UnusedLocalVariable` and `ShadowingOuterLocalVariable` when inspecting keyword splat argument
19
+ * [#316](https://github.com/bbatsov/rubocop/issues/316) - Correct nested postfix unless in `MultilineIfThen`
20
+ * [#327](https://github.com/bbatsov/rubocop/issues/327) - Fix false offences for block expression that spawn on two lines in `EndAlignment`
21
+
22
+ ## 0.9.0 (01/07/2013)
23
+
24
+ ### New features
25
+
26
+ * Introduced formatter feature, enables custom formatted output and multiple outputs.
27
+ * Added progress formatter and now it's the default. (`--format progress`)
28
+ * Added JSON formatter. (`--format json`)
29
+ * Added clang style formatter showing the offending source
30
+ code. (`--format clang`). The `clang` formatter marks a whole range
31
+ rather than just the starting position, to indicate more clearly
32
+ where the problem is.
33
+ * Added `-f`/`--format` option to specify formatter.
34
+ * Added `-o`/`--out` option to specify output file for each formatter.
35
+ * Added `-r/--require` option to inject external Ruby code into RuboCop.
36
+ * Added `-V/--verbose-version` option that displays Parser version and Ruby version as well.
37
+ * Added `-R/--rails` option that enables extra Rails-specific cops.
38
+ * Added support for auto-correction of some offences with `-a`/`--auto-correct`.
39
+ * New cop `CaseEquality` checks for explicit use of `===`
40
+ * New cop `AssignmentInCondition` checks for assignment in conditions.
41
+ * New cop `EndAlignment` tracks misaligned `end` keywords.
42
+ * New cop `Void` tracks uses of literals/variables/operators in possibly void context.
43
+ * New cop `Documentation` checks for top level class/module doc comments.
44
+ * New cop `UnreachableCode` tracks unreachable code segments.
45
+ * New cop `MethodCallParentheses` tracks unwanted braces in method calls.
46
+ * New cop `UnusedLocalVariable` tracks unused local variables for each scope.
47
+ * New cop `ShadowingOuterLocalVariable` tracks use of the same name as outer local variables for block arguments or block local variables.
48
+ * New cop `WhileUntilDo` tracks uses of `do` with multi-line `while/until`.
49
+ * New cop `CharacterLiteral` tracks uses of character literals (`?x`).
50
+ * New cop `EndInMethod` tracks uses of `END` in method definitions.
51
+ * New cop `LiteralInCondition` tracks uses of literals in the conditions of `if/while/until`.
52
+ * New cop `BeginBlock` tracks uses of `BEGIN` blocks.
53
+ * New cop `EndBlock` tracks uses of `END` blocks.
54
+ * New cop `DotPosition` tracks the dot position in multi-line method calls.
55
+ * New cop `Attr` tracks uses of `Module#attr`.
56
+
57
+ ### Changes
58
+
59
+ * Deprecated `-e`/`--emacs` option. (Use `--format emacs` instead)
60
+ * Made `progress` formatter the default.
61
+ * Most formatters (`progress`, `simple` and `clang`) now print relative file paths if the paths are under the current working directory.
62
+ * Migrate all cops to new namespaces. `Rubocop::Cop::Lint` is for cops that emit warnings. `Rubocop::Cop::Style` is for cops that do not belong in other namespaces.
63
+ * Merge `FavorPercentR` and `PercentR` into one cop called `RegexpLiteral`, and add configuration parameter `MaxSlashes`.
64
+ * Add `CountKeywordArgs` configuration option to `ParameterLists` cop.
65
+
66
+ ### Bugs fixed
67
+
68
+ * [#239](https://github.com/bbatsov/rubocop/issues/239) - fixed double quotes false positives
69
+ * [#233](https://github.com/bbatsov/rubocop/issues/233) - report syntax cop offences
70
+ * Fix off-by-one error in favor_modifier.
71
+ * [#229](https://github.com/bbatsov/rubocop/issues/229) - recognize a line with CR+LF as a blank line in AccessControl cop.
72
+ * [#235](https://github.com/bbatsov/rubocop/issues/235) - handle multiple constant assignment in ConstantName cop
73
+ * [#246](https://github.com/bbatsov/rubocop/issues/246) - correct handling of unicode escapes within double quotes
74
+ * Fix crashes in Blocks, CaseEquality, CaseIndentation, ClassAndModuleCamelCase, ClassMethods, CollectionMethods, and ColonMethodCall.
75
+ * [#263](https://github.com/bbatsov/rubocop/issues/263) - do not check for space around operators called with method syntax
76
+ * [#271](https://github.com/bbatsov/rubocop/issues/271) - always allow line breaks inside hash literal braces
77
+ * [#270](https://github.com/bbatsov/rubocop/issues/270) - fixed a false positive in ParenthesesAroundCondition
78
+ * [#288](https://github.com/bbatsov/rubocop/issues/288) - get config parameter AllCops/Excludes from highest config file in path
79
+ * [#276](https://github.com/bbatsov/rubocop/issues/276) - let columns start at 1 instead of 0 in all output of column numbers
80
+ * [#292](https://github.com/bbatsov/rubocop/issues/292) - don't check non-regular files (like sockets, etc)
81
+ * Fix crashes in WordArray on arrays of character literals such as `[?\r, ?\n]`
82
+ * Fix crashes in Documentation on empty modules
83
+
84
+ ## 0.8.3 (18/06/2013)
85
+
86
+ ### Bug fixes
87
+
88
+ * Lock Parser dependency to version 2.0.0.beta5.
89
+
90
+ ## 0.8.2 (06/05/2013)
91
+
92
+ ### New features
93
+
94
+ * New cop `BlockNesting` checks for excessive block nesting
95
+
96
+ ### Bug fixes
97
+
98
+ * Correct calculation of whether a modifier version of a conditional statement will fit.
99
+ * Fix an error in `MultilineIfThen` cop that occurred in some special cases.
100
+ * [#231](https://github.com/bbatsov/rubocop/issues/231) - fix a false positive for modifier if
101
+
102
+ ## 0.8.1 (05/30/2013)
103
+
104
+ ### New features
105
+
106
+ * New cop `Proc` tracks uses of `Proc.new`
107
+
108
+ ### Changes
109
+
110
+ * Renamed `NewLambdaLiteral` to `Lambda`.
111
+ * Aligned the `Lambda` cop more closely to the style guide - it now
112
+ allows the use of `lambda` for multi-line blocks.
113
+
114
+ ### Bugs fixed
115
+
116
+ * [#210](https://github.com/bbatsov/rubocop/issues/210) - fix a false positive for double quotes in regexp literals
117
+ * [#211](https://github.com/bbatsov/rubocop/issues/211) - fix a false positive for `initialize` method looking like a trivial writer
118
+ * [#215](https://github.com/bbatsov/rubocop/issues/215) - Fixed a lot of modifier `if/unless/while/until` issues
119
+ * [#213](https://github.com/bbatsov/rubocop/issues/213) - Make sure even disabled cops get their configuration set
120
+ * [#214](https://github.com/bbatsov/rubocop/issues/214) - Fix SpaceInsideHashLiteralBraces to handle string interpolation right
121
+
122
+ ## 0.8.0 (05/28/2013)
123
+
124
+ ### Changes
125
+
126
+ * Folded `ArrayLiteral` and `HashLiteral` into `EmptyLiteral` cop
127
+ * The maximum number of params `ParameterLists` accepts in now configurable
128
+ * Reworked `SymbolSnakeCase` into `SymbolName`, which has an option `AllowCamelCase` enabled by default.
129
+ * Migrated from `Ripper` to the portable [Parser](https://github.com/whitequark/parser).
130
+
131
+ ### New features
132
+
133
+ * New cop `ConstantName` checks for constant which are not using `SCREAMING_SNAKE_CASE`.
134
+ * New cop `AccessControl` checks private/protected indentation and surrounding blank lines.
135
+ * New cop `Loop` checks for `begin/end/while(until)` and suggests the use of `Kernel#loop`.
136
+
137
+ ## 0.7.2 (05/13/2013)
138
+
139
+ ### Bugs fixed
140
+
141
+ * [#155](https://github.com/bbatsov/rubocop/issues/155) 'Do not use semicolons to terminate expressions.' is not implemented correctly
142
+ * `OpMethod` now handles definition of unary operators without crashing.
143
+ * `SymbolSnakeCase` now handles aliasing of operators without crashing.
144
+ * `RescueException` now handles the splat operator `*` in a `rescue` clause without crashing.
145
+ * [#159](https://github.com/bbatsov/rubocop/issues/159) AvoidFor cop misses many violations
146
+
147
+ ## 0.7.1 (05/11/2013)
148
+
149
+ ### Bugs fixed
150
+
151
+ * Added missing files to the gemspec
152
+
153
+ ## 0.7.0 (05/11/2013)
154
+
155
+ ### New features
156
+
157
+ * Added ability to include or exclude files/directories through `.rubocop.yml`
158
+ * Added option --only for running a single cop.
159
+ * Relax semicolon rule for one line methods, classes and modules
160
+ * Configuration files, such as `.rubocop.yml`, can now include configuration from other files through the `inherit_from` directive. All configuration files implicitly inherit from `config/default.yml`.
161
+ * New cop `ClassMethods` checks for uses for class/module names in definitions of class/module methods
162
+ * New cop `SingleLineMethods` checks for methods implemented on a single line
163
+ * New cop `FavorJoin` checks for usages of `Array#*` with a string argument
164
+ * New cop `BlockComments` tracks uses of block comments(`=begin/=end` comments)
165
+ * New cop `EmptyLines` tracks consecutive blank lines
166
+ * New cop `WordArray` tracks arrays of words.
167
+ * [#108](https://github.com/bbatsov/rubocop/issues/108) New cop `SpaceInsideHashLiteralBraces` checks for spaces inside hash literal braces - style is configurable
168
+ * New cop `LineContinuation` tracks uses of the line continuation character (`\`)
169
+ * New cop `SymbolArray` tracks arrays of symbols.
170
+ * Print warnings for unrecognized names in configuration files.
171
+ * New cop `TrivialAccessors` tracks method definitions that could be automatically generated with `attr_*` methods.
172
+ * New cop `LeadingCommentSpace` checks for missing space after `#` in comments.
173
+ * New cop `ColonMethodCall` tracks uses of `::` for method calls.
174
+ * New cop `AvoidGlobalVars` tracks uses of non built-in global variables.
175
+ * New cop `SpaceAfterControlKeyword` tracks missing spaces after `if/elsif/case/when/until/unless/while`.
176
+ * New cop `Not` tracks uses of the `not` keyword.
177
+ * New cop `Eval` tracks uses of the `eval` function.
178
+
179
+ ### Bugs fixed
180
+
181
+ * [#101](https://github.com/bbatsov/rubocop/issues/101) `SpaceAroundEqualsInParameterDefault` doesn't work properly with empty string
182
+ * Fix `BraceAfterPercent` for `%W`, `%i` and `%I` and added more tests
183
+ * Fix a false positive in the `Alias` cop. `:alias` is no longer treated as keyword
184
+ * `ArrayLiteral` now properly detects `Array.new`
185
+ * `HashLiteral` now properly detects `Hash.new`
186
+ * `VariableInterpolation` now detects regexp back references and doesn't crash.
187
+ * Don't generate pathnames like some/project//some.rb
188
+ * [#151](https://github.com/bbatsov/rubocop/issues/151) Don't print the unrecognized cop warning several times for the same `.rubocop.yml`
189
+
190
+ ### Misc
191
+
192
+ * Renamed `Indentation` cop to `CaseIndentation` to avoid confusion
193
+ * Renamed `EmptyLines` cop to `EmptyLineBetweenDefs` to avoid confusion
194
+
195
+ ## 0.6.1 (04/28/2013)
196
+
197
+ ### New features
198
+
199
+ * Split `AsciiIdentifiersAndComments` cop in two separate cops
200
+
201
+ ### Bugs fixed
202
+
203
+ * [#90](https://github.com/bbatsov/rubocop/issues/90) Two cops crash when scanning code using `super`
204
+ * [#93](https://github.com/bbatsov/rubocop/issues/93) Issue with `whitespace?': undefined method`
205
+ * [#97](https://github.com/bbatsov/rubocop/issues/97) Build fails
206
+ * [#100](https://github.com/bbatsov/rubocop/issues/100) `OpMethod` cop doesn't work if method arg is not in braces
207
+ * `SymbolSnakeCase` now tracks Ruby 1.9 hash labels as well as regular symbols
208
+
209
+ ### Misc
210
+
211
+ * [#88](https://github.com/bbatsov/rubocop/issues/88) Abort gracefully when interrupted with Ctrl-C
212
+ * No longer crashes on bugs within cops. Now problematic checks are skipped and a message is displayed.
213
+ * Replaced `Term::ANSIColor` with `Rainbow`.
214
+ * Add an option to disable colors in the output.
215
+ * Cop names are now displayed alongside messages when `-d/--debug` is passed.
216
+
217
+ ## 0.6.0 (04/23/2013)
218
+
219
+ ### New features
220
+
221
+ * New cop `ReduceArguments` tracks argument names in reduce calls
222
+ * New cop `MethodLength` tracks number of LOC (lines of code) in methods
223
+ * New cop `RescueModifier` tracks uses of `rescue` in modifier form.
224
+ * New cop `PercentLiterals` tracks uses of `%q`, `%Q`, `%s` and `%x`.
225
+ * New cop `BraceAfterPercent` tracks uses of % literals with
226
+ delimiters other than ().
227
+ * Support for disabling cops locally in a file with rubocop:disable comments.
228
+ * New cop `EnsureReturn` tracks usages of `return` in `ensure` blocks.
229
+ * New cop `HandleExceptions` tracks suppressed exceptions.
230
+ * New cop `AsciiIdentifiersAndComments` tracks uses of non-ascii
231
+ characters in identifiers and comments.
232
+ * New cop `RescueException` tracks uses of rescuing the `Exception` class.
233
+ * New cop `ArrayLiteral` tracks uses of Array.new.
234
+ * New cop `HashLiteral` tracks uses of Hash.new.
235
+ * New cop `OpMethod` tracks the argument name in operator methods.
236
+ * New cop `PercentR` tracks uses of %r literals with zero or one slash in the regexp.
237
+ * New cop `FavorPercentR` tracks uses of // literals with more than one slash in the regexp.
238
+
239
+ ### Bugs fixed
240
+
241
+ * [#62](https://github.com/bbatsov/rubocop/issues/62) - Config files in ancestor directories are ignored if another exists in home directory
242
+ * [#65](https://github.com/bbatsov/rubocop/issues/65) - Suggests to convert symbols `:==`, `:<=>` and the like to snake_case
243
+ * [#66](https://github.com/bbatsov/rubocop/issues/66) - Does not crash on unreadable or unparseable files
244
+ * [#70](https://github.com/bbatsov/rubocop/issues/70) - Support `alias` with bareword arguments
245
+ * [#64](https://github.com/bbatsov/rubocop/issues/64) - Performance issue with Bundler
246
+ * [#75](https://github.com/bbatsov/rubocop/issues/75) - Make it clear that some global variables require the use of the English library
247
+ * [#79](https://github.com/bbatsov/rubocop/issues/79) - Ternary operator missing whitespace detection
248
+
249
+ ### Misc
250
+
251
+ * Dropped Jeweler for gem release management since it's no longer
252
+ actively maintained.
253
+ * Handle pluralization properly in the final summary.
254
+
255
+ ## 0.5.0 (04/17/2013)
256
+
257
+ ### New features
258
+
259
+ * New cop `FavorSprintf` that checks for usages of `String#%`
260
+ * New cop `Semicolon` that checks for usages of `;` as expression separator
261
+ * New cop `VariableInterpolation` that checks for variable interpolation in double quoted strings
262
+ * New cop `Alias` that checks for uses of the keyword `alias`
263
+ * Automatically detect extensionless Ruby files with shebangs when search for Ruby source files in a directory
264
+
265
+ ### Bugs fixed
266
+
267
+ * [#59](https://github.com/bbatsov/rubocop/issues/59) - Interpolated variables not enclosed in braces are not noticed
268
+ * [#42](https://github.com/bbatsov/rubocop/issues/42) - Received malformed format string ArgumentError from rubocop
@@ -0,0 +1,16 @@
1
+ # Contributing to RuboCop
2
+
3
+ * Check out the latest master to make sure the feature hasn't been
4
+ implemented or the bug hasn't been fixed yet.
5
+ * Check out the issue tracker to make sure someone already hasn't
6
+ requested it and/or contributed it.
7
+ * Fork the project.
8
+ * Start a feature/bugfix branch.
9
+ * Commit and push until you are happy with your contribution.
10
+ * Make sure to add tests for it. This is important so I don't break it
11
+ in a future version unintentionally.
12
+ * Update the [Changelog](CHANGELOG.md) accordingly.
13
+ * Please try not to mess with the Rakefile, version, or history. If
14
+ you want to have your own version, or is otherwise necessary, that
15
+ is fine, but please isolate to its own commit so I can cherry-pick
16
+ around it.
data/Gemfile ADDED
@@ -0,0 +1,7 @@
1
+ source 'http://rubygems.org'
2
+
3
+ gemspec
4
+
5
+ group :test do
6
+ gem 'coveralls', require: false
7
+ end
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2012 Bozhidar Batsov
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,324 @@
1
+ [![Gem Version](https://badge.fury.io/rb/rubocop.png)](http://badge.fury.io/rb/rubocop)
2
+ [![Build Status](https://travis-ci.org/bbatsov/rubocop.png?branch=master)](https://travis-ci.org/bbatsov/rubocop)
3
+ [![Coverage Status](https://coveralls.io/repos/bbatsov/rubocop/badge.png?branch=master)](https://coveralls.io/r/bbatsov/rubocop)
4
+
5
+ # RuboCop
6
+
7
+ > Role models are important. <br/>
8
+ > -- Officer Alex J. Murphy / RoboCop
9
+
10
+ **RuboCop** is a Ruby code style checker based on the
11
+ [Ruby Style Guide](https://github.com/bbatsov/ruby-style-guide).
12
+
13
+ ## Installation
14
+
15
+ **RuboCop**'s installation is pretty standard:
16
+
17
+ ```bash
18
+ $ gem install rubocop
19
+ ```
20
+
21
+ ## Basic Usage
22
+
23
+ Running `rubocop` with no arguments will check all Ruby source files
24
+ in the current folder:
25
+
26
+ ```bash
27
+ $ rubocop
28
+ ```
29
+
30
+ Alternatively you can pass `rubocop` a list of files and folders to check:
31
+
32
+ ```bash
33
+ $ rubocop app spec lib/something.rb
34
+ ```
35
+
36
+ For more details check the available command-line options:
37
+
38
+ ```bash
39
+ $ rubocop -h
40
+ ```
41
+
42
+ Command flag | Description
43
+ -----------------------|------------------------------------------------------------
44
+ `-v/--version` | Displays the current version and exits
45
+ `-V/--verbose-version` | Displays the current version plus the version of Parser and Ruby
46
+ `-d/--debug` | Displays some extra debug output
47
+ `-c/--config` | Run with specified config file
48
+ `-f/--format` | Choose a formatter
49
+ `-o/--out` | Write output to a file instead of STDOUT
50
+ `-r/--require` | Require Ruby file
51
+ `-R/--rails` | Run extra Rails cops
52
+ `-l/--lint` | Run only lint cops
53
+ `-a/--auto-correct` | Auto-correct certain offences.
54
+ `-s/--silent` | Suppress the final summary
55
+ `--only` | Run only the specified cop
56
+
57
+ ## Configuration
58
+
59
+ The behavior of RuboCop can be controlled via the
60
+ [.rubocop.yml](https://github.com/bbatsov/rubocop/blob/master/.rubocop.yml)
61
+ configuration file. The file can be placed either in your home folder
62
+ or in some project folder.
63
+
64
+ RuboCop will start looking for the configuration file in the directory
65
+ where the inspected file is and continue its way up to the root folder.
66
+
67
+ The file has the following format:
68
+
69
+ ```yaml
70
+ inherit_from: ../.rubocop.yml
71
+
72
+ Encoding:
73
+ Enabled: true
74
+
75
+ LineLength:
76
+ Enabled: true
77
+ Max: 79
78
+ ```
79
+
80
+ It allows to enable/disable certain cops (checks) and to alter their
81
+ behavior if they accept any parameters.
82
+
83
+ The optional `inherit_from` directive is used to include configuration
84
+ from one or more files. This makes it possible to have the common
85
+ project settings in the `.rubocop.yml` file at the project root, and
86
+ then only the deviations from those rules in the subdirectories. The
87
+ included files can be given with absolute paths or paths relative to
88
+ the file where they are referenced. The settings after an
89
+ `inherit_from` directive override any settings in the included
90
+ file(s). When multiple files are included, the first file in the list
91
+ has the lowest precedence and the last one has the highest. The format
92
+ for multiple inclusion is:
93
+
94
+ ```yaml
95
+ inherit_from:
96
+ - ../.rubocop.yml
97
+ - ../conf/.rubocop.yml
98
+ ```
99
+
100
+ ### Defaults
101
+
102
+ The file `config/default.yml` under the RuboCop home directory
103
+ contains the default settings that all configurations inherit
104
+ from. Project and personal `.rubocop.yml` files need only make
105
+ settings that are different from the default ones. If there is no
106
+ `.rubocop.yml` file in the project or home directory,
107
+ `config/default.yml` will be used.
108
+
109
+ ### Disabling Cops within Source Code
110
+
111
+ One or more individual cops can be disabled locally in a section of a
112
+ file by adding a comment such as
113
+
114
+ ```ruby
115
+ # rubocop:disable LineLength, StringLiterals
116
+ [...]
117
+ # rubocop:enable LineLength, StringLiterals
118
+ ```
119
+
120
+ You can also disable *all* cops with
121
+
122
+ ```ruby
123
+ # rubocop:disable all
124
+ [...]
125
+ # rubocop:enable all
126
+ ```
127
+
128
+ One or more cops can be disabled on a single line with an end-of-line
129
+ comment.
130
+
131
+ ```ruby
132
+ for x in (0..19) # rubocop:disable AvoidFor
133
+ ```
134
+
135
+ ### Including/Excluding files
136
+
137
+ RuboCop checks all files recursively within the directory it is run
138
+ on. However, it does not recognize some files as Ruby(only files
139
+ ending with `.rb` or extensionless files with a `#!.*ruby` declaration
140
+ are automatically detected) files, and if you'd like it to check these
141
+ you'll need to manually pass them in. Files and directories can
142
+ also be ignored through `.rubocop.yml`.
143
+
144
+ Here is an example that might be used for a Rails project:
145
+
146
+ ```yaml
147
+ AllCops:
148
+ Includes:
149
+ - Rakefile
150
+ - config.ru
151
+ Excludes:
152
+ - db/**
153
+ - config/**
154
+ - script/**
155
+
156
+ # other configuration
157
+ # ...
158
+ ```
159
+
160
+ Note: Files and directories are specified relative to the
161
+ `.rubocop.yml` file. The `Excludes` parameter is special. It is valid
162
+ for the directory tree starting where it is defined. It is not
163
+ shadowed by the setting of `Excludes` in other `.rubocop.yml` files in
164
+ subdirectories.
165
+
166
+ ## Formatters
167
+
168
+ ### JSON Formatter
169
+
170
+ You can get RuboCop's inspection result in JSON format by passing `--format json` option in command line.
171
+ The JSON structure is like the following example:
172
+
173
+ ```javascript
174
+ {
175
+ "metadata": {
176
+ "rubocop_version": "0.9.0",
177
+ "ruby_engine": "ruby",
178
+ "ruby_version": "2.0.0",
179
+ "ruby_patchlevel": "195",
180
+ "ruby_platform": "x86_64-darwin12.3.0"
181
+ },
182
+ "files": [{
183
+ "path": "lib/foo.rb",
184
+ "offences": []
185
+ }, {
186
+ "path": "lib/bar.rb",
187
+ "offences": [{
188
+ "severity": "convention",
189
+ "message": "Line is too long. [81/79]",
190
+ "cop_name": "LineLength",
191
+ "location": {
192
+ "line": 546,
193
+ "column": 80
194
+ }
195
+ }, {
196
+ "severity": "warning",
197
+ "message": "Unreachable code detected.",
198
+ "cop_name": "UnreachableCode",
199
+ "location": {
200
+ "line": 15,
201
+ "column": 9
202
+ }
203
+ }
204
+ ]
205
+ }
206
+ ],
207
+ "summary": {
208
+ "offence_count": 2,
209
+ "target_file_count": 2,
210
+ "inspected_file_count": 2
211
+ }
212
+ }
213
+ ```
214
+
215
+ ### Custom Formatters
216
+
217
+ You can customize RuboCop's output format with custom formatter.
218
+
219
+ #### Creating Custom Formatter
220
+
221
+ To implement a custom formatter, you need to subclass
222
+ `Rubocop::Formatter::BaseFormatter` and override some methods,
223
+ or implement all formatter API methods by duck typing.
224
+
225
+ Please see the documents below for more formatter API details.
226
+
227
+ * [Rubocop::Formatter::BaseFormatter](http://rubydoc.info/gems/rubocop/Rubocop/Formatter/BaseFormatter)
228
+ * [Rubocop::Cop::Offence](http://rubydoc.info/gems/rubocop/Rubocop/Cop/Offence)
229
+ * [Parser::Source::Range](http://rubydoc.info/github/whitequark/parser/Parser/Source/Range)
230
+
231
+ #### Using Custom Formatter in Command Line
232
+
233
+ You can tell RuboCop to use your custom formatter with a combination of
234
+ `--format` and `--require` option.
235
+ For example, when you have defined `MyCustomFormatter` in
236
+ `./path/to/my_custom_formatter.rb`, you would type this command:
237
+
238
+ ```bash
239
+ $ rubocop --require ./path/to/my_custom_formatter --format MyCustomFormatter
240
+ ```
241
+
242
+ Note: The path passed to `--require` is directly passed to `Kernel.require`.
243
+ If your custom formatter file is not in `$LOAD_PATH`,
244
+ you need to specify the path as relative path prefixed with `./` explicitly,
245
+ or absolute path.
246
+
247
+ ## Compatibility
248
+
249
+ RuboCop supported only MRI 1.9 & MRI 2.0 prior to version 0.8. After
250
+ RuboCop 0.8, JRuby and Rubinius in 1.9 modes are also supported.
251
+
252
+ ## Editor integration
253
+
254
+ ### Emacs
255
+
256
+ [rubocop.el](https://github.com/bbatsov/rubocop-emacs) is a simple
257
+ Emacs interface for RuboCop. It allows you to run RuboCop inside Emacs
258
+ and quickly jump between problems in your code.
259
+
260
+ [flycheck](https://github.com/lunaryorn/flycheck) > 0.9 also supports
261
+ RuboCop and uses it by default when available.
262
+
263
+ ### Vim
264
+
265
+ The [vim-rubocop](https://github.com/ngmy/vim-rubocop) plugin runs
266
+ RuboCop and displays the results in Vim.
267
+
268
+ There's also a RuboCop checker in
269
+ [syntastic](https://github.com/scrooloose/syntastic).
270
+
271
+ ### Sublime Text 2
272
+
273
+ If you're a ST2 user you might find the
274
+ [Sublime RuboCop plugin](https://github.com/pderichs/sublime_rubocop)
275
+ useful.
276
+
277
+ ### Other Editors
278
+
279
+ Here's one great opportunity to contribute to RuboCop - implement
280
+ RuboCop integration for your favorite editor.
281
+
282
+ ## Guard integration
283
+
284
+ If you're fond of [Guard](https://github.com/guard/guard) you might
285
+ like
286
+ [guard-rubocop](https://github.com/yujinakayama/guard-rubocop). It
287
+ allows you to automatically check Ruby code style with RuboCop when
288
+ files are modified.
289
+
290
+ ## Contributors
291
+
292
+ Here's a [list](https://github.com/bbatsov/rubocop/contributors) of
293
+ all the people who have contributed to the development of RuboCop.
294
+
295
+ I'm extremely grateful to each and every one of them!
296
+
297
+ I'd like to single out [Jonas Arvidsson](https://github.com/jonas054)
298
+ and [Yuji Nakayama](https://github.com/yujinakayama) for their many
299
+ excellent code contributions as well as valuable feedback and ideas!
300
+
301
+ If you'd like to contribute to RuboCop, please take the time to go
302
+ through our short
303
+ [contribution guidelines](CONTRIBUTING.md).
304
+
305
+ Converting more of the Ruby Style Guide into RuboCop cops is our top
306
+ priority right now. Writing a new cop is a great way to dive into RuboCop!
307
+
308
+ Of course, bug reports and suggestions for improvements are always
309
+ welcome. GitHub pull requests are even better! :-)
310
+
311
+ ## Mailing List
312
+
313
+ If you're interested in everything regarding RuboCop's development,
314
+ consider joining its
315
+ [Google Group](https://groups.google.com/forum/?fromgroups#!forum/rubocop).
316
+
317
+ ## Changelog
318
+
319
+ RuboCop's changelog is available [here](CHANGELOG.md).
320
+
321
+ ## Copyright
322
+
323
+ Copyright (c) 2012-2013 Bozhidar Batsov. See [LICENSE.txt](LICENSE.txt) for
324
+ further details.