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.
- checksums.yaml +4 -4
- data/.rubocop.yml +3 -0
- data/CHANGELOG.md +42 -0
- data/README.md +59 -54
- data/config/default.yml +124 -95
- data/config/disabled.yml +4 -0
- data/config/enabled.yml +286 -264
- data/lib/rubocop.rb +10 -3
- data/lib/rubocop/cli.rb +10 -171
- data/lib/rubocop/cop/cop.rb +14 -11
- data/lib/rubocop/cop/lint/debugger.rb +35 -0
- data/lib/rubocop/cop/lint/syntax.rb +34 -0
- data/lib/rubocop/cop/offence.rb +15 -23
- data/lib/rubocop/cop/style/align_array.rb +1 -10
- data/lib/rubocop/cop/style/align_hash.rb +14 -2
- data/lib/rubocop/cop/style/align_parameters.rb +1 -11
- data/lib/rubocop/cop/style/and_or.rb +13 -11
- data/lib/rubocop/cop/style/attr.rb +1 -1
- data/lib/rubocop/cop/style/autocorrect_alignment.rb +31 -6
- data/lib/rubocop/cop/style/blocks.rb +14 -6
- data/lib/rubocop/cop/style/character_literal.rb +1 -1
- data/lib/rubocop/cop/style/class_length.rb +38 -0
- data/lib/rubocop/cop/style/collection_methods.rb +1 -1
- data/lib/rubocop/cop/style/colon_method_call.rb +1 -1
- data/lib/rubocop/cop/style/configurable_naming.rb +47 -0
- data/lib/rubocop/cop/style/def_parentheses.rb +2 -2
- data/lib/rubocop/cop/style/empty_literal.rb +1 -1
- data/lib/rubocop/cop/style/even_odd.rb +7 -3
- data/lib/rubocop/cop/style/hash_methods.rb +1 -1
- data/lib/rubocop/cop/style/hash_syntax.rb +36 -7
- data/lib/rubocop/cop/style/lambda_call.rb +36 -11
- data/lib/rubocop/cop/style/method_call_parentheses.rb +1 -1
- data/lib/rubocop/cop/style/method_called_on_do_end_block.rb +41 -0
- data/lib/rubocop/cop/style/method_length.rb +2 -13
- data/lib/rubocop/cop/style/method_name.rb +42 -0
- data/lib/rubocop/cop/style/numeric_literals.rb +4 -0
- data/lib/rubocop/cop/style/perl_backrefs.rb +1 -1
- data/lib/rubocop/cop/style/raise_args.rb +60 -0
- data/lib/rubocop/cop/style/redundant_exception.rb +32 -0
- data/lib/rubocop/cop/style/redundant_return.rb +14 -5
- data/lib/rubocop/cop/style/redundant_self.rb +1 -1
- data/lib/rubocop/cop/style/semicolon.rb +13 -4
- data/lib/rubocop/cop/style/signal_exception.rb +63 -14
- data/lib/rubocop/cop/style/special_global_vars.rb +1 -1
- data/lib/rubocop/cop/style/string_help.rb +4 -1
- data/lib/rubocop/cop/style/string_literals.rb +34 -11
- data/lib/rubocop/cop/style/surrounding_space.rb +64 -17
- data/lib/rubocop/cop/style/tab.rb +1 -1
- data/lib/rubocop/cop/style/variable_name.rb +44 -0
- data/lib/rubocop/cop/style/when_then.rb +1 -1
- data/lib/rubocop/cop/style/while_until_do.rb +1 -1
- data/lib/rubocop/cop/team.rb +4 -7
- data/lib/rubocop/cop/util.rb +12 -0
- data/lib/rubocop/formatter/clang_style_formatter.rb +1 -1
- data/lib/rubocop/formatter/emacs_style_formatter.rb +5 -2
- data/lib/rubocop/formatter/json_formatter.rb +1 -0
- data/lib/rubocop/formatter/progress_formatter.rb +9 -13
- data/lib/rubocop/formatter/simple_text_formatter.rb +63 -15
- data/lib/rubocop/options.rb +184 -0
- data/lib/rubocop/processed_source.rb +4 -0
- data/lib/rubocop/version.rb +1 -1
- data/rubocop.gemspec +1 -1
- data/spec/rubocop/cli_spec.rb +870 -1001
- data/spec/rubocop/config_spec.rb +13 -13
- data/spec/rubocop/config_store_spec.rb +38 -37
- data/spec/rubocop/cop/commissioner_spec.rb +42 -46
- data/spec/rubocop/cop/cop_spec.rb +72 -77
- data/spec/rubocop/cop/corrector_spec.rb +51 -55
- data/spec/rubocop/cop/lint/assignment_in_condition_spec.rb +100 -106
- data/spec/rubocop/cop/lint/block_alignment_spec.rb +403 -409
- data/spec/rubocop/cop/lint/debugger_spec.rb +39 -0
- data/spec/rubocop/cop/lint/empty_ensure_spec.rb +19 -25
- data/spec/rubocop/cop/lint/end_alignment_spec.rb +50 -56
- data/spec/rubocop/cop/lint/end_in_method_spec.rb +20 -26
- data/spec/rubocop/cop/lint/ensure_return_spec.rb +30 -36
- data/spec/rubocop/cop/lint/eval_spec.rb +25 -31
- data/spec/rubocop/cop/lint/handle_exceptions_spec.rb +22 -28
- data/spec/rubocop/cop/lint/literal_in_condition_spec.rb +51 -57
- data/spec/rubocop/cop/lint/loop_spec.rb +17 -23
- data/spec/rubocop/cop/lint/parentheses_as_grouped_expression_spec.rb +51 -57
- data/spec/rubocop/cop/lint/rescue_exception_spec.rb +105 -111
- data/spec/rubocop/cop/lint/shadowing_outer_local_variable_spec.rb +230 -236
- data/spec/rubocop/cop/lint/syntax_spec.rb +33 -0
- data/spec/rubocop/cop/lint/unreachable_code_spec.rb +51 -57
- data/spec/rubocop/cop/lint/useless_assignment_spec.rb +1544 -1550
- data/spec/rubocop/cop/lint/useless_comparison_spec.rb +21 -27
- data/spec/rubocop/cop/lint/useless_setter_call_spec.rb +119 -125
- data/spec/rubocop/cop/lint/void_spec.rb +50 -56
- data/spec/rubocop/cop/offence_spec.rb +101 -131
- data/spec/rubocop/cop/rails/has_and_belongs_to_many_spec.rb +6 -12
- data/spec/rubocop/cop/rails/read_attribute_spec.rb +6 -12
- data/spec/rubocop/cop/rails/validation_spec.rb +13 -19
- data/spec/rubocop/cop/style/access_control_spec.rb +146 -152
- data/spec/rubocop/cop/style/alias_spec.rb +30 -36
- data/spec/rubocop/cop/style/align_array_spec.rb +57 -56
- data/spec/rubocop/cop/style/align_hash_spec.rb +256 -237
- data/spec/rubocop/cop/style/align_parameters_spec.rb +216 -202
- data/spec/rubocop/cop/style/and_or_spec.rb +51 -55
- data/spec/rubocop/cop/style/ascii_comments_spec.rb +14 -20
- data/spec/rubocop/cop/style/ascii_identifiers_spec.rb +26 -32
- data/spec/rubocop/cop/style/attr_spec.rb +11 -17
- data/spec/rubocop/cop/style/begin_block_spec.rb +6 -12
- data/spec/rubocop/cop/style/block_comments_spec.rb +13 -19
- data/spec/rubocop/cop/style/block_nesting_spec.rb +134 -140
- data/spec/rubocop/cop/style/blocks_spec.rb +81 -84
- data/spec/rubocop/cop/style/case_equality_spec.rb +5 -11
- data/spec/rubocop/cop/style/case_indentation_spec.rb +71 -77
- data/spec/rubocop/cop/style/character_literal_spec.rb +31 -37
- data/spec/rubocop/cop/style/class_and_module_camel_case_spec.rb +31 -37
- data/spec/rubocop/cop/style/class_length_spec.rb +65 -0
- data/spec/rubocop/cop/style/class_methods_spec.rb +35 -41
- data/spec/rubocop/cop/style/class_vars_spec.rb +11 -17
- data/spec/rubocop/cop/style/collection_methods_spec.rb +41 -47
- data/spec/rubocop/cop/style/colon_method_call_spec.rb +45 -51
- data/spec/rubocop/cop/style/comment_annotation_spec.rb +79 -85
- data/spec/rubocop/cop/style/constant_name_spec.rb +45 -51
- data/spec/rubocop/cop/style/def_with_parentheses_spec.rb +28 -34
- data/spec/rubocop/cop/style/def_without_parentheses_spec.rb +23 -29
- data/spec/rubocop/cop/style/documentation_spec.rb +60 -66
- data/spec/rubocop/cop/style/dot_position_spec.rb +50 -56
- data/spec/rubocop/cop/style/empty_line_between_defs_spec.rb +109 -110
- data/spec/rubocop/cop/style/empty_lines_spec.rb +28 -34
- data/spec/rubocop/cop/style/empty_literal_spec.rb +80 -86
- data/spec/rubocop/cop/style/encoding_spec.rb +50 -56
- data/spec/rubocop/cop/style/end_block_spec.rb +6 -12
- data/spec/rubocop/cop/style/end_of_line_spec.rb +13 -19
- data/spec/rubocop/cop/style/even_odd_spec.rb +69 -41
- data/spec/rubocop/cop/style/favor_join_spec.rb +21 -27
- data/spec/rubocop/cop/style/favor_modifier_spec.rb +180 -176
- data/spec/rubocop/cop/style/favor_sprintf_spec.rb +41 -47
- data/spec/rubocop/cop/style/favor_unless_over_negated_if_spec.rb +63 -69
- data/spec/rubocop/cop/style/favor_until_over_negated_while_spec.rb +32 -38
- data/spec/rubocop/cop/style/final_newline_spec.rb +16 -22
- data/spec/rubocop/cop/style/for_spec.rb +18 -24
- data/spec/rubocop/cop/style/global_vars_spec.rb +23 -29
- data/spec/rubocop/cop/style/hash_methods_spec.rb +39 -45
- data/spec/rubocop/cop/style/hash_syntax_spec.rb +93 -65
- data/spec/rubocop/cop/style/if_with_semicolon_spec.rb +11 -17
- data/spec/rubocop/cop/style/indentation_width_spec.rb +377 -383
- data/spec/rubocop/cop/style/lambda_call_spec.rb +40 -22
- data/spec/rubocop/cop/style/lambda_spec.rb +30 -34
- data/spec/rubocop/cop/style/leading_comment_space_spec.rb +44 -50
- data/spec/rubocop/cop/style/line_length_spec.rb +11 -17
- data/spec/rubocop/cop/style/method_call_parentheses_spec.rb +14 -20
- data/spec/rubocop/cop/style/method_called_on_do_end_block_spec.rb +60 -0
- data/spec/rubocop/cop/style/method_length_spec.rb +127 -133
- data/spec/rubocop/cop/style/method_name_spec.rb +103 -0
- data/spec/rubocop/cop/style/module_function_spec.rb +16 -22
- data/spec/rubocop/cop/style/multiline_block_chain_spec.rb +64 -70
- data/spec/rubocop/cop/style/multiline_if_then_spec.rb +74 -80
- data/spec/rubocop/cop/style/nil_comparison_spec.rb +20 -26
- data/spec/rubocop/cop/style/not_spec.rb +13 -19
- data/spec/rubocop/cop/style/numeric_literals_spec.rb +36 -35
- data/spec/rubocop/cop/style/one_line_conditional_spec.rb +5 -11
- data/spec/rubocop/cop/style/op_method_spec.rb +61 -67
- data/spec/rubocop/cop/style/parameter_lists_spec.rb +31 -37
- data/spec/rubocop/cop/style/parentheses_around_condition_spec.rb +62 -68
- data/spec/rubocop/cop/style/perl_backrefs_spec.rb +9 -15
- data/spec/rubocop/cop/style/proc_spec.rb +13 -19
- data/spec/rubocop/cop/style/raise_args_spec.rb +55 -0
- data/spec/rubocop/cop/style/reduce_arguments_spec.rb +49 -55
- data/spec/rubocop/cop/style/redundant_begin_spec.rb +47 -53
- data/spec/rubocop/cop/style/redundant_exception_spec.rb +27 -0
- data/spec/rubocop/cop/style/redundant_return_spec.rb +164 -72
- data/spec/rubocop/cop/style/redundant_self_spec.rb +109 -115
- data/spec/rubocop/cop/style/regexp_literal_spec.rb +57 -63
- data/spec/rubocop/cop/style/rescue_modifier_spec.rb +99 -105
- data/spec/rubocop/cop/style/semicolon_spec.rb +95 -90
- data/spec/rubocop/cop/style/signal_exception_spec.rb +248 -95
- data/spec/rubocop/cop/style/single_line_methods_spec.rb +45 -51
- data/spec/rubocop/cop/style/space_after_colon_spec.rb +14 -20
- data/spec/rubocop/cop/style/space_after_comma_spec.rb +16 -22
- data/spec/rubocop/cop/style/space_after_control_keyword_spec.rb +48 -54
- data/spec/rubocop/cop/style/space_after_method_name_spec.rb +49 -55
- data/spec/rubocop/cop/style/space_after_semicolon_spec.rb +10 -16
- data/spec/rubocop/cop/style/space_around_block_braces_spec.rb +118 -50
- data/spec/rubocop/cop/style/space_around_equals_in_default_parameter_spec.rb +18 -24
- data/spec/rubocop/cop/style/space_around_operators_spec.rb +204 -210
- data/spec/rubocop/cop/style/space_before_modifier_keyword_spec.rb +36 -42
- data/spec/rubocop/cop/style/space_inside_brackets_spec.rb +39 -45
- data/spec/rubocop/cop/style/space_inside_hash_literal_braces_spec.rb +62 -68
- data/spec/rubocop/cop/style/space_inside_parens_spec.rb +18 -24
- data/spec/rubocop/cop/style/special_global_vars_spec.rb +40 -46
- data/spec/rubocop/cop/style/string_literals_spec.rb +148 -70
- data/spec/rubocop/cop/style/symbol_array_spec.rb +28 -34
- data/spec/rubocop/cop/style/symbol_name_spec.rb +132 -138
- data/spec/rubocop/cop/style/tab_spec.rb +9 -15
- data/spec/rubocop/cop/style/ternary_operator_spec.rb +25 -31
- data/spec/rubocop/cop/style/trailing_blank_lines_spec.rb +10 -16
- data/spec/rubocop/cop/style/trailing_whitespace_spec.rb +14 -20
- data/spec/rubocop/cop/style/trivial_accessors_spec.rb +374 -380
- data/spec/rubocop/cop/style/unless_else_spec.rb +17 -23
- data/spec/rubocop/cop/style/variable_interpolation_spec.rb +36 -42
- data/spec/rubocop/cop/style/variable_name_spec.rb +83 -0
- data/spec/rubocop/cop/style/when_then_spec.rb +31 -37
- data/spec/rubocop/cop/style/while_until_do_spec.rb +47 -53
- data/spec/rubocop/cop/style/word_array_spec.rb +49 -55
- data/spec/rubocop/cop/team_spec.rb +125 -127
- data/spec/rubocop/cop/variable_inspector/assignment_spec.rb +176 -180
- data/spec/rubocop/cop/variable_inspector/locatable_spec.rb +580 -586
- data/spec/rubocop/cop/variable_inspector/scope_spec.rb +140 -146
- data/spec/rubocop/cop/variable_inspector/variable_spec.rb +52 -58
- data/spec/rubocop/cop/variable_inspector/variable_table_spec.rb +217 -223
- data/spec/rubocop/cop/variable_inspector_spec.rb +15 -19
- data/spec/rubocop/formatter/clang_style_formatter_spec.rb +35 -36
- data/spec/rubocop/formatter/disabled_config_formatter_spec.rb +2 -2
- data/spec/rubocop/formatter/emacs_style_formatter_spec.rb +24 -1
- data/spec/rubocop/formatter/file_list_formatter_spec.rb +1 -1
- data/spec/rubocop/formatter/formatter_set_spec.rb +3 -3
- data/spec/rubocop/formatter/json_formatter_spec.rb +7 -2
- data/spec/rubocop/formatter/offence_count_formatter_spec.rb +1 -1
- data/spec/rubocop/formatter/progress_formatter_spec.rb +1 -1
- data/spec/rubocop/formatter/simple_text_formatter_spec.rb +55 -6
- data/spec/rubocop/options_spec.rb +233 -0
- data/spec/rubocop/processed_source_spec.rb +85 -42
- data/spec/rubocop/source_parser_spec.rb +108 -110
- data/spec/rubocop/target_finder_spec.rb +125 -127
- data/spec/rubocop/token_spec.rb +15 -17
- metadata +32 -8
- data/lib/rubocop/backports/bsearch.rb +0 -39
- data/lib/rubocop/cop/style/method_and_variable_snake_case.rb +0 -77
- data/spec/rubocop/cop/style/method_and_variable_snake_case_spec.rb +0 -102
@@ -3,7 +3,10 @@
|
|
3
3
|
module Rubocop
|
4
4
|
module Cop
|
5
5
|
module Style
|
6
|
-
#
|
6
|
+
# Classes that include this module just implement functions to determine
|
7
|
+
# what is an offence and how to do auto-correction. They get help with
|
8
|
+
# adding offences for the faulty string nodes, and with filtering out
|
9
|
+
# nodes.
|
7
10
|
module StringHelp
|
8
11
|
def on_str(node)
|
9
12
|
# Constants like __FILE__ are handled as strings,
|
@@ -3,25 +3,48 @@
|
|
3
3
|
module Rubocop
|
4
4
|
module Cop
|
5
5
|
module Style
|
6
|
-
# Checks
|
6
|
+
# Checks if uses of quotes match the configured preference.
|
7
7
|
class StringLiterals < Cop
|
8
8
|
include StringHelp
|
9
9
|
|
10
|
-
|
11
|
-
|
10
|
+
private
|
11
|
+
|
12
|
+
def message(node)
|
13
|
+
if single_quotes_preferred?
|
14
|
+
"Prefer single-quoted strings when you don't need string " +
|
15
|
+
'interpolation or special symbols.'
|
16
|
+
else
|
17
|
+
'Prefer double-quoted strings unless you need single quotes to ' +
|
18
|
+
'avoid extra backslashes for escaping.'
|
19
|
+
end
|
20
|
+
end
|
12
21
|
|
13
22
|
def offence?(node)
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
23
|
+
src = node.loc.expression.source
|
24
|
+
return false if src =~ /^%q/i
|
25
|
+
src !~ if single_quotes_preferred?
|
26
|
+
# regex matches IF there is a ' or there is a \\ in the
|
27
|
+
# string that is not preceeded/followed by another \\
|
28
|
+
# (e.g. "\\x34") but not "\\\\"
|
29
|
+
/' | (?<! \\) \\{2}* \\ (?! \\)/x
|
30
|
+
else
|
31
|
+
/" | \\/x
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def single_quotes_preferred?
|
36
|
+
case cop_config['EnforcedStyle']
|
37
|
+
when 'single_quotes' then true
|
38
|
+
when 'double_quotes' then false
|
39
|
+
else fail 'Unknown StringLiterals style'
|
40
|
+
end
|
19
41
|
end
|
20
42
|
|
21
|
-
def
|
43
|
+
def autocorrect(node)
|
22
44
|
@corrections << lambda do |corrector|
|
23
|
-
|
24
|
-
corrector.replace(node.loc.
|
45
|
+
replacement = node.loc.begin.is?('"') ? "'" : '"'
|
46
|
+
corrector.replace(node.loc.begin, replacement)
|
47
|
+
corrector.replace(node.loc.end, replacement)
|
25
48
|
end
|
26
49
|
end
|
27
50
|
end
|
@@ -174,14 +174,11 @@ module Rubocop
|
|
174
174
|
end
|
175
175
|
end
|
176
176
|
|
177
|
-
# Checks that block braces have surrounding space
|
178
|
-
# parameters, it
|
179
|
-
# space depending on configuration.
|
177
|
+
# Checks that block braces have or don't have surrounding space depending
|
178
|
+
# on configuration. For blocks taking parameters, it checks that the left
|
179
|
+
# brace has or doesn't have trailing space depending on configuration.
|
180
180
|
class SpaceAroundBlockBraces < Cop
|
181
181
|
include SurroundingSpace
|
182
|
-
MSG_LEFT = "Surrounding space missing for '{'."
|
183
|
-
MSG_RIGHT = "Space missing to the left of '}'."
|
184
|
-
MSG_PIPE = 'Space between { and | detected.'
|
185
182
|
|
186
183
|
def investigate(processed_source)
|
187
184
|
return unless processed_source.ast
|
@@ -191,15 +188,15 @@ module Rubocop
|
|
191
188
|
next if ([t1.pos, t2.pos] - positions_not_to_check).size < 2
|
192
189
|
|
193
190
|
type1, type2 = t1.type, t2.type
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
191
|
+
if [:tLCURLY, :tRCURLY].include?(type2)
|
192
|
+
check(t1, t2)
|
193
|
+
elsif type1 == :tLCURLY
|
194
|
+
if type2 == :tPIPE
|
195
|
+
check_pipe(t1, t2)
|
198
196
|
else
|
199
|
-
check(t1, t2
|
197
|
+
check(t1, t2)
|
200
198
|
end
|
201
199
|
end
|
202
|
-
check(t1, t2, MSG_RIGHT) if type2 == :tRCURLY
|
203
200
|
end
|
204
201
|
end
|
205
202
|
|
@@ -229,15 +226,65 @@ module Rubocop
|
|
229
226
|
end
|
230
227
|
end
|
231
228
|
|
232
|
-
def check(t1, t2
|
229
|
+
def check(t1, t2)
|
230
|
+
if cop_config['EnforcedStyle'] == 'space_inside_braces'
|
231
|
+
check_space_inside_braces(t1, t2)
|
232
|
+
else
|
233
|
+
check_no_space_inside_braces(t1, t2)
|
234
|
+
end
|
235
|
+
check_space_outside_left_brace(t1, t2)
|
236
|
+
end
|
237
|
+
|
238
|
+
def check_space_inside_braces(t1, t2)
|
233
239
|
unless space_between?(t1, t2)
|
234
|
-
|
235
|
-
|
240
|
+
if t1.text == '{'
|
241
|
+
convention(nil, t1.pos, 'Space missing inside {.')
|
242
|
+
elsif t2.text == '}'
|
243
|
+
convention(nil, t2.pos, 'Space missing inside }.')
|
244
|
+
end
|
245
|
+
end
|
246
|
+
end
|
247
|
+
|
248
|
+
def check_no_space_inside_braces(t1, t2)
|
249
|
+
if t1.text == '{' || t2.text == '}'
|
250
|
+
if space_between?(t1, t2)
|
251
|
+
if t1.text == '{'
|
252
|
+
convention(nil, space_range(t1), 'Space inside { detected.')
|
253
|
+
elsif t2.text == '}'
|
254
|
+
convention(nil, space_range(t2), 'Space inside } detected.')
|
255
|
+
end
|
256
|
+
end
|
236
257
|
end
|
237
258
|
end
|
238
259
|
|
239
|
-
def
|
240
|
-
|
260
|
+
def check_space_outside_left_brace(t1, t2)
|
261
|
+
if t2.text == '{' && !space_between?(t1, t2)
|
262
|
+
convention(nil, t2.pos, 'Space missing to the left of {.')
|
263
|
+
end
|
264
|
+
end
|
265
|
+
|
266
|
+
def check_pipe(t1, t2)
|
267
|
+
if cop_config['SpaceBeforeBlockParameters']
|
268
|
+
unless space_between?(t1, t2)
|
269
|
+
convention(nil, t1.pos, 'Space between { and | missing.')
|
270
|
+
end
|
271
|
+
elsif space_between?(t1, t2)
|
272
|
+
convention(nil, space_range(t1), 'Space between { and | detected.')
|
273
|
+
end
|
274
|
+
end
|
275
|
+
|
276
|
+
def space_range(token)
|
277
|
+
src = @processed_source.buffer.source
|
278
|
+
if token.text == '{'
|
279
|
+
b = token.pos.begin_pos + 1
|
280
|
+
e = b + 1
|
281
|
+
e += 1 while src[e] =~ /\s/
|
282
|
+
else
|
283
|
+
e = token.pos.begin_pos
|
284
|
+
b = e - 1
|
285
|
+
b -= 1 while src[b - 1] =~ /\s/
|
286
|
+
end
|
287
|
+
Parser::Source::Range.new(@processed_source.buffer, b, e)
|
241
288
|
end
|
242
289
|
end
|
243
290
|
|
@@ -0,0 +1,44 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
module Rubocop
|
4
|
+
module Cop
|
5
|
+
module Style
|
6
|
+
# This cop makes sure that all variables use the configured style,
|
7
|
+
# snake_case or camelCase, for their names.
|
8
|
+
class VariableName < Cop
|
9
|
+
include ConfigurableNaming
|
10
|
+
|
11
|
+
def on_lvasgn(node)
|
12
|
+
check(node, name_of_variable(node))
|
13
|
+
end
|
14
|
+
|
15
|
+
def on_ivasgn(node)
|
16
|
+
check(node, name_of_variable(node))
|
17
|
+
end
|
18
|
+
|
19
|
+
def on_send(node)
|
20
|
+
check(node, name_of_setter(node))
|
21
|
+
end
|
22
|
+
|
23
|
+
def name_of_variable(vasgn_node)
|
24
|
+
expr = vasgn_node.loc.expression
|
25
|
+
name = vasgn_node.children.first
|
26
|
+
Parser::Source::Range.new(expr.source_buffer, expr.begin_pos,
|
27
|
+
expr.begin_pos + name.length)
|
28
|
+
end
|
29
|
+
|
30
|
+
def name_of_setter(send_node)
|
31
|
+
receiver, method_name = *send_node
|
32
|
+
return unless receiver && receiver.type == :self
|
33
|
+
return unless method_name.to_s.end_with?('=')
|
34
|
+
after_dot(send_node, method_name.length - '='.length,
|
35
|
+
Regexp.escape(receiver.loc.expression.source))
|
36
|
+
end
|
37
|
+
|
38
|
+
def message(style)
|
39
|
+
format('Use %s for variables.', style)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -30,7 +30,7 @@ module Rubocop
|
|
30
30
|
format('Never use `do` with multi-line `%s`.', node_type)
|
31
31
|
end
|
32
32
|
|
33
|
-
def
|
33
|
+
def autocorrect(node)
|
34
34
|
@corrections << lambda do |corrector|
|
35
35
|
condition_node, = *node
|
36
36
|
end_of_condition_range = condition_node.loc.expression.end
|
data/lib/rubocop/cop/team.rb
CHANGED
@@ -30,19 +30,16 @@ module Rubocop
|
|
30
30
|
return []
|
31
31
|
end
|
32
32
|
|
33
|
-
offences = processed_source.diagnostics.map do |diagnostic|
|
34
|
-
Offence.from_diagnostic(diagnostic)
|
35
|
-
end
|
36
|
-
|
37
33
|
# If we got any syntax errors, return only the syntax offences.
|
38
34
|
# Parser may return nil for AST even though there are no syntax errors.
|
39
35
|
# e.g. sources which contain only comments
|
40
|
-
|
41
|
-
|
36
|
+
unless processed_source.valid_syntax?
|
37
|
+
diagnostics = processed_source.diagnostics
|
38
|
+
return Lint::Syntax.offences_from_diagnostics(diagnostics)
|
42
39
|
end
|
43
40
|
|
44
41
|
commissioner = Commissioner.new(cops)
|
45
|
-
offences
|
42
|
+
offences = commissioner.investigate(processed_source)
|
46
43
|
process_commissioner_errors(file, commissioner.errors)
|
47
44
|
autocorrect(processed_source.buffer, cops)
|
48
45
|
offences.sort
|
data/lib/rubocop/cop/util.rb
CHANGED
@@ -23,6 +23,18 @@ module Rubocop
|
|
23
23
|
block_node.loc.end.line - block_node.loc.begin.line
|
24
24
|
end
|
25
25
|
|
26
|
+
def source_length(source, count_comments = nil)
|
27
|
+
lines = source.lines.to_a[1...-1]
|
28
|
+
|
29
|
+
return 0 unless lines
|
30
|
+
|
31
|
+
lines.reject!(&:blank?)
|
32
|
+
|
33
|
+
lines.reject! { |line| line =~ /^\s*#/ } unless count_comments
|
34
|
+
|
35
|
+
lines.size
|
36
|
+
end
|
37
|
+
|
26
38
|
def const_name(node)
|
27
39
|
return nil if node.nil? || node.type != :const
|
28
40
|
|
@@ -7,9 +7,12 @@ module Rubocop
|
|
7
7
|
class EmacsStyleFormatter < BaseFormatter
|
8
8
|
def file_finished(file, offences)
|
9
9
|
offences.each do |o|
|
10
|
+
message = o.corrected? ? '[Corrected] ' : ''
|
11
|
+
message << o.message
|
12
|
+
|
10
13
|
output.printf("%s:%d:%d: %s: %s\n",
|
11
|
-
file, o.line, o.real_column, o.
|
12
|
-
|
14
|
+
file, o.line, o.real_column, o.severity_code,
|
15
|
+
message)
|
13
16
|
end
|
14
17
|
end
|
15
18
|
end
|
@@ -6,14 +6,6 @@ module Rubocop
|
|
6
6
|
# letters for files with problems in the them. In the end it
|
7
7
|
# appends the regular report data in the clang style format.
|
8
8
|
class ProgressFormatter < ClangStyleFormatter
|
9
|
-
COLOR_FOR_SEVERITY = {
|
10
|
-
refactor: :yellow,
|
11
|
-
convention: :yellow,
|
12
|
-
warning: :magenta,
|
13
|
-
error: :red,
|
14
|
-
fatal: :red
|
15
|
-
}
|
16
|
-
|
17
9
|
def started(target_files)
|
18
10
|
super
|
19
11
|
@offences_for_files = {}
|
@@ -22,8 +14,11 @@ module Rubocop
|
|
22
14
|
end
|
23
15
|
|
24
16
|
def file_finished(file, offences)
|
25
|
-
|
26
|
-
|
17
|
+
unless offences.empty?
|
18
|
+
count_stats(offences)
|
19
|
+
@offences_for_files[file] = offences
|
20
|
+
end
|
21
|
+
|
27
22
|
report_file_as_mark(file, offences)
|
28
23
|
end
|
29
24
|
|
@@ -40,7 +35,9 @@ module Rubocop
|
|
40
35
|
end
|
41
36
|
end
|
42
37
|
|
43
|
-
report_summary(inspected_files.count,
|
38
|
+
report_summary(inspected_files.count,
|
39
|
+
@total_offence_count,
|
40
|
+
@total_correction_count)
|
44
41
|
end
|
45
42
|
|
46
43
|
def report_file_as_mark(file, offences)
|
@@ -50,8 +47,7 @@ module Rubocop
|
|
50
47
|
highest_offence = offences.max do |a, b|
|
51
48
|
a.severity_level <=> b.severity_level
|
52
49
|
end
|
53
|
-
|
54
|
-
highest_offence.encode_severity.color(color)
|
50
|
+
colored_severity_code(highest_offence)
|
55
51
|
end
|
56
52
|
|
57
53
|
output.write mark
|
@@ -6,44 +6,67 @@ module Rubocop
|
|
6
6
|
# Offences are displayed at compact form - just the
|
7
7
|
# location of the problem and the associated message.
|
8
8
|
class SimpleTextFormatter < BaseFormatter
|
9
|
+
COLOR_FOR_SEVERITY = {
|
10
|
+
refactor: :yellow,
|
11
|
+
convention: :yellow,
|
12
|
+
warning: :magenta,
|
13
|
+
error: :red,
|
14
|
+
fatal: :red
|
15
|
+
}.freeze
|
16
|
+
|
9
17
|
def started(target_files)
|
10
18
|
@total_offence_count = 0
|
19
|
+
@total_correction_count = 0
|
11
20
|
end
|
12
21
|
|
13
22
|
def file_finished(file, offences)
|
14
23
|
return if offences.empty?
|
15
|
-
|
24
|
+
count_stats(offences)
|
16
25
|
report_file(file, offences)
|
17
26
|
end
|
18
27
|
|
19
28
|
def finished(inspected_files)
|
20
|
-
report_summary(inspected_files.count,
|
29
|
+
report_summary(inspected_files.count,
|
30
|
+
@total_offence_count,
|
31
|
+
@total_correction_count)
|
21
32
|
end
|
22
33
|
|
23
34
|
def report_file(file, offences)
|
24
35
|
output.puts "== #{smart_path(file)} ==".color(:yellow)
|
25
|
-
|
36
|
+
|
37
|
+
offences.each do |o|
|
38
|
+
output.printf("%s:%3d:%3d: %s\n",
|
39
|
+
colored_severity_code(o),
|
40
|
+
o.line, o.real_column, message(o))
|
41
|
+
end
|
26
42
|
end
|
27
43
|
|
28
|
-
def report_summary(file_count, offence_count)
|
29
|
-
summary = ''
|
44
|
+
def report_summary(file_count, offence_count, correction_count)
|
45
|
+
summary = pluralize(file_count, 'file')
|
46
|
+
summary << ' inspected, '
|
30
47
|
|
31
|
-
|
32
|
-
|
48
|
+
offences_text = pluralize(offence_count, 'offence', no_for_zero: true)
|
49
|
+
offences_text << ' detected'
|
50
|
+
summary << offences_text.color(offence_count.zero? ? :green : :red)
|
33
51
|
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
52
|
+
if correction_count > 0
|
53
|
+
summary << ', '
|
54
|
+
correction_text = pluralize(correction_count, 'offence')
|
55
|
+
correction_text << ' corrected'
|
56
|
+
color = correction_count == offence_count ? :green : :cyan
|
57
|
+
summary << correction_text.color(color)
|
58
|
+
end
|
41
59
|
|
42
60
|
output.puts
|
43
61
|
output.puts summary
|
44
62
|
end
|
45
63
|
|
46
|
-
|
64
|
+
private
|
65
|
+
|
66
|
+
def count_stats(offences)
|
67
|
+
@total_offence_count += offences.count
|
68
|
+
@total_correction_count += offences.select(&:corrected?).count
|
69
|
+
end
|
47
70
|
|
48
71
|
def smart_path(path)
|
49
72
|
if path.start_with?(Dir.pwd)
|
@@ -52,6 +75,31 @@ module Rubocop
|
|
52
75
|
path
|
53
76
|
end
|
54
77
|
end
|
78
|
+
|
79
|
+
def colored_severity_code(offence)
|
80
|
+
color = COLOR_FOR_SEVERITY[offence.severity]
|
81
|
+
offence.severity_code.color(color)
|
82
|
+
end
|
83
|
+
|
84
|
+
def message(offence)
|
85
|
+
message = offence.corrected? ? '[Corrected] '.color(:green) : ''
|
86
|
+
message << offence.message
|
87
|
+
end
|
88
|
+
|
89
|
+
def pluralize(number, thing, options = {})
|
90
|
+
text = ''
|
91
|
+
|
92
|
+
if number == 0 && options[:no_for_zero]
|
93
|
+
text = 'no'
|
94
|
+
else
|
95
|
+
text << number.to_s
|
96
|
+
end
|
97
|
+
|
98
|
+
text << " #{thing}"
|
99
|
+
text << 's' unless number == 1
|
100
|
+
|
101
|
+
text
|
102
|
+
end
|
55
103
|
end
|
56
104
|
end
|
57
105
|
end
|