rubocop 0.59.2 → 0.60.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.
- 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
|
|