rubocop 0.59.2 → 0.60.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/README.md +3 -2
- data/config/default.yml +2960 -552
- data/lib/rubocop.rb +1 -0
- data/lib/rubocop/ast/builder.rb +29 -29
- data/lib/rubocop/ast/node.rb +29 -25
- data/lib/rubocop/ast/node/args_node.rb +1 -1
- data/lib/rubocop/ast/node/mixin/binary_operator_node.rb +1 -1
- data/lib/rubocop/ast/node/mixin/method_dispatch_node.rb +26 -0
- data/lib/rubocop/ast/node/mixin/method_identifier_predicates.rb +5 -1
- data/lib/rubocop/ast/node/pair_node.rb +8 -1
- data/lib/rubocop/ast/node/str_node.rb +1 -1
- data/lib/rubocop/cached_data.rb +2 -2
- data/lib/rubocop/config.rb +1 -1
- data/lib/rubocop/config_loader.rb +8 -0
- data/lib/rubocop/cop/autocorrect_logic.rb +7 -1
- data/lib/rubocop/cop/bundler/insecure_protocol_source.rb +1 -1
- data/lib/rubocop/cop/correctors/alignment_corrector.rb +2 -1
- data/lib/rubocop/cop/gemspec/duplicated_assignment.rb +1 -1
- data/lib/rubocop/cop/generator.rb +10 -3
- data/lib/rubocop/cop/generator/require_file_injector.rb +1 -1
- data/lib/rubocop/cop/internal_affairs/node_destructuring.rb +1 -1
- data/lib/rubocop/cop/layout/align_hash.rb +9 -1
- data/lib/rubocop/cop/layout/block_end_newline.rb +2 -4
- data/lib/rubocop/cop/layout/closing_parenthesis_indentation.rb +7 -7
- data/lib/rubocop/cop/layout/comment_indentation.rb +1 -1
- data/lib/rubocop/cop/layout/dot_position.rb +2 -2
- data/lib/rubocop/cop/layout/else_alignment.rb +1 -1
- data/lib/rubocop/cop/layout/empty_line_after_magic_comment.rb +1 -2
- data/lib/rubocop/cop/layout/empty_lines.rb +1 -1
- data/lib/rubocop/cop/layout/empty_lines_around_access_modifier.rb +25 -25
- data/lib/rubocop/cop/layout/empty_lines_around_arguments.rb +1 -1
- data/lib/rubocop/cop/layout/empty_lines_around_begin_body.rb +1 -1
- data/lib/rubocop/cop/layout/empty_lines_around_block_body.rb +1 -1
- data/lib/rubocop/cop/layout/empty_lines_around_class_body.rb +1 -1
- data/lib/rubocop/cop/layout/empty_lines_around_exception_handling_keywords.rb +1 -1
- data/lib/rubocop/cop/layout/empty_lines_around_method_body.rb +1 -1
- data/lib/rubocop/cop/layout/empty_lines_around_module_body.rb +1 -1
- data/lib/rubocop/cop/layout/end_alignment.rb +1 -1
- data/lib/rubocop/cop/layout/first_parameter_indentation.rb +1 -1
- data/lib/rubocop/cop/layout/indent_hash.rb +1 -1
- data/lib/rubocop/cop/layout/indent_heredoc.rb +2 -2
- data/lib/rubocop/cop/layout/indentation_consistency.rb +1 -1
- data/lib/rubocop/cop/layout/indentation_width.rb +1 -1
- data/lib/rubocop/cop/layout/initial_indentation.rb +1 -1
- data/lib/rubocop/cop/layout/multiline_array_brace_layout.rb +1 -1
- data/lib/rubocop/cop/layout/multiline_operation_indentation.rb +1 -1
- data/lib/rubocop/cop/layout/rescue_ensure_alignment.rb +84 -43
- data/lib/rubocop/cop/layout/space_after_method_name.rb +1 -1
- data/lib/rubocop/cop/layout/space_around_keyword.rb +1 -1
- data/lib/rubocop/cop/layout/space_around_operators.rb +3 -2
- data/lib/rubocop/cop/layout/space_inside_array_percent_literal.rb +1 -1
- data/lib/rubocop/cop/layout/space_inside_percent_literal_delimiters.rb +2 -2
- data/lib/rubocop/cop/lint/ambiguous_operator.rb +5 -5
- data/lib/rubocop/cop/lint/assignment_in_condition.rb +10 -20
- data/lib/rubocop/cop/lint/ensure_return.rb +3 -0
- data/lib/rubocop/cop/lint/format_parameter_mismatch.rb +3 -3
- data/lib/rubocop/cop/lint/literal_as_condition.rb +1 -1
- data/lib/rubocop/cop/lint/percent_string_array.rb +2 -2
- data/lib/rubocop/cop/lint/percent_symbol_array.rb +10 -7
- data/lib/rubocop/cop/lint/safe_navigation_consistency.rb +3 -4
- data/lib/rubocop/cop/lint/shadowed_argument.rb +1 -2
- data/lib/rubocop/cop/lint/syntax.rb +3 -2
- data/lib/rubocop/cop/lint/uri_escape_unescape.rb +3 -3
- data/lib/rubocop/cop/lint/useless_setter_call.rb +4 -7
- data/lib/rubocop/cop/metrics/abc_size.rb +1 -17
- data/lib/rubocop/cop/metrics/line_length.rb +14 -10
- data/lib/rubocop/cop/metrics/utils/abc_size_calculator.rb +45 -0
- data/lib/rubocop/cop/mixin/check_assignment.rb +12 -6
- data/lib/rubocop/cop/mixin/configurable_enforced_style.rb +1 -1
- data/lib/rubocop/cop/mixin/configurable_formatting.rb +0 -2
- data/lib/rubocop/cop/mixin/configurable_max.rb +4 -2
- data/lib/rubocop/cop/mixin/configurable_naming.rb +1 -1
- data/lib/rubocop/cop/mixin/configurable_numbering.rb +2 -2
- data/lib/rubocop/cop/mixin/hash_alignment.rb +32 -5
- data/lib/rubocop/cop/mixin/heredoc.rb +1 -1
- data/lib/rubocop/cop/mixin/multiline_expression_indentation.rb +3 -4
- data/lib/rubocop/cop/mixin/multiline_literal_brace_layout.rb +1 -1
- data/lib/rubocop/cop/mixin/statement_modifier.rb +4 -0
- data/lib/rubocop/cop/mixin/trailing_comma.rb +1 -1
- data/lib/rubocop/cop/naming/class_and_module_camel_case.rb +1 -1
- data/lib/rubocop/cop/naming/constant_name.rb +1 -1
- data/lib/rubocop/cop/naming/file_name.rb +1 -1
- data/lib/rubocop/cop/naming/method_name.rb +2 -0
- data/lib/rubocop/cop/naming/variable_number.rb +1 -1
- data/lib/rubocop/cop/offense.rb +1 -1
- data/lib/rubocop/cop/performance/regexp_match.rb +1 -1
- data/lib/rubocop/cop/performance/sample.rb +3 -2
- data/lib/rubocop/cop/performance/start_with.rb +1 -1
- data/lib/rubocop/cop/performance/string_replacement.rb +1 -1
- data/lib/rubocop/cop/rails/date.rb +8 -8
- data/lib/rubocop/cop/rails/dynamic_find_by.rb +1 -1
- data/lib/rubocop/cop/rails/exit.rb +8 -9
- data/lib/rubocop/cop/rails/output_safety.rb +3 -3
- data/lib/rubocop/cop/rails/read_write_attribute.rb +5 -4
- data/lib/rubocop/cop/rails/refute_methods.rb +13 -13
- data/lib/rubocop/cop/rails/reversible_migration.rb +2 -1
- data/lib/rubocop/cop/rails/skips_model_validations.rb +17 -0
- data/lib/rubocop/cop/registry.rb +11 -2
- data/lib/rubocop/cop/style/and_or.rb +3 -3
- data/lib/rubocop/cop/style/collection_methods.rb +26 -0
- data/lib/rubocop/cop/style/empty_literal.rb +1 -1
- data/lib/rubocop/cop/style/encoding.rb +1 -1
- data/lib/rubocop/cop/style/even_odd.rb +2 -2
- data/lib/rubocop/cop/style/for.rb +3 -3
- data/lib/rubocop/cop/style/global_vars.rb +1 -1
- data/lib/rubocop/cop/style/identical_conditional_branches.rb +1 -1
- data/lib/rubocop/cop/style/if_unless_modifier.rb +1 -13
- data/lib/rubocop/cop/style/infinite_loop.rb +1 -1
- data/lib/rubocop/cop/style/inverse_methods.rb +1 -1
- data/lib/rubocop/cop/style/method_call_without_args_parentheses.rb +4 -7
- data/lib/rubocop/cop/style/method_def_parentheses.rb +1 -1
- data/lib/rubocop/cop/style/module_function.rb +1 -1
- data/lib/rubocop/cop/style/multiline_if_then.rb +1 -1
- data/lib/rubocop/cop/style/mutable_constant.rb +15 -1
- data/lib/rubocop/cop/style/nested_modifier.rb +1 -1
- data/lib/rubocop/cop/style/not.rb +2 -1
- data/lib/rubocop/cop/style/numeric_literal_prefix.rb +6 -6
- data/lib/rubocop/cop/style/numeric_literals.rb +1 -1
- data/lib/rubocop/cop/style/numeric_predicate.rb +1 -1
- data/lib/rubocop/cop/style/one_line_conditional.rb +2 -2
- data/lib/rubocop/cop/style/parentheses_around_condition.rb +1 -1
- data/lib/rubocop/cop/style/proc.rb +1 -1
- data/lib/rubocop/cop/style/redundant_freeze.rb +10 -0
- data/lib/rubocop/cop/style/redundant_parentheses.rb +6 -2
- data/lib/rubocop/cop/style/redundant_self.rb +1 -1
- data/lib/rubocop/cop/style/special_global_vars.rb +1 -1
- data/lib/rubocop/cop/style/stderr_puts.rb +1 -1
- data/lib/rubocop/cop/style/ternary_parentheses.rb +4 -3
- data/lib/rubocop/cop/style/unneeded_condition.rb +2 -2
- data/lib/rubocop/cop/style/unneeded_percent_q.rb +2 -2
- data/lib/rubocop/cop/style/unpack_first.rb +1 -1
- data/lib/rubocop/cop/team.rb +3 -2
- data/lib/rubocop/cop/util.rb +2 -22
- data/lib/rubocop/cop/variable_force/scope.rb +3 -3
- data/lib/rubocop/cop/variable_force/variable.rb +3 -4
- data/lib/rubocop/cop/variable_force/variable_table.rb +2 -2
- data/lib/rubocop/formatter/base_formatter.rb +3 -3
- data/lib/rubocop/formatter/disabled_config_formatter.rb +16 -1
- data/lib/rubocop/formatter/formatter_set.rb +14 -14
- data/lib/rubocop/formatter/html_formatter.rb +4 -4
- data/lib/rubocop/formatter/json_formatter.rb +13 -13
- data/lib/rubocop/formatter/simple_text_formatter.rb +4 -4
- data/lib/rubocop/magic_comment.rb +4 -4
- data/lib/rubocop/node_pattern.rb +17 -17
- data/lib/rubocop/options.rb +93 -82
- data/lib/rubocop/result_cache.rb +9 -1
- data/lib/rubocop/rspec/expect_offense.rb +2 -2
- data/lib/rubocop/rspec/shared_contexts.rb +11 -11
- data/lib/rubocop/rspec/shared_examples.rb +4 -4
- data/lib/rubocop/string_interpreter.rb +1 -1
- data/lib/rubocop/version.rb +1 -1
- metadata +6 -13
- data/config/disabled.yml +0 -161
- data/config/enabled.yml +0 -2092
@@ -34,11 +34,21 @@ module RuboCop
|
|
34
34
|
private
|
35
35
|
|
36
36
|
def immutable_literal?(node)
|
37
|
+
node = strip_parenthesis(node)
|
38
|
+
|
37
39
|
return true if node.immutable_literal?
|
38
40
|
|
39
41
|
FROZEN_STRING_LITERAL_TYPES.include?(node.type) &&
|
40
42
|
frozen_string_literals_enabled?
|
41
43
|
end
|
44
|
+
|
45
|
+
def strip_parenthesis(node)
|
46
|
+
if node.begin_type? && node.children.first
|
47
|
+
node.children.first
|
48
|
+
else
|
49
|
+
node
|
50
|
+
end
|
51
|
+
end
|
42
52
|
end
|
43
53
|
end
|
44
54
|
end
|
@@ -108,8 +108,8 @@ module RuboCop
|
|
108
108
|
def check_unary(begin_node, node)
|
109
109
|
return if begin_node.chained?
|
110
110
|
|
111
|
-
|
112
|
-
|
111
|
+
node = node.children.first while suspect_unary?(node)
|
112
|
+
|
113
113
|
if node.send_type?
|
114
114
|
return unless method_call_with_redundant_parentheses?(node)
|
115
115
|
end
|
@@ -121,6 +121,10 @@ module RuboCop
|
|
121
121
|
add_offense(node, message: "Don't use parentheses around #{msg}.")
|
122
122
|
end
|
123
123
|
|
124
|
+
def suspect_unary?(node)
|
125
|
+
node.send_type? && node.unary_operation? && !node.prefix_not?
|
126
|
+
end
|
127
|
+
|
124
128
|
def keyword_ancestor?(node)
|
125
129
|
node.parent && node.parent.keyword?
|
126
130
|
end
|
@@ -60,7 +60,7 @@ module RuboCop
|
|
60
60
|
include ConfigurableEnforcedStyle
|
61
61
|
|
62
62
|
MSG_BOTH = 'Prefer `%<prefer>s` from the stdlib \'English\' ' \
|
63
|
-
'module (don\'t forget to require it)
|
63
|
+
'module (don\'t forget to require it) or `%<regular>s` over ' \
|
64
64
|
'`%<global>s`.'.freeze
|
65
65
|
MSG_ENGLISH = 'Prefer `%<prefer>s` from the stdlib \'English\' ' \
|
66
66
|
'module (don\'t forget to require it) over `%<global>s`.'.freeze
|
@@ -5,7 +5,7 @@ module RuboCop
|
|
5
5
|
module Style
|
6
6
|
# This cop identifies places where `$stderr.puts` can be replaced by
|
7
7
|
# `warn`. The latter has the advantage of easily being disabled by,
|
8
|
-
#
|
8
|
+
# the `-W0` interpreter flag or setting `$VERBOSE` to `nil`.
|
9
9
|
#
|
10
10
|
# @example
|
11
11
|
# # bad
|
@@ -155,12 +155,13 @@ module RuboCop
|
|
155
155
|
|
156
156
|
def unparenthesized_method_call?(child)
|
157
157
|
argument = method_call_argument(child)
|
158
|
-
|
158
|
+
|
159
|
+
argument && !argument.parenthesized?
|
159
160
|
end
|
160
161
|
|
161
162
|
def_node_matcher :method_call_argument, <<-PATTERN
|
162
|
-
{(:defined?
|
163
|
-
(send {_ nil?} _ $(send nil? _)...)}
|
163
|
+
{(:defined? $(send nil? _) ...)
|
164
|
+
(send {_ nil?} _ $(send nil? _) ...)}
|
164
165
|
PATTERN
|
165
166
|
|
166
167
|
def correct_parenthesized(condition)
|
@@ -90,8 +90,8 @@ module RuboCop
|
|
90
90
|
end
|
91
91
|
|
92
92
|
def else_source(else_branch)
|
93
|
-
wrap_else =
|
94
|
-
|
93
|
+
wrap_else =
|
94
|
+
else_branch.basic_conditional? && else_branch.modifier_form?
|
95
95
|
wrap_else ? "(#{else_branch.source})" : else_branch.source
|
96
96
|
end
|
97
97
|
|
@@ -27,8 +27,8 @@ module RuboCop
|
|
27
27
|
EMPTY = ''.freeze
|
28
28
|
PERCENT_Q = '%q'.freeze
|
29
29
|
PERCENT_CAPITAL_Q = '%Q'.freeze
|
30
|
-
STRING_INTERPOLATION_REGEXP = /#\{.+}
|
31
|
-
ESCAPED_NON_BACKSLASH = /\\[^\\]
|
30
|
+
STRING_INTERPOLATION_REGEXP = /#\{.+}/.freeze
|
31
|
+
ESCAPED_NON_BACKSLASH = /\\[^\\]/.freeze
|
32
32
|
|
33
33
|
def on_dstr(node)
|
34
34
|
return unless string_literal?(node)
|
@@ -36,7 +36,7 @@ module RuboCop
|
|
36
36
|
unpack_and_first_element?(node) do |unpack_call, unpack_arg|
|
37
37
|
range = first_element_range(node, unpack_call)
|
38
38
|
message = format(MSG,
|
39
|
-
receiver:
|
39
|
+
receiver: unpack_call.receiver.source,
|
40
40
|
format: unpack_arg.source,
|
41
41
|
method: range.source)
|
42
42
|
add_offense(node, message: message)
|
data/lib/rubocop/cop/team.rb
CHANGED
@@ -45,8 +45,9 @@ module RuboCop
|
|
45
45
|
end
|
46
46
|
|
47
47
|
def cops
|
48
|
-
|
49
|
-
|
48
|
+
only = @options.fetch(:only, [])
|
49
|
+
safe = @options.fetch(:safe, false)
|
50
|
+
@cops ||= @cop_classes.enabled(@config, only, safe).map do |cop_class|
|
50
51
|
cop_class.new(@config, @options)
|
51
52
|
end
|
52
53
|
end
|
data/lib/rubocop/cop/util.rb
CHANGED
@@ -5,34 +5,14 @@ module RuboCop
|
|
5
5
|
# This module contains a collection of useful utility methods.
|
6
6
|
module Util
|
7
7
|
include PathUtil
|
8
|
-
extend RuboCop::AST::Sexp
|
9
|
-
|
10
|
-
EQUALS_ASGN_NODES = %i[lvasgn ivasgn cvasgn gvasgn
|
11
|
-
casgn masgn].freeze
|
12
|
-
SHORTHAND_ASGN_NODES = %i[op_asgn or_asgn and_asgn].freeze
|
13
|
-
ASGN_NODES = (EQUALS_ASGN_NODES + SHORTHAND_ASGN_NODES).freeze
|
14
|
-
|
15
|
-
MODIFIER_NODES = %i[if while until].freeze
|
16
|
-
CONDITIONAL_NODES = (MODIFIER_NODES + [:case]).freeze
|
17
|
-
LOGICAL_OPERATOR_NODES = %i[and or].freeze
|
18
|
-
|
19
|
-
# http://phrogz.net/programmingruby/language.html#table_18.4
|
20
|
-
# Backtick is added last just to help editors parse this code.
|
21
|
-
OPERATOR_METHODS = %w(
|
22
|
-
| ^ & <=> == === =~ > >= < <= << >>
|
23
|
-
+ - * / % ** ~ +@ -@ !@ ~@ [] []= ! != !~
|
24
|
-
).map(&:to_sym).push(:'`').freeze
|
25
8
|
|
26
9
|
# Match literal regex characters, not including anchors, character
|
27
10
|
# classes, alternatives, groups, repetitions, references, etc
|
28
|
-
LITERAL_REGEX =
|
11
|
+
LITERAL_REGEX =
|
12
|
+
/[\w\s\-,"'!#%&<>=;:`~]|\\[^AbBdDgGhHkpPRwWXsSzZ0-9]/.freeze
|
29
13
|
|
30
14
|
module_function
|
31
15
|
|
32
|
-
def operator?(symbol)
|
33
|
-
OPERATOR_METHODS.include?(symbol)
|
34
|
-
end
|
35
|
-
|
36
16
|
def comment_line?(line_source)
|
37
17
|
line_source =~ /^\s*#/
|
38
18
|
end
|
@@ -8,11 +8,11 @@ module RuboCop
|
|
8
8
|
# A scope instance holds a scope node and variable entries.
|
9
9
|
class Scope
|
10
10
|
OUTER_SCOPE_CHILD_INDICES = {
|
11
|
-
defs:
|
11
|
+
defs: 0..0,
|
12
12
|
module: 0..0,
|
13
|
-
class:
|
13
|
+
class: 0..1,
|
14
14
|
sclass: 0..0,
|
15
|
-
block:
|
15
|
+
block: 0..0
|
16
16
|
}.freeze
|
17
17
|
|
18
18
|
attr_reader :node, :variables, :naked_top_level
|
@@ -4,8 +4,7 @@ module RuboCop
|
|
4
4
|
module Cop
|
5
5
|
class VariableForce
|
6
6
|
# A Variable represents existence of a local variable.
|
7
|
-
# This holds a variable declaration node
|
8
|
-
# and some states of the variable.
|
7
|
+
# This holds a variable declaration node and some states of the variable.
|
9
8
|
class Variable
|
10
9
|
VARIABLE_DECLARATION_TYPES =
|
11
10
|
(VARIABLE_ASSIGNMENT_TYPES + ARGUMENT_DECLARATION_TYPES).freeze
|
@@ -67,8 +66,8 @@ module RuboCop
|
|
67
66
|
# For more precise usage check, refer Assignment#used?.
|
68
67
|
#
|
69
68
|
# Once the variable is captured by a block, we have no idea
|
70
|
-
# when, where and how many times the block would be invoked
|
71
|
-
#
|
69
|
+
# when, where, and how many times the block would be invoked.
|
70
|
+
# This means we cannot track the usage of the variable.
|
72
71
|
# So we consider it's used to suppress false positive offenses.
|
73
72
|
def used?
|
74
73
|
@captured_by_block || referenced?
|
@@ -5,8 +5,8 @@ module RuboCop
|
|
5
5
|
class VariableForce
|
6
6
|
# A VariableTable manages the lifetime of all scopes and local variables
|
7
7
|
# in a program.
|
8
|
-
# This holds scopes as stack structure,
|
9
|
-
# variables to current scope and find local variables by considering
|
8
|
+
# This holds scopes as stack structure, provides a way to add local
|
9
|
+
# variables to current scope, and find local variables by considering
|
10
10
|
# variable visibility of the current scope.
|
11
11
|
class VariableTable
|
12
12
|
def initialize(hook_receiver = nil)
|
@@ -9,7 +9,7 @@ module RuboCop
|
|
9
9
|
# ## Creating Custom Formatter
|
10
10
|
#
|
11
11
|
# You can create a custom formatter by subclassing
|
12
|
-
# `RuboCop::Formatter::BaseFormatter` and overriding some methods
|
12
|
+
# `RuboCop::Formatter::BaseFormatter` and overriding some methods
|
13
13
|
# or by implementing all the methods by duck typing.
|
14
14
|
#
|
15
15
|
# ## Using Custom Formatter in Command Line
|
@@ -25,7 +25,7 @@ module RuboCop
|
|
25
25
|
# `Kernel.require`.
|
26
26
|
# If your custom formatter file is not in `$LOAD_PATH`,
|
27
27
|
# you need to specify the path as relative path prefixed with `./`
|
28
|
-
# explicitly
|
28
|
+
# explicitly or absolute path.
|
29
29
|
#
|
30
30
|
# ## Method Invocation Order
|
31
31
|
#
|
@@ -109,7 +109,7 @@ module RuboCop
|
|
109
109
|
|
110
110
|
# @api public
|
111
111
|
#
|
112
|
-
# Invoked after all files are inspected
|
112
|
+
# Invoked after all files are inspected or interrupted by user.
|
113
113
|
#
|
114
114
|
# @param inspected_files [Array(String)]
|
115
115
|
# the inspected file paths.
|
@@ -85,6 +85,7 @@ module RuboCop
|
|
85
85
|
def output_cop(cop_name, offense_count)
|
86
86
|
output.puts
|
87
87
|
cfg = self.class.config_to_allow_offenses[cop_name] || {}
|
88
|
+
set_max(cfg, offense_count)
|
88
89
|
|
89
90
|
# To avoid malformed YAML when potentially reading the config in
|
90
91
|
# #excludes, we use an output buffer and append it to the actual output
|
@@ -95,6 +96,19 @@ module RuboCop
|
|
95
96
|
output.puts(output_buffer.string)
|
96
97
|
end
|
97
98
|
|
99
|
+
def set_max(cfg, offense_count)
|
100
|
+
return unless cfg[:exclude_limit]
|
101
|
+
|
102
|
+
# In case auto_gen_only_exclude is set, only modify the maximum if the
|
103
|
+
# files are not excluded one by one.
|
104
|
+
if !@options[:auto_gen_only_exclude] || offense_count > @exclude_limit
|
105
|
+
cfg.merge! cfg[:exclude_limit]
|
106
|
+
end
|
107
|
+
|
108
|
+
# Remove already used exclude_limit.
|
109
|
+
cfg.reject! { |key| key == :exclude_limit }
|
110
|
+
end
|
111
|
+
|
98
112
|
def output_cop_comments(output_buffer, cfg, cop_name, offense_count)
|
99
113
|
if @show_offense_counts
|
100
114
|
output_buffer.puts "# Offense count: #{offense_count}"
|
@@ -116,7 +130,8 @@ module RuboCop
|
|
116
130
|
|
117
131
|
def cop_config_params(default_cfg, cfg)
|
118
132
|
default_cfg.keys -
|
119
|
-
%w[Description StyleGuide Reference Enabled Exclude
|
133
|
+
%w[Description StyleGuide Reference Enabled Exclude Safe
|
134
|
+
SafeAutoCorrect VersionAdded VersionChanged VersionRemoved] -
|
120
135
|
cfg.keys
|
121
136
|
end
|
122
137
|
|
@@ -9,20 +9,20 @@ module RuboCop
|
|
9
9
|
# which invoke same method of each formatters.
|
10
10
|
class FormatterSet < Array
|
11
11
|
BUILTIN_FORMATTERS_FOR_KEYS = {
|
12
|
-
'progress'
|
13
|
-
'simple'
|
14
|
-
'clang'
|
15
|
-
'fuubar'
|
16
|
-
'emacs'
|
17
|
-
'json'
|
18
|
-
'html'
|
19
|
-
'files'
|
20
|
-
'offenses'
|
21
|
-
'disabled'
|
22
|
-
'worst'
|
23
|
-
'tap'
|
24
|
-
'quiet'
|
25
|
-
'autogenconf'
|
12
|
+
'progress' => ProgressFormatter,
|
13
|
+
'simple' => SimpleTextFormatter,
|
14
|
+
'clang' => ClangStyleFormatter,
|
15
|
+
'fuubar' => FuubarStyleFormatter,
|
16
|
+
'emacs' => EmacsStyleFormatter,
|
17
|
+
'json' => JSONFormatter,
|
18
|
+
'html' => HTMLFormatter,
|
19
|
+
'files' => FileListFormatter,
|
20
|
+
'offenses' => OffenseCountFormatter,
|
21
|
+
'disabled' => DisabledLinesFormatter,
|
22
|
+
'worst' => WorstOffendersFormatter,
|
23
|
+
'tap' => TapFormatter,
|
24
|
+
'quiet' => QuietFormatter,
|
25
|
+
'autogenconf' => AutoGenConfigFormatter
|
26
26
|
}.freeze
|
27
27
|
|
28
28
|
FORMATTER_APIS = %i[started finished].freeze
|
@@ -72,11 +72,11 @@ module RuboCop
|
|
72
72
|
include TextUtil
|
73
73
|
|
74
74
|
SEVERITY_COLORS = {
|
75
|
-
refactor:
|
75
|
+
refactor: Color.new(0xED, 0x9C, 0x28, 1.0),
|
76
76
|
convention: Color.new(0xED, 0x9C, 0x28, 1.0),
|
77
|
-
warning:
|
78
|
-
error:
|
79
|
-
fatal:
|
77
|
+
warning: Color.new(0x96, 0x28, 0xEF, 1.0),
|
78
|
+
error: Color.new(0xD2, 0x32, 0x2D, 1.0),
|
79
|
+
fatal: Color.new(0xD2, 0x32, 0x2D, 1.0)
|
80
80
|
}.freeze
|
81
81
|
|
82
82
|
LOGO_IMAGE_PATH =
|
@@ -15,8 +15,8 @@ module RuboCop
|
|
15
15
|
super
|
16
16
|
@output_hash = {
|
17
17
|
metadata: metadata_hash,
|
18
|
-
files:
|
19
|
-
summary:
|
18
|
+
files: [],
|
19
|
+
summary: { offense_count: 0 }
|
20
20
|
}
|
21
21
|
end
|
22
22
|
|
@@ -37,16 +37,16 @@ module RuboCop
|
|
37
37
|
def metadata_hash
|
38
38
|
{
|
39
39
|
rubocop_version: RuboCop::Version::STRING,
|
40
|
-
ruby_engine:
|
41
|
-
ruby_version:
|
40
|
+
ruby_engine: RUBY_ENGINE,
|
41
|
+
ruby_version: RUBY_VERSION,
|
42
42
|
ruby_patchlevel: RUBY_PATCHLEVEL.to_s,
|
43
|
-
ruby_platform:
|
43
|
+
ruby_platform: RUBY_PLATFORM
|
44
44
|
}
|
45
45
|
end
|
46
46
|
|
47
47
|
def hash_for_file(file, offenses)
|
48
48
|
{
|
49
|
-
path:
|
49
|
+
path: smart_path(file),
|
50
50
|
offenses: offenses.map { |o| hash_for_offense(o) }
|
51
51
|
}
|
52
52
|
end
|
@@ -54,7 +54,7 @@ module RuboCop
|
|
54
54
|
def hash_for_offense(offense)
|
55
55
|
{
|
56
56
|
severity: offense.severity.name,
|
57
|
-
message:
|
57
|
+
message: offense.message,
|
58
58
|
cop_name: offense.cop_name,
|
59
59
|
corrected: offense.corrected?,
|
60
60
|
location: hash_for_location(offense)
|
@@ -64,15 +64,15 @@ module RuboCop
|
|
64
64
|
# TODO: Consider better solution for Offense#real_column.
|
65
65
|
def hash_for_location(offense)
|
66
66
|
{
|
67
|
-
start_line:
|
68
|
-
start_column:
|
69
|
-
last_line:
|
67
|
+
start_line: offense.line,
|
68
|
+
start_column: offense.real_column,
|
69
|
+
last_line: offense.last_line,
|
70
70
|
last_column: offense.last_column,
|
71
|
-
length:
|
71
|
+
length: offense.location.length,
|
72
72
|
# `line` and `column` exist for compatibility.
|
73
73
|
# Use `start_line` and `start_column` instead.
|
74
|
-
line:
|
75
|
-
column:
|
74
|
+
line: offense.line,
|
75
|
+
column: offense.real_column
|
76
76
|
}
|
77
77
|
end
|
78
78
|
end
|
@@ -13,11 +13,11 @@ module RuboCop
|
|
13
13
|
include PathUtil
|
14
14
|
|
15
15
|
COLOR_FOR_SEVERITY = {
|
16
|
-
refactor:
|
16
|
+
refactor: :yellow,
|
17
17
|
convention: :yellow,
|
18
|
-
warning:
|
19
|
-
error:
|
20
|
-
fatal:
|
18
|
+
warning: :magenta,
|
19
|
+
error: :red,
|
20
|
+
fatal: :red
|
21
21
|
}.freeze
|
22
22
|
|
23
23
|
def started(_target_files)
|
@@ -6,7 +6,7 @@ module RuboCop
|
|
6
6
|
# @abstract parent of three different magic comment handlers
|
7
7
|
class MagicComment
|
8
8
|
# @see https://git.io/vMC1C IRB's pattern for matching magic comment tokens
|
9
|
-
TOKEN = /[[:alnum:]\-_]
|
9
|
+
TOKEN = /[[:alnum:]\-_]+/.freeze
|
10
10
|
|
11
11
|
# Detect magic comment format and pass it to the appropriate wrapper.
|
12
12
|
#
|
@@ -129,7 +129,7 @@ module RuboCop
|
|
129
129
|
# @see https://www.gnu.org/software/emacs/manual/html_node/emacs/Specify-Coding.html
|
130
130
|
# @see https://git.io/vMCXh Emacs handling in Ruby's parse.y
|
131
131
|
class EmacsComment < EditorComment
|
132
|
-
FORMAT = /\-\*\-(.+)
|
132
|
+
FORMAT = /\-\*\-(.+)\-\*\-/.freeze
|
133
133
|
SEPARATOR = ';'.freeze
|
134
134
|
OPERATOR = ':'.freeze
|
135
135
|
|
@@ -140,7 +140,7 @@ module RuboCop
|
|
140
140
|
private
|
141
141
|
|
142
142
|
def extract_frozen_string_literal
|
143
|
-
match('
|
143
|
+
match('frozen[_-]string[_-]literal')
|
144
144
|
end
|
145
145
|
end
|
146
146
|
|
@@ -153,7 +153,7 @@ module RuboCop
|
|
153
153
|
#
|
154
154
|
# comment.encoding # => 'ascii-8bit'
|
155
155
|
class VimComment < EditorComment
|
156
|
-
FORMAT = /#\s*vim:\s*(.+)
|
156
|
+
FORMAT = /#\s*vim:\s*(.+)/.freeze
|
157
157
|
SEPARATOR = ', '.freeze
|
158
158
|
OPERATOR = '='.freeze
|
159
159
|
|