rubocop 0.13.1 → 0.14.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 (222) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +3 -0
  3. data/CHANGELOG.md +42 -0
  4. data/README.md +59 -54
  5. data/config/default.yml +124 -95
  6. data/config/disabled.yml +4 -0
  7. data/config/enabled.yml +286 -264
  8. data/lib/rubocop.rb +10 -3
  9. data/lib/rubocop/cli.rb +10 -171
  10. data/lib/rubocop/cop/cop.rb +14 -11
  11. data/lib/rubocop/cop/lint/debugger.rb +35 -0
  12. data/lib/rubocop/cop/lint/syntax.rb +34 -0
  13. data/lib/rubocop/cop/offence.rb +15 -23
  14. data/lib/rubocop/cop/style/align_array.rb +1 -10
  15. data/lib/rubocop/cop/style/align_hash.rb +14 -2
  16. data/lib/rubocop/cop/style/align_parameters.rb +1 -11
  17. data/lib/rubocop/cop/style/and_or.rb +13 -11
  18. data/lib/rubocop/cop/style/attr.rb +1 -1
  19. data/lib/rubocop/cop/style/autocorrect_alignment.rb +31 -6
  20. data/lib/rubocop/cop/style/blocks.rb +14 -6
  21. data/lib/rubocop/cop/style/character_literal.rb +1 -1
  22. data/lib/rubocop/cop/style/class_length.rb +38 -0
  23. data/lib/rubocop/cop/style/collection_methods.rb +1 -1
  24. data/lib/rubocop/cop/style/colon_method_call.rb +1 -1
  25. data/lib/rubocop/cop/style/configurable_naming.rb +47 -0
  26. data/lib/rubocop/cop/style/def_parentheses.rb +2 -2
  27. data/lib/rubocop/cop/style/empty_literal.rb +1 -1
  28. data/lib/rubocop/cop/style/even_odd.rb +7 -3
  29. data/lib/rubocop/cop/style/hash_methods.rb +1 -1
  30. data/lib/rubocop/cop/style/hash_syntax.rb +36 -7
  31. data/lib/rubocop/cop/style/lambda_call.rb +36 -11
  32. data/lib/rubocop/cop/style/method_call_parentheses.rb +1 -1
  33. data/lib/rubocop/cop/style/method_called_on_do_end_block.rb +41 -0
  34. data/lib/rubocop/cop/style/method_length.rb +2 -13
  35. data/lib/rubocop/cop/style/method_name.rb +42 -0
  36. data/lib/rubocop/cop/style/numeric_literals.rb +4 -0
  37. data/lib/rubocop/cop/style/perl_backrefs.rb +1 -1
  38. data/lib/rubocop/cop/style/raise_args.rb +60 -0
  39. data/lib/rubocop/cop/style/redundant_exception.rb +32 -0
  40. data/lib/rubocop/cop/style/redundant_return.rb +14 -5
  41. data/lib/rubocop/cop/style/redundant_self.rb +1 -1
  42. data/lib/rubocop/cop/style/semicolon.rb +13 -4
  43. data/lib/rubocop/cop/style/signal_exception.rb +63 -14
  44. data/lib/rubocop/cop/style/special_global_vars.rb +1 -1
  45. data/lib/rubocop/cop/style/string_help.rb +4 -1
  46. data/lib/rubocop/cop/style/string_literals.rb +34 -11
  47. data/lib/rubocop/cop/style/surrounding_space.rb +64 -17
  48. data/lib/rubocop/cop/style/tab.rb +1 -1
  49. data/lib/rubocop/cop/style/variable_name.rb +44 -0
  50. data/lib/rubocop/cop/style/when_then.rb +1 -1
  51. data/lib/rubocop/cop/style/while_until_do.rb +1 -1
  52. data/lib/rubocop/cop/team.rb +4 -7
  53. data/lib/rubocop/cop/util.rb +12 -0
  54. data/lib/rubocop/formatter/clang_style_formatter.rb +1 -1
  55. data/lib/rubocop/formatter/emacs_style_formatter.rb +5 -2
  56. data/lib/rubocop/formatter/json_formatter.rb +1 -0
  57. data/lib/rubocop/formatter/progress_formatter.rb +9 -13
  58. data/lib/rubocop/formatter/simple_text_formatter.rb +63 -15
  59. data/lib/rubocop/options.rb +184 -0
  60. data/lib/rubocop/processed_source.rb +4 -0
  61. data/lib/rubocop/version.rb +1 -1
  62. data/rubocop.gemspec +1 -1
  63. data/spec/rubocop/cli_spec.rb +870 -1001
  64. data/spec/rubocop/config_spec.rb +13 -13
  65. data/spec/rubocop/config_store_spec.rb +38 -37
  66. data/spec/rubocop/cop/commissioner_spec.rb +42 -46
  67. data/spec/rubocop/cop/cop_spec.rb +72 -77
  68. data/spec/rubocop/cop/corrector_spec.rb +51 -55
  69. data/spec/rubocop/cop/lint/assignment_in_condition_spec.rb +100 -106
  70. data/spec/rubocop/cop/lint/block_alignment_spec.rb +403 -409
  71. data/spec/rubocop/cop/lint/debugger_spec.rb +39 -0
  72. data/spec/rubocop/cop/lint/empty_ensure_spec.rb +19 -25
  73. data/spec/rubocop/cop/lint/end_alignment_spec.rb +50 -56
  74. data/spec/rubocop/cop/lint/end_in_method_spec.rb +20 -26
  75. data/spec/rubocop/cop/lint/ensure_return_spec.rb +30 -36
  76. data/spec/rubocop/cop/lint/eval_spec.rb +25 -31
  77. data/spec/rubocop/cop/lint/handle_exceptions_spec.rb +22 -28
  78. data/spec/rubocop/cop/lint/literal_in_condition_spec.rb +51 -57
  79. data/spec/rubocop/cop/lint/loop_spec.rb +17 -23
  80. data/spec/rubocop/cop/lint/parentheses_as_grouped_expression_spec.rb +51 -57
  81. data/spec/rubocop/cop/lint/rescue_exception_spec.rb +105 -111
  82. data/spec/rubocop/cop/lint/shadowing_outer_local_variable_spec.rb +230 -236
  83. data/spec/rubocop/cop/lint/syntax_spec.rb +33 -0
  84. data/spec/rubocop/cop/lint/unreachable_code_spec.rb +51 -57
  85. data/spec/rubocop/cop/lint/useless_assignment_spec.rb +1544 -1550
  86. data/spec/rubocop/cop/lint/useless_comparison_spec.rb +21 -27
  87. data/spec/rubocop/cop/lint/useless_setter_call_spec.rb +119 -125
  88. data/spec/rubocop/cop/lint/void_spec.rb +50 -56
  89. data/spec/rubocop/cop/offence_spec.rb +101 -131
  90. data/spec/rubocop/cop/rails/has_and_belongs_to_many_spec.rb +6 -12
  91. data/spec/rubocop/cop/rails/read_attribute_spec.rb +6 -12
  92. data/spec/rubocop/cop/rails/validation_spec.rb +13 -19
  93. data/spec/rubocop/cop/style/access_control_spec.rb +146 -152
  94. data/spec/rubocop/cop/style/alias_spec.rb +30 -36
  95. data/spec/rubocop/cop/style/align_array_spec.rb +57 -56
  96. data/spec/rubocop/cop/style/align_hash_spec.rb +256 -237
  97. data/spec/rubocop/cop/style/align_parameters_spec.rb +216 -202
  98. data/spec/rubocop/cop/style/and_or_spec.rb +51 -55
  99. data/spec/rubocop/cop/style/ascii_comments_spec.rb +14 -20
  100. data/spec/rubocop/cop/style/ascii_identifiers_spec.rb +26 -32
  101. data/spec/rubocop/cop/style/attr_spec.rb +11 -17
  102. data/spec/rubocop/cop/style/begin_block_spec.rb +6 -12
  103. data/spec/rubocop/cop/style/block_comments_spec.rb +13 -19
  104. data/spec/rubocop/cop/style/block_nesting_spec.rb +134 -140
  105. data/spec/rubocop/cop/style/blocks_spec.rb +81 -84
  106. data/spec/rubocop/cop/style/case_equality_spec.rb +5 -11
  107. data/spec/rubocop/cop/style/case_indentation_spec.rb +71 -77
  108. data/spec/rubocop/cop/style/character_literal_spec.rb +31 -37
  109. data/spec/rubocop/cop/style/class_and_module_camel_case_spec.rb +31 -37
  110. data/spec/rubocop/cop/style/class_length_spec.rb +65 -0
  111. data/spec/rubocop/cop/style/class_methods_spec.rb +35 -41
  112. data/spec/rubocop/cop/style/class_vars_spec.rb +11 -17
  113. data/spec/rubocop/cop/style/collection_methods_spec.rb +41 -47
  114. data/spec/rubocop/cop/style/colon_method_call_spec.rb +45 -51
  115. data/spec/rubocop/cop/style/comment_annotation_spec.rb +79 -85
  116. data/spec/rubocop/cop/style/constant_name_spec.rb +45 -51
  117. data/spec/rubocop/cop/style/def_with_parentheses_spec.rb +28 -34
  118. data/spec/rubocop/cop/style/def_without_parentheses_spec.rb +23 -29
  119. data/spec/rubocop/cop/style/documentation_spec.rb +60 -66
  120. data/spec/rubocop/cop/style/dot_position_spec.rb +50 -56
  121. data/spec/rubocop/cop/style/empty_line_between_defs_spec.rb +109 -110
  122. data/spec/rubocop/cop/style/empty_lines_spec.rb +28 -34
  123. data/spec/rubocop/cop/style/empty_literal_spec.rb +80 -86
  124. data/spec/rubocop/cop/style/encoding_spec.rb +50 -56
  125. data/spec/rubocop/cop/style/end_block_spec.rb +6 -12
  126. data/spec/rubocop/cop/style/end_of_line_spec.rb +13 -19
  127. data/spec/rubocop/cop/style/even_odd_spec.rb +69 -41
  128. data/spec/rubocop/cop/style/favor_join_spec.rb +21 -27
  129. data/spec/rubocop/cop/style/favor_modifier_spec.rb +180 -176
  130. data/spec/rubocop/cop/style/favor_sprintf_spec.rb +41 -47
  131. data/spec/rubocop/cop/style/favor_unless_over_negated_if_spec.rb +63 -69
  132. data/spec/rubocop/cop/style/favor_until_over_negated_while_spec.rb +32 -38
  133. data/spec/rubocop/cop/style/final_newline_spec.rb +16 -22
  134. data/spec/rubocop/cop/style/for_spec.rb +18 -24
  135. data/spec/rubocop/cop/style/global_vars_spec.rb +23 -29
  136. data/spec/rubocop/cop/style/hash_methods_spec.rb +39 -45
  137. data/spec/rubocop/cop/style/hash_syntax_spec.rb +93 -65
  138. data/spec/rubocop/cop/style/if_with_semicolon_spec.rb +11 -17
  139. data/spec/rubocop/cop/style/indentation_width_spec.rb +377 -383
  140. data/spec/rubocop/cop/style/lambda_call_spec.rb +40 -22
  141. data/spec/rubocop/cop/style/lambda_spec.rb +30 -34
  142. data/spec/rubocop/cop/style/leading_comment_space_spec.rb +44 -50
  143. data/spec/rubocop/cop/style/line_length_spec.rb +11 -17
  144. data/spec/rubocop/cop/style/method_call_parentheses_spec.rb +14 -20
  145. data/spec/rubocop/cop/style/method_called_on_do_end_block_spec.rb +60 -0
  146. data/spec/rubocop/cop/style/method_length_spec.rb +127 -133
  147. data/spec/rubocop/cop/style/method_name_spec.rb +103 -0
  148. data/spec/rubocop/cop/style/module_function_spec.rb +16 -22
  149. data/spec/rubocop/cop/style/multiline_block_chain_spec.rb +64 -70
  150. data/spec/rubocop/cop/style/multiline_if_then_spec.rb +74 -80
  151. data/spec/rubocop/cop/style/nil_comparison_spec.rb +20 -26
  152. data/spec/rubocop/cop/style/not_spec.rb +13 -19
  153. data/spec/rubocop/cop/style/numeric_literals_spec.rb +36 -35
  154. data/spec/rubocop/cop/style/one_line_conditional_spec.rb +5 -11
  155. data/spec/rubocop/cop/style/op_method_spec.rb +61 -67
  156. data/spec/rubocop/cop/style/parameter_lists_spec.rb +31 -37
  157. data/spec/rubocop/cop/style/parentheses_around_condition_spec.rb +62 -68
  158. data/spec/rubocop/cop/style/perl_backrefs_spec.rb +9 -15
  159. data/spec/rubocop/cop/style/proc_spec.rb +13 -19
  160. data/spec/rubocop/cop/style/raise_args_spec.rb +55 -0
  161. data/spec/rubocop/cop/style/reduce_arguments_spec.rb +49 -55
  162. data/spec/rubocop/cop/style/redundant_begin_spec.rb +47 -53
  163. data/spec/rubocop/cop/style/redundant_exception_spec.rb +27 -0
  164. data/spec/rubocop/cop/style/redundant_return_spec.rb +164 -72
  165. data/spec/rubocop/cop/style/redundant_self_spec.rb +109 -115
  166. data/spec/rubocop/cop/style/regexp_literal_spec.rb +57 -63
  167. data/spec/rubocop/cop/style/rescue_modifier_spec.rb +99 -105
  168. data/spec/rubocop/cop/style/semicolon_spec.rb +95 -90
  169. data/spec/rubocop/cop/style/signal_exception_spec.rb +248 -95
  170. data/spec/rubocop/cop/style/single_line_methods_spec.rb +45 -51
  171. data/spec/rubocop/cop/style/space_after_colon_spec.rb +14 -20
  172. data/spec/rubocop/cop/style/space_after_comma_spec.rb +16 -22
  173. data/spec/rubocop/cop/style/space_after_control_keyword_spec.rb +48 -54
  174. data/spec/rubocop/cop/style/space_after_method_name_spec.rb +49 -55
  175. data/spec/rubocop/cop/style/space_after_semicolon_spec.rb +10 -16
  176. data/spec/rubocop/cop/style/space_around_block_braces_spec.rb +118 -50
  177. data/spec/rubocop/cop/style/space_around_equals_in_default_parameter_spec.rb +18 -24
  178. data/spec/rubocop/cop/style/space_around_operators_spec.rb +204 -210
  179. data/spec/rubocop/cop/style/space_before_modifier_keyword_spec.rb +36 -42
  180. data/spec/rubocop/cop/style/space_inside_brackets_spec.rb +39 -45
  181. data/spec/rubocop/cop/style/space_inside_hash_literal_braces_spec.rb +62 -68
  182. data/spec/rubocop/cop/style/space_inside_parens_spec.rb +18 -24
  183. data/spec/rubocop/cop/style/special_global_vars_spec.rb +40 -46
  184. data/spec/rubocop/cop/style/string_literals_spec.rb +148 -70
  185. data/spec/rubocop/cop/style/symbol_array_spec.rb +28 -34
  186. data/spec/rubocop/cop/style/symbol_name_spec.rb +132 -138
  187. data/spec/rubocop/cop/style/tab_spec.rb +9 -15
  188. data/spec/rubocop/cop/style/ternary_operator_spec.rb +25 -31
  189. data/spec/rubocop/cop/style/trailing_blank_lines_spec.rb +10 -16
  190. data/spec/rubocop/cop/style/trailing_whitespace_spec.rb +14 -20
  191. data/spec/rubocop/cop/style/trivial_accessors_spec.rb +374 -380
  192. data/spec/rubocop/cop/style/unless_else_spec.rb +17 -23
  193. data/spec/rubocop/cop/style/variable_interpolation_spec.rb +36 -42
  194. data/spec/rubocop/cop/style/variable_name_spec.rb +83 -0
  195. data/spec/rubocop/cop/style/when_then_spec.rb +31 -37
  196. data/spec/rubocop/cop/style/while_until_do_spec.rb +47 -53
  197. data/spec/rubocop/cop/style/word_array_spec.rb +49 -55
  198. data/spec/rubocop/cop/team_spec.rb +125 -127
  199. data/spec/rubocop/cop/variable_inspector/assignment_spec.rb +176 -180
  200. data/spec/rubocop/cop/variable_inspector/locatable_spec.rb +580 -586
  201. data/spec/rubocop/cop/variable_inspector/scope_spec.rb +140 -146
  202. data/spec/rubocop/cop/variable_inspector/variable_spec.rb +52 -58
  203. data/spec/rubocop/cop/variable_inspector/variable_table_spec.rb +217 -223
  204. data/spec/rubocop/cop/variable_inspector_spec.rb +15 -19
  205. data/spec/rubocop/formatter/clang_style_formatter_spec.rb +35 -36
  206. data/spec/rubocop/formatter/disabled_config_formatter_spec.rb +2 -2
  207. data/spec/rubocop/formatter/emacs_style_formatter_spec.rb +24 -1
  208. data/spec/rubocop/formatter/file_list_formatter_spec.rb +1 -1
  209. data/spec/rubocop/formatter/formatter_set_spec.rb +3 -3
  210. data/spec/rubocop/formatter/json_formatter_spec.rb +7 -2
  211. data/spec/rubocop/formatter/offence_count_formatter_spec.rb +1 -1
  212. data/spec/rubocop/formatter/progress_formatter_spec.rb +1 -1
  213. data/spec/rubocop/formatter/simple_text_formatter_spec.rb +55 -6
  214. data/spec/rubocop/options_spec.rb +233 -0
  215. data/spec/rubocop/processed_source_spec.rb +85 -42
  216. data/spec/rubocop/source_parser_spec.rb +108 -110
  217. data/spec/rubocop/target_finder_spec.rb +125 -127
  218. data/spec/rubocop/token_spec.rb +15 -17
  219. metadata +32 -8
  220. data/lib/rubocop/backports/bsearch.rb +0 -39
  221. data/lib/rubocop/cop/style/method_and_variable_snake_case.rb +0 -77
  222. data/spec/rubocop/cop/style/method_and_variable_snake_case_spec.rb +0 -102
@@ -6,8 +6,6 @@ require 'parser/current'
6
6
  require 'ast/sexp'
7
7
  require 'powerpack'
8
8
 
9
- require 'rubocop/backports/bsearch'
10
-
11
9
  require 'rubocop/cop/util'
12
10
  require 'rubocop/cop/offence'
13
11
  require 'rubocop/cop/cop'
@@ -25,6 +23,7 @@ require 'rubocop/cop/variable_inspector/variable_table'
25
23
 
26
24
  require 'rubocop/cop/lint/assignment_in_condition'
27
25
  require 'rubocop/cop/lint/block_alignment'
26
+ require 'rubocop/cop/lint/debugger'
28
27
  require 'rubocop/cop/lint/empty_ensure'
29
28
  require 'rubocop/cop/lint/end_alignment'
30
29
  require 'rubocop/cop/lint/end_in_method'
@@ -36,6 +35,7 @@ require 'rubocop/cop/lint/loop'
36
35
  require 'rubocop/cop/lint/parentheses_as_grouped_expression'
37
36
  require 'rubocop/cop/lint/rescue_exception'
38
37
  require 'rubocop/cop/lint/shadowing_outer_local_variable'
38
+ require 'rubocop/cop/lint/syntax'
39
39
  require 'rubocop/cop/lint/unreachable_code'
40
40
  require 'rubocop/cop/lint/useless_assignment'
41
41
  require 'rubocop/cop/lint/useless_comparison'
@@ -43,6 +43,7 @@ require 'rubocop/cop/lint/useless_setter_call'
43
43
  require 'rubocop/cop/lint/void'
44
44
 
45
45
  require 'rubocop/cop/style/autocorrect_alignment'
46
+ require 'rubocop/cop/style/configurable_naming'
46
47
  require 'rubocop/cop/style/string_help'
47
48
  require 'rubocop/cop/style/access_control'
48
49
  require 'rubocop/cop/style/alias'
@@ -61,6 +62,7 @@ require 'rubocop/cop/style/case_equality'
61
62
  require 'rubocop/cop/style/case_indentation'
62
63
  require 'rubocop/cop/style/character_literal'
63
64
  require 'rubocop/cop/style/class_and_module_camel_case'
65
+ require 'rubocop/cop/style/class_length'
64
66
  require 'rubocop/cop/style/class_methods'
65
67
  require 'rubocop/cop/style/class_vars'
66
68
  require 'rubocop/cop/style/collection_methods'
@@ -93,9 +95,10 @@ require 'rubocop/cop/style/lambda'
93
95
  require 'rubocop/cop/style/lambda_call'
94
96
  require 'rubocop/cop/style/leading_comment_space'
95
97
  require 'rubocop/cop/style/line_length'
96
- require 'rubocop/cop/style/method_and_variable_snake_case'
97
98
  require 'rubocop/cop/style/method_call_parentheses'
99
+ require 'rubocop/cop/style/method_called_on_do_end_block'
98
100
  require 'rubocop/cop/style/method_length'
101
+ require 'rubocop/cop/style/method_name'
99
102
  require 'rubocop/cop/style/module_function'
100
103
  require 'rubocop/cop/style/multiline_block_chain'
101
104
  require 'rubocop/cop/style/multiline_if_then'
@@ -108,8 +111,10 @@ require 'rubocop/cop/style/parameter_lists'
108
111
  require 'rubocop/cop/style/parentheses_around_condition'
109
112
  require 'rubocop/cop/style/perl_backrefs'
110
113
  require 'rubocop/cop/style/proc'
114
+ require 'rubocop/cop/style/raise_args'
111
115
  require 'rubocop/cop/style/reduce_arguments'
112
116
  require 'rubocop/cop/style/redundant_begin'
117
+ require 'rubocop/cop/style/redundant_exception'
113
118
  require 'rubocop/cop/style/redundant_return'
114
119
  require 'rubocop/cop/style/redundant_self'
115
120
  require 'rubocop/cop/style/regexp_literal'
@@ -133,6 +138,7 @@ require 'rubocop/cop/style/trailing_whitespace'
133
138
  require 'rubocop/cop/style/trivial_accessors'
134
139
  require 'rubocop/cop/style/unless_else'
135
140
  require 'rubocop/cop/style/variable_interpolation'
141
+ require 'rubocop/cop/style/variable_name'
136
142
  require 'rubocop/cop/style/when_then'
137
143
  require 'rubocop/cop/style/while_until_do'
138
144
  require 'rubocop/cop/style/word_array'
@@ -159,4 +165,5 @@ require 'rubocop/token'
159
165
  require 'rubocop/processed_source'
160
166
  require 'rubocop/source_parser'
161
167
  require 'rubocop/cli'
168
+ require 'rubocop/options'
162
169
  require 'rubocop/version'
@@ -1,17 +1,13 @@
1
1
  # encoding: utf-8
2
- require 'pathname'
3
- require 'optparse'
4
2
 
5
3
  module Rubocop
6
4
  # The CLI is a class responsible of handling all the command line interface
7
5
  # logic.
8
6
  class CLI
9
- DEFAULT_FORMATTER = 'progress'
10
-
11
7
  # If set true while running,
12
8
  # RuboCop will abort processing and exit gracefully.
13
9
  attr_accessor :wants_to_quit
14
- attr_accessor :options
10
+ attr_reader :options
15
11
 
16
12
  alias_method :wants_to_quit?, :wants_to_quit
17
13
 
@@ -28,11 +24,10 @@ module Rubocop
28
24
  def run(args = ARGV)
29
25
  trap_interrupt
30
26
 
31
- parse_options(args)
27
+ @options, target_files = Options.new(@config_store).parse(args)
32
28
 
33
29
  Config.debug = @options[:debug]
34
30
 
35
- target_files = target_finder.find(args)
36
31
  target_files.each(&:freeze).freeze
37
32
  inspected_files = []
38
33
  any_failed = false
@@ -63,15 +58,16 @@ module Rubocop
63
58
  return 1
64
59
  end
65
60
 
66
- def mobilized_cop_classes
67
- @mobilized_cop_classes ||= begin
61
+ def mobilized_cop_classes(config)
62
+ @mobilized_cop_classes ||= {}
63
+ @mobilized_cop_classes[config.object_id] ||= begin
68
64
  cop_classes = Cop::Cop.all
69
65
 
70
66
  if @options[:only]
71
67
  cop_classes.select! { |c| c.cop_name == @options[:only] }
72
68
  else
73
69
  # filter out Rails cops unless requested
74
- cop_classes.reject!(&:rails?) unless @options[:rails]
70
+ cop_classes.reject!(&:rails?) unless run_rails_cops?(config)
75
71
 
76
72
  # filter out style cops when --lint is passed
77
73
  cop_classes.select!(&:lint?) if @options[:lint]
@@ -83,161 +79,12 @@ module Rubocop
83
79
 
84
80
  def inspect_file(file)
85
81
  config = @config_store.for(file)
86
- team = Cop::Team.new(mobilized_cop_classes, config, @options)
82
+ team = Cop::Team.new(mobilized_cop_classes(config), config, @options)
87
83
  offences = team.inspect_file(file)
88
84
  @errors.concat(team.errors)
89
85
  offences
90
86
  end
91
87
 
92
- def validate_only_option
93
- if Cop::Cop.all.none? { |c| c.cop_name == @options[:only] }
94
- fail ArgumentError, "Unrecognized cop name: #{@options[:only]}."
95
- end
96
- end
97
-
98
- def validate_auto_gen_config_option(args)
99
- if args.any?
100
- fail ArgumentError,
101
- '--auto-gen-config can not be combined with any other arguments.'
102
- end
103
-
104
- target_finder.find(args).each do |file|
105
- config = @config_store.for(file)
106
- if @options[:auto_gen_config] && config.contains_auto_generated_config
107
- fail "Remove #{Config::AUTO_GENERATED_FILE} from the current " +
108
- 'configuration before generating it again.'
109
- end
110
- end
111
- end
112
-
113
- def print_available_cops
114
- cops = Cop::Cop.all
115
- puts "Available cops (#{cops.length}) + config for #{Dir.pwd.to_s}: "
116
- dirconf = @config_store.for(Dir.pwd.to_s)
117
- cops.types.sort!.each do |type|
118
- coptypes = cops.with_type(type).sort_by!(&:cop_name)
119
- puts "Type '#{type.to_s.capitalize}' (#{coptypes.size}):"
120
- coptypes.each do |cop|
121
- puts " - #{cop.cop_name}"
122
- cnf = dirconf.for_cop(cop).dup
123
- print_conf_option('Description',
124
- cnf.delete('Description') { 'None' })
125
- cnf.each { |k, v| print_conf_option(k, v) }
126
- end
127
- end
128
- end
129
-
130
- def print_conf_option(option, value)
131
- puts " - #{option}: #{value}"
132
- end
133
-
134
- # rubocop:disable MethodLength
135
- def parse_options(args)
136
- ignore_dropped_options(args)
137
- convert_deprecated_options(args)
138
-
139
- OptionParser.new do |opts|
140
- opts.banner = 'Usage: rubocop [options] [file1, file2, ...]'
141
-
142
- opts.on('-d', '--debug', 'Display debug info.') do |d|
143
- @options[:debug] = d
144
- end
145
- opts.on('-c', '--config FILE', 'Specify configuration file.') do |f|
146
- @options[:config] = f
147
- @config_store.set_options_config(@options[:config])
148
- end
149
- opts.on('--only COP', 'Run just one cop.') do |s|
150
- @options[:only] = s
151
- validate_only_option
152
- end
153
- opts.on('--auto-gen-config',
154
- 'Generate a configuration file acting as a',
155
- 'TODO list.') do
156
- @options[:auto_gen_config] = true
157
- @options[:formatters] = [
158
- [DEFAULT_FORMATTER],
159
- [Formatter::DisabledConfigFormatter, Config::AUTO_GENERATED_FILE]
160
- ]
161
- validate_auto_gen_config_option(args)
162
- end
163
- opts.on('--show-cops',
164
- 'Shows cops and their config for the',
165
- 'current directory.') do
166
- print_available_cops
167
- exit(0)
168
- end
169
- opts.on('-f', '--format FORMATTER',
170
- 'Choose an output formatter. This option',
171
- 'can be specified multiple times to enable',
172
- 'multiple formatters at the same time.',
173
- ' [p]rogress (default)',
174
- ' [s]imple',
175
- ' [c]lang',
176
- ' [e]macs',
177
- ' [j]son',
178
- ' [f]iles',
179
- ' [o]ffences',
180
- ' custom formatter class name') do |key|
181
- @options[:formatters] ||= []
182
- @options[:formatters] << [key]
183
- end
184
- opts.on('-o', '--out FILE',
185
- 'Write output to a file instead of STDOUT.',
186
- 'This option applies to the previously',
187
- 'specified --format, or the default format',
188
- 'if no format is specified.') do |path|
189
- @options[:formatters] ||= [[DEFAULT_FORMATTER]]
190
- @options[:formatters].last << path
191
- end
192
- opts.on('-r', '--require FILE', 'Require Ruby file.') do |f|
193
- require f
194
- end
195
- opts.on('-R', '--rails', 'Run extra Rails cops.') do |r|
196
- @options[:rails] = r
197
- end
198
- opts.on('-l', '--lint', 'Run only lint cops.') do |l|
199
- @options[:lint] = l
200
- end
201
- opts.on('-a', '--auto-correct', 'Auto-correct offences.') do |a|
202
- @options[:autocorrect] = a
203
- end
204
- opts.on('-n', '--no-color', 'Disable color output.') do |s|
205
- Sickill::Rainbow.enabled = false
206
- end
207
- opts.on('-v', '--version', 'Display version.') do
208
- puts Rubocop::Version.version(false)
209
- exit(0)
210
- end
211
- opts.on('-V', '--verbose-version', 'Display verbose version.') do
212
- puts Rubocop::Version.version(true)
213
- exit(0)
214
- end
215
- end.parse!(args)
216
- end
217
- # rubocop:enable MethodLength
218
-
219
- def ignore_dropped_options(args)
220
- # Currently we don't make -s/--silent option raise error
221
- # since those are mostly used by external tools.
222
- rejected = args.reject! { |a| %w(-s --silent).include?(a) }
223
- if rejected
224
- warn '-s/--silent options is dropped. ' +
225
- '`emacs` and `files` formatters no longer display summary.'
226
- end
227
- end
228
-
229
- def convert_deprecated_options(args)
230
- args.map! do |arg|
231
- case arg
232
- when '-e', '--emacs'
233
- deprecate("#{arg} option", '--format emacs', '1.0.0')
234
- %w(--format emacs)
235
- else
236
- arg
237
- end
238
- end.flatten!
239
- end
240
-
241
88
  def trap_interrupt
242
89
  Signal.trap('INT') do
243
90
  exit!(1) if wants_to_quit?
@@ -260,14 +107,14 @@ module Rubocop
260
107
 
261
108
  private
262
109
 
263
- def target_finder
264
- @target_finder ||= TargetFinder.new(@config_store, @options[:debug])
110
+ def run_rails_cops?(config)
111
+ @options[:rails] || config['AllCops']['RunRailsCops']
265
112
  end
266
113
 
267
114
  def formatter_set
268
115
  @formatter_set ||= begin
269
116
  set = Formatter::FormatterSet.new
270
- pairs = @options[:formatters] || [[DEFAULT_FORMATTER]]
117
+ pairs = @options[:formatters] || [[Options::DEFAULT_FORMATTER]]
271
118
  pairs.each do |formatter_key, output_path|
272
119
  set.add_formatter(formatter_key, output_path)
273
120
  end
@@ -277,13 +124,5 @@ module Rubocop
277
124
  exit(1)
278
125
  end
279
126
  end
280
-
281
- def deprecate(subject, alternative = nil, version = nil)
282
- message = "#{subject} is deprecated"
283
- message << " and will be removed in RuboCop #{version}" if version
284
- message << '.'
285
- message << " Please use #{alternative} instead." if alternative
286
- warn message
287
- end
288
127
  end
289
128
  end
@@ -93,29 +93,32 @@ module Rubocop
93
93
  end
94
94
 
95
95
  def autocorrect?
96
- @options[:autocorrect]
96
+ @options[:autocorrect] && support_autocorrect?
97
97
  end
98
98
 
99
99
  def debug?
100
100
  @options[:debug]
101
101
  end
102
102
 
103
- def autocorrect_action(node)
104
- end
105
-
106
103
  def message(node = nil)
107
104
  self.class::MSG
108
105
  end
109
106
 
107
+ def support_autocorrect?
108
+ respond_to?(:autocorrect, true)
109
+ end
110
+
110
111
  def add_offence(severity, node, loc, message = nil)
111
112
  location = loc.is_a?(Symbol) ? node.loc.send(loc) : loc
112
113
 
113
- unless disabled_line?(location.line)
114
- message = message ? message : message(node)
115
- message = debug? ? "#{name}: #{message}" : message
116
- @offences << Offence.new(severity, location, message, name)
117
- autocorrect_action(node) if autocorrect?
118
- end
114
+ return if disabled_line?(location.line)
115
+
116
+ message = message ? message : message(node)
117
+ message = debug? ? "#{name}: #{message}" : message
118
+ @offences <<
119
+ Offence.new(severity, location, message, name, autocorrect?)
120
+
121
+ autocorrect(node) if autocorrect?
119
122
  end
120
123
 
121
124
  def convention(node, location, message = nil)
@@ -158,7 +161,7 @@ module Rubocop
158
161
  end
159
162
 
160
163
  def ignored_node?(node)
161
- @ignored_nodes.include?(node)
164
+ @ignored_nodes.any? { |n| n.eql?(node) } # Same object found in array?
162
165
  end
163
166
 
164
167
  def on_node(syms, sexp, excludes = [])
@@ -0,0 +1,35 @@
1
+ # encoding: utf-8
2
+
3
+ module Rubocop
4
+ module Cop
5
+ module Lint
6
+ # This cop checks for calls to debugger or pry.
7
+ class Debugger < Cop
8
+ MSG = 'Remove calls to debugger.'
9
+
10
+ # debugger call node
11
+ #
12
+ # (send nil :debugger)
13
+ DEBUGGER_NODE = s(:send, nil, :debugger)
14
+
15
+ # binding.pry node
16
+ #
17
+ # (send
18
+ # (send nil :binding) :pry)
19
+ PRY_NODE = s(:send, s(:send, nil, :binding), :pry)
20
+
21
+ # binding.remote_pry node
22
+ #
23
+ # (send
24
+ # (send nil :binding) :remote_pry)
25
+ REMOTE_PRY_NODE = s(:send, s(:send, nil, :binding), :remote_pry)
26
+
27
+ DEBUGGER_NODES = [DEBUGGER_NODE, PRY_NODE, REMOTE_PRY_NODE]
28
+
29
+ def on_send(node)
30
+ warning(node, :selector) if DEBUGGER_NODES.include?(node)
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,34 @@
1
+ # encoding: utf-8
2
+
3
+ module Rubocop
4
+ module Cop
5
+ module Lint
6
+ # This cop actually inspects nothing, just repacks Parser's diagnostics
7
+ # into RuboCop's offences.
8
+ # The purpose of this cop is to support disabling Syntax offences with
9
+ # config or inline comments by conforming to the cop framework.
10
+ class Syntax < Cop
11
+ def self.offences_from_diagnostics(diagnostics)
12
+ diagnostics.map do |diagnostic|
13
+ offence_from_diagnostic(diagnostic)
14
+ end
15
+ end
16
+
17
+ def self.offence_from_diagnostic(diagnostic)
18
+ Offence.new(
19
+ diagnostic.level,
20
+ diagnostic.location,
21
+ diagnostic.message,
22
+ cop_name
23
+ )
24
+ end
25
+
26
+ def investigate(processed_source)
27
+ processed_source.diagnostics.each do |d|
28
+ add_offence(d.level, nil, d.location, d.message)
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
@@ -9,15 +9,6 @@ module Rubocop
9
9
  # @api private
10
10
  SEVERITIES = [:refactor, :convention, :warning, :error, :fatal]
11
11
 
12
- def self.from_diagnostic(diagnostic)
13
- new(
14
- diagnostic.level,
15
- diagnostic.location,
16
- diagnostic.message,
17
- 'Syntax'
18
- )
19
- end
20
-
21
12
  # @api public
22
13
  #
23
14
  # @!attribute [r] severity
@@ -61,6 +52,15 @@ module Rubocop
61
52
  # 'LineLength'
62
53
  attr_reader :cop_name
63
54
 
55
+ # @api public
56
+ #
57
+ # @!attribute [r] corrected
58
+ #
59
+ # @return [Boolean]
60
+ # whether this offence is automatically corrected.
61
+ attr_reader :corrected
62
+ alias_method :corrected?, :corrected
63
+
64
64
  # @api private
65
65
  attr_reader :line
66
66
 
@@ -68,7 +68,7 @@ module Rubocop
68
68
  attr_reader :column
69
69
 
70
70
  # @api private
71
- def initialize(severity, location, message, cop_name)
71
+ def initialize(severity, location, message, cop_name, corrected = false)
72
72
  unless SEVERITIES.include?(severity)
73
73
  fail ArgumentError, "Unknown severity: #{severity}"
74
74
  end
@@ -78,30 +78,22 @@ module Rubocop
78
78
  @column = location.column.freeze
79
79
  @message = message.freeze
80
80
  @cop_name = cop_name.freeze
81
+ @corrected = corrected.freeze
81
82
  freeze
82
83
  end
83
84
 
84
85
  # @api private
86
+ # This is just for debugging purpose.
85
87
  def to_s
86
- sprintf("#{encode_severity}:%3d:%3d: %s",
87
- line, real_column, message)
88
+ sprintf('%s:%3d:%3d: %s',
89
+ severity_code, line, real_column, message)
88
90
  end
89
91
 
90
92
  # @api private
91
- def encode_severity
93
+ def severity_code
92
94
  @severity.to_s[0].upcase
93
95
  end
94
96
 
95
- # @api private
96
- def clang_severity
97
- case @severity
98
- when :fatal then 'F'.color(:red)
99
- when :error then 'E'.color(:red)
100
- when :warning then 'W'.color(:magenta)
101
- when :convention then 'C'.color(:yellow)
102
- end
103
- end
104
-
105
97
  # @api private
106
98
  def severity_level
107
99
  SEVERITIES.index(severity) + 1