rubocop 0.88.0 → 0.89.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 +4 -4
- data/README.md +1 -1
- data/bin/rubocop-profile +1 -0
- data/config/default.yml +96 -16
- data/lib/rubocop.rb +16 -4
- data/lib/rubocop/cli/command/auto_genenerate_config.rb +1 -1
- data/lib/rubocop/cli/command/base.rb +1 -0
- data/lib/rubocop/cli/command/execute_runner.rb +1 -1
- data/lib/rubocop/cli/command/show_cops.rb +1 -1
- data/lib/rubocop/cli/command/version.rb +2 -2
- data/lib/rubocop/comment_config.rb +2 -2
- data/lib/rubocop/config.rb +19 -2
- data/lib/rubocop/config_loader.rb +1 -1
- data/lib/rubocop/config_loader_resolver.rb +3 -3
- data/lib/rubocop/config_obsoletion.rb +6 -1
- data/lib/rubocop/config_validator.rb +1 -3
- data/lib/rubocop/cop/base.rb +2 -2
- data/lib/rubocop/cop/commissioner.rb +0 -1
- data/lib/rubocop/cop/correctors/line_break_corrector.rb +3 -3
- data/lib/rubocop/cop/correctors/percent_literal_corrector.rb +1 -1
- data/lib/rubocop/cop/correctors/punctuation_corrector.rb +1 -1
- data/lib/rubocop/cop/correctors/unused_arg_corrector.rb +15 -18
- data/lib/rubocop/cop/force.rb +1 -0
- data/lib/rubocop/cop/gemspec/required_ruby_version.rb +32 -11
- data/lib/rubocop/cop/generator/configuration_injector.rb +2 -2
- data/lib/rubocop/cop/internal_affairs/method_name_equal.rb +4 -12
- data/lib/rubocop/cop/internal_affairs/node_destructuring.rb +1 -1
- data/lib/rubocop/cop/internal_affairs/offense_location_keyword.rb +8 -8
- data/lib/rubocop/cop/internal_affairs/redundant_location_argument.rb +10 -7
- data/lib/rubocop/cop/internal_affairs/redundant_message_argument.rb +7 -8
- data/lib/rubocop/cop/internal_affairs/useless_message_assertion.rb +2 -2
- data/lib/rubocop/cop/layout/block_alignment.rb +1 -1
- data/lib/rubocop/cop/layout/empty_lines.rb +0 -2
- data/lib/rubocop/cop/layout/extra_spacing.rb +9 -16
- data/lib/rubocop/cop/layout/first_method_argument_line_break.rb +1 -1
- data/lib/rubocop/cop/layout/heredoc_indentation.rb +2 -2
- data/lib/rubocop/cop/layout/indentation_style.rb +0 -2
- data/lib/rubocop/cop/layout/multiline_method_argument_line_breaks.rb +1 -1
- data/lib/rubocop/cop/layout/rescue_ensure_alignment.rb +0 -2
- data/lib/rubocop/cop/layout/space_around_method_call_operator.rb +9 -1
- data/lib/rubocop/cop/lint/ambiguous_block_association.rb +7 -4
- data/lib/rubocop/cop/lint/ambiguous_operator.rb +15 -10
- data/lib/rubocop/cop/lint/ambiguous_regexp_literal.rb +11 -13
- data/lib/rubocop/cop/lint/assignment_in_condition.rb +2 -2
- data/lib/rubocop/cop/lint/big_decimal_new.rb +10 -10
- data/lib/rubocop/cop/lint/binary_operator_with_identical_operands.rb +49 -0
- data/lib/rubocop/cop/lint/boolean_symbol.rb +16 -11
- data/lib/rubocop/cop/lint/circular_argument_reference.rb +1 -1
- data/lib/rubocop/cop/lint/constant_resolution.rb +1 -1
- data/lib/rubocop/cop/lint/debugger.rb +7 -1
- data/lib/rubocop/cop/lint/deprecated_class_methods.rb +9 -10
- data/lib/rubocop/cop/lint/deprecated_open_ssl_constant.rb +17 -13
- data/lib/rubocop/cop/lint/duplicate_case_condition.rb +1 -1
- data/lib/rubocop/cop/lint/duplicate_hash_key.rb +1 -1
- data/lib/rubocop/cop/lint/duplicate_methods.rb +7 -4
- data/lib/rubocop/cop/lint/duplicate_rescue_exception.rb +60 -0
- data/lib/rubocop/cop/lint/each_with_object_argument.rb +1 -1
- data/lib/rubocop/cop/lint/else_layout.rb +1 -1
- data/lib/rubocop/cop/lint/empty_conditional_body.rb +67 -0
- data/lib/rubocop/cop/lint/empty_ensure.rb +5 -5
- data/lib/rubocop/cop/lint/empty_expression.rb +2 -2
- data/lib/rubocop/cop/lint/empty_interpolation.rb +5 -6
- data/lib/rubocop/cop/lint/empty_when.rb +2 -2
- data/lib/rubocop/cop/lint/ensure_return.rb +27 -29
- data/lib/rubocop/cop/lint/erb_new_arguments.rb +11 -10
- data/lib/rubocop/cop/lint/flip_flop.rb +1 -1
- data/lib/rubocop/cop/lint/float_comparison.rb +93 -0
- data/lib/rubocop/cop/lint/float_out_of_range.rb +1 -1
- data/lib/rubocop/cop/lint/format_parameter_mismatch.rb +5 -4
- data/lib/rubocop/cop/lint/heredoc_method_call_position.rb +13 -14
- data/lib/rubocop/cop/lint/implicit_string_concatenation.rb +2 -2
- data/lib/rubocop/cop/lint/ineffective_access_modifier.rb +8 -8
- data/lib/rubocop/cop/lint/inherit_exception.rb +12 -7
- data/lib/rubocop/cop/lint/interpolation_check.rb +18 -15
- data/lib/rubocop/cop/lint/literal_as_condition.rb +4 -2
- data/lib/rubocop/cop/lint/literal_in_interpolation.rb +7 -7
- data/lib/rubocop/cop/lint/loop.rb +23 -2
- data/lib/rubocop/cop/lint/missing_cop_enable_directive.rb +6 -5
- data/lib/rubocop/cop/lint/missing_super.rb +99 -0
- data/lib/rubocop/cop/lint/mixed_regexp_capture_types.rb +1 -1
- data/lib/rubocop/cop/lint/multiple_comparison.rb +6 -9
- data/lib/rubocop/cop/lint/nested_method_definition.rb +1 -1
- data/lib/rubocop/cop/lint/nested_percent_literal.rb +1 -1
- data/lib/rubocop/cop/lint/next_without_accumulator.rb +1 -1
- data/lib/rubocop/cop/lint/non_deterministic_require_order.rb +27 -23
- data/lib/rubocop/cop/lint/non_local_exit_from_iterator.rb +2 -2
- data/lib/rubocop/cop/lint/number_conversion.rb +6 -9
- data/lib/rubocop/cop/lint/ordered_magic_comments.rb +11 -13
- data/lib/rubocop/cop/lint/out_of_range_regexp_ref.rb +61 -0
- data/lib/rubocop/cop/lint/parentheses_as_grouped_expression.rb +4 -10
- data/lib/rubocop/cop/lint/percent_string_array.rb +13 -12
- data/lib/rubocop/cop/lint/percent_symbol_array.rb +13 -12
- data/lib/rubocop/cop/lint/raise_exception.rb +12 -10
- data/lib/rubocop/cop/lint/rand_one.rb +2 -2
- data/lib/rubocop/cop/lint/redundant_cop_disable_directive.rb +2 -2
- data/lib/rubocop/cop/lint/redundant_cop_enable_directive.rb +7 -11
- data/lib/rubocop/cop/lint/redundant_require_statement.rb +4 -7
- data/lib/rubocop/cop/lint/redundant_splat_expansion.rb +13 -9
- data/lib/rubocop/cop/lint/redundant_string_coercion.rb +6 -13
- data/lib/rubocop/cop/lint/redundant_with_index.rb +11 -14
- data/lib/rubocop/cop/lint/redundant_with_object.rb +11 -14
- data/lib/rubocop/cop/lint/regexp_as_condition.rb +4 -6
- data/lib/rubocop/cop/lint/require_parentheses.rb +2 -2
- data/lib/rubocop/cop/lint/rescue_exception.rb +1 -1
- data/lib/rubocop/cop/lint/rescue_type.rb +8 -8
- data/lib/rubocop/cop/lint/return_in_void_context.rb +2 -4
- data/lib/rubocop/cop/lint/safe_navigation_chain.rb +3 -6
- data/lib/rubocop/cop/lint/safe_navigation_consistency.rb +14 -10
- data/lib/rubocop/cop/lint/safe_navigation_with_empty.rb +7 -7
- data/lib/rubocop/cop/lint/script_permission.rb +10 -7
- data/lib/rubocop/cop/lint/self_assignment.rb +78 -0
- data/lib/rubocop/cop/lint/send_with_mixin_argument.rb +5 -11
- data/lib/rubocop/cop/lint/shadowed_argument.rb +3 -3
- data/lib/rubocop/cop/lint/shadowed_exception.rb +2 -2
- data/lib/rubocop/cop/lint/shadowing_outer_local_variable.rb +3 -3
- data/lib/rubocop/cop/lint/struct_new_override.rb +1 -1
- data/lib/rubocop/cop/lint/suppressed_exception.rb +4 -7
- data/lib/rubocop/cop/lint/to_json.rb +4 -6
- data/lib/rubocop/cop/lint/top_level_return_with_argument.rb +34 -0
- data/lib/rubocop/cop/lint/underscore_prefixed_variable_name.rb +4 -4
- data/lib/rubocop/cop/lint/unified_integer.rb +4 -6
- data/lib/rubocop/cop/lint/unreachable_code.rb +1 -1
- data/lib/rubocop/cop/lint/unreachable_loop.rb +174 -0
- data/lib/rubocop/cop/lint/unused_block_argument.rb +8 -3
- data/lib/rubocop/cop/lint/unused_method_argument.rb +8 -3
- data/lib/rubocop/cop/lint/uri_escape_unescape.rb +1 -1
- data/lib/rubocop/cop/lint/uri_regexp.rb +11 -31
- data/lib/rubocop/cop/lint/useless_access_modifier.rb +25 -15
- data/lib/rubocop/cop/lint/useless_assignment.rb +4 -4
- data/lib/rubocop/cop/lint/useless_else_without_rescue.rb +6 -15
- data/lib/rubocop/cop/lint/useless_setter_call.rb +4 -6
- data/lib/rubocop/cop/lint/void.rb +3 -7
- data/lib/rubocop/cop/metrics/abc_size.rb +1 -1
- data/lib/rubocop/cop/metrics/block_length.rb +2 -2
- data/lib/rubocop/cop/metrics/block_nesting.rb +2 -2
- data/lib/rubocop/cop/metrics/class_length.rb +2 -2
- data/lib/rubocop/cop/metrics/cyclomatic_complexity.rb +2 -1
- data/lib/rubocop/cop/metrics/method_length.rb +2 -2
- data/lib/rubocop/cop/metrics/module_length.rb +2 -2
- data/lib/rubocop/cop/metrics/parameter_lists.rb +2 -6
- data/lib/rubocop/cop/metrics/perceived_complexity.rb +7 -8
- data/lib/rubocop/cop/metrics/utils/abc_size_calculator.rb +48 -5
- data/lib/rubocop/cop/metrics/utils/code_length_calculator.rb +52 -24
- data/lib/rubocop/cop/metrics/utils/repeated_csend_discount.rb +37 -0
- data/lib/rubocop/cop/migration/department_name.rb +13 -15
- data/lib/rubocop/cop/mixin/array_min_size.rb +1 -1
- data/lib/rubocop/cop/mixin/check_line_breakable.rb +1 -1
- data/lib/rubocop/cop/mixin/code_length.rb +22 -5
- data/lib/rubocop/cop/mixin/enforce_superclass.rb +2 -0
- data/lib/rubocop/cop/mixin/method_complexity.rb +10 -2
- data/lib/rubocop/cop/mixin/statement_modifier.rb +35 -6
- data/lib/rubocop/cop/mixin/surrounding_space.rb +0 -25
- data/lib/rubocop/cop/mixin/uncommunicative_name.rb +6 -13
- data/lib/rubocop/cop/mixin/unused_argument.rb +4 -6
- data/lib/rubocop/cop/naming/accessor_method_name.rb +4 -2
- data/lib/rubocop/cop/naming/ascii_identifiers.rb +3 -3
- data/lib/rubocop/cop/naming/binary_operator_parameter_name.rb +1 -1
- data/lib/rubocop/cop/naming/block_parameter_name.rb +1 -1
- data/lib/rubocop/cop/naming/class_and_module_camel_case.rb +2 -2
- data/lib/rubocop/cop/naming/constant_name.rb +2 -2
- data/lib/rubocop/cop/naming/file_name.rb +3 -3
- data/lib/rubocop/cop/naming/heredoc_delimiter_case.rb +2 -2
- data/lib/rubocop/cop/naming/heredoc_delimiter_naming.rb +2 -2
- data/lib/rubocop/cop/naming/memoized_instance_variable_name.rb +2 -2
- data/lib/rubocop/cop/naming/method_parameter_name.rb +1 -1
- data/lib/rubocop/cop/naming/predicate_name.rb +3 -5
- data/lib/rubocop/cop/naming/rescued_exceptions_variable_name.rb +12 -11
- data/lib/rubocop/cop/registry.rb +3 -3
- data/lib/rubocop/cop/security/eval.rb +2 -2
- data/lib/rubocop/cop/security/json_load.rb +6 -8
- data/lib/rubocop/cop/security/marshal_load.rb +2 -4
- data/lib/rubocop/cop/security/open.rb +2 -2
- data/lib/rubocop/cop/security/yaml_load.rb +6 -6
- data/lib/rubocop/cop/style/access_modifier_declarations.rb +11 -1
- data/lib/rubocop/cop/style/accessor_grouping.rb +9 -7
- data/lib/rubocop/cop/style/alias.rb +7 -3
- data/lib/rubocop/cop/style/bisected_attr_accessor.rb +0 -2
- data/lib/rubocop/cop/style/case_equality.rb +22 -3
- data/lib/rubocop/cop/style/case_like_if.rb +2 -2
- data/lib/rubocop/cop/style/colon_method_call.rb +3 -3
- data/lib/rubocop/cop/style/conditional_assignment.rb +11 -2
- data/lib/rubocop/cop/style/documentation.rb +4 -4
- data/lib/rubocop/cop/style/each_with_object.rb +0 -2
- data/lib/rubocop/cop/style/empty_method.rb +5 -5
- data/lib/rubocop/cop/style/eval_with_location.rb +4 -0
- data/lib/rubocop/cop/style/expand_path_arguments.rb +4 -0
- data/lib/rubocop/cop/style/explicit_block_argument.rb +102 -0
- data/lib/rubocop/cop/style/format_string.rb +4 -0
- data/lib/rubocop/cop/style/format_string_token.rb +1 -0
- data/lib/rubocop/cop/style/global_std_stream.rb +65 -0
- data/lib/rubocop/cop/style/guard_clause.rb +2 -2
- data/lib/rubocop/cop/style/hash_as_last_array_item.rb +8 -1
- data/lib/rubocop/cop/style/hash_syntax.rb +6 -3
- data/lib/rubocop/cop/style/identical_conditional_branches.rb +1 -1
- data/lib/rubocop/cop/style/if_inside_else.rb +1 -1
- data/lib/rubocop/cop/style/if_unless_modifier.rb +0 -20
- data/lib/rubocop/cop/style/infinite_loop.rb +1 -1
- data/lib/rubocop/cop/style/inverse_methods.rb +2 -3
- data/lib/rubocop/cop/style/method_call_with_args_parentheses/omit_parentheses.rb +5 -0
- data/lib/rubocop/cop/style/method_call_without_args_parentheses.rb +1 -1
- data/lib/rubocop/cop/style/missing_respond_to_missing.rb +9 -2
- data/lib/rubocop/cop/style/multiline_memoization.rb +2 -2
- data/lib/rubocop/cop/style/multiline_method_signature.rb +1 -1
- data/lib/rubocop/cop/style/numeric_predicate.rb +4 -0
- data/lib/rubocop/cop/style/optional_boolean_parameter.rb +42 -0
- data/lib/rubocop/cop/style/parallel_assignment.rb +2 -2
- data/lib/rubocop/cop/style/percent_literal_delimiters.rb +2 -2
- data/lib/rubocop/cop/style/random_with_offset.rb +1 -0
- data/lib/rubocop/cop/style/redundant_condition.rb +15 -3
- data/lib/rubocop/cop/style/redundant_exception.rb +4 -0
- data/lib/rubocop/cop/style/redundant_regexp_escape.rb +9 -9
- data/lib/rubocop/cop/style/redundant_sort.rb +25 -10
- data/lib/rubocop/cop/style/signal_exception.rb +2 -0
- data/lib/rubocop/cop/style/single_argument_dig.rb +54 -0
- data/lib/rubocop/cop/style/string_concatenation.rb +92 -0
- data/lib/rubocop/cop/style/struct_inheritance.rb +1 -1
- data/lib/rubocop/cop/style/symbol_array.rb +1 -1
- data/lib/rubocop/cop/style/symbol_proc.rb +1 -1
- data/lib/rubocop/cop/style/trailing_method_end_statement.rb +1 -1
- data/lib/rubocop/cop/style/zero_length_predicate.rb +10 -6
- data/lib/rubocop/cop/team.rb +1 -1
- data/lib/rubocop/cop/tokens_util.rb +84 -0
- data/lib/rubocop/cop/util.rb +1 -13
- data/lib/rubocop/cop/variable_force.rb +0 -2
- data/lib/rubocop/cop/variable_force/branch.rb +1 -0
- data/lib/rubocop/cop/variable_force/variable.rb +2 -2
- data/lib/rubocop/cops_documentation_generator.rb +282 -0
- data/lib/rubocop/error.rb +1 -0
- data/lib/rubocop/formatter/formatter_set.rb +1 -0
- data/lib/rubocop/path_util.rb +19 -4
- data/lib/rubocop/rake_task.rb +1 -0
- data/lib/rubocop/rspec/expect_offense.rb +1 -1
- data/lib/rubocop/target_finder.rb +12 -9
- data/lib/rubocop/version.rb +2 -2
- metadata +19 -6
- data/lib/rubocop/cop/lint/useless_comparison.rb +0 -28
- data/lib/rubocop/cop/mixin/parser_diagnostic.rb +0 -37
- data/lib/rubocop/cop/mixin/too_many_lines.rb +0 -25
- data/lib/rubocop/cop/style/method_missing_super.rb +0 -34
@@ -7,10 +7,6 @@ module RuboCop
|
|
7
7
|
module UnusedArgument
|
8
8
|
extend NodePattern::Macros
|
9
9
|
|
10
|
-
def join_force?(force_class)
|
11
|
-
force_class == VariableForce
|
12
|
-
end
|
13
|
-
|
14
10
|
def after_leaving_scope(scope, _variable_table)
|
15
11
|
scope.variables.each_value do |variable|
|
16
12
|
check_argument(variable)
|
@@ -24,8 +20,10 @@ module RuboCop
|
|
24
20
|
return if variable.referenced?
|
25
21
|
|
26
22
|
message = message(variable)
|
27
|
-
|
28
|
-
|
23
|
+
|
24
|
+
add_offense(variable.declaration_node.loc.name, message: message) do |corrector|
|
25
|
+
autocorrect(corrector, variable.declaration_node)
|
26
|
+
end
|
29
27
|
end
|
30
28
|
end
|
31
29
|
end
|
@@ -21,14 +21,16 @@ module RuboCop
|
|
21
21
|
# # good
|
22
22
|
# def attribute
|
23
23
|
# end
|
24
|
-
class AccessorMethodName <
|
24
|
+
class AccessorMethodName < Base
|
25
25
|
MSG_READER = 'Do not prefix reader method names with `get_`.'
|
26
26
|
MSG_WRITER = 'Do not prefix writer method names with `set_`.'
|
27
27
|
|
28
28
|
def on_def(node)
|
29
29
|
return unless bad_reader_name?(node) || bad_writer_name?(node)
|
30
30
|
|
31
|
-
|
31
|
+
message = message(node)
|
32
|
+
|
33
|
+
add_offense(node.loc.name, message: message)
|
32
34
|
end
|
33
35
|
alias on_defs on_def
|
34
36
|
|
@@ -52,18 +52,18 @@ module RuboCop
|
|
52
52
|
#
|
53
53
|
# FOÖ = "foo"
|
54
54
|
#
|
55
|
-
class AsciiIdentifiers <
|
55
|
+
class AsciiIdentifiers < Base
|
56
56
|
include RangeHelp
|
57
57
|
|
58
58
|
IDENTIFIER_MSG = 'Use only ascii symbols in identifiers.'
|
59
59
|
CONSTANT_MSG = 'Use only ascii symbols in constants.'
|
60
60
|
|
61
|
-
def
|
61
|
+
def on_new_investigation
|
62
62
|
processed_source.each_token do |token|
|
63
63
|
next if !should_check?(token) || token.text.ascii_only?
|
64
64
|
|
65
65
|
message = token.type == :tIDENTIFIER ? IDENTIFIER_MSG : CONSTANT_MSG
|
66
|
-
add_offense(
|
66
|
+
add_offense(first_offense_range(token), message: message)
|
67
67
|
end
|
68
68
|
end
|
69
69
|
|
@@ -26,7 +26,7 @@ module RuboCop
|
|
26
26
|
# end
|
27
27
|
# class module_parent::MyModule
|
28
28
|
# end
|
29
|
-
class ClassAndModuleCamelCase <
|
29
|
+
class ClassAndModuleCamelCase < Base
|
30
30
|
MSG = 'Use CamelCase for classes and modules.'
|
31
31
|
|
32
32
|
def on_class(node)
|
@@ -34,7 +34,7 @@ module RuboCop
|
|
34
34
|
name = node.loc.name.source.gsub(allowed, '')
|
35
35
|
return unless /_/.match?(name)
|
36
36
|
|
37
|
-
add_offense(node
|
37
|
+
add_offense(node.loc.name)
|
38
38
|
end
|
39
39
|
alias on_module on_class
|
40
40
|
end
|
@@ -17,7 +17,7 @@ module RuboCop
|
|
17
17
|
#
|
18
18
|
# # good
|
19
19
|
# INCH_IN_CM = 2.54
|
20
|
-
class ConstantName <
|
20
|
+
class ConstantName < Base
|
21
21
|
MSG = 'Use SCREAMING_SNAKE_CASE for constants.'
|
22
22
|
# Use POSIX character classes, so we allow accented characters rather
|
23
23
|
# than just standard ASCII characters
|
@@ -47,7 +47,7 @@ module RuboCop
|
|
47
47
|
return if allowed_assignment?(value)
|
48
48
|
return if SNAKE_CASE.match?(const_name)
|
49
49
|
|
50
|
-
add_offense(node
|
50
|
+
add_offense(node.loc.name)
|
51
51
|
end
|
52
52
|
|
53
53
|
private
|
@@ -24,7 +24,7 @@ module RuboCop
|
|
24
24
|
# lib/layout_manager.rb
|
25
25
|
#
|
26
26
|
# anything/using_snake_case.rake
|
27
|
-
class FileName <
|
27
|
+
class FileName < Base
|
28
28
|
include RangeHelp
|
29
29
|
|
30
30
|
MSG_SNAKE_CASE = 'The name of this source file (`%<basename>s`) ' \
|
@@ -35,13 +35,13 @@ module RuboCop
|
|
35
35
|
|
36
36
|
SNAKE_CASE = /^[\da-z_.?!]+$/.freeze
|
37
37
|
|
38
|
-
def
|
38
|
+
def on_new_investigation
|
39
39
|
file_path = processed_source.file_path
|
40
40
|
return if config.file_to_exclude?(file_path) ||
|
41
41
|
config.allowed_camel_case_file?(file_path)
|
42
42
|
|
43
43
|
for_bad_filename(file_path) do |range, msg|
|
44
|
-
add_offense(
|
44
|
+
add_offense(range, message: msg)
|
45
45
|
end
|
46
46
|
end
|
47
47
|
|
@@ -27,7 +27,7 @@ module RuboCop
|
|
27
27
|
# <<-sql
|
28
28
|
# SELECT * FROM foo
|
29
29
|
# sql
|
30
|
-
class HeredocDelimiterCase <
|
30
|
+
class HeredocDelimiterCase < Base
|
31
31
|
include Heredoc
|
32
32
|
include ConfigurableEnforcedStyle
|
33
33
|
|
@@ -36,7 +36,7 @@ module RuboCop
|
|
36
36
|
def on_heredoc(node)
|
37
37
|
return if correct_case_delimiters?(node)
|
38
38
|
|
39
|
-
add_offense(node
|
39
|
+
add_offense(node.loc.heredoc_end)
|
40
40
|
end
|
41
41
|
|
42
42
|
private
|
@@ -23,7 +23,7 @@ module RuboCop
|
|
23
23
|
# <<-EOS
|
24
24
|
# SELECT * FROM foo
|
25
25
|
# EOS
|
26
|
-
class HeredocDelimiterNaming <
|
26
|
+
class HeredocDelimiterNaming < Base
|
27
27
|
include Heredoc
|
28
28
|
|
29
29
|
MSG = 'Use meaningful heredoc delimiters.'
|
@@ -31,7 +31,7 @@ module RuboCop
|
|
31
31
|
def on_heredoc(node)
|
32
32
|
return if meaningful_delimiters?(node)
|
33
33
|
|
34
|
-
add_offense(node
|
34
|
+
add_offense(node.loc.heredoc_end)
|
35
35
|
end
|
36
36
|
|
37
37
|
private
|
@@ -84,7 +84,7 @@ module RuboCop
|
|
84
84
|
# def _foo
|
85
85
|
# @_foo ||= calculate_expensive_thing
|
86
86
|
# end
|
87
|
-
class MemoizedInstanceVariableName <
|
87
|
+
class MemoizedInstanceVariableName < Base
|
88
88
|
include ConfigurableEnforcedStyle
|
89
89
|
|
90
90
|
MSG = 'Memoized variable `%<var>s` does not match ' \
|
@@ -115,7 +115,7 @@ module RuboCop
|
|
115
115
|
suggested_var: suggested_var(method_name),
|
116
116
|
method: method_name
|
117
117
|
)
|
118
|
-
add_offense(
|
118
|
+
add_offense(ivar_assign.source_range, message: msg)
|
119
119
|
end
|
120
120
|
alias on_defs on_def
|
121
121
|
|
@@ -27,7 +27,7 @@ module RuboCop
|
|
27
27
|
# # good
|
28
28
|
# def value?
|
29
29
|
# end
|
30
|
-
class PredicateName <
|
30
|
+
class PredicateName < Base
|
31
31
|
include AllowedMethods
|
32
32
|
|
33
33
|
def_node_matcher :dynamic_method_define, <<~PATTERN
|
@@ -42,8 +42,7 @@ module RuboCop
|
|
42
42
|
next if allowed_method_name?(method_name.to_s, prefix)
|
43
43
|
|
44
44
|
add_offense(
|
45
|
-
node,
|
46
|
-
location: node.first_argument.loc.expression,
|
45
|
+
node.first_argument.loc.expression,
|
47
46
|
message: message(method_name,
|
48
47
|
expected_name(method_name.to_s, prefix))
|
49
48
|
)
|
@@ -58,8 +57,7 @@ module RuboCop
|
|
58
57
|
next if allowed_method_name?(method_name, prefix)
|
59
58
|
|
60
59
|
add_offense(
|
61
|
-
node,
|
62
|
-
location: :name,
|
60
|
+
node.loc.name,
|
63
61
|
message: message(method_name, expected_name(method_name, prefix))
|
64
62
|
)
|
65
63
|
end
|
@@ -53,22 +53,23 @@ module RuboCop
|
|
53
53
|
# # do something
|
54
54
|
# end
|
55
55
|
#
|
56
|
-
class RescuedExceptionsVariableName <
|
56
|
+
class RescuedExceptionsVariableName < Base
|
57
|
+
extend AutoCorrector
|
58
|
+
|
57
59
|
MSG = 'Use `%<preferred>s` instead of `%<bad>s`.'
|
58
60
|
|
59
61
|
def on_resbody(node)
|
60
|
-
|
61
|
-
return unless
|
62
|
-
return if preferred_name(name).to_sym == name
|
62
|
+
offending_name = variable_name(node)
|
63
|
+
return unless offending_name
|
63
64
|
|
64
|
-
|
65
|
-
|
65
|
+
preferred_name = preferred_name(offending_name)
|
66
|
+
return if preferred_name.to_sym == offending_name
|
67
|
+
|
68
|
+
range = offense_range(node)
|
69
|
+
message = message(node)
|
66
70
|
|
67
|
-
|
68
|
-
|
69
|
-
offending_name = variable_name(node)
|
70
|
-
preferred_name = preferred_name(offending_name)
|
71
|
-
corrector.replace(offense_range(node), preferred_name)
|
71
|
+
add_offense(range, message: message) do |corrector|
|
72
|
+
corrector.replace(range, preferred_name)
|
72
73
|
|
73
74
|
node.body&.each_descendant(:lvar) do |var|
|
74
75
|
next unless var.children.first == offending_name
|
data/lib/rubocop/cop/registry.rb
CHANGED
@@ -100,9 +100,9 @@ module RuboCop
|
|
100
100
|
# @note Emits a warning if the provided name has an incorrect namespace
|
101
101
|
#
|
102
102
|
# @return [String] Qualified cop name
|
103
|
-
def qualified_cop_name(name, path,
|
103
|
+
def qualified_cop_name(name, path, warn: true)
|
104
104
|
badge = Badge.parse(name)
|
105
|
-
print_warning(name, path) if
|
105
|
+
print_warning(name, path) if warn && department_missing?(badge, name)
|
106
106
|
return name if registered?(badge)
|
107
107
|
|
108
108
|
potential_badges = qualify_badge(badge)
|
@@ -149,7 +149,7 @@ module RuboCop
|
|
149
149
|
@registry.size
|
150
150
|
end
|
151
151
|
|
152
|
-
def enabled(config, only = [], only_safe
|
152
|
+
def enabled(config, only = [], only_safe: false)
|
153
153
|
select do |cop|
|
154
154
|
only.include?(cop.cop_name) || enabled?(cop, config, only_safe)
|
155
155
|
end
|
@@ -11,7 +11,7 @@ module RuboCop
|
|
11
11
|
#
|
12
12
|
# eval(something)
|
13
13
|
# binding.eval(something)
|
14
|
-
class Eval <
|
14
|
+
class Eval < Base
|
15
15
|
MSG = 'The use of `eval` is a serious security risk.'
|
16
16
|
|
17
17
|
def_node_matcher :eval?, <<~PATTERN
|
@@ -22,7 +22,7 @@ module RuboCop
|
|
22
22
|
eval?(node) do |code|
|
23
23
|
return if code.dstr_type? && code.recursive_literal?
|
24
24
|
|
25
|
-
add_offense(node
|
25
|
+
add_offense(node.loc.selector)
|
26
26
|
end
|
27
27
|
end
|
28
28
|
end
|
@@ -22,7 +22,9 @@ module RuboCop
|
|
22
22
|
# # good
|
23
23
|
# JSON.parse("{}")
|
24
24
|
#
|
25
|
-
class JSONLoad <
|
25
|
+
class JSONLoad < Base
|
26
|
+
extend AutoCorrector
|
27
|
+
|
26
28
|
MSG = 'Prefer `JSON.parse` over `JSON.%<method>s`.'
|
27
29
|
|
28
30
|
def_node_matcher :json_load, <<~PATTERN
|
@@ -31,15 +33,11 @@ module RuboCop
|
|
31
33
|
|
32
34
|
def on_send(node)
|
33
35
|
json_load(node) do |method|
|
34
|
-
add_offense(node,
|
35
|
-
|
36
|
-
|
36
|
+
add_offense(node.loc.selector, message: format(MSG, method: method)) do |corrector|
|
37
|
+
corrector.replace(node.loc.selector, 'parse')
|
38
|
+
end
|
37
39
|
end
|
38
40
|
end
|
39
|
-
|
40
|
-
def autocorrect(node)
|
41
|
-
->(corrector) { corrector.replace(node.loc.selector, 'parse') }
|
42
|
-
end
|
43
41
|
end
|
44
42
|
end
|
45
43
|
end
|
@@ -18,7 +18,7 @@ module RuboCop
|
|
18
18
|
# # okish - deep copy hack
|
19
19
|
# Marshal.load(Marshal.dump({}))
|
20
20
|
#
|
21
|
-
class MarshalLoad <
|
21
|
+
class MarshalLoad < Base
|
22
22
|
MSG = 'Avoid using `Marshal.%<method>s`.'
|
23
23
|
|
24
24
|
def_node_matcher :marshal_load, <<~PATTERN
|
@@ -28,9 +28,7 @@ module RuboCop
|
|
28
28
|
|
29
29
|
def on_send(node)
|
30
30
|
marshal_load(node) do |method|
|
31
|
-
add_offense(node,
|
32
|
-
location: :selector,
|
33
|
-
message: format(MSG, method: method))
|
31
|
+
add_offense(node.loc.selector, message: format(MSG, method: method))
|
34
32
|
end
|
35
33
|
end
|
36
34
|
end
|
@@ -19,7 +19,7 @@ module RuboCop
|
|
19
19
|
# File.open(something)
|
20
20
|
# IO.popen(something)
|
21
21
|
# URI.parse(something).open
|
22
|
-
class Open <
|
22
|
+
class Open < Base
|
23
23
|
MSG = 'The use of `Kernel#open` is a serious security risk.'
|
24
24
|
|
25
25
|
def_node_matcher :open?, <<~PATTERN
|
@@ -30,7 +30,7 @@ module RuboCop
|
|
30
30
|
open?(node) do |code|
|
31
31
|
return if safe?(code)
|
32
32
|
|
33
|
-
add_offense(node
|
33
|
+
add_offense(node.loc.selector)
|
34
34
|
end
|
35
35
|
end
|
36
36
|
|
@@ -15,7 +15,9 @@ module RuboCop
|
|
15
15
|
# YAML.safe_load("--- foo")
|
16
16
|
# YAML.dump("foo")
|
17
17
|
#
|
18
|
-
class YAMLLoad <
|
18
|
+
class YAMLLoad < Base
|
19
|
+
extend AutoCorrector
|
20
|
+
|
19
21
|
MSG = 'Prefer using `YAML.safe_load` over `YAML.load`.'
|
20
22
|
|
21
23
|
def_node_matcher :yaml_load, <<~PATTERN
|
@@ -24,13 +26,11 @@ module RuboCop
|
|
24
26
|
|
25
27
|
def on_send(node)
|
26
28
|
yaml_load(node) do
|
27
|
-
add_offense(node
|
29
|
+
add_offense(node.loc.selector) do |corrector|
|
30
|
+
corrector.replace(node.loc.selector, 'safe_load')
|
31
|
+
end
|
28
32
|
end
|
29
33
|
end
|
30
|
-
|
31
|
-
def autocorrect(node)
|
32
|
-
->(corrector) { corrector.replace(node.loc.selector, 'safe_load') }
|
33
|
-
end
|
34
34
|
end
|
35
35
|
end
|
36
36
|
end
|
@@ -65,6 +65,8 @@ module RuboCop
|
|
65
65
|
class AccessModifierDeclarations < Cop
|
66
66
|
include ConfigurableEnforcedStyle
|
67
67
|
|
68
|
+
ACCESS_MODIFIERS = %i[private protected public module_function].to_set.freeze
|
69
|
+
|
68
70
|
GROUP_STYLE_MESSAGE = [
|
69
71
|
'`%<access_modifier>s` should not be',
|
70
72
|
'inlined in method definitions.'
|
@@ -80,7 +82,7 @@ module RuboCop
|
|
80
82
|
PATTERN
|
81
83
|
|
82
84
|
def on_send(node)
|
83
|
-
return unless
|
85
|
+
return unless access_modifier?(node)
|
84
86
|
return if node.parent.pair_type?
|
85
87
|
return if cop_config['AllowModifiersOnSymbols'] &&
|
86
88
|
access_modifier_with_symbol?(node)
|
@@ -96,6 +98,14 @@ module RuboCop
|
|
96
98
|
|
97
99
|
private
|
98
100
|
|
101
|
+
def access_modifier?(node)
|
102
|
+
maybe_access_modifier?(node) && node.access_modifier?
|
103
|
+
end
|
104
|
+
|
105
|
+
def maybe_access_modifier?(node)
|
106
|
+
!node.receiver && ACCESS_MODIFIERS.include?(node.method_name)
|
107
|
+
end
|
108
|
+
|
99
109
|
def offense?(node)
|
100
110
|
(group_style? && access_modifier_is_inlined?(node)) ||
|
101
111
|
(inline_style? && access_modifier_is_not_inlined?(node))
|
@@ -33,6 +33,7 @@ module RuboCop
|
|
33
33
|
#
|
34
34
|
class AccessorGrouping < Cop
|
35
35
|
include ConfigurableEnforcedStyle
|
36
|
+
include RangeHelp
|
36
37
|
include VisibilityHelp
|
37
38
|
|
38
39
|
GROUPED_MSG = 'Group together all `%<accessor>s` attributes.'
|
@@ -52,7 +53,12 @@ module RuboCop
|
|
52
53
|
|
53
54
|
def autocorrect(node)
|
54
55
|
lambda do |corrector|
|
55
|
-
|
56
|
+
if (preferred_accessors = preferred_accessors(node))
|
57
|
+
corrector.replace(node, preferred_accessors)
|
58
|
+
else
|
59
|
+
range = range_with_surrounding_space(range: node.loc.expression, side: :left)
|
60
|
+
corrector.remove(range)
|
61
|
+
end
|
56
62
|
end
|
57
63
|
end
|
58
64
|
|
@@ -110,14 +116,10 @@ module RuboCop
|
|
110
116
|
format(msg, accessor: send_node.method_name)
|
111
117
|
end
|
112
118
|
|
113
|
-
def
|
119
|
+
def preferred_accessors(node)
|
114
120
|
if grouped_style?
|
115
121
|
accessors = sibling_accessors(node)
|
116
|
-
if node == accessors.first
|
117
|
-
group_accessors(node, accessors)
|
118
|
-
else
|
119
|
-
''
|
120
|
-
end
|
122
|
+
group_accessors(node, accessors) if node == accessors.first
|
121
123
|
else
|
122
124
|
separate_accessors(node)
|
123
125
|
end
|